Box Plot in Python -一个完整的指南

来源:https://python.plainenglish.io/box-plot-in-python-a-complete-guide-for-beginners-9c480a086977

其它资料:

https://blog.csdn.net/weixin_32655655/article/details/112156580

https://zhuanlan.zhihu.com/p/30757480

https://www.jianshu.com/p/c8184250db31?utm_campaign

箱形图(Box Plot)是探索性数据分析中用来分析给定数据分布的标准图之一。

箱形图是探索性数据分析中用来分析数据分布的标准图之一。它提供一个图形摘要来识别数据集的分布(distribution )和偏度( skewness )。这是框图的样子:

在箱线图中,数据集根据其四分位数值进行分割。

从箱线图中,您可以找到数据集中的最小值(minimum)、第一个四分位数值( first quartile)、中间值(median )、第三个四分位数值(third quartile)和最大值(maximum)。

一、解读箱形图(Box Plot)

下极值(Lower Extreme):这是数据集中除去离群值的最小值(离群值是与总体随机样本中的其他值存在异常距离的观察值)。

上极值点(Upper Extreme):排除异常值后的最大值点。

中值(Median Value):这是数据集的中点。50%的数据点将低于这个值,50%的数据点将高于这个值。

下四分位数/第一四分位数(Lower Quartile/ First Quartile):这是第25百分位数的点。25%的数据点值低于这个值,75%的数据点值高于这个值。

上四分位数/第三四分位数(Upper Quartile/ Third Quartile):这是第75百分位数的点。75%的数据点值低于此值。

四分位数范围(Interquartile range,IQR):在第25和第75百分位数之间的点。(即中间50%的数据点)

Whiskers:中间50%以外的点。

二、如何在箱线图中确定异常值


离群值是指远离其他数据点的点。它们在箱形图中被分别表示为单独的点。异常值是指小于Q1-1.5 *IQR的点和大于Q3 + 1.5*IQR的点。

三、从箱形图理解偏度

一个分布可以是正态分布,也可以是正偏度分布,也可以是负偏度分布。您可以通过使用分布的箱线图来找到这一点。

在一个正态分布数据集中,所有四分位数的长度都是相同的。

在正偏度数据集中,第1和第2个四分位数的长度会更小,而第3和第4个四分位数的长度会更大。


在一个负偏度数据集中,第1和第2个四分位数的长度会更大,而第3和第4个四分位数的长度会更小。


四、箱形图比较

通过不同组的箱线图,您可以很容易地比较这些组的分布和中值。它提供了一种简单的方法来可视化组的范围和分布。


在上图中,你可以看到4个不同人群年龄的箱线图。

让我们看看从上面的图表中我们可以得到的所有见解。

1、组1涵盖了各个年龄段的人群,因为在这种情况下,范围更高。

2、组3的中位年龄最高,组1的中位年龄最低。

3、组0的箱线图相对较短,这表明它只涵盖了一个非常低的范围。

4、4组都是正态分布的。

最后,我简要解释另一种箱线图——缺口箱线图,以此来结束本文。

五、缺口箱线图


在这种情况下,箱线图将在中心包含一个缺口。notch代表95%置信区间的中位数。缺口范围计算为

median +/- 1.57*IQR/square_root(N)

数据来源:

https://www.kaggle.com/ronitf/heart-disease-uci?select=heart.csv

https://github.com/arunavedula/Heart.csv/blob/master/heart.csv

六、首先看看数据集

首先,导入研究数据集所需的所有库——numpy、pandas、matplotlib、seaborn。

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

然后使用pandas导入数据集。

df = pd.read_csv("heartdisease.csv")

df.head()


可以看到数据集包含了很多列,如age,sex,cp,trestbps等,其中一些是类别值,一些是连续值。

七、绘制基本的箱线图

箱线图用于理解数据集的分布。让我们看看病人胆固醇水平数据的箱线图。

要绘制箱线图,请使用plt.boxplot()函数。将数据集作为参数传递给函数。

fig = plt.figure(1, figsize=(9, 6))

plt.boxplot(df['chol'])


取值范围是小于100 ~大于500。你能从这个箱线图中得到什么启示?

让我们逐一分析一下。


考虑最小值和最大值,排除数据集中的异常值。

看中间的那个框,下面的部分表示第25百分位数,即第一个四分位数,上面的部分表示第75百分位数,即第3个四分位数。

中间的橙色线代表中值。

第一和第三分位数线之间的距离称为四分位数间范围。

百分位数(percentile)是什么?如果一个点的百分位数是40,那么这意味着数据集中有40%的点低于这个值。

八、绘制一个缺口箱线图

在plt.boxplot()函数中使用notch=True参数来创建一个缺口框图。

这个缺口表示中值的95%置信区间。

fig = plt.figure(1, figsize=(9, 6))

plt.boxplot(df['chol'],notch = True)


九、水平的箱线图

使用vert=0参数创建水平箱线图。

fig = plt.figure(1, figsize=(9, 6))

plt.boxplot(df['chol'],notch = True,vert=0)


十、多个箱线图在一个单独的图形

您可以在单个箱线图中绘制许多变量的分布。您只需将所有列作为数据集传递到箱线图中。

您还可以使用labels=参数在x轴上标记变量。

fig = plt.figure(1, figsize=(9, 6))

data = [df['trestbps'],df['chol'],df['thalach']]

plt.boxplot(data,labels=['Trestbps','Chol','Thalach'])


十一、箱线图使用seaborn

箱线图也可以在seaborn中使用sns.boxplot()函数绘制。

您需要将x变量、y变量和数据作为参数传递给函数。

fig = plt.figure(1, figsize=(9, 6))

sns.boxplot(x='cp',y='chol',data=df)


在上图中,你可以看到不同患者的胆固醇水平的分布,对于不同的cp值。

由此可以看出,当cp=0时,与cp=3时相比,胆固醇的范围明显更高。

为了理解箱形图的分布,您还可以尝试绘制一个带状图

fig = plt.figure(1, figsize=(9, 6))

sns.boxplot(x='cp',y='chol',data=df)

sns.stripplot(x="cp", y="chol",data=df)


你可以看到在箱形图中显示的最小值和最大值之间的点。

十二、在箱线图中表示3个变量

使用hue参数sns.boxplot()将第三个变量添加到boxplot中。

fig = plt.figure(1, figsize=(9, 6))

sns.boxplot(x='cp',y='chol',hue='sex',data=df)

sns.stripplot(x="cp", y="chol",hue='sex',data=df)


我们可以在一张图中表示3个变量——性别、胆固醇和cp。

首先,根据cp值对值进行分隔,然后对每个cp值根据性别进行分割——男性和女性。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357

推荐阅读更多精彩内容

  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,567评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 4,220评论 1 3
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 125,205评论 2 7