在之前的文章中,我演示了如何使用Python中的Geopy和Folium对数据进行地理编码和标记。我还演示了使用Leaflet之类的R中的热映射工作流程。
在本文中,我想使用Leaflet.js库通过Python的Folium模块创建热图。
我在下面提供了这样做的脚本。该脚本读取带有位置名称和地址的csv文件。使用Geopy和Nominatim地理编码服务,可以对位置列表进行地理编码,并按经度和纬度返回坐标。 csv文件包含每个位置的指标值。此度量标准定义热图的颜色强度。
下面的代码行用于读取csv文件,并将其位置条目地理编码为纬度和经度。提供了最终熊猫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") #对熊猫人DataFrame使用.apply()方法对每个地址进行地址解析 from geopy.extra.rate_limiter import RateLimiter data["coordinates"] = data["addresses"].apply(RateLimiter(service.geocode,min_delay_seconds=1)) #显示经过地理编码的熊猫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,我创建了一个叶子热图:
#提取经度和纬度值以分离列表 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