CGI 2016年08月26日 12:24   編集

お知らせ

プライベートディレクトリの利用者がトレンドマイクロのセキュリティソフトを使用している場合、プライベートディレクトリへのログイン情報が外部に漏れる恐れがあります。対策を施したver.1.0に更新をお願いします。

受験戦争の過熱を抑えるためか、最近ではテストの偏差値を出さない学校が増えたようです。
しかし、試験の点数だけでは、成績が上がったのか下がったのか、イマイチわかりにくくて困る場合もあります。
こういうときはやはり偏差値がわかると便利です。 ウチの子供の学校の場合、偏差値は出さないけど、なぜか得点帯ごとの人数は出します。そこで、この得点帯ごとの人数から偏差値を計算するCGIを書いてみました。
データを保存して、偏差値の推移をグラフ表示することもできます。
(WEB素材配布室の折れ線グラフ表示スクリプトを使わせてもらいました。)

使い方

とりあえず使い方を説明します。

基本

基本的な使い方としては、最低限、偏差値を調べたい得点と得点エリアごとの人数を入力して「計算」ボタンを押します。得点エリアごとの人数を元に平均点を計算しますが、オリジナルデータの平均点がわかっているなら平均欄に入れると、そちらを優先して計算します。
満点が100点で、得点エリアを10分割するのがデフォルトですが、たとえば60点満点で6分割したい場合は満点「60」点、「6」分割と入力してください。

保存する

「計算」ボタンを押すと、その場で偏差値を計算するだけですが、入力したデータを保存しておけばいつでもデータが呼び出せて、科目ごとの偏差値の推移をグラフで表示することができます。もちろん、一般に公開できるデータではないと思うので、他の人の目に触れないようにするには
  1. WEBサーバーではなく、ローカル環境で実行する
  2. セキュリティ機能のあるサーバーで実行する
  3. 疑似偏差値計算CGIで他の人には見えないプライベートディレクトリを作り、そこにデータを保存する
などの対策が必要になります。
1と2についてはここでは説明しませんが、3について説明します。

プライベートディレクトリを作成する

  1. 画面右下にある「プライベートディレクトリに移動」リンクをクリックします。
  2. ログインフォームが出ますので、パスワードを入力してください。
  3. 「****は登録されていません。新たにディレクトリを作成しますか?」
    と聞いてくるので、「はい」をクリックしてディレクトリを作成します。
    パスワードといっても、実のところパスワードをURLエンコードした名前のディレクトリを作成しているだけです。
    どのような名前のディレクトリがあるかWEB上では見えないはずなので、実質的にパスワードと同じ働きをすると思います。
すでにディレクトリを作成している場合は、そのディレクトリにアクセスします。
当然ですが、簡単なパスワードだと他の人に見られてしまうおそれがあるので、なるべく複雑なパスワードにしてください。
サンプルでもプライベートディレクトリを作成、ログインできますが、24時間以上更新のないディレクトリは自動的にディレクトリごと削除するようにしています。
プライベートディレクトリにログインしても、ログファイルのアクセス先が違うだけで、操作などは汎用ディレクトリでの操作と全く同じです。

データの保存

データを保存する場合は、得点得点エリアごとの人数の他、試験名科目名前の入力も必須になります。
平均点は必須ではありませんが、わかっている場合は入力した方がより正確な偏差値が求められるかもしれません。
保存すると、上部にある選択フォームから過去のデータを即座に呼び出すことができます。
現在表示されているデータを編集して別のデータとして保存する場合は「保存する」ボタン、現在表示しているデータを修正する場合は「上書き保存する」ボタンを押します。
また、現在表示中のデータを削除するには、選択フォーム横の「を削除」ボタンを押します。
データをいくつか保存すると、そのデータによる偏差値の推移をグラフで表示することができます。
画面の下にある偏差値の推移のところにある名前をクリックすると、偏差値の推移グラフを別ウインドウで表示します。
選択ボックスや、偏差値推移グラフでデータはソートして表示されます。ソートの優先順位は名前、学年、試験名、科目の順です。
文字列でソートしますが、順番を変更したい場合は、選択ボックスの下にある試験名表示順や科目表示順をクリックすると、並び替え用のフォームが出ますので、これで編集してください。

参考

偏差値は以下の式で求められます。
偏差値 = 10 × (得点 - 平均) ÷ 標準偏差 + 50
標準偏差は
すべての得点について(得点 - 平均)の2乗を合計し、これを全体の人数で割って、さらにれを平方根にしたものです。たとえば
13 25 38 42 50 53 59 64 77 89
という点数のグループがあったとすると、
平均 = ( 13 + 25 + 38 + 42 + 50 + 53 + 59 + 64 + 77 + 89 ) ÷ 10 = 51

標準偏差は
((13-51)×(13-51)+(25-51)×(25-51)+(38-51)×(38-51)+(42-51)×(42-51)+(50-51)×(50-51)+(53-51)×(53-51)+(59-51)×(59-51)+(64-51)×(64-51)+(77-51)×(77-51)+(89-51)×(89-51)) ÷ 10 = 472.8
さらにこの平方根をとって
標準偏差 = 21.743964679883
となります。
このグループの中で59点の得点の偏差値は
10 × (59 - 51) ÷ 21.743964679883 + 50 ≒ 53.6791
となります。
この疑似偏差値計算機では、上記のような得点のグループを
1~20点 1人
21~40点2人
41~60点4人
61~80点2人
81~100点1人
のようにサンプル化して計算します。
たとえば41点~60点に相当する部分は
42 50 53 59
という得点分布ではなく、41点~60点の平均である50点が4人と単純化して計算します。
先ほどの標準偏差を求める途中の計算は
((10-51)×(13-51)×1+(30-51)×(30-51)×2+(50-51)×(50-51)×4+(70-51)×(70-51)×2+(90-51)×(90-51)×1) ÷ 10 = 468.7
のように単純化され、これによる標準偏差は21.6494803632789
となります。

誤差

オリジナルのデータから計算した偏差値と、サンプリングしたデータから計算した疑似偏差値と、どれくらいの誤差があるか、疑似偏差値誤差確認のためのCGIを書いてみました。
これで100回ぐらい計算してみたら、一番大きかった誤差の値は
標準偏差で1.02 偏差値で0.93ぐらいでした。
誤差の平均は、
標準偏差で0.26 偏差値で0.21ぐらいでした。
最大誤差があったとしても、+-1ぐらい見ておけば十分でしょう。
たとえば、疑似偏差値計算機で62.45という結果が出たら、
61.45~63.45の範囲にはほぼ収まるだろうということです。
まあ、参考にはなる程度の値は出せるのではないかという感じでしょうか。
counter:19,820