如何用Python将新冠累计病例转换为人口占比并绘制Choropleth地图?
实现新冠病例人口占比的Choropleth地图
完全可以用Python实现这个需求,核心思路是将新冠累计病例数据与各国人口数据合并,计算占比后再可视化,具体步骤如下:
1. 准备人口数据
你需要一个包含国家名称和对应人口的数据集,这里提供一个常用国家的示例数据(如需更完整的数据集,可手动整理或从权威统计机构获取):
# 示例人口数据(可按需补充更多国家) population_data = { "Country": ["United States of America", "China", "India", "Brazil", "United Kingdom", "France", "Germany", "Russia", "Japan", "Italy"], "Population": [331002651, 1439323776, 1380004385, 212559417, 67886011, 65273511, 83783942, 145934462, 126476461, 60461826] } pop_df = pd.DataFrame(population_data)
2. 合并数据集并计算占比
将WHO新冠数据与人口数据按国家名称匹配,再计算累计病例占人口的百分比:
import pandas as pd import plotly.express as px # 加载WHO新冠数据 df = pd.read_csv("https://covid19.who.int/WHO-COVID-19-global-data.csv") # 合并两份数据(按国家名称匹配) merged_df = pd.merge(df, pop_df, on="Country", how="left") # 计算占比,处理缺失值避免报错 merged_df["Cumulative_cases_pct"] = merged_df.apply( lambda row: (row["Cumulative_cases"] / row["Population"]) * 100 if pd.notna(row["Population"]) and row["Population"] > 0 else None, axis=1 )
3. 修改可视化代码
把颜色映射的字段替换为新的百分比列,同时调整标题和颜色轴标签:
fig = px.choropleth(merged_df, locations="Country", color_continuous_scale="Reds", locationmode="country names", color="Cumulative_cases_pct", # 替换为百分比字段 width=1000, height=900, animation_frame="Date_reported", title="全球新冠累计病例占人口比例动态地图", labels={"Cumulative_cases_pct": "病例占人口比例(%)"} # 设置颜色轴显示标签 ) # 保持原有的动画速度设置 fig.layout.updatemenus[0].buttons[0].args[1]['frame']['duration'] = 30 fig.layout.updatemenus[0].buttons[0].args[1]['transition']['duration'] = 5 fig.show()
注意事项
- 若需覆盖全球所有国家,需确保人口数据中的国家名称与WHO数据完全匹配(部分国家存在名称缩写或不同表述,需提前统一格式)。
- 对于无人口数据的国家,Plotly会自动将其显示为灰色,也可通过
dropna()过滤掉这部分数据。
内容的提问来源于stack exchange,提问作者user20286185
相关产品推荐
相关产品推荐

