Hello,大家好,我是景天,今天我们探讨下seaborn根据分类数据类绘图的方法
用分类数据绘图
数据集中的数据类型有很多种,除了连续的特征变量之外,最常见的就是类别型的数据了,比如人的性别、学历、爱好等,这些数据类型都不能用连续的变量来表示,而是用分类的数据来表示。
Seaborn针对分类数据提供了专门的可视化函数,这些函数大致可以分为如下三种:
分类数据散点图: swarmplot()与 stripplot()。
类数据的分布图: boxplot() 与 violinplot()。
分类数据的统计估算图:barplot() 与 pointplot()。
下面两节将针对分类数据可绘制的图形进行简单介绍,具体内容如下
1 类别散点图
通过 stripplot()函数可以画一个散点图, stripplot0函数的语法格式如下。
seaborn.stripplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, jitter=False)
参数解析:
x,y,hue:数据字段变量名,用于绘制长格式数据的输入
作用:根据实际数据,x,y常用来指定x,y轴的分类名称,
hue常用来指定第二次分类的数据类别(用颜色区分)
什么是长数据?
长数据一般是指数据集中的变量没有做明确的细分。即变量中至少有一个变量中的元素存在值严重重复循环的情况 (可以归为几类),如下表的北京市就重复了。表格整体的形状为长方形。即变量少而观察值多一列包含了所有的变量,而另一列则是与之相关的值
什么是宽数据?
宽数据是指数据集对所有的变量进行了明确的细分,各变量的值不存在重复环的情况也无法归类。数据总体的表现为 变量多而观察值少
每一列为一个变量,每一行为变量所对应的值
data: DataFrame,数组或数组列表
order,hue_order:字符串列表
作用:显式指定分类顺序,eg. order=[字段变量名1,字段变量名2,…]
jitter : float类型,True/1
作用:当数据重合较多时,用该参数做一些调整,也可以设置间距
如,jitter = 0.1 (通俗讲,就是让数据分散开)
dodge:bool
作用:若设置为True则沿着分类轴,将数据分离出来成为不同色调级别的条带,
否则,每个级别的点将相互叠加
orient:方向:v或者h
作用:设置图的绘制方向(垂直或水平),
如何选择:一般是根据输入变量的数据类型(dtype)推断出来。
color:matplotlib 颜色
palette:调色板名称,list类别或者字典
作用:用于对数据不同分类进行颜色区别
size:float
作用:设置标记大小(标记直径,以磅为单位)
edgecolor:matplotlib color,gray
作用:设置每个点的周围线条颜色
linewidth:float
作用:设置构图元素的线宽度
为了让大家更好地理解,接下来,通过 stripplot()函数绘制一个散点图,示例代码如下。
#获取tips数据
tips = sns.load_dataset(“tips”)
sns.stripplot(x=“day”, y=“total_bill”, data=tips)先看下数据
绘图:
加上hue,根据不同数据用不同颜色区分
sns.stripplot(x=“day”, y=“total_bill”, data=tips,hue=‘time’)
从上图中可以看出,图表中的横坐标是分类的数据,而且一些数据点会互相重叠,不易于观察。
为了解决这个问题,可以在调用striplot()函数时传入jitter参数,以调整横坐标的位置,改后的示例代码如下。
sns.stripplot(x=“day”, y=“total_bill”, data=tips, jitter=True)
#jitter=True,能够实现部分相同样本不重叠的散点图
除此之外,还可调用 swarmplot函数绘制散点图,该函数的好处是所有的数据点都不会重叠,可以很清晰地观察到数据的分布情况,示例代码如下。
sns.swarmplot(x=“day”, y=“total_bill”, data=tips)
2 类别内的数据分布
要想查看各个分类中的数据分布,显而易见,散点图是不满足需求的,原因是它不够直观。针对这种情况,我们可以绘制如下两种图形进行查看:
箱形图:
- 箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。
- 箱形图于1977年由美国著名统计学家约翰·图基(John Tukey)发明。它能显示出一组数据的最大值、最小值、中位数、及上下四分位数。
超出上下极限的单点为异常值
小提琴图:
- 小提琴图 (Violin Plot) 用于显示数据分布及其概率密度。
- 这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。
- 中间的黑色粗条表示四分位数范围,从其延伸的幼细黑线代表 95% 置信区间,而白点则为中位数。
- **箱形图在数据显示方面受到限制,简单的设计往往隐藏了有关数据分布的重要细节。**例如使用箱形图时,我们不能了解数据分布。虽然小提琴图可以显示更多详情,但它们也可能包含较多干扰信息。
置信区间解释:
按照95%置信区间构造出来的区间,如果我构造出100个这样的区间,其中大约有95个会包含μ。
这就好像用渔网捞鱼,我知道一百次网下去,可能会有95次网到我想要的鱼,但是我并不知道是不是现在这一网。
2.1 绘制箱形图
seaborn中用于绘制箱形图的函数为 boxplot(),其语法格式如下:
seaborn.boxplot(x=None, y=None, hue=None, data=None, orient=None, color=None, saturation=0.75, width=0.8)
参数详解:
x, y, hue:数据或向量数据中的变量名称
用于绘制长格式数据的输入。
data:DataFrame,数组,数组列表
用于绘图的数据集。如果x和y都缺失,那么数据将被视为宽格式。否则数据被视为长格式。
order, hue_order:字符串列表
控制分类变量(对应的条形图)的绘制顺序,若缺失则从数据中推断分类变量的顺序。
orient:“v”或“h”
控制绘图的方向(垂直或水平)。这通常是从输入变量的 dtype 推断出来的,但是当“分类”变量为数值型或绘制宽格式数据时可用于指定绘图的方向。
color:matplotlib颜色
所有元素的颜色,或渐变调色板的种子颜色。
palette:调色板名称,列表或字典
用于hue变量的不同级别的颜色。可以从color_palette()得到一些解释,或者将色调级别映射到matplotlib颜色的字典,---- palette=[“r”,“g”,“b”,“y”]。
saturation:float
控制用于绘制颜色的原始饱和度的比例。通常大幅填充在轻微不饱和的颜色下看起来更好,如果您希望绘图颜色与输入颜色规格完美匹配可将其设置为1。
width:float
不使用色调嵌套时完整元素的宽度,或主要分组变量一个级别的所有元素的宽度。
dodge:bool
使用色调嵌套时,元素是否应沿分类轴移动。
fliersize:float
用于表示异常值观察的标记的大小。
linewidth:float
构图元素的灰线宽度。
whis:float
控制在超过高低四分位数时 IQR (四分位间距)的比例,因此需要延长绘制的触须线段。超出此范围的点将被识别为异常值。
notch:boolean
是否使矩形框“凹陷”以指示中位数的置信区间。还可以通过plt.boxplot的一些参数来控制
ax:matplotlib轴
绘图时使用的 Axes 轴对象,否则使用当前 Axes 轴对象
kwargs:键值映射
其他在绘图时传给plt.boxplot的参数
使用 boxplot()函数绘制箱形图的具体示例如下。
sns.boxplot(x=“day”, y=“total_bill”, data=tips)先看下原始数据
看下绘制的图
上述示例中,使用 seaborn中内置的数据集tips绘制了一个箱形图,图中x轴的名称为day,其刻度范围是 Thur~Sun(周四至周日),y轴的名称为 total_bill,刻度范围为10-50左右
从图中可以看出:
- Thur列大部分数据都小于30,不过有5个大于30的异常值,
- Fri列中大部分数据都小于30,只有一个异常值大于40,
- Sat一列中有3个大于40的异常值,
- Sun列中有2个大于40的异常值
2.2 绘制提琴图
seaborn中用于绘制提琴图的函数为violinplot(),其语法格式如下
seaborn.violinplot(x=None, y=None, hue=None, data=None)
参数解析:
data:指定绘制小提琴图的数据集。
x:指定小提琴图的x轴数据。
y:指定小提琴图的y轴数据。
hue:指定一个分组变量。
order:传递一个字符串列表,用于分类变量的排序。
hue_order:传递一个字符串列表,用于分类变量hue值的排序。
bw:指定核密度估计的带宽,带宽越大,密度曲线越光滑。新版的即将废除,使用bw_method和bw_adjust
scale:用于调整小提琴图左右的宽度,如果为area,则表示每个小提琴图左右部分拥有相同的面积;如果为count,则表示根据样本数量来调节宽度;如果为width,则表示每个小提琴图左右两部分拥有相同的宽度。
scale_hue:bool类型参数,当使用hue参数时,是否对hue变量的每个水平做标准化处理,默认为True。
width:使用hue参数时,用于控制小提琴图的宽度。
inner:指定小提琴图内部数据点的形态,如果为box,则表示绘制微型的箱线图;如果为quartiles,则表示绘制四分位的分布图;如果为point或stick,则表示绘制点或小竖条。
split:bool类型参数,使用hue参数时,将小提琴图从中间分为两个不同的部分,默认为False。
dodge:bool类型的参数,当使用hue参数时,是否绘制水平交错的小提琴图,默认为True。
orient:指定小提琴图的呈现方向,默认为垂直方向。
linewidth:指定小提琴图的所有线条宽度。
color:指定小提琴图的颜色,该参数与palette参数一起使用时无效。
palette:指定hue变量的区分色。
saturation:指定颜色的透明度。
ax:指定子图的位置。
通过violinplot()函数绘制提琴图的示例代码如下
sns.violinplot(x=“day”, y=“total_bill”, data=tips)
上述示例中,使用seaborn中内置的数据集绘制了一个提琴图,图中x轴的名称为day,y轴的名称为total_bill
从图中可以看出:
- Thur一列中位于5~25之间的数值较多,
- Fri列中位于5-30之间的较多,
- Sat-列中位于5-35之间的数值较多,
- Sun一列中位于5-40之间的数值较多。
3 类别内的统计估计
要想查看每个分类的集中趋势,则可以使用条形图和点图进行展示。 Seaborn库中用于绘制这两种图表的具体函数如下
- barplot()函数:绘制条形图。
- pointplot()函数:绘制点图。
这些函数的API与上面那些函数都是一样的,这里只讲解函数的应用,不再过多对函数的语法进行讲解了。
3.1 绘制条形图
最常用的查看集中趋势的图形就是条形图。默认情况下, barplot函数会在整个数据集上使用均值进行估计。
若每个类别中有多个类别时(使用了hue参数),则条形图可以使用引导来计算估计的置信区间(是指由样本统计量所构造的总体参数的估计区间),并使用误差条来表示置信区间。
使用 barplot()函数的示例如下
sns.barplot(x=“day”, y=“total_bill”, data=tips)
3.2 绘制点图
另外一种用于估计的图形是点图,可以调用 pointplot()函数进行绘制,该函数会用高度低计值对数据进行描述,而不是显示完整的条形,它只会绘制点估计和置信区间。
通过 pointplot()函数绘制点图的示例如下。
sns.pointplot(x=“day”, y=“total_bill”, data=tips)