2 분 소요

#지도로 시각화하기 위한 작업
import folium
from folium import plugins
import geopandas as gpd
from shapely.geometry import Point
from shapely.geometry.polygon import Polygon

#처음 맵이 나타날때의 위치좌표와, 확대비율을 지정한다.
m = folium.Map(
    location=[37.559819, 126.963895],
    zoom_start=11, 
    tiles='cartodbpositron'
)

#geoJson파일을 연다.
state_geo='C:\python\project\seoul_gu.geojson'
geoJSON_df = gpd.read_file(state_geo)
geoJSON_df_c = geoJSON_df.copy()
#geoJSON_df_c = gpd.read_file(state_geo)

#지도상 서울을 구단위로 나눠서 표현한다.
folium.GeoJson(
    geoJSON_df_c,   
    #tooltip=folium.GeoJsonTooltip(fields=(['SIG_KOR_NM']), aliases=(['지역구 :'])), 
    name='지역구'    
).add_to(m)  

#위에서 작업한 res를 geoJSON_df에 합치기 위해 "SIG_KOR_NM"인 열이름을
#"자치구"로 바꾼다."
geoJSON_df = geoJSON_df.rename(columns = {"SIG_KOR_NM":"자치구"})

#final_df에서 불필요한 정보를 보여주는'SIG_CD','SIG_ENG_NM'열을 제거한다.
#geoJSON_df=geoJSON_df.drop(['SIG_CD', 'SIG_ENG_NM'],axis=1)

#geoJSON_df에 selected_df를 "자치구"의 값이 같은 것을 기준으로 합친다.
final_df= geoJSON_df.merge(res, on = "자치구")
final_df_c = final_df.copy()

#final_df의 인덱스를 숫자가 아니라 '자치구'열의 값으로 지정한다.
final_df.set_index('자치구', inplace=True)
final_df
SIG_CD SIG_ENG_NM geometry 2020년 출산율_실제값_예측값_오차(%) 2021년 출산율_실제값_예측값_오차(%)
자치구
종로구 11110 Jongno-gu MULTIPOLYGON (((127.00864 37.58047, 127.00871 ... [0.522, 0.554, 3.201] [0.531, 0.554, 2.301]
중구 11140 Jung-gu MULTIPOLYGON (((127.02314 37.57196, 127.02336 ... [0.688, 0.854, 16.621] [0.634, 0.854, 21.958]
용산구 11170 Yongsan-gu MULTIPOLYGON (((126.96918 37.55566, 126.96917 ... [0.634, 0.63, 0.372] [0.664, 0.629, 3.489]
성동구 11200 Seongdong-gu MULTIPOLYGON (((127.04341 37.57234, 127.04524 ... [0.783, 0.838, 5.504] [0.764, 0.837, 7.29]
광진구 11215 Gwangjin-gu MULTIPOLYGON (((127.10166 37.57240, 127.10224 ... [0.527, 0.655, 12.841] [0.525, 0.655, 13.022]
동대문구 11230 Dongdaemun-gu MULTIPOLYGON (((127.07108 37.60732, 127.07117 ... [0.699, 0.799, 9.989] [0.66, 0.798, 13.79]
중랑구 11260 Jungnang-gu MULTIPOLYGON (((127.11131 37.62069, 127.11214 ... [0.66, 0.708, 4.85] [0.65, 0.708, 5.766]
성북구 11290 Seongbuk-gu MULTIPOLYGON (((127.01059 37.58025, 127.01030 ... [0.676, 0.769, 9.332] [0.656, 0.769, 11.345]
강북구 11305 Gangbuk-gu MULTIPOLYGON (((127.00457 37.68508, 127.00553 ... [0.55, 0.539, 1.149] [0.541, 0.535, 0.552]
도봉구 11320 Dobong-gu MULTIPOLYGON (((127.01509 37.64929, 127.01477 ... [0.601, 0.747, 14.6] [0.579, 0.747, 16.768]
노원구 11350 Nowon-gu MULTIPOLYGON (((127.11085 37.63841, 127.11090 ... [0.695, 0.688, 0.663] [0.701, 0.688, 1.271]
은평구 11380 Eunpyeong-gu MULTIPOLYGON (((126.95172 37.65489, 126.95186 ... [0.623, 0.717, 9.421] [0.604, 0.716, 11.222]
서대문구 11410 Seodaemun-gu MULTIPOLYGON (((126.95268 37.60274, 126.95267 ... [0.685, 0.654, 3.137] [0.635, 0.652, 1.655]
마포구 11440 Mapo-gu MULTIPOLYGON (((126.88888 37.58464, 126.88987 ... [0.594, 0.618, 2.374] [0.587, 0.618, 3.066]
양천구 11470 Yangcheon-gu MULTIPOLYGON (((126.87405 37.54694, 126.87417 ... [0.644, 0.71, 6.557] [0.645, 0.71, 6.452]
강서구 11500 Gangseo-gu MULTIPOLYGON (((126.80902 37.60064, 126.80936 ... [0.675, 0.672, 0.292] [0.617, 0.672, 5.48]
구로구 11530 Guro-gu MULTIPOLYGON (((126.87948 37.51778, 126.88173 ... [0.737, 0.703, 3.394] [0.737, 0.703, 3.405]
금천구 11545 Geumcheon-gu MULTIPOLYGON (((126.87456 37.48537, 126.87456 ... [0.668, 0.661, 0.677] [0.612, 0.658, 4.575]
영등포구 11560 Yeongdeungpo-gu MULTIPOLYGON (((126.88046 37.55627, 126.88139 ... [0.705, 0.925, 21.967] [0.713, 0.924, 21.117]
동작구 11590 Dongjak-gu MULTIPOLYGON (((126.95471 37.51603, 126.95555 ... [0.655, 0.648, 0.654] [0.602, 0.648, 4.646]
관악구 11620 Gwanak-gu MULTIPOLYGON (((126.92802 37.49502, 126.92822 ... [0.474, 0.629, 15.519] [0.437, 0.627, 18.979]
서초구 11650 Seocho-gu MULTIPOLYGON (((127.01317 37.52259, 127.01318 ... [0.656, 0.753, 9.723] [0.666, 0.753, 8.705]
강남구 11680 Gangnam-gu MULTIPOLYGON (((127.03968 37.53584, 127.03980 ... [0.537, 0.561, 2.398] [0.523, 0.559, 3.599]
송파구 11710 Songpa-gu MULTIPOLYGON (((127.11311 37.54317, 127.11305 ... [0.665, 0.68, 1.473] [0.623, 0.678, 5.501]
강동구 11740 Gangdong-gu MULTIPOLYGON (((127.17834 37.57058, 127.17835 ... [0.748, 0.706, 4.172] [0.797, 0.705, 9.183]

댓글남기기