Utilisation de "st" (https://github.com/nferraz/st)
$ st numbers.txt
N min max sum mean stddev
10 1 10 55 5.5 3.02765
Ou :
$ st numbers.txt --transpose
N 10
min 1
max 10
sum 55
mean 5.5
stddev 3.02765
(AVIS DE NON-RESPONSABILITÉ :j'ai écrit cet outil :))
Pour la moyenne, la médiane et l'écart type, vous pouvez utiliser awk
. Ce sera généralement plus rapide que R
solutions. Par exemple, ce qui suit imprimera la moyenne :
awk '{a+=$1} END{print a/NR}' myfile
(NR
est un awk
variable pour le nombre d'enregistrements, $1
signifie le premier argument (séparé par des espaces) de la ligne ($0
serait la ligne entière, qui fonctionnerait également ici mais serait en principe moins sûre, bien que pour le calcul, elle ne prendrait probablement que le premier argument de toute façon) et END
signifie que les commandes suivantes seront exécutées après avoir traité tout le fichier (on aurait aussi pu initialiser a
à 0
dans un BEGIN{a=0}
déclaration)).
Voici un simple awk
script qui fournit des statistiques plus détaillées (prend un fichier CSV en entrée, sinon changez FS
) :
#!/usr/bin/awk -f
BEGIN {
FS=",";
}
{
a += $1;
b[++i] = $1;
}
END {
m = a/NR; # mean
for (i in b)
{
d += (b[i]-m)^2;
e += (b[i]-m)^3;
f += (b[i]-m)^4;
}
va = d/NR; # variance
sd = sqrt(va); # standard deviation
sk = (e/NR)/sd^3; # skewness
ku = (f/NR)/sd^4-3; # standardized kurtosis
print "N,sum,mean,variance,std,SEM,skewness,kurtosis"
print NR "," a "," m "," va "," sd "," sd/sqrt(NR) "," sk "," ku
}
Il est simple d'ajouter min/max à ce script, mais il est aussi facile de diriger sort
&head
/tail
:
sort -n myfile | head -n1
sort -n myfile | tail -n1
C'est un jeu d'enfant avec R. Pour un fichier qui ressemble à ceci :
1
2
3
4
5
6
7
8
9
10
Utilisez ceci :
R -q -e "x <- read.csv('nums.txt', header = F); summary(x); sd(x[ , 1])"
Pour obtenir ceci :
V1
Min. : 1.00
1st Qu.: 3.25
Median : 5.50
Mean : 5.50
3rd Qu.: 7.75
Max. :10.00
[1] 3.02765
- Le
-q
flag supprime la licence de démarrage de R et la sortie d'aide - Le
-e
flag indique à R que vous allez passer une expression depuis le terminal x
est undata.frame
- une table, essentiellement. C'est une structure qui accueille plusieurs vecteurs/colonnes de données, ce qui est un peu particulier si vous ne lisez qu'un seul vecteur. Cela a un impact sur les fonctions que vous pouvez utiliser.- Certaines fonctions, comme
summary()
, accueillent naturellementdata.frames
. Six
avait plusieurs champs,summary()
fournirait les statistiques descriptives ci-dessus pour chacun. - Mais
sd()
ne peut prendre qu'un seul vecteur à la fois, c'est pourquoi j'indexex
pour cette commande (x[ , 1]
renvoie la première colonne dex
). Vous pouvez utiliserapply(x, MARGIN = 2, FUN = sd)
pour obtenir les SD de toutes les colonnes.