データのばらつきの指標である平均絶対偏差と中央絶対偏差をpandasを使って求めます。
使用するデータ
ランダムな整数でデータフレームを生成します。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0,100,size=(5, 1)), columns=['cost'])
cost | |
---|---|
0 | 55 |
1 | 38 |
2 | 72 |
3 | 6 |
4 | 40 |
同じデータを利用したければ、以下を実行してください。
import pandas as pd
costs = {'cost': [55, 38, 72, 6, 40]}
df = pd.DataFrame.from_dict(costs)
平均絶対偏差 (Mean Absolute Deviation)
平均絶対偏差を求めるには「平均と各値の絶対差」の平均値を計算します。 $$ MAD = \frac{1}{n} \sum_{i=1}^{n} |x_i-\bar{x}| $$
英語ではMean Absolute Deviationと言うので、頭文字を取ってMADと書くことができます。
$$ mean |x_i-mean(x)| $$
Pythonのpandasでは.mad()という関数が実装されています。
dfという名のDataFrameのcostという列の平均絶対偏差を求める場合、データフレーム名(df)、カラム名(cost)、.mad()を入力するだけです。
# 平均絶対偏差を計算
df.cost.mad()
> 17.04
.mad()関数を使わずに公式の通りに計算することもできます。
# 各値と平均との差の絶対値の平均を求める
(df.cost - df.cost.mean()).abs().mean()
> 17.04
どちらの方法を利用しても同じ結果です。
中央絶対偏差 (Median Absolute Deviation)
中央絶対偏差を求めるには「中央値と各値の絶対差」の中央値を計算します。
$$ median |x_i-median(x)| $$
このように平均絶対偏差の平均の部分を中央値に変えて計算します。
絶対偏差偏差はpandasで関数が実装されていないので、公式の通りに計算します。
# 各値と中央値との差の絶対値の中央値を求める
(df.cost - df.cost.median()).abs().median()
> 15