2.2 Ebola案例
为了说明上述步骤如何得到容易理解的可视化结果,不妨考虑一下我们先前提出的问题:2014年,报道的伊波拉病毒(Ebola)死亡人数是多少?数据来自世界卫生组织(http://www.who.int/en/)或者人道主义数据交换中心(https://hdx.rwlabs.org)。虽然该数据的原始来源是世界卫生组织(World Health Organization,WHO),但人道主义数据交换中心(Humanitarian Data Exchange,HDX)是贡献者。然而,请注意,我们将在同一个地方得到本书的所有数据,以及Python资源代码。
该数据包括Ebola疾病在几内亚、利比里亚、马里、尼日利亚、塞内加尔、塞拉利昂、西班牙、英国和美国的传播信息。
该信息由以下网址提供:https://data.hdx.rwlabs.org/dataset/ebola-cases-2014/。
CSV格式的数据文件的内容包括指标、国家名称、日期和与指标相关的死亡数量或感染数量。一共有36个指标,前10个指标如下(其他指标可见附录):
过去7天可能的Ebola案例数
过去21天可能的Ebola死亡数
过去21天疑似Ebola案例数
过去7天疑似Ebola案例数
过去21天疑似Ebola死亡数
过去21天Ebola案例的确认比例
过去7天Ebola案例的确认比例
过去21天Ebola死亡的确认比例
过去7天疑似Ebola案例比例
过去21天疑似Ebola死亡比例
了解完这些指标后,本章一开始提出的问题“2014年,报道的Ebola死亡人数是多少?”可以转换为多组问题。为了简单起见,我们持续关注一个问题,并观察如何才能够进一步分析这些数据,得到一个可视化方法。首先,让我们看一些数据文件的读取方法。
对于任何一种编程语言,读取文件的方法不止一种,有一种是用Python中的pandas库。这种方法有高性能的数据结构和数据分析工具。另一个选择是用csv库读取CSV格式的数据文件。这两种方法有什么不同呢?它们都可以读取数据。在旧版的pandas中,会遇到大数据的记忆映射问题(如果CSV格式的数据文件很大),但是现在已完成优化。代码如下:
上面的过滤也可以用pandas完成,具体如下:
数据可从http://www.knapdata.com/python/ebola.csv下载。下一步是用read text (rt)格式打开数据文件。因为指标字符串中有deaths这个单词,所以在读取每一行后,可以过滤死亡人数为0的那行。这是一种非常直接的过滤,被用于忽略没有报道的案例或死亡情况。下面只给出过滤后数据的前五行:
如果每个国家报道的Ebola案例的所有数据是分散的,我们怎样进一步过滤?其实可以按国家列将它们进行分类。该数据文件有四行:indicator、country、date和number value。代码如下:
看完数据后,有两个指标是我们感兴趣的:
确认的Ebola死亡累积数
确认的、可能的和疑似的Ebola死亡累积数
通过多次可视化应用,我们也注意到其中一些国家,几内亚、利比里亚和塞拉利昂比其他国家有更多被确认的死亡人数。现在,我们想看看应该怎样对报道中这三个国家的死亡人数进行绘图:
结果看起来如下图所示。
我们可以对另一个指标绘制类似的图,即:确认的、可能的、疑似的Ebola死亡累积数。(虽然这不是最好的方法,但可以通过绘制一个类似的图来展示更多国家的数据信息。)
结果应该如下图所示: