Pomocí „st“ (https://github.com/nferraz/st)
$ st numbers.txt
N min max sum mean stddev
10 1 10 55 5.5 3.02765
Nebo:
$ st numbers.txt --transpose
N 10
min 1
max 10
sum 55
mean 5.5
stddev 3.02765
(ODPOVĚDNOST:Tento nástroj jsem napsal já :))
Pro průměr, medián a směrodatnou odchylku můžete použít awk
. To bude obecně rychlejší než R
řešení. Například následující vytiskne průměr :
awk '{a+=$1} END{print a/NR}' myfile
(NR
je awk
proměnná pro počet záznamů, $1
znamená první (mezery oddělený) argument řádku ($0
by byl celý řádek, který by zde také fungoval, ale v zásadě by byl méně bezpečný, i když pro výpočet by stejně pravděpodobně vzal jen první argument) a END
znamená, že následující příkazy budou provedeny po zpracování celého souboru (je možné také inicializovat a
na 0
v BEGIN{a=0}
prohlášení)).
Zde je jednoduchý awk
skript, který poskytuje podrobnější statistiky (jako vstup bere soubor CSV, jinak změňte 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
}
Do tohoto skriptu je snadné přidat min/max, ale stejně snadné je použít sort
&head
/tail
:
sort -n myfile | head -n1
sort -n myfile | tail -n1
S R je to hračka. Pro soubor, který vypadá takto:
1
2
3
4
5
6
7
8
9
10
Použijte toto:
R -q -e "x <- read.csv('nums.txt', header = F); summary(x); sd(x[ , 1])"
Chcete-li to získat:
V1
Min. : 1.00
1st Qu.: 3.25
Median : 5.50
Mean : 5.50
3rd Qu.: 7.75
Max. :10.00
[1] 3.02765
-q
flag potlačí licencování spouštění R's a výstup nápovědy-e
flag říká R, že budete předávat výraz z terminálux
jedata.frame
- v podstatě stůl. Je to struktura, která pojme více vektorů/sloupců dat, což je trochu zvláštní, pokud čtete pouze v jediném vektoru. To má vliv na to, které funkce můžete používat.- Některé funkce, například
summary()
, přirozeně se přizpůsobídata.frames
. Pokudx
měl více polí,summary()
by pro každý poskytl výše uvedené popisné statistiky. - Ale
sd()
může mít vždy pouze jeden vektor, což je důvod, proč indexujix
pro tento příkaz (x[ , 1]
vrátí první sloupecx
). Můžete použítapply(x, MARGIN = 2, FUN = sd)
získat SD pro všechny sloupce.