专栏首页相约机器人使用Matplotlib的数据可视化初学者指南

使用Matplotlib的数据可视化初学者指南

作者 | Reilly Meinert

来源 | Medium

编辑 | 代码医生团队

本文的目的是提供使用Matplotlib的简要介绍,Matplotlib是Python中最常用的绘图库之一。在本演练结束时,将了解如何制作几种不同类型的可视化以及如何操纵绘图的某些美学。可以在此处找到本教程中使用的数据。这个特定的数据集来自世界卫生组织收集的数据,它包含用于计算特定国家幸福得分的信息,例如国家的GDP,预期寿命,以及人们对该国政府腐败程度的看法。

https://www.kaggle.com/njlow1202/world-happiness-report-data-2018

在创建图形之前,导入必要的库并检查数据集:

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('WorldHappiness2018_Data.csv')
df.head()

由此看到数据集是根据国家在幸福评分方面的总体排名来排序的。“得分”之后的其余列,包括此处未显示的“剩余”,总结得到一个国家的总幸福得分。那么期望每个列中的较高值通常表示一个国家的总体幸福得分较高是有意义的。

线图

线图可能是使用Matplotlib可以创建的最简单的图形。创建一个图表来查看一个国家的排名和幸福分数之间的关系。预计排名最高的国家(排名最接近1)的幸福得分最高,排名最低的国家得分最低。可以使用四行简单的代码创建此可视化。

rank = df['Rank']
score = df['Score']

这两行代码是数据帧的子集。第一个创建一个仅包含每个国家/地区的总体排名的系列。第二个创建一个仅包含每个国家的幸福分数的系列。由于此信息是从数据框中提取的,因此可以假设所有数据都将保留在其原始索引处,然后数据将正确排列。

plt.plot(rank, score)
plt.show()

接下来的两行代码创建了实际的图。该plt.plot()命令创建一个折线图,传入的参数告诉函数要使用哪些数据。第一个等级将绘制在x轴上,第二个等级将绘制在y轴上。plt.show() 图表实际打印到屏幕上需要调用。运行时输出如下:

创建此图表非常简单,它展示了期望看到的内容。但是此图表存在一些问题。如果不是创建它的人,或者如果在创建它之后回顾它一段时间,将不知道该图形实际显示的是什么。幸运的是,添加标题和轴标签非常简单。

plt.plot(rank, score)
plt.title('Happiness Score vs World Rank')
plt.xlabel('Country Rank')
plt.ylabel('Country Score')
plt.show()

这些命令非常不言自明,结果比第一个图表更容易理解。

它很简单可以在原始折线图中添加标签和标题,并且可以大大改善其外观。拥有标记图形不仅更专业,而且还可以更容易理解图形显示的内容,只需要额外的上下文或额外的解释。现在如果想要在同一个图表上检查多个变量与国家/地区排名的关系,会发生什么?所要做的就是plt.plot()使用您想要传递的两个不同系列作为x值的参数调用两次,如下所示:

gdp = df['GDP_Per_Capita']
lifeExp = df['Healthy_Life_Expectancy']
plt.plot(rank, gdp)
plt.plot(rank, lifeExp)
plt.show()

此代码输出以下视觉:

就像制作的第一张图一样,并不知道这张图告诉的是什么。另外不知道哪一行代表传入的x参数。有两种可能的方法来处理这个问题。第一个将添加一个图例来告诉哪个颜色线代表哪个变量。

# Option 1
plt.plot(rank, gdp)
plt.plot(rank, lifeExp)
plt.title('World Rank vs GDP and Life Expectancy')
plt.xlabel('Country Rank')
plt.legend()
plt.show()
# Option 2 
plt.plot(rank, gdp, color = 'green')
plt.plot(rank, lifeExp, color = 'blue')
plt.title('World Rank vs GDP and Life Expectancy')
plt.xlabel('Country Rank')
plt.legend()
plt.show()

注意:这些选项应彼此分开运行,以获得两个输出。

现在用哪个颜色线表示哪个变量。无论是否选择为每个变量设置颜色,在图表中包含图例几乎总是一个好主意,这样就可以快速识别哪一行代表哪个变量。从该图中还可以直观地识别趋势。人均国内生产总值和预期寿命都有较低的值,这有助于一个国家的整体幸福得分,因为落入较低的国家行列。此外可以看到,在很多时候,当一个国家的人均GDP飙升时,同一个国家的预期寿命也会出现飙升。对于人均GDP和预期寿命的下降也可以这样说。

散点图

散点图是一种可视化两个变量之间关系的好方法,而不存在可能从折线图获得的疯狂趋势线的可能性。就像线图一样,在Matplotlib中创建散点图只需要几行代码,如下所示。

plt.scatter(gdp, score)
plt.title('GDP vs Happiness Score')
plt.xlabel('GDP per Capita')
plt.ylabel('Happiness Score')
plt.show()

如果不添加标题和轴标签,则只需要两行代码即可创建散点图。此代码创建以下散点图:

人均GDP的得分越高,某个国家的幸福得分就越高。但是此图表存在一个小问题。按照惯例,图形轴应始终从0开始,但有一些例外。正如在这里看到的,这个图的y-tick最低为3,这是误导性的。幸运的是,这是一个简单的解决方案。所要做的就是 plt.ylim(0, 8) 在调用之前添加一行 plt.show(),这个问题将得到修复,如下所示:

该图给出了与构造的第一个散点图略有不同的理解。幸福得分为3,人均GDP得分为0.如果不注意第一张图上的y轴,可能会认为人均GDP得分接近于0意味着幸福得分接近0,事实并非如此。这告诉还有其他因素会影响一个国家的幸福分数,也应该对它们进行调查。

散点图有助于识别数据中存在的线性关系。但是没有一种简单的方法可以在Matplotlib中的散点图上添加回归线。

直方图

直方图显示数据的特定特征的分布。更简单地说,它展示了有多少观察值具有一定的价值。就像线图和散点图一样,基本直方图很容易创建。

plt.hist(score)
plt.title('Happiness Score Distribution')
plt.xlabel('Happiness Score')
plt.ylabel('Frequency')
plt.show()

这个直方图是用五行简单的代码创建的。它告诉每个幸福分数有多少个国家。因为幸福分数需要连续的价值范围,所以无法通过观察得到确切的数据,但可以得到一个大致的想法。例如大约有15个国家的幸福分数在3到4之间,而且幸福分数在4.5左右的国家(约25个)数量最多。换句话说最常见的幸福分数是4.5左右的值。

条形图

在Matplotlib中构建条形图比想象的要困难一些。它可以在几行代码中完成,但了解这段代码的作用非常重要。

roundedHappinessScore = score.apply(int)
count = roundedHappinessScore.value_counts()
hapScore = count.index
plt.bar(hapScore, count)
plt.title('Happiness Scores')
plt.xlabel('Score')
plt.ylabel('Count')
plt.show()

最后五行代码是不言自明的,但前三行中发生了什么?第一行将所有幸福分数转换为整数,这样幸福分数可以只有少数离散值。第二行获得每个分数发生的次数。此计数将用作条形图的高度。然后第三行获得与每个计数相关联的分数,这需要作为图的x轴。运行时,此代码生成以下条形图:

该图给出了与上面创建的直方图略有不同的故事。它更容易解释,可以在这里看到有大多数观察结果的圆形幸福分数为5.因为使用int()函数“舍入”,这意味着得分为5可以是任何值在5≤x<6的范围内。

结论

Matplotlib可以很快地创建简单的可视化。大多数图形只需要几行代码来创建,并且可以进行美学修改以使它们更好。有关Matplotlib的更多信息,请在此处查看API。本文中使用的所有代码都可以在Github中找到。

https://matplotlib.org/api/pyplot_summary.html

https://github.com/reillymeinert/DataVisualizations

本文分享自微信公众号 - 相约机器人(xiangyuejiqiren)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python采用并发查询mysql以及调用API灌数据 (四)- Python封装Http请求基本类方法

    上一篇文章已经编写了跨文件目录引入mysql的封装类,那么本章节我们来继续编写封装Http请求的基本类方法。

    Devops海洋的渔夫
  • Python一条龙:创建、读取、更新、搜索Excel文件

    CSV文件是由逗号分隔的值文件,其中纯文本数据以表格格式显示。它们可以与任何电子表格程序一起使用,如Microsoft Office Excel、Google ...

    量化投资与机器学习微信公众号
  • Python采用并发查询mysql以及调用API灌数据 (五)- 查询mysql数据,拼接进行POST请求

    上一篇文章已经编写了http请求的基本类方法封装,那么本章节我们来继续编写使用mysql查询后的拼接数据发送POST请求。

    Devops海洋的渔夫
  • Python super()方法、多继承以及MRO顺序

    在这上面的代码中,我使用FatFather.__init__(self,name)直接调用父类的方法。 运行结果如下:

    Devops海洋的渔夫
  • Python综合小应用 —— 胖子老板香烟管理系统

    胖子老板:太多香烟了,帮我开发一个管理系统用用吧。 肥仔白: 好吧,看在天天在这里买槟榔的份上。

    Devops海洋的渔夫
  • 现在是不是越来越多的大公司在使用Python?为什么?

    从事软件开发多年,对于Python脚本的使用主要在构建编译体系的时候用到了主要在编写编译脚本的时候比较好用,到现在演化成一种热门的编程语言了,主要原因是编程语言...

    程序员互动联盟
  • 越来越像Linux了!Windows系统5月更新让Python开箱即用

    在Windows 10的CMD中输入python命令,你会得到什么?对不起,如果你没有自己安装过Python,系统将无法识别。

    量子位
  • Python采用并发查询mysql以及调用API灌数据 (一)

    本次因为服务架构重构,表优化、重构,带来的任务就是需要从原来的mysql数据库中,读取原表数据(部分存在多张关联查询)然后通过调用API的服务方式灌入新的数据库...

    Devops海洋的渔夫
  • Python 魔法属性

    Devops海洋的渔夫
  • Python变量

    Devops海洋的渔夫

扫码关注云+社区

领取腾讯云代金券