在阅读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` ...


此条件如何适用?通过在中位数上拆分数据,然后取上半部分的中位数,然后在其上加上1.5 * IQR,可以找到Q3-怎么会有数据不低于该值?

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

可能缺少明显的东西-帮助吗?

最佳答案

四分位间距可以有偏差。 “相邻的上限值可以小于Q3,这迫使晶须从Q3进入盒中。相邻的下相邻的值也可以大于Q1,这迫使晶须从Q1进入盒中。” (source

IQR = Q3-Q1

下限:Q1-1.5(Q3-Q1)

上限:Q3 + 1.5(Q3-Q1)

在链接中检查数据。

关于python - Matplotlib中的Tukey Boxplots-代码中的异常逻辑?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37522002/

10-13 01:12