作者——Gilbert Tanner 如何利用Matplotlib、Pandas和Seborn制作图形? 数据可视化是一门通过将数据放在可视环境中来理解数据的学科,这样我们就会更加详细的知道/了解那些隐藏在数据下的模式、趋势和相关性。 Python提供了多个很棒的图形库,其中包含许多不同的特性。无论你是想创建交互式的、实时的还是高度定制的绘图,python都为你提供了一个优秀的库。 这里有一些流行的库,以及对它们的相关概述: Matplotlib:在众多库中相对基础,'规矩'少(https:///)。 Pandas Visualization:易于使用的界面,建立在Matplotlib上(https://pandas./pandas-docs/stable/visualization.html)。 Seaborn:操作难度较高,有很棒的默认样式(https://seaborn./)。 ggplot:基于R的ggplot2(http://ggplot./)。 Plotly:互动性好(https:///python/)。 在本文中,我们将学习如何使用Matplotlib、Pandas visualization和Seaborn创建基本的图,以及如何使用每个库的一些特定特性。本文将侧重于语法,而不是解释图,我将在另一篇博客文章中介绍这些图。 在以后的文章中,我将介绍交互式绘图工具,如Plotly,它是在D3上构建的,也可以与JavaScript一起使用。 导入数据集 在本文中,我们将使用两个免费的数据集。即,Iris(https://archive.ics./ml/datasets/iris)和Wine Reviews(https://www./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中创建散点图,我们可以调用<dataset>.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./wiki/Five-number_summary)。 箱形图 箱形图,就像柱状图一样,只对少数类别的数据非常有用。 Heatmap Heatmap是数据的图形化表示,其中矩阵中包含的各个值用颜色表示。Heatmap对于探索数据集中特征之间的相关性是非常完美的(https://en./wiki/Matrix_%28mathematics%29)。 要获得数据集内特征的相关性,我们可以调用<dataset>.corr(),这是一个来自panda dataframe方法,会用到相关矩阵(https://www./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./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 |
|