【问题标题】:Tukey Boxplots in Matplotlib - outlier logic in the code?Matplotlib 中的 Tukey Boxplots - 代码中的异常逻辑?
【发布时间】:2016-05-30 09:20:12
【问题描述】:

在阅读a related question in StackOverflow的答案时,我看到了matplotlib中使用的代码to compute the wiskers positions and detect outliers

    # get high extreme
    iq = q3 - q1
    hi_val = q3 + whis * iq
    wisk_hi = np.compress(d <= hi_val, d)
    if len(wisk_hi) == 0 or np.max(wisk_hi) < q3:
        wisk_hi = q3
    else:
        wisk_hi = max(wisk_hi)

现在,else 部分非常有意义 - 根据 Tukey boxplots 的规范,我们找到了上四分位数 1.5 IQR 内的最高基准。事实上,这就是max(wish_hi) - 低于 Q3+1.5*IQR 的最大数据条目。

但是or 部分......我不明白。 if len(wisk_hi) == 0 转换为...

if we find no elements below the `hi_val` ...

这个条件如何适用? Q3是通过中位数拆分数据,然后取上半部分的中位数,然后在上面加上1.5*IQR - 怎么可能没有数据lower strong> 比这个值?

如果这是关于一个空数据集,那么or 的第二部分也没有意义(因为没有数据,Q3 或 IQR 也没有意义)。

可能遗漏了一些明显的东西 - 帮助?

【问题讨论】:

    标签: python matplotlib boxplot iqr tukey


    【解决方案1】:

    四分位距可能有偏差。 “上相邻值可以小于 Q3,这会迫使晶须从 Q3 拉入盒子。下相邻值也可以大于 Q1,这会迫使晶须从 Q1 拉入盒子。” (source)

    IQR = Q3 - Q1

    下限:Q1 - 1.5 (Q3 - Q1)

    上限:Q3 + 1.5 (Q3 - Q1)

    查看链接中的数据。

    【讨论】:

    • 谢谢!现在我看到数据,我明白了。
    • 为了避免这个答案的未来读者的外部依赖:看看这个数据集在较低的wisker会发生什么:[1200、1443、1490、1528、1563、2479]
    【解决方案2】:

    下面的示例输出(实际上是从 matplotlib 测试数据驱动的)显示了问题:

    $ ipython2
    Python 2.7.11 (default, Mar 31 2016, 06:18:34) 
    IPython 4.2.0 -- An enhanced Interactive Python.
    
    In [1]: import numpy as np
    
    In [2]: import matplotlib
    
    In [3]: a=[3, 9000, 150, 88, 350, 200000, 1400, 960]
    
    In [4]: sa=list(sorted(a))
    
    In [5]: sa
    Out[5]: [3, 88, 150, 350, 960, 1400, 9000, 200000]
    
    In [6]: globals().update(matplotlib.cbook.boxplot_stats(a)[0])
    
    In [7]: q3
    Out[7]: 3300.0
    
    In [8]: iqr
    Out[8]: 3165.5
    
    In [9]: q3+1.5*iqr
    Out[9]: 8048.25
    

    ...所以小于q3+1.5*iqr 的最大元素是... 1400!

    如果代码不包含该测试,则上面的晶须必须从 q3 (3300) 下降到 1400。

    【讨论】:

      猜你喜欢
      • 2011-10-19
      • 1970-01-01
      • 2019-01-18
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 2016-11-14
      • 2010-10-12
      相关资源
      最近更新 更多