https://mjs1995.tistory.com/169?category=802136
앞에서 만든 geojson 파일을 가지고 Python Mapbox을 이용한 지도 시각화를 하려고 합니다.
데이터는 Kosis에 있는 2018년도 시군구별 인구수 데이터를 이용하려고 합니다.
Mapbox를 이용한 지도시각화
Mapbox는 지도 API를 이용하여 Polygon 형태의 geojson파일 시각화를 해보겠습니다. Mapbox 지도시각화의 다양한 예제들은 Mapbox 깃허브에서 확인할 수 있습니다.
https://github.com/mapbox/mapboxgl-jupyter
필요한 라이브러리를 불러옵니다.
import pandas as pd
import json
import mapboxgl
import os
데이터 불러오기
데이터는 2018년 소멸위험지수를 계산한 데이터를 사용하였습니다.
df = pd.read_csv('2018년소멸위험지수.csv', encoding='cp949')
df['sigun_code']=df['sigun_code'].astype(str)
df.head()
geojson 파일
geojson파일을 json.load를 이용해서 불러온 다음에 데이터를 확인해봅니다.
state_geo ='map (7).zip.geojson'
state_geo1 = json.load(open(state_geo, encoding='utf-8'))
for idx, sigun_dict in enumerate(state_geo1['features']):
sigun_id = sigun_dict['properties']['merged']
sigun_nmm = df.loc[(df.sigun_code == sigun_id), 'sigun_nm'].iloc[0]
risk = df.loc[(df.sigun_code == sigun_id), '총인구_여자(명)'].iloc[0]
people = df.loc[(df.sigun_code == sigun_id), '총인구_65세이상(명)'].iloc[0]
people_w = df.loc[(df.sigun_code == sigun_id), '소멸위험지수'].iloc[0]
txt = f'<b><h4>{sigun_nmm}</h4></b>총인구_여자(명) :{risk:.2f}<br>총인구_65세이상(명) : {people}<br>소멸위험지수 : {people_w}'
state_geo1['features'][idx]['properties']['tooltip1'] = txt
state_geo1['features'][idx]['properties']['risk'] = people_w
state_geo1['features'][0]
ChoroplethViz
import mapboxgl
from mapboxgl.viz import *
import os
from mapboxgl.utils import create_color_stops
https://www.mapbox.com/ 사이트에 들어가서 계정을 생성하고 account에 들어가면 본인의 token값에 대해 확인할 수 있습니다.
MAPBOX_API_KEY = 'mapbox사이트에서 본인의 api 주소 키'
access_token : mapbox의 api key 값
center : 중심점
color_property : 폴리곤 색상을 결정하는 값
color_stops : 폴리곤 색상을 결정하는 범주의 속성
zoom : 지도의 줌
center = [126.986, 37.565]
color_breaks = [0, 0.5, 1, 1.5, 2]
color_stops = create_color_stops(color_breaks, colors='BuPu')
viz = ChoroplethViz(
access_token=MAPBOX_API_KEY,
data=state_geo1,
color_property='risk',
color_stops=color_stops,
center=center,
zoom=10)
viz.show()
bearing : 맵을 지정된 값만큼 좌우 회전
pitch : 맵을 지정된 값만큼 상하 회전
height_property : 3D 돌출을 위한 높이를 줄 속성
height_stops : 3D 돌출 높이를 결정하기 위한 속성
height_function_type : 높이를 할당하기 위해 Mapbox에서 사용하는 유형
from mapboxgl.utils import create_numeric_stops
viz = ChoroplethViz(
access_token=MAPBOX_API_KEY,
data=state_geo1,
color_property='risk',
color_stops=color_stops,
center=center,
zoom=10,
bearing = -17,
pitch = 43,
height_property = 'risk',
height_stops = create_numeric_stops([0, 0.5, 1, 1.5, 2], 0, 30000),
height_function_type = 'interpolate'
)
viz.show()
CircleViz
단순한 지점을 점으로 시각화
viz = CircleViz(
state_geo1,
access_token=MAPBOX_API_KEY,
center=center,
zoom=10)
viz.show()
점에 색상을 부여하여 시각화
viz = CircleViz(
state_geo1,
access_token=MAPBOX_API_KEY,
color_property = 'risk',
color_stops = create_color_stops( [0, 0.5, 1, 1.5, 2], colors='BuPu'),
center=center,
zoom=10)
viz.show()
GraduatedCircleViz
점의 크기와 색상에 따라 데이터를 시각화
from mapboxgl.utils import create_color_stops
from mapboxgl.utils import create_radius_stops
viz = GraduatedCircleViz(
state_geo1,
access_token=MAPBOX_API_KEY,
color_property='risk',
color_stops=create_color_stops([0, 0.5, 1, 1.5, 2], colors='BuPu'),
radius_property="risk",
radius_stops=create_radius_stops([0, 0.5, 1, 1.5, 2], 0, 8),
center=center,
zoom=10)
viz.show()
mapbox를 이용하여 지도 시각화를 하는법에 대해 알아봤습니다.
이 이외에도 공식깃허브에 들어가면 geojson데이터로 다양하게 시각화한 사례들을 살펴볼 수 있습니다.
'BI > Python' 카테고리의 다른 글
[python][plotly] 코로나 시각화 (0) | 2021.01.18 |
---|---|
[python][plotly] geojson을 이용한 지도그리기 (4) (0) | 2021.01.13 |
[python][지도시각화] 일본 도도부현 시각화 (0) | 2021.01.11 |
[python] 레이더차트 시각화 (2) | 2020.09.23 |
[python][folium] geojson을 이용한 지도그리기 (2) (9) | 2020.09.02 |