이전 게시물에서는 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()
국가 | 시티 | 거리 | 미터법 | 구애 | 좌표 | |
---|---|---|---|---|---|---|
0 | Germany | Berlin | Alexanderplatz 1 | 10 | Germany, Berlin, Alexanderplatz 1 | (Alexanderstraße, Spandauer Vorstadt, Mitte, B… |
1 | Germany | Berlin | Dircksenstrasse 2 | 5 | Germany, Berlin, Dircksenstrasse 2 | (2, Dircksenstraße, Luisenstadt, Mitte, Berlin… |
2 | Germany | Berlin | Rathausstrasse 1 | 16 | Germany, Berlin, Rathausstrasse 1 | (1-14, Rathausstraße, Spandauer Vorstadt, Mitt… |
3 | Germany | Berlin | Rosa-Luxemburg-Strasse 2 | 11 | Germany, Berlin, Rosa-Luxemburg-Strasse 2 | (2, Rosa-Luxemburg-Straße, Scheunenviertel, Mi… |
4 | Germany | Berlin | Memhardstrasse 8 | 8 | Germany, 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
최적화 및 시뮬레이션을 전문으로하는 산업 엔지니어 (R, Python, SQL, VBA)
Leave a Reply