조금씩 꾸준히 완성을 향해

[Folium] 단계 구분도(Choropleth Map) 표시하기 본문

Python/데이터 시각화

[Folium] 단계 구분도(Choropleth Map) 표시하기

all_sound 2022. 10. 2. 10:16

지도 영역에 단계구분도(Choropleth Map) 표시하기

 

  • 행정구역과 같이 지도 상의 어떤 경계에 둘러싸인 영역에 색을 칠하거나 음영 등으로 정보를 나타내는 시각화 방법
  • 전달하려는 정보의 값이 커지면 영역에 칠해진 음영이 진해진다.
#경기도 인구변화 데이터를 불러와서 데이터프레임 df로 변환
df = pd.read_excel('/content/drive/MyDrive/ Encore Prac/경기도인구데이터.xlsx')

#'구분'열을 인덱스로 지정
df.set_index('구분', inplace=True)

# 컬럼명을 str타입으로 변환(map)
df.columns = df.columns.map(str)
#경기도 지도 만들기
g_map = folium.Map(location=[37.5502, 126.982],tiles='Stamen Terrain', zoom_start=11)
 # json파일 불러와서 저장
 import json
 df_json = pd.read_json('/content/drive/MyDrive/ Encore Prac/경기도행정구역경계.json')
 df_json.head(3) #상위 세 개 열 확인

 

#단계 구분도 넣기
folium.Choropleth(geo_data='/content/drive/MyDrive/ Encore Prac/경기도행정구역경계.json').add_to(g_map)

 

  • json 인코딩 오류날 때 대처
# 인코딩 오류날 시 
import json

json_path = '/content/drive/MyDrive/ Encore Prac/경기도행정구역경계.json'
try:
  gdata = json.load(open(json_path), encoding='utf-8')
except:
  gdata = json.load(open(json_path), encoding='utf-8-sig')

g_map = folium.Map(location=[37.5502, 126.982],tiles='Stamen Terrain', zoom_start=11)
folium.Choropleth(geo_data=gdata).add_to(g_map)

 

  • 2017년의 인구분포 저장
#년도 지정
year= 2017 
#서울 지도 만들기
g_map = folium.Map(location=[37.5502, 126.982],tiles='Stamen Terrain', zoom_start=8)
#Choropoleth 클래스로 단계구분도 표시하기
folium.Choropleth(geo_data='/content/drive/MyDrive/ Encore Prac/경기도행정구역경계.json',
                  data = df[year], #표시하려는 데이터
                  columns=[df.index, df[year]],#열지정
                  bins=[10000, 100000, 300000, 500000, 700000], #색상 범위 지정
                  key_on= 'feature.properties.name'
                  ).add_to(g_map) #열지정
#지도를 html파일로 저장
g_map.save('./gyonggi_population_'+ str(year) + '.html')