Python Seaborn (5) 分类数据的绘制

2019 年 2 月 14 日 数据猿

作者:未禾

数据猿官网 | www.datayuan.cn

今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰丨阿里UC大鱼丨新浪微博丨新浪看点丨百度百家丨博客中国丨趣头条丨腾讯云·云+社区

我们之前探讨了如何使用散点图和回归模型拟合来可视化两个变量之间的关系,以及如何在其他分类变量的层次之间进行展示。 当然,还有一大类问题就是分类数据的问题了? 在这种情况下,散点图和回归模型方法将不起作用。当然,有几个观察可视化这种关系的选择,我们将在本章中讨论。


非常实用的方法是将 Seaborn 的分类图分为三类,将分类变量每个级别的每个观察结果显示出来,显示每个观察分布的抽象表示,以及应用统计估计显示的权重趋势和置信区间:


· 第一个包括函数 swarmplot() 和 stripplot()

· 第二个包括函数 boxplot() 和 violinplot()

· 第三个包括函数 barplot() 和 pointplt()


在了解他们如何接受数据传入方面,尽管每个参数都聚有控制应用于该数据可视化细节的特定参数,但这些功能都共享一个基本的 API。


这与之前的 regplot() 和 lmplot() 的关系非常相似(未禾备注:在 seaborn 的构架中很容易分成这样两类用途相似,使用有所差异的替代方案函数)。在 Seaborn 中,相对低级别和相对高级别的方法用于定制分类数据的绘制图,上面列出的函数都是低级别的,他们绘制在特定的 matplotlib 轴上。还有更高级别的 factorplot()(未禾备注:这是一个非常简明的快速绘制函数,具体用法会在最后有详细介绍),它将这些功能与 FacetGrid 结合,以便在面板的网格中应用分类图像。


使用 “整洁” 格式的 DataFrame 调用这些函数是最简单和最好的,尽管较低级别的函数也接受宽形式的 DataFrames 或简单的观察向量。见下面的例子。


备注:你甚至可以理解为这一章都是在具体学习 factorplot() 函数,快速、直接、功能强大的绘图函数谁不爱?



分类散点图


显示分类变量级别中某些定量变量的值的一种简单方法使用 stripplot(),它会将分散图概括为其中一个变量是分类的:


在条纹图中,散点图通常将重叠。这使得很难看到数据的完整分布。一个简单的解决方案是使用一些随机的 “抖动” 调整位置(仅沿着分类轴)


备注:抖动是平时可视化中的常用的观察 “密度” 的方法,除了使用参数抖动,特定的抖动需求也可以用 numpy 在数据上处理实现


不同的方法是使用函数 swarmplot(),它使用避免重叠点的算法将分类轴上的每个散点图点定位:


备注:道理上,即使抖动还是会有重叠的可能,所以这种方法可能更好



当然也可以传入 hue 参数添加多个嵌套的分类变量。高于分类轴上的颜色和位置时冗余的,现在每个都提供有两个变量之一的信息:



一般来说,Seaborn 分类绘图功能试图从数据中推断类别的顺序。 如果您的数据有一个 pandas 分类数据类型,那么类别的默认顺序可以在那里设置。 对于其他数据类型,字符串类型的类别将按照它们在 DataFrame 中显示的顺序进行绘制,但是数组类别将被排序:



使用这些图,将分类变量放在垂直轴上是非常有用的(当类别名称相对较长或有很多类别时,这一点特别有用)。 您可以使用 orient 关键字强制定向,但通常可以从传递给 x 和 / 或 y 的变量的数据类型推断绘图方向:



分类内的观测分布


分类散点图固然简单实用,但在某些特定的的情况下,他们可以提供的值的分布信息会变得及其有限(并不明晰)。 有几种方式可以方便的解决这个问题,在类别之间进行简单比较并汇总信息,我们快速讨论并比较一些适合这类数据观测的函数。


箱线图


第一个是熟悉的 boxplot()。这种图形显示了分布的三个四分位值与极值。“晶须” 延伸到低于和低四分位数的 1.5 IQR 内的点,然后独立显示落在该范围之外的观测值。 重要的是,这意味着 boxplot 中的每个值的显示都对应于数据中的实际观察值:


备注:IQR 即统计学概念四分位距,第一四分位与第三四分位之间的距离,具体内容请参考更深入的相关资料


除了颜色之外,还可以使用不同的散点图标记来使黑色和白色的图像更好地绘制。 您还可以完全控制所用的颜色:


提琴图


不同的方法是一个 violinplot(),它结合了箱体图和分布教程中描述的核心密度估计过程:


备注:核密度估计,即全文中提到的,或参数内传入的 kde,具体概念内容请参考相关文档



这种方法使用核密度估计来更好地描述值的分布。此外,小提琴内还显示了箱体四分位数和晶须值。由于小提琴使用 KDE,还有一些其他可以调整的参数,相对于简单的 boxplot 增加了一些复杂性:



当色调参数只有两个级别时,也可以传入参数 split 至 violinplot(),这样可以更有效地利用空间:



最后,在绘制提琴图的时候有几个选项,包括显示每个人的观察结果而不是总结框图值的方法:



将 swarmplot() 或者 swarmplot() 与 violinplot() 或 boxplot() 结合使用可以显示每个观察结果以及分布的摘要:


未禾备注:说实话,并不推荐这么做,过多的信息除了炫技没有什么实际用处。



类别内的统计估计


通常,不是显示每个类别中的分布,你可能希望显示值的集中趋势。 Seaborn 有两种显示此信息的主要方法,但重要的是,这些功能的基本 API 与上述相同。(未禾:这是多么令人愉悦的事情)


条形图


最熟悉的方式完成这个目标是一个条形图。 在 Seaborn 中 barplot() 函数在完整数据集上运行,并显示任意估计,默认情况下使用均值。 当在每个类别中有多个观察值时,它还使用引导来计算估计周围的置信区间,并绘制使用误差条:



条形图的特殊情况是当您想要显示每个类别中的观察次数,而不是计算第二个变量的统计量。这类似于分类而不是定量变量的直方图。在 Seaborn 中,使用 countplot() 函数很容易绘制:


备注:函数将默认使用 count 参数作为 x/y 中未传的一组维度



可以使用上面讨论的所有选项来调用 barplot() 和 countplot(),以及在每个函数的详细文档中的其他选项:



点图


pointplot() 函数提供了可视化相同信息的另一种风格。该函数还对另一轴的高度估计值进行编码,而不是显示一个完整的柱型,它只绘制点估计和置信区间。另外,点图连接相同 hue 类别的点。这使得很容易看出主要关系如何随着第二个变量的变化而变化,因为你的眼睛很好地收集斜率的差异:



为了使能够在黑白中重现的图形,可以使用不同的标记和线条样式来展示不同 hue 类别的层次:



绘制“宽格式”数据


虽然使用 “长格式” 或“整洁”数据是优选的,但是这些功能也可以应用于各种格式的 “宽格式” 数据,包括 pandas DataFrame 或二维 numpy 数组阵列。这些对象应该直接传递给数据参数:



此外,这些函数接受 Pandas 或 numpy 对象的向量,而不是 DataFrame 中的变量。



为了控制由上述功能制作的图形的大小和形状,您必须使用 matplotlib 命令自己设置图形。 当然,这也意味着这些图块可以和其他种类的图块一起在一个多面板的绘制中共存:



绘制多层面板分类图


正如我们上面提到的,有两种方法可以在 Seaborn 中绘制分类图。与回归图中的二元性相似,您可以使用上面介绍的函数,也可以使用更高级别的函数 factorplot(),将这些函数与 FacetGrid() 相结合,通过这个图形的更大的结构来增加展示其他类别的能力。 默认情况下,factorplot() 产生一个 pairplot():



然而,kind 参数可以让您选择以上讨论的任何种类的图:



使用 factorplot() 的主要优点是很容易调用"facet" 展开更多其他分类变量:



任何一种图形都可以画出来。基于 FacetGrid 的工作原理,要更改图形的大小和形状,需要指定适用于每个方面的 size 和 aspect 参数:



重要的是要注意,你也可以直接使用 boxplot() 和 FacetGrid 来制作这个图。但是,必须特别注意确保分类变量的顺序在每个方面实施,方法是使用具有 Categorical 数据类型的数据或通过命令和 hue_order。



由于分类图的广义 API,它们应该很容易应用于其他更复杂的上下文。 例如,它们可以轻松地与 PairGrid 结合,以显示多个不同变量之间的分类关系:



资料补充

最后在这章翻译结束后,未禾专门收集了这个重要函数的所有参数说明,方便参考:


seaborn.factorplot(x=None, y=None, hue=None, data=None, row=None, col=None, col_wrap=None, estimator=<function mean>, ci=95, n_boot=1000, units=None, order=None, hue_order=None, row_order=None, col_order=None, kind='point', size=4, aspect=1, orient=None, color=None, palette=None, legend=True, legend_out=True, sharex=True, sharey=True, margin_titles=False, facet_kws=None, **kwargs)


Parameters:


x,y,hue 数据集变量 变量名

date 数据集 数据集名

row,col 更多分类变量进行平铺显示 变量名

col_wrap 每行的最高平铺数 整数

estimator 在每个分类中进行矢量到标量的映射 矢量

ci 置信区间 浮点数或 None

n_boot 计算置信区间时使用的引导迭代次数 整数

units 采样单元的标识符,用于执行多级引导和重复测量设计 数据变量或向量数据

order, hue_order 对应排序列表 字符串列表

row_order, col_order 对应排序列表 字符串列表

kind : 可选:point 默认, bar 柱形图, count 频次, box 箱体, violin 提琴, strip 散点,swarm 分散点(具体图形参考文章前部的分类介绍)

size 每个面的高度(英寸) 标量

aspect 纵横比 标量

orient 方向 "v"/"h"

color 颜色 matplotlib 颜色

palette 调色板 seaborn 颜色色板或字典

legend hue 的信息面板 True/False

legend_out 是否扩展图形,并将信息框绘制在中心右边 True/False

share{x,y} 共享轴线 True/False

facet_kws FacetGrid的其他参数 字典


本文作者 未禾,首发于作者知乎,https://zhuanlan.zhihu.com/p/27471537,已获作者授权原创形式发布。


数据猿读者亲启:


名企&大佬专访精选

向下滑动启阅

以下文字均可点击阅读原文


跨国外企:

谷歌大中华及韩国区数据洞察与解决方案总经理郭志明IBM中国区开发中心总经理吉燕勇微软中国CTO官韦青前微软中国CTO黎江VMware中国区研发中心总经理任道远


中国名企:

联想集团副总裁田日辉首汽租车COO 魏东

阿里巴巴数据经济研究中心秘书长潘永花

搜狗大数据研究院院长李刚易观CTO郭炜

前上海证券交易所副总裁兼CTO白硕携程商旅亚太区CMO 邱斐艾瑞集团CTO郝欣诚泰康集团大数据部总经理周雄志上海链家研究院院长陈泽帅蓝色光标首席数据科学家王炼


知名学者:

北大新媒体研究院副院长刘德寰中科院基因研究所方向东

 

创业明星:

地平线机器人创始人兼CEO余凯天工科仪董事长王世金ZRobot CEO乔杨天眼查创始人兼CEO柳超第四范式联合创始人兼首席架构师胡时伟天云大数据CEO雷涛Kyligence联合创始人兼CEO韩卿数之联创始人兼CEO周涛明略数据董事长吴明辉91征信创始人兼CEO 薛本川智铀科技创始人、CEO及首席科学家夏粉丨易宝支付联合创始人兼总裁余晨海云数据创始人兼CEO冯一村星环科技COO佘晖碳云智能联合创始人兼首席科学家李英睿

 

知名投资人:

前IDG创始合伙人、火山石资本创始人章苏阳

华创资本合伙人熊伟铭六禾创投总裁王烨

信天创投合伙人蒋宇捷青域基金执行总裁牟颖

蓝驰创投合伙人朱天宇


——数据猿专访部


(可上下滑动启阅)







▲向上滑动


采访/报道/投稿

yaphet.zhang@datayuan.cn


商务合作

18600591561(微信)



长按右方二维码

关注我们ˉ►


登录查看更多
0

相关内容

分类变量(categorical variable)是说明事物类别的一个名称,其取值是分类数据。如“性别”就是一个分类变量,其变量值为“男”或“女”;“行业”也是一个分类变量,其变量值可以为“零售业”、“旅游业”、“汽车制造 业”等。
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
190+阅读 · 2020年6月29日
Python地理数据处理,362页pdf,Geoprocessing with Python
专知会员服务
110+阅读 · 2020年5月24日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
229+阅读 · 2020年5月21日
Python导论,476页pdf,现代Python计算
专知会员服务
253+阅读 · 2020年5月17日
【干货书】R语言书: 编程和统计的第一课程,
专知会员服务
107+阅读 · 2020年5月9日
【干货书】机器学习Python实战教程,366页pdf
专知会员服务
332+阅读 · 2020年3月17日
算法与数据结构Python,369页pdf
专知会员服务
160+阅读 · 2020年3月4日
【2020新书】数据科学:十大Python项目,247页pdf
专知会员服务
211+阅读 · 2020年2月21日
盘一盘 Python 系列 8 - Sklearn
平均机器
5+阅读 · 2019年5月30日
Python奇淫技巧,5个数据可视化工具
机器学习算法与Python学习
7+阅读 · 2019年4月12日
卷积神经网络概述及Python实现
云栖社区
4+阅读 · 2018年9月1日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
python pandas 数据处理
Python技术博文
3+阅读 · 2017年8月30日
Meta-Learning to Cluster
Arxiv
17+阅读 · 2019年10月30日
Adaptive Neural Trees
Arxiv
4+阅读 · 2018年12月10日
VIP会员
相关VIP内容
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
190+阅读 · 2020年6月29日
Python地理数据处理,362页pdf,Geoprocessing with Python
专知会员服务
110+阅读 · 2020年5月24日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
229+阅读 · 2020年5月21日
Python导论,476页pdf,现代Python计算
专知会员服务
253+阅读 · 2020年5月17日
【干货书】R语言书: 编程和统计的第一课程,
专知会员服务
107+阅读 · 2020年5月9日
【干货书】机器学习Python实战教程,366页pdf
专知会员服务
332+阅读 · 2020年3月17日
算法与数据结构Python,369页pdf
专知会员服务
160+阅读 · 2020年3月4日
【2020新书】数据科学:十大Python项目,247页pdf
专知会员服务
211+阅读 · 2020年2月21日
相关资讯
盘一盘 Python 系列 8 - Sklearn
平均机器
5+阅读 · 2019年5月30日
Python奇淫技巧,5个数据可视化工具
机器学习算法与Python学习
7+阅读 · 2019年4月12日
卷积神经网络概述及Python实现
云栖社区
4+阅读 · 2018年9月1日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
python pandas 数据处理
Python技术博文
3+阅读 · 2017年8月30日
Top
微信扫码咨询专知VIP会员