본문 바로가기

6.Numpy | Pandas | Crawling

5/24(수) IT K-DT(58일차) / 8.folium

 

 

8. folium 

 

8-1. folium의 개요


leaflet.js 기반으로 만들어진 라이브러리
지도 위에 데이터를 표현해주는 대표적인 python 지도 시각화 라이브러리
공식 홈페이지: https://python-visualization.github.io/folium/

 

Folium — Folium 0.14.0 documentation

folium builds on the data wrangling strengths of the Python ecosystem and the mapping strengths of the leaflet.js library. Manipulate your data in Python, then visualize it in on a Leaflet map via folium. Concepts folium makes it easy to visualize data tha

python-visualization.github.io

 


# 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