Değer akışı için temel istatistikleri hesaplamak için komut satırı aracı [kapalı]


27

Standart girdiden sayı akışını (ascii formatında) kabul eden ve bu akış için min, max, ortalama, ortanca, RMS, quantiles vb. Gibi temel tanımlayıcı istatistikleri veren herhangi bir komut satırı aracı var mı? Çıktı, komut satırı zincirindeki bir sonraki komut tarafından ayrıştırılabilir. Çalışma ortamı Linux, ancak diğer seçenekler açıktır.


1
| STAT bir göz atmanızı tavsiye ederim . Bu oldukça eski bir yazılım, ancak bu tür şeyler için çok uygun. Ayrıca, pyp ve diğer bazı Un * x araçları da var.
chl

@chl Bağlantı ISTAT bozuk. Güncelleyebilir veya bir cevap verebilir misiniz, lütfen?
Léo Léopold Hertz 준영

1
@Masi Yup, artık sayfa yok gibi görünüyor. İşte güncellenmiş bir link .
chl

Yanıtlar:


22

Bunu R ile yapabilirsiniz , ki biraz fazladan olabilir ...

EDIT 2: [OOPS, bunu yazarken Rscript ile bir başkasına çarptığını düşünüyorum.] Daha kolay bir yol buldum. R yüklü, Rscript olmalı, yani yapmaya çalıştığınız şeyi yapmalı. Örneğin, barnumara listesine sahip bir dosyam varsa, her satıra bir tane:

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

Bu sayıları R'ye aktarır ve summarysatırlardaki R komutunu çalıştırır , şöyle bir şey döndürür:

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

Ayrıca şöyle bir şey yapabilirsiniz:

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

miktarları almak için. Ve açıkçası ilk çıktı satırını (etiket içeren) aşağıdaki gibi kesebilirsiniz:

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

Komutun doğru olduğundan emin olmak için ilk önce etkileşimli R'de istediğini yapmanı şiddetle tavsiye ederim. Bunu denemede kapanış parantezini bıraktım ve Rscript hiçbir şey döndürmedi - hata mesajı yok, sonuç yok, sadece hiçbir şey.

(Kayıt için, dosya çubuğu şunları içerir:

1
2
3
4
5
6

Öyleyse bu Rkomutlarla akışımı hazırlamalıyım?
mbaitoff

@mbaitoff: Evet. fooTestim için summary (as.numeric (readLines()))ilk satırını içeren bir dosya oluşturdum , sonra dosyanın geri kalanı için satır başına bir sayısal veri maddesi oluşturdum. Bu readLines()sadece stdin'den (ki bunların tümü, dosyanın sonuna kadar) okuyor.
Wayne

RHer iki cevapta da ciddi bir şekilde sıkışıp kaldık ve küçük bir görev için çok büyük bir araç gibi görünüyor. Cevaplar işe yarıyor ama yine de dışında başka bir şey var Rmı?
mbaitoff

2
@mbaitoff: scipyÖzellikle Python kullanıyorsanız Python ile birlikte kullanabilirsiniz. Clojure kullanıyorsanız (like JVM, clojure.org'a göre lisp ), bunun üzerine inşa edilmiş Incanter( incanter.org ) istatistik ortamı var. GNU Octave'ı da deneyebilirsiniz.
Wayne

21

"St" yi deneyin:

$ 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

Beş sayı özetini de görebilirsiniz:

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

Buradan indirebilirsiniz:

https://github.com/nferraz/st

(YASAL UYARI: Bu aracı yazdım :))


Siteye Hoşgeldiniz @ user2747481. Bu cevabı biraz çözebilir misin? Cevaplarımızın çoğunlukla kendi içinde yer almasını istiyoruz. Burada yeni olduğunuz için, yeni kullanıcılar için bilgiler içeren sayfamız hakkında bilgi edinmek isteyebilirsiniz .
gung - Monica'yı yeniden yerleştirme

Teşekkürler! 2019 itibariyle, stHomebrewbrew install st
Noah Sussman'dan

stAyrıca başvuruda bulunabilir dikkat edin simple terminal.
Skippy le Grand Gourou,

10

R, Rscript adlı bir komut sağlar . Komut satırına yapıştırabileceğiniz yalnızca birkaç numaranız varsa, bu astarı kullanın:

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

hangi sonuçlanır

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

Standart girişten okumak istiyorsanız şunu kullanın:

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

Standart girişteki sayı, satır başına (örneğin satır başına bir sayı) satır başı ile ayrılırsa,

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

Kişi bu komutlar için takma adlar oluşturabilir:

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

+1: Üzgünüm, Rscript'i buldum ve cevabımı buna dahil etmek için düzenledim, bu yüzden benzer bir cevap bulduk. Fikriniz read.table, satır başına bir öğeyi dolaşmanın iyi bir yolu.
Wayne

Tamam, teşekkür ve + 1 için teşekkürler.
Arnaud A

3

datamash başka bir harika seçenek. GNU Projesi'nden.

Eğer homebrew / linuxbrew kullanıyorsanız:

brew install datamash


2

Ayrıca, r'nin yapabileceği her şeyi yapabilen, ancak daha az tuşa basarak basit-r vardır:

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

Temel tanımlayıcı istatistikleri hesaplamak için birinin aşağıdakilerden birini yazması gerekir:

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

Herhangi bir basit-R almaz!


2

Bu açıklamalarda da başvuruda bulunulan c ++ değişkeni olan sta var.

C ++ ile yazıldığından hızlı ve büyük veri kümelerini işleyebilir. Kullanımı kolaydır, tarafsız veya taraflı tahmin edicilerin seçimini içerir ve standart hata gibi daha ayrıntılı bilgiler verebilir.

En sta indirebilirsiniz github .

Yasal Uyarı: Ben sta yazarıyım .


1

Sadece durumda, veri var

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

Linux için basit bir program komut satırından basit istatistikleri hesaplama. Örneğin,

cat file.dat | datastat

file.dat'ın her sütunu için tüm satırlardaki ortalama değeri çıkartacaktır. Standart sapmayı bilmeniz gerekiyorsa, min, maks, sırasıyla --dev, --min ve --max seçeneklerini ekleyebilirsiniz.

Datastat, bir veya daha fazla "anahtar" sütunun değerine dayanarak satırları toplama olanağına sahiptir.

C ++ ile yazılmış, hızlı ve küçük bellek kullanımıyla çalışıyor ve kesilmiş, grep, sed, sort, awk, vb. Gibi diğer araçlarla kolayca yönlendirebiliyor.


1

Ayrıca pıhtı kullanmayı da düşünebilirsiniz . Sınırlandırılmış giriş numaraları akışına ilişkin istatistikleri hesaplamak için oldukça yapılandırılabilir bir komut satırı arabirim aracıdır.

G / Ç seçenekleri

  • Giriş verileri bir dosyadan, standart girişden veya bir borudan gelebilir
  • Çıktı bir dosyaya, standart çıktıya veya bir boruya yazılabilir
  • Çıktı, boruların gnuplot'a bağlanmasını sağlamak için "#" ile başlayan başlıkları kullanır.

Ayrıştırma seçenekleri

  • İşlemi durdurmak için sinyal, dosya sonu veya boş satır tabanlı algılama
  • Yorum ve sınırlayıcı karakteri ayarlanabilir
  • Sütunlar işlemden filtrelenebilir
  • Sayısal kısıtlamaya dayalı olarak işlemden satırlar filtrelenebilir
  • Satırlar dize sınırlamasına göre işlemden filtrelenebilir
  • İlk başlık satırları atlanabilir
  • Sabit sayıda satır işlenebilir
  • Yinelenen sınırlayıcılar yoksayılabilir
  • Satırlar sütunlara yeniden şekillendirilebilir
  • Yalnızca aynı boyuttaki satırların işlenmesini kesin olarak uygulayın
  • Çıktı istatistiklerine başlık vermek için sütun başlıklarını içeren bir satır kullanılabilir

İstatistik seçenekleri

  • Özet istatistikler (Sayı, Minimum, Ortalama, Maksimum, Standart sapma)
  • Kovaryans
  • bağıntı
  • En küçük kareler ofset
  • En küçük kareler eğimi
  • Histogram
  • Filtrelemeden sonraki ham veriler

NOT: Ben yazarım.


1

ASCII modunda istatistikleri hesaplamak ve dağılımını görüntülemek için kullanılabilecek ya aracı ministat . FreeBSD'den bir araçtır, ancak Debian / Ubuntu gibi popüler Linux dağıtımları için de paketlenmiştir.

Kullanım örneği:

$ 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

0

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

x¯0=S0=0


xiFLOAT_MAX-1.0xixi+1xixi1

Aslında bu klibinlerin yaptığı şeydir (ayrıntılar ve diğer özellikler için cevaba bakınız).
dpmcmlxxvi

0

Başka bir şey aramak için bu eski iplik boyunca tökezledi. Aynı şeyi istedi, basit bir şey bulamadı, bu yüzden perl, oldukça önemsizdi, ancak günde birkaç kez kullandı: http://moo.nac.uci.edu/~hjm/stats

örnek:

 $ 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 daha yavaş, ancak kesim sürümünün tartışmalı şekilde daha kolay): http://moo.nac.uci.edu/~hjm/scut : http://moo.nac.uci.edu/~hjm/scut_cols_HOWTO html


0

Başka bir araç: tsv , eBay'in TSV Yardımcı Programlarından özetler . Min, max, ortalama, ortanca, miktarlar, standart sapma, MAD ve daha fazlası gibi temel özet istatistiklerin çoğunu destekler. Büyük veri kümeleri için tasarlanmıştır ve birden çok alanı ve anahtarla gruplamayı destekler. Çıktı sekme ile ayrılmıştır. Her satıra bir tane olmak üzere 1 ila 1000 sayı dizisi için bir örnek:

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

Başlıklar normal olarak girdideki bir başlık satırından oluşturulur. Girişin başlığı yoksa, -wanahtar kullanılarak bir tane eklenebilir :

$ 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

Yasal Uyarı: Ben yazarım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.