python - COVID 19 的叶片热图与时间
问题描述
我正在尝试为确诊的 Covid 19 病例创建热图电影。
我的数据集是一个pd.dataFrame
带有列Date
, Latitude
, Longitude
, Confirmed
.
我的问题是我不知道如何输入 Confirmed 值作为Folium.plugin.HeatmapWithTime
.
我尝试使用:
new_map = folium.Map(location=[0, 0], tiles= "cartodbpositron",min_zoom=2, zoom_start=2, max_zoom=3)
df['Lat'] = df['Lat'].astype(float)
df['Long'] = df['Long'].astype(float)
Confirmed_df = df[['Lat', 'Long','Confirmed']]
hm = plugins.HeatMapWithTime(Confirmed_df,auto_play=True,max_opacity=0.8)
hm.add_to(new_map)
new_map
df 看起来像:
Date LAT LONG Confirmed
2020/04/26 48.847306 2.433284 6500
2020/04/26 48.861935 2.441292 4800
2020/04/26 48.839644 2.655109 9000
2020/04/25 48.924351 2.386369 12000
2020/04/25 48.829872 2.376677 0
解决方案
您应该在输入到 HeatMapWithTime() 函数之前预处理数据。Folium文档和此处的示例很有帮助。
在您的情况下,输入应该是 [lat, lng, weight] 的列表,您应该使用 Confirmed 列作为权重。首先,您需要将“已确认”值标准化为 (0, 1]。
df['Confirmed'] = df['Confirmed'] / df['Confirmed'].sum()
然后,您可以像这样进行预处理:
df['Date'] = df['Date'].sort_values(ascending=True)
data = []
for _, d in df.groupby('Date'):
data.append([[row['lat'], row['lng'], row['Confirmed']] for _, row in d.iterrows()])
最后,使用数据输入到函数 HeatMapWithTime() ,就像你做的那样:
hm = plugins.HeatMapWithTime(data, auto_play=True,max_opacity=0.8)
hm.add_to(new_map)
new_map
推荐阅读
- sql - 从一组中选择最大值
- r - 应用问题给每个元素一个不同的名字
- javascript - 调整鼠标滚轮触发的 Cytoscape.js 中的缩放比例
- c++ - 指针与 const 和重载的交互
- python - 在 python 中更新 XML 标记值
- flutter - Flutter:内部带有图像的动态对话框大小
- javascript - 什么原因,提交后没有更改道具?
- azure-data-explorer - 使用 replace() 时无法将参数 2 转换为标量常量
- aem - 单击 cq-FileUpload-clear 时的事件侦听器
- linkedin - 如何获取linkedIn账户的用户名