Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Git
- Baekjoon
- leetcode
- 맥북
- hackerrank
- PYTHON
- 프로그래머스 파이썬
- github
- ubuntu
- ChatGPT
- 자연어처리
- Docker
- AI 경진대회
- 더현대서울 맛집
- 파이썬
- SW Expert Academy
- Kaggle
- 편스토랑 우승상품
- 코로나19
- dacon
- 편스토랑
- 프로그래머스
- 금융문자분석경진대회
- Real or Not? NLP with Disaster Tweets
- gs25
- 백준
- 우분투
- 캐치카페
- 데이콘
- programmers
Archives
- Today
- Total
솜씨좋은장씨
[folium] Choropleth 의 legend를 지우는 방법 (Python) 본문
COMPAS/COMPAS 화성시 최적 시내버스 노선 제안
[folium] Choropleth 의 legend를 지우는 방법 (Python)
솜씨좋은장씨 2020. 9. 5. 23:38728x90
반응형
요즘! idEANS ( ideans.tistory.com ) 팀원들과 함께
LH 공사에서 주최하는 COMPAS 고양시 공공자전거 스테이션 최적 위치 선정 공모전을 도전해보고 있어
오랜만에 다시 Folium 라이브러리를 활용하여 이것 저것 데이터를 시각화 해보고 있습니다.
그러던 중 화성시 공모전 때와 동일하게 인구수 데이터를 활용하여 지도 위에 동 별 인구수를 시각화 할 필요가 있었습니다.
그러나 이전에 시각화 당시 Choropleth 의 legend가 너무 많이 그려지는 문제가 있었습니다.
그 당시에는 이 문제를 해결하지 못했었는데 이번에 다시 동일한 문제를 해결하기 위해 구글링을 해보니
github issue에 지난 4월 어떤 분이 해결 방법을 올려놓으신 것을 확인하였고
이를 직접 적용해보니 해결할 수 있었습니다.
다음은 화성시 데이터를 바탕으로 위의 issue의 답변을 적용해 본 코드입니다.
진행 환경
코드 실행 | Python | Folium |
COMPAS 제공 노트북 | 3.6.9 | 0.8.3 |
데이터 다운로드
혹시 화성시 데이터가 필요하시다면 다음의 링크에서 다운로드 받으시면 됩니다.
필요 라이브러리 import 하기
import pandas as pd
import folium
import folium.plugins
import json
import geopandas as gpd
다운로드 받은 geojson 파일 로드하기
my_gpd = gpd.read_file('../PJT001_h_100m_cell_pop.geojson')
( pop_ttl ) 전체 인구수와 ( emd_cd ) 읍면동 코드 데이터만 남기기
my_gpd = my_gpd.loc[ : , ['pop_ttl', 'emd_cd']]
그 중 nan 값을 가진 행들을 제거
my_gpd_drop = my_gpd.dropna()
화성시 읍면동 정보 ( 코드, emd_cd ) 정보가 담긴 geojson 불러오기
import geojson
gdf = gpd.read_file('../PJT001_tl_scco_emd.geojson')
my_json = json.loads(gdf.to_json())
my_json2 = my_json['features']
Folium 라이브러리를 활용하여 지도에 시각화
중심이 될 좌표값
latitude = 37.136881
longitude = 127.036171
choropleth를 활용하여 시각화
def folium_del_legend(choropleth: folium.Choropleth):
del_list = []
for child in choropleth._children:
if child.startswith('color_map'):
del_list.append(child)
for del_item in del_list:
choropleth._children.pop(del_item)
return choropleth
m = folium.Map(location=[latitude, longitude], zoom_start=10)#, tiles='color_map')
gdf = gdf.to_crs(epsg='4326')
converted_json = gdf.to_json()
def draw_data(data):
choropleth_data = folium.Choropleth(
geo_data = data,
name='인구수',
data=my_gpd_drop,
columns=['emd_cd', 'pop_ttl'],
key_on='properties.emd_cd',
fill_color='YlGn',
fill_opacity=0.7,
line_opacity=0.3,
color = 'gray',
overlays=True
)
return choropleth_data
for i in range(len(my_json2)):
if i == 0:
draw_data(my_json2[i]).add_to(m)
elif i > 0:
folium_del_legend(draw_data(my_json2[i]).add_to(m)).add_to(m)
결과를 HTML 파일로 저장
m.save('population_visualization.html')
github issue의 방법대로 이번에는 하나의 legend 이외에 나머지 legend는 지워지는 것을 확인할 수 있었습니다.
이전에는 결과물 캡쳐사진을 찍기위해서 chrome 개발자 도구를 열어 html 코드에서 하나하나 삭제하며 지웠던 기억이....
그래도 해결 방법을 알게되어 기분이 좋습니다.
나머지 진행하면서 알게된 점들은 공모전 이후에 적어보려합니다.
읽어주셔서 감사합니다!
'COMPAS > COMPAS 화성시 최적 시내버스 노선 제안' 카테고리의 다른 글
국토도시 데이터 분석 경진대회 시상식 참석 후기! (0) | 2019.12.25 |
---|---|
COMPAS 화성시 최적 시내버스 제안 공모전 우수상 수상 (0) | 2019.12.20 |
Comments