Lesson 15: 지리정보 시각화

Author

최규빈

Published

July 26, 2023

{{< https://youtu.be/playlist?list=PLQqh36zP38-xxG7nDnT3hEQKy6izEqLPT&si=Xd9rXXUj23s4ALSc >}}
import numpy as np
import pandas as pd
#---#
import plotly.express as px
import json 
import requests 

데이터 불러오기

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

df[df.년도 == 2018]
년도 시도 지역 건물동수 연면적 에너지사용량(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})

시각화2

_df = pd.DataFrame([[l,df[df.시도 == l]['에너지사용량(TOE)/전기'].sum(),df[df.시도 == l]['code'].iloc[0]] for l in set(df.시도)])
_df.columns = ['A','B','C']
_df
A B C
0 서울특별시 9331349 11
1 대구광역시 1802007 22
2 광주광역시 1154501 24
3 경상북도 2045804 37
4 충청북도 1413048 33
5 충청남도 1795949 34
6 울산광역시 779840 26
7 경상남도 2450436 38
8 부산광역시 2860998 21
9 강원도 1491560 32
10 전라남도 1341756 36
11 제주특별자치도 536540 39
12 세종특별자치시 263956 29
13 대전광역시 1221429 25
14 인천광역시 1988226 23
15 경기도 9084472 31
16 전라북도 1416208 35
fig = px.choropleth_mapbox(
    geojson = global_dict, # 폴리곤들이 정의되어 있는 dict를 의미, 깃헙에서 다운로드 해야하는 고정자료
    featureidkey = 'properties.code', # 코드 11따위가 저장되어있는 위치, global_dict상에서의 위치. 
    data_frame = _df, # 색상을 입힐떄 필요한 정보가 있는 데이터 프레임
    locations = 'C', # 색상정보데이터프레임에서 global_dict와 연결되는 코드를 정의해주는 column이름 
    color = 'B', # 색상정보데이터프레임에서 다각형에 칠해질 색을 정의해주는 column이름 
    hover_data = ['A'], # 색상정보데이터프레임에서 마우스를 움직였을 경우 나타나는 추가정보를 출력
    #---#
    mapbox_style="carto-positron",
    center={"lat": 36, "lon": 127.5}, 
    zoom=6,
    height=800,
    width=800    
)
fig.show(config={'scrollZoom':False})