Usando o AWK para calcular a média e a variância das colunas

1

Eu tenho um arquivo de dados grande dataset.csv com 7 colunas numéricas. Eu li que o AWK seria a maneira mais rápida / eficiente de calcular a média e a variância para cada coluna. Eu preciso de um comando AWK que passa pelo arquivo CSV e gera os resultados em um CSV de resumo. Um conjunto de dados de amostra:

1   1   12  1   0   0   426530
1   1   12  2   0   0   685455
3   4   12  3   1   0   1182080
1   1   12  4   0   1   3090
2   1   13  5   0   0   386387
1   3   12  6   0   2   233430
3   1   11  7   1   0   896919
1   1   12  8   0   0   16441

O resumo resultante csv é visto abaixo. A primeira linha corresponde à média de cada coluna e a segunda linha é a variação (com base na amostra).

1.625   1.625   12  4.5 0.25    0.375   478791.5
0.839285714 1.410714286 0.285714286 6   0.214285714 0.553571429 1.74812E+11

Eu consegui calcular valores de coluna única, mas preciso executá-la em todas as colunas

awk -F' ' '{ total += $1 } END {print total/NR}' dataset.csv > output.csv
    
por Bryce Ramgovind 01.09.2016 / 10:55

1 resposta

1

você precisará de um loop que vá para todas as colunas

{ for(i=1;i<=NF;i++) ...

e matrizes

... total[i]+=$i ; sq[i]+=$i*$i ; }

este resultado em uma linha de comando como (para média)

awk '{ for(i=1;i<=NF;i++) total[i]+=$i ; } 
    END { for(i=1;i<=NF;i++) printf "%f ",total[i]/NR ;}' 

programa completo

Eu uso esse awk para calcular a média e a variância, no entanto, não tenho resultado.

 { for(i=1;i<=NF;i++) {total[i]+=$i ; sq[i]+=$i*$i ; } }
END {

   for(i=1;i<=NF;i++) printf "%f ",total[i]/NR ;
   printf "\n" ;
   for(i=1;i<=NF;i++) printf "%f ",sq[i]/NR-(total[i]/NR)**2 ;
   printf "\n" ;
}
    
por 01.09.2016 / 11:03