2014/05/29(木)Perl Data Language 統計編 #04 「平均、分散、標準偏差」
データ↓
http://www.tokyo-tosho.co.jp/download/DL02122.zip
問1.1の5)はPDL::Stats を使うと一撃。ですが、勉強にならないので一応普通に計算した場合も載せました。分散を計算するには平均を計算しないといけないので、そこで自由度が1減ると考えて不偏分散を使って計算しました。(統計検定2級のテキストを参照)
#!/usr/bin/env perl
use strict;
use warnings;
use feature qw/say/;
use PDL::Lite;
use PDL::Stats;
use PDL::IO::Misc ();
use DDP filters => { -external => [ 'PDL' ] };
my $infile = 'weather.csv';
my $colnum = 1;
my $heikin_kion = PDL->rcols($infile, { COLSEP => ',', INCLUDE => qr/[0-9]/ }, $colnum);
say " 平均:" . sprintf("%.3f", $heikin_kion->avg);
say " 分散:" . sprintf("%.3f", $heikin_kion->var_unbiased);
say "標準偏差:" . sprintf("%.3f", $heikin_kion->stdv_unbiased);
print "\n";
say "専用メソッドを使わずに分散と標準偏差を計算";
my $avg = $heikin_kion->avg;
my $sum = 0;
for my $i (0 .. $heikin_kion->nelem - 1)
{
my $hensa = $heikin_kion->at($i) - $avg;
$sum += $hensa ** 2;
}
my $variance = $sum / ($heikin_kion->nelem - 1);
say " 分散:" . sprintf("%.3f", $variance);
say "標準偏差:" . sprintf("%.3f", sqrt $variance);
平均:5.055
分散:1.669
標準偏差:1.292
専用メソッドを使わずに分散と標準偏差を計算
分散:1.669
標準偏差:1.292