Usando "st" (https://github.com/nferraz/st)
$ st numbers.txt
N min max sum mean stddev
10 1 10 55 5.5 3.02765
Oppure:
$ st numbers.txt --transpose
N 10
min 1
max 10
sum 55
mean 5.5
stddev 3.02765
(DISCLAIMER:ho scritto io questo strumento :))
Per la media, la mediana e la deviazione standard puoi utilizzare awk . Questo sarà generalmente più veloce di R soluzioni. Ad esempio, quanto segue stamperà la media :
awk '{a+=$1} END{print a/NR}' myfile
(NR è un awk variabile per il numero di record, $1 indica il primo argomento (separato da spazi) della riga ($0 sarebbe l'intera riga, che funzionerebbe anche qui ma in linea di principio sarebbe meno sicura, anche se per il calcolo probabilmente prenderebbe comunque solo il primo argomento) e END significa che i seguenti comandi verranno eseguiti dopo aver elaborato l'intero file (si potrebbe anche aver inizializzato a a 0 in un BEGIN{a=0} istruzione)).
Ecco un semplice awk script che fornisce statistiche più dettagliate (prende un file CSV come input, altrimenti cambia 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
}
È semplice aggiungere min/max a questo script, ma è altrettanto facile reindirizzare sort &head /tail :
sort -n myfile | head -n1
sort -n myfile | tail -n1
Questo è un gioco da ragazzi con R. Per un file simile a questo:
1
2
3
4
5
6
7
8
9
10
Usa questo:
R -q -e "x <- read.csv('nums.txt', header = F); summary(x); sd(x[ , 1])"
Per ottenere questo:
V1
Min. : 1.00
1st Qu.: 3.25
Median : 5.50
Mean : 5.50
3rd Qu.: 7.75
Max. :10.00
[1] 3.02765
- Il
-qflag sopprime la licenza di avvio di R e l'output della guida - Il
-eflag dice a R che passerai un'espressione dal terminale xè undata.frame- un tavolo, in pratica. È una struttura che ospita più vettori/colonne di dati, il che è un po' strano se stai solo leggendo in un singolo vettore. Ciò ha un impatto sulle funzioni che puoi utilizzare.- Alcune funzioni, come
summary(), naturalmente ospitaredata.frames. Sexaveva più campi,summary()fornirebbe le statistiche descrittive di cui sopra per ciascuno. - Ma
sd()può accettare solo un vettore alla volta, motivo per cui indicoxper quel comando (x[ , 1]restituisce la prima colonna dix). Potresti usareapply(x, MARGIN = 2, FUN = sd)per ottenere gli SD per tutte le colonne.