密度图的密度估计_箱形图、小提琴图、直方图……统统可以卡通化!

6c63ce019a56e144ea2d9e54182b4a55.png
全文共11345字,预计学习时长23分钟或更长

对于数据科学家来说,可视化工具比比皆是,因此,退一步去钻研每种可视化的类型及其适用的最佳案例就变得十分重要。为了发挥工具的最佳效用,有时可以考虑将其拟人化,甚至是将其变成卡通人物。

为了更好地理解图表,本文将其设计成了一系列卡通人物。

背景——数据集

这份有关谷物的数据集(https://www.kaggle.com/crawford/80-cereals)来自Kaggle,可用以制作各类图表。下载并保存该数据集,就可以运行以下绘图代码:

import pandas as pd
import numpy as npimport matplotlib.pyplot as pltimport seaborn as sns
df = pd.read_csv(‘./dataset/cereal.csv’)df[‘cal_per_cup’] = df.calories/df.cups # adding column to look at calorie content per cup rather than per serving

具体而言,绘图所需数据集中的每个样本都必须具有定量值或连续值(例如热量、纤维等非分类变量),制图的重点在于如何展示这些定量值。但同时一些分类变量(例如谷物位于顶部、中部还是底部货架)也必不可少,以便按照类别划分样本,并展示出每种样本的定量值。这一谷物数据集较好地融合了两者。

3e41aed39e8f6517314968f20fd3e865.png

分布族

34871dcc02da0fb647b4293186ed5b43.png
这是一个幸福的大家庭——箱形图、直方图、小提琴图、箱形图。虽然它们长相各异,但如果深入了解,你就会发现每种图形都以相似的方式揭示数据集的构成。

爸爸妈妈:箱形图Borat和Wanda

这个图表家庭会告诉你,用大量不同的数据样本测量同一个值的意义何在。无论数据集是正常或是已被扭曲,这些图表都能找出样本的中位数(三个孩子甚至可以判断样本是否为多模态分布)。

来认识一下箱形图Borat和Wanda(不过Wanda更喜欢别人叫她盒须图)。他们在一次蹦床聚会上相遇,Wanda在蹦床上弹跳时,突然丢失了一个异常值,这个异常值砸到了Borat头上。Borat把异常值还给了Wanda,然后他们就在一起了。

5565c0d631fbedd2c61c9f4103deb4b5.png
箱形图喜欢蹦床,所以它们总是出现在x轴的高处和低处。

Borat和Wanda志趣相投。Borat喜欢保持清爽的外表,表达总是简洁凝练。而Wanda则更喜欢打扮一些,在解释一件事时,她会多花点时间介绍细节,因为她希望别人充分理解她所发现的异常现象。

箱形图的实际应用

“Borat”代表的是形式最简单的箱形图(或称盒须图),它能提供五条关于分布的信息:最大值、最小值、中位数、下四分位数及上四分位数。

注意,在下面的代码中,图表的默认参数并不会将上下边缘线设置成最大值和最小值,所以必须在代码里加上“whis='range'”这一条件。

plt.figure(figsize=(4, 8))sns.boxplot(df.cal_per_cup, whis=’range’, orient=’v’, color=’#BFD0FE’)plt.ylabel(‘Calories Per Cup’)plt.title(‘Distribution of Calories in Cereals’);

5fef665a61f761cc03daeaae2cec0203.png

“Wanda”代表的是一种更为常见的箱形图(有时被称为图基箱形图),能够通过调整参数,选择性地传达信息。它默认将上边缘设置在1.5四分位数范围内(IQR)的最大点,IQR即下四分位数和上四分位数之间的差值。也就是说,上边缘在上四位数1.5倍IQR处,下边缘位于下四分位数1.5倍IQR处。上边缘线以上、下边缘线以下的值都被划为异常值。

plt.figure(figsize=(4, 8))sns.boxplot(df.cal_per_cup, orient=’v’, color=’#F6A6A0')plt.ylabel(‘Calories Per Cup’)plt.title(‘Distribution of Calories in Cereals’);

f3b5d041e4cbb8a7efe1e87973fb298a.png

箱形图可用于展示数据集的扩散和偏离程度。如果想要对多种分布情况进行比较,箱形图也会派上用场。举个例子,以下是根据货架位置对谷物进行分类后,每杯谷物中热量的分布情况。

plt.figure(figsize=(15, 8))sns.boxplot([‘Bottom Shelf’, ‘Middle Shelf’, ‘Top Shelf’],  [df[df.shelf==1].cal_per_cup,df[df.shelf==2].cal_per_cup, df[df.shelf==3].cal_per_cup],orient=’v’, color=’#F6A6A0')plt.ylabel(‘Calories Per Cup’)plt.title(‘Distribution of Calories in Cereals by Shelf Placement’, fontsize=20);

ab37b33c1ef1e4e13f09db8c0a43dfbd.png
根据货架位置对数据进行分类,很快可以发现原始箱形图中所有的异常值都来自顶层货架上的谷物。这表明顶层货架上谷物的热量中位数是最高的,而且其中不仅有热量最高的谷物,也有热量最低的谷物。

儿子:直方图Howard

Borat和Wanda在一起后生了三个孩子,一个男孩(直方图Howard)和一对双胞胎女儿(小提琴图Viola和Violet)。

8a033765bf4e1710cd307e65e97203f5.png
这是直方图Howard。他总喜欢躺着,给你一个直观的展示,让你自己做结论。他一般不喜欢掩饰条柱之间形成的阶梯,也不愿费力去展示处理数据的手段、数据的中位数或百分数。不过心情愉悦时,他也能好好打扮一番,清楚地展示出这些细节——甚至更多细节。

Howard的边缘参差不齐,这取决于他展示的内容以及图中所用的条柱数量。他出了名的懒,一般只有他老是躺着。不过偶尔时间合适时,他也会站起来,比如为了拍家庭合照。

直方图的实际应用

直方图包含更多关于分布形状的信息——是高斯分布、均匀分布还是多模态分布?通常来说,直方图不会直观地显示中位数或四分位数的位置,但如果需要的话,可以人为设置添加。

在创建直方图时,应该认真考虑所用条柱的数量,因为这会影响直方图的清晰度,而且每一数据集所需要的条柱数量都不尽相同(为了更好地理解数据,我经常会同时在几张图表中设置不同数量的条柱)。在以下代码中,将条柱数量分别设置为5、20、50,分别用于展示很少条柱,较多条柱和非常多条柱的情况。

plt.figure(figsize=(8, 4))
plt.hist(df.cal_per_cup, bins=20,color=’#BDFCC8', edgecolor=”#1F8F50")plt.ylabel(‘Calories Per Cup’)plt.title(‘Distribution of Calories in Cereals’);

6cc6a951f13979ef4d6c5c2160715b2f.png

以上直方图显示了热量分布。中间的图表有20个条柱,可以清楚看到,其热量分布接近于高斯分布,右侧有一条比较长的尾巴,接近正偏态分布。左图中由于条状数量太少,无法判断热量为50-200的谷物的分布情况(可能是高斯分布,可能是均匀分布,也可能是其他)。右图则条柱过多,包含的信息过多,以致难以描述。

直方图也可以用于比较多个数据集,但这并不是我的最爱。可以将直方图重叠(最多重叠三个数据集),也可以将几个直方图并列进行比较。

此外,还可以在散点图周围创建边缘直方图,以展示一对定量变量之间的关系。下图是有关谷物数据集中纤维与热量关系的直方图:

sns.jointplot(x=df.cal_per_cup, y=df.fiber, kind=’scatter’, color=’#1F8F50');

92c7c8b9652ff1cc5a830f3e9c6e6c8f.png
此图用于比较谷物中热量的分布情况与纤维的分布情况。中部是用于比较两个变量的散点图,顶部是热量分布的直方图,右侧是纤维分布的直方图。

双胞胎女儿:小提琴图Violia和Violet

695dcf850f090ab191c3d18f3175c2ef.png

Viola和Violet总是背对背—而且经常(但并不总是!)互相对称。在直方图Howard里经常能看到坎坷的阶梯,但Viola和Violet却喜欢穿紧身裤,所以她们俩的表面总是那么光滑。

小提琴图的实际应用

小提琴图具备箱形图的一些特征,但它们同时也是基于核密度估计(KDE)建构的——KDE能够高效抹去你在直方图中所能看见的阶梯(所以我说Viola和Violet总是穿着紧身裤,表面光滑)。

plt.figure(figsize=(4, 8))sns.violinplot(df.cal_per_cup, color=’#F0BFFF’, orient=’v’)plt.ylabel(‘Calories Per Cup’)plt.title(‘Distribution of Calories in Cereals’);

d13e02755473e70a23ace4368c67729b.png

和箱形图一样,小提琴图也适用于将两个数据集并列进行比较。可参照以下根据货架位置进行分类的数据:

plt.figure(figsize=(15, 8))sns.violinplot(x=df.shelf, y=df.cal_per_cup, color=’#F0BFFF’)plt.xticks([0,1,2], [‘Bottom Shelf’, ‘Middle Shelf’, ‘Top Shelf’])plt.ylabel(‘Calories Per Cup’, fontsize=16)plt.xlabel(‘Cereal Placement’, fontsize=16)plt.title(‘Distribution of Calories in Cereals by Shelf Placement’, fontsize=20)plt.tight_layout()

02b76444314d64f16c3f5aa45006a4ef.png

小提琴图的另一个重要特点就是,如果你希望用两种分类标准来展示数据,可以对其进行拆分,在左边放一组数据集的KDE(平滑后的直方图),右边放另一组数据集的KDE(这就是为什么Viola和Violet不是同卵双胞胎——她们有时看起来截然不同),中间是合并数据集的中间值及其他值。

下图将General Mills生产的谷物和Kelloggs生产的谷物(这是数据集中最大的两家谷物生产商)进行了分类,并分别展示了每杯谷物中的热量。

plt.figure(figsize=(15, 8))
plot = sns.violinplot(x=df[(df.mfr == ‘K’) |(df.mfr == ‘G’)].shelf,  y=df[(df.mfr == ‘K’) |(df.mfr == ‘G’)].cal_per_cup, hue=df[(df.mfr == ‘K’) |(df.mfr == ‘G’)].mfr, split=True, color=’#F0BFFF’)handles, labels = plot.get_legend_handles_labels()plt.xticks([0,1,2], [‘Bottom Shelf’, ‘Middle Shelf’, ‘Top Shelf’])plt.ylabel(‘Calories Per Cup’, fontsize=16)plt.xlabel(‘Cereal Placement’, fontsize=16)plt.legend([handles[0], handles[1]], [‘Kelloggs’, ‘General Mills’], title=’Manufacturer’)plt.title(‘Distribution of Calories in Cereals nby Shelf Placement and Manufacturer’, fontsize=20)plt.tight_layout();

9c0e7ab58136e2201a51f28ba5cb4388.png

传送门:https://github.com/msiboni88/DisplayingDistributions/blob/master/Displaying Distributions.ipynb

4f596bb791ecfa6a0e10d25f3ec9b623.png

留言 点赞 关注

我们一起分享AI学习与发展的干货

编译组:莫菲菲、殷睿宣

相关链接:

https://onezero.medium.com/a-proposed-trump-administration-rule-could-let-lenders-discriminate-through-a-i-2f9a729b0f3c

如需转载,请后台留言,遵守转载规范

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/244572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 屏幕分辨率 屏幕密度,Android屏幕适配——多分辨率多屏幕密度

为什么要适配,适配的好处等等这里就不说了,直接说我们要怎么适配,请看下面的内容。1.重要概念px:pixel,像素Android原生API,UI设计计量单位,如获取屏幕宽高。屏幕分辨率:指在纵向和横…

操作系统锁的实现方法有哪几种_「从入门到放弃-Java」并发编程-锁-synchronized...

简介上篇【从入门到放弃-Java】并发编程-线程安全中,我们了解到,可以通过加锁机制来保护共享对象,来实现线程安全。synchronized是java提供的一种内置的锁机制。通过synchronized关键字同步代码块。线程在进入同步代码块之前会自动获得锁&…

android长按加入购物车,《Android APP可能有的东西》之UI篇:加入购物车动画

很多电商app的加入购物车的动作会要求加上动画效果:飞进购物车,想来也合理,在listview界面时商品快速加入购物车,一直toast用户加入成功好像不太正常,所以添加一个动画,用户自然就懂了,而且也挺…

基于android 定位系统,基于Android平台定位系统设计和实现

2 0 1 3牟第 1 2期文章编号: 1 0 0 9— 2 5 5 2 ( 2 0 1 3 ) 1 2— 0 1 8 7— 0 4 中图分类号: T P 3 1 6 . 8 9 文献标识码: A基于 A n d r o i d平台定位系统设计和实现李瑞宣,王山东,徐志远,王伶俐(河海…

开发工评价程师自我_常见“自我评价”写作范例

“自我评价”在找工作的时候是一个非常重要的内容,优秀的“自我评价”不仅就可以让别人对你有一个全面的认识,更可以通过寥寥数语就让别人对你产生浓厚的兴趣,让你的求职之路事半功倍。但是怎么写“自我评价”,却是让很多人犯愁的…

visual studio 调试python_Visual Studio Code Python 调试设置

很意外Visual Studio Code居然支持Python代码的断点调试。一起来配置一下。工具/原料 Visual Studio Code 1.1 Python 2.7.11 方法/步骤 1 首先,当然是要先安装插件,配置Python环境。这个大家看这个文章 2 环境配置完成后,我们点击调试按钮&a…

leetcode c程序总提示主函数_Matlab系列之函数嵌套

昨天的那一篇讲的几个函数,不知道你们理解的如何,是否懂得怎么去使用了,如果还没懂,一定要再多看几遍,并且去在软件上进行实操,今天的话,将要介绍一下函数的嵌套,不过在正式讲嵌套之…

华为手机出现android啥意思,传华为正研发手机系统,如果脱离安卓系统,还有啥能阻止华为前进...

原标题:传华为正研发手机系统,如果脱离安卓系统,还有啥能阻止华为前进自从国产手机正式进入了智能手机时代之后,中华酷联的中兴、酷派、联想早已经被华为甩在了身后。虽然现在国产手机已经呈现出华为、小米、OPPO、vivo四足鼎立的…

sql 数据库前两列值乘_Sql语句常用关键字

最近接触sql比较多,发现自己已经遗忘的也差不多,要用到的时候迟迟拿不出来,今天开始会在知乎上纪录一些sql语句学习的内容,内容重在说明查询语句的用法。一、sql查询语句的初始介绍1、查询语句的一般写法:select .....…

谷歌fuchsiaos和华为鸿蒙,华为鸿蒙最大的对手现身!谷歌正式推送Fuchsia OS,或替代安卓...

原标题:华为鸿蒙最大的对手现身!谷歌正式推送Fuchsia OS,或替代安卓可能是看到了华为鸿蒙的进展神速,谷歌在近日也正是开始了Fuchsia OS的推送。5月25日,谷歌Fuchsia OS项目负责人在社交媒体上公开喊话:“今…

c html转为datatable,C#中DataTable导出为HTML格式的方法

前言在C#中DataTable导出数据的时候,我们需要HTML格式的输出数据, 这时候就需要使用将DataTable导出为到HTML格式的方法了,以下代码就可以帮助我们达到目的。首先,我们要绑定DataTable和 DataGridView。一、通过DataTable绑定DataGridView1. 创建DataTab…

mybatis insert 忽略 联合唯一索引_MySQL实战中,Insert语句的使用心得总结

提到MySQL的Insert语句,你肯定不陌生,或许已经张口就来:不就是insert into table values(xxx,xxx,xxx)嘛!没错,但在实战中,根据不同的需求场景,插入操作在语法、执行方式上的用法多种多样。今天…

eureka集群只注册一个_Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇

Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇本文主要内容:1:spring cloud整合Eureka总结本文是由凯哥(凯哥Java:kagejava)发布的《spring cloud系列》教程的总第十篇:本文是几个维度中的第一个维度:注册与发现维度…

html鼠标滚轴后下一页,鼠标滚动有一页ppt不能马上下翻,而是上下移动,移动到一定位置后才翻到下一页,这是怎么回事?怎么解决?...

一般是这张幻灯片里有图片才会出现这种问题,你的图片格式有问题,点击图片,再点击格式,把图片格式换一下就好了同问,但不是下面两个原因,都试过没用1,ppt的比例太大,缩小比例即可。Ct…

resnet keras 结构_Day146:第二讲 ResNet

出处论文:Deep Residual Learning for Image Recognition作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian SunImageNet Top5错误率: 3.57%主要思想主要体现在 Residual(残差),从名字就可以看出,不学绝对值&#x…

html5内容切换特效,html5+jQuery图片和文字内容同时左右切换特效

html5jQuery图片和文字内容同时左右切换特效,点击图片或者点击左右按钮进行切换,图片转动以及文字内容动画效果切换。查看演示下载资源:22次 下载资源下载积分:20积分js代码 (function(){var bannerIndex 0;var $bannerBgs $(.j…

asp向不同的用户发送信息_【asp.net core 系列】 1 带你了解一下asp.net core

0. 前言 这是一个新的系列,名字是《http://ASP.NET Core 入门到实战》。这个系列主讲http://ASP.NET Core MVC,辅助一些前端的基础知识(能用来实现我们需要的即可,并非主讲)。同时这个系列也会在后续介绍http://ASP.NE…

html 怎么使用http请求数据类型,HTTP请求方式中8种请求方法(简单介绍)

HTTP工作原理HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行…

上行30m下行200m是多少宽带_套餐内有多少流量,就加送多少流量!电信流量攻势太凶猛!...

虽然6月6日国内发放了5G商用牌照,5G时代正式开启。但是对于用户来说,要想用上5G服务尚需等待一段时间,因为现在5G手机终端尚未普及、5G资费套餐也未出炉、运营商的5G网络还需要通过建设进一步扩大覆盖范围。在5G真正走近用户的前夕&#xff0…

vue项目html引入css,vue项目引入自定义.css的样式文件

ES6的引入方式:.vue文件中css文件引入import "../assets/common/common.css";//自定义.css的样式路径js文件的引入在main.js中:import API from ./assets/api/api.config.jsVue.prototype.$API API;P.S.:传统上,引入cs…