自動化されたスクリプトを使用して、標準化(元の値から平均を差し引き、標準偏差で除算)を実行しようとしています。10000行のファイルがあります。最初に各列の平均と標準偏差を計算する必要があり、次にそれらの値を使用して、新しい標準化された値を取得する必要があります。これはExcelで非常に簡単に実行できます。しかし、自動化されたスクリプトを探しています。
入力
DOTR1 10.29006 10.06744 10.47105 10.05041 10.18407 9.770205 10.90548 10.75112
RCC2 6.699481 7.240353 7.263434 6.654058 6.86063 7.151931 6.796337 6.78525
HHPA6 7.31182 7.547056 8.338827 7.278408 7.545548 7.409964 7.149899 7.300342
PAX8 8.336847 8.651292 8.493323 8.5056 8.445139 8.651406 8.664237 8.56571
ACA1A 4.233111 4.320666 4.232803 4.390224 4.269969 4.314899 4.264211 4.142419
UBA7 8.196608 8.164725 7.361889 8.055019 8.882745 7.6884 7.835754 8.354209
OOA 5.098222 5.212986 5.301191 5.211401 5.13133 5.153725 5.269111 5.195991
ACX1 4.875679 5.01305 4.921618 4.930978 4.899562 4.92918 4.970339 4.986362
列1の平均は6.880で、標準偏差は2.066です。
ここで、観測値から平均を減算し、stdevで除算して(10.29006-6.880)/2.066にします。これは、列1の行ごとの後続のすべての観測で行います。列2についても、その平均と対応する標準偏差を見つけて、同じ手順に従います。
ありがとう、
次のコードを試してavgとstdevを取得しました。次のステップに進むのに行き詰まります。
sub average{
my($data) = @_;
if (not @$data) {
die("Empty array\n");
}
my $total = 0;
foreach (@$data) {
$total += $_;
}
my $average = $total / @$data;
return $average;
}
sub stdev{
my($data) = @_;
if(@$data == 1){
return 0;
}
my $average = &average($data);
my $sqtotal = 0;
foreach(@$data) {
$sqtotal += ($average-$_) ** 2;
}
my $std = ($sqtotal / (@$data-1)) ** 0.5;
return $std;
}