Alat baris perintah untuk menghitung statistik dasar untuk aliran nilai [ditutup]

27

Apakah ada alat baris perintah yang menerima aliran angka (dalam format ascii) dari input standar dan memberikan statistik deskriptif dasar untuk aliran ini, seperti min, maks, rata-rata, median, RMS, kuantil dll? Outputnya dapat diuraikan oleh perintah berikutnya dalam rantai baris perintah. Lingkungan kerja adalah Linux, tetapi opsi lain dipersilahkan.

mbaitoff
sumber
1
Saya akan merekomendasikan untuk melihat | STAT . Itu perangkat lunak yang cukup lama, namun sangat nyaman untuk hal-hal seperti itu. Ada juga PYP , dan beberapa lainnya Un * x alat.
chl
@chl Link ISTAT rusak. Bisakah memperbaruinya atau menjawabnya?
Léo Léopold Hertz 준영
1
@Masi Yup, sepertinya halaman itu tidak ada lagi. Berikut ini tautan yang diperbarui .
chl
stackoverflow.com/questions/9789806/… || serverfault.com/questions/548322/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

22

Anda dapat melakukan ini dengan R , yang mungkin sedikit berlebihan ...

EDIT 2: [OOPS, sepertinya orang lain memukul dengan Rscript ketika saya mengetik ulang ini.] Saya menemukan cara yang lebih mudah. Dipasang dengan R haruslah Rscript, yang dimaksudkan untuk melakukan apa yang Anda coba lakukan. Misalnya, jika saya memiliki file baryang memiliki daftar angka, satu per baris:

cat bar | Rscript -e 'summary (as.numeric (readLines ("stdin")))'

Akan menyalurkan angka-angka itu ke R dan menjalankan summaryperintah R di baris, mengembalikan sesuatu seperti:

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00    2.25    3.50    3.50    4.75    6.00 

Anda juga dapat melakukan sesuatu seperti:

script -e 'quantile (as.numeric (readLines ("stdin")), probs=c(0.025, 0.5, 0.975))'

untuk mendapatkan kuantil. Dan Anda jelas dapat memotong baris pertama dari output (yang berisi label) dengan sesuatu seperti:

cat bar | Rscript -e 'summary (as.numeric (readLines ("stdin")))' | tail -n +2

Saya sangat merekomendasikan melakukan apa yang Anda inginkan dalam interaktif R terlebih dahulu, untuk memastikan Anda memiliki perintah yang benar. Dalam mencoba ini, saya meninggalkan tanda kurung penutup dan Rscript tidak menghasilkan apa-apa - tidak ada pesan kesalahan, tidak ada hasil, hanya tidak ada.

(Sebagai catatan, bilah file berisi:

1
2
3
4
5
6
Wayne
sumber
Jadi, saya harus menambahkan aliran saya dengan Rperintah itu?
mbaitoff
@ MBaitoff: Ya. Untuk pengujian saya, saya membuat file fooyang berisi summary (as.numeric (readLines()))baris pertama, lalu satu item data numerik per baris untuk sisa file. Itu readLines()hanya membaca dari stdin (yang semuanya mengikuti, sampai akhir file).
Wayne
Sepertinya kami benar-benar terjebak Rdalam kedua jawaban, dan tampaknya menjadi alat yang sangat besar untuk tugas kecil. Nah, jawaban bekerja, tapi tetap, ada sesuatu yang lain kecuali R?
mbaitoff
2
@ MBaitoff: Anda bisa menggunakan Python scipy, terutama jika Anda sudah menggunakan Python Jika Anda menggunakan / suka Clojure (lisp berdasarkan JVM, clojure.org ), ada lingkungan statistik Incanter( incanter.org ) yang dibangun di atasnya . Anda juga dapat mencoba gnu Octave.
Wayne
21

Coba "st":

$ seq 1 10 | st
N   min   max   sum   mean  stddev
10  1     10    55    5.5   3.02765

$ seq 1 10 | st --transpose
N       10
min     1
max     10
sum     55
mean    5.5
stddev  3.02765

Anda juga dapat melihat ringkasan nomor lima:

$ seq 1 10 | st --summary
min  q1    median   q3    max
1    3.5   5.5      7.5   10

Anda dapat mengunduhnya di sini:

https://github.com/nferraz/st

(PENOLAKAN: Saya menulis alat ini :))

pengguna2747481
sumber
Selamat datang di situs ini, @ user2747481. Maukah Anda mewujudkan sedikit jawaban ini? Kami ingin jawaban kami kebanyakan mandiri. Karena Anda baru di sini, Anda mungkin ingin membaca halaman tentang kami , yang berisi informasi untuk pengguna baru.
gung - Reinstate Monica
Terima kasih! Pada 2019 sttersedia melalui Homebrewbrew install st
Noah Sussman
Waspadalah yang stmungkin juga merujuk ke simple terminal.
Skippy le Grand Gourou
10

R menyediakan perintah yang disebut Rscript . Jika Anda hanya memiliki beberapa angka yang dapat Anda tempel di baris perintah, gunakan liner satu ini:

Rscript -e 'summary(as.numeric(commandArgs(TRUE)))' 3 4 5 9 7

yang mengakibatkan

Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
3.0     4.0     5.0     5.6     7.0     9.0 

Jika Anda ingin membaca dari input standar gunakan ini:

echo 3 4 5 9 7 | Rscript -e 'summary(as.numeric(read.table(file("stdin"))))'

Jika nomor pada input standar dipisahkan oleh carriage return (yaitu satu nomor per baris), gunakan

Rscript -e 'summary(as.numeric(read.table(file("stdin"))[,1]))'

Seseorang dapat membuat alias untuk perintah-perintah ini:

alias summary='Rscript -e "summary(as.numeric(read.table(file(\"stdin\"))[,1]))"'
du -s /usr/bin/* | cut -f1 | summary
Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
0.0     8.0    20.0    93.6    44.0  6528.0
Arnaud A
sumber
+1: Maaf, saya baru saja menemukan Rscript dan mengedit jawaban saya untuk memasukkan ini, jadi kami berakhir dengan jawaban yang sama. read.tableIde Anda adalah cara yang baik untuk berkeliling satu item per baris.
Wayne
Ok, terima kasih atas pengakuan dan +1nya.
Arnaud A
3

datamash adalah pilihan bagus lainnya. Ini dari Proyek GNU.

Jika Anda memiliki homebrew / linuxbrew yang dapat Anda lakukan:

brew install datamash

Owen
sumber
2

Ada juga simple-r, yang dapat melakukan hampir semua hal yang dapat dilakukan R, tetapi dengan sedikit penekanan tombol:

https://code.google.com/p/simple-r/

Untuk menghitung statistik deskriptif dasar, seseorang harus mengetikkan salah satu dari:

r summary file.txt
r summary - < file.txt
cat file.txt | r summary -

Tidak mendapatkan R-sederhana!

pengguna30888
sumber
2

Ada sta, yang merupakan varian c ++ st, juga dirujuk dalam komentar ini.

Ditulis dalam c ++, cepat dan dapat menangani dataset besar. Ini mudah digunakan, termasuk pilihan estimator yang tidak bias atau bias, dan dapat menampilkan informasi yang lebih rinci seperti kesalahan standar.

Anda dapat mengunduh sta di github .

Penafian: Saya penulis sta .

Simon
sumber
1

Untuk jaga-jaga, ada datastat

https://sourceforge.net/p/datastat/code/

sebuah program sederhana untuk Linux yang menghitung statistik sederhana dari command-line. Sebagai contoh,

cat file.dat | datastat

akan menampilkan nilai rata-rata di semua baris untuk setiap kolom file.dat. Jika Anda perlu mengetahui standar deviasi, min, maks, Anda dapat menambahkan opsi --dev, --min dan --max.

datastat memiliki kemungkinan untuk mengagregasi baris berdasarkan nilai satu atau lebih kolom "kunci".

Ini ditulis dalam C ++, berjalan cepat dan dengan pekerjaan memori kecil, dan dapat disalurkan dengan baik dengan alat lain seperti memotong, grep, sed, mengurutkan, awk, dll.

Tommaso
sumber
1

Anda mungkin juga mempertimbangkan untuk menggunakan clistats . Ini adalah alat antarmuka baris perintah yang sangat dapat dikonfigurasi untuk menghitung statistik untuk aliran nomor input yang dibatasi.

Opsi I / O

  • Input data dapat dari file, input standar, atau pipa
  • Output dapat ditulis ke file, output standar, atau pipa
  • Output menggunakan header yang dimulai dengan "#" untuk mengaktifkan perpipaan ke gnuplot

Opsi parsing

  • Sinyal, end-of-file, atau deteksi berbasis garis kosong untuk menghentikan pemrosesan
  • Karakter komentar dan pembatas dapat diatur
  • Kolom dapat disaring dari pemrosesan
  • Baris dapat disaring dari pemrosesan berdasarkan batasan numerik
  • Baris dapat disaring dari pemrosesan berdasarkan batasan string
  • Baris tajuk awal dapat dilewati
  • Jumlah baris tetap dapat diproses
  • Pembatas duplikat dapat diabaikan
  • Baris dapat dibentuk kembali menjadi kolom
  • Tegakkan dengan tegas bahwa hanya baris dengan ukuran yang sama yang diproses
  • Baris yang berisi judul kolom dapat digunakan untuk statistik keluaran judul

Opsi statistik

  • Statistik ringkasan (Hitungan, Minimum, Berarti, Maksimum, Standar deviasi)
  • Kovarian
  • Korelasi
  • Kuadrat terkecil diimbangi
  • Kemiringan kotak terkecil
  • Histogram
  • Data mentah setelah disaring

CATATAN: Saya penulis.

dpmcmlxxvi
sumber
1

Ya alat yang dapat digunakan untuk menghitung statistik dan melihat distribusi dalam mode ASCII adalah ministat . Ini adalah alat dari FreeBSD, tetapi juga dikemas untuk distribusi Linux populer seperti Debian / Ubuntu.

Contoh penggunaan:

$ cat test.log 
Handled 1000000 packets.Time elapsed: 7.575278
Handled 1000000 packets.Time elapsed: 7.569267
Handled 1000000 packets.Time elapsed: 7.540344
Handled 1000000 packets.Time elapsed: 7.547680
Handled 1000000 packets.Time elapsed: 7.692373
Handled 1000000 packets.Time elapsed: 7.390200
Handled 1000000 packets.Time elapsed: 7.391308
Handled 1000000 packets.Time elapsed: 7.388075

$ cat test.log| awk '{print $5}' | ministat -w 74
x <stdin>
+--------------------------------------------------------------------------+
| x                                                                        |
|xx                                   xx    x x                           x|
|   |__________________________A_______M_________________|                 |
+--------------------------------------------------------------------------+
    N           Min           Max        Median           Avg        Stddev
x   8      7.388075      7.692373       7.54768     7.5118156    0.11126122
dr.
sumber
0

x¯n=(n1)x¯n1+xnn
sn2=Snn1
Sn=Sn1+(xnx¯n1)(xnx¯n).

x¯0=S0=0

Dennis
sumber
xiFLOAT_MAX-1.0xixi+1xixi1
Ini sebenarnya yang dilakukan clistats (lihat jawaban untuk detail dan fitur lainnya).
dpmcmlxxvi
0

Tersandung di thread lama ini mencari sesuatu yang lain. Menginginkan hal yang sama, tidak dapat menemukan sesuatu yang sederhana, begitu juga dalam perl, cukup sepele, tetapi menggunakannya beberapa kali sehari: http://moo.nac.uci.edu/~hjm/stats

contoh:

 $ ls -l | scut -f=4 | stats                
Sum       9702066453
Number    501
Mean      19365402.1017964
Median    4451
Mode      4096  
NModes    15
Min       0
Max       2019645440
Range     2019645440
Variance  1.96315423371944e+16
Std_Dev   140112605.91822
SEM       6259769.58393047
Skew      10.2405932543676
Std_Skew  93.5768354979843
Kurtosis  117.69005473429

(scut lebih lambat, tetapi bisa dibilang lebih mudah untuk versi cut): http://moo.nac.uci.edu/~hjm/scut dijelaskan: http://moo.nac.uci.edu/~hjm/scut_cols_HOWTO. html

Harry Mangalam
sumber
0

Alat lain: ringkasan-tsv dari TSV Utilities eBay . Mendukung banyak statistik ringkasan dasar, seperti min, maks, rata-rata, median, kuantil, standar deviasi, MAD, dan beberapa lainnya. Ini dimaksudkan untuk kumpulan data besar dan mendukung berbagai bidang dan pengelompokan berdasarkan kunci. Output dipisahkan tab. Contoh untuk urutan angka 1 hingga 1000, satu per baris:

$ seq 1000 | tsv-summarize --min 1 --max 1 --median 1 --sum 1
1   1000    500.5   500500

Header biasanya dihasilkan dari baris header di input. Jika input tidak memiliki header, dapat ditambahkan menggunakan -wsakelar:

$ seq 1000 | tsv-summarize -w --min 1 --max 1 --median 1 --sum 1
field1_min  field1_max  field1_median   field1_sum
1   1000    500.5   500500

Penafian: Saya penulis.

JonDeg
sumber