前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Python只需要三分钟即可精美地可视化COVID-19数据

用Python只需要三分钟即可精美地可视化COVID-19数据

作者头像
IT大咖说
发布2020-05-19 17:52:23
2.6K0
发布2020-05-19 17:52:23
举报
文章被收录于专栏:IT大咖说

Matplotlib可能是Python的事实数据可视化库,但它并不总是最漂亮的。在本文中,我们将探讨如何将单调的默认Matplotlib图变成漂亮的数据可视化。我们将探索COVID-19数据,以了解该病毒如何在不同国家传播(我们只是针对数据进行分析不对任何做出评价)。

首先加载数据

我们将使用来Github存储库中的数据,这个存储库每天会自动更新各国数据。我们将根据URL将数据加载到Pandas的数据框中,以便每天自动为我们更新。

代码语言:javascript
复制
# Section 1 - Loading our Libraries
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter
import matplotlib.ticker as ticker
%matplotlib inline #if you're working in a Jupyter notebook

# Section 2 - Loading and Selecting Data
df = pd.read_csv('https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv', parse_dates=['Date'])
countries = ['Canada', 'Germany', 'United Kingdom', 'US', 'France', 'China']
df = df[df['Country'].isin(countries)]

# Section 3 - Creating a Summary Column
df['Cases'] = df[['Confirmed', 'Recovered', 'Deaths']].sum(axis=1)
  • 在第一步中,我们加载我们需要使用的库。本文中我们将使用Pandas和Matplotlib。
  • 在第二步中,我们将数据读入数据框df,然后仅选择列表中的countries。选择数据使结果可视化更具可读性。
  • 在第三步中,我们创建一个汇总列,该汇总列汇总了已确认病例,已恢复病例以及因COVID-19而死亡的任何个人的病例总数。

为数据可视化准备我们的数据框

现在我们已经将数据存储在一个数据框中,让我们准备另外两个数据框,这些数据框将我们的数据保存在交叉表中,这将使我们能够更轻松地可视化数据。

代码语言:javascript
复制
# Section 4 - Restructuring our Data
df = df.pivot(index='Date', columns='Country', values='Cases')
countries = list(df.columns)
covid = df.reset_index('Date')
covid.set_index(['Date'], inplace=True)
covid.columns = countries

# Section 5 - Calculating Rates per 100,000
populations = {'Canada':37664517, 'Germany': 83721496 , 'United Kingdom': 67802690 , 'US': 330548815, 'France': 65239883, 'China':1438027228}
percapita = covid.copy()
for country in list(percapita.columns):
    percapita[country] = percapita[country]/populations[country]*100000
  • 在第四步中,我们df对数据框进行数据透视,将案例数作为数据字段在国家/地区之外创建列。这个新的数据框称为covid。然后,我们将数据框的索引设置为日期,并将国家/地区名称分配给列标题。
  • 在第五步中,我们复制数据框covid并将其命名为percapita。我们使用一个字典来存储我们所有国家的人口,然后将每个值除以人口,然后将其乘以100,000,以产生每100,000人中有多少病例。

创建我们的第一个可视化案例

让我们首先创建我们的第一个可视化,它将演示随着时间的推移在不同国家的总病例数:

代码语言:javascript
复制
# Section 6 - Generating Colours and Style
colors = {'Canada':'#045275', 'China':'#089099', 'France':'#7CCBA2', 'Germany':'#FCDE9C', 'US':'#DC3977', 'United Kingdom':'#7C1D6F'}
plt.style.use('fivethirtyeight')

# Section 7 - Creating the Visualization
plot = covid.plot(figsize=(18,18), color=list(colors.values()), linewidth=5, legend=False)
plot.yaxis.set_major_formatter(ticker.StrMethodFormatter('{x:,.0f}'))
plot.grid(color='#d4d4d4')
plot.set_xlabel('Date')
plot.set_ylabel('# of Cases')

# Section 8 - Assigning Colour
for country in list(colors.keys()):
    plot.text(x = covid.index[-1], y = covid[country].max(), color = colors[country], s = country, weight = 'bold')

# Section 9 - Adding Labels
plot.text(x = covid.index[1], y = int(covid.max().max())+45000, s = "COVID-19 在各国中的数据显示", fontsize = 23, weight = 'bold', alpha = .75)
plot.text(x = covid.index[1], y = int(covid.max().max())+15000, s = "For the USA, China, Germany, France, United Kingdom, and Canada\nIncludes Current Cases, Recoveries, and Deaths", fontsize = 16, alpha = .75)
plot.text(x = percapita.index[1], y = -100000                     Source: https://github.com/datasets/covid-19/blob/master/data/countries-aggregated.csv', fontsize = 10)
  • 在第六步中,我们创建了一个字典,其中包含不同国家的十六进制值。将其存储在字典中将使我们稍后可以在for循环中轻松调用它。我们还指定了FiveThirtyEight样式以添加一些常规格式,这些格式将在很大程度上建立。
  • 在第七步中,我们使用Pandas的绘图功能创建了第一个可视化。我们使用colors参数将颜色分配给不同的列。我们还使用该set_major_formatter方法以数千个分隔符设置值的格式。
  • 然后,在第八步中,我们创建一个for循环,为各个国家/地区生成标签文本。该for循环以列表的形式从字典中的键中获取每个国家的名称,并在该列表上进行迭代。它将包含国家/地区名称的文本放在最后covid.index[-1]一天的y值(始终等于该列的最大值)的最后一个x值(→数据框中的最后日期)的右侧。
  • 最后,在第九步中,我们添加了有关图表的标题,副标题和源信息。我们再次使用变量来定位数据,以使图形更新时,这些位置也会动态更新!

这是第一张图表的最终结果:

COVID-19 在各国中的数据显示

创建第二个可视化视图-每100,000人的案例数

为了创建第二个可视化,我们将使用以下代码:

代码语言:javascript
复制
percapitaplot = percapita.plot(figsize=(20,20), color=list(colors.values()), linewidth=5, legend=False)
percapitaplot.grid(color='#d4d4d4')
percapitaplot.set_xlabel('Date')
percapitaplot.set_ylabel('# of Cases per 100,000 People')
for country in list(colors.keys()):
    percapitaplot.text(x = percapita.index[-1], y = percapita[country].max(), color = colors[country], s = country, weight = 'bold')
percapitaplot.text(x = percapita.index[1], y = percapita.max().max()+25, s = "按国家分COVID-19人均病例数", fontsize = 23, weight = 'bold', alpha = .75)
percapitaplot.text(x = percapita.index[1], y = percapita.max().max()+10, s = "中国、美国、德国、法国、英国和加拿大目前的病例、康复和死亡人数", fontsize = 16, alpha = .75)

这里我们主要介绍对第一个图形所做的操作。这说明使用Python设置图表后,更新不同数据集的可视化效果有多么简单!

这是我们得到的可视化效果:

按国家分COVID-19人均病例数

结论:

在本文中,我们学习了如何在Github上使用Matplotlib实现COVID-19数据集生成漂亮的数据可视化。我们可以使用Python的功能来根据当今的数据自动更新图表。

来源:

https://www.toutiao.com/i6814881274621067790/

“IT大咖说”欢迎广大技术人员投稿,投稿邮箱:aliang@itdks.com

来都来了,走啥走,留个言呗~

IT大咖说 | 关于版权

由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。投稿、约稿、转载请加微信:ITDKS10(备注:投稿),茉莉小姐姐会及时与您联系!

感谢您对IT大咖说的热心支持!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT大咖说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先加载数据
  • 为数据可视化准备我们的数据框
  • 创建我们的第一个可视化案例
  • 创建第二个可视化视图-每100,000人的案例数
  • 结论:
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档