偏差値の計算式:
[偏差値] = (X - [平均値]) / [標準偏差] * 10 + 50
[標準偏差] = √ Σ(([個々の値]i - [平均値])^2 / [総数])
偏差値計算スクリプト(Perl):
#!/usr/bin/perl
use strict;
use warnings;
my @dat;
while (<>) {
chomp;
push @dat, $_;
}
#my @dat = map {int(rand(100))} (1..10);
my $num = @dat;
my $ave; # 平均点
$ave += $_ for @dat;
$ave /= @dat;
my $sd; # 標準偏差
$sd += ($_ - $ave)**2 for @dat;
$sd = sqrt($sd/$num);
print "点数\t偏差値\n";
foreach my $x (@dat) {
my $ss = ($x - $ave) / $sd * 10 + 50; # 偏差値
print "$x\t$ss\n";
}
実行例:
% cat a.txt 12 67 25 37 52 40 13 29 5 93 % ./ss.pl a.txt 点数 偏差値 12 40.2272886968473 67 61.4723132689184 25 45.2488399593368 37 49.8841180477887 52 55.6782156583535 40 51.0429375699017 13 40.613561870885 29 46.7939326554875 5 37.5233764785837 93 71.5154157938974
追記100729: 標準偏差の計算が効率的ではないとご指摘を頂きました。ありがとうございます。修正しました。
修正前のコード:
$sd += ($_ - $ave/$num)**2 for @dat; $sd = sqrt($sd);


