你可以使用简单的工具,如直方图、箱型图或柱状图,来可视化数据集的某一列数值在数据对象的人群中的变化。这些可视化是非常有用的,因为它们可以帮助你一目了然地看到一个属性的值。使用这些可视化的最常见的原因之一是为了熟悉一个数据集。了解你的数据这个词在数据科学家中很有名,并被反复说成是成功的数据分析和数据预处理的最必要步骤之一。我们所说的了解一个数据集是指了解和探索数据集的每个属性的统计信息。也就是说,我们想知道每个属性有哪些类型的值,以及这些值在数据集的人群中是如何变化的。为此,我们使用数据可视化工具对每个属性的数据对象群体进行总结。数字属性和分类属性对每种类型的属性需要不同的工具。对于数字属性,我们可以使用直方图或boxplot来总结属性,而对于分类属性,最好是使用柱状图。下面的例子将引导你了解如何对任何数据集一次完成。
写一些代码,做以下工作。
绝对文件路径包括根元素和完整的目录路径。然而,相对路径是在了解到你已经在一个特定的目录中的情况下给出的。在前面的代码中,当使用plt.savefig()时,我们没有在文件路径中包括根元素,所以Python正确地将其理解为一个相对路径,并假定你希望文件被保存在与你的Jupyter笔记本文件中的目录相同。
在这个例子中,你看到了应用boxplots和直方图来总结数据集的数字属性。现在,让我们看看另一个例子,向你展示分类属性的类似步骤。对于分类属性,我们总是使用柱状图。
良好做法建议:从技术上讲,你也可以用饼状图来总结分类属性的情况。然而,我建议不要这样做。原因是饼状图不像柱状图那样容易被我们的大脑消化。事实证明,我们在欣赏长度的差异方面比欣赏大块的饼的差异要好得多。
把这些不同人群的总结性的可视化资料放在一起,将有助于创建帮助我们比较这些人群的可视化资料。这可以用直方图、箱型图和柱状图来完成。让我们通过以下三个例子来看看这是如何做到的。
编写一些代码,创建以下两个相邻的boxplots。
写一些代码,在同一个图中创建以下两个直方图。
创建一个可视化的图表,使用条形图来比较以下两个人群的分类属性种族。
下面的截图显示了第一种方法的代码及其输出。在这种解决问题的方式中,我们使用了plt.subplot()将两个人口的条形图放在彼此的上面。
我们已经合并了上图中的两个视觉效果,我们只有一个包含所有信息的柱状图。然而,这种合并是以必须使图表的Y刻度更加复杂为代价的。
在这种方式中,我们用图例和不同的颜色来表示种族属性下的每种可能性。
在这种方式中,我们对视觉进行了编码,使收入属性的两种可能性与种族属性的每种可能性相邻。这种方式使我们能够将两个收入群体的人口(收入<=50K和收入>50K)与每个种族属性进行比较。
下面的代码显示了第五种方法的代码及其输出。这种方式与前一种方式的唯一区别是使用了图例和颜色,使视觉效果更加美观和整洁。
从这段代码中创建的视觉效果被称为叠加条形图。
视觉上调查属性之间关系的最好方法是成对进行。我们用于调查一对属性之间的关系的工具取决于属性的类型。在下面的内容中,我们将根据以下几对来介绍这些工具:数字-数字,分类-分类,以及分类-数字。
描绘两个数字属性之间关系的最好工具是散点图。在下面的例子中,我们将使用一个叫做"散点矩阵"的工具,为一个带有数字属性的数据集创建一个散点图的矩阵。
在这个例子中,我们将使用一个新的数据集,Universities_imputed_reduced.csv。这个数据集的数据对象的定义是美国的大学,这些数据对象用以下属性描述。学院名称、州、公立/私立、申请人数、录取人数、新入学人数、州内学费、州外学费、有博士学位的教师比例、学生/教师比例、毕业率。比率,以及毕业率。这些属性的命名是非常直观的,不需要进一步描述。下面的代码使用seaborn模块的pariplot()函数,为uni_df数据框架中的数字属性的每一对组合创建一个散点图。
检查两个分类属性之间关系的最佳视觉工具是彩色编码的或然率表。或然率表是一个矩阵,它显示了数据对象在两个属性的所有可能的数值组合中的频率。虽然你可以为数字属性创建一个或然率表,但在大多数情况下这样做不会导致有效的可视化;或然率表几乎总是用于分类属性。
在这个例子中,我们有兴趣看看在adult_df的数据对象中,性别和收入这两个分类属性之间是否存在关系。为了研究这种关系,我们将使用一个或然率表。下面的截图显示了如何使用pd.crosstab()pandas函数来完成这一工作。这个函数得到了两个属性,并为它们输出了或然率表。
创建一个可视化,检查adult_df中数据对象的种族和职业属性之间的关系。
使得这种情况更具挑战性的原因很明显:属性的类型是不同的。为了能够直观地看到分类属性和数字属性之间的关系,必须将其中一个属性转换为另一种类型的属性。几乎所有的情况下,最好是将数字属性转化为分类属性,然后使用或然率表来检验这两个属性之间的关系。下面的例子显示了如何做到这一点。
首先,创建一个可视化,检查adult_df中数据对象的种族和年龄属性之间的关系。年龄属性是数字的,而种族属性是分类的。因此,首先,我们需要将年龄转化为一个分类属性。然后,我们可以用一个或然率表来可视化它们的关系。
首先,创建一个可视化,检查adult_df中数据对象的教育和年龄属性之间的关系。同样,我们有一个分类属性和一个数字属性。然而,这一次,分类属性有两个特点,使我们有可能选择不太常见的方式来处理这种情况。这两个特点如下。
使用WHReport_preprocessed.csv创建一个可视化,显示该数据集中以下五列的相互作用。
下面的代码使用plt.subplot()和plt.scatter()将三个维度结合起来。出生时的健康预期寿命、人均GDP对数和年份。
defplotyear(year):BM=country_df.year==yearX=country_df[BM].Healthy_life_expectancy_at_birthY=country_df[BM].Log_GDP_per_capitaplt.scatter(X,Y)plt.xlabel('Healthy_life_expectancy_at_birth')plt.ylabel('Log_GDP_per_capita')plt.xlim([30,80])plt.ylim([6,12])plt.show()在创建这个函数后,在继续前进之前,通过调用该函数将其投入使用--例如,运行plotyear(2011)、plotyear(2018)和plotyear(2015)。如果一切运行良好,你会在每次运行中得到一个新的散点图.在你有了一个运作良好的plotyear()之后,编写并运行下面的代码就可以得到上图中的交互式视觉效果为了创建这个交互式视觉效果,我们使用了ipywidgets模块中的interactive和widgets编程对象。
到目前为止,我们只能在一个视觉中包括以下四个维度:健康预期寿命、人均GDP对数、年份和大陆。现在,让我们增加第五个维度,也就是人口,用标记的大小来表示。下面的代码将人口的维度添加为标记物的大小。
使用WHReport_preprocessed.csv来创建一个可视化,显示和比较2010年和2019年之间所有大陆的腐败感知属性的趋势。明确地说,我们只想要2010年和2019年这两年的数据。在继续阅读之前,请先试一试这个例子。这个例子可以通过我们到目前为止所学的所有编程和可视化工具来轻松解决。下面的代码创建了要求的可视化。
1.直观地观察到异常值,如果数据存在离群点,即位于上下边缘区域之外,以圆点的形式表示2.当箱型图很短时,意味着很多数据多集中分布在很小的范围内3.当箱型图很长时,意味着数据分布比较离散,数据间的差异比较大4.当中位数接近底部时,说明大部分的数据值比较小5.当中位数接近顶部时,说明大部分的数据值比较大6.中位数所处的高低位置能反映数据的偏斜程度7.如果上下虚线比较长,说明上下四分位数之外的数据变化比较大,整体数据的方差和标准偏差也比较大8.箱型图的上下边缘并非最大值或最小值
1.箱型图虽然能显示出数据的分布偏态,但是不能提供关于数据分布偏态和尾重程度的精确度量;2.对于批量较大的数据批,箱线图反映的形状信息更加模糊;3.用中位数代表总体平均水平有一定的局限性。