-
2013년 ~ 2020년 연도별 한강공원 방문 이용객 수 데이터 분석 With Python, folium, PlotlyData Analysis/LifeStyles 2021. 6. 13. 10:22
이번 포스팅에서 다룰 주제는 바로 서울 한강공원 이용객 수 데이터다. 연도별로 무슨 목적으로 얼마나 많은 사람들이 어떤 한강공원에 방문했는지 분석해보도록 하겠다. 데이터는 아래 링크와 같이 서울 열린 데이터 광장에서 가져왔다.
https://data.seoul.go.kr/dataList/10798/S/2/datasetView.do
1. 연도별 한강공원 이용객 수 추이
코로나 여파로 한강공원 이용객 수는 확실히 감소된 점을 확인할 수 있다. 목적별로 볼 경우에는 특이한 점은 자전거나 운동을 하기 위해서 한강을 방문하는 이용객 수는 오히려 코로나 이후 증가하였다. 한강에서 취식, 행사가 금지되고, 많은 시내 운동 시설이 영업 정지를 하면서 한강에 운동하러 오는 사람이 증가하지 않았을까 추정된다.
import pandas as pd import numpy as np import plotly.express as px df=pd.read_csv('C:/Users/banad/Downloads/report.txt',sep='\t') total=df[df['구분']=='합계'] total=total.melt(id_vars=['기간','구분'],var_name='목적',value_name='이용객') total['이용객']=total['이용객'].str.replace(',','') total['이용객']=total['이용객'].astype(int) total['이용객']=total['이용객'].astype(np.int64) fig = px.line(total, x="기간", y="이용객",color="목적", title='한강공원 이용객 수') fig.show() fig.write_html("C:/Users/banad/OneDrive/바탕 화면/동앤트/total_counts.html")
2. 목적별 한강공원 이용객 수 비중
연도별로 무슨 목적으로 한강공원을 방문했는지 파이 차트로 시각화해보도록 하겠다.
아래 파이 차트로 보면 확실히 자전거와 운동 목적의 이용객 수 비중이 크게 증가한 부분을 명확하게 볼 수 있다.
total2=total[total['목적']!='합계'] total3=total.pivot('기간','목적','이용객') for i in total3.columns: total3[f'{i}_비중']=total3[f'{i}']/total3['합계'] total3=total3.iloc[:,7:13] total3=total3.T total3.reset_index(inplace=True) import plotly.graph_objects as go from plotly.subplots import make_subplots fig = make_subplots(rows=2, cols=4, specs=[[{'type':'domain'}, {'type':'domain'},{'type':'domain'}, {'type':'domain'}], [{'type':'domain'}, {'type':'domain'},{'type':'domain'}, {'type':'domain'}] ]) fig.add_trace(go.Pie(labels=total3['목적'], values=total3[2013], name="2013"), 1, 1) fig.add_trace(go.Pie(labels=total3['목적'], values=total3[2014], name="2014"), 1, 2) fig.add_trace(go.Pie(labels=total3['목적'], values=total3[2015], name="2015"), 1, 3) fig.add_trace(go.Pie(labels=total3['목적'], values=total3[2016], name="2016"), 1, 4) fig.add_trace(go.Pie(labels=total3['목적'], values=total3[2017], name="2017"), 2, 1) fig.add_trace(go.Pie(labels=total3['목적'], values=total3[2018], name="2018"), 2, 2) fig.add_trace(go.Pie(labels=total3['목적'], values=total3[2019], name="2019"), 2, 3) fig.add_trace(go.Pie(labels=total3['목적'], values=total3[2020], name="2020"), 2, 4) fig.update_traces(hole=.4, hoverinfo="label+percent+name") fig.update_layout( title_text="연도별 한강공원 이용객 비중", annotations=[dict(text='2013', x=0.074, y=0.82, font_size=15, showarrow=False), dict(text='2014', x=0.373, y=0.82, font_size=15, showarrow=False), dict(text='2015', x=0.63, y=0.82, font_size=15, showarrow=False), dict(text='2016', x=0.925, y=0.82, font_size=15, showarrow=False), dict(text='2017', x=0.074, y=0.18, font_size=15, showarrow=False), dict(text='2018', x=0.373, y=0.18, font_size=15, showarrow=False), dict(text='2019', x=0.63, y=0.18, font_size=15, showarrow=False), dict(text='2020', x=0.925, y=0.18, font_size=15, showarrow=False), ]) fig.show()
3. 2013년 ~ 2020년 한강공원 지구별 이용객 수 지도 시각화
다음으로는 어느 한강공원에 가장 많이 방문했는지 지도에 찍어보도록 하겠다.
확실히 여의도와 뚝섬 한강공원 지구가 가장 인기가 많은 곳인 점을 아래 지도 그래프에서 확인할 수 있다. 특이한 점은 코로나가 터지기 이전 19년도부터 한강공원 이용객 수가 감소했다.
import requests from folium.plugins import TimestampedGeoJson import folium df2=df[df['구분']!='합계'] df2['Location']=df2['구분'].apply(lambda x: '한강공원'+x+'지구') lat=[] lon=[] for i in df2['Location']: try: url = f'''https://dapi.kakao.com/v2/local/search/keyword.json?query={i}''' headers = { "Authorization": "KakaoAK ~~" } #json 형태로 데이터가 주어진다 places = requests.get(url, headers = headers).json()['documents'] lat.append(places[0]['y']) lon.append(places[0]['x']) except: lat.append('') lon.append('') df2['lat']=lat df2['lon']=lon df2['lat']=df2['lat'].astype(float) df2['lon']=df2['lon'].astype(float) df2['fillColor']='#586065' df2['합계']=df2['합계'].str.replace(',','') df2['합계']=df2['합계'].astype(np.int64) def create_geojson_features(df): features = [] for _, row in df.iterrows(): feature = { 'type': 'Feature', 'geometry': { 'type':'Point', 'coordinates':[row['lon'],row['lat']] }, 'properties': { 'time':pd.to_datetime(row['기간'], format='%Y').__str__(), 'style': {'color' : ''}, 'icon': 'circle', 'iconstyle':{ 'fillColor': row['fillColor'], 'fillOpacity': 0.8, 'stroke': 'true', 'radius': row['합계']/1000000 } } } features.append(feature) return features start_geojson = create_geojson_features(df2) m = folium.Map(location = [37.517568, 126.986690], tiles = "CartoDB Positron", zoom_start = 11, ) TimestampedGeoJson(start_geojson, period = 'P1Y', duration = 'P1Y', transition_time = 1000, date_options='YYYY', auto_play = True ).add_to(m)
'Data Analysis > LifeStyles' 카테고리의 다른 글
카카오 지도에서 오레노라멘 맛집 리뷰 파이썬으로 크롤링 & 분석 해보자 (0) 2021.07.02 네이버 쇼핑인사이트 - 종근당 락토핏 유산균 검색 클릭량 추이 가져오기 With Python (0) 2021.06.25 21년 1월 서울 공공자전거 대여 이력 데이터 분석 & 시각화 with Python, Pydeck, Plotly, Sankey Diagram (0) 2021.06.08 제주도 렌터카 업체 정보 분석 & 시각화 With Python & Mapbox (0) 2021.06.07 서울 크로스핏 박스 지도 시각화 with Python, Mapbox, 카카오 API (0) 2021.05.31