Python Folium을 이용하여 지도상에 버스 정류소 위치 나타내기
쏘올솔
·2019. 12. 11. 00:01
Python의 Folium을 활용하여 지도상에 버스정류소 위치를 나타내 보았습니다.
Folium에 대한 설명 및 예시는 공식 document에 비교적 자세히 깔끔하게 정리되어 있습니다.
https://python-visualization.github.io/folium/
import pandas as pd
import folium
from folium.plugins import MarkerCluster, MiniMap
시작하기 전에 우선 화성시청의 경도, 위도 값을 입력하여 지도상에 출력해 보았습니다.
map_hs = folium.Map((37.1995439, 126.8311358), zoom_start = 13)
mc = MarkerCluster()
mc.add_child(folium.Marker(location = [37.1995439, 126.8311358],
popup = '화성시청',
icon = folium.Icon(color = 'red', icon = 'info-sign')))
minimap = MiniMap()
map_hs.add_child(minimap)
map_hs.add_child(mc)
아이콘을 클릭하면 다음과 같이 popup에 입력된 텍스트가 출력됩니다.
이제 본격적으로 지도상에 버스 정류소 위치를 출력하기 위해 17~18년 기준, 경기도 버스 정류장에 대한 정보를 담고 있는 'PJT001_stations_table.csv' 파일을 불러옵니다.
bus_stops = pd.read_csv('PJT001_stations_table.csv', encoding = 'utf-8')
bus_stops.head(3)
지도 시각화에 필요한 위도, 경도, 정류소 이름 데이터를 추출하는 과정입니다. 정류소 위치만을 보여주기 위해 groupby를 실행합니다.
loc_data = bus_stops[['WGS84위도','WGS84경도','정류소명']].drop_duplicates(keep = 'first')
loc_data = bus_stops.groupby(['정류소명'])['WGS84위도','WGS84경도'].mean()
편의를 위해 column name을 변환합니다.
loc_data.columns = ['stop_name', 'latitude', 'longitude']
loc_data.head(3)
df.itertuples()을 사용하여 행 단위의 반복문을 실행합니다. 각 버스 정류소의 위도, 경도 값을 받아 해당 위치에 marker를 표시합니다.
for row in loc_data.itertuples():
mc.add_child(folium.Marker(location = [row.latitude, row.longitude], popup = row.stop_name))
map_hs.add_child(mc)
정류장이 한 곳만 있는 곳은 파란색 마커로 표시가 됩니다.
Folium을 사용할 때 쥬피터 상에 종종 하얗게 출력이 되어 아무것도 보이지 않을 수 있는데, 이는 볼륨이 크기 때문입니다.
map_hs.save('./bus_stops.html')
html형식으로 저장해서 보면 확인할 수 있습니다.
'경진대회, 공모전 > COMPAS 화성시 최적 시내버스 노선 제시' 카테고리의 다른 글
COMPAS 화성시 최적 시내버스 노선제시 우수상 수상! (0) | 2019.12.21 |
---|---|
화성시 민원데이터 분석 - 2 (feat. word2vec) (0) | 2019.12.10 |
화성시 민원데이터 분석 - 1 (feat. 워드클라우드) (0) | 2019.12.08 |