1. 라이브러리 불러오기
import pandas as pd
import numpy as np
import json
import seaborn as sns
import matplotlib.pyplot as plt
import geopandas as gpd
import folium
plt.rcParams['font.family'] = 'NanumGothic'
pd.options.display.float_format = '{:.5f}'.format
2. 지도데이터 불러오기
대한민국 최신 행정구역(SHP) 다운로드 페이지
sigungu = gpd.read_file('/데이터경로/SIG_20221119/sig.shp', encoding='cp949')
sigungu.geometry = sigungu.geometry.set_crs("EPSG:5179")
sigungu = sigungu.to_crs("EPSG:4326")
- 위의 데이터는 좌표계가
5179
라 우리가 사용하는 위경도인 4326
으로 변경해줘야 함

- 이 데이터는 시도는 안나와서 sig_cd인 행정동코드를 확인해서 원하는 지역의 데이터를 뽑아야 함
3. 충청남도 데이터 추출 및 새로운 열 생성
- 행정동코드(SIG_CD) 앞자리 2개가 시도를 나타냄
- 충청남도가 필요해서 SIG_CD가 44인 경우를 뽑음
cn = sigungu[sigungu['SIG_CD'].str[:2] == "44"]
cn['인구'] = np.random.randint(0,100, size=len(cn))
- 시각화를 위해 새로운 열인 인구 생성

4. folium으로 지도 시각화
- 먼저 geodataframe(cn)을 json형식으로 변경해야함
geojson_data = json.loads(cn.to_json())
center = [36.3278846883893, 127.418923240036]
m = folium.Map(location=center, zoom_start=10)
folium.Choropleth(
geo_data=geojson_data,
data=cn,
columns=['SIG_KOR_NM','인구'],
key_on='feature.properties.SIG_KOR_NM',
fill_color='Blues',
fill_opacity=0.7,
line_opacity=0.2,
legend_name='인구 수',
).add_to(m)
key_on
: json 파일 내의 특정 속성과 데이터의 키(key_on)를 매칭하여 시각화에 사용할 지리적 경계를 지정하는 역할
fill_opacity
: 채우기 색상 투명도
line_opacity
: 경계선 색상 투명도
- 시각화 결과

5. 각 구역의 중심에 이름 추가
for index, row in cn.iterrows():
centroid = [row.geometry.centroid.y, row.geometry.centroid.x]
name = row['SIG_KOR_NM']
folium.map.Marker(
location=centroid,
icon=folium.DivIcon(
icon_size=(150,36),
icon_anchor=(7,20),
html=f'<div style="font-size: 12pt">{name}</div>'
)
).add_to(m)
- 시각화 결과
