Lesson 15: 지리정보 시각화
데이터 불러오기
global_dict = json.loads(requests.get('https://raw.githubusercontent.com/southkorea/southkorea-maps/master/kostat/2018/json/skorea-provinces-2018-geo.json').text)
local_dict = json.loads(requests.get('https://raw.githubusercontent.com/southkorea/southkorea-maps/master/kostat/2018/json/skorea-municipalities-2018-geo.json').text)
#--#
df = pd.read_csv('https://raw.githubusercontent.com/guebin/PP2024WIN/main/posts/Day3/choro.csv')
df| 년도 | 시도 | 지역 | 건물동수 | 연면적 | 에너지사용량(TOE)/전기 | 에너지사용량(TOE)/도시가스 | 에너지사용량(TOE)/지역난방 | code_local | code | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2018 | 서울특별시 | 종로구 | 17929 | 9141777 | 64818 | 82015 | 111 | 11010 | 11 |
| 1 | 2019 | 서울특별시 | 종로구 | 17851 | 9204140 | 63492 | 76653 | 799 | 11010 | 11 |
| 2 | 2020 | 서울특별시 | 종로구 | 17638 | 9148895 | 60123 | 71263 | 912 | 11010 | 11 |
| 3 | 2021 | 서울특별시 | 종로구 | 22845 | 18551145 | 125179 | 117061 | 0 | 11010 | 11 |
| 4 | 2018 | 서울특별시 | 중구 | 10598 | 10056233 | 81672 | 75260 | 563 | 11020 | 11 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 995 | 2021 | 제주특별자치도 | 제주시 | 67053 | 20275738 | 103217 | 25689 | 0 | 39010 | 39 |
| 996 | 2018 | 제주특별자치도 | 서귀포시 | 34154 | 6914685 | 34470 | 1597 | 0 | 39020 | 39 |
| 997 | 2019 | 제주특별자치도 | 서귀포시 | 34729 | 7233931 | 34641 | 1306 | 0 | 39020 | 39 |
| 998 | 2020 | 제주특별자치도 | 서귀포시 | 34880 | 7330040 | 35510 | 1639 | 0 | 39020 | 39 |
| 999 | 2021 | 제주특별자치도 | 서귀포시 | 35230 | 7512206 | 37884 | 2641 | 0 | 39020 | 39 |
1000 rows × 10 columns
시각화1
| 년도 | 시도 | 지역 | 건물동수 | 연면적 | 에너지사용량(TOE)/전기 | 에너지사용량(TOE)/도시가스 | 에너지사용량(TOE)/지역난방 | code_local | code | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2018 | 서울특별시 | 종로구 | 17929 | 9141777 | 64818 | 82015 | 111 | 11010 | 11 |
| 4 | 2018 | 서울특별시 | 중구 | 10598 | 10056233 | 81672 | 75260 | 563 | 11020 | 11 |
| 8 | 2018 | 서울특별시 | 용산구 | 17201 | 10639652 | 52659 | 85220 | 12043 | 11030 | 11 |
| 12 | 2018 | 서울특별시 | 성동구 | 14180 | 11631770 | 60559 | 107416 | 0 | 11040 | 11 |
| 16 | 2018 | 서울특별시 | 광진구 | 21520 | 12054796 | 70609 | 130308 | 0 | 11050 | 11 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 980 | 2018 | 경상남도 | 함양군 | 12706 | 1462068 | 6593 | 2510 | 0 | 38380 | 38 |
| 984 | 2018 | 경상남도 | 거창군 | 14757 | 2310173 | 10780 | 7530 | 0 | 38390 | 38 |
| 988 | 2018 | 경상남도 | 합천군 | 16372 | 1604332 | 7803 | 1 | 0 | 38400 | 38 |
| 992 | 2018 | 제주특별자치도 | 제주시 | 64743 | 18933369 | 95392 | 15996 | 0 | 39010 | 39 |
| 996 | 2018 | 제주특별자치도 | 서귀포시 | 34154 | 6914685 | 34470 | 1597 | 0 | 39020 | 39 |
250 rows × 10 columns
fig = px.choropleth_mapbox(
geojson = local_dict, # 폴리곤들이 정의되어 있는 dict를 의미, 깃헙에서 다운로드 해야하는 고정자료
featureidkey = 'properties.code', # 코드 11010따위가 저장되어있는 위치, local_dict상에서의 위치.
data_frame = df[df.년도 == 2018], # 색상을 입힐떄 필요한 정보가 있는 데이터 프레임
locations = 'code_local', # 색상정보데이터프레임에서 local_dict와 연결되는 코드를 정의해주는 column이름
color = '에너지사용량(TOE)/전기', # 색상정보데이터프레임에서 다각형에 칠해질 색을 정의해주는 column이름
hover_data = ['시도','지역','건물동수'], # 색상정보데이터프레임에서 마우스를 움직였을 경우 나타나는 추가정보를 출력
#---#
mapbox_style="carto-positron",
center={"lat": 36, "lon": 127.5},
zoom=6,
height=800,
width=800
)
fig.show(config={'scrollZoom':False})