안녕하세요. 데이터 목록이 많습니다. http://paste-it.net/public/y17027d/ 67859 행 × 10 열입니다. 여섯 번째 열에는 1에서 6까지의 Z 점수를 나타내는 값이 0.01 단위로 포함됩니다. 내가하고 싶은 것은 동일한 Z 점수 값을 가진 다른 모든 열 값을 합산하는 것이지만 현재 코드는 작동하지 않습니다.목록을 축소하고 perl에서 총계를 얻는 데 도움이 필요합니다.
지금은 값을 인쇄하지만 각 Z- 점수의 합계는 잘못되었습니다.
#! /usr/bin/perl
use strict;
use warnings;
use POSIX;
use Data::Dumper;
my $input = $ARGV[0];
open (DATAFILE, $input) or die $!;
open(OUT,">>"."final.output.txt");
my($line,$fMeasure,$filename,$recall,$precision,$z_score,$computer_calls,$johns_calls,$false_negatives,$false_positives,$true_positives,$count);
$fMeasure=$filename=$recall=$precision=$z_score=$computer_calls=$johns_calls=$false_negatives=$false_positives=$true_positives=$count = 0;
my %stats=();
my %zscore=();
while($line = <DATAFILE>){
# Chop off new line character, skip the comments and empty lines.
chomp($line);
my @temp = split(/\t/, $line);
$true_positives = $temp[0];
$false_positives = $temp[1];
$false_negatives = $temp[2];
$johns_calls = $temp[3];
$computer_calls = $temp[4];
$z_score = $temp[5];
$fMeasure = $temp[6];
$precision = $temp[7];
$recall = $temp[8];
$filename = $temp[9];
$stats{$z_score}{$filename}[0] = $true_positives;
$stats{$z_score}{$filename}[1] = $false_positives;
$stats{$z_score}{$filename}[2] = $johns_calls;
$stats{$z_score}{$filename}[3] = $computer_calls;
$stats{$z_score}{$filename}[4] = $fMeasure;
$stats{$z_score}{$filename}[5] = $precision;
$stats{$z_score}{$filename}[6] = $recall;
$stats{$z_score}{$filename}[6] = $filename;
$zscore{$z_score}++;
}
my $false_positives_new = 0;
my $true_positives_new = 0;
my $johns_calls_new = 0;
my $computer_calls_new = 0;
my $file_name = 0;
foreach $z_score (sort keys %stats) {
foreach $filename(keys %{$stats{$z_score}}){
my $tp = $stats{$z_score}{$filename}[0];
my $fp = $stats{$z_score}{$filename}[1];
my $jc = $stats{$z_score}{$filename}[2];
my $cc = $stats{$z_score}{$filename}[3];
my $fn = $stats{$z_score}{$filename}[6];
#print "$z_score\t$jc\n";
$false_positives_new = $false_positives + $fp;
$true_positives_new = $true_positives + $tp;
$johns_calls_new = $johns_calls + $jc;
$computer_calls_new = $computer_calls + $cc;
#print OUT "$fn\n";
}
print OUT"$true_positives_new\t$false_positives_new\t$johns_calls_new\t$computer_calls_new\t$z_score \n";
$false_positives_new = 0;
$true_positives_new = 0;
$johns_calls_new = 0;
$computer_calls_new = 0;
$file_name = 0;
}
close(OUT);
close (DATAFILE);
내가 뭔가 잘못하고해야하지만 무엇을 알아낼 수 없습니다임을 알게 :
다음은 내 코드입니다. 어떤 도움이라도 대단히 감사하겠습니다. 고맙습니다.
의 말하고 싶은 생각? –
지금은 없지만 나중에 프로그램을 변경하고이를 요구할 것입니다. 그것은 비록 코드의 기능에 영향을 주어서는 안됩니다. – Alos
어쨌든 복잡한 숫자가 데이터 집계에 어떤 영향을 미치는지 파악하는 데 어려움을 겪고 있습니다. –