統計のお勉強の練習問題みたいなもんです。
どうせなら、使うイメージがあるほうが良いので「学校のクラスの試験の得点を入力して、偏差値を計算したり、平均点・中央値・最頻値などを求める」のをやってみます。
試験結果分析ツールみたいなもんですね。
EXCELで作る試験結果分析ツール
まずは、EXCELで作ってみました。
こんなイメージのもんです。
B列に氏名、C列に得点を入力しますと。(一応、1クラス50名迄に今はしてます)
平均点・中央値・偏差値とか得点レンジごとの人数を度数にとったヒストグラムとかを書きます。
EXCELの関数で簡単にできてしまうレベルのもんですが、意外に見やすいんじゃないかと、自己満足してます。
EXCELブックはGITHUBにおきました
こんなんでも、学校の先生とかで使ってみようと思ってくれる人が一人くらいはいるかもしれないな・・と思ったので、とりあえずダウンロードできるようにしときます。
試験点数分析ブック.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
このへんくらいなら、それほど難しくはないですね。
ただ、EXCELのほうが見やすいけどね。
うん。