用Python绘制各国新冠肺炎确诊病例发展趋势图

您所在的位置:网站首页 国外累计确诊趋势图 用Python绘制各国新冠肺炎确诊病例发展趋势图

用Python绘制各国新冠肺炎确诊病例发展趋势图

2022-07-20 21:15| 来源: 网络整理| 查看: 265

前两天看到英国金融时报上面有两张各国新冠肺炎确诊和死亡病例的发展趋势图,我觉得这张图信息量挺大的,能看出来各国在应对疫情方面措施的效果,尤其是前一段网络上有太多情绪化而缺乏数据支持的文字,当然也有很多争论,比如说我们的体制是不是在抗疫中有独特的优势?我们交上去的是不是最好的答卷以致于需要各国都来“抄作业”?中药是不是真的那么有效,显著降低了死亡率?

我想数据上面还是能看出一些结论的,但是由于国外很多国家都还是病毒爆发的初期阶段,各种应对措施也都在不断实施,所以这个数据图要不断的做下去,才能说明问题。于是,就想试试用python做出两张类似的图。

先在网上找数据源,发现在GitHub上有约翰霍普金斯大学(Johns Hopkins University Center for Systems Science and Engineering (JHU CSSE))的一个CSSEGISandData数据,这个数据是每天更新的,记录各个国家,有些国家是到省级的确诊和死亡病例数。有了数据就好办了,下面就用python来作图了。

首先先下载数据到本地:

import csv import os.path import matplotlib.pyplot as plt import pandas as pd import numpy as np import itertools from git import Repo Repo.clone_from('https://github.com/CSSEGISandData/COVID-19.git', '/COVID-19') db_path = 'D:\\COVID-19\\csse_covid_19_data\\csse_covid_19_time_series' out_path = 'D:\\Country-Based Study on COVID-19'

这个数据大部分是按国家统计的,但是有些大国像中国、美国就统计到省和州的级别了,要把这些数据都加和起来,得到一个国家的总数。

death_df = pd.read_csv(os.path.join(db_path,'time_series_19-covid-Deaths.csv')) death_df = death_df[list(death_df.columns)[4:]].groupby(death_df['Country/Region']).sum()

数据里面全世界的国家都有,要选择一些病例数比较多的国家制图,我选的是3月21日死亡人数超过50个人的国家

death_num = 50 death_df = death_df.loc[death_df['3/21/20'] >= death_num] death_df

得到了这12个国家的数据以后,接下来把数据整理一下,比如各国都从超过20例的时候开始算第一天,然后记录后续每天的数据,这样做图的时候就可以都从坐标原点开始了。

# 定义绘制曲线的标记点样式 marker = itertools.cycle((',', '+', '.', 'o', '*')) fig=plt.figure(figsize=(30, 20), dpi= 80, facecolor='w', edgecolor='k') # 遍历数据表的每一行,从大于某个数值开始提取出来,转出list,然后绘制各条曲线 for i in range(len(death_df)): s = death_df.iloc[i] a = s[s >= death_num] country = a.name a = list(a) plt.plot(a,marker=next(marker),label=country,lw=3) a = list(enumerate(a)) last = len(list(enumerate(a)))-1 # 在曲线结尾处标记出国家的名字 plt.text(a[last][0],a[last][1],country, ha='center', va='bottom', fontsize=15) plt.legend() plt.gca().set_xlim(left=0) plt.gca().set_ylim(bottom=0) plt.grid(True) plt.title("Total Death after Countries Reach Total %d Death"%death_num) plt.xlabel("Days afther total %d-Death"%death_num) plt.ylabel("Total Death by Conuntry/Region") plt.show()

好了,然后大功告成,做出来的图就是下面这个样子的,这个是死亡病例趋势图,确诊病例的也差不多的做法了。

整个程序我参考了https://www.kaggle.com/ztsincom/country-based-study-on-covid-19,我写的代码简化了不少,大家可以去参考

想及时看到我的更新的小伙伴,可以关注我的微信公众号:涛哥哥的自留地

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3