8. folium
8-1. folium의 개요
leaflet.js 기반으로 만들어진 라이브러리
지도 위에 데이터를 표현해주는 대표적인 python 지도 시각화 라이브러리
공식 홈페이지: https://python-visualization.github.io/folium/
# folium 설치 및 불러오기
!pip install folium
import folium
# 맵을 화면에 보여주기
folium.Map(location=[위도, 경도], zoom_start=배율)
map_folium = folium.Map(location=[37.50006, 127.0355806], zoom_start=17)
map_folium
Marker(): location 속성으로 지정한 위치에 마커를 생성
popup(): 마커를 클릭했을 때 표시할 문자열을 설정
add_to(): 작성된 마커를 지도에 추가
map_folium = folium.Map(location=[37.50006, 127.0355806], zoom_start=17)
popup = folium.Popup('코리아IT아카데미', max_width=200)
folium.Marker(location=[37.50006, 127.0355806], popup=popup).add_to(map_folium)
map_folium
from folium.features import CustomIcon
지도: 37.56652479270633, 126.9779129116262 서울특별시청: 37.56652479270633, 126.9779129116262 덕수궁: 37.56585320879458, 126.97514572197248 서울지방경찰청: 37.57504045678939, 126.97195576938117 광화문: 37.57617987638928, 126.97694467807803 영풍문고-종로본점: 37.56999947440024, 126.98228391170936 |
icon_image = 'light.png'
map_folium = folium.Map(location=[37.56652479270633, 126.9779129116262], zoom_start=15)
popup1 = folium.Popup('지도', max_width=200)
popup2 = folium.Popup('서울특별시청', max_width=200)
popup3 = folium.Popup('덕수궁', max_width=200)
popup4 = folium.Popup('서울지방경찰청', max_width=200)
popup5 = folium.Popup('광화문', max_width=200)
popup6 = folium.Popup('영풍문고-종로본점', max_width=200)
folium.Marker(location=[37.56652479270633, 126.9779129116262], popup=popup1).add_to(map_folium)
folium.Marker(location=[37.56652479270633, 126.9779129116262], popup=popup2,
icon=folium.Icon(color='pink', icon='ok')).add_to(map_folium) # 아이콘 스타일 변경
folium.Marker(location=[37.57504045678939, 126.97195576938117], popup=popup4).add_to(map_folium)
folium.Marker(location=[37.57617987638928, 126.97694467807803], popup=popup5,)
folium.Marker(location=[37.56999947440024, 126.98228391170936], popup=popup6,)
# CircleMarker(): 원의 범위를 마커로 생성
map_folium = folium.Map(location=[37.56652479270633, 126.9779129116262], zoom_start=15)
popup1 = folium.Popup('서울특별시청', max_width=200)
folium.CircleMarker(location=[37.56652479270633, 126.9779129116262], popup=popup1,
radius=100, color='red', fill_color='#EC4074').add_to(map_folium)
map_folium
8-2. folium의 활용
import pandas as pd
# library data를 불러옴
library = pd.read_csv('/content/drive/MyDrive/K-DT/python_데이터분석/data.csv')
# 주어진 도서관 위치 파일을 이용해서 지도에 위치를 마커로 찍고 싶은 경우
map = folium.Map(location=[37.58, 127.0], zoom_start=11)
for _, row in library.iterrows(): # 변수를 만들고 싶지 않은 경우: 언더바(_) 사용
icon_image = '/content/drive/MyDrive/K-DT/python_데이터분석/library.png'
icon = CustomIcon(icon_image, icon_size=(45,45))
popup = folium.Popup(row['시설명'], max_width=200)
folium.Marker(location=[row['위도'], row['경도']], popup=row['시설명'], icon=icon).add_to(map)
map
# 위의 도서관 지도를 MarkerCluster를 이용해보기
(MarkerCluster: 가시성을 위해 복수의 마커를 군집의 형태로 표현한 것)
from folium.plugins import MarkerCluster
mc=MarkerCluster()
for _, row in library.iterrows():
icon_image = '/content/drive/MyDrive/K-DT/python_데이터분석/library.png'
icon = CustomIcon(icon_image, icon_size=(45,45))
popup = folium.Popup(row['시설명'], max_width=200)
folium.Marker(location=[row['위도'], row['경도']], popup=row['시설명'], icon=icon)
map.add_child(mc)
map
예제
# circle마커로 도서관 표시하기. (2010년 이후 개장은 파란색, 2010년 이전 개장은 빨간색)
def select_color(row):
year = int(row['개관일'].split('-')[0])
if year < 2010:
return 'red'
else:
return 'blue'
map_folium = folium.Map(location=[37.58, 127.0], zoom_start=11)
popup = folium.Popup('도서관', max_with=200)
for _, row in library.iterrows(): # 변수를 만들고 싶지 않은 경우: 언더바(_) 사용
folium.CircleMarker(location=[row['위도'], row['경도']], popup=row['시설명'], radius = 10, color=select_color(row)).add_to(map_folium)
map_folium