如何用Folium生成以房价为权重的热力图而非默认频率热力图
解决方案:用房价作为Folium热力图的权重值
嘿,你完全不用靠复制行来模拟权重!Folium的HeatMap插件本身就支持直接传入权重值,这才是高效且正确的做法。
核心原理
HeatMap接受的热力数据列表里,每个元素可以是**[纬度, 经度, 权重值]**的三元组,第三个值就会被用作该点的热力权重(数值越大,热力强度越高,颜色越深),完全不需要通过重复行来模拟频率。
修改后的完整代码
import pandas as pd from folium import Map from folium.plugins import HeatMap # 你的示例数据 data = pd.DataFrame({ "house_id" : [1, 2, 3, 4], "latitude": [55.83, 55.79, 55.86, 55.85], "longitude": [12.05, 12.10, 12.07, 12.09], "price": [2000, 2100, 1500, 4500] }) # 生成包含权重的热力数据:每个元素是[纬度, 经度, 房价] heat_data = [[row['latitude'], row['longitude'], row['price']] for _, row in data.iterrows()] # 创建基础地图 m = Map(location=[55.838913, 12.055415], zoom_start=13) # 添加热力图,自动使用第三个值作为权重 HeatMap(heat_data).add_to(m) # 显示地图(Jupyter环境直接运行m即可,本地环境可保存为HTML文件) # m.save('house_price_heatmap.html')
额外优化建议
- 如果房价数值差异过大,可以对价格做归一化处理(比如
(price - data['price'].min())/(data['price'].max() - data['price'].min())),让热力图的对比度更合理; - 可以通过
HeatMap的参数调整热力效果:比如radius控制点的影响范围,blur控制模糊程度,max_val设置最大权重对应的热力上限,示例:HeatMap(heat_data, radius=15, blur=10, max_val=data['price'].max()).add_to(m)
这个方法不仅计算效率拉满,还能精准反映每个房源的房价权重,完全避免了复制行带来的内存和性能浪费,大数据集下优势特别明显!
内容的提问来源于stack exchange,提问作者Dennis Hansen
相关产品推荐
相关产品推荐

