개인 프로젝트를 진행하면서 처음 사용한 지도 시각화 folium 라이브러리에 대해 정리해보고자 합니다.
해당 데이터는 데이콘의 대회 데이터로 공개할 수 없습니다.
아래 사진은 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='아이콘 모양') | 아이콘의 색상과 모양 지정 |
- 아이콘 모양 참고 : https://getbootstrap.com/docs/3.3/components/
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
'Skills > Python' 카테고리의 다른 글
[Python] Matplotlib 한글 폰트 설정 (0) | 2024.05.04 |
---|---|
[Python] 리스트 컴프리헨션(List Comprehension) 기본 사용법 (0) | 2024.04.18 |
[Python] 동적 웹크롤링 - selenium 사용법 (0) | 2024.02.08 |
[Python] Plotly 그래프 사이즈 및 margin 설정 (1) | 2024.02.07 |
[Python] len() 함수 : 문자열, 리스트, 튜플, 딕셔너리 길이 구하기 (0) | 2024.02.05 |