충청도 양극화 지수 folium 시각화
1. 라이브러리 설치
# 라이브러리 설치
import pandas as pd
import geopandas as gpd
import folium
import json
# 경고메세지 제거
import warnings
warnings.filterwarnings('ignore')
2. 지형 데이터 불러오기 및 전처리
# 지형 데이터 불러오기
shape = r'C:\Users\YONSAI\Desktop\study\python\yonsei_final_project\data\siig.shp'
data = gpd.read_file(shape, encoding = 'cp949')
# 데이터프레임의 일부를 선택
chungcheong = data.loc[135:164]
daejeon = data.loc[64:68]
sejong = data[74:75]
geometry = pd.concat([daejeon, sejong, chungcheong]).reset_index(drop = True)
# 열 이름 변경을 위한 딕셔너리
new_column_names = {'SIG_CD': '행정코드', 'SIG_ENG_NM': '행정영어', 'SIG_KOR_NM' : '행정구역', 'geometry' : 'geometry'}
# 열 이름 변경 적용
geometry = geometry.rename(columns = new_column_names)
geometry.head()
| 행정코드 | 행정영어 | 행정구역 | geometry | |
|---|---|---|---|---|
| 0 | 30110 | Dong-gu | 동구 | POLYGON ((127.49532 36.43978, 127.49441 36.438... |
| 1 | 30140 | Jung-gu | 중구 | POLYGON ((127.45772 36.30201, 127.45772 36.302... |
| 2 | 30170 | Seo-gu | 서구 | POLYGON ((127.37301 36.28957, 127.37301 36.289... |
| 3 | 30200 | Yuseong-gu | 유성구 | POLYGON ((127.35663 36.33255, 127.35637 36.332... |
| 4 | 30230 | Daedeok-gu | 대덕구 | POLYGON ((127.48428 36.47749, 127.48692 36.477... |
3. 데이터 불러오기 및 전처리
data = pd.read_csv(r'C:\Users\YONSAI\Desktop\study\python\Data Visualization\data\최종양극화지수.csv', encoding = 'cp949')
data
| Unnamed: 0 | latitude | longitude | ahr | sp | ap | pits | pses | hos | ppsp | spfm | wsc | gre | cpp | 경제 | 사회 | 양극화지수 | 양극화 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 계룡시 | 36.274554 | 127.248633 | 4.6 | 89.8 | -32.5 | 12.7 | 34.2 | 86.4 | 96.5 | 10.0 | 0.0 | -26.2 | -5.5 | 20.6 | 26.0 | 23.3 | 0 |
| 1 | 공주시 | 36.446556 | 127.119040 | 29.3 | 7.8 | 26.7 | 25.1 | -10.8 | 91.4 | 96.5 | -3.2 | 14.7 | -16.9 | 18.2 | 21.3 | 26.9 | 24.1 | 0 |
| 2 | 괴산군 | 36.815381 | 127.786704 | 37.3 | 83.5 | 38.0 | 73.2 | 57.5 | 41.4 | 73.8 | 6.0 | 31.9 | 2.5 | -109.1 | 52.9 | 22.1 | 37.5 | 0 |
| 3 | 금산군 | 36.108857 | 127.488213 | 38.7 | 77.7 | 19.4 | 35.5 | 41.6 | 84.8 | 36.9 | -22.8 | 18.4 | -14.2 | -30.9 | 45.3 | 18.7 | 32.0 | 0 |
| 4 | 논산시 | 36.187240 | 127.098623 | 35.1 | 42.1 | 27.8 | 20.8 | 11.6 | 94.4 | 73.8 | 21.9 | 15.5 | -11.1 | 27.3 | 35.0 | 31.8 | 33.4 | 0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 107 | 청양군 | 36.459151 | 126.802238 | 41.3 | 87.7 | 52.9 | 49.0 | 41.7 | 100.0 | -9.3 | 38.8 | 49.8 | 2.3 | -114.5 | 60.6 | 19.7 | 40.2 | 0 |
| 108 | 청주시 | 36.642499 | 127.488975 | 20.5 | -321.1 | -26.2 | -18.8 | -20.4 | 53.1 | -111.3 | 0.6 | -0.2 | -11.6 | -107.3 | -108.9 | -27.0 | -67.9 | 1 |
| 109 | 충주시 | 36.991105 | 127.926012 | 26.7 | -21.3 | 14.7 | -10.9 | -22.9 | 39.7 | -259.4 | -5.4 | 2.2 | -5.1 | -60.0 | 6.7 | -40.2 | -16.8 | 1 |
| 110 | 태안군 | 36.745610 | 126.297913 | 29.1 | 61.8 | 24.8 | 7.4 | 30.8 | 100.0 | 38.5 | 53.0 | 0.5 | 2.4 | -230.9 | 38.6 | 0.2 | 19.4 | 0 |
| 111 | 홍성군 | 36.601324 | 126.660775 | 27.8 | 50.0 | 15.1 | -10.0 | 60.2 | 100.0 | 77.0 | -4.7 | 4.4 | 8.5 | -198.2 | 31.0 | 4.7 | 17.8 | 0 |
112 rows × 18 columns
# 연도별로 자료 구분
data_2018 = data.iloc[0:28]
data_2019 = data.iloc[28:56]
data_2020 = data.iloc[56:84]
data_2021 = data.iloc[84:]
# 열 이름 변경
data_2018.rename(columns = {data_2018.columns[0]: '행정구역'}, inplace = True)
data_2019.rename(columns = {data_2019.columns[0]: '행정구역'}, inplace = True)
data_2020.rename(columns = {data_2020.columns[0]: '행정구역'}, inplace = True)
data_2021.rename(columns = {data_2021.columns[0]: '행정구역'}, inplace = True)
# 데이터 합치기
data_2018 = pd.merge(geometry, data_2018, on = '행정구역', how = 'outer')
data_2019 = pd.merge(geometry, data_2019, on = '행정구역', how = 'outer')
data_2020 = pd.merge(geometry, data_2020, on = '행정구역', how = 'outer')
data_2021 = pd.merge(geometry, data_2021, on = '행정구역', how = 'outer')
data_2021.head()
| 행정코드 | 행정영어 | 행정구역 | geometry | latitude | longitude | ahr | sp | ap | pits | ... | hos | ppsp | spfm | wsc | gre | cpp | 경제 | 사회 | 양극화지수 | 양극화 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 30110 | Dong-gu | 동구 | POLYGON ((127.49532 36.43978, 127.49441 36.438... | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 1 | 30140 | Jung-gu | 중구 | POLYGON ((127.45772 36.30201, 127.45772 36.302... | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2 | 30170 | Seo-gu | 서구 | POLYGON ((127.37301 36.28957, 127.37301 36.289... | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 3 | 30200 | Yuseong-gu | 유성구 | POLYGON ((127.35663 36.33255, 127.35637 36.332... | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 4 | 30230 | Daedeok-gu | 대덕구 | POLYGON ((127.48428 36.47749, 127.48692 36.477... | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
5 rows × 21 columns
data_2018.iloc[36,4:]
latitude 36.35044
longitude 127.384951
ahr 20.8
sp -71.9
ap -66.4
pits -2.7
pses -10.1
hos 20.2
ppsp 0.7
spfm -5.3
wsc -3.0
gre -1.7
cpp 21.8
경제 -39.2
사회 2.5
양극화지수 -18.3
양극화 1.0
Name: 36, dtype: object
# 열 제거
data_2018.drop(columns = ['행정코드', '행정영어'], axis = 1, inplace = True)
data_2019.drop(columns = ['행정코드', '행정영어'], axis = 1, inplace = True)
data_2020.drop(columns = ['행정코드', '행정영어'], axis = 1, inplace = True)
data_2021.drop(columns = ['행정코드', '행정영어'], axis = 1, inplace = True)
data_2018.head()
| 행정구역 | geometry | latitude | longitude | ahr | sp | ap | pits | pses | hos | ppsp | spfm | wsc | gre | cpp | 경제 | 사회 | 양극화지수 | 양극화 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 동구 | POLYGON ((127.49532 36.43978, 127.49441 36.438... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 1 | 중구 | POLYGON ((127.45772 36.30201, 127.45772 36.302... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 2 | 서구 | POLYGON ((127.37301 36.28957, 127.37301 36.289... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 3 | 유성구 | POLYGON ((127.35663 36.33255, 127.35637 36.332... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 4 | 대덕구 | POLYGON ((127.48428 36.47749, 127.48692 36.477... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
# 데이터 채우기
## 2018년
data_2018.iloc[0:5, 2:] = data_2018.iloc[36, 2:] # 대전광역시
data_2018.iloc[6:10,2:] = data_2018.iloc[38, 2:] # 청주시
data_2018.iloc[20:22, 2:] = data_2018.iloc[37, 2:] # 천안시
## 2019년
data_2019.iloc[0:5, 2:] = data_2019.iloc[36, 2:] # 대전광역시
data_2019.iloc[6:10,2:] = data_2019.iloc[38, 2:] # 청주시
data_2019.iloc[20:22, 2:] = data_2019.iloc[37, 2:] # 천안시
## 2020년
data_2020.iloc[0:5, 2:] = data_2020.iloc[36, 2:] # 대전광역시
data_2020.iloc[6:10,2:] = data_2020.iloc[38, 2:] # 청주시
data_2020.iloc[20:22, 2:] = data_2020.iloc[37, 2:] # 천안시
## 2021년
data_2021.iloc[0:5, 2:] = data_2021.iloc[36, 2:] # 대전광역시
data_2021.iloc[6:10,2:] = data_2021.iloc[38, 2:] # 청주시
data_2021.iloc[20:22, 2:] = data_2021.iloc[37, 2:] # 천안시
# 위도 경도 채우기
## 2018
data_2018.iloc[0:5, 2] = [36.312169, 36.3256594, 36.355504, 36.3623219, 36.346735] # 대전광역시 위도
data_2018.iloc[0:5, 3] = [127.454884, 127.4215464, 127.383844, 127.3562683, 127.415502] # 대전광역시 경도
data_2018.iloc[6:10, 2] = [36.59310441523852, 36.56065711503503, 36.62885296982772, 36.70205268439824] # 청주시 위도
data_2018.iloc[6:10, 3] = [127.58406974994487, 127.43356103169857, 127.3758275522102, 127.50467722087664] # 청주시 경도
data_2018.iloc[20:22, 2] = [36.765501778077905, 36.87586328421402] # 천안시 위도
data_2018.iloc[20:22, 3] = [127.17070188712196, 127.16231064440395] # 천안시 경도
# 위도 경도 채우기
## 2019
data_2019.iloc[0:5, 2] = [36.312169, 36.3256594, 36.355504, 36.3623219, 36.346735] # 대전광역시 위도
data_2019.iloc[0:5, 3] = [127.454884, 127.4215464, 127.383844, 127.3562683, 127.415502] # 대전광역시 경도
data_2019.iloc[6:10, 2] = [36.59310441523852, 36.56065711503503, 36.62885296982772, 36.70205268439824] # 청주시 위도
data_2019.iloc[6:10, 3] = [127.58406974994487, 127.43356103169857, 127.3758275522102, 127.50467722087664] # 청주시 경도
data_2019.iloc[20:22, 2] = [36.765501778077905, 36.87586328421402] # 천안시 위도
data_2019.iloc[20:22, 3] = [127.17070188712196, 127.16231064440395] # 천안시 경도
# 위도 경도 채우기
## 2020
data_2020.iloc[0:5, 2] = [36.312169, 36.3256594, 36.355504, 36.3623219, 36.346735] # 대전광역시 위도
data_2020.iloc[0:5, 3] = [127.454884, 127.4215464, 127.383844, 127.3562683, 127.415502] # 대전광역시 경도
data_2020.iloc[6:10, 2] = [36.59310441523852, 36.56065711503503, 36.62885296982772, 36.70205268439824] # 청주시 위도
data_2020.iloc[6:10, 3] = [127.58406974994487, 127.43356103169857, 127.3758275522102, 127.50467722087664] # 청주시 경도
data_2020.iloc[20:22, 2] = [36.765501778077905, 36.87586328421402] # 천안시 위도
data_2020.iloc[20:22, 3] = [127.17070188712196, 127.16231064440395] # 천안시 경도
# 위도 경도 채우기
## 2021
data_2021.iloc[0:5, 2] = [36.312169, 36.3256594, 36.355504, 36.3623219, 36.346735] # 대전광역시 위도
data_2021.iloc[0:5, 3] = [127.454884, 127.4215464, 127.383844, 127.3562683, 127.415502] # 대전광역시 경도
data_2021.iloc[6:10, 2] = [36.59310441523852, 36.56065711503503, 36.62885296982772, 36.70205268439824] # 청주시 위도
data_2021.iloc[6:10, 3] = [127.58406974994487, 127.43356103169857, 127.3758275522102, 127.50467722087664] # 청주시 경도
data_2021.iloc[20:22, 2] = [36.765501778077905, 36.87586328421402] # 천안시 위도
data_2021.iloc[20:22, 3] = [127.17070188712196, 127.16231064440395] # 천안시 경도
# 행 제거
data_2018.drop(index = [36, 37, 38], axis = 0, inplace = True)
data_2019.drop(index = [36, 37, 38], axis = 0, inplace = True)
data_2020.drop(index = [36, 37, 38], axis = 0, inplace = True)
data_2021.drop(index = [36, 37, 38], axis = 0, inplace = True)
data_2018
| 행정구역 | geometry | latitude | longitude | ahr | sp | ap | pits | pses | hos | ppsp | spfm | wsc | gre | cpp | 경제 | 사회 | 양극화지수 | 양극화 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 동구 | POLYGON ((127.49532 36.43978, 127.49441 36.438... | 36.312169 | 127.454884 | 20.8 | -71.9 | -66.4 | -2.7 | -10.1 | 20.2 | 0.7 | -5.3 | -3.0 | -1.7 | 21.8 | -39.2 | 2.5 | -18.3 | 1.0 |
| 1 | 중구 | POLYGON ((127.45772 36.30201, 127.45772 36.302... | 36.325659 | 127.421546 | 20.8 | -71.9 | -66.4 | -2.7 | -10.1 | 20.2 | 0.7 | -5.3 | -3.0 | -1.7 | 21.8 | -39.2 | 2.5 | -18.3 | 1.0 |
| 2 | 서구 | POLYGON ((127.37301 36.28957, 127.37301 36.289... | 36.355504 | 127.383844 | 20.8 | -71.9 | -66.4 | -2.7 | -10.1 | 20.2 | 0.7 | -5.3 | -3.0 | -1.7 | 21.8 | -39.2 | 2.5 | -18.3 | 1.0 |
| 3 | 유성구 | POLYGON ((127.35663 36.33255, 127.35637 36.332... | 36.362322 | 127.356268 | 20.8 | -71.9 | -66.4 | -2.7 | -10.1 | 20.2 | 0.7 | -5.3 | -3.0 | -1.7 | 21.8 | -39.2 | 2.5 | -18.3 | 1.0 |
| 4 | 대덕구 | POLYGON ((127.48428 36.47749, 127.48692 36.477... | 36.346735 | 127.415502 | 20.8 | -71.9 | -66.4 | -2.7 | -10.1 | 20.2 | 0.7 | -5.3 | -3.0 | -1.7 | 21.8 | -39.2 | 2.5 | -18.3 | 1.0 |
| 5 | 세종특별자치시 | POLYGON ((127.18126 36.59730, 127.18124 36.597... | 36.480351 | 127.289433 | 16.4 | -51.9 | -80.7 | -2.1 | -2.6 | 90.4 | -44.0 | 7.6 | 1.4 | 25.2 | 18.2 | -38.7 | 11.8 | -13.5 | 1.0 |
| 6 | 청주시 상당구 | POLYGON ((127.48777 36.58367, 127.48790 36.583... | 36.593104 | 127.584070 | 15.4 | -337.8 | -29.8 | 0.4 | -6.2 | -313.1 | 59.6 | -8.3 | -0.1 | -13.7 | -87.3 | -117.4 | -46.1 | -81.7 | 1.0 |
| 7 | 청주시 서원구 | POLYGON ((127.48777 36.58367, 127.48776 36.583... | 36.560657 | 127.433561 | 15.4 | -337.8 | -29.8 | 0.4 | -6.2 | -313.1 | 59.6 | -8.3 | -0.1 | -13.7 | -87.3 | -117.4 | -46.1 | -81.7 | 1.0 |
| 8 | 청주시 흥덕구 | POLYGON ((127.32144 36.72477, 127.32150 36.724... | 36.628853 | 127.375828 | 15.4 | -337.8 | -29.8 | 0.4 | -6.2 | -313.1 | 59.6 | -8.3 | -0.1 | -13.7 | -87.3 | -117.4 | -46.1 | -81.7 | 1.0 |
| 9 | 청주시 청원구 | POLYGON ((127.57054 36.77438, 127.57050 36.774... | 36.702053 | 127.504677 | 15.4 | -337.8 | -29.8 | 0.4 | -6.2 | -313.1 | 59.6 | -8.3 | -0.1 | -13.7 | -87.3 | -117.4 | -46.1 | -81.7 | 1.0 |
| 10 | 충주시 | POLYGON ((127.74705 37.21172, 127.74702 37.210... | 36.991105 | 127.926012 | 20.8 | -20.7 | 14.1 | 6.7 | -10.3 | 81.8 | 39.7 | -9.9 | 5.2 | -5.1 | -47.3 | 4.7 | 7.6 | 6.2 | 1.0 |
| 11 | 제천시 | POLYGON ((127.98436 37.25737, 127.98483 37.257... | 37.132646 | 128.191037 | 17.2 | 25.3 | 27.8 | 8.7 | -8.7 | 49.5 | -16.3 | -9.1 | 3.1 | 38.6 | -178.2 | 23.4 | -14.1 | 4.7 | 1.0 |
| 12 | 보은군 | POLYGON ((127.79607 36.60898, 127.79629 36.608... | 36.489455 | 127.729485 | 2.4 | 86.3 | 38.0 | 51.4 | 63.9 | 30.8 | 23.4 | 57.3 | 46.1 | -22.3 | 58.2 | 42.2 | 38.6 | 40.4 | 0.0 |
| 13 | 옥천군 | POLYGON ((127.65115 36.44289, 127.65134 36.442... | 36.306437 | 127.571419 | 37.6 | 76.1 | 29.9 | 36.6 | 70.5 | 100.0 | -65.2 | 26.9 | 10.4 | -10.8 | -112.7 | 47.9 | 7.0 | 27.4 | 0.0 |
| 14 | 영동군 | POLYGON ((127.84740 36.31691, 127.84769 36.316... | 36.175047 | 127.783423 | 6.7 | 100.0 | 29.9 | 51.2 | 45.7 | 88.9 | 9.9 | 10.0 | 19.0 | 3.3 | 1.8 | 45.5 | 28.7 | 37.1 | 0.0 |
| 15 | 증평군 | POLYGON ((127.54022 36.80904, 127.54087 36.809... | 36.785345 | 127.581507 | 19.5 | 86.0 | 40.4 | -2.9 | 64.7 | 8.6 | -144.0 | 26.9 | -3.0 | 8.6 | -380.0 | 48.6 | -52.6 | -2.0 | 1.0 |
| 16 | 진천군 | POLYGON ((127.44427 37.01237, 127.44482 37.012... | 36.855420 | 127.435602 | 14.4 | 44.4 | 41.2 | 6.9 | 52.1 | 100.0 | 39.7 | 30.5 | 7.4 | 26.6 | -229.1 | 33.3 | 4.3 | 18.8 | 0.0 |
| 17 | 괴산군 | POLYGON ((127.80359 36.94802, 127.80371 36.947... | 36.815381 | 127.786704 | 37.3 | 83.5 | 38.0 | 73.2 | 57.5 | 41.4 | 73.8 | 6.0 | 31.9 | 2.5 | -109.1 | 52.9 | 22.1 | 37.5 | 0.0 |
| 18 | 음성군 | POLYGON ((127.63279 37.15473, 127.63278 37.154... | 36.940282 | 127.690487 | 38.2 | 36.9 | 16.2 | 18.5 | 36.6 | 80.3 | 14.2 | -9.0 | 10.5 | -21.8 | -169.1 | 30.4 | -5.0 | 12.7 | 1.0 |
| 19 | 단양군 | POLYGON ((128.34186 37.15829, 128.34195 37.158... | 36.984539 | 128.365589 | 37.8 | 84.4 | 36.8 | 43.6 | 57.7 | 68.2 | -58.2 | 57.3 | 23.7 | -19.4 | -127.3 | 53.0 | 5.7 | 29.3 | 0.0 |
| 20 | 천안시 동남구 | POLYGON ((127.29885 36.89021, 127.30008 36.890... | 36.765502 | 127.170702 | 9.2 | -327.1 | -13.7 | -2.1 | 20.0 | -318.2 | 69.5 | -24.6 | 0.5 | 9.8 | -41.8 | -110.5 | -35.9 | -73.2 | 1.0 |
| 21 | 천안시 서북구 | POLYGON ((127.11855 36.97137, 127.11886 36.971... | 36.875863 | 127.162311 | 9.2 | -327.1 | -13.7 | -2.1 | 20.0 | -318.2 | 69.5 | -24.6 | 0.5 | 9.8 | -41.8 | -110.5 | -35.9 | -73.2 | 1.0 |
| 22 | 공주시 | POLYGON ((126.97049 36.67968, 126.97159 36.677... | 36.446556 | 127.119040 | 29.3 | 7.8 | 26.7 | 25.1 | -10.8 | 91.4 | 96.5 | -3.2 | 14.7 | -16.9 | 18.2 | 21.3 | 26.9 | 24.1 | 0.0 |
| 23 | 보령시 | MULTIPOLYGON (((125.97145 36.23836, 125.97226 ... | 36.333452 | 126.612803 | 9.8 | 43.4 | 11.9 | 15.4 | 20.9 | 35.9 | 76.6 | 26.0 | 13.3 | 3.4 | 54.5 | 21.7 | 30.7 | 26.2 | 0.0 |
| 24 | 아산시 | POLYGON ((127.07147 36.94043, 127.07181 36.940... | 36.790013 | 127.002474 | 43.0 | -90.2 | 15.1 | 9.3 | 24.3 | 44.9 | 66.0 | -15.4 | 0.0 | 15.6 | -140.0 | -10.7 | 0.6 | -5.0 | 1.0 |
| 25 | 서산시 | MULTIPOLYGON (((126.41398 36.60393, 126.41380 ... | 36.784922 | 126.450277 | 46.7 | 8.1 | -2.3 | 4.9 | 31.0 | 100.0 | 98.6 | 2.0 | 0.6 | 12.9 | 12.7 | 17.5 | 32.8 | 25.2 | 0.0 |
| 26 | 논산시 | POLYGON ((127.12083 36.32225, 127.12104 36.321... | 36.187240 | 127.098623 | 35.1 | 42.1 | 27.8 | 20.8 | 11.6 | 94.4 | 73.8 | 21.9 | 15.5 | -11.1 | 27.3 | 35.0 | 31.8 | 33.4 | 0.0 |
| 27 | 계룡시 | POLYGON ((127.19920 36.26089, 127.19921 36.260... | 36.274554 | 127.248633 | 4.6 | 89.8 | -32.5 | 12.7 | 34.2 | 86.4 | 96.5 | 10.0 | 0.0 | -26.2 | -5.5 | 20.6 | 26.0 | 23.3 | 0.0 |
| 28 | 당진시 | MULTIPOLYGON (((126.58615 36.83419, 126.58615 ... | 36.889974 | 126.645900 | 15.6 | 3.3 | -45.0 | 11.7 | 25.9 | 57.1 | 32.6 | 4.9 | 14.9 | 44.0 | -65.5 | -8.7 | 15.7 | 3.5 | 1.0 |
| 29 | 금산군 | POLYGON ((127.37615 36.27258, 127.37708 36.272... | 36.108857 | 127.488213 | 38.7 | 77.7 | 19.4 | 35.5 | 41.6 | 84.8 | 36.9 | -22.8 | 18.4 | -14.2 | -30.9 | 45.3 | 18.7 | 32.0 | 0.0 |
| 30 | 부여군 | POLYGON ((126.68125 36.33203, 126.68261 36.331... | 36.275658 | 126.909775 | 28.4 | 73.3 | 19.8 | 45.4 | 66.6 | 67.2 | 46.8 | 49.4 | 15.1 | -4.3 | 5.5 | 40.5 | 36.4 | 38.5 | 0.0 |
| 31 | 서천군 | MULTIPOLYGON (((126.60648 35.99148, 126.60548 ... | 36.080286 | 126.691742 | 43.3 | 77.9 | 39.4 | 37.1 | 62.5 | 32.3 | 36.9 | 54.6 | 15.5 | -25.9 | -343.6 | 53.5 | -16.3 | 18.6 | 0.0 |
| 32 | 청양군 | POLYGON ((126.67472 36.46200, 126.67484 36.462... | 36.459151 | 126.802238 | 41.8 | 90.4 | 42.8 | 48.5 | 72.9 | 58.1 | 18.4 | 34.0 | 50.8 | 2.3 | -101.8 | 58.3 | 22.9 | 40.6 | 0.0 |
| 33 | 홍성군 | MULTIPOLYGON (((126.45965 36.59481, 126.45965 ... | 36.601324 | 126.660775 | 25.8 | 52.1 | 13.5 | 24.9 | 88.5 | 100.0 | 63.8 | -14.3 | 6.7 | 6.7 | -181.8 | 30.5 | 11.8 | 21.1 | 0.0 |
| 34 | 예산군 | POLYGON ((126.71472 36.80378, 126.71475 36.803... | 36.680900 | 126.844738 | 10.1 | 63.9 | 37.2 | 41.6 | 56.2 | 98.5 | 74.5 | 44.7 | 28.4 | 17.1 | -114.5 | 37.1 | 30.8 | 33.9 | 0.0 |
| 35 | 태안군 | MULTIPOLYGON (((126.32752 36.88600, 126.32737 ... | 36.745610 | 126.297913 | 28.1 | 64.9 | 6.9 | 34.4 | 41.1 | 61.6 | 97.9 | 47.4 | 9.9 | -4.1 | -172.7 | 33.3 | 14.4 | 23.9 | 0.0 |
4. 전처리 데이터 저장
## 2018년 파일 저장
data_2018.to_csv(r'C:\Users\YONSAI\Desktop\study\python\Data Visualization\data\2018년_최종.csv', encoding = 'cp949')
# GeoJSON으로 변환하여 저장합니다
data_2018.to_file(r'C:\Users\YONSAI\Desktop\study\python\Data Visualization\data\2018년_최종.geojson', driver = 'GeoJSON')
geo_data_2018 = r'C:\Users\YONSAI\Desktop\study\python\Data Visualization\data\2018년_최종.geojson'
with open(geo_data_2018) as f:
geo_data_2018 = json.loads(f.read())
## 2019년
data_2019.to_csv(r'C:\Users\YONSAI\Desktop\study\python\Data Visualization\data\2019년_최종.csv', encoding = 'cp949')
# GeoJSON으로 변환하여 저장합니다
data_2019.to_file(r'C:\Users\YONSAI\Desktop\study\python\Data Visualization\data\2019년_최종.geojson', driver = 'GeoJSON')
geo_data_2019 = r'C:\Users\YONSAI\Desktop\study\python\Data Visualization\data\2019년_최종.geojson'
with open(geo_data_2019) as f:
geo_data_2019 = json.loads(f.read())
## 2020년
data_2020.to_csv(r'C:\Users\YONSAI\Desktop\study\python\Data Visualization\data\2020년_최종.csv', encoding = 'cp949')
# GeoJSON으로 변환하여 저장합니다
data_2020.to_file(r'C:\Users\YONSAI\Desktop\study\python\Data Visualization\data\2020년_최종.geojson', driver = 'GeoJSON')
geo_data_2020 = r'C:\Users\YONSAI\Desktop\study\python\Data Visualization\data\2020년_최종.geojson'
with open(geo_data_2020) as f:
geo_data_2020 = json.loads(f.read())
## 2021년
data_2021.to_csv(r'C:\Users\YONSAI\Desktop\study\python\Data Visualization\data\2021년_최종.csv', encoding = 'cp949')
# GeoJSON으로 변환하여 저장합니다
data_2021.to_file(r'C:\Users\YONSAI\Desktop\study\python\Data Visualization\data\2021년_최종.geojson', driver = 'GeoJSON')
geo_data_2021 = r'C:\Users\YONSAI\Desktop\study\python\Data Visualization\data\2021년_최종.geojson'
with open(geo_data_2021) as f:
geo_data_2021 = json.loads(f.read())
5. folium 시각화 함수 생성
# folium 시각화
def folium_visual_title(data, geo_data, col, kw):
map = folium.Map(location = [36.6425, 127.489], zoom_start = 9)
folium.Choropleth(
geo_data = geo_data,
name = "choropleth",
data = data,
columns = ["행정구역", col],
key_on = 'feature.properties.행정구역',
fill_color = "YlOrRd",
fill_opacity = 0.7,
line_opacity = 0.2,
legend_name = col,
).add_to(map)
for i in range(len(data['행정구역'])):
popup_content = ('행정구역 : ' + str(data['행정구역'][i]) + '<br>' +
f'{kw} : ' + str(data[col][i]))
popup = folium.Popup(popup_content, max_width = 130)
folium.Marker([data['latitude'][i], data['longitude'][i]],
popup = popup,
icon = folium.Icon(color = 'blue', icon = 'info-sign')).add_to(map)
folium.LayerControl().add_to(map)
return map
6. folium 시각화
folium_visual_title(data_2018, geo_data_2018, '사회', '사회')
댓글남기기