绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
学好数据可视化,让你在众多应聘者中脱颖而出!
2019-08-16 14:08:07

作者——Gilbert Tanner

如何利用Matplotlib、Pandas和Seborn制作图形?

数据可视化是一门通过将数据放在可视环境中来理解数据的学科,这样我们就会更加详细的知道/了解那些隐藏在数据下的模式、趋势和相关性。

Python提供了多个很棒的图形库,其中包含许多不同的特性。无论你是想创建交互式的、实时的还是高度定制的绘图,python都为你提供了一个的库。

这里有一些流行的库,以及对它们的相关概述:

Matplotlib:在众多库中相对基础,"规矩"少(https://matplotlib.org/)。

Pandas Visualization:易于使用的界面,建立在Matplotlib上(https://pandas.pydata.org/pandas-docs/stable/visualization.html)。

Seaborn:操作难度较高,有很棒的默认样式(https://seaborn.pydata.org/)。

ggplot:基于R的ggplot2(http://ggplot.yhathq.com/)。

Plotly:互动性好(https://plot.ly/python/)。

在本文中,我们将学习如何使用Matplotlib、Pandas visualization和Seaborn创建基本的图,以及如何使用每个库的一些特定特性。本文将侧重于语法,而不是解释图,我将在另一篇博客文章中介绍这些图。

在以后的文章中,我将介绍交互式绘图工具,如Plotly,它是在D3上构建的,也可以与JavaScript一起使用。

导入数据集

在本文中,我们将使用两个免费的数据集。即,Iris(https://archive.ics.uci.edu/ml/datasets/iris)和Wine Reviews(https://www.kaggle.com/zynicide/wine-reviews)数据集,我们可以使用panda read_csv方法加载该数据集。

Iris数据集

Wine Reviews数据集

Matplotlib

Matplotlib是流行的python绘图库。它是一个底层库,带有类似Matlab的接口,自由程度高,可以编写更多代码。

安装Matplotlib可以使用pip和conda。

Matplotlib特别适合创建基本的图形,如折线图、条形图、直方图等。输入:

散点图

要在Matplotlib中创建散点图,可以使用scatter方法,并且使用plt创建一个图形和一个轴。所以我们可以给我们的图像进行标记。

Matplotlib散点图

我们可以通过在每个数据点上按其类着色来赋予图形更多的意义。这可以通过创建一个从类映射到颜色的字典来实现,然后使用for循环来分散到每个点,并传递各自的颜色。

按类着色的散点图

折线图

在Matplotlib中,我们可以通过调用plot方法创建一个折线图。我们还可以在一个图中绘制多个列,方法是遍历我们想要的列,并在相同的轴上绘制每个列。

折线图

柱状图

在Matplotlib中,我们可以使用hist方法创建直方图。如果我们向它传递分类数据,比如wine-review数据集中的列,它将自动计算每类发生的频率。

柱状图

条形图

可以使用bar方法创建条形图。条形图不会自动计算类别的频率,因此我们将使用panda value_counts函数来完成这一操作。条形图对于没有很多不同类别(少于30个)的分类数据非常有用,因为如果没有条形图,分类数据会变得非常混乱。

条形图

Pandas Visualization

Panda是一个开源的、高性能、易于使用的库,提供数据结构(如dataframes)和数据分析工具(如本文中使用的可视化工具)。

Pandas Visualization使得从dataframe等中创建图像变得非常容易。它还具有比Matplotlib更的API。换句话说,对于相同的结果,我们需要的代码更少。

可以使用pip或conda安装Panda。

散点图

要在panda中创建散点图,我们可以调用.plot.scatter()并将两个参数传递给它,即x列的名称和y列的名称。我们也可以选择给它传递一个标题。

散点图

正如你在图像中看到的,它会自动将x和y标签设置为列名。

折线图

要在panda中创建一个线形图,我们可以调用<dataframe>.plot.line()。在Matplotlib中,我们需要循环遍历要绘制的每一列,而在panda中,我们不需要这样做,因为它会自动绘制所有可用的数字列。

折线图

如果我们有一个以上的特征,Panda会自动为我们创建一个折线图,正如上图所示。

柱状图

在Panda中,我们可以根据具体内容创建直方图。没有任何参数是必需的,但是我们可以选择性地传递一些参数,比如bin大小。

柱状图

创建多个直方图也非常容易。

subplot参数指定我们希望为每个特性使用单独的plot,布局指定每行和每列的plot数量。

条形图

要绘制柱状图,我们可以使用plot.bar()方法,但是在调用它之前,我们需要获取数据。为此,我们将首先使用value_count()方法计算事件数,然后使用sort_index()方法从小到大排序。

垂直柱状图

使用plot.barh()方法制作水平条形图也非常简单。

水平条形图

我们还可以绘制其他数据,比如是出现的次数。

葡萄酒价格高的国家(平均)

在上面的例子中,我们将数据按国家进行分组,然后取葡萄酒价格的平均值,并对其进行排序,绘制出平均葡萄酒价格高的5个国家。

Seaborn

Seaborn是一个基于Matplotlib的Python数据可视化库。它为创建有吸引力的图形提供了接口。

Seaborn有很多东西可以提供。在Matplotlib中,你可以在一行中创建需要几十行代码的图形。它的标准设计非常棒,而且它还有一个用于处理panda dataframes的界面。

输入:

散点图

我们可以使用.scatterplot方法创建一个散点图,就像Panda,我们需要把它的列名x和y数据,但现在我们还需要把数据作为一个额外的参数,因为我们不是直接调用函数的数据。

散点图

我们还可以使用hue参数通过类突出显示这些点,这比Matplotlib中简单得多。

由类着色的散点图

折线图

创建线形图,我们可以使用sns. lineplot方法。需要的参数是数据,在我们的示例中是Iris数据集中的四列数字。我们也可以用sns.kdeplot方法对曲线的边缘进行四舍五入处理,因此如果你的数据集中有很多离群值,这种方法会更清晰。

柱状图

直方图

要在Seaborn中创建直方图,我们使用sns.distplot方法。我们需要将它传递到我们想要绘制的列中,它会自己计算发生的事件。

图19:柱状图

图20:直方图

条形图

在Seaborn中,可以使用sns.countplot创建条形图,并将数据传递给它。

图21:条形图

其他图

现在,你已经对Matplotlib、Panda可视化和Seaborn语法有了基本的了解,接下来我将向你展示一些用于提取内部内容的其他图形类型。

大多数Seaborn是go to库,因为它的接口允许在几行代码中创建漂亮的图形。

箱形图

箱形图是显示五位数摘要的图形化方法。我们可以使用seaborns sns.boxplot创建box plot,并将数据以及x和y列名传递给它(https://en.wikipedia.org/wiki/Five-number_summary)。

箱形图

箱形图,就像柱状图一样,只对少数类别的数据非常有用。

Heatmap

Heatmap是数据的图形化表示,其中矩阵中包含的各个值用颜色表示。Heatmap对于探索数据集中特征之间的相关性是非常完美的(https://en.wikipedia.org/wiki/Matrix_%28mathematics%29)。

要获得数据集内特征的相关性,我们可以调用<dataset>.corr(),这是一个来自panda dataframe方法,会用到相关矩阵(https://www.displayr.com/what-is-a-correlation-matrix/)。

我们现在可以使用Matplotlib或Seaborn来创建Heatmap。

Matplotlib:

图23:没有注释的Heatmap

要在Heatmap中添加注释,我们需要添加两个for循环:

图24:带有注释的Heatmap

Seaborn使得创建Heatmap和添加注释更加容易:

Faceting

Faceting是将数据变量分解成多个子图,并将这些子图组合成单个图形的操作。

如果想快速浏览数据集,Faceting非常有用。

要在Seaborn中使用faceting,我们可以使用FacetGrid。首先,我们需要定义FacetGrid,并将数据以及用于拆分数据的行或列传递给它。然后我们需要调用FacetGrid对象上的函数,并定义要使用的绘图类型以及要绘制的列。

Facet-plot

你可以让图比上面的例子更大更复杂。你可以在这里找到一些例子(https://seaborn.pydata.org/generated/seaborn.FacetGrid.html)。

Pairplot

后,我将向你展示Seaborns pairplot和panda scatter_matrix,它们使你能够在数据集中绘制成对关系网格。

图27:Pairplot

图28:散点矩阵

正如你在上面的图像中看到的。图的对角线用直方图填充,其他的图是散点图。

结论

数据可视化是一门通过将数据放在可视环境中来理解数据的学科,这样可能无法检测到的模式、趋势和相关性就可以暴露出来。

Python提供了多个很棒的图形库,其中包含许多不同的特性。在本文中,我们研究了Matplotlib、Pandas和Seborn。

本文中涉及的代码可以作为Github存储库使用:https://github.com/TannerGilbert/Articles/tree/master/Introduction%20to%20Data%20Visualization%20in%C2%A0Python

分享好友

分享这个小栈给你的朋友们,一起进步吧。

IT知识联盟
创建时间:2019-07-05 15:30:45
分享收集到的大小知识点
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 王超
    栈主

小栈成员

查看更多
  • ?
  • youou
  • gamebus
  • chinacc
戳我,来吐槽~