来源: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 )。这是框图的样子:
![](https://img.haomeiwen.com/i5619637/a27fe58924f5ca1c.png)
在箱线图中,数据集根据其四分位数值进行分割。
![](https://img.haomeiwen.com/i5619637/2fd1e7658c358d56.png)
从箱线图中,您可以找到数据集中的最小值(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%以外的点。
二、如何在箱线图中确定异常值
![](https://img.haomeiwen.com/i5619637/079d46c9ba7ef30f.png)
离群值是指远离其他数据点的点。它们在箱形图中被分别表示为单独的点。异常值是指小于Q1-1.5 *IQR的点和大于Q3 + 1.5*IQR的点。
三、从箱形图理解偏度
一个分布可以是正态分布,也可以是正偏度分布,也可以是负偏度分布。您可以通过使用分布的箱线图来找到这一点。
在一个正态分布数据集中,所有四分位数的长度都是相同的。
![](https://img.haomeiwen.com/i5619637/82300e0fa66baefb.png)
在正偏度数据集中,第1和第2个四分位数的长度会更小,而第3和第4个四分位数的长度会更大。
![](https://img.haomeiwen.com/i5619637/a9f55b646ff21599.png)
在一个负偏度数据集中,第1和第2个四分位数的长度会更大,而第3和第4个四分位数的长度会更小。
![](https://img.haomeiwen.com/i5619637/df2ad8d55e061376.png)
四、箱形图比较
通过不同组的箱线图,您可以很容易地比较这些组的分布和中值。它提供了一种简单的方法来可视化组的范围和分布。
![](https://img.haomeiwen.com/i5619637/972f13cd52c225d2.png)
在上图中,你可以看到4个不同人群年龄的箱线图。
让我们看看从上面的图表中我们可以得到的所有见解。
1、组1涵盖了各个年龄段的人群,因为在这种情况下,范围更高。
2、组3的中位年龄最高,组1的中位年龄最低。
3、组0的箱线图相对较短,这表明它只涵盖了一个非常低的范围。
4、4组都是正态分布的。
最后,我简要解释另一种箱线图——缺口箱线图,以此来结束本文。
五、缺口箱线图
![](https://img.haomeiwen.com/i5619637/64f7a0ff16bdf261.png)
在这种情况下,箱线图将在中心包含一个缺口。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()
![](https://img.haomeiwen.com/i5619637/8d02d8bbfd450885.png)
可以看到数据集包含了很多列,如age,sex,cp,trestbps等,其中一些是类别值,一些是连续值。
七、绘制基本的箱线图
箱线图用于理解数据集的分布。让我们看看病人胆固醇水平数据的箱线图。
要绘制箱线图,请使用plt.boxplot()函数。将数据集作为参数传递给函数。
fig = plt.figure(1, figsize=(9, 6))
plt.boxplot(df['chol'])
![](https://img.haomeiwen.com/i5619637/68f92f8506418b46.png)
取值范围是小于100 ~大于500。你能从这个箱线图中得到什么启示?
让我们逐一分析一下。
![](https://img.haomeiwen.com/i5619637/cc7c2107fde3ef46.png)
考虑最小值和最大值,排除数据集中的异常值。
看中间的那个框,下面的部分表示第25百分位数,即第一个四分位数,上面的部分表示第75百分位数,即第3个四分位数。
中间的橙色线代表中值。
第一和第三分位数线之间的距离称为四分位数间范围。
百分位数(percentile)是什么?如果一个点的百分位数是40,那么这意味着数据集中有40%的点低于这个值。
八、绘制一个缺口箱线图
在plt.boxplot()函数中使用notch=True参数来创建一个缺口框图。
这个缺口表示中值的95%置信区间。
fig = plt.figure(1, figsize=(9, 6))
plt.boxplot(df['chol'],notch = True)
![](https://img.haomeiwen.com/i5619637/db43716ab01d43e6.png)
九、水平的箱线图
使用vert=0参数创建水平箱线图。
fig = plt.figure(1, figsize=(9, 6))
plt.boxplot(df['chol'],notch = True,vert=0)
![](https://img.haomeiwen.com/i5619637/f709b9c81b787526.png)
十、多个箱线图在一个单独的图形
您可以在单个箱线图中绘制许多变量的分布。您只需将所有列作为数据集传递到箱线图中。
您还可以使用labels=参数在x轴上标记变量。
fig = plt.figure(1, figsize=(9, 6))
data = [df['trestbps'],df['chol'],df['thalach']]
plt.boxplot(data,labels=['Trestbps','Chol','Thalach'])
![](https://img.haomeiwen.com/i5619637/4db7cc173d481527.png)
十一、箱线图使用seaborn
箱线图也可以在seaborn中使用sns.boxplot()函数绘制。
您需要将x变量、y变量和数据作为参数传递给函数。
fig = plt.figure(1, figsize=(9, 6))
sns.boxplot(x='cp',y='chol',data=df)
![](https://img.haomeiwen.com/i5619637/2c2c2682361e8a45.png)
在上图中,你可以看到不同患者的胆固醇水平的分布,对于不同的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)
![](https://img.haomeiwen.com/i5619637/3712407617822d92.png)
你可以看到在箱形图中显示的最小值和最大值之间的点。
十二、在箱线图中表示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)
![](https://img.haomeiwen.com/i5619637/fd34d9999e5b3239.png)
我们可以在一张图中表示3个变量——性别、胆固醇和cp。
首先,根据cp值对值进行分隔,然后对每个cp值根据性别进行分割——男性和女性。
网友评论