数据分析:异常值检测--箱型图

12 篇文章 2 订阅
11 篇文章 0 订阅

在做数据分析时,我们免不了要检查数据中的异常值,但是什么样的数据算作异常呢。有人说很大或者很小的值,那到底多大多小的值算异常。箱型图就可以很好的解决这个问题。我们都知道折线图、柱状图等,但很少使用过箱型图。关于箱型图,百度百科的解释为:

箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。在各种领域也经常被使用,常见于品质管理。它主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比 较。箱线图的绘制方法是:先找出一组数据的最大值、最小值、中位数和两个四分位数;然后, 连接两个四分位数画出箱子;再将最大值和最小值与箱子相连接,中位数在箱子中间。

通过定义可以看出,箱型图可以很好的展示数据的基本分布情况,而且可以很方便的检测出数据中的异常值。

我们先介绍两种箱型图的实现方式,再详解箱型图含义,最后结合Kaggle数据集看看如何使用。

1.pandas实现

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = np.random.randn(3,4)
df = pd.DataFrame(df)
df.boxplot()

这里用的pandas自带的绘图方法,其实就是matplotlib。df的数据内容为:

	    0            1	        2	        3
0	-0.803730	2.666505	1.668437	-2.542154
1	0.996711	0.532948	1.484964	-0.452487
2	-1.036156	0.127020	-0.381138	-0.688037

得到的箱型图如下:

2.matplotlib实现

import matplotlib.pyplot as plt
import numpy as np
 
all_data = [np.random.normal(0, std, 100) for std in range(1, 4)]
 
fig = plt.figure(figsize=(8,6))
 
plt.boxplot(all_data,
            notch=False, # 是否用盒子形状
            sym='rs',    # 用红色矩形展示异常值
            showmeans=True,#展示均值点
            patch_artist=False,#是否要填充色
            meanline=False,#展示均值线
            widths=0.5,#设置箱盒宽度
            vert=True)   #垂直展示图形
 
plt.xticks([y+1 for y in range(len(all_data))], ['x1', 'x2', 'x3'])
plt.xlabel('measurement x')
t = plt.title('Box plot')
plt.show()

图形如下:

t

水平展示的效果如下:

f

3.图形详解

我们结合例子来讲解图形所代表的意思,例子来源于MBA智库百科,链接在文末。我们有如下数据:

2710 2755 2850 | 2880 2880 2890 | 2920 2940 2950 | 3050 3130 3325  

计算Q1,Q2,Q3,

Q1 = (2850 + 2880) / 2 = 2865 

Q2 = (2890 + 2920) / 2 = 2905

Q3 = (2950 + 3050) / 2 = 3000

也就是说,中位数是2905,第一个四分位数(也叫下四分位数)Q1 = 2865,第三个四分位数(也叫上四分位数)Q3 = 3000。有了四分位数Q1和Q3,可以算出四分位数全距IQR = Q3 − Q1。从而得到下限和上限。在上下限之外的点就是异常点。如下图所示:

 

f

4.实际应用

我们通过箱型图来检测Kaggle数据集Give Me Some Credits中的异常值。先看代码:

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv('/dataset/cs-training.csv')
#查看数据集中的如下几列数据
data = data[['NumberOfTime30-59DaysPastDueNotWorse','NumberOfTimes90DaysLate','NumberOfTime60-89DaysPastDueNotWorse','age']]

#使用pandas绘制
plt.figure(figsize=(10,5))
data.boxplot(sym='r*',vert=False,patch_artist=True,meanline=False,showmeans=True)
plt.show()

得到图形:

e

我们可以看出,age的取值有一个明显的异常点0。另外三列也有明显的异常点,97和98。对于这样的异常值直接删除即可。是不是很方便、很直观。箱型图简直就是数据分析中的异常值检测的神器。

 

参考资料:

https://matplotlib.org/gallery/pyplots/boxplot_demo_pyplot.html#sphx-glr-gallery-pyplots-boxplot-demo-pyplot-py

http://blog.topspeedsnail.com/archives/737

https://wiki.mbalib.com/wiki/%E7%AE%B1%E7%BA%BF%E5%9B%BE

  • 17
    点赞
  • 143
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Matlab中,可以使用箱型图(boxplot)来识别和去除异常值箱型图是一种常用的统计形,用于显示数据的分布情况。 首先,我们需要使用boxplot函数来绘制箱型图。该函数会将数据进行分组,并在中显示出每个组的五个关键统计量:最小值、第一四分位数(Q1)、中位数、第三四分位数(Q3)和最大值。在箱体上方和下方,还会绘制出异常值的符号,即离群点。 接下来,我们可以根据箱型图中的异常值符号来确定哪些数据点属于异常值。通过设定一个阈值,我们可以选择将离群点视为异常值。一种常用的方法是使用IQR(四分位数间距),通过计算Q3和Q1的差值,然后将其乘以一个倍数(通常是1.5)来确定阈值。所有超过阈值的数据点都可以视为异常值。 在确定异常值后,我们可以选择将其替换为NaN(缺失值),或者根据需求采取其他措施,比如将其替换为特定的数值或者对其进行插值。 综上所述,通过绘制箱型图并根据设定的阈值来识别和去除异常值,我们可以更好地分析和处理数据。这是Matlab中一种常用且有效的方法。 ### 回答2: 在MATLAB中,可以使用箱型图检测和去除异常值箱型图可以显示数据的分布情况和异常值的位置。 首先,需要将数据存储在一个向量或矩阵中。假设数据存储在名为data的向量中。 然后,可以使用boxplot函数创建箱型图,代码如下: boxplot(data) 执行此代码后,将显示一个带有边界矩形框和中位数线的表。异常值将以圆圈的形式显示在表之外。 要检测和处理异常值,可以使用prctile函数计算第25个和第75个百分位数。根据这些百分位数,计算上下限(也称为四分位距,IQR)。 第25个百分位数 Q1 = prctile(data, 25) 第75个百分位数 Q3 = prctile(data, 75) IQR = Q3 - Q1 根据箱型图的定义,异常值可以定义为小于Q1-1.5*IQR或大于Q3+1.5*IQR的值。 因此,可以使用以下代码找到异常值并将其从数据中除: lower_limit = Q1 - 1.5*IQR upper_limit = Q3 + 1.5*IQR outliers = data < lower_limit | data > upper_limit filtered_data = data(~outliers) 通过上述步骤,我们可以使用箱型图识别和去除数据中的异常值。 ### 回答3: 在MATLAB中,可以使用箱线来识别和去除异常值箱型图(boxplot)是一种可视化工具,通过展示数据的分位数来描述数据的分布情况,并识别出位于数据较远位置的异常值。 要绘制箱型图,可以使用MATLAB中的boxplot函数。首先,我们需要将数据放入一个矩阵或向量中。然后,调用boxplot函数并将数据作为输入参数传递给该函数。例如,如果我们有一个包含数值的向量x,我们可以使用以下代码来绘制箱型图: boxplot(x) 在绘制箱型图之后,可以使用离群值(outlier)参数来标识和去除异常值。默认情况下,MATLAB的boxplot函数使用1.5倍的四分位距离来定义异常值的阈值。此外,可以使用showoutliers参数来控制是否显示异常值,以便更好地理解数据的分布情况。 例如,以下代码将绘制箱型图并移除异常值: boxplot(x,'whisker',1.5,'outliersize',0) 在上述代码中,'whisker'参数指定了阈值的倍数(这里为1.5),'outliersize'参数设置异常值的大小为0,即不显示异常值。运行这段代码后,绘制的箱型图将不再包含任何异常值。 总之,在MATLAB中,通过使用箱型图并设置适当的参数,可以识别和去除数据中的异常值

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值