Matplotlib可能是Python的事实数据可视化库,但它并不总是最漂亮的。在本文中,我们将探讨如何将单调的默认Matplotlib图变成漂亮的数据可视化。我们将探索COVID-19数据,以了解该病毒如何在不同国家传播(我们只是针对数据进行分析不对任何做出评价)。
我们将使用来Github存储库中的数据,这个存储库每天会自动更新各国数据。我们将根据URL将数据加载到Pandas的数据框中,以便每天自动为我们更新。
# 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)
现在我们已经将数据存储在一个数据框中,让我们准备另外两个数据框,这些数据框将我们的数据保存在交叉表中,这将使我们能够更轻松地可视化数据。
# 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
让我们首先创建我们的第一个可视化,它将演示随着时间的推移在不同国家的总病例数:
# 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)
这是第一张图表的最终结果:
COVID-19 在各国中的数据显示
为了创建第二个可视化,我们将使用以下代码:
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大咖说的热心支持!