Folium 모듈을 통해 Leaflet.js를 사용하는 Python의 공간 히트 맵

이전 게시물에서는 Python에서 Geopy 및 Folium을 사용하여 데이터를 지오 코딩하고 마커를 플로팅하는 방법을 시연했습니다. 또한 Leaflet과 같은 패키지를 사용하여 R에서 히트 매핑 워크 플로를 시연했습니다. 이 게시물에서는 Python의 Folium 모듈을 통해 히트 맵을 생성하기 위해 Leaflet.js 라이브러리를 사용하고 싶습니다. 아래에 스크립트를 제공합니다. 스크립트는 위치 이름과 주소가있는 csv 파일을 읽습니다. Geopy 및 Nominatim 지오 코딩 서비스를 사용하면이 위치 목록이 지오 코딩되어 위도와 경도를 기준으로 좌표를 반환합니다. csv 파일에는 각 위치에 대한 메트릭 값이 포함되어 있습니다. 이 측정 항목은 히트 맵의 색상 강도를 정의합니다.

아래 코드 줄은 csv 파일을 읽고 해당 위치 항목을 위도와 경도로 지오 코딩하는 데 사용됩니다. 최종 pandas DataFrame에 대한 간략한 설명이 제공됩니다.

# 관련 패키지 / 모듈 가져 오기
import pandas
import folium
from folium.plugins import HeatMap
# 위치 데이터를 포함하는 csv 파일에서 읽음
data = pandas.read_csv("heatmap.csv")
# 국가, 도시 및 거리를 단일 주소 문자열로 병합
data["addresses"] = data["country"] + ", " + data["city"] + ", " + data["street "]
# geopy 모듈 가져 오기
import geopy
# 서비스 객체 생성
service = geopy.Nominatim(user_agent = "myGeocoder")
# Pandas에 .apply () 메서드를 사용하여 모든 주소를 지오 코딩합니다.DataFrame
from geopy.extra.rate_limiter import RateLimiter
data["coordinates"] = data["addresses"].apply(RateLimiter(service.geocode,min_delay_seconds=1))
# 지오 코딩 된 pandas DataFrame 테이블보기
data.head()
국가시티거리미터법구애좌표
0GermanyBerlinAlexanderplatz 110Germany, Berlin, Alexanderplatz 1(Alexanderstraße, Spandauer Vorstadt, Mitte, B…
1GermanyBerlinDircksenstrasse 25Germany, Berlin, Dircksenstrasse 2(2, Dircksenstraße, Luisenstadt, Mitte, Berlin…
2GermanyBerlinRathausstrasse 116Germany, Berlin, Rathausstrasse 1(1-14, Rathausstraße, Spandauer Vorstadt, Mitt…
3GermanyBerlinRosa-Luxemburg-Strasse 211Germany, Berlin, Rosa-Luxemburg-Strasse 2(2, Rosa-Luxemburg-Straße, Scheunenviertel, Mi…
4GermanyBerlinMemhardstrasse 88Germany, Berlin, Memhardstrasse 8(8, Memhardstraße, Scheunenviertel, Mitte, Ber…

지오 코딩 된 DataFrame을 사용하여 folium 히트 맵을 만듭니다.

# 경도와 위도 값을 추출하여 목록을 분리
longs = [coord.longitude for coord in data["coordinates"]]
lats = [coord.latitude for coord in data["coordinates"]]
# 평균 경도 및 위도 값 계산
import statistics
meanLong = statistics.mean(longs)
meanLat = statistics.mean(lats)
# Map ()을 사용하여 기본 맵 객체 생성
mapObj = folium.Map(location=[meanLat, meanLong], zoom_start = 14.5)
# 히트 맵 레이어 생성
heatmap = HeatMap( list(zip(lats, longs, data["metric "])),
                   min_opacity=0.2,
                   max_val=data["metric "].max(),
                   radius=50, blur=50, 
                   max_zoom=1)
# 기본지도에 히트 맵 레이어 추가
heatmap.add_to(mapObj)
mapObj

Leave a Reply

답글 남기기

이메일 주소는 공개되지 않습니다.

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

Close

메타