StackOverflow で関連する質問への回答を読んでいるときに、matplotlibでウィスカーの位置を計算し、外れ値を検出するために使用されるコードを見ました。
# 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 を追加することによって検出されます。この値よりも低いデータが存在しないのはなぜですか?
これが空のデータセットに関するものである場合、の 2 番目の部分もor
意味がありません (Q3 または IQR はデータなしでは意味がないため)。
おそらく明らかな何かが欠けている - 助けて?