Folium은 파이썬을 위한 강력한 지도 시각화 라이브러리입니다. Leaflet.js를 기반으로 하여, 개발자들이 파이썬 코드를 사용하여 다양한 지도 시각화를 쉽게 생성할 수 있게 해줍니다. 이 라이브러리는 데이터 과학자, 지리 정보 시스템(GIS) 전문가, 웹 개발자 등 지도와 관련된 작업을 하는 사람들에게 특히 유용합니다.
지도 생성: 사용자는 Folium을 사용하여 다양한 종류의 지도를 생성할 수 있습니다. 이는 기본 지도부터 시작하여, 위성 이미지, 지형도, 교통 흐름도 등 다양한 베이스맵을 포함할 수 있습니다.
마커 추가: 지정된 위치에 마커를 추가하여 해당 위치를 강조할 수 있습니다. 마커에는 텍스트, 아이콘, 팝업 등 다양한 요소를 포함시킬 수 있습니다.
원, 선, 다각형 추가: 지도 위에 다양한 형태의 그래픽 요소를 추가하여 특정 영역을 강조하거나 경로를 표시할 수 있습니다.
레이어 및 컨트롤 추가: 사용자는 여러 레이어를 지도에 추가하고, 레이어 간 전환을 위한 컨트롤을 설정할 수 있습니다. 이를 통해 다양한 정보를 효과적으로 전달할 수 있습니다.
인터랙티브: 마커나 그래픽 요소에 마우스를 올리거나 클릭했을 때 정보를 보여주는 등, 사용자와의 인터랙션을 구현할 수 있습니다.
HTML 파일로 내보내기: 생성된 지도를 HTML 파일로 내보내어 웹 페이지에 쉽게 통합할 수 있습니다. 이는 웹 기반 프로젝트에 특히 유용합니다.
지역별 데이터들을 사용하게 되면, 데이터 지역명들과 GeoJSON에서의 지역명들이 안맞는 경우들이 있다. 이런경우, 데이터 지역명들을 수정하는 것을 추천한다.
import folium
import pandas as pd
import json
# Load the GeoJSON file
with open("SIDO_MAP_2022.json") as f:
geojson_data = json.load(f)
# Extract the CTP_KOR_NM from the GeoJSON file
CTP_KOR_NM = [feature['properties']['CTP_KOR_NM'] for feature in geojson_data['features']]
# Print the extracted CTP_KOR_NM
print(CTP_KOR_NM)
아예 이렇게 사용할 컬럼명을 보면서 대조해보는 것도 방법 중 하나!
# Load the GeoJSON file
with open("SIDO_MAP_2022.json") as f:
geojson_data = json.load(f)
# Load the data with order amounts by region
# 이 부분은 앞서 'order_count_by_area' 데이터프레임을 생성한 코드를 바탕으로 가정합니다.
data = order_count_by_area
# Create a folium map centered on the region
# 지도의 중심 좌표를 해당 지역에 맞게 조정합니다.
#folium.Map(location=[위도, 경도], zoom_start=숫자(확대 정도))
m = folium.Map(location=[36, 128], zoom_start=6)
# Create a choropleth map layer
folium.Choropleth(
geo_data=geojson_data,# GeoJSON 데이터
name='choropleth',#name: 레이어 이름.
data=data,#data: 지역별 데이터.
columns=['CTP_KOR_NM', '주문횟수_normalized'],#데이터프레임에서 사용할 열 이름
key_on='feature.properties.CTP_KOR_NM', # GeoJSON 구조에 맞게 key_on 수정
#key_on: GeoJSON 파일 내 지역 이름을 참조하는 키. feature.properties.CTP_KOR_NM을 사용합니다.
fill_color='GnBu',#fill_color: 색상 단계 지도의 색상 팔레트.
fill_opacity= 0.7,#fill_opacity와 line_opacity: 채우기 및 선의 투명도.
line_opacity=0.4,
legend_name='도별 주문횟수' #legend_name: 범례의 이름.
).add_to(m)
# Display the map
m