【Python】データ分析に用いる指標の算出方法について

データを分析する際に使用する指標の算出方法および指標が指し示す内容についてまとめました.
使用言語はPythonです.

本記事中で例示するために使用したコードは,こちらからダウンロード可能です.
分析するデータは,randomモジュールによりランダムに作成しました.

準備

まず初めに,必要なライブラリをインストールする.

pip install numpy
pip install scipy

算出方法

分析対象のデータをランダム作成

Pythonの標準ライブラリであるrandomモジュールを使用します.
分析対象の配列targetの配列長を変数lengthで制御します.
以下がコードです.

# 分析対象の配列を定義
length = 100
target = [random.randint(0,100) for i in range(length)]
print(target)
# [96, 77, 75, 41, 28, 96, 2, 68, 11, 57, 32, 73, 75, 28, 31, 11, 62, 2, 67, 84, 70, 92, 45, 40, 13, 26, 10, 57, 43, 19, 72, 96, 3, 98, 100, 18, 13, 40, 54, 5, 74, 9, 11, 19, 86, 43, 86, 45, 48, 24, 10, 40, 30, 47, 10, 22, 1, 46, 76, 4, 58, 44, 89, 7, 57, 95, 57, 76, 26, 98, 12, 19, 81, 94, 87, 39, 78, 15, 85, 54, 52, 38, 83, 26, 60, 5, 65, 42, 10, 35, 12, 54, 5, 97, 7, 24, 88, 90, 24, 87]

データの分布の中央を表現する指標

相加平均,相乗平均,調和平均

相加平均は,一般的に「平均値」と呼ばれる指標です.
系列内の全ての要素の和を要素数で割ることで算出します.

$$ \bar{x}_{am} = {1 \over n} \sum_{i=1}^n x_i $$

相乗平均は,物価の上昇率や収益率,成長率のような「変化率」の平均を求めるときに使う指標です.
系列内の全ての要素の積を要素数の累乗根をとることで算出します.

$$\bar{x}_{gm} = \sqrt[n]{\prod_{i=1}^n x_i}$$

調和平均は,速度の平均値を算出する際によく使われる指標します.
系列内の各要素の逆数の相加平均の逆数をとることで算出します.

$$ \bar{x}_{hm} = {n \over \sum_{i=1}^n {1 \over x_i}} $$

# 相加平均
arithmetic_mean = statistics.mean(target)
print(arithmetic_mean)
# 47.36

# 相乗平均
geometric_mean = gmean(target)
print(geometric_mean)
# 33.008188446952374

# 調和平均
harmonic_mean = statistics.harmonic_mean(target)
print(harmonic_mean)
# 15.885379357540009

中央値

中央値は,系列の分布の中央がどこにあるかを表す指標です.
平均値と違い,外れ値の影響を受けにくいという特徴があります.

# 中央値
median = statistics.median(target)
print(median)
# 44.5

データの分布の様子を表現する指標

最小値,最大値

系列内の全要素の内,最も大きい値が最大値,最も小さい値が最小値です.
系列の分布の両端を把握する際に使用します.

# 最小値
Minimun = min(target)
print(Minimun)
# 1

# 最大値
Max = max(target)
print(Max)
# 100

四分位数,四分位範囲

系列の分布の偏りを把握する際に使用する指標です.
numpyの関数percentileを使います.
引数qで取得したい分布の位置を指定します.

四分位範囲は,第3四分位数と第1四分位数の差です.
中央値を中心としてどの程度分布がばらついているのかを表す指標です.

# 四分位数
quartiles_array = np.percentile(target, q=[0,25,50,75,100])
print(quartiles_array)
# [  1.    19.    44.5   75.25 100.  ]

# 四分位範囲
quartile_range = quartiles_array[3] - quartiles_array[1]
print(quartile_range)
# 56.25

最頻値

最頻値は,系列の分布のピークがどこにあるのかを表す指標です.
モードと表現されることもあります.

# 最頻値
mode = statistics.mode(target) #最頻地が複数存在する場合,エラーになるので要注意.
print(mode)
# 57

分散,偏差

平均絶対偏差

単一系列において,要素の分布が平均からどの程度ばらついているのかを表す指標です.
標準偏差と比較して外れ値に対して頑健である点が特徴です.

$$ \sigma_{mad} = {1 \over n}\sum_{i=1}^n |x_i - \bar{x}_{am}| $$

# 平均絶対偏差
mad = statistics.mean([abs(x - arithmetic_mean) for x in target])
print(mad)
# 26.9088

分散,標準偏差

分散標準偏差は,系列(母集団)の分布が平均からどの程度ばらついているのかを表す指標です.
分散\(\sigma^2\)は,系列と次元が違う点に注意が必要です.
具体的には,分散の次元は系列の次元の二乗です.
標準偏差\(\sigma\)は分散の2乗根です.

$$ \sigma^2 = {1 \over n} \sum_{i=1}^n (x_i - \bar{x}_{am})^2 $$

# 分散
Variance = statistics.pvariance(target)
print(Variance)
# 947.6704

# 標準偏差
std = statistics.pstdev(target)
print(std)
# 30.784255716193627

不偏分散,不偏標準偏差

不偏分散\(s^2\)と不偏標準偏差\(s\)は,系列(標本)の分布が平均からどの程度ばらついているのかを表す指標です.

$$ s^2 = {1 \over {n-1}} \sum_{i=1}^n (x_i - \bar{x}_{am})^2 $$

# 不偏分散
sample_variance = statistics.variance(target)
print(sample_variance)
# 957.2428282828283

# 不偏標準偏差
sample_std = statistics.stdev(target)
print(sample_std)
# 30.939341109384156

変動係数

変動係数は,平均標準偏差の比率を表す指標です.
スケールの違う系列間で,系列のばらつきを比較する際に使用します.

$$ CV = {\sigma \over \bar{x}_{am}} $$

# 変動係数
coefficient_variation = std / arithmetic_mean
print(coefficient_variation)
# 0.6500053994128722

まとめ

もう少し勉強して整理したいですね.

お疲れ様でした.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です