疫情数据分析 - Numpy 数据怪兽 | 莫烦Python

疫情数据分析

作者: 莫烦 编辑: 莫烦 2021-10-01

根据我们之前学习的内容,我们今天就来做些有趣的数据分析。 用小项目来带动真实的 Numpy 运用过程。

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

数据一览

kaggle covid

这份数据是 Kaggle 上的公开数据集 , 我已经提前给你准备好了,你在下面的代码编辑框中,可以通过 covid["data"]covid["header"] 获取到这些数据的信息。

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

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

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

某日所有数据

获取 2020 年 2 月 3 日的所有数据

这个理解起来比较简单,但是在使用 Numpy 获取到特定数据的时候,我们得搞清楚数据的索引是什么。在 Numpy 中,我们用来索引的大概率是数字, 所以我们得搞清楚对应的数字标号是什么。因为我在为你准备的 covid 数据中,把日期和标题都用 Python 列表给你装起来了,你可以通过列表的 .index("xxx") 功能来获取到它的索引。

我们需要思考的是:找到这一天对应的索引。还好我已经把日期都用列表给存储起来了。我们看看日期的存储方式。 将日期转换成 date_idx 之后,我们就能用这个 index 来获取到那一天的全部数据了。

至于,这些人数为什么会是一个小数呢?因为 Numpy 在存储一批数据的时候,它会把数据都存成一个模式,在这套数据中,我们都是以小数(float64)的形式存储的, 所以你才会看到有小数点。

累积确诊

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

有了上一个任务的基础,这个任务我们就更加细致地去获取某个具体的数值,我们确定完日期(row)的 index 之后,在确定标题 (column)的 index。 在这个案例中,我们要确定累积确诊数(Conformed)的索引。

新增死亡

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

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

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

总增长数

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

获取数据都是小儿科,我们来点真正的数据分析。要基于原有的数据,进行多次加工,来获取新的结论和结果。在这个任务中,我们要进行一次累和的计算。

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

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

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

确诊恢复比例

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

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

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

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

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

可视化数据

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

有时候,光秃秃的数字并不能生动表现这些数字背后的规律。我们还可以把它画出来。至于如何画,我给你做了一个 draw_line() 的函数,这个函数的背后是 Python 的画图工具 Matplotlib. 不过在这个教程中,并不是重点,我会在之后的画图教程中详细介绍。

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

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

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

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

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

总结

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


降低知识传递的门槛

莫烦经常从互联网上学习知识,开源分享的人是我学习的榜样。 他们的行为也改变了我对教育的态度: 降低知识传递的门槛免费 奉献我的所学正是受这种态度的影响。 通过 【赞助莫烦】 能让我感到认同,我也更有理由坚持下去。