13wk-2

지리정보시각화
plotly
Author

최규빈

Published

November 30, 2022

Choropleth– plotly 공식예제, 한국의 인구수

강의영상

https://youtube.com/playlist?list=PLQqh36zP38-xMzRk6gxgRE5guD0soCx9b

Import

import pandas as pd 
import json 
import requests 
import plotly.express as px

plotly 공식예제

data

df = px.data.election()
geojson = px.data.election_geojson()

- df는 어떻게 생겼을까?

df.head()
district Coderre Bergeron Joly total winner result district_id
0 101-Bois-de-Liesse 2481 1829 3024 7334 Joly plurality 101
1 102-Cap-Saint-Jacques 2525 1163 2675 6363 Joly plurality 102
2 11-Sault-au-Récollet 3348 2770 2532 8650 Coderre plurality 11
3 111-Mile-End 1734 4782 2514 9030 Bergeron majority 111
4 112-DeLorimier 1770 5933 3044 10747 Bergeron majority 112

- geojson은 어떻게 생겼을까?

geojson.keys()
dict_keys(['type', 'features'])
geojson['features'][0].keys()
dict_keys(['type', 'geometry', 'properties', 'id'])
[geojson['features'][i]['properties'] for i in range(5)]
[{'district': '11-Sault-au-Récollet'},
 {'district': '12-Saint-Sulpice'},
 {'district': '13-Ahuntsic'},
 {'district': '14-Bordeaux-Cartierville'},
 {'district': '21-Ouest'}]
[geojson['features'][i]['id'] for i in range(5)]
['11', '12', '13', '14', '21']

시각화예시1: 공식예제 코드 그대로

fig = px.choropleth_mapbox(data_frame= df, 
                           geojson=geojson, 
                           color="Bergeron",
                           locations="district", 
                           featureidkey="properties.district",
                           center={"lat": 45.5517, "lon": -73.7073},
                           mapbox_style="carto-positron",
                           zoom=9)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})

시각화예시2: key를 변경

fig = px.choropleth_mapbox(data_frame= df, 
                           geojson=geojson, 
                           color="Bergeron",
                           locations="district_id", 
                           featureidkey="id",
                           center={"lat": 45.5517, "lon": -73.7073},
                           mapbox_style="carto-positron",
                           zoom=9)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})

한국의 인구수

df=pd.read_csv('https://raw.githubusercontent.com/guebin/2021DV/master/_notebooks/2021-11-22-prov.csv')
df
행정구역(시군구)별 총인구수 (명)
0 서울특별시 9532428
1 부산광역시 3356311
2 대구광역시 2390721
3 인천광역시 2945009
4 광주광역시 1442454
5 대전광역시 1454228
6 울산광역시 1122566
7 세종특별자치시 368276
8 경기도 13549577
9 강원도 1537717
10 충청북도 1596948
11 충청남도 2118977
12 전라북도 1789770
13 전라남도 1834653
14 경상북도 2627925
15 경상남도 3318161
16 제주특별자치도 676569
global_distriction_jsonurl='https://raw.githubusercontent.com/southkorea/southkorea-maps/master/kostat/2018/json/skorea-provinces-2018-geo.json'
global_dict = json.loads(requests.get(global_distriction_jsonurl).text)
fig = px.choropleth_mapbox(df,  ### 데이터프레임 
                           geojson=global_dict, ### json파일 
                           color="총인구수 (명)", ### df에서 코로플레스의 단계를 표시 
                           locations="행정구역(시군구)별", ### df에 존재하는 연결변수 
                           featureidkey="properties.name", ### json에 존재하는 연결매개체
                           center={"lat": 35.84195368311022, "lon": 127.1155556693179}, 
                           mapbox_style="carto-positron", 
                           zoom=5)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})

숙제

없음