Verwenden von „st“ (https://github.com/nferraz/st)
$ st numbers.txt
N min max sum mean stddev
10 1 10 55 5.5 3.02765
Oder:
$ st numbers.txt --transpose
N 10
min 1
max 10
sum 55
mean 5.5
stddev 3.02765
(HAFTUNGSAUSSCHLUSS:Ich habe dieses Tool geschrieben :))
Für den Durchschnitt, den Median und die Standardabweichung können Sie awk
verwenden . Dies ist im Allgemeinen schneller als R
Lösungen. Im Folgenden wird beispielsweise der Durchschnitt ausgegeben :
awk '{a+=$1} END{print a/NR}' myfile
(NR
ist ein awk
Variable für die Anzahl der Datensätze, $1
bedeutet das erste (durch Leerzeichen getrennte) Argument der Zeile ($0
wäre die ganze Zeile, die auch hier funktionieren würde, aber im Prinzip weniger sicher wäre, obwohl es für die Berechnung wahrscheinlich sowieso nur das erste Argument nehmen würde) und END
bedeutet, dass die folgenden Befehle ausgeführt werden, nachdem die gesamte Datei verarbeitet wurde (man hätte auch a
initialisieren können bis 0
in einem BEGIN{a=0}
Erklärung)).
Hier ist ein einfaches awk
Skript, das detailliertere Statistiken liefert (nimmt eine CSV-Datei als Eingabe, ändern Sie andernfalls 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
}
Es ist einfach, min/max zu diesem Skript hinzuzufügen, aber es ist genauso einfach, sort
zu pipen &head
/tail
:
sort -n myfile | head -n1
sort -n myfile | tail -n1
Mit R ist das ein Kinderspiel. Für eine Datei, die so aussieht:
1
2
3
4
5
6
7
8
9
10
Verwenden Sie dies:
R -q -e "x <- read.csv('nums.txt', header = F); summary(x); sd(x[ , 1])"
Um dies zu erhalten:
V1
Min. : 1.00
1st Qu.: 3.25
Median : 5.50
Mean : 5.50
3rd Qu.: 7.75
Max. :10.00
[1] 3.02765
- Die
-q
Flag unterbindet die Startup-Lizenzierung und die Hilfeausgabe von R - Die
-e
Flag teilt R mit, dass Sie einen Ausdruck vom Terminal übergeben werden x
ist eindata.frame
- im Grunde ein Tisch. Es ist eine Struktur, die mehrere Vektoren/Datenspalten aufnimmt, was ein wenig eigenartig ist, wenn Sie nur einen einzelnen Vektor einlesen. Dies hat Auswirkungen darauf, welche Funktionen Sie nutzen können.- Einige Funktionen, wie
summary()
, passen natürlichdata.frames
. Wennx
hatte mehrere Felder,summary()
würde die obigen beschreibenden Statistiken für jeden bereitstellen. - Aber
sd()
kann jeweils nur einen Vektor nehmen, weshalb ichx
indiziere für diesen Befehl (x[ , 1]
gibt die erste Spalte vonx
zurück ). Sie könntenapply(x, MARGIN = 2, FUN = sd)
verwenden um die SDs für alle Spalten zu erhalten.