社内でデータを一日中扱う人は多いかもしれませんが、大半の人はデータの入力に時間を費やし、EXCELを使って簡単な集計を行うことしかしていないかもしれません。そんな人たちの中に普段データを扱っているのだからデータサイエンティストになるためにPythonを勉強するんだと意気込んでいる人もいるかと思います。しかし何をしたらいいかわからない。そんな人にはなじみの深い偏差値をPythonを使って計算してみてはどうでしょう。難しい関数やモジュールは使わず、基本は組み込み関数を利用しています。

本文書はPythonを使える環境が構築されている入門者を対象に説明を行っています。

Pythonで偏差値を出そう

数学のテストを受けた10名の点数を使って偏差値の計算を行っていきます。偏差値は偏差値は50を平均として平均からのずれを計算して偏差値を出します。

テストの平均を出そう

10名の点数は下記のように配列に入った状態から始めます。ファイル名はscore.pyとしています。


scores = [50,68,48,92,58,79,89,60,74,69];

合計を出すプログラムを作成してみましょう。


scores = [50,68,48,92,58,79,89,60,74,69];

score_sum = 0

for score in scores:
  score_sum = score_sum + score

print(f'10人の点数の合計は、{score_sum}')

実行すると合計は、”10人の点数の合計は、687″となります。

合計を出すためには、配列の要素をsum = scores[0] + scores[1] + ……..
のように足していく方法もありますが、要素の数が増えた場合に実用的ではありません。for文を使えば配列の要素がいくらに増えても計算を行うことができます。[/comment]

for文を使っても合計数は計算できますが、pythonではsum関数が用意されているので一行で合計数を出すことができます。


scores = [50,68,48,92,58,79,89,60,74,69];

score_sum = sum(scores)

print(f'10人の点数の合計は、{score_sum }')

平均を出すためには、人数で合計を割ることで計算を行うことができます。


average = score_sum/10

print(f'10人の平均点は、{average}')

今回は人数が10と決まっていましたが、要素の数が多すぎてわからない場合はlen関数を利用することで要素の数を出すことができます。


length = len(scores)

print(f'配列の長さは、{length}')

実行すると”配列の長さは、10″と表示されます。

さらにsum_score等の変数を使わなければ平均は下記のプログラムのように1行で記述することができます。


scores = [50,68,48,92,58,79,89,60,74,69];

average = sum(scores)/len(scores)

print(f'10人の平均点は、{average}')

10人の平均点は、68.7

平均値からのずれを計算しよう

平均値が出たので各人のテストの点数とどれくらいずれているのか計算しましょう。このずれのことを偏差(deviation)といいます。

一人目の人は50点なので、

50 -68.7 = -18.7

二人目は68点なので

68 – 68.7=-0.7

というようにずれを計算することができます。手計算では大変なので、Pythonで行いましょう。ずれ(偏差)の合計(zure_sum)も取得しておきます。


scores = [50,68,48,92,58,79,89,60,74,69];

average = sum(scores)/len(scores)

num = 1

zure_sum = 0

for score in scores:

  zure = round(score - average,1)

  print(f'{num}人目のずれは{zure}')

  num = num + 1

  zure_sum = zure_sum + zure

print(f'10人のずれの合計は、{round(zure_sum)}')
rount関数を使って四捨五入を行っています。round(value,1)の1は四捨五入後の小数点の桁数を設定します。

>py score.py
1人目のずれは-18.7
2人目のずれは-0.7
3人目のずれは-20.7
4人目のずれは23.3
5人目のずれは-10.7
6人目のずれは10.3
7人目のずれは20.3
8人目のずれは-8.7
9人目のずれは5.3
10人目のずれは0.3
10人のずれの合計は、0

それぞれの点数の平均点からの偏差は計算できましたが、すべての 偏差を足すと0になってしまいます。そのため 偏差がプラスでもマイナスでも計算できるように偏差を2乗します。”偏差の2乗”を使うことで平均からのずれを確認します。


scores = [50,68,48,92,58,79,89,60,74,69];

average = sum(scores)/len(scores)

num = 1

zure_sum = 0

for score in scores:

  zure = round((score - average)**2,1)
  # zure = (score - average)**2

  print(f'{num}人目のずれの2乗は{zure}')

  num = num + 1

  zure_sum = zure_sum + zure

print(f'10人のずれの2乗の合計は、{round(zure_sum)}')

実行すると下記が表示されます。


>py score.py
1人目のずれの2乗は349.7
2人目のずれの2乗は0.5
3人目のずれの2乗は428.5
4人目のずれの2乗は542.9
5人目のずれの2乗は114.5
6人目のずれの2乗は106.1
7人目のずれの2乗は412.1
8人目のずれの2乗は75.7
9人目のずれの2乗は28.1
10人目のずれの2乗は0.1
10人のずれの2乗の合計は、2058

分散を計算しよう

先ほど計算した偏差の2乗の合計を配列の数で割ると分散(variance)となります。分散を出すことで点数がどれほどばらつきを知ることができます。

分散が大きいと平均の値からのずれが大きいことになるので、ばらつきが大きいということになります。点数が平均よりも高い人もいれば低い人もいることになります。しかし分散が小さいとほとんどみんなが平均点近くの点数を取っていることになります。

Pythonでも分散は偏差の2乗の合計を配列の数で割るだけなので下記のプログラムになります。


variance= zure_sum/len(scores)

print(f'分散はずれの2乗の合計を配列の数で割る、{round(variance)}')

標準偏差を計算しよう

標準偏差(standard deviation)は分散の平方根を取れば計算することができます。

なぜ平方根をとるのかというと分散はばらつきを見るために平均からのずれである偏差を2乗しました。2乗することで単位が点2になります。平方根を計算すれば単位が点2が点になり、点数の単位の点と同じ単位で扱えるようになります。

2乗したら単位が点2がわからない人は面積の単位(cm2)を思い出してください。横の長さ(cm)と高さ(cm)のかけるとcm2になったように点と点をかけると田単位が(点2)になります。

Pythonでは、平方根を使用するためには、mathモジュールをimportしてsqrtメソッドを使うことで計算することができます。

分散の値をpythonを利用して平方根して、標準偏差を計算しましょう。


import math 

variance = zure_sum/len(scores)

standard_deviation = math.sqrt(variance)

print(f'標準偏差は分散を平方根して計算します。{round(standard_deviation)}')

>py score.py
標準偏差14は分散を平方根して計算します。

偏差値を求めよう

標準偏差を計算することができたので、偏差値を出すにはテストの点数と平均点と標準偏差を使って下の式に当てはめていくだけです。

偏差値=(得点-平均点)÷ 標準偏差 X 10+50

偏差値=(得点-平均点)÷ 標準偏差 を計算することで標準化を行い、数学以外のテストの場合の結果と比較できるようになります。

これまでに出した平均点、標準偏差を使って偏差値を求めています。


import math 

variance = zure_sum/len(scores)

standard_deviation = math.sqrt(variance)

num = 1

for score in scores:

  hensachi = ((score - average)/standard_deviation)*10 + 50

  print(f'{num}人目の偏差値は{round(hensachi,1)}')

  num = num + 1

実行するとそれぞれの偏差値を確認することができます。


>py score.py
1人目の偏差値は37.0
2人目の偏差値は49.5
3人目の偏差値は35.6
4人目の偏差値は66.2
5人目の偏差値は42.5
6人目の偏差値は57.2
7人目の偏差値は64.1
8人目の偏差値は43.9
9人目の偏差値は53.7
10人目の偏差値は50.2

10人目は点数が69点で平均が 68.7 なので、偏差値の基準である50に近い偏差値になっています。点数が高いほど偏差値は高く、点数が低いと偏差値は低くなっています。

このようにPythonのプログラムを使って偏差値を求めることができました。