如何在 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 个观测值作为异常值。
何时删除异常值
如果您的数据中存在一个或多个异常值,您必须首先确保它们不是数据输入错误的结果。有时,个人在保存数据时只是输入了错误的数据值。
如果异常值是数据输入错误的结果,您可以决定为其分配一个新值,例如数据集的平均值或中位数。
如果该值确实是异常值,并且会对您的整体分析产生重大影响,则您可以选择将其删除。请务必在最终报告或分析中提及您删除了异常值。
其他资源
如果您同时处理多个变量,您可能需要使用马氏距离来检测异常值。