데이터분석
[23.06.30] 데이터 시각화(따릉이) - 21(3)
gmwoo
2023. 6. 30. 16:47
따릉이 대여소 정보를 지도에 표시¶
In [1]:
import folium
import pandas as pd
import googlemaps
import numpy as np
import json
from folium.plugins import MarkerCluster
from folium.plugins import HeatMap
import warnings
warnings.filterwarnings(action='ignore')
In [8]:
# gmaps_key = "본인 API"
# gmaps = googlemaps.Client(key=gmaps_key)
# geo_path = '../../data/02. skorea_municipalities_geo_simple.json'
# geo_str = json.load(open(geo_path, encoding='utf-8'))
In [3]:
DDa = pd.read_excel('../../data/공공자전거 대여소 정보.xlsx')
DDa.head()
Out[3]:
구분 | 대여소번호 | 대여소명 | 위도 | 경도 | 거치대수 | |
---|---|---|---|---|---|---|
0 | 마포구 | 101 | 101. (구)합정동 주민센터 | 37.549561 | 126.905754 | 5 |
1 | 마포구 | 102 | 102. 망원역 1번출구 앞 | 37.556000 | 126.910454 | 20 |
2 | 마포구 | 103 | 103. 망원역 2번출구 앞 | 37.554951 | 126.910835 | 14 |
3 | 마포구 | 104 | 104. 합정역 1번출구 앞 | 37.550629 | 126.914986 | 13 |
4 | 마포구 | 105 | 105. 합정역 5번출구 앞 | 37.550007 | 126.914825 | 5 |
In [4]:
DDa_count = DDa.groupby('구분').sum('거치대수')
DDa_count
Out[4]:
대여소번호 | 위도 | 경도 | 거치대수 | |
---|---|---|---|---|
구분 | ||||
강남구 | 235437 | 3750.009683 | 12705.486921 | 1210 |
강동구 | 62298 | 2177.780178 | 7374.463997 | 773 |
강북구 | 59525 | 1467.706114 | 4953.973380 | 451 |
강서구 | 102127 | 3229.966489 | 10907.969378 | 1014 |
관악구 | 111426 | 1948.968616 | 6600.692603 | 652 |
광진구 | 113173 | 2252.719049 | 7624.956658 | 793 |
구로구 | 119131 | 2287.203299 | 7738.976881 | 728 |
금천구 | 80663 | 1648.550827 | 5583.308740 | 540 |
노원구 | 110676 | 2522.330396 | 8513.612320 | 850 |
도봉구 | 60295 | 1318.116664 | 4446.437479 | 423 |
동대문구 | 32176 | 1916.568989 | 6479.691079 | 653 |
동작구 | 83623 | 1537.508634 | 5204.944282 | 501 |
마포구 | 19368 | 2929.700891 | 9899.430803 | 1062 |
서대문구 | 32138 | 2028.838982 | 6854.356217 | 695 |
서초구 | 197874 | 3260.869895 | 11050.740529 | 1214 |
성동구 | 70120 | 2365.938153 | 8003.543683 | 780 |
성북구 | 77714 | 2180.769003 | 7367.419745 | 712 |
송파구 | 152309 | 3712.665229 | 12584.774611 | 1279 |
양천구 | 39581 | 2026.398324 | 6850.266555 | 663 |
영등포구 | 21914 | 3339.264553 | 11295.007241 | 1258 |
용산구 | 32116 | 1463.831085 | 4952.053544 | 538 |
은평구 | 57977 | 2332.218777 | 7869.238039 | 688 |
종로구 | 23454 | 2404.878087 | 8127.254691 | 715 |
중구 | 16652 | 1652.760743 | 5587.669159 | 484 |
중랑구 | 74416 | 1955.122525 | 6608.665039 | 616 |
In [5]:
# ClusterMarker
lat_float = np.array(DDa['위도']).astype('float')
lng_float = np.array(DDa['경도']).astype('float')
DDa_map = folium.Map(location=[37.5502, 126.982],
zoom_start=11)
DDa_mc = MarkerCluster().add_to(DDa_map)
for n in DDa.index:
folium.Marker([DDa['위도'][n],
DDa['경도'][n]],
popup=DDa['대여소명'][n]).add_to(DDa_mc)
DDa_map
Out[5]:
Make this Notebook Trusted to load map: File -> Trust Notebook
In [6]:
# 맵 빈도 색 표시
DDa_map.choropleth(geo_data=geo_str,
data=DDa_count['거치대수'],
columns = [DDa_count.index, DDa_count['거치대수']],
fill_color = 'GnBu',
key_on = 'feature.id')
DDa_map
Out[6]:
Make this Notebook Trusted to load map: File -> Trust Notebook
In [7]:
# 히트맵
HeatMap(
data=zip(lat_float, lng_float),
blur=15,
radius=20,color='red').add_to(DDa_map)
DDa_map.save('../../data/Seoul_DDa.html')
DDa_map
Out[7]:
Make this Notebook Trusted to load map: File -> Trust Notebook
반응형