본문 바로가기
Skills/Python

[Python] 지도 시각화 folium - Marker, MarkerCluster

by 602yu 2024. 4. 14.

 

 

개인 프로젝트를 진행하면서 처음 사용한 지도 시각화 folium 라이브러리에 대해 정리해보고자 합니다.

해당 데이터는 데이콘의 대회 데이터로 공개할 수 없습니다.

 

아래 사진은 Marker와 MarkerCluster를 사용해 지도 시각화한 최종 결과입니다.

 

빨간색 - Marker,  초록색 - MarkerCluster

 

0. folium 이란

folium은 Python에서 제공하는 대표적인 지도 시각화 라이브러리입니다. 이 라이브러리를 사용하면 웹 기반 지도를 생성하고 다양한 기능을 추가하여 데이터를 시각적으로 표현할 수 있습니다. 

본 포스팅에서는 개인 프로젝트를 진행하면서 folium 라이브러리를 사용하여 지도 시각화를 구현한 경험을 공유하고자 합니다. 해당 프로젝트에서 사용된 데이터는 데이콘의 대회 데이터이며, 공개할 수 없습니다.

 

1. folium 설치 및 임포트

pip install folium
import folium

 

 

 

2. 지도 띄우기 - folium.Map()

folium.Map()을 이용하여 처음 화면이 나오는 부분을 설정합니다.

location은 지도의 기준이 될 위도와 경도의 좌표를 전달합니다.

zoom_start는 처음 지도를 봤을 때의 확대 정도를 나타내고 최댓값은 18입니다.

만약 location값과 zoom_start 값을 지정하지 않으면 전 세계 지도를 기준으로 띄어줍니다.

 

기본형


folium.Map(location=[위도, 경도], zoom_start=숫자)

 

 

import folium

map = folium.Map(location=[34.845648, -98.009172], zoom_start=4)

map

 

map 하면 지도가 보여집니다.

save() 메소드를 통해 html형식으로 저장할 수도 있습니다.

 

folium.Map([..]).save('파일이름.html')

 

 

2-1. 지도의 스타일 지정

tiles = '스타일' 속성을 사용하여 지도의 스타일도 지정할 수 있습니다.

 


속성값

OpenStreetMap Stamen Terrain Stamen Toner
Stamen Watercolor CartoDB positron CartoDB dark_matter
Mapbox Bright Mapbox Control Room Cloudmade
Mapbox    

 

 

 

3. Marker 추가하기

Marker는 특정 위치에 아이콘을 표시하여 해당 위치를 강조할 수 있습니다. folium의 Marker 클래스를 사용하여 위치와 추가할 정보를 지정하여 Marker를 생성할 수 있습니다.

 

마커 표시


folium.Marker([위도, 경도], ...).add_to(지도)

 

 

 

folium.Marker().add_to()를 이용하여 지도에 마커를 찍을 수도 있습니다.

Marker()의 인수로는 [위도, 경도] 이외에도 여러 옵션을 설정하여 마커를 표시할 수 있습니다.

 

 

* 마커 아이콘 옵션

옵션 설명
[위도, 경도] 마커를 찍을 좌표
popop = " " 마우스 클릭시 표기되는 문구
tooltip = '' " 마우스 오버시 표기되는 문구
icon = folium.Icon(color='색상', icon='아이콘 모양') 아이콘의 색상과 모양 지정

 

 

import folium 

map = folium.Map(location=[34.845648, -98.009172], zoom_start=4)

for city, coord in location_data.items():
    folium.Marker(
            location=[coord['lat'], coord['long']],
            tooltip=f'{city}', # 마우스오버시 상세내용 표시
            popup=f'{city}',   # 마커클릭시 상세내용 표시
            icon=folium.Icon(color='red', icon='info-sign')
    ).add_to(map)

map

 

 

 

 

4. folium.MarkerCluster

MarkerCluster는 marker가 좁은 지역에 많은 Marker들이 밀집되어 있을시 주변 지역을 묶어서 대략적인 개수 분포를 볼 수 있도록 해줍니다.

 

from folium.plugins import MarkerCluster

map = folium.Map(location=[34.845648, -98.009172], zoom_start=4)

# MarkerCluster 생성
marker_cluster = MarkerCluster().add_to(map)

# 여러 개의 Marker를 생성하여 MarkerCluster에 추가
for city, coord in location_data.items():
    folium.Marker(
    	location=location
    ).add_to(marker_cluster)

map

 

 

 

 

최종 코드입니다.

# 고객지역 지도 시각화
location_data = {
    'Chicago':{'lat':41.879226, 'long':-87.623070},
    'California':{'lat':36.486632, 'long':-119.719654},
    'New York':{'lat':40.712309, 'long':-74.006289},
    'New Jersey':{'lat':39.548948, 'long':-74.739295},
    'Washington DC':{'lat':38.907049, 'long':-77.036839},
}

map = folium.Map(location=[34.845648, -98.009172], zoom_start=4)

mc = MarkerCluster() # 주변지역 묶어서 대략적인 개수 분포 보기
for city, coord in location_data.items():
    folium.Marker(
        location=[coord['lat'], coord['long']],
        tooltip=f'{city}', # 마우스오버시 상세내용 표시
        popup=f'{city}',   # 마커클릭시 상세내용 표시
        icon=folium.Icon(color='red', icon='info-sign')
    ).add_to(mc)
    
mc.add_to(map)

map