공모전을 준비하던 중 지리 시각화를 할 일이 있었는데, 아무래도 전국 단위 지리 데이터(동별)은 용량이 크다 보니 시/도 별로 json 파일을 잘라서 쓰는 게 나을 거라 생각했다.
그래서 시/도 별로 geojson 파일을 만들어서, 17개 광역시도별 지리 데이터를 만들었다.
지리 데이터는 통계청의 데이터를 base로 가공한 대한민국 행정동 경계 파일을 사용했고, 저작권 문제가 없어서 원 repository를 표시한 채로 내 깃헙에 정리해 두었다.
해당 데이터는 다음과 같이 사용할 수 있다.
plotly express
를 사용해서 서울의 동별 인구를 시각화 해 보았다.
import os, json
import pandas as pd
import plotly.express as px
!git clone https://github.com/raqoon886/Local_HangJeongDong.git
os.chdir('./Local_HangJeongDong')
with open('./hangjeongdong_서울특별시.geojson', 'r') as f:
seoul_geo = json.load(f)
seoul_info = pd.read_csv('./sample.txt', delimiter='\t')
seoul_info = seoul_info.iloc[3:,:]
seoul_info = seoul_info[seoul_info['동']!='소계']
seoul_info['full_name'] = '서울특별시'+' '+seoul_info['자치구']+' '+seoul_info['동']
seoul_info['full_name'] = seoul_info['full_name'].apply(lambda x: x.replace('.','·'))
seoul_info['인구'] = seoul_info['인구'].apply(lambda x: int(''.join(x.split(','))))
fig = px.choropleth_mapbox(seoul_info,
geojson=seoul_geo,
locations='full_name',
color='인구',
color_continuous_scale='viridis', featureidkey = 'properties.adm_nm',
mapbox_style='carto-positron',
zoom=9.5,
center = {"lat": 37.563383, "lon": 126.996039},
opacity=0.5,
)
fig