作者:未禾

数据猿官网 | 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(微信)

长按右方二维码

关注我们ˉ►

Python Seaborn (5) 分类数据的绘制相关推荐

  1. python seaborn教程_数据可视化Seaborn从零开始学习教程(一) 风格选择

    作者:xiaoyu 微信公众号:Python数据科学 知乎:python数据分析师 最近在做几个项目的数据分析,每次用到seaborn进行可视化绘图的时候总是忘记具体操作.虽然seaborn的官方网站 ...

  2. Python获取excel的数据并绘制直方图

    Python刚入门,欢迎大家多多交流~ 最近做个小项目,获取医疗数据文件Raw Data MAKO v2.xlsx中的一个名为PHIN-22E_KR的sheet ,获取其指定几列的数据并绘制直方图.e ...

  3. 使用Python获取股票解禁数据并绘制股价曲线

    股票解禁大致分为:原始股解禁,增发股解禁,股权激励. 原始股解禁是上市前公司股东.高管.员工持有的股票. 增发股解禁是上市公司上市后,再次发行股票给一些固定的机构.人的股票. 股权激励是上市公司上市后 ...

  4. 用Python爬取股票数据,绘制K线和均线并用机器学习预测股价(来自我出的书)

    最近我出了一本书,<基于股票大数据分析的Python入门实战 视频教学版>,京东链接:https://item.jd.com/69241653952.html,在其中用股票范例讲述Pyth ...

  5. Python读取excel表格数据并绘制成柱状图 | 数据排序、柱状图颜色、标签乱码等问题通通能够解决!

    hello大家好, 我是你们的可爱丸, 我们又见面啦! python的功能十分强大, 它不仅可以用来做爬虫, 还可以用来做数据分析哦! 那么今天我就带着大家 用python 分析表格数据,并绘制成柱状 ...

  6. 用Python爬取股票数据,绘制K线和均线并用机器学习预测股价

    最近我出了一本书,<基于股票大数据分析的Python入门实战 视频教学版>,在其中用股票范例讲述Python爬虫.数据分析和机器学习的技术,大家看了我的书,不仅能很快用比较热门的案例学好P ...

  7. 用Python爬取股票数据,绘制K线和均线并用机器学习预测股价(来自我出的书)(转载)

    最近我出了一本书,<基于股票大数据分析的Python入门实战 视频教学版>,京东链接:https://item.jd.com/69241653952.html,在其中用股票范例讲述Pyth ...

  8. 利用Python获取excel的数据并绘制直方图(保姆级教程,含多组样例)

    学习样例 开发工具:python3.8.pycharm2020.3.3 开发过程 分析数据 总共三列数据,分别是年份,月份及对应的客流量,如果将数据可视化,我们可以将年份作为横坐标,可以将客流量总和作 ...

  9. python按时间分类数据_Pandas / Python – 按时间段分组数据

    您可以在dt.date之前使用groupby并在last之前聚合: #if necessery convert to datetime df.time_dt = pd.to_datetime(df.t ...

最新文章

  1. 【深度学习】多层感知器高级使用
  2. 【面向工业界】京东NLP落地应用实战
  3. 泛泰SKY新出品 DMB电视手机IM-U160
  4. 【Linux安全】安全口令策略设置
  5. Java Priority Queue(PriorityQueue)示例
  6. matlab 锐化降噪,matlab 图形锐化 滤波
  7. 信息学奥赛一本通(1281:最长上升子序列)
  8. 免费赠送2本新书《iOS程序员面试笔试真题与解析》
  9. 软件测试培训费多少钱?贵吗?靠谱吗?
  10. #pragma once用法总结
  11. Markdown中在线编辑公式LaTex
  12. CSS第三章:10.调整字体:字体加粗;(持续更新)
  13. 简单的有限状态机Unity独家写法(呸~厚颜无耻之人)
  14. gophish企业内部钓鱼邮件测试
  15. 为企业微信“服务商应用”更改微信插件中的消息弹出样式
  16. 发那科pmc编程手册_干货|发那科FANUC PMC编程步骤精编版(图文并茂)
  17. AUTOCAD——快速标注命令
  18. HOOK拦截消息代码
  19. python操作手机app超详细步骤
  20. 云原生|kubernetes |一文带你搞懂pod调度策略,驱逐策略,污点、容忍调度

热门文章

  1. Tencent QQ皮肤图像文件格式Gft转png或bmp源代码
  2. JAVA实例讲解:股指期货交易系统的构建
  3. java内部类以及使用场景
  4. 红帽RHCE培训-课程1笔记内容
  5. linebreak_WPF:LineBreak动态启用/禁用
  6. 段错误排查方法与防御性措施~
  7. 开源BI cc-admin 图解、图介
  8. GBASE 8s客户端与服务器的通信
  9. SDR原理--FM部分
  10. POJO/DO / DTO / BO / VO /AO