Nerdy

[Folium] 부산광역시 지하철 역 위치를 지도에 표시하기(Marker, Cluster) 본문

시각화/Folium

[Folium] 부산광역시 지하철 역 위치를 지도에 표시하기(Marker, Cluster)

뚱인데요? 2022. 12. 8. 15:25
728x90

지도 시각화 기능을 가진 Folium 파이썬 모듈을 사용해 지도 내 부산광역시 지하철 역 위치(Point)를 표시해본다.

subway.csv
0.01MB

 

- Moduel Setting

import pandas as pd
import folium
from folium import Marker
from folium.plugins import MarkerCluster

 

1. 지하철 위도/경도 정보가 담긴 csv 파일 불러오기

df = pd.read_csv('subway.csv')
df.head()

   Unnamed: 0      역사명  ...         역경도                      위경도
0           0  다대포해수욕장  ...  128.964100     [35.04867, 128.9641]
1           1    다대포항역  ...  128.971300     [35.05782, 128.9713]
2           2      낫개역  ...  128.979873  [35.065265, 128.979873]
3           3     신장림역  ...  128.977041  [35.074433, 128.977041]
4           4      장림역  ...  128.977500     [35.08109, 128.9775]
[5 rows x 6 columns]

 

2. 첫 장소가 표출될 화면 지정(Basemap)

location : 처음 표출될 지역을 위도/경도로 지정

tiles : 맵 종류를 선택할 수 있으며 대표적으로 많이 사용하는 타일은 OpenStreetMap이다.

zoom_start : 처음 표출될 화면을 zoom 지정

map = folium.Map(location=[35.1795543, 129.0756416], tiles="OpenStreetMap", zoom_start=11)
map

주피터 노트북, 코랩이 아닌 VS code, 파이참 등의 IDE를 사용하는 경우 지도가 바로 안 나오니 "map.save('파일명.html)" 코드를 작성하여 html 내에서 확인을 하면 된다.

 

3. Marker 표시하기

좌표별로 Marker 표시가 가능하며 특정 지역의 Marker를 클릭 시 팝업 내용이 표출이 가능한 기능이다.

iterrows : 데이터프레임 자료를 한 라인씩 정보를 읽는다.

location : Marker를 표시할 위도/경도 정보

popup : Marker 클릭 시 표출할 내용

icon : Marker 색상 및 스타일 변경

for _, i in df.iterrows():
    Marker(location = [i['역위도'], i['역경도']],
           popup = "노선명: " + str(i['노선명']) + "<br>" + "역사명: " + str(i['역사명']) + "<br>",
           icon = folium.Icon(color = 'blue')
           ).add_to(map)

# 팝업 내용이 세로 형식으로 출력이 되면 HTML  태그 중 줄바꿈을 뜻하는 <br> tag를 사용하여 공백이 있게끔 수정해주면 된다. 

for _, i in df.iterrows():
    Marker(location = [i['역위도'], i['역경도']],
           popup = "<pre>" + "노선명: " + str(i['노선명']) + "<br>" + "역사명: " + str(i['역사명']) + "<br>" + "</pre>",
           icon = folium.Icon(color = 'blue')
           ).add_to(map)

 

4. Marker Cluster 사용하여 표시하기

군집을 뜻하는 Cluster를 Marker에 사용하여 지저분만 마커들을 몇개의 군집으로 만들어 더 좋은 시각화를 만들어 본다.

MarkerCluster 함수를 객체에 담아 add_child 함수를 사용해 지도에 표시를 해주면 된다.

cluster = MarkerCluster()
for _, i in df.iterrows():
    cluster.add_child(
        Marker(location = [i['역위도'], i['역경도']],
               popup = "<pre>" + "노선명: " + str(i['노선명']) + "<br>" + "역사명: " + str(i['역사명']) + "<br>" + "</pre>",)
    ).add_to(map)

728x90