11 분 소요

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, '사회', '사회')
Make this Notebook Trusted to load map: File -> Trust Notebook

댓글남기기