단계 구분도 choropleth map
지역별 통계치를 색깔 차이로 표현한 지도
import jsonjson.load(open('file.geojson', encoding='UTF-8'))pip install foliumfolium.Map(location=[위도, 경도], zoom_start=n)zoom_start : 지도 확대 정도tiles : 지도 종류quantile() 이용해 구간 정하기folium.Choropleth(parameters)geo_data : 지도 데이터data : 색깔로 표현할 통계 데이터columns : 통계 데이터의 행정 구역 코드 변수, 색깔로 표현할 변수key_on : 지도 데이터의 행정 구역 코드bins : 계급 구간 기준값fill_color, nan_fill_color : 컬러맵, 결측치 색깔fill_opacity, line_opacity : 투명도 (0~1) , 경계선 투명도 (0~1).add_to(배경지도) : 배경지도에 단계 구분도 덧씌우기지도.save('file.html')import webbrowser, webbrowser.open_new('file.html')# 시군구별 인구 단계 구분도 만들기
%pip install folium
# 1. 시군구 경계 지도 데이터 준비하기
import json
geo = json.load(open('SIG.geojson', encoding='UTF-8'))
# 2. 시군구별 인구 데이터 준비하기
import pandas as pd
df_pop = pd.read_csv('Population_SIG.csv')
df_pop['code'] = df_pop['code'].astype(str)
# 3. 단계 구분도 만들기 (배경 지도 map_sig, 계급 구간 bins)
import folium
map_sig = folium.Map(location = [35.95, 127.7], zoom_start = 8, tiles = 'cartodbpositron')
bins = list(df_pop["pop"].quantile([0, 0.2, 0.4, 0.6, 0.8, 1]))
folium.Choropleth(geo_data = geo,
data = df_pop,
columns = ('code', 'pop'),
key_on = 'feature.properties.SIG_CD',
fill_color = 'YlGnBu'
full_opacity = 1,
line_opacity = 0.5,
bins = bins).add_to(map_sig)
map_sig
# 서울시 동별 외국인 인구 단계 구분도 만들기
# 1. 서울시 동 경계 지도 데이터 준비하기
import json
geo_seoul = json.load(open('EMD_Seoul.geojson', encoding='UTF-8'))
geo_seoul['features'][0]['properties'] # 행정 구역 코드 출력
geo_seoul['features'][0]['geometry'] # 위도, 경도 좌표 출력
# 2. 서울시 동별 외국인 인구 데이터 준비하기
foreigner = pd.read_csv('Foreigner_EMD_Seoul.csv')
foreigner['code'] = foreigner['code'].astype(str)
# 3. 단계 구분도 만들기
bins = list(foreigner["pop"].quantile([0, 0.2, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]))
map_seoul = folium.Map(location=[37.56, 127], zoom_start=12, tiles='cartodbpositron')
folium.Choropleth(geo_data=geo_seoul, data=foreigner, columns=('code', 'pop'), key_on='feature.properties.ADM_DR_CD', fill_color='Blues', nan_fill_color='White', fill_opacity=1, line_opacity=0.5, bins=bins).add_to(map_seoul)
# 4.꾸미기 - 구 경계선 추가
geo_seoul_sig = json.load(open('SIG_Seoul.geojson', encoding='UTF-8'))
folium.Choropleth(geo_data = geo.seoul_sig, fill_opacity=0, line_weight=4).add_to(map_seoul)
map_seoul