FC2ブログ

# 度数分布
# 引数 値 (\@Price)
# 戻り値 @fd ([0]階級 [1]階級値 [2]度数 [3]相対度数 [4]累積度数 [5]累積相対度数) (@fd)
sub FD{
my ($Price) = @_;
my @fd = ();
my $count = @$Price;

# 配列数の確認
if($count <= 1){
return 0;
}

# 計算
my $s = 0;
my @p = @$Price;
# 昇順ソート
@p = sort {$a <=> $b} @p;
# 階級数 スタージェスの公式
my $k = (1 + (log($count) / log(2)));
# 範囲
my $r = ($p[$count - 1] - $p[0]) / int(1 + $k);
my $RangeLow = $p[0];
my $RangeHigh = $p[0];

for(my $i = 0; $i < $count; $i++){
my $c = 0;
my $j = 0;
$RangeLow = $RangeHigh;
$RangeHigh = $RangeLow + $r;

while((($i + $j) < $count) && ($RangeLow <= $p[$i + $j]) && ($p[$i + $j] <= $RangeHigh)){
$c++;
$j++;
}

# 度数分布 [0]階級 [1]階級値 [2]度数 [3]相対度数 [4]累積度数 [5]累積相対度数
$fd[$s][0] = sprintf("%.2f",$RangeLow)."-".sprintf("%.2f",$RangeHigh);
$fd[$s][1] = sprintf("%.2f", (($RangeLow + $RangeHigh) / 2));
$fd[$s][2] = $c;
$fd[$s][3] = $c / $count;
$fd[$s][4] = ($s == 0 ? $c: $fd[$s - 1][4] + $c);
$fd[$s][5] = ($s == 0 ? $fd[0][3]: $fd[$s - 1][5] + $fd[$s][3]);

$i = $i + ($j - 1);
$s++;
}

return @fd;
}


参考URL
度数分布 - Wikipedia

一言
範囲($r)に浮動小数点数がある場合、結果が階級数+1になる。さて,どうするか。
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

Author:雨宮
Firefoxを使用しているので気づかなかったけど、IE6でソースコードを上手くコピーできない

5/3
携帯用ならIE6でもソースコードをコピーできる
携帯用

検索フォーム


あわせて読みたいブログパーツ
一寸先は闇 RSS