Python生成城市热力图
前言
这是一个利用folium包将GDP.xls文件内的信息加工成热力图的示例过程
1.导入数据
导入必要的包以及将GDP数据读入,其中numpy和pandas都是处理数据时常用的包
folium是地图包,提供绘制热力图以及链接到地图上的函数
GDP文件中有我们需要的城市名、城市经纬度和城市GDP和人数
import numpy as np
import pandas as pd
import folium #地图信息
from folium.plugins import HeatMap
import webbrowser #用于生成网页显示
data = pd.read_excel(r"GDP.xls") #使用 pandas 库读入待处理的 Excel 文件
2.提取数据
将data中我们需要的数据提取出来,在这个例子里我们一共处理100个城市的平均GDP,由于在文件中只有人数和城市总GDP,我们需要将其转化为人均GDP
cityNum = 100 # 共分析100座城市
lat = np.array(data["LAT"][0:cityNum]) # 获取纬度值
lon = np.array(data["LON"][0:cityNum]) # 获取经度值
pop = np.array(data["POP"][0:cityNum], dtype=float) # 获取人口数,转化为浮点型
gdp = np.array(data["GDP"][0:cityNum], dtype=float) # 获取 GDP,转化为浮点型
gdpAverage = np.array(data["GDP_Average"][0:cityNum],dtype=float) # 获取人均 GDP,转化为浮点型
3.生成热力图且保存
第一行将一个城市的经纬度和平均GDP制成一个列表,这个平均GDP就是我们在制作热力图时的权重
folium.Map函数将一张地图导入进来,location为地图中心位置,zoom_start为缩放比,这个数值越大,放大程度越高
HeatMap(data).add_to(mapData)这行代码将我们的热力图添加到了地图中
最后保存我们的热力图html文件,到时候打开就可以了
# 将数据制作成[纬度, 经度, 权重]的形式
data = [[lat[i], lon[i], gdpAverage[i]] for i in range(cityNum)]
# 生成地图数据,初始缩放程度为6倍
mapData = folium.Map(location=[35, 110], zoom_start=6)
# 将热力图添加到地图里
HeatMap(data).add_to(mapData)
# 将结果保存为 html(网页)文件
filePath = r"GDP_HeatMap.html"
mapData.save(filePath)
4.打开html文件
# 使用默认浏览器打开网页
webbrowser.open(filePath)
结果展示
资源下载:
资源下载:热力图原始资源