Menggunakan "st" (https://github.com/nferraz/st)
$ st numbers.txt
N min max sum mean stddev
10 1 10 55 5.5 3.02765
Atau:
$ st numbers.txt --transpose
N 10
min 1
max 10
sum 55
mean 5.5
stddev 3.02765
(PENAFIAN:Saya menulis alat ini :))
Untuk deviasi rata-rata, median &standar, Anda dapat menggunakan awk
. Ini umumnya akan lebih cepat dari R
solusi. Misalnya, berikut ini akan mencetak rata-rata :
awk '{a+=$1} END{print a/NR}' myfile
(NR
adalah awk
variabel untuk jumlah record, $1
berarti argumen pertama (dipisahkan spasi) dari baris ($0
akan menjadi keseluruhan baris, yang juga akan berfungsi di sini tetapi pada prinsipnya akan kurang aman, meskipun untuk perhitungan mungkin hanya akan menggunakan argumen pertama) dan END
berarti bahwa perintah berikut akan dijalankan setelah memproses seluruh file (seseorang juga dapat menginisialisasi a
ke 0
dalam BEGIN{a=0}
pernyataan)).
Ini adalah awk
sederhana skrip yang memberikan statistik lebih detail (mengambil file CSV sebagai masukan, jika tidak, ubah 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
}
Sangat mudah untuk menambahkan min/max ke skrip ini, tetapi semudah mem-pipe sort
&head
/tail
:
sort -n myfile | head -n1
sort -n myfile | tail -n1
Ini sangat mudah dengan R. Untuk file yang terlihat seperti ini:
1
2
3
4
5
6
7
8
9
10
Gunakan ini:
R -q -e "x <- read.csv('nums.txt', header = F); summary(x); sd(x[ , 1])"
Untuk mendapatkan ini:
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
tandai squelches R's startup license dan help output-e
flag memberi tahu R bahwa Anda akan meneruskan ekspresi dari terminalx
adalahdata.frame
- meja, pada dasarnya. Ini adalah struktur yang mengakomodasi banyak vektor/kolom data, yang sedikit aneh jika Anda hanya membaca dalam satu vektor. Hal ini berdampak pada fungsi yang dapat Anda gunakan.- Beberapa fungsi, seperti
summary()
, secara alami mengakomodasidata.frames
. Jikax
memiliki banyak kolom,summary()
akan memberikan statistik deskriptif di atas untuk masing-masing. - Tapi
sd()
hanya dapat mengambil satu vektor pada satu waktu, itulah sebabnya saya mengindeksx
untuk perintah itu (x[ , 1]
mengembalikan kolom pertamax
). Anda dapat menggunakanapply(x, MARGIN = 2, FUN = sd)
untuk mendapatkan SD untuk semua kolom.