이번 포스팅에서는 지도를 다룰 수 있는 Folium 파이썬 라이브러리를 사용해보겠습니다.
Folium을 사용하면 지도 상에 위치 정보를 시각화할 수 있습니다.
자세한 내용은 공식문서를 참고하세요.
pip install folium
기본 사용법
import folium
m = folium.Map(location=[45.5236, -122.6750])
m
맵 객체를 생성하기 위해서는 위도와 경도를 담은 리스트를 Map 클래스에 전달하면 됩니다.
folium.Map(
location=[45.5236, -122.6750],
tiles='Stamen Toner',
zoom_start=13
)
tiles 매개변수는 지도의 스타일을 지정합니다.
전달 가능한 tiles 매개변수의 값들은 다음과 같습니다.
- OpenStreetMap (디폴트)
- Mapbox Bright (배율 확대 제한)
- Mapbox Control Room (배율 확대 제한)
- Stamen (Terrain, Toner, and Watercolor)
- Cloudmade (API 키 필요)
- Mapbox (API 키 필요)
- CartoDB (positron and dark_matter)
zoom_start 매개변수를 통해서는 지도를 얼마나 확대할 지 여부를 결정할 수 있습니다.
배율값으로는 0부터 18 사이의 값을 지정할 수 있습니다.
m = folium.Map(
location=[46.1991, -122.1889],
tiles='Stamen Terrain',
zoom_start=13
)
m.add_child(folium.LatLngPopup())
m
add_child 메서드를 사용해서 Map 객체에 LatLngPopup 객체를 추가하면 지도를 클릭할 때마다 클릭한 지점의 위도와 경도 정보를 표시합니다.
Marker 추가하기
마커 생성하기
my_map = folium.Map(
location=[45.5236, -122.6750],
tiles='Stamen Terrain',
zoom_start=12
)
folium.Marker([45.3288, -122.6625], popup='<i>Mt. Hood Meadows</i>').add_to(my_map)
folium.Marker([45.3311, -122.7113], popup='<b>Timerbline Lodge</b>').add_to(my_map)
my_map
Marker 클래스를 사용하면 지도상 원하는 위치에 핀을 표시할 수 있습니다.
구체적인 사용 방법은 우선 Marker 클래스를 인스턴스화 해야 합니다.
인스턴스화를 마친 마커 객체는 add_to 메서드를 사용해서 맵 객체에 추가할 수 있습니다.
마커 객체를 생성할 때 popup 매개변수를 사용해서 마커 클릭 시 등장하는 텍스트를 지정할 수 있습니다.
참고로 popup 매개변수의 값으로 HTML 문법을 전달할 수 있습니다.
m = folium.Map(
location=[37.544564958, 127.055823],
zoom_start=14
)
# 뚝섬역
folium.Marker(
location=[37.547123, 127.047219],
popup='<b>Subway</b>'
).add_to(m)
# 성수역
folium.Marker(
location=[37.544565, 127.055823],
popup='<b>Subway</b>',
tooltip='<i>성수역</i>'
).add_to(m)
m
tooltip 매개변수를 사용하면 마커에 마우스를 올렸을 때 텍스트가 등장하도록 설정할 수 있습니다.
마커 커스터마이징
m = folium.Map(
location=[45.372, -121.6972],
zoom_start=12,
tiles='Stamen Terrain'
)
folium.Marker(
location=[45.3288, -121.6625],
popup='<i>Mt. Hood Meadows</i>',
icon=folium.Icon(icon='cloud')
).add_to(m)
folium.Marker(
location=[45.3311, -121.7113],
popup='<b>Timerbline Lodge</b>',
icon=folium.Icon(color='green')
).add_to(m)
folium.Marker(
location=[45.3300, -121.6823],
popup='한글 테스트',
icon=folium.Icon(color='red', icon='info-sign')
).add_to(m)
m
마커 객체를 인스턴스화할 때 icon 매개변수를 통해 마커의 모양과 색을 바꿀 수 있습니다.
m = folium.Map(
location=[37.544564958, 127.055823],
zoom_start=14
)
# 뚝섬역
folium.Marker(
location=[37.547123, 127.047219],
popup='<b>Subway</b>'
).add_to(m)
# 성수역
folium.Marker(
location=[37.544565, 127.055823],
popup='<b>Subway</b>',
tooltip='<i>성수역</i>'
).add_to(m)
folium.Marker(
location=[37.540359, 127.06913],
popup='건대입구역',
tooltip='Icon custom',
icon=folium.Icon(
color='purple',
icon_color='white',
icon='glyphicon glyphicon-cloud',
angle=50,
prefix='glyphicon'
)
).add_to(m)
m
지도에 표시되는 마커는 icon 매개변수를 사용해 커스터마이징이 가능합니다.
prefix 값으로 전달 가능한 값은 다음과 같습니다
- glyphicon (bootstrap3 icons)
- fa (fontawesome)
fontawesome과 bootstrap 사이트에서 사용할 아이콘을 지정할 수 있습니다.
CircleMarker 추가하기
m = folium.Map(
location=[45.5236, -122.6750],
zoom_start=13,
tiles='Stamen Toner'
)
folium.Circle(
location=[45.5244, -122.6699],
radius=100,
popup='The Waterfront',
color='crimson',
fill=False
).add_to(m)
folium.CircleMarker(
location=[45.5215, -122.6261],
radius=50,
popup='Laurelhurst Park',
color='#3186cc',
fill=True,
fill_color='#3186cc'
).add_to(m)
m
Marker 객체가 지도상에서 핀으로 표시되는 반면에 CircleMarker 객체는 원으로 표시됩니다.
위 코드에서는 두 가지 원 객체가 등장하는데 차이점은 다음과 같습니다.
- Circle 객체는 미터(m) 단위로 원을 표시합니다.
- CircleMarker 객체는 픽셀(px) 단위로 원을 표시합니다.
Choropleth 지도 추가하기
state_data = pd.read_csv('../../data/US_Unemployment_Oct2012.csv')
m = folium.Map(location=[48, -102], zoom_start=3)
folium.Choropleth(
geo_data='../../data/us-states.json',
data=state_data,
columns=['State', 'Unemployment'],
key_on='feature.id',
fill_color='YlGn',
fill_opacity=.7,
line_opacity=.2,
legend_name='Unemployment Rate (%)'
).add_to(m)
m
Choropleth 지도를 추가하면 지도의 경계선을 따라 영역별 시각화가 가능합니다.
- geo_data (경계선 좌표값이 담긴 데이터)
- data (표시할 데이터; pandas DataFrame 또는 Series 객체)
- columns (data의 컬럼명)
마치며
folium 라이브러리를 사용해서 지도 데이터를 시각화하는 방법을 정리했습니다.
데이터 시각화가 점점 흥미로워지고 있는 것 같습니다!! 🤗
'파이썬・ML' 카테고리의 다른 글
Selenium 사용하기 (0) | 2023.07.07 |
---|---|
Selenium 크롬드라이버 location 에러 (0) | 2023.07.06 |
파이썬 random 모듈 사용하기 (0) | 2023.06.14 |
파이썬 객체에 대해서 (0) | 2023.06.05 |
파이썬 itertools 모듈로 순열/조합/중복순열/중복조합 구하기 (0) | 2023.06.02 |