2014/05/30(金)Perl Data Language 統計編 #05 「四分位数と箱ひげ図」

データ↓
http://www.tokyo-tosho.co.jp/download/DL02122.zip

問1.1の6)です。

四分位数は、統計検定の試験とかで手計算でやるときは

  1. 昇順ソート
  2. 中央値(Q2)を求める
  3. 中央値点より小さいほうの中央値(Q1)を求める
  4. 中央値点より大きいほうの中央値(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

箱ひげ図