如何在 python 中删除异常值


异常值是与数据集中的其他值异常远离的观察值。异常值可能会产生问题,因为它们会影响分析结果。

本教程介绍如何在 Python 中识别和删除异常值。

如何识别 Python 中的异常值

在删除异常值之前,您必须首先确定什么是异常值。有两种常见的方法可以做到这一点:

1. 使用四分位距。

四分位距 (IQR) 是数据集中第 75 个百分位数 (Q3) 和第 25 个百分位数 (Q1) 之间的差值。它测量平均 50% 值的分布。

如果某个观测值是第三个四分位 (Q3) 上方四分位距的 1.5 倍或第一个四分位 (Q1) 下方四分位距的 1.5 倍,则可以将其定义为离群值。

离群值 = 观测值 > Q3 + 1.5*IQR 或 Q1 – 1.5*IQR

2. 使用 z 分数。

z 分数告诉您给定值与平均值的标准差有多少。我们使用以下公式来计算 z 分数:

z = (X – μ) / σ

金子:

  • X 是单个原始数据值
  • μ 是总体平均值
  • σ 是总体标准差

如果某个观测值的 z 得分小于 -3 或大于 3,则可以将其定义为离群值。

离群值 = z 分数 > 3 或 < -3 的观测值

如何在 Python 中删除异常值

一旦确定了异常值,您就可以识别它们并将其从数据集中删除。为了说明如何做到这一点,我们将使用以下 pandas DataFrame:

 import numpy as np
import pandas as pd 
import scipy.stats as stats

#create dataframe with three columns 'A', 'B', 'C'
np.random.seed(10)
data = pd.DataFrame(np.random.randint(0, 10, size=(100, 3)), columns=['A', 'B', 'C'])

#view first 10 rows
data[:10]

           ABC
0 13.315865 7.152790 -15.454003
1 -0.083838 6.213360 -7.200856
2 2.655116 1.085485 0.042914
3 -1.746002 4.330262 12.030374
4 -9.650657 10.282741 2.286301
5 4.451376 -11.366022 1.351369
6 14.845370 -10.798049 -19.777283
7 -17.433723 2.660702 23.849673
8 11.236913 16.726222 0.991492
9 13.979964 -2.712480 6.132042

然后,我们可以使用 z 分数方法或四分位数范围方法定义和删除异常值:

Z分数方法:

 #find absolute value of z-score for each observation
z = np.abs(stats.zscore(data))

#only keep rows in dataframe with all z-scores less than absolute value of 3 
data_clean = data[(z<3).all(axis=1)]

#find how many rows are left in the dataframe 
data_clean.shape

(99.3)

四分位距法:

 #find Q1, Q3, and interquartile range for each column
Q1 = data.quantile(q=.25)
Q3 = data.quantile(q=.75)
IQR = data.apply(stats.iqr)

#only keep rows in dataframe that have values within 1.5*IQR of Q1 and Q3
data_clean = data[~((data < (Q1-1.5*IQR)) | (data > (Q3+1.5*IQR))).any(axis=1)]

#find how many rows are left in the dataframe 
data_clean.shape

(89.3)

我们可以看到,za 评分方法识别并删除了 1 个观测值作为异常值,而四分位距方法总共识别并删除了 11 个观测值作为异常值。

何时删除异常值

如果您的数据中存在一个或多个异常值,您必须首先确保它们不是数据输入错误的结果。有时,个人在保存数据时只是输入了错误的数据值。

如果异常值是数据输入错误的结果,您可以决定为其分配一个新值,例如数据集的平均值或中位数

如果该值确实是异常值,并且会对您的整体分析产生重大影响,则您可以选择将其删除。请务必在最终报告或分析中提及您删除了异常值。

其他资源

如果您同时处理多个变量,您可能需要使用马氏距离来检测异常值。

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注