如何统计美国各州年度新冠确诊总数并生成可视化图表与统计表格?
实现方案
一、按州+年度维度统计新增阳性确诊总数
你原来用循环遍历的写法效率较低,直接用pandas内置的分组聚合能力可以快速得到结果:
import pandas as pd # 第一步:数据预处理 # 把日期字段从字符串转为日期格式,提取年份字段 America2['date'] = pd.to_datetime(America2['date']) America2['year'] = America2['date'].dt.year # 筛选出阳性记录 positive_data = America2[America2['overall_outcome'] == 'Positive'] # 第二步:按州、年份分组求和 state_year_stats = positive_data.groupby( ['state_name', 'year'], as_index=False )['new_results_reported'].sum() # 重命名列名更易读 state_year_stats.rename( columns={'new_results_reported': 'yearly_positive_total'}, inplace=True ) # 打印统计表格,也可以直接导出为本地csv文件 print(state_year_stats) # state_year_stats.to_csv('各州年度阳性统计.csv', index=False, encoding='utf-8-sig')
输出的state_year_stats就是你要的独立统计表格,每一行对应一个州单年度的新增阳性确诊总数。
二、各州统计结果可视化对比
用matplotlib+seaborn就可以快速实现对比可视化,提供两种常用的展示方案:
import matplotlib.pyplot as plt import seaborn as sns # 解决中文显示乱码问题,不需要可以删掉 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 方案1:分年度画各州柱状图,方便同年度跨州对比 # 先把统计结果转成宽表 pivot_stats = state_year_stats.pivot( index='state_name', columns='year', values='yearly_positive_total' ).fillna(0) # 画2020年各州对比图 plt.figure(figsize=(18, 8)) sns.barplot(x=pivot_stats.index, y=pivot_stats[2020]) plt.title('2020年美国各州新增阳性确诊总数对比', fontsize=15) plt.xlabel('州名', fontsize=12) plt.ylabel('新增阳性总数', fontsize=12) plt.xticks(rotation=90) # 州名旋转90度避免重叠 plt.tight_layout() plt.show() # 方案2:堆叠柱状图,同时展示2020、2021两年数据 pivot_stats.plot(kind='bar', stacked=True, figsize=(18, 8)) plt.title('2020-2021年美国各州新增阳性确诊总数对比', fontsize=15) plt.xlabel('州名', fontsize=12) plt.ylabel('新增阳性总数', fontsize=12) plt.xticks(rotation=90) plt.tight_layout() plt.show()
如果州数量太多导致图表拥挤,可以只筛选确诊总数前20的州展示:
# 取累计确诊前20的州 top20_states = state_year_stats.groupby('state_name')['yearly_positive_total'].sum().nlargest(20).index top20_stats = state_year_stats[state_year_stats['state_name'].isin(top20_states)] # 再套用上面的可视化逻辑即可,图表会更清晰
内容的提问来源于stack exchange,提问作者Work_fl0w
相关产品推荐
相关产品推荐

