学科分类
目录
数据分析

用分类数据绘图

数据集中的数据类型有很多种,除了连续的特征变量之外,最常见的就是类目型的数据类型了,比如人的性别、学历、爱好等,这些数据类型都不能用连续的变量来表示,而是用分类的数据来表示。

Seaborn针对分类数据提供了专门的可视化函数,这些函数大致可以分为如下三种:

  • 分类数据散点图:swarmplot()与stripplot();

  • 分类数据的分布图:boxplot()与violinplot();

  • 分类数据的统计估算图:barplot()与pointplot()。

下面针对分类数据可绘制的图形进行简单地介绍,具体内容如下。

一、 类别散点图

通过stripplot()函数可以画一个散点图,stripplot()函数的语法格式如下。

seaborn.stripplot(x = None, y = None,hue = None,data = None,order = None,
                  hue_order = None,jitter = False,dodge = False,orient = None,
                  color = None,palette = None,size = 5,edgecolor ='gray',linewidth = 0,
                  ax = None,** kwargs)

上述函数中常用参数的含义如下:

(1) x,y,hue:用于绘制长格式数据的输入。

(2) data:用于绘制的数据集。如果x和y不存在,则它将作为宽格式,否则将作为长格式。

(3) order,hue_order:用于绘制分类的级别。

(4) jitter:表示抖动的程度(仅沿类别轴)。当很多数据点重叠时,可以指定抖动的数量,或者设为True使用默认值。

为了让大家更好地理解,接下来,通过stripplot()函数绘制一个散点图,示例代码如下。

In [20]: tips = sns.load_dataset("tips")
         sns.stripplot(x="day", y="total_bill", data=tips)
Out[20]: <matplotlib.axes._subplots.AxesSubplot at 0xd651668>

运行结果如图1所示。

NvOEouSt90UAAAAASUVORK5CYII=

图1 运行结果

从图1中可以看出,图表中的横坐标是分类的数据,而且一些数据点会互相重叠,不易于观察。为了解决这个问题,可以在调用stripplot()函数时传入jitter参数,以调整横坐标的位置,改后的示例代码如下。

In [21]: tips = sns.load_dataset("tips")
         sns.stripplot(x="day", y="total_bill", data=tips, jitter=True)
Out[21]: <matplotlib.axes._subplots.AxesSubplot at 0xd5fb390>

运行结果如图2所示。

n9BMppfHuH6JPS6TTe3t4wNDSEiYmJnz7yTpRruL1D9EmxWAxNTU2ora1l4FPO40qfiEhFuNInIlIRhj4RkYow9ImIVIShT0SkIgx9IiIV+QfmaoLLuqMo8wAAAABJRU5ErkJggg==

图2 运行结果

除此之外,还可以调用swarmplot() 函数绘制散点图,该函数的好处就是所有的数据点都不会重叠,可以很清晰地观察到数据的分布情况,示例代码如下。

In [22]: sns.swarmplot(x="day", y="total_bill", data=tips)
Out[22]: <matplotlib.axes._subplots.AxesSubplot at 0xd6743c8>

运行结果如图3所示。

D1uMlPHoGEpyAAAAAElFTkSuQmCC

图3 运行结果

二、 类别内的数据分布

要想查看各个分类中的数据分布,显而易见,散点图是不满足需求的,原因是它不够直观。针对这种情况,我们可以绘制如下两种图形进行查看:

  • 箱形图:利用箱形图可以提供有关数据分散情况的信息,可以很直观地查看数据的四分位分布(1/4分位,中位数,3/4分位以及四分位距)。

  • 提琴图:箱形图与核密度图的结合,它可以展示任意位置的密度,可以很直观地看到哪些位置的密度较高。

接下来,针对Seaborn库中箱形图和提琴图的绘制进行简单地介绍。

1. 绘制箱形图

seaborn中用于绘制箱形图的函数为boxplot(),其语法格式如下:

seaborn.boxplot(x = None, y = None,hue = None,data = None,order = None,
                hue_order = None,orient = None,color = None,palette = None,
                saturation = 0.75,width = 0.8,dodge = True,fliersize = 5,
                linewidth = None,whis = 1.5,notch = False,ax = None,** kwargs)

常用参数的含义如下:

(1) orient:表示数据垂直或水平显示,取值为“v” | “h”。

(2) palette:用于设置不同级别色相的颜色变量。

(3) saturation:用于设置数据显示的颜色饱和度。

使用boxplot()函数绘制箱形图的具体示例如下。

In [23]: sns.boxplot(x="day", y="total_bill", data=tips)
Out[23]: <matplotlib.axes._subplots.AxesSubplot at 0xfd60860>

上述示例中,使用seaborn中内置的数据集tips绘制了一个箱形图,图4中x轴的名称为day,其刻度范围是Thur~Sun(周四至周日),y轴的名称为total_bill,刻度范围为10~50左右。

运行结果如图4所示。

D8bkZlsF0m0oAAAAAElFTkSuQmCC

图4 运行结果

从图6-31中可以看出,Thur列大部分数据都小于30,不过有5个大于30的异常值,Fri列中大部分数据都小于30,只有一个异常值大于40,Sat一列中有3个大于40的异常值,Sun一列中有两个大于40的异常值。

2. 绘制提琴图

seaborn中用于绘制提琴图的函数为violinplot(),其语法格式如下:

seaborn.violinplot(x = None,y = None,hue = None,data = None,order = None,
                   hue_order = None,bw ='scott',cut = 2,scale ='area',
                   scale_hue = True,gridsize = 100,width = 0.8,inner ='box',
                   split = False,dodge = True,orient = None,linewidth = None,
                   color = None,palette = None,saturation = 0.75,ax = None,** kwargs)

通过 violinplot() 函数绘制提琴图的示例代码如下。

In [24]: sns.violinplot(x="day", y="total_bill", data=tips)
Out[24]: <matplotlib.axes._subplots.AxesSubplot at 0x100f7ba8>

上述示例中,使用seaborn中内置的数据集tips绘制了一个提琴图,图5中x轴的名称为day,y轴的名称为total_bill。

运行结果如图5所示。

pn169djdHSU+yeQpnH2DlGMhBAIBAJ45JFH8Nxzz12xyTuR1nB4hyhGbrcbd999N5YsWcLAJ83jmT4RUQLhmT4RUQJh6BMRJRCGPhFRAmHoExElEIY+EVEC+X8mnKEsB9BTywAAAABJRU5ErkJggg==

图5 运行结果

从图5中可以看出,Thur一列中位于5~25之间的数值较多,Fri列中位于5~30之间的数值较多,Sat一列中位于5~35之间的数值较多,Sun一列中位于5~40之间的数值较多。

三、 类别内的统计估计

要想查看每个分类的集中趋势,则可以使用条形图和点图进行展示。Seaborn库中用于绘制这两种图表的具体函数如下:

  • barplot()函数:绘制条形图。

  • pointplot()函数:绘制点图。

这些函数的API与上面那些函数都是一样的,这里只讲解函数的应用,不再过多对函数的语法进行讲解了。

1. 绘制条形图

最常用的查看集中趋势的图形就是条形图。默认情况下,barplot()函数会在整个数据集上使用均值进行估计。若每个类别中有多个类别时(使用了hue参数),则条形图可以使用引导来计算估计的置信区间(是指由样本统计量所构造的总体参数的估计区间),并使用误差条来表示置信区间。

使用barplot()函数的示例如下。

In [25]: sns.barplot(x="day", y="total_bill", data=tips)
Out[25]: <matplotlib.axes._subplots.AxesSubplot at 0x101cdb00>

运行结果如图6所示。

4AAAAASUVORK5CYII=

图6 运行结果

2. 绘制点图

另外一种用于估计的图形是点图,可以调用pointplot()函数进行绘制,该函数会用高度估计值对数据进行描述,而不是显示完整的条形,它只会绘制点估计和置信区间。

通过pointplot()函数绘制点图的示例如下。

In [26]: sns.pointplot(x="day", y="total_bill", data=tips)
Out[26]: <matplotlib.axes._subplots.AxesSubplot at 0x1022e4a8>

运行结果如图7所示。

zmNwx88ng80iciEhEe6RMRiQhDn4hIRBj6REQiwtAnIhIRhj4RkYj8fzcwHuDGukYvAAAAAElFTkSuQmCC

图7 运行结果

点击此处
隐藏目录