web-dev-qa-db-ja.com

matplotlibの箱ひげ図:マーカーと外れ値

Matplotlibの boxplots について質問があります。

質問A。以下でQ1Q2、およびQで強調表示したマーカーは何を表しますか? Q1が最大で、Qが外れ値だと思いますが、Q2とは何ですか?

 enter image description here

質問B matplotlibはどのように識別しますか外れ値? (つまり、それらが真のmaxおよびminの値ではないことをどのようにして知るのですか?)

53

写真は千の言葉に値します。外れ値(プロット内の_+_マーカー)は、下の広い[(Q1-1.5 IQR), (Q3+1.5 IQR)]マージンの単なるポイントoutsideであることに注意してください。

 enter image description here

ただし、この図は、正規分布のデータセットの例にすぎません。 matplotlibはnotを最初に正規分布を推定し、上記のように推定分布パラメーターから四分位数を計算することを理解することが重要です。

代わりに、中央値と四分位数はデータから直接計算されます。したがって、箱ひげ図は、データの分布とサンプルのサイズによって異なるように見える場合があります(例:非対称で、多少の外れ値がある場合)。

83

ボックスは1番目と3番目の四分位数を表し、赤い線は中央値(2番目の四分位数)です。 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%))内の最も極端なデータポイントまで拡張されます。

異なる箱ひげ図表現について混乱している場合は、 wikipediaの説明 をお読みください。

23
seth

セスの回答に加えて(これはドキュメントがあまり正確ではないため):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)
13
Dirk

以下の画像は、箱ひげ図のさまざまな部分を示しています。

enter image description here

分位点1/Q1:25パーセンタイル

四分位範囲(IQR):25パーセンタイルから75パーセンタイル。

中央値(分位2/Q2):50パーセンタイル。

分位点3/Q3:75パーセンタイル。

青い部分は箱ひげ図のひげであることに注意してください。

以下の画像は、正規分布の箱ひげ図を確率密度関数と比較しています。 「最小」、「最大」、および外れ値の説明に役立つはずです。

enter image description here

「最小」:(Q1-1.5 IQR)

「最大」:(Q3 + 1.5 IQR)

Zeluspが言ったように、正規分布ではデータの99.3%が2.698σ(標準偏差)内に含まれています。下の画像の緑の円(外れ値)は、残りのデータの0.7%です。 ここ は、これらの数値がどのようになったかの派生です。

これが他の人に利益をもたらす場合に備えて、ボックスプロットグラフの1つに凡例を配置する必要があったので、Inkscapeでこの小さな.pngを作成し、共有したいと考えました。

enter image description here

4
June Skeeter

これは、 stats.stackexchange answer からのボックスのコンポーネントを示すグラフィックです。 Pandasでwhisキーワードを指定しない場合、k = 1.5に注意してください。

enter image description here

Pandas=のboxplot関数は、matplotlib.pyplot.boxplotのラッパーです。 matplotlib docs は、ボックスのコンポーネントを詳細に説明しています。

質問A:

このボックスは、データの四分位数の下限から上限まで伸び、中央に線が引かれています。

私。 e。入力データ値の4分の1がボックスの下にあり、4分の1がボックスの上にあります。

質問B:

whis:float、sequence、またはstring(デフォルト= 1.5)

フロートとして、1番目と3番目の四分位を超えたウィスカーの到達範囲を決定します。言い換えると、IQRが四分位範囲(Q3-Q1)である場合、上部のひげはQ3 + whis * IQR未満の最後のデータムに拡張されます。同様に、下側のひげは、Q1-whis * IQRよりも大きい最初のデータムまで延びます。ひげを超えて、データは外れ値と見なされ、個々のポイントとしてプロットされます。

Matplotlib(およびPandas)には、ウィスカーのこのデフォルト定義を変更するための多くのオプションもあります。

これを不当に高い値に設定して、ウィスカに最小値と最大値を強制的に表示させます。または、これをパーセンタイルの昇順(たとえば[5、95])に設定して、データの特定のパーセンタイルにウィスカーを設定します。最後に、whisは、データの最小値と最大値にウィスカを強制する文字列「範囲」にすることができます。

1
Joooeey