Hyunn

[KT AIVLE School] AI트랙 3주차 후기 (미니프로젝트, 웹크롤링) 본문

Study/KT AIVLE School

[KT AIVLE School] AI트랙 3주차 후기 (미니프로젝트, 웹크롤링)

Ravié 2024. 3. 10. 00:27
728x90
반응형

3주차 일정

03.04 ~ 06: 1차 미니프로젝트
03.07 ~ 08: 웹 크롤링

 

03.04 - 1차 미니프로젝트(1)

에이블스쿨을 시작하고 첫 미니프로젝트 시작날이다. 첫 미니프로젝트(미프)는 팀별로 수행하는 것이 아닌, 개인별로 과제를 수행하는 형식으로 진행되었다.

과제 주제는 서울시에 버스 노선을 증설하려고 하는데, 가장 적절한 자치구를 데이터를 기반으로 선정하는 것이었다. 개인별로 데이터전처리 과정을 거치고 시각화하여 다음 날 팀원과 토론하며 인사이트를 도출하는 과정이었다.

총 4개의 주피터 파일이 제공이되었고 4개의 데이터가 csv파일 형태로 제공되었다. 데이터는 "서울 열린데이터"( https://data.seoul.go.kr/)에서 가져왔다. 데이터 종류는 구별 버스정류장 데이터, 구별 유동인구 분석, 구별 주민등록인구 데이터, 구별 업종등록 데이터였다.

 

구별 버스 정류장 분석

먼저, 구별 버스 정류장 데이터터에 columns값을 조회했더니 불필요한 정보는 삭제하고 버스정류장 ARS번호를 이용해 자치구별로 나눠보았다.

 

구별 유동인구 분석

블로그 모든 그래프를 첨부하지는 않았지만, 구별 유동인구 데이터를 활용해 자치구별로 평균 이동 시간, 평균 이동 인구, 총 이동 시간, 총 이동 인구 등을 구해보았다. 

촣 이동 시간
총 이동 인구

 

위 결과를 보고 다음과 같은 인사이트를 얻었고, 추론을 해보았다.

1. 도착 자치구 기준으로 평균 이동시간은 비슷하지만 강동구, 송파구 순으로 이동시간이 길다.

2. 도착 자치구가 많은 순은 강남구, 송파구, 서초구 순이다. 즉, 어디서 출발했는지는 모르지만 강남구에 가장 많이 유입되었다. 하지만 유입된 이유가 환승인지, 도착지인지, 거주지인지는 알 수 없다.

3. 일부 자치구(도봉구, 광진구, 강동구 구로구 등)에서는 평균 이동시간과 총 이동시간이 차이가 많다. 추가로 분석해봐야 할 사항이라고 생각된다.

 

주민등록인구 분석

서울시 자치구의 인구분포를 살펴보았다.

 

위 차트를 통해,

1. 송파구에 가장 많은 인구가 분포되어 있고, 인구가 가장 적은 자치구는 중구이다.

2. 서울의 남쪽(한강을 기준으로 남쪽)에는 11개 자치구, 북쪽에는 14개의 자치구가 있는데, 강남지역은 금천구를 제외한 자치구에서 인구수가 40만 이상이거나 이에 근접하다. 하지만 강북은 인구수 40만을 넘는 지역은 은평구, 노원구, 성복구뿐이다.

 

구별 업종등록 분석

자치구별로 업종을 분석했다. 일부 차트만 첨부하였다.

자치구별 기타주점업
자치구별 한식 육류요리 전문점

03.05 - 1차 미니프로젝트(2)

 

미프 2일차에는 팀원과 1일차 때 각자 분석했던 자료를 기반으로 가설을 세우고 검증하는 시간을 가졌다.

다들 첫 만남이라,,, 너무 어색했다. 특히 나는 개인적으로 비대면이라서 더욱 어색했다... 비대면 미팅에 아직까지도 어색함을 갖고있다. 그래도 해야지!

 

우리 조에서는 추가적인 데이터를 가져와 가설을 세워보았다.

 

가설 1. 학원의 개수는 노선 수 결정에 영향을 준다.
가설 2. 주점의 개수는 노선 수 결정에 영향을 준다.
가설 3. 지하철 역의 개수는 노선 수 결정에 영향을 준다.

 

주점의 개수는 구별 업종등록 데이터를 사용했고, 학원의 개수, 지하철 역의 개수는 공공데이터포털(https://www.data.go.kr/)을 이용했다.

하지만,,,

 

우리가 생각했던 scatter가 나오지 않았다.

 

상관계수 역시 약한 상관관계를 가졌지만 p-value값을 보니 유의수준을 0.05를 벗어났다. 따라서 가설3개 모두 대립가설을 기각할 수밖에 없었다. 기타주점업과 지하철 역 개수는 관련이 있지 않을까? 라는 생각을 했지만 의외의 결과였다.

 

따라서 다시 새로운 가설을 세웠다.

sns.pairplot()을 이용해 모든 변수에 대한 산점도를 그려, 상관관계를 살펴보았다. 다음은 우리가 세운 가설이다.

가설1. 평균 이동 시간이 길면 노선 수가 적을 것이다.
가설2. 승차총승객수가 많으면 노선 수가 많을 것이다.
가설3. 지역별 학원 수가 많으면 노선이 많을 것이다.

이전에 세웠던 가설이 아까워 하나는 그대로 가져왔다...ㅎㅎ

 

 

세운 가설에 대해 산점도를 그려봤을 때, 보인다.. 보여 ... 약간의 직선이

 

r값과 p-value값도 구해봤는데, 가설1과 가설2는 유의수준 0.05 이내에서 관계가 있다고 나왔다!

 

가설1. p-value값이 0.05보다 작고, 상관계수가 -0.57로 대립가설을 채택하고 귀무가설을 기각할 수 있다(노선수가 적을수록 평균 이동 시간은 길다).
가설2. p-value값이 0.05보다 작고, 상관계수가 0.7에 가까우므로 대립가설을 채택하고 귀무가설을 기각할 수 있다(노선수가 많을수록 승차총승객수가 많다).
가설3. p-value값이 0.05보다 상당히 높은 수치를 보이고 있고, 상관계수가 약 0.10이므로 귀무가설을 채택하고 대립가설을 기각한다(지역별 학원 수와 노선개수는 관계가 (거의) 없다).

 

솔루션 도출

평균 이동시간 순위, 승차 총 승객수 순위와 상관계수를 곱한 값으로 아래 그래프를 도출하였다. 결론적으로 강동구, 송파구, 강서구 순으로 노선 증설이 필요하다고 판단했다.

 

첫 번째 미프를 진행했는데, 생각보다 어려웠다. 가설을 세우는 것 자체가 시간이 많이 들었다. 그리고 욕심 때문인지 제공된 데이터 이외의 추가 데이터를 사용해 분석해보고 싶어, 추가적인 데이터를 찾는데에도 시간이 많이 소요되었다. 심지어 찾았던 데이터의 상관관계가 없다는 결론이 도출되어 멘붕이 왔던 것 같다. 제출 기한은 정해져 있었으니까,,, 어찌저찌 우당탕탕 까불지 않고 제공된 데이터를 이용해 상관관계를 구하고 인사이트를 도출해서 다행이었다.. 이래서 도메인 지식이 중요한 것 같다...\

 

03.06 - 1차 미니프로젝트(3)

마지막 1차 미프날이다. 이 날은 새로운 주제로 진행했다. 그리고 무려 팀원들과 첫 대면!! 회의를 진행했다. 처음으로 KT본사 에이블교육장에서 강의도 듣고 회의도 진행했다. 그리고 구내식당에서 밥도 먹었다ㅎㅎ (KT직원은 한끼에 4000원인 것 같다.. 부럽다! 어떻게 학식보다 싸냐? 나 신입생 때 학식 3500원이었는데,,, 요새는 5000원인가...?ㅜㅜ)

 

두 번째 1차 미프는 개인과제와 팀과제로 나뉘었다. 방식은 비슷했다. 하지만 주제가 바뀌었다.

 

주제: 서울시 공유자전거 '따릉이' 수요 예측

 

데이터 셋의 변수는 다음과 같다.

 

개인 프로젝트 시간에는 제공 받은 데이터를 전처리하는 작업을 수행했다. 결측치 처리와 데이터 파악과 도메인 지식을 파악하는 시간을 가졌다.

 

팀과제로는 점심을 먹고 진행했는데 각자 얻은 인사이트를 공유하고 따릉이 대여량은 어떤 변수와 관계가 있을지 가설을 세우고 검증을 했다. 우리는 아래와 같은 가설을 세웠다.

 

사실 마지막 날은 시간적으로 여유가 없어 튜터님께서도 추가적인 데이터 분석보다는 제공받은 데이터만을 사용하는 것이 좋겠다고 하셨다. 강우여부를 제외하고는 모두 x변수가 수치형 변수이므로 scatter(시각화)와 상관계수를 이용해 분석했다.

그 결과

  • 강한 관계의 변수는 강우여부, 시간, 습도가 있었고,
  • 약한 관계의 변수는 기온, 풍속, 시정, 오존이 있었다.
  • 마지막으로 관계가 없는 변수로는 미세먼지와 초미세먼지가 있었다.

(초)미세먼지가 의외의 결과였다. 오존도! 근데 오존은 구글링을 해보니 기온과 시간(햇빛량), 풍속에 영향을 많이 받는다고 한다. 즉, 따릉이 대여량에 기온과 풍속은 영향을 미치지만 오존은 따릉이 대여량과 직접적인 영향보다는 간접적인 영향이라고 생각했다. 즉, 기온이 올라가면 따릉이 대여량이 적은데 기온이 올라가면 오존 수치도 올라가서 기온과 함께 약한 관계로 결과가 나온 것이다.

 

이렇게, 뚝딱뚝딱 1차 미니 프로젝트 끝! 첫 미프라 어색하고 낯설었지만 최선을 다해준 팀원들에게 너무 감사하다!


03.07 ~ 08 - 웹 크롤링

웹 크롤링은 실습 위주로 진행되어 먼저 노션 링크를 첨부해 놓겠다.

https://six-pillow-4f7.notion.site/bb56f20e4b7444198bb836cbe40263d3?pvs=4

 

웹 크롤링 | Notion

Built with Notion, the all-in-one connected workspace with publishing capabilities.

six-pillow-4f7.notion.site

 

웹 크롤링 시 이것만 기억하면 된다. 전체적인 큰 틀은 똑같다.

  1. URL분석 및 웹페이지 분석
  2. Request해서 Response받기
  3.  Parsing하기

 

동적페이지 웹 크롤링

  1. 동적으로 바뀌는 버튼 이벤트(예. "더보기"버튼 등)을 눌렀을 때 개발자옵션(F12)에서 네트워크 로그를 보며 URL을 찾는다.
  2. URL을 복사해서 requests모듈을 이용해 response받는다. 200번대 번호가 출력되면 성공!
  3. JSON파일로 변경 후 DataFrame형식으로 바꾼다.

REST API 사용

  1. 홈페이지(예. developers.kakao.com / developers.naver.com etc.)에서 Key값 발급받기
  2. 홈페이지에서 document를 통해 URL 파악하기
  3. request하고 response받기
  4. parsing 하기

정적페이지 웹 크롤링

  1. URL분석하기
  2. request하고 response받기
  3. BeautifulSoup를 이용해 bs4객체로 바꾸어 HTML에 접근한다. 필요한 정보를 CSS-Selector를 이용해 찾는다.
  4. Parsing하기

 

웹 크롤링 부분은 이론보다는 실습이 중요한 것 같아 이론은 간략하게 정리해봤다. 노션에 들어가면 자세한 실습내용을 확인할 수 있다.

 


Comments

첫 미니 프로젝트를 진행하고 그 동안 다른 에이블로와 아무 얘기를 한적이 없는데 실제로 만나 얘기도 해보고 조금 친해져도 보아 내가 정말 부트캠프를 하는구나 라는 생각이 들었다. 비대면의 장점(시간절약, 비용절약 등)도 분명 있지만, 대면의 장점(유대감 형성, 긍정적 시너지 효과 등)도 있는 것 같다. 이렇게 대면과 비대면을 블렌디드 형식으로 운영하는 에이블스쿨이 가장 적절한 방식이라는 생각이 든다. 앞으로 미니프로젝트가 6번정도 더 있고 빅프로젝트도 있는데 정말 끝에서는 다른 에이블러와 정이 들것만 같다. 끝까지 좋은 인연으로 마무리 하고 싶다. 그러려면,,, 팀에서 민폐가 되지 않아야겠지?ㅎㅎ.. 열심히 공부하는 수밖엔... 그리고! 매니저님도 처음뵀는데 내적으로 많이 반가웠다. MBTI I에게는 최고의 표현이었다...ㅎㅎ 마지막으로 우리 주제의 벌써 절반을 달려왔다. 아직 시간적으로는 3주차에 불과하지만 지금까지 Git, Python기초 및 라이브러리, 데이터처리, 데이터분석 및 의미찾기, 웹크롤링까지! 이제 머신러닝, 딥러닝, 시각지능 딥러닝, 언어지능 딥러닝정도가 남았다. 화이팅~!

728x90
반응형