疫情数据分析

疫情数据分析

作者: 莫烦 编辑: 莫烦 发布于: 2022-05-22

根据我们之前学习的内容,我们今天就来做些有趣的数据分析。 其实我在分享 Numpy 教学的时候,就已经做过一次用 Numpy 来处理分析疫情数据的教学。 现在我们学习了更适合做数据分析的 Pandas 库,也可以来思考用 Pandas 如何来对此进行分析。

20年开始的新冠肺炎席卷全球,我们能从肺炎数据中发现什么规律呢?我提前给你准备了从 2020 年 1 月 22 日到 2020 年 7 月 27 日的数据。

数据一览

kaggle covid

这份数据是 Kaggle 上的公开数据集 , 我已经提前给你准备好了,请先点击下方运行按钮,我帮你拉取数据到你的浏览器环境。

点击运行后,你可以看到,在你的浏览器环境中,已经有了 covid19_day_wise.csv 这个文件了, 而且可以发现,拉取到的这份文件是一个 csv 文件。 现在我们就应用 读取数据中的方法read_csv() 文件。

如果你不方便下载,我这里也有一份同样的,有兴趣你可以自己下载下来 , 用下面的代码在你本地加载数据。

了解了数据的大概样子,那么来使用你所学到的 Pandas 技能,我们来分析下面这几个问题。

  1. 获取 2020 年 2 月 3 日的所有数据
  2. 2020 年 1 月 24 日之前的累积确诊病例有多少个?
  3. 2020 年 7 月 23 日的新增死亡数是多少?
  4. 从 1 月 25 日到 7 月 22 日,一共增长了多少确诊病例?
  5. 每天新增确诊数和新恢复数的比例?平均比例,标准差各是多少?
  6. 画图展示新增确诊的变化曲线
  7. 画图展示死亡率的变化曲线

某日所有数据

相比 Numpy 的方式,Pandas 可以更便捷的获取到这些数据。 比如我想拿到 Date Column 中的前几个数据值,我就直接调用 df["Date"][:5] 这种形式。

又或者我需要拿到具体的某一天的值,比如 获取 2020 年 2 月 3 日的所有数据

累积确诊

2020 年 1 月 24 日之前的累积确诊病例有多少个?

同样,对比 Numpy 的处理方式,又是转 indexing 又是反转 indexing 的操作, Pandas 简直是不能太简单了。只需要找到 2020-01-24 所在的行,并且标出 Confirmed Column 名,就能锁定行列位置。 然后用 df.loc[] 就能找到具体的数值了。 df.loc[] 的具体使用方法请看这里

新增死亡

2020 年 7 月 23 日的新增死亡数是多少?

这还是一个在 Pandas DataFrame 中选取数据的过程,我们要搞清楚具体的索引是什么。 上面我们已经找到了确诊数的标题(Conformed),现在你来找一下哪个标题对应着新增死亡数?

没错!就是New deaths, 我们再按上面的流程把这个数据给拿出来。

总增长数

从 1 月 25 日到 7 月 22 日,一共增长了多少确诊病例?

获取数据都是小儿科,我们来点真正的数据分析。要基于原有的数据,进行多次加工,来获取新的结论和结果。 在这个任务中,为了方便运算,我们将日期数据转换成一个时间数据, 使用到的是在这一节学习到的时间转化方法。 之所以这么做,是因为转换后的时间数据,可以方便地进行大小对比。

之后我们要进行一次累和的计算,就能得到最终的病例数啦。

上面要注意一下,在时间数据的大小比对时,我用了 & 符号,这是 Python 中一个表示 and 的逻辑,而且可以对一整个向量做 and 逻辑。

有的同学肯定会问了,我们不是有累积确诊的个数嘛,我也能用累计确诊的那一 column 来计算出这段时间内的确诊病例数呀。 好的,我们就来按这种方法计算一下。

奇怪了,为什么两种计算结果对应不上呢?我大胆猜想一下,可能是因为有人感染了两次或多次,导致新增的数据中重复计算了。 所以用新增数据来算的话,比累积确诊的方式来计算的要多。

我们还能具体分析看看,具体是哪天的数据对不上,详细输出一下。

确诊恢复比例

每天新增确诊数和新恢复数的比例?平均比例,标准差各是多少?

这一个任务,我们需要再计算计算,会要使用到批量计算功能,首先确定要拿取到的数据是什么,然后再对这些数据进行计算。 按要求,我们要拿到新增确诊数(New cases),和新的恢复数(New recovered),然后再相除,最后再计算平均值和标准差。

咦奇怪了,我什么第一个是 nan 呢?nan 在 numpy 中表示的是 Not a Number, 说明计算有问题。我们单独打印一下,看看为什么出现 nan

原来是因为 New recovered 的第一个位置数据为 0,任何数除以 0 是不成立的,所以才会把这个计算给出一个 nan 的结果。 你看做数据分析还是挺有意思吧,会出现各种意想不到的状况。然后我们把 New recovered 为零的数都剔除掉。

得到计算结果后,我们还是能明显发现,被治好的人的确比新增的要多,这就说明,我们的存活率还是挺高的。

可视化数据

画图展示新增确诊的变化曲线

有时候,光秃秃的数字并不能生动表现这些数字背后的规律。我们还可以把它画出来。至于如何画, Pandas 其实已经内置了很多画图工具,有兴趣了解如何用 Pandas 画图的,请点击这里

现在,我们就来做新增确诊的可视化数据吧。

不画不知道,一画出来就吓一跳,在前半部分的时候,确诊数还在缓慢增长,但是在 50 天左右的时候,发现新增确诊数陡增。我们看看第 50 天是哪个日期。 新冠在前期还是传播得十分迅速的。

画图展示死亡率的变化曲线

画这个图也非常简单,我们只要找到对应的 column 就行。我只是觉得这个数据比较有趣,想看看人类对于一个陌生疾病的斗争历史。 因为在前期,我们对新冠还不了解的时候,可能死亡率还是比价高的,但是随着了解的加深,政策的颁布,疫苗的发布,死亡率应该都会有变化。

你看,结果也是能在图上看到的,大概在 100 天左右的时候,死亡率开始下降了,100 个人中死 7 个, 逐渐变成死 4 个。可见当时各种政策的颁布还是有效果的。

总结

数据分析是一件非常有趣的事情。我之前租房子,还用爬虫做过悉尼各地区的房价分析, 为我的租房开销节省了不少钱。其中我就用到了 Pandas + Numpy 来管理我爬取到的数据。


降低知识传递的门槛

莫烦经常从互联网上学习知识,开源分享的人是我学习的榜样。 他们的行为也改变了我对教育的态度: 降低知识传递的门槛

我组建了微信群,欢迎大家加入,交流经验,提出问题,互相帮持。 扫码后,请一定备注"莫烦",否则我不会同意你的入群申请。

wechat