首页 > 解决方案 > 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  

标签: pythonpandasheatmapfolium

解决方案


您应该在输入到 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

推荐阅读