我對boxplots在matplotlib一些問題:箱線圖中matplotlib:標記和異常
問題上。我在下面用Q1,Q2和Q3代表什麼?我相信Q1是最大和Q3是異常值,但什麼是Q2?
問題B如何matplotlib識別Ø utliers? (即它是如何知道它們不是真實的max
和min
值?)
我對boxplots在matplotlib一些問題:箱線圖中matplotlib:標記和異常
問題上。我在下面用Q1,Q2和Q3代表什麼?我相信Q1是最大和Q3是異常值,但什麼是Q2?
問題B如何matplotlib識別Ø utliers? (即它是如何知道它們不是真實的max
和min
值?)
甲圖片勝過千字。請注意,異常值(圖中的+
標記)只是以外的以下的寬範圍[(Q1-1.5 IQR), (Q3+1.5 IQR)]
。
然而,圖片僅供一個正態分佈的數據集的例子。重要的是要明白,matplotlib 不是首先估計正態分佈,並從估計的分佈參數計算四分位數,如上所示。
相反,中位數和四分位數直接根據數據計算。因此,根據您的數據分佈和樣本大小,您的箱型圖可能會有所不同,例如,不對稱和更多或更少的異常值。
該框表示第一和第三四分位數,紅線表示中位數(第二四分位數)。所述documentation給出了默認的晶須1.5 IQR:
boxplot(x, notch=False, sym='+', vert=True, whis=1.5,
positions=None, widths=None, patch_artist=False,
bootstrap=None, usermedians=None, conf_intervals=None)
和
WHIS:[默認1.5]
定義晶須的長度爲所述內四分位範圍的函數。它們擴展到(whis *(75%-25%))數據範圍內最極端的數據點。
如果您對不同的盒子圖表示感到困惑,請嘗試閱讀the description in wikipedia。
除了塞特答案(因爲文檔中有關這不是非常精確的): Q1(在須晶)放置在最大值低於75%+ 1.5 IQR
(25%最小值 - 1.5 IQR)
這是計算晶須位置的代碼:
# 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)
# get low extreme
lo_val = q1 - whis * iq
wisk_lo = np.compress(d >= lo_val, d)
if len(wisk_lo) == 0 or np.min(wisk_lo) > q1:
wisk_lo = q1
else:
wisk_lo = min(wisk_lo)
感謝澄清這一點 - 我發現在我的陰謀的差異(相比,* Q3 + 1.5 * IQR *的文檔值),並很高興看到你的澄清。 TBH,但我有點困惑於'或'表達:'else'部分是有意義的,但'或'似乎是不可能的。對於Q3部分,'len(wisk_hi)== 0'的意思是「如果我們在'hi_val'下找不到任何元素」 - 這怎麼會發生? Q3是通過將中間數據分開並取上半部分的中間值而得到的......根據定義,會有比hi_val更低的值 - 「or」的第二部分是什麼意思?任何建議最受歡迎。 – ttsiodras
我只能認同你,@ttsiodras,'q3'應該是'd'數組的一部分,並且滿足'np.compress'的條件,所以它也應該在數組中取最大值。也許代碼只是「保存」,或者讓讀者更明白wist_hi不能小於q3。 –
所以'99.3%'你的數據被包含在** [(Q1-1.5 IQR),(Q3 + 1.5 IQR)]'上面的裕度(也稱爲晶須)的寬**內。因此,除此之外的所有報價只代表您的數據的0.7%。 – zelusp
'IQR'表示[Interquartile Range](http://www.physics.csbsju.edu/stats/box2.html) – zelusp