Notice
Recent Posts
Recent Comments
250x250
Creative Code
마커클러스터, 데이터기반 지도 구분하기 본문
728x90
import pandas as pd
import folium
from folium.plugins import MarkerCluster
# cp949 인코딩으로 CSV 파일에서 데이터를 불러옵니다.
df = pd.read_csv('data/jeju.csv', encoding='cp949')
# 지도에 마커를 표시하는 함수 정의
def display(loc, map):
if loc[0] != '결과없음':
folium.Marker(loc[0], tooltip=loc[1]).add_to(map)
# (33.3616666, 126.5291666)를 중심으로 하는 지도를 생성하고 줌 레벨을 10으로 설정합니다.
map = folium.Map((33.3616666, 126.5291666), zoom_start=10)
# 시각화를 위한 마커 클러스터 생성
cluster = MarkerCluster().add_to(map)
# DataFrame의 각 행에 'display' 함수를 적용하여 지도에 마커를 추가합니다.
df[['위치', '읍면동']].apply(display, map=cluster, axis=1)
# 지도를 출력합니다.
print(map)
# 새로운 지도 생성 (주의: 이 줄에 오탈자가 있습니다. 'folium.Map'이어야 합니다)
map = folium.Map((33.3616666, 126.5291666), zoom_start=10)
# 시각화를 위한 마커 클러스터 생성
cluster = MarkerCluster().add_to(map)
# DataFrame 행을 반복하며 지도에 마커를 추가합니다.
for index, row in df.iterrows():
if row['위치'] != '결과없음':
folium.Marker(row['위치'], tooltip=row['읍면동']).add_to(cluster)
# 지도를 출력합니다.
print(map)
# 정규 표현식을 사용하여 '일반현황' 열에서 인구수 데이터를 추출합니다.
import re
df['인구수'] = df['일반현황'].apply(lambda x: int(re.findall('[0-9]{4,}', x)[-1]))
# DataFrame의 처음 몇 행을 출력합니다.
print(df.head())
# '지역' 열의 값들을 교체하여 '키' 열을 생성합니다.
df['키'] = df['지역'].replace(['제주시', '서귀포시'], ['Jeju', 'Seogwipo'])
# '키' 열로 DataFrame을 그룹화하고 '인구수'의 합계를 계산합니다.
df1 = df.groupby('키')['인구수'].sum().reset_index()
# 그룹화된 DataFrame을 출력합니다.
print(df1)
# 'json' 라이브러리를 불러옵니다.
import json
# 새 지도 생성
map = folium.Map((33.3616666, 126.52916660), zoom_start=10)
# 제주 지역의 지리 데이터를 포함하는 geojson 파일을 로드합니다.
jsonfile = open('data/jeju-municipalities-geo.json', 'r')
jsondata = json.load(jsonfile)
# 'df1' 데이터를 기반으로 Choropleth 지도를 생성하고 지도에 추가합니다.
folium.Choropleth(
geo_data=jsondata,
data=df1,
key_on='feature.id',
bins=5,
columns=['키', '인구수'],
legend_name='제주 인구수'
).add_to(map)
# 지도를 출력합니다.
print(map)
# 새 지도 생성
map = folium.Map((33.3616666, 126.5291666), zoom_start=10)
# 제주의 지리 데이터가 있는 geojson 파일을 로드합니다.
jsonfile = open('data/jeju.json', 'r')
jsondata = json.load(jsonfile)
# 'df' 데이터를 기반으로 Choropleth 지도를 생성하고 지도에 추가합니다.
folium.Choropleth(
geo_data=jsondata,
data=df,
key_on='feature.id',
bins=5,
columns=['읍면동', '인구수'],
legend_name='제주 인구수'
).add_to(map)
# 새 지도 생성
map = folium.Map((33.3616666, 126.5291666), zoom_start=10)
# 지리 데이터가 있는 geojson 파일을 로드합니다 (주의: 이 줄에 오탈자가 있습니다. 'jeju_geojson.json'이어야 합니다)
jsonfile = open('jeju_geojson.json', 'r')
jsondata = json.load(jsonfile)
# 'df' 데이터를 기반으로 Choropleth 지도를 생성하고 지도에 추가합니다.
cho = folium.Choropleth(
geo_data=jsondata,
data=df,
key_on='feature.id',
bins=5,
columns=['읍면동', '인구수'],
legend_name='제주 인구수'
).add_to(map)
# 지도에 툴팁과 팝업을 추가합니다.
cho.geojson.add_child(folium.features.GeoJsonTooltip(['adm_nm'], ['위치'], labels=True))
cho.geojson.add_child(folium.features.GeoJsonPopup(['adm_nm'], ['위치'], labels=True))
# 코드 끝입니다.
728x90
'코딩 study > python' 카테고리의 다른 글
sklearn(decisionTree,kfold,startified kfold,cross val score, GridSearchCV) (0) | 2023.10.30 |
---|---|
폰트 변경 (0) | 2023.10.29 |
folium을 사용해 지도에 마커추가, 행정구역 구분하기 (0) | 2023.10.29 |
geocoder, kakao API를 활용한 지리정보 검색,gpt기능 (0) | 2023.10.28 |
pandas (0) | 2023.10.26 |