アラカン"BOKU"のITな日常

文系システムエンジニアの”BOKU”が勉強したこと、経験したこと、日々思うことを書いてます。

学校のテスト結果からクラスの偏差値・平均点・中央値などを計算する。Excelのブックとpythonのプログラム。

統計のお勉強の練習問題として、学校のクラスの試験の得点を入力して、偏差値を計算したり、平均点・中央値・最頻値などを求めるのをやってみます。

 

最初はEXCELブック

 

まずは、EXCELで作ってみました。 

こんなイメージのもんです。

f:id:arakan_no_boku:20180129230131j:plain

f:id:arakan_no_boku:20180129230200j:plain

 

B列に氏名、C列に得点を入力しますと。(一応、1クラス50名迄に今はしてます)

平均点・中央値・偏差値とか得点レンジごとの人数を度数にとったヒストグラムとかを書きます。 

EXCELの関数で簡単にできてしまうレベルのもんですが、意外に気に入ってます。 

こんなんでも、学校の先生とかで使ってみようと思ってくれる人が一人くらいはいるかもしれないな・・と思ったので、とりあえずダウンロードできるようにしときます。

github.com

試験点数分析ブック.xlsxの方です。 

シートに保護はかけてますが、パスワードも設定してないので、ダウンロードして好きにしてもらえばいいかな・・と。

 

今度はPython

 

今度はpythonですね。 

EXCELでやったのと似たようなことを、pythonでやってみようかと思います。 

平均、中央値、最頻値、分散、標準偏差、変動係数、偏差値を求めてみます。 

元データは、こんな感じのndarrayです。

na_score

[[58. 95. 63. 55. 29. 17. 57. 58. 17. 55. 24. 47. 70. 50. 81. 41. 28. 61.
79. 71. 74. 34. 45. 80. 65. 85. 62. 63. 80. 73. 72. 65. 45. 57. 70. 63.
78. 65. 49. 63. 75. 24. 68. 38. 52. 84. 34. 66. 52. 61.]]

 

平均

numpyのaverageを使う。

n_average = round(np.average(na_score),0)

 

中央値

numpyのmedianを使う。

n_median = round(np.median(na_score),1)

 

最頻値

これはなかったので自作。

カウントして、数の一番多いのを返しているだけです。

def mode(na_score):
    l = na_score.tolist()
    c = Counter(l[0])
    m = c.most_common(1)
    return m[0][0]

n_mode = mode(na_score)

 

分散

numpyのvarを使う。

n_var = np.var(na_score)

 

標準偏差

numpyのstdを使う。

n_std = np.std(na_score)

 

変動係数

平均と標準偏差をもとめて、標準偏差を平均で割ってます。

n_average = round(np.average(na_score),0)
n_std = np.std(na_score)
n_hrt = n_std / n_average

 

偏差値

平均と標準偏差を求めて、(得点-平均)÷標準偏差 で各点を標準化します。

それを仮に Z とすると、50+10Z が偏差値です。

以下はNdArrayを.flatで一次元にして、すべての点数に対して偏差値を求めて表示する・・って感じで。

n_average = round(np.average(na_score),0)
n_std = np.std(na_score)
for k in na_score.flat:
    n_dev = round(50 + 10 * ((k - n_average) / n_std),1)
    print("{0}:{1}".format(k,n_dev)) 

 

これを出力するとこんな感じになります。

58.0:50.0
95.0:70.1
63.0:52.7
55.0:48.4
29.0:34.2
17.0:27.7
57.0:49.5
58.0:50.0

このへんくらいなら、それほど難しくはないですね。 

うん。