단계구분도의 가장 쉬운 데이터는 역시나 인구수가 아닐까 싶습니다. 서울특별시 관악구의 인구수를 확인해봅시다.
● 데이터 다운로드
국토정보플랫폼의 국토정보맵에서 국토통계지도를 확인합니다.
11시방향과 같이 검색을 진행합니다.
※ 격자로 선택하는 경우, 500M 이하 구역으로 자를 때 구별 미만의 단위로만 가능합니다.
다음과 같이 형성된 데이터를 다운로드합니다.
● 코딩
패키지를 import 합니다
#기본 패키지
import numpy as np
import pandas as pd
import json
import folium
import geopandas as gpd
from geopandas import GeoDataFrame #메인
from shapely.geometry import Polygon, LineString, Point #격자, 선, 점
from fiona.crs import from_string
# 좌표 바꾸는 패키지
from pyproj import Transformer
import pyproj
# 심신의 안정 찾기(경고창 안뜨게 하기)
import warnings
warnings.filterwarnings('ignore')
shape 파일을 불러옵니다. (하나의 상위 폴더에 모두 넣어주는게 보기 편합니다.)
shape = gpd.GeoDataFrame.from_file('shp경로', encoding = 'utf-8')
# shape.crs를 통해 shp파일의 설명을 확인할 수 있습니다.
# shape.shape나 shape.crrs를 통해서도 가능합니다
# shape.head(n)을 통해서 index별 데이터 확인도 가능합니다(일반 dataframe과 유사합니다)
이런식으로 구성되어 있는것을 확인할 수 있습니다.
여기서 gid는 국가지점번호, lbl과 val은 인구수를 의미합니다.
※ geometry는 geopandas를 위해 꼭 필요한 컬럼으로, 단계구분도를 그려보자 1에서 설명한 EPSG마다 입력되는 형태가 다릅니다.
EPSG형태는 4326의 경위도가 기본인데, 조금 다른것 같습니다. 바꿔보겠습니다.
경도, 위도의 순서로 배치된 것을 확인할 수 있습니다.
이후 folium을 사용하여 다음과 같은 코드를 입력하면
# folium 지도 불러오기
m = folium.Map(location=[ '37.478069', '126.951523'], # 관악구청 경위도
zoom_start=12.5,
tiles='OpenStreetMap')
folium.GeoJson(
shape,
style_function = lambda x : style
).add_to(m)
# 인구별 단계구분도를 띄우기 위한 Polygon (다각형) 스타일 지정
style = {'fillColor': 'orange', # 채우는 색
'fillOpacity': 0.5, # 채우기 투명도
'color': 'black', # 선 색
'opacity' : 0.05, # 선 투명도
'weight': 1
}
# Choropleth 맵 생성
folium.Choropleth(
geo_data = shape, # Choropleth 맵에 사용될 지리 정보
data = shape, # Choropleth 맵에 사용될 데이터
columns = ['gid', 'val'], # 데이터에서 사용될 열 이름(구역, 인구 수)
key_on='feature.properties.gid', # GeoJson에서 고유 식별자로 사용할 (지리적 영역을 구분할) 열 이름
fill_color='YlOrRd', # 색상 팔레트 설정 예) 'YlGnBu', 'YlOrRd'
fill_opacity= 0.7, # 채우기 투명도 설정 / 0 (투명) ~ 1
bins= 14, # 색 구간
line_color = 'black', # 경계선 색
line_opacity = 0.05, # 경계선 투명도
nan_fill_color = 'white', # 결측치 색
nan_fill_opacity = 0, # 결측치 투명도 - 0 (완전투명)
name='관악구 총인구', # 이름
legend_name='관악구 총인구' # 범례 이름 설정
).add_to(m)
# 레이어 컨트롤 추가
folium.LayerControl().add_to(m)
# html 파일로 저장
# m.save('관악구 단계구분도.html')
# 지도 띄우기
m
아래와 같은 단계구분도를 그릴 수 있습니다.
다음 포스팅은 layer들을 합치는 작업을 진행하겠습니다.
'AIVLE_School' 카테고리의 다른 글
에이블스쿨 DX커리큘럼 - GeoPandas(단계구분도를 그려보자 3) (2) | 2023.06.03 |
---|---|
에이블스쿨 DX커리큘럼 - 공공데이터포털을 사용해보자 (0) | 2023.06.03 |
에이블스쿨 DX커리큘럼 - GeoPandas(단계구분도를 그려보자 1) (0) | 2023.06.02 |
에이블스쿨 DX커리큘럼 - 공모전에 나가보자(금융 데이터 활용 아이디어 경진대회) (2) | 2023.05.31 |
에이블스쿨 DX커리큘럼 - 데이터 전처리 (0) | 2023.03.28 |