目录
7.1样式与分布图
7.1.1Seaborn样式
7.1.2坐标轴移除
7.1.3单变量分布图
7.1.4多变量分布图
7.2分类图
7.2.1分类散点图
7.2.2箱线图与琴形图
7.2.3柱状图
7.3回归图与网格
7.3.1回归图
7.3.2网格
7.4综合案例-泰坦尼克号生还者数据
7.4.1数据来源
7.4.2定义问题
7.4.3数据清洗
7.4.4数据探索
seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得绘图更容易、更美。本章首先讲解如何使用seaborn样式和分布图,并介绍如何使用seaborn绘制分类如;然后介绍回归图的绘制和网格计数。
seaborn中有预先设计好的5中主题样式:datkgrid、dark、whitegrid、white和ticks,默认使用darkgrid主题样式。首先使用matplotlib库进行绘图,如下图是matplotlib的默认样式。
通过set_style方法可以进行主题样式的设置,这里使用darkgrid主题,与matplotlib的默认样式进行对比。如下图,可以看出途中增加了灰白色的背景和网格线。而使用dark主题就不会有网格线。
注:其他样式大家可以自行测试
在seaborn中,set方法更为常用,因为其可以同时设置主题,调色板等多个样式。style参数为主题设置,palette参数用于设置调色板,当设置不同的调色板时,使用的图表颜色也不同,color_codes参数设置颜色代码,设置过后,可以使用r、g来设置颜色,如下图
在seaborn主题中,white和ticks主题都会存在4个坐标。在matplotlib中式无法去掉多余的顶部和右侧坐标轴的,而在seaborn中可以使用despine方法轻松的去除,如下图
使用despine方法可以对坐标轴进行变化,设置offset参数可以使坐标轴偏移,trim参数可修剪刻度,如下图
当然也可以指定移除哪些坐标轴,如下图
在接下来,seaborn中,使用seaborn中自带的小费数据集,首先将其读入Dataframe中,
说明:小费数据集中,total_bill为小费总金额,tip为小费,sex为顾客性别,smoker为顾客是否吸烟,day为消费的日期,time为聚餐的时间段,size为聚餐人数。
对于单变量分布图的绘制,在seaborn中使用displot函数。默认情况下会绘制一个直方图,并嵌套一个与之对应的密度图。这里绘制total_bill的分布图,如下图
利用displot方法绘制的直方图与matplotlib是类似的。在displot的参数中,可以选择不会只密度图,这里使用rug参数绘制毛毯图,其可以为每个观测值绘制小细线(边际毛毯),也可以单独用rugplot进行绘制。如下图
在matplotlib中,可以通过bins参数来设置分段。在displot方法中也是可以同样的设置方法,如下图
如果设置hist为False,就可以去掉直方图而绘制密度图。
通过displot函数可以同时绘制直方图,密度图和毛毯图,但这些分布图都有对应的具体绘图函数。其中,kdeplot函数可以绘制密度图,rugplot函数可以绘制毛毯图。下面通过matplotlib创建的subplots函数创建两个子图,然后分别用displot函数绘制对应的分布图,如下图
在matplotlib中,为了绘制两个变量的分布关系,场使用散点图的方法。在seaborn中,使用joinplot函数绘制一个多面板图,不仅可以显示两个变量的关系,也可以显示每个单变量的分布情况。
下面绘制tip和total_bill的分布图如下图,这里除了有散点图,还有两个变量的直方图
在joinplot函数中,改变kind参数为kde(密度图),单变量的分布就会用密度图来代替,而散点图会被高等线图代替
在数据集中,如果要体现多变量的分布情况,就需要承兑的二元分布图,在seaborn中,可以使用pairplot函数来完成二元分布图,该函数会创造一个轴矩阵,以此显示DataFrame中每两列的关系,在对叫上为单变量的分布情况。
pairplot函数只对数值类型的列有效。如图8.16所示为绘制小费数据集的多变量分布情况图。
在seaborn中,通过stripplot函数可以显示度量变量在每个类别的值。在小费数据中,显示total_bill在day上的值的分布,效果如图所示
stripplot函数通过hue参数可以多嵌套一个分类变量,在图表中会以不同的色彩来表现,如下图
在某些情况下,分类散点图表达的值的分布信息有限,这时就需要一些其他的绘图图形,箱线图就是一个不错的选择,箱线图可以观察四分位数、中位数和极值。在seaborn中使用boxplot函数来绘制箱线图,效果如下,
琴形图结合了箱线图与核密度估计图,在seaborn中,使用violineplot来绘制琴形图,如下图
利用split参数可以将分类数据进行切分,这样绘制的琴形图两边的颜色就代表了不同的类别;在琴形图中,利用inner参数可以对每个参数进行可视化,而不是只能查看箱线图那几个统计值。
这些分类图函数可以互相组合,实现更加强大的可视化效果,效果图如下,代码如下
在 seaborn中使用barplot函数来绘制柱状图,默认情况下使用 barplot函数绘制的y轴式平均值,且在每个柱状条上会绘制误差条,如图
在柱状图中,常绘制类别的计数柱状图。如果使用matplotlib函数进行绘制,首先要对DataFrame进行计算,而在seaborn中,使用countplot函数即可,如下图
在seaborn中,使用joinplot函数可以显示两个变量的联合分布情况,使用统计模型来归两个变量之间的简单关系也是非常有必要的。可以使用regplot和lmplot函数来绘制回归图,其绘制的图表是一样的,如下图
注:regplot和lmplot函数传入的数据格式略有不同。
在回归图中,也可以不绘制置信区间,如下图
在上面的回归图中显示的是一对变量间的关系,使用hue参数可以加入一个分类的变量,通过不同颜色来表示,下过如图所示,代码如下
如何添加一个变量,可以绘制子图,效果如下图
同样再添加两个变量,效果如图,代码如下:
在对多维度数据进行可视化时,在数据集的不同子集上绘制同一个绘图的多个实例是一件非常有用的时,这种技术被成为网格技术。在seaborn中使用FacetGrid来创建对象,然后使用map方法就可以绘制多个实例图表了,效果如下图。
matplotlib的基本图形都可以在该对象中绘制,如下图所示为绘制的散点图。代码如下
同样,也可以添加多个变量用于绘制多个图表,效果如下,代码如下。
本例使用seaborn中自带的泰坦尼克号生还乘客数据,如下图
本次分析中提出两个问题:泰坦尼克号乘客的基本信息分布情况;乘客的信息与生还数据是否有关联
上面我们已经查看了缺失值,然后我们对年龄缺失值进行处理。通过seaborn的displot函数查看乘客的年龄分布,效果如下
这里发现年龄成正态分布,于是用年龄均值进行缺失值的填充,再进行年龄分布的可视化,如下
然后利用countplot党法对Embarked进行可视化,效果如下
接着再利用正确的登船地点S进行缺失值的补充,效果图如下
对于deck字段,由于缺失值太多,因此将其删除
首先可视化乘客的性别分布,由效果图可知,男性乘客比女性乘客更多一些。
然后结合性别,绘制乘客年龄分布的箱线图,效果如图,有图可以看出,男性与女性的年龄分布很接近,但女性乘客的年龄跨度更大一些。
接着对船舱等级进行计数,如下图可以看出第三级船舱数量最多,
然后再结合船舱等级,绘制乘客年龄分布琴形图图,如下图可以看出,头等舱的年龄跨距较大,第三级船舱的中年人分布最多,
接下来重点分析生还乘客与其他字段之间是否有关联。首先,对生还字段计数可视化,如下图可以看出,未生还的人数更多一些。
一般,女性再特殊情况下会被优先考虑,如下图,生还乘客中女性占大多数
利用网格技术,可以进行更好的对比,如下图
此外,老人和小孩也是有限考虑的对象,因此这里对年龄进行分级,分开小孩和老人的数据,数据如下图
然后对分级后的年龄进行可视化,如下图可以看出,成人乘客数量占比很大,而小孩和年长乘客的占比较小,
下图时乘客年龄与生还乘客的关系,我们可以看出关系并不明显,但小孩生还几率还是交大,而老人相对更小
至于其他方面,大家可以自行尝试,例如船舱等级与生还数据的关系,还有船舱等级+是否单身 与生还数据的关系。