我有一个包含随机数量的整数和/或浮点数的列表。我想要实现的是在我的数字中找到异常(希望用正确的词来解释这一点)。例如:
list = [1, 3, 2, 14, 108, 2, 1, 8, 97, 1, 4, 3, 5]
我的问题是,这些值可能一直不同。也许常规范围在 1.000 到 1.200 之间,而异常(exception)范围在 50 万左右。
有没有过滤掉这些特殊数字的功能?
最佳答案
假设您的列表是 l
:
用:
这将删除底部 10% 和顶部 90%。当然,你可以改变任何一个
它们到您想要的截止值(例如,您可以删除底部过滤器,只过滤示例中的前 90%):
import numpy as np
l = np.array(l)
l = l[(l>np.quantile(l,0.1)) & (l<np.quantile(l,0.9))].tolist()
输出:[ 3 2 14 2 8 4 3 5]
去除异常值:
您可以通过调整参数
m
来调整异常值的截止值在函数调用。它越大,删除的异常值越少。与其他异常值去除技术相比,此函数似乎对各种类型的异常值更稳健。
import numpy as np
l = np.array(l)
def reject_outliers(data, m=6.):
d = np.abs(data - np.median(data))
mdev = np.median(d)
s = d / (mdev if mdev else 1.)
return data[s < m].tolist()
print(reject_outliers(l))
输出:[1, 3, 2, 14, 2, 1, 8, 1, 4, 3, 5]
关于Python:在列表中查找异常值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62802061/