MYzuiai 2018-07-24
点击上方关注,All in AI中国
本文概述了少量广泛使用的数据可视化,并包含函数形式的代码,以使用Matplotlib在Python中实现每个代码。
数据可视化是数据科学家工作的重要组成部分。在项目的早期阶段,您通常会进行探索性数据分析(EDA)以获得对数据的一些见解。创建可视化确实有助于使事情更清晰、更容易理解,尤其是对于更大、更高维度的数据集。在项目即将结束时,能够以清晰、简洁和引人注目的方式呈现您的最终结果非常重要,以便您的受众(通常是非技术客户)能够理解。
Matplotlib是一个流行的Python库,可用于轻松创建数据可视化。但是,每次执行新项目时,设置数据、参数、数字和绘图都会变得相当混乱和乏味。在这篇博文中,我们将看看6个数据可视化,并使用Python的Matplotlib为它们编写一些快速简便的函数。与此同时,这是一个很好的图表,可以为工作选择正确的可视化!
散点图
散点图非常适合显示两个变量之间的关系,因为您可以直接查看数据的原始分布。您还可以通过对组进行颜色编码来简单地查看不同数据组的这种关系,如下图所示。想要可视化三个变量之间的关系?没问题!只需使用其他参数(如磅值)来编码第三个变量,我们可以在下面的第二个图中看到。
我们首先使用别名“plt”导入Matplotlib的pyplot。为了创建一个新的情节图,我们调用plt.subplots()。我们将x轴和y轴数据传递给函数,然后将它们传递给ax.scatter()以绘制散点图。我们还可以设置点大小、点颜色和透明度。您甚至可以将y轴设置为具有对数刻度,然后专门为图形设置标题和轴标签。这是一个易于使用的功能,可以端到端地创建散点图!
折线图
当您可以清楚地看到一个变量与另一个变量差异很大,即它们具有高协方差时,最好使用折线图。让我们看一下下图来说明。我们可以清楚地看到,所有专业的百分比都随时间变化很大。使用散点图绘制这些图形会非常混乱,这使得很难真正理解看到发生了什么。折线图非常适合这种情况,因为它们基本上可以快速总结两个变量的协方差(百分比和时间)。同样,我们也可以通过颜色编码使用分组。
这是线图的代码。它与上面的散点非常相似。只是变量的一些微小变化。
直方图
直方图可用于查看(或实际发现)数据点的分布。查看下面的直方图,我们绘制频率与IQ直方图,可以清楚地看到中心的浓度和中位数。我们还可以看到它遵循高斯分布,使用条(而不是散点)确实可以清楚地看到每个箱的频率之间的相对差异。使用分档(离散化)确实有助于我们看到“更大的图像”,就好像我们使用所有数据点而没有离散分档一样,可视化中可能存在很多噪声,这使得很难看到真正发生了什么。
Matplotlib中直方图的代码如下所示,有两个参数需要注意。首先,n_bins参数控制我们想要的直方图的离散容器。它会给我们更好的信息,但也可能会引入噪音,让我们远离大局;另一方面,较少的话给我们提供了更多的“鸟瞰图”,而且没有更精细的细节,来能了解正在发生的事情。其次,累积参数是一个布尔值,它允许我们选择直方图是否累积,这基本上是选择概率密度函数(PDF)或累积密度函数(CDF)。
想象一下,我们想要比较数据中两个变量的分布。有人可能会认为你必须制作两个单独的直方图并将它们并排放置以进行比较。但是,实际上有更好的方法:我们可以用不同的透明度覆盖直方图。看看下图,统一分布设置透明度为0.5,以便我们可以看到它背后的内容。这允许直接查看同一图上的两个分布。
还有一些东西需要在代码中设置为重叠的直方图。首先,我们设置水平范围以适应两个变量分布。根据这个范围和所需的箱数,我们实际上可以计算每个箱的宽度。最后,我们在同一个图上绘制两个直方图,其中一个直方图略微透明。
条形图
当您尝试可视化具有少量(可能<10个)类别的分类数据时,条形图最有效。如果我们的类别太多,那么图中的条形图将非常混乱并且难以理解。它们适用于分类数据,因为您可以根据条形图的大小(即幅度)轻松查看类别之间的差异;类别也很容易划分和颜色编码。我们将看到3种不同类型的条形图:常规、分组和堆叠。随着我们的进展,请查看下图中的代码。
常规的条形图在下面的第一个图中。在barplot()函数中,x_data表示x轴上的代码,y_data表示y轴上的条形高度。误差条是以每个条形为中心的额外线条,可以绘制以显示标准偏差。
分组条形图允许我们比较多个分类变量。注意下面的第二个条形图。我们比较的第一个变量是分数如何按组(G1,G2,......等组)变化。我们还将性别本身与颜色代码进行比较。看一下代码,y_data_list变量现在实际上是一个列表列表,其中每个子列表代表一个不同的组。然后我们遍历每个组,对于每个组,我们为x轴上的每个刻度绘制条形图;每组也有颜色编码。
分组条形图允许我们比较多个分类变量。看看下面第二个条形图。我们比较的第一个变量是分数如何随组变化(组G1,组G2,组……)等等)。我们也在比较性别本身和颜色代码,看一下代码,y_data_list变量现在实际上是列表的部分,其中每个子列表代表一个不同的组。然后我们遍历每个组,对于每一组,我们为x轴上的每个刻度绘制条形图;每组也有颜色编码。
堆叠的条形图非常适合可视化不同变量的分类构成。在下面的堆积条形图中,我们将比较日常的服务器负载。使用彩色编码堆栈,我们可以轻松查看和了解每天哪些服务器工作最多,以及负载在所有日期与其他服务器的比较情况。此代码遵循与分组条形图相同的样式。我们遍历每个组,除了这次我们在旧组之上而不是在它们旁边绘制新条。
箱型图
我们之前查看过直方图,这些直方图非常适合可视化变量的分布。但是如果我们需要更多信息呢?也许我们想要更清晰地看待标准偏差?也许中位数与均值有很大不同,因此我们有很多异常值?如果存在这样的偏差并且许多值集中在一边怎么办?
这就是箱形图所在的位置。箱形图给出了上述所有信息。实线框的底部和顶部始终是第一和第三四分位数(即数据的25%和75%),框内的带始终是第二个四分位数(中位数)。“胡须”(即带有条形末端的虚线)从盒子中伸出,以显示数据的范围。
由于为每个组/变量绘制了框图,因此很容易设置。 x_data是组/变量的列表。 Matplotlib函数boxplot()为y_data的每一列或序列y_data中的每个向量创建一个盒子图;因此,x_data中的每个值对应于y_data中的列/向量。我们所要设定的只是情节的美学。
结论
使用Matplotlib可以实现5种快速简便的数据可视化。 将事物抽象为函数总是使代码更易于阅读和使用!