変動係数とは、平均に対する、データのばらつきの大きさの比率 を表す指標です。
$変動係数 = 標準偏差 / 平均$
で値を求めることができ、値が大きいほどばらつきが大きいと言えます。
numpy と、 scipy を使って変動係数を計算してみましたので、結果を記載します。
scipy を使って、変動係数を求める
scipy.stats .variation
で変動係数を求めることができます。
from scipy.stats import variation
# パラメータとして設定した リストの変動係数が返される
cv = variation( [1, 2, 3, 4, 5])
print('CV:{0:2f}'.format(cv))
CV:0.471405
numpy を使って、変動係数を求める
numpy には、直接 変動係数を求める メソッドはなさそうなので、numpy.mean
と、numpy.std
を使って計算します。
import numpy as np
data = [1, 2, 3, 4, 5]
print('平均: {0:2f}'.format(np.mean(data)))
print('標準偏差: {0:2f}'.format(np.std(data)))
cv = np.std(x)/np.mean(x)
print('CV:{0:2f}'.format(cv))
平均: 3.000000
標準偏差: 1.414214
CV:0.471405
statistics を使って、変動係数を求める
python 3.4
から、statistics が標準ライブラリに含まれています。
statistics で直接、変動係数を求めることはできませんが、標準偏差、平均を求めるメソッドは用意されているので、それらを使って計算します。
from statistics import mean, stdev
data = [1, 2, 3, 4, 5]
m = mean(data)
stdev = stdev(data)
print('平均: {0:2f}'.format(m))
print('標準偏差: {0:2f}'.format(stdev))
cv = stdev / m
print('CV:{0:2f}'.format(cv))
平均: 3.000000
標準偏差: 1.581139
CV:0.527046
numpy、scipy で計算した結果とは値が異なりました。
stdev
は、標本標準偏差 を返すようで、自由度 N - 1 の分散 の平方根になるようです。
numpy、scipy と同様の値を得るには、stdev ではなく、pstdev を使用します。
from statistics import mean, pstdev
data = [1, 2, 3, 4, 5]
m = mean(data)
pstdev = pstdev(data)
print('平均: {0:2f}'.format(m))
print('標準偏差: {0:2f}'.format(pstdev))
cv = pstdev / m
print('CV:{0:2f}'.format(cv))
平均: 3.000000
標準偏差: 1.414214
CV:0.471405
numpy、scipy で求めた、変動係数と一致しました。
参考
以下、参考にした記事になります。
* scipy.stats.variation — SciPy v1.1.0 Reference Guide
* 変動係数(CV)とは何か。その意味と求め方について。データを比較評価する比率の知恵【σ・u・sのどれを使うべき?】 | アタリマエ!
* 9.7. statistics — 数理統計関数 — Python 3.6.5 ドキュメント
以上です。
コメント