2014/05/30(金)Perl Data Language 統計編 #05 「四分位数と箱ひげ図」
データ↓
http://www.tokyo-tosho.co.jp/download/DL02122.zip
問1.1の6)です。
四分位数は、統計検定の試験とかで手計算でやるときは
- 昇順ソート
- 中央値(Q2)を求める
- 中央値点より小さいほうの中央値(Q1)を求める
- 中央値点より大きいほうの中央値(Q3)を求める
が一番楽かな。統計検定では四分位数の計算方法は定まっていないようなので、一番楽な計算方法でやりましょう。
コードは以下の通りですが、箱ひげ図はPLplotだと大変なのでRで描画しました。
#!/usr/bin/env perl
use strict;
use warnings;
use feature qw/say/;
use Statistics::R;
use PDL::Lite;
use PDL::IO::Misc ();
use PDL::Graphics::PLplot;
use DDP filters => { -external => [ 'PDL' ] };
my $infile = 'weather.csv';
my $infile_utf8 = 'weather_utf8.csv';
# 箱ひげ図はRで描画
my $R = Statistics::R->new;
$R->run(qq|weather <- read.csv('$infile_utf8')|);
$R->run(qq|boxplot(weather$平均気温, ylab='heikin kion', xlab='', range=0, data=weather)|);
# 四分位数はPerlで
my $colnum = 1;
my $heikin_kion = PDL->rcols($infile, { COLSEP => ',', INCLUDE => qr/[0-9]/ }, $colnum);
$heikin_kion .= $heikin_kion->qsort;
say '昇順での順位と値';
for my $i ($heikin_kion->listindices)
{
say $i + 1 . ' ' . $heikin_kion->at($i);
}
print 'n';
say 'Q1: ' . PDL::Ufunc::pct($heikin_kion, 0.25);
say 'Q2: ' . PDL::Ufunc::pct($heikin_kion, 0.5);
say 'Q3: ' . PDL::Ufunc::pct($heikin_kion, 0.75);
出力:
昇順での順位と値
1 2.2
2 2.9
3 2.9
4 3.4
5 3.7
6 3.8
7 3.8
8 4
9 4
10 4.2
11 4.4
12 5
13 5
14 5.1
15 5.1
16 5.3
17 5.4
18 5.5
19 5.5
20 5.7
21 5.9
22 5.9
23 5.9
24 6
25 6.1
26 6.3
27 6.3
28 6.5
29 6.6
30 7
31 7.3
Q1: 4
Q2: 5.3
Q3: 5.95