第三四分位数 と 第一四分位数 の 差 を 四分位範囲といい、ばらつきの指標 にしたり、外れ値を求める際の基準値として用います。
python のライブラリで、この四分位範囲を計算するライブラリがないか調べてみました。
結果を記載します。
四分位範囲の計算ができるライブラリについて
調べた限り以下見つかりました。
* numpy
ライブラリのメソッドであるわけではないですが、自前実装のSample を見かけます。
- scipy.stats.iqr
これは直接、四分位範囲を計算できます。
numpy を使う
numpy を使って四分位範囲を計算します。
numpy.percentile を使って以下のように記述できます。
- 四分位範囲の計算
import numpy as np
x = [57,59,60,100,59,58,57,58,300,61,62,60,62,58,57]
# 75パーセント点、25パーセント点を取得
q75, q25 = np.percentile(x, [75 ,25])
iqr = q75 - q25
print("25パーセント点", q25)
print("75パーセント点", q75)
print("四分位範囲", iqr)
25パーセント点 58.0
75パーセント点 61.5
四分位範囲 3.5
- 外れ値の計算
import numpy as np
def identify_outliers(ys):
quartile_1, quartile_3 = np.percentile(ys, [25, 75])
iqr = quartile_3 - quartile_1
# 下限
lower_bound = quartile_1 - (iqr * 1.5)
# 上限
upper_bound = quartile_3 + (iqr * 1.5)
return np.array(ys)[((ys > upper_bound) | (ys < lower_bound))]
x = [57,59,60,100,59,58,57,58,300,61,62,60,62,58,57]
identify_outliers(x)
array([100, 300])
scipy.stats.iqr を使う
scipy.stats import iqr で4分位範囲の計算ができます。
x = [57,59,60,100,59,58,57,58,300,61,62,60,62,58,57]
from scipy.stats import iqr
# 1次元配列の四分位範囲を計算
print("iqr:", iqr(x))
from numpy import array
x = array([x,[i for i in reversed(x)]])
# 2次元配列の四分位範囲を計算 縦方向
print("iqr axis=0:", iqr(x, axis=0))
# 次元数を維持する
print("iqr axis=0 keepdims=True:", iqr(x, axis=0, keepdims=True))
# 2次元配列の四分位範囲を計算 横方向
print("iqr axis=1:", iqr(x, axis=1))
# 次元数を維持する
print("iqr axis=1 keepdims=True:", iqr(x, axis=1, keepdims=True))
iqr: 3.5
iqr axis=0: [ 0. 0.5 1. 20. 1.5 1.5 121.5 0. 121.5 1.5
1.5 20. 1. 0.5 0. ]
iqr axis=0 keepdims=True: [[ 0. 0.5 1. 20. 1.5 1.5 121.5 0. 121.5 1.5
1.5 20. 1. 0.5 0. ]]
iqr axis=1: [ 3.5 3.5]
iqr axis=1 keepdims=True: [[ 3.5]
[ 3.5]]
使い方がわからなかったが、外れ値の計算ができそうなライブラリ
bumps は、逆問題に対する データ加工 ができるライブラリのようです。
bumps.dream.outliers.identify_outliers というメソッドが存在して、これで外れ値が取得できそうですが、単純に配列を指定しただけではエラーになり、使用方法がわかりませんでした。
pip を使用して以下でインストールが可能です。
python3 -m pip install bumps
参考
プログラム作成に、以下参考にしました。
以上です。
コメント