첫 번째로 살펴볼 시각화 패키지는 Folium 입니다.
leaflet.js 기반으로 지도를 그려주고, 모바일에서도 쓸 수 있을만큼 가볍습니다.
나온지도 다른 라이브러리들에 비해 상대적으로 오래된 패키지입닌다만, 그만큼 안정적입니다.
한편, 분석 프레임워크로 가장 많이쓰는 pandas 와 쉽게 연동되어 간편하게 시각화가 가능합니다.
파이썬에서 지도 시각화 하면 가장 유명한 패키지일지도 모르겠습니다.
자 그럼 시작해보겠습니다.
1. 설치
먼저 pip install 로 folium 을 설치하고 임포트해줍니다.
pip install folium
import folium
folium.__version__
'0.9.0'
2. 샘플 하나 해보기
https://python-visualization.github.io/folium/quickstart.html#Getting-Started
위 링크로 가시면 어떻게 사용하는지 문서화가 아주 잘되있습니다.
이 글에서는 제가 미리 만둘어둔 데이터를 통해 어떤 식으로 데이터를 시각화하는지 살펴보겠습니다.
import pandas as pd
# 미리 만들어둔 데이터를 불러옵니다.
df = pd.read_csv('data/older_population.csv')
df.head()
구 | 동 | 인구 | 남자 | 여자 | |
---|---|---|---|---|---|
0 | 종로구 | 사직동 | 9700 | 4375 | 5325 |
1 | 종로구 | 삼청동 | 3013 | 1443 | 1570 |
2 | 종로구 | 부암동 | 10525 | 5002 | 5523 |
3 | 종로구 | 평창동 | 18830 | 8817 | 10013 |
4 | 종로구 | 무악동 | 8745 | 4078 | 4667 |
샘플로 쓸 데이터는 서울시 행정동 단위의 고령 인구 데이터입니다.
구, 동 별로 데이터가 있는 것을 확인하실 수 있습니다.
이번엔 행정동 단위의 지도 데이터 파일을 지정해보겠습니다.
geo_data = 'data/seoul-dong.geojson'
이 데이터를 열어보면 다음과 같이 생겼습니다.
{
"type": "FeatureCollection",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": [{
"type": "Feature",
"properties": {
"시": "서울특별시",
"구": "종로구",
"동": "사직동",
"행정동코드": 11110530
},
"geometry": {
"type": "MultiPolygon",
"coordinates": [ [ [ [ 126.976888842748167, 37.575650779448786 ], [ 126.977034498877501, 37.569194530054546 ], [ 126.975974728212492, 37.569336299425764 ], ...] ] ] }
}, {
"type": "Feature",
"properties": {
"시": "서울특별시",
"구": "종로구",
"동": "삼청동",
"행정동코드": 11110540
},
"geometry": {
"type": "MultiPolygon",
"coordinates": [ [ [ [ 126.98268938649305, 37.595065519422398 ], [ 126.983372584569992, 37.594351925516882 ], [ 126.983868097928024, 37.593850468126433 ], ... ] ] ]
},
...
]
}
features
에 각 동별 MultiPolygon 정보를 담고있는 일반적인 GeoJson 파일입니다.
이제 이 두 데이터로 인구수에 따른 Choropleth Map 을 만들어보겠습니다.
# 서울시 중심부의 위도, 경도 입니다.
center = [37.541, 126.986]
# 맵이 center 에 위치하고, zoom 레벨은 11로 시작하는 맵 m을 만듭니다.
m = folium.Map(location=center, zoom_start=10)
# Choropleth 레이어를 만들고, 맵 m에 추가합니다.
folium.Choropleth(
geo_data=geo_data,
data=df,
columns=('동', '인구'),
key_on='feature.properties.동',
fill_color='BuPu',
legend_name='노령 인구수',
).add_to(m)
# 맵 m을 출력합니다.
m