看了https://blog.csdn.net/zhuiqiuuuu/article/details/82721935 这篇文章,但是因为用不到pd,所以改了改。
先上代码
# Outlier detection
import numpy as np
def detect_outliers2(df):
outlier_indices = []
# 1st quartile (25%)
Q1 = np.percentile(df, 25)
# 3rd quartile (75%)
Q3 = np.percentile(df, 75)
# Interquartile range (IQR)
IQR = Q3 - Q1
# outlier step
outlier_step = 1.5 * IQR
for nu in df:
if (nu < Q1 - outlier_step) | (nu > Q3 + outlier_step):
df.remove(nu)
return df
if __name__ == '__main__':
df = [-3331,2,3,4,11111]
Outliers_to_drop = detect_outliers2(df)
# Drop outliers
print(Outliers_to_drop)
输出:[2, 3, 4]
效果描述:将输入的df清除异常值
理论:
首先计算出第一四分位数(Q1)、中位数、第三四分位数(Q3)。
中位数我们都知道,就是将一组数字按从小到大的顺序排序后,处于中间位置(也就是50%位置)的数字。
同理,第一四分位数、第三四分位数是按从小到大的顺序排序后,处于25%、75%的数字。
令 IQR=Q3−Q1IQR=Q3−Q1 ,那么 Q3+1.5(IQR)Q3+1.5(IQR) 和 Q1−1.5(IQR)Q1−1.5(IQR) 之间的值就是可接受范围内的数值,这两个值之外的数认为是异常值。
抄袭一张图:

先上代码# Outlier detectionimport numpy as npdef detect_outliers2(df): outlier_indices = [] # 1st quartile (25%) Q1 = np.percentile(df, 25) # 3rd quartile (75%) Q3 = np.percentile...
AttributeError: 'numpy.ndarray' object has no attribute 'quantile'
报错在于nparray无法使用quantile函数,修改为dataframe后可以使用
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
进行比较的序列很模糊,输出后发现quan.
# fit the model and predict it
df = data.copy()
data_to_predict = data[column].to_numpy().reshape(-1, 1)
predictions = model.fit_predict(dat
异常值处理是数据预处理中的一个重要步骤,随着大数据时代的到来,异常值处理也越来越重要。本文主要总结了一些常用的判断异常值的方法。
1、3-σ准则
要求数据服从正态分布,认为大于μ+3σ或小于μ—3σ的实验数据值作为异常值,其中μ为数据均值,σ为数据标准差
matlab代码示例%异常值处理
%采用3西格玛方法
clear all;
data0=xlsread('C:\Users\Adm
对于正态分布(高斯分布):3 σ\sigmaσ 原则。更高标准和更低标准可适当调整。
[ X‾\overline { X }X + 3 σ\sigmaσ, X‾\overline { X }X + 3 σ\sigmaσ]
但是并不是所有的从正态分布中抽取的小样本都满足正态分布。
这种情况下 四分位距法就可以进行一定程度上的异常值剔除。
IQR = Q3 − Q1
[Q1 - kIQR, Q3 + ...
在数据处理的过程中,异常值的检测和处理是一个较小的分支,检测的方法也有很多种,本文只介绍其中一种:四分位距法,虽然常见但功能强大。
这种方法是利用箱线图的四分位距(IQR)对异常值进行检测,也叫Tukey`s test。其提供了识别异常值的一个标准:异常值通常被定义为小于QL-1.5IQR 或QU+1.5IQR。
QL:下四分位数,表示全部观察值中有四分之一的数据取值比它小;
QU:上四分位数,表示全部观察值中有四分之一的数据取值比它大;
IQR:四分位间距,是上四分位数.
可以回答这个问题。Python可以使用numpy库中的percentile函数来计算四分位数,然后根据四分位数和箱线图的定义来判断异常值。具体实现可以参考以下代码:
import numpy as np
def find_outliers(data):
q1, q3 = np.percentile(data, [25, 75])
iqr = q3 - q1
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
outliers = [x for x in data if x < lower_bound or x > upper_bound]
return outliers
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100]
outliers = find_outliers(data)
print(outliers) # [100]