数学的に偏差値を求める計算式を前回の記事で紹介した。

今回はJupyter NotebookでPythonのコードを書きながら、偏差値を求めるプログラムを紹介しよう。

Numpyで正規分布の乱数を生成

まずはサンプルとなるデータセットを用意する必要がある。

Pythonのライブラリ・Numpyで正規分布の乱数を生成する関数が用意されているのでこれを利用する。

Jupyter Notebookを起動して以下のコードを入力する。

import numpy as np

# 100人分のテストの点数(平均値50、標準偏差15の正規分布乱数を生成)
data = np.random.normal(50, 15, 100)
print(data)

dataという変数に生成した乱数が配列として格納される。
今回は引数として、平均値50、標準偏差15、データ数100を与えてみた。

確認のためprint関数で出力してみると以下の結果が得られる。
※乱数なので実行する度に得られる値は変わる。

次に配列から平均点と標準偏差を求めよう。

numpyのaverage関数とstd関数で、それぞれの値を取得できる。

# 実際の平均点
ave = np.average(data)
print("平均点:" + str(ave))

# 実際の標準偏差
std = np.std(data)
print("標準偏差:" + str(std))

補足しておくと、乱数を生成しているので実際の値は次のとおり、指定した値と若干の誤差が生じる。

Pythonで偏差値を求める関数を作る

次に偏差値を求める関数を作っていく。

偏差値を求める式は次のとおりだったはずだ。

$$\frac{点数 – 平均点}{標準偏差} \times 10 + 50$$

これをPythonのコードに書き直すと次の関数が出来上がる。

# 偏差値を求める関数
def func_deviation_value(score, ave, std):
    return int((score - ave) / std * 10 + 50)

点数、平均値、標準偏差を引数に取り、計算した結果を整数にして返すという内容だ。

この関数を使って、Aさん、Bさん、Cさんの偏差値を求めてみた。

# Aさん
score_a = 68
deviation_value_a = func_deviation_value(score_a, ave, std)
print("Aさんの得点は"+str(score_a)+"で、偏差値は"+str(deviation_value_a)+"です。")

# Bさん
score_b = 89
deviation_value_b = func_deviation_value(score_b, ave, std)
print("Bさんの得点は"+str(score_b)+"で、偏差値は"+str(deviation_value_b)+"です。")

# Cさん
score_c = 41
deviation_value_c = func_deviation_value(score_c, ave, std)
print("Cさんの得点は"+str(score_c)+"で、偏差値は"+str(deviation_value_c)+"です。")

ここまでのコードをまとめて実行すると次のとおりとなる。

少しコードが長くなったので整理してみる。

import numpy as np

def func_print_deviation_value(data, score):
    ave = np.average(data)
    std = np.std(data)
    deviation_value = int((score - ave) / std * 10 + 50)
    print(
        "平均点:"+str(ave)+"\n"+
        "標準偏差:"+str(std)+"\n"+
        "得点:"+str(score)+"\n"+
        "偏差値:"+str(deviation_value)
    )
    
data = np.random.normal(50, 15, 100)
func_print_deviation_value(data, 90)

だいぶスッキリしたコードになった。

不必要であればprint関数を削除し、偏差値のみをreturnしても構わない。

まとめ

これまで学んできた統計学の基礎をPythonコードを使っていざアウトプットしてみると、サンプルデータの用意や複雑な計算まで、非常に簡単に実装することができる。

今回の記事を書くにあたり、統計とPythonの相性の良さを改めて知ることができた。

【中卒でも分かる統計学入門】連載記事一覧

  1. 度数分布表とヒストグラム
  2. 度数分布表から平均値を求める
  3. 色々な平均値の求め方
  4. データの散らばり具合をみる分散と標準偏差
  5. 度数分布表から標準偏差を求める
  6. 標準偏差を理解して偏差値の求め方と意味を知る
  7. Pythonで偏差値を求める ←←現在見ている記事
  8. 仮説検定で一つのデータから母集団を推定する
  9. Pythonで95パーセント信頼区間を求める
  10. 平均に対する区間推定
  11. 母集団からとった標本平均の95パーセント予言的中区間
  12. 標本平均から母平均を区間推定する
  13. 標本分散とカイ二乗分布
  14. カイ二乗分布から母分散を推定する
  15. 標本分散に比例する統計量Wの求め方
  16. 母平均が分からなくても母標準偏差を推定する方法
  17. 統計量Tを求めてt分布を理解する
  18. t分布を使った区間推定