「 Python数据可视化系列」9.处理COVID-19数据

来源 | 「Practical Python Data Visualization  A Fast Track Approach To Learning Data Visualization With Python」

作者 | Ashwin Pajankar

译者 | Liangchu

校对 | gongyouliu

编辑 | auroral-L

全文共2541字,预计阅读时间15分钟。


第九章  处理COVID-19数据


目录

 

  

  一、疫情COVID-19和数据集

    1、COVID-19数据的数据源

  二、可视化COVID-19数据

  ❤总结

第八章「Pandas入门」介绍了SciPy数据科学库——pandas的基础知识。你学习了系列(series)和数据帧(dataframe)这两种数据结构的基础知识,并且学会了可视化数据帧和系列中的数据。

这一章是你在前面几章中所习得的所有知识的终点。在本章中,我们将检索真实数据并将其可视化。在本章结束时,你应该熟悉了真实数据集的可视化步骤。

一、疫情COVID-19和数据集

在写这本书的时候,世界正面临着一场前所未有的自然灾害——一种由severe acute respiratory syndrome coronavirus 2(SARS-CoV-2)引起的疫情(一种在各大洲传播的传染病)以及由此产生的冠状病毒COVID-19。这种病毒来自同一个病毒家族(冠状病毒),这些病毒可导致像普通感冒的非致命性疾病,以及像非典和MERS这样的更致命的疾病。这些病毒引起哺乳动物和人类呼吸道感染,如果不及时治疗,可能致命。

1.COVID-19数据的数据源

许多组织正在全世界范围内跟踪COVID-19病例,并定期更新其网站和网络服务上的数据,其中最著名的组织是约翰霍普金斯大学(https://coronavirus.jhu.edu/map.html)和World-O-Meter (https://www.worldometers.info/coronavirus/)。这些是COVID-19非常可靠的数据来源,他们非常频繁地更新其统计数据(至少每24小时更新一次),以便下游系统获得最新的数据。

我们可以使用Python中的自定义库检索这些数据,可以在https://ahmednafies.github.io/covid/找到像这样的库。它可以从约翰霍普金斯大学和World-O-Meter检索数据。要安装它,请为此章创建一个新笔记本,并在代码单元中运行以下命令:

!pip3 install covid

接下来,按如下方式导入库:

from covid import Covid

你可以使用以下代码获取数据:

covid=Covid()

默认情况下,它从约翰霍普金斯大学获取数据。你也可以明确地指定数据源:

covid = Covid(source="john_hopkins")

要从World-O-Meter获取数据,请更改源值:

covid = Covid(source="worldometers")

可以使用以下命令显示所有数据:

covid.get_data()

它将返回一个字典列表,如图(9-1)所示:

 

 

我们可以确定数据来源,如下:

covid.source

该案例输出如下所示:

'worldometers'

你还可以按国家名称检索,如下所示:

covid.get_status_by_country_name("italy")

结果如图(9-2)所示:

 

 

你也可以按国家/地区ID检索数据(此函数仅对Johns Hopkins数据源有效),代码如下:

covid.get_status_by_country_id(115)

要检索受COVID-19疫情影响的国家列表,请使用以下语法:

covid.list_countries()

它返回如图(9-3)所示的列表:

 

 

现有确诊病例的总数如下所示:

covid.get_total_active_cases()

确诊病例总数如下:

covid.get_total_confirmed_cases()

治愈病例总数如下:

covid.get_total_recovered()

死亡总人数如下:

covid.get_total_deaths()

运行这些语句就可以得到输出。

二、可视化COVID-19数据

现在你可以将上述所有数据转换为一个pandas数据帧,如下所示:

import pandas as pd

df = pd.DataFrame(covid.get_data())

print(df)

输出如图(9-4)所示:

 

 

使用以下代码对数据进行排序:

sorted = df.sort_values(by=['confirmed'], ascending=False)

这些数据包含了所有大陆和整个世界的累积数据。我们可以排除以下地区的数据:

excluded = sorted[~sorted.country.isin(['Europe', 'South America', 'Asia', 'World', 'North America', 'Africa'])]

前10个国家可检索如下:

top10 = excluded.head(10)

print(top10)

输出如图(9-5)所示:

 

 

现在我们可以将数据提取到变量中,如下所示:

x = top10.country

y1 = top10.confirmed

y2 = top10.active

y3 = top10.deaths

y4 = top10.recovered

接下来将它可视化。导入Matplotlib并使用以下命令在笔记本上启用打印:

%matplotlib inline

import matplotlib.pyplot as plt

创建一个简单的线形图,如下所示:

plt.plot(x, y1)

plt.xticks(rotation=90)

plt.show()

结果如图(9-6)所示:

 

 

我们可以将之显示为条形图:

plt.bar(x, y1)

plt.xticks(rotation=90)

plt.show()

结果如图(9-7)所示:

 

 

使用以下代码创建多行图:

plt.plot(x, y1, label='Confirmed')

plt.plot(x, y2, label='Active')

plt.plot(x, y3, label='Deaths')

plt.plot(x, y4, label='Recovered')

plt.legend(loc='upper right')

plt.xticks(rotation=90)

plt.show()

输出如图(9-8)所示:

 

 

我们可以用更简洁的代码和更好的格式重写前面的示例,如下所示:

labels = ['Confirmed', 'Active', 'Deaths', 'Recovered']

plt.plot(x, y1, x, y2, x, y3, x, y4)

plt.legend(labels, loc='upper right')

plt.xticks(rotation=90)

plt.grid()

plt.show()

结果如图(9-9)所示:

 

 

我们可以用垂直多条形图显示数据,如下所示:

df2 = pd.DataFrame([y1, y2, y3, y4])

df2.plot.bar();

plt.legend(x, loc='upper center')

plt.xticks(rotation=90)

plt.grid()

plt.show()

如图(9-10)显示了输出:

 

 

我们可以用垂直堆叠条形图显示数据,如下所示:

df2.plot.bar(stacked=True);

plt.legend(x, loc='upper center')

plt.xticks(rotation=90)

plt.grid()

plt.show()

如图(9-11)显示了输出:

 

 

我们可以创建水平条形图,如下所示:

df2.plot.barh();

plt.legend(x, loc='upper right')

plt.xticks(rotation=90)

plt.grid()

plt.show()

如图(9-12)显示了输出:

 

 

接下来,使用以下代码创建水平堆叠条形图:

df2.plot.barh(stacked=True);

plt.legend(x, loc='upper right')

plt.xticks(rotation=90)

plt.grid()

plt.show()

输出如图(9-13)所示:

 

 

我们甚至可以使用面积图来可视化这些数据。默认情况下,面积图是堆叠的。我们可以创建如下:

df2.plot.area();

plt.legend(x, loc='upper right')

plt.xticks(rotation=90)

plt.grid()

plt.show()

输出如图(9-14)所示:

 

 

你甚至可以创建重叠(非堆叠)面积图,如下所示:

df2.plot.area(stacked=False);

plt.legend(x, loc='upper right')

plt.xticks(rotation=90)

plt.grid()

plt.show()

输出如图(9-15)所示:

 

 

若要创建点的大小与数据大小成比例的散点图,请使用以下代码:

factor=0.0001

plt.scatter(x, y1, s=y1*factor);

plt.scatter(x, y2, s=y2*factor);

plt.scatter(x, y3, s=y3*factor);

plt.scatter(x, y4, s=y4*factor);

plt.legend(labels, loc='upper right')

plt.xticks(rotation=90)

plt.grid()

plt.show()

输出如图(9-16)所示:

 

 

最后,你可以使用以下代码创建一个漂亮的饼图:

plt.pie(y1, labels=x)

plt.title('Confirmed Cases')

plt.show()

输出如图(9-17)所示:

 

 

❤总结

在本章中,你学习了如何通过各种在线源检索COVID-19数据并将数据转换为数据帧,你还学习了如何准备各种类型的可视化,以图形方式表示COVID-19数据。

现在我们使用真实的数据与案例结束了我们的数据可视化之旅。我希望你能喜欢阅读和演示这本书中的例子,就像我喜欢编写它们一样。数据可视化是一个非常广阔的领域,有许多其他的Python库可以用于数据可视化,例如ggplot、plotly和seaborn,这些库提供了高级的数据可视化功能,可以满足你的业务和科学可视化需求。


  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据与智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值