web-dev-qa-db-fra.com

Comment calculer la moyenne d'une colonne

Quelqu'un sait comment puis-je calculer la moyenne d'une de ces colonnes (sous Linux) ??

sda               2.91    20.44    6.13    2.95   217.53   186.67    44.55     0.84   92.97
sda               0.00     0.00    2.00    0.00    80.00     0.00    40.00     0.22  110.00 
sda               0.00     0.00    2.00    0.00   144.00     0.00    72.00     0.71  100.00 
sda               0.00    64.00    0.00    1.00     0.00     8.00     8.00     2.63   10.00
sda               0.00     1.84    0.31    1.38    22.09   104.29    74.91     3.39 2291.82 
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00  

Par exemple: moyenne (colonne 2)

32
Alucard

Awk:

awk '{ total += $2 } END { print total/NR }' yourFile.whatever

Lire comme:

  • Pour chaque ligne, ajoutez la colonne 2 à une variable "total".
  • À la fin du fichier, imprimez "total" divisé par le nombre d'enregistrements.
68
porges

Solution Perl:

Perl -lane '$total += $F[1]; END{print $total/$.}' file

-a fractionne automatiquement la ligne dans le tableau @F, qui est indexé à partir de 0
$. est le numéro de ligne

Si vos champs sont séparés par des virgules au lieu d'espaces:

Perl -F, -lane '$total += $F[1]; END{print $total/$.}' file

Pour imprimer les valeurs moyennes de toutes les colonnes, affectez des totaux au tableau @t:

Perl -lane 'for $c (0..$#F){$t[$c] += $F[$c]}; END{for $c (0..$#t){print $t[$c]/$.}}' 

production:

0
0.485
14.38
1.74
0.888333333333333
77.27
49.8266666666667
39.91
1.29833333333333
434.131666666667
3
Chris Koknat

Vous pouvez utiliser python pour cela, est disponible sous Linux.

Si cela provient d'un fichier, jetez un œil à ceci question , utilisez simplement float à la place.

Par exemple:

#mean.py 
def main():
    with open("mean.txt", 'r') as f:
        data = [map(float, line.split()) for line in f]

    columnTwo = []
    for row in data:
        columnTwo.append( row[1] )

    print  sum(columnTwo,0.0) / len( columnTwo )



if __name__=="__main__":
    main()

Impressions 14,38

J'inclus simplement les données dans le fichier mean.txt, pas l'en-tête de ligne: "sda"

1
OscarRyz

Simple-r calculera la moyenne avec la ligne suivante:

r -k2 mean file.txt

pour la deuxième colonne. Il peut également effectuer une analyse statistique beaucoup plus sophistiquée, car il utilise environnement R pour toutes ses analyses statistiques.

0
Tom

David Zaslavsky pour le plaisir:

with open("mean.txt", 'r') as f: 
    n,t = map(sum, Zip(*((1, float(line.split()[1])) for line in f)))
print t/n
0
OscarRyz