![Python大数据与机器学习实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/134/30638134/b_30638134.jpg)
4.2 Seaborn高级数据可视化
Seaborn是基于Matplotlib的高级绘图层。虽然Matplotlib包含饼图、直方图、三维图以及多图组合等基本工具,但是在使用时需要设置各种参数,而Seaborn简化了这一问题。它提供简单的代码来解决复杂的问题,尤其是多图组合的模式,不但作图清晰、美观,更是在同一图示中集合和对比了大量信息。这些工作如果只使用底层的Matplotlib实现,可能需要几倍甚至几十倍的代码量。另外,Seaborn还给我们提供了多种美观的图示风格,以及看问题的各种视角。综上,Saeborn的主要优点是简单、美观且多视角。
上一节已经介绍过常用的图表类型,本节将以数据为导向,介绍几种常用的Seaborn图表及使用场景。
4.2.1 准备工作
1.安装软件
在安装Seaborn库时需要注意其中的一些功能,比如catplot功能只有0.9版本以上的Seaborn才能支持,因此在安装时需要指定版本号。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_123_2.jpg?sign=1739250858-ojFngKUUec7fXLLjng8EE9dG1RDN4Xin-0-bf634aa7cbddd24a96bf918ca1d07465)
2.包含头文件
在4.2节中所有示例都需要包括以下头文件,在此统一说明,后续例程中省略。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_124_1.jpg?sign=1739250858-aLcOm2dnQYEPWQz0U8iCrFzuV72Tu9N0-0-37b509cc15d0ff997303db893d6ad987)
tips中有两个数值型字段和五个分类型字段,共244个实例,表4.2只截取了前5个作为示例。
表4.2 tips数据示例
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_124_2.jpg?sign=1739250858-OdpokryHsxG1NearcSWV0GUu6N70Z83u-0-93cfcf4a73db09d03a9b02066b4b470c)
4.2.2 连续变量相关图
本小节介绍一个连续变量与另一个连续变量之间关系的图表展示。
1.Relplot关系类型图表
Relplot可以支持点图kind='scatter'和线图kind='line'两种作图方法。下例把sex,time,day,tip,total_bill五维数据绘制在一张图上,两个数值类型tip和total_bill分别对应y轴和x轴,其他三个维度是枚举型变量,分别用hue设置颜色、col设置行、row设置列。Seaborn的大多数函数都支持使用这几个参数实现多图对比。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_124_3.jpg?sign=1739250858-ap0rNpzYkyYYNmPDdbJyhgDgkFEyBthO-0-349589c40badd6d4a96eaac6c156d9be)
程序运行结果如图4.21所示。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_125_1.jpg?sign=1739250858-CDQ5ua34c9QCZeTGbwuyThVV73JAtaUh-0-53a62f427e1e8da172b3098b3c6d7ff4)
图4.21 Relplot图表
2.点图
点图在上面的维度之上增加了点大小的维度(此维度为数值型)。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_125_2.jpg?sign=1739250858-CEDhNm5kShtDy9eogU5ZUsxnEAYHl0eB-0-b86dadef049208b42b6fb1ab5ec30805)
3.线图
线图使用style参数,也增加了用不同线(实线、虚线)表示不同类型的新维度(此维度为分类型)。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_125_3.jpg?sign=1739250858-PvRp6aSr1dHjS7LSem9DAP3uxQHMHDJd-0-5911f155437248cefed0da0cc27403e5)
4.2.3 分类变量图
分类变量图描述的是连续变量在分类之后,其类与类之间的对比关系。
1.stripplot散点图
stripplot展示的是使用分类变量day分类后,对各类的连续变量total_bill的统计作图。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_126_1.jpg?sign=1739250858-MJmRrNSULwUPYSpSKvEiQxbs9CR6EuB8-0-baf0ac40d7e3521d0510a93a1abed17d)
程序运行结果如图4.22所示。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_126_2.jpg?sign=1739250858-E6dH2BwG8DKI1poqkgBw8PAVFDj4lLCf-0-7142f15ba6e3970d64e32025165c717b)
图4.22 stripplot散点图
2.swarmplot散点图
swarmplot的功能和stripplot的类似,为避免重叠而无法估算数量的多少,swarmplot将每个点散开,这样做的缺点是耗时,因此当数据量非常大的时候并不适用。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_126_3.jpg?sign=1739250858-DQQ8QrBKh3QVeVPFQ7cj4hoEyQcWS8Oa-0-2e626b549ee64e2e0473b2bdbdaab2ff)
程序运行结果如图4.23所示。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_126_4.jpg?sign=1739250858-PUoRmaVYvusvVH0YcznG1kUB8JFKGP5K-0-316aa38a08a29f633c60fa8e193ed869)
图4.23 swarmplot散点图
3.violinplot小提琴图
为展示具体的分布,Seaborn还支持小提琴图。在本例中,按不同day分类并在每个图上用小提琴图画出不同性别的total_bill核密度分布图。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_127_1.jpg?sign=1739250858-2on8z5Wajnxf1MwkgNS8pm7P1heuJI5O-0-2f6006e03d09754025350497842b7913)
程序运行结果如图4.24所示。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_127_2.jpg?sign=1739250858-AEop6uTErJGsWGKTs45R6x5i0qZojRAD-0-b9a835c52e59c8cfba86d5145f56918f)
图4.24 volinplot小提琴图
4.boxplot箱式图
boxplot箱式图也称盒须图或盒式图,用于描述一组数据的分布情况。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_127_3.jpg?sign=1739250858-rP39AQSlAcIijdLnEhK3uVG4qFpkdzMR-0-649f97c05c0ffae8597acb58d4d7a6f4)
程序运行结果如图4.25所示。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_127_4.jpg?sign=1739250858-Eimzqn6pGdNsMUzZUWo5GcHRUtMq9jQN-0-cb8853e85e4902044637076b42b5f6e7)
图4.25 boxplot箱式图
5.boxenplot变种箱式图
boxenplot变种箱式图也被称为增强箱式图,在图中使用更多分位数绘制出更丰富的分布信息,尤其细化了尾部数据的分布情况。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_128_1.jpg?sign=1739250858-GaKE390jxfEc5jvaSupqf5Wgh4bo6lWO-0-d692955134a65bc52e04c1b217aa4eca)
程序运行结果如图4.26所示。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_128_2.jpg?sign=1739250858-CqSQibGEowdzizmeWicPzsjtgyiYtPR5-0-ea47f957a4ab0e2bf473ab48f79c3a0c)
图4.26 boxenplot变种箱式图
6.pointplot分类统计图
pointplot分类统计图中的横坐标代表类别,纵坐标展示了该类别对应值的分布。与箱式图不同的是,它以连接的方式描述类别之间的关系,更适用于多个有序的类别。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_128_3.jpg?sign=1739250858-mpFaCiDrPCtuVrStkIKF26WwX8NW4cju-0-8e61b07553a8bdd4b597e51da89aef12)
程序运行结果如图4.27所示。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_128_4.jpg?sign=1739250858-QB6c7arxugdeq4MAqVJPZFhHqTsE1eqG-0-184f660587586560637bc4e5b04d7222)
图4.27 pointplot分类统计图
7.barplot柱对比图
barplot柱对比图可用于对比两种分布的均值和方差,本例展示了在不同性别、不同吸烟情况的人群中,total_bill均值和方差的差异。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_129_1.jpg?sign=1739250858-y2pTc4o9mxzIePXwSX9pOuBNH5MKwrWH-0-29018bf0d10551847a8c4dc52cea801e)
程序运行结果如图4.28所示。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_129_2.jpg?sign=1739250858-QGzi2URZ1uR14yJIeWLR3YFd9tKJd3QU-0-db884bb3d81c6c1b096ef4dae9518c7b)
图4.28 barplot柱对比图
8.catplot综合分析图
catplot综合分析图可以实现本小节所有分类变量图的功能,可通过kind设置不同的图表类型。
◎ stripplot():catplot(kind="strip").
◎ swarmplot():catplot(kind="swarm").
◎ boxplot():catplot(kind="box").
◎ violinplot():catplot(kind="violin").
◎ boxenplot():catplot(kind="boxen").
◎ pointplot():catplot(kind="point").
◎ barplot():catplot(kind="bar").
◎ countplot():catplot(kind="count").
4.2.4 回归图
1.连续变量回归图
implot是在散点图的基础上加入回归模型的绘图方法。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_130_1.jpg?sign=1739250858-qTxTIUaB6JmilPqSVntmG6HeX43CLa2e-0-d33b9990e4faef0770de97cffb992633)
程序运行结果如图4.29所示。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_130_2.jpg?sign=1739250858-mSvCIPUvdWE1QixsmAHg7TyVSnLsvBWd-0-e897428589ab2373323c094cf23ca4c6)
图4.29 implot连续变量回归图
2.分类变量回归图
分类变量回归图可以使用参数x_estimator=np.mean对每个类别的统计量作图。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_130_3.jpg?sign=1739250858-TNL0O7c7kGsToOteJ6oPk19dHN9ECenA-0-4f380ef908bfca30a03b183538e22b76)
程序运行结果如图4.30所示。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_130_4.jpg?sign=1739250858-4YJkbujG2M10r8G9kVebfJVRggfM0pyd-0-5ca847f08f13b163858291dca8307820)
图4.30 implot分类变量回归图
4.2.5 多图组合
1.jointplot两变量图
在数据分析中,常用作图的方式实现相关性分析,即x轴设置为变量A,y轴设置为变量B,然后做散点图。在散点图中,点是叠加显示的,但有时还需要关注每个变量自身的分布情况,而jointplot可以把描述变量的分布图和变量相关的散点图组合在一起,是相关性分析最常用的工具。另外,图片上还能展示回归曲线以及相关系数。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_131_1.jpg?sign=1739250858-hYk3UkIUTxObaJSgMb9DpLf5i5ZwaPei-0-4ddeb16ac6323d3e8e4638024f78700d)
程序运行结果如图4.31所示。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_131_2.jpg?sign=1739250858-l9nDAo1umN0v5ADH5T6UfYmgyA3KaK65-0-a955ce6ddf940cde2a3e685f2995bb99)
图4.31 jointplot两变量图
本例中使用statsmodels库的ccard数据分析其中两个数值类型变量的相关性,使用xlim和ylim设置图片显示范围,忽略了离群点,kind参数可设置作图方式,如scatter散点图、kde密度图、hex六边形图等,本例中选择reg画出了线性回归图。
2.pairplot多变量图
如果对N个变量的相关性做散点图,maplotlib则需要做N×N个图,而pairplot函数调用一次即可实现,其对角线上是直方图,其余都是两两变量的散点图,这样不仅简单,而且还能组合在一起做对比。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_132_1.jpg?sign=1739250858-ZxydRhByjh9rsuWM7OABd8SRhd2QUVGb-0-624147300b8c777468bbc2fe963b86d0)
程序运行结果如图4.32所示。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_132_2.jpg?sign=1739250858-zeNaRcgLyP1f8qNo9h8KAIxs6nFeLYh6-0-58f5403dddeeb5866fe8088147609fb3)
图4.32 pairplot多变量图
从图4.32中可以看到,数据类型INCOME与INCOMESQ呈强相关,AGE与INCOME也有一定的相关趋势,对角线上的图对应的是每个因素与其自身的对比,图4.32中以直方图的形式显示了该变量的分布。
3.factorplot两变量关系图
factorplot用于绘制两维变量的关系图,用kind指定其做图类型,包括point,bar,count,box,violin,strip等。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_133_1.jpg?sign=1739250858-HrH3XxEv7jl9EbvVJlU5dVPPcVV4OGdc-0-005bee8074f8fcfb8f3878f8229887e3)
程序运行结果如图4.33所示。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_133_2.jpg?sign=1739250858-3ZIPcnQ1afoPQME2um8tA4G62jdWJqOa-0-f6fdf33a0ac444bf6ca8c30bdc921876)
图4.33 factorplot两变量关系图
4.FacetGrid结构化绘图网格
FacetGrid可以选择任意作图方式以及自定义的作图函数。这通常包含两部分:FacetGrid部分指定数据集、行、列,map部分指定作图方式及相应参数。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_133_3.jpg?sign=1739250858-b6WKXhQIU2obCMkduUc78ZaYNm8bcc73-0-efdcda7e575ec7c6c486ef9b2e65150e)
程序运行结果如图4.34所示。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_134_1.jpg?sign=1739250858-cl9dLi8I6BGAzOojMgQqy1UYiPP2Bb1t-0-ff7bc274f3613b36effe4264adee04ed)
图4.34 facetgrid绘图网络
可以看到,不论是连续图还是分类图,不论是用FacetGrid还是用barplot都是将多个特征放在同一张图片上展示,其差别在于观察角度不同和数据自身的类型。
4.2.6 热力图
热力图(heatmap)也常用来展示数据表中多个特征的两两线性相关性,尤其在变量的数量较多时,它比pairplot更直观,也更加节约计算资源。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_134_2.jpg?sign=1739250858-QOsraoYmPGTYiXR06JRgRSumeAdWX2SJ-0-0231472305e583bebe5feafc582c95b8)
程序运行结果如图4.35所示。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_134_3.jpg?sign=1739250858-V75E56CHJw0aRJ2dC9RpmWWRUpWCQNEl-0-a51e02031298c9e234731fa99a336657)
图4.35 热力图
4.2.7 印刷品作图
用Matplotlib或Seaborn生成的图片除了用于开发者分析数据、作PPT展示,往往还用于纸制品的印刷。例如,制作成书籍中的图片或者发布论文等。在用于印刷时,图片需要有足够的分辨率,在4.1.10小节中介绍了将图表导出成图片以及设置图片分辨率的方法。
除了考虑图片分辨率,还需要考虑出版物中字体的大小及版面的大小,以调整图片中文字的大小,这在创建绘图区域时可以使用不同的figsize。对于非彩色印刷,还需要注意其背景颜色不能太深,以及需要将图表中不同的颜色(当红、绿、蓝图转成黑白图时,都变成了相似的深灰色)转换成不同亮度的单色。下面介绍Seaborn中常用的两种方法:
第一种:将背景设置为白色加网格。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_135_1.jpg?sign=1739250858-YqlzkLsqktDgmxivdl8TDA53m7aRZFU4-0-7201dd4751cbc4cfeb3462b295e78c41)
第二种:将默认的用颜色表示的不同类型设置为单色,由深到浅表示不同的类型。
![](https://epubservercos.yuewen.com/57F11A/16699150105739906/epubprivate/OEBPS/Images/38425_135_2.jpg?sign=1739250858-n3DvsKujdXl74n5UVcLONga2hKQNpW44-0-386e3cce703fe15e454cb0e44f9506ac)
其中,start=2.7设置作图颜色为蓝色;dark和light设置灰度变化范围,其取值为0到1之间。由于太深和太浅的颜色效果都比较突兀,因此一般取其中段,n_colors=10指定将其颜色范围分为十段。