pythonデータ分析試験の勉強をしつつこれperlで書くとどうなんだろってものが何点かあったのでメモ的に記載
平均
sub mean { local($s) = 0; local($n) = 0; foreach $_ (@_) { if ($_ =~ /[0-9]/) { $s += $_; $n++; } } if ($n == 0) { ""; } else { $s /= $n; } }
分散と標準偏差
sub dist { local($i, $m, $n, $s); ($m, $n, $s) = (0,0,0); if (@_ < 2) { return 0; } $m = &mean(@_); for ($i = 0; $i < @_; $i++) { if ($_[$i] =~ /[0-9]/) { $s += ($_[$i] - $m) * ($_[$i] - $m); $n++; } } if ($n < 1) { ""; } elsif ($n < 2) { $s; } else { $s /= ($n - 1); } } sub stdev { sqrt(&dist); }
最大値、最小値、中央値
sub max { local ($i,$max); for ($i = 0; $i < @_; $i++) { if ($_[$i] =~ /[0-9]/) { $max = $_[$i]; last; } } foreach $_ (@_) { if (($_ =~ /[0-9]/) && ($max < $_)) { $max = $_; }} if (!($max =~ /[0-9]/)) { $max = ""; } $max; } sub min { local ($i,$min); for ($i = 0; $i < @_; $i++) { if ($_[$i] =~ /[0-9]/) { $min = $_[$i]; last; } } foreach $_ (@_) { if (($_ =~ /[0-9]/) && ($min > $_)) { $min = $_; }} if (!($min =~ /[0-9]/)) { $min = ""; } $min; }