티스토리 뷰

folium을 처음 접하며 해결하지 못했던 오류들 기록. 

 

geo json 대신 shape file을 이용할 경우 

지리 데이터 시각화(1)에서 다운 받은 202105기초구역DB_전체분 > 서울특별시 > 11000 > .dbf, .shp, .shx파일 세개와

202105기초구역DB_전체분 > GRS80_UTMK.prj 파일의 이름을 위 세파일과 똑같이 바꾼 파일(TL_KODIS_BAS.prj)을 올림. 

import geopandas as gpd

우편번호 - 권역 코드 매핑 데이터 가져옴. 

df = pd.read_csv('sample_data/code-bas_id_euc-kr.csv', encoding = 'euc-kr')
df['우편번호*'] = df['우편번호*'].astype('str').str.zfill(5)  # 다섯자리 맞춰주기 위해. 
df.rename(columns={'우편번호*':'BAS_ID'}, inplace=True)
df.rename(columns={'권역코드*':'AREA_CD'}, inplace=True)
df.head()

folium.Choropleth 에 AREA_CD 같은 명목형 변수를 그대로 쓸 경우 오류가 나기 때문에 cateorical로 바꿔주고 int로 타입 변경. 

df.AREA_CD = pd.Categorical(df.AREA_CD)
df['AREA_CD'] = df.AREA_CD.cat.codes

df['BAS_ID'] = df['BAS_ID'].astype('str')
df['AREA_CD'] = df['AREA_CD'].astype('int')

shape file 불러오기. 

seoul_file = "./sample_data/TL_KODIS_BAS.shp"
seoul = gpd.read_file(seoul_file, encoding='euckr')
geo_data = seoul

맵 생성하면 서울 지도가 나오긴한데 모든 구역이 검게 색칠됨. 

center = [37.541, 126.986]
m = folium.Map(location=center, zoom_start=10)

# Choropleth 레이어를 만들고, 맵 m에 추가.
folium.Choropleth(
    geo_data=geo_data,
    data=df,
    columns=('BAS_ID', 'AREA_CD'),
    key_on='BAS_ID',
    fill_color='YlGn',
).add_to(m)

m

그래서 geo json 파일 이용하기로 함. 

댓글
Total
Today
Yesterday
공지사항
최근에 올라온 글
글 보관함