美文网首页
Box Plot in Python -一个完整的指南

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

作者: Threathunter | 来源:发表于2021-04-13 10:46 被阅读0次

来源: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值根据性别进行分割——男性和女性。

相关文章

网友评论

      本文标题:Box Plot in Python -一个完整的指南

      本文链接:https://www.haomeiwen.com/subject/grdqlltx.html