Python

Pythonで統計量(平均、中央値、分散、標準偏差)を求める方法を解説

By 2021年3月17日No Comments

Pythonを使うと簡単に、平均や分散といった統計量を求めることができます。

それでは、求め方をひとつひとつ確認していきましょう。

平均値の求め方

平均値は、全てのデータを足してデータの個数で割った値です。

Pythonのデフォルトライブラリ、staticsを使った求め方と、

Numpyでの求め方を紹介します。

staticsの場合:statistics.mean( 数値のリスト )

numpyの場合:numpy.mean( 数値のリスト )

import statistics
import numpy

score = [32, 41, 92, 65, 70, 77, 55, 61, 73, 81]
mean1 = statistics.mean(score)
mean2 = numpy.mean(score)

print("平均値(statics):"+str(mean1))
print("平均値(numpuy):"+str(mean2))

結果:

平均値(statics):64.7
平均値(numpy):64.7

中央値の求め方

中央値は、データを順番に並べたときの、ちょうど真ん中の値のことです。

データの個数が奇数個の場合は、真ん中の値、

データの個数が偶数個の場合は、真ん中2つを足して2で割った値となります。

以下で求めることができます。

staticsの場合:statistics.median( 数値のリスト )

numpyの場合:numpy.median( 数値のリスト )

print("---奇数個データの中央値---")
score1 = [2, 4, 1, 5, 3]
median1 = statistics.median(score1)
median2 = numpy.median(score1)
print("statics:" + str(median1))
print("numpy:" + str(median2))

print("---偶数個データの中央値---")
score2 = [2, 4, 1, 3]
median3 = statistics.median(score2)
median4 = numpy.median(score2)
print("statics:" + str(median3))
print("numpy:" + str(median4))

結果:

---奇数個データの中央値---
statics:3
numpy:3.0
---偶数個データの中央値---
statics:2.5
numpy:2.5

分散の求め方

分散は、データの散らばり具合を表す数値です。

数式で表すと以下になります。

<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>分散</mi><mo>=</mo><mfrac><mrow><mo>(</mo><mi>各</mi><mo>デ</mo><mo>ー</mo><mo>タ</mo><mo>-</mo><mi>平均</mi><msup><mo>)</mo><mn>2</mn></msup><mo>の</mo><mi>総和</mi></mrow><mrow><mo>デ</mo><mo>ー</mo><mo>タ</mo><mo>の</mo><mi>個数</mi></mrow></mfrac></math>

次のメソッドで求めることができます。

statistics.pvariance( 数値のリスト )

numpy.var( 数値のリスト )

score = [32, 41, 92, 65, 70, 77, 55, 61, 73, 81]
variance1 = statistics.pvariance(score)
variance2 = numpy.var(score)
print("分散(statics):"+str(variance1))
print("分散(numpy):"+str(variance2))

結果:

分散(statics):299.81
分散(numpy):299.81000000000006

標準偏差の求め方

標準偏差は、分散の正の平方根をとった値のことで、分散と同様、データの散らばり具合を表す数値です。

以下で求めることができます。

statistics.pstdev(数値のリスト)

numpy.std( 数値のリスト )

score = [32, 41, 92, 65, 70, 77, 55, 61, 73, 81]
stdev1 = statistics.pstdev(score)
stdev2 = numpy.std(score)
print("標準偏差(statics):"+str(stdev1))
print("標準偏差(numpy):"+str(stdev2))

結果:

標準偏差(statics):17.31502237942533
標準偏差(numpy):17.315022379425333

コラム:偏差値はどうやって求めるのか?

テストなどでよく見る偏差値とは、集団の中で自分がどの程度の位置にいるかを表現した数値のことです。

以下の計算式で求めることができます。

<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>偏差値</mi><mo> </mo><mo>=</mo><mo> </mo><mi>標準化得点</mi><mo> </mo><mo>*</mo><mo> </mo><mn>10</mn><mo> </mo><mo>+</mo><mo> </mo><mn>50</mn></math>
<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>標準化得点</mi><mo>=</mo><mfrac><mrow><mo>(</mo><mi>自分</mi><mo>の</mo><mi>得点</mi><mo>-</mo><mi>平均点</mi><mo>)</mo></mrow><mi>標準偏差</mi></mfrac></math>
score = [32, 41, 92, 65, 70, 77, 55, 61, 73, 81] # 全員の得点
my_score = 92 # 自分の得点

mean = statistics.mean(score) # 平均
stdev = statistics.pstdev(score) # 標準偏差
z_score = (my_score - mean) / stdev # 標準化得点
deviation_value = z_score * 10 + 50 # 偏差値

print("偏差値:" + str(deviation_value))

結果:

偏差値:65.76665591402259

偏差値だけでは、どのくらい凄い数値なのかピンとこないかもしれません。

標準化得点から、自分が上位何%に位置しているかを計算することもできます。

from scipy import stats

prob = (1 - scipy.stats.norm.cdf(z_score)) * 100
print("上位{:.2f}%の成績です".format(prob))

結果:

上位5.74%の成績です

偏差値65.7は、上位5.74%の成績であることがわかりました。

Pythonでは、統計データをうまく活用すると、様々なことが分析できるようになります。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト
HOSL

Author HOSL

More posts by HOSL