프로젝트 개요:
- 연세대학교 데이터사이언스 랩 EDA 프로젝트
- 사용한 데이터:
- Dacon 공간정보 탐색적 데이터 분석 경진대회 제주 재난지원금 사용량 데이터
- 제주도 재난지원금 전후 신용카드 이용액 (파일데이터 상세 | 공공데이터 포털 (data.go.kr))
- 제주 읍면동별 인구 행정구역(읍면동)별/5세별 주민등록인구(2011년~) (kosis.kr)
- 전국 재난지원금 신청, 지급 데이터
- 팀원: 5명
- 협업 툴: Git, Google Docs
- Tech stack: Jupyter Notebook, seaborn, matplotlib, folium, Kakao API
- Git Repository 바로가기
프로젝트 진행 순서
1. 주제 설정
데이터 자체가 모델링에 적합하지 않고, 특정한 목적성을 가지고 분석하기엔 어려움이 있었다. 따라서 탐색적 분석과 시각화를 주로 진행해보기로 했다. 큰 맥락에서 우리가 설정한 프로젝트 구조는 다음과 같다:
- 제주 재난지원금은 목적에 부합되게 사용되었는가?
- 제주와 국내 타 지역의 재난지원금 소비 패턴 비교분석
- 제주도 내 지역별 재난지원금 소비 동향을 통해 살펴본 지역적 특색
2. 데이터 수집, 전처리, 보완
첫번째로 재난지원금 사용 추이가 제주 내에서 서귀포시, 제주시로만 구분이 되어있었다. 따라서 경도 위도 데이터를 사용해서 Kakao API 요청을 통해 데이터 별 읍,면,동 데이터를 추가하는 작업을 했다. 총 100만건의 데이터에 대한 request를 보내서 읍면동 칼럼을 추가하는 작업을 진행했다.
import requests
import json
import time
"""
Kakao API 문서 참고: https://developers.kakao.com/docs/latest/ko/local/dev-guide
리턴 바디 등 확인 할 수 있음!
"""
# kakao AccessKey: https://developers.kakao.com/console/app/534978/config/appKey
# 해당 사이트에서 카카오 로그인 후, REST API Key 복사해서 아래의 AccessKey에 넣으시면 됩니다!
headers = {"Authorization": "KakaoAK {AccessKey}"}
start = time.time()
count = 0
test["DONG"] = ""
# 20만건씩 쪼개서 진행
for i, j in test.iterrows():
POINT_X = j.POINT_X
POINT_Y = j.POINT_Y
url = ('https://dapi.kakao.com/v2/local/geo/coord2regioncode.json?x={}&y={}'.format(POINT_X, POINT_Y))
api_test = requests.get(url,headers=headers)
url_text = json.loads(api_test.text)
test["DONG"][i]= url_text["documents"][0]["region_3depth_name"]
count += 1
if (count % 1000 == 0):
print("progress {}".format(count))
읍면동으로 분류 후에는, 제주도의 읍면동별 권역 분류를 진행해주었다. (예, 제주시서부: 한경면, 한림읍, 애월읍 | 서귀포시 서부: 대정읍, 안덕면 등)
두번째로는 너무 세분화되어있는 업종들을 조금 더 직관적인 분류로 카테고리화하는 작업을 진행했다.
df_n.replace(dict.fromkeys(['택시', '기타교통수단', '통신기기'], '교통/통신'), inplace=True)
df_n.replace(dict.fromkeys(['대형할인점', '농축협직영매장', '농협하나로클럽', '편의점', '슈퍼마켓', '정육점', '기타유통업', '연쇄점', '상품권', '인삼제품', '홍삼제품', '농축수산품', '주류판매점', '기타건강식', '건강식품(회원제형태)'], '마트/편의점(유통)'), inplace=True)
df_n.replace(dict.fromkeys(['악기점', 'DVD음반테이프판매', '문화취미기타', '영화관', '티켓', '수족관', '화랑'], '영화/문화'), inplace=True)
df_n.replace(dict.fromkeys(['내의판매점', '양품점', '옷감직물', '귀금속', '기타직물', '스포츠의류', '가방', '정장', '악세사리', '기타잡화', '신발', '기타의류', '단체복', '아동의류', '캐쥬얼의류', '맞춤복점', '제화점', '인터넷Mall', '인터넷종합Mall'], '쇼핑/패션'), inplace=True)
df_n.replace(dict.fromkeys(['제과점', '스넥', '기타음료식품'], '카페/베이커리'), inplace=True)
df_n.replace(dict.fromkeys(['미용재료', '화장품', '피부미용실', '미용원', '이용원'], '뷰티'), inplace=True)
df_n.replace(dict.fromkeys(['구내매점', '단란주점', '주점', '서양음식', '일반한식', '일식회집', '중국음식', '유흥주점', '칵테일바'], '외식/주점'), inplace=True)
df_n.replace(dict.fromkeys(['세탁소', '애완동물', '화원', '침구수예점', '성인용품점', '가전제품', '기타가구', '조명기구', '민예공예품', '주방용식기', '기타전기제품', '소프트웨어', '주방용구', '카페트커텐천막', '컴퓨터', '카메라', '일반가구', '정수기', '철제가구', '시계', '안경', '사우나', '안마스포츠마사지', '사진관', '인테리어', 'CATV'], '생활/기타'), inplace=True)
df_n.replace(dict.fromkeys(['완구점', '화방표구점', '문구용품', '일반서적', '출판인쇄물', '기타사무용', '사무기기', '전문서적', '정기간행물', '기타서적문구', '서적출판(회원제형태)'], '서점/문구'), inplace=True)
df_n.replace(dict.fromkeys(['기타보험', '손해보험'], '금융'), inplace=True)
df_n.replace(dict.fromkeys(['기념품점', '기타숙박업', '특급호텔', '2급호텔', '1급호텔', '콘도', '렌트카', '관광여행', '항공사', '여객선', '면세점'], '여행/숙박'), inplace=True)
df_n.replace(dict.fromkeys(['레져용품수리', '스포츠레져용품', '골프용품', '노래방', '당구장', '골프경기장', '볼링장', '골프연습장', '헬스크럽', '레져업소(회원제형태)', '기타레져업', '종합레져타운', '수영장', '테니스장', '기타회원제형태업소', ], '레저/스포츠'), inplace=True)
df_n.replace(dict.fromkeys(['유아원', '독서실', '보습학원', '기능학원', '기타교육', '외국어학원', '학원(회원제형태)', '예체능학원', '컴퓨터학원', '대학등록금', '학습지교육', '초중고교육기관'], '교육/육아'), inplace=True)
df_n.replace(dict.fromkeys(['주유소', '자동차정비', 'LPG', '세차장', '유류판매', '이륜차판매', '윤활유전문판매', '자동차시트타이어', '중고자동차', '수입자동차', '자동차부품', '주차장', '기타자동차서비스', '카인테리어', ], '주유/자동차'), inplace=True)
df_n.replace(dict.fromkeys(['약국', '종합병원', '기타의료기관및기기', '한약방', '제약회사', '의료용품', '건강진단', '한의원', '동물병원', '의원', '치과의원', '병원', '산후조리원', '치과병원'], '의료'), inplace=True)
df_n.replace(dict.fromkeys(['목재석재철물', '건축요업품', '골동품점', '기계공구', '기타건축자재', '보일러펌프', '페인트', '냉열기기', '유리', '과학기자재', '기타광학품', '기타연료', '중장비수리', ], '건설/제조'), inplace=True)
df_n.replace(dict.fromkeys(['기타농업관련', '비료농약사료종자', '농기계', '미곡상'], '농업'), inplace=True)
df_n.replace(dict.fromkeys(['사무서비스', '기타대인서비스', '화물운송', '보관창고업', '종합용역', '조세서비스', '가례서비스', '공공요금', '위탁급식업', '기타용역서비스', '기타수리서비스', '기타운송', '가정용품수리', '견인서비스', '부동산중개임대', '부동산분양', '신변잡화수리', '사무통신기기수리', '법률회계서비스', '사무서비스(회원제형태)', '정보서비스', '기타업종', '기타비영리유통'], '서비스/기타'), inplace=True)
3. 데이터 분석/시각화 결과물
제주도와 국내 타 지역간의 재난지원금 사용 양상을 비교하여 제주도의 특성을 알아보고, 제주도 내 권역별로의 재난지원금 사용 양상 시각화를 통해 제주도의 지역별 공간적 특성을 알아보았다.
4. 결론
1. 재난지원금의 경제적 효과는 있었으나, 영세업자에게 그 효과가 집중되지는 않았기에 재난지원금의 원 목적상 다소 아쉬운 효과를 보였습니다.
2. 제주도와 국내 타권역의 재난지원금의 효과나, 사용 현황은 대체로 비슷하지만 타권역과 비교했을 때 주유/자동차 업종과 레저/스포츠 항목에서의 높은 재난지원금 추이와 학원 업종에서의 낮은 사용률 추이에서 제주도의 특징이 드러납니다.
3. 제주도 권역별 공간 분석을 통해 시내 의료업종에서의 높은 재난지원금 소비량, 시외 농업 업종에서의 높은 재난지원금 소비량을 알아볼 수 있었습니다. 제주 전반으로는 외식/주점, 마트/편의점, 그리고 주유/자동차가 재난지원금의 혜택을 가장 많이 받은 업종이었습니다.
'Projects' 카테고리의 다른 글
[python] Leetcode 알고리즘 문제 아카이빙 프로그램 (0) | 2021.12.29 |
---|---|
딥러닝(BERT) 기반 멜론 음원 사재기 판별 시스템 구축 프로젝트 (0) | 2021.04.01 |