在阅读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/