Python:在列表中查找异常值

标签 python list range

我有一个包含随机数量的整数和/或浮点数的列表。我想要实现的是在我的数字中找到异常(希望用正确的词来解释这一点)。例如:

list = [1, 3, 2, 14, 108, 2, 1, 8, 97, 1, 4, 3, 5]
  • 90% 到 99% 的整数值在 1 到 20 之间
  • 有时会有更高的值,比如大约 100 或 1.000 甚至更多

  • 我的问题是,这些值可能一直不同。也许常规范围在 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/

    相关文章:

    python - 如何将一栏的项目变成多栏?

    Python __init__ setattr 关于参数?

    python - undefined symbol : _ZdlPvm

    python - PyQt Tableview 行背景颜色基于单元格值

    c# - 检查列表中的下一个最高/最低值并选择该项目

    javascript - 在 contenteditable div 中选择范围

    ruby - 数组范围从未返回 nil 的最后一个 Ruby 版本是什么?

    java - 使用正则表达式检查数字范围

    python - 参数更改时处理类中的实例 - Python

    python - 在 Python 中动态更改未知深度的嵌套列表中的特定项目