मूल्यों की धारा के लिए बुनियादी आंकड़ों की गणना करने के लिए कमांड-लाइन टूल [बंद]


27

क्या कोई कमांड-लाइन टूल है जो मानक इनपुट से संख्याओं के प्रवाह (एससीआई प्रारूप में) को स्वीकार करता है और इस प्रवाह के लिए बुनियादी वर्णनात्मक आंकड़े देता है, जैसे कि न्यूनतम, अधिकतम, औसत, औसत, आरएमएस, क्वांटाइल्स आदि? आउटपुट का स्वागत कमांड-लाइन श्रृंखला में अगले कमांड द्वारा पार्स करने योग्य है। काम का माहौल लिनक्स है, लेकिन अन्य विकल्प स्वागत योग्य हैं।


1
मैं पर एक नज़र लेने के लिए सिफारिश करेंगे STAT | । यह एक बहुत पुराना सॉफ्टवेयर है, फिर भी यह इस तरह की चीजों के लिए बहुत सुविधाजनक है। वहाँ भी pyp , और कई अन्य Un * x उपकरण है।
chl

@chl लिंक ISTAT टूट गया। कृपया इसे अपडेट कर सकते हैं या इसका जवाब दे सकते हैं?
लियो लेपोल्ड हर्ट्ज़ '

1
@ मासी युप, ऐसा लगता है कि पृष्ठ अब मौजूद नहीं है। यहाँ एक अद्यतन लिंक है
CHL

जवाबों:


22

आप आर के साथ ऐसा कर सकते हैं , जो थोड़ा अधिक हो सकता है ...

EDIT 2: [OOPS, ऐसा लगता है कि जब मैं इसे रीटाइप कर रहा था तो किसी और को रुपये के साथ मारा गया।] मुझे एक आसान तरीका मिल गया। R के साथ स्थापित किया जाना चाहिए, जो कि आप जो करने की कोशिश कर रहे हैं, वह है। उदाहरण के लिए, यदि मेरे पास एक फाइल है barजिसमें संख्याओं की एक सूची है, तो प्रति पंक्ति एक:

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

उन नंबरों को R में पाइप करेंगे और R के summaryकमांड को लाइनों पर चलाएंगे , कुछ इस तरह से लौटाएंगे:

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

आप भी कुछ ऐसा कर सकते हैं:

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

मात्रा प्राप्त करने के लिए। और आप स्पष्ट रूप से उत्पादन की पहली पंक्ति को काट सकते हैं (जिसमें लेबल होते हैं) कुछ इस तरह से:

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

मैं अत्यधिक अनुशंसा करता हूं कि आप इंटरेक्टिव आर में पहले क्या चाहते हैं, यह सुनिश्चित करने के लिए कि आपके पास कमांड सही है। इसे आज़माने में, मैंने समापन कोष्ठक और रूपए रिटर्न को छोड़ दिया - कोई त्रुटि संदेश, कोई परिणाम नहीं, बस कुछ भी नहीं।

(रिकॉर्ड के लिए, फ़ाइल बार में है:

1
2
3
4
5
6

तो, मुझे उन Rआदेशों के साथ अपने प्रवाह को रोकना चाहिए ?
mbaitoff

@ मबैतॉफ़: हाँ। मेरे परीक्षण के लिए, मैंने एक फ़ाइल बनाई fooजिसमें summary (as.numeric (readLines()))इसकी पहली पंक्ति के रूप में था, फिर बाकी फ़ाइल के लिए प्रति पंक्ति एक संख्यात्मक डेटा आइटम। readLines()बस stdin से पढ़ रही है (जो क्या इस प्रकार के सभी है, फ़ाइल के अंत तक)।
वेन

ऐसा लगता है कि हम गंभीरता से Rदोनों जवाबों में फंस गए हैं , और यह एक छोटे से काम के लिए एक बड़ा उपकरण लगता है। खैर, जवाब काम करते हैं, लेकिन फिर भी, क्या इसके अलावा कुछ और है R?
mbaitoff

2
@mbaitoff: आप पायथन का उपयोग कर सकते हैं scipy, खासकर यदि आप पहले से ही पायथन का उपयोग करते हैं। यदि आप क्लोजर (जैसे JVM, clojure.org पर आधारित लिस्प ) का उपयोग करते हैं, तो उस पर बनाया गया Incanter( incanter.org ) सांख्यिकीय वातावरण है। आप ग्नू ऑक्टेव को भी आज़मा सकते हैं।
वेन

21

"सेंट" आज़माएँ:

$ 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

आप पाँच नंबर का सारांश भी देख सकते हैं:

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

आप द्वारा इसे यहां पर डाउनलोड किया जा सकता है:

https://github.com/nferraz/st

(अस्वीकरण: मैंने यह उपकरण लिखा है :))


साइट में आपका स्वागत है, @ user2747481। क्या आप इस सवाल का थोड़ा जवाब देंगे? हम चाहेंगे कि हमारे उत्तर अधिकतर स्व-निहित हों। चूंकि आप यहां नए हैं, आप हमारे पेज के बारे में पढ़ना चाह सकते हैं , जिसमें नए उपयोगकर्ताओं के लिए जानकारी है।
गंग -

धन्यवाद! 2019 stतक होमब्रेव के माध्यम से उपलब्ध हैbrew install st
नूह सुषमन

सावधान रहें कि stइसका संदर्भ भी हो सकता है simple terminal
स्किप्पी ले ग्रैंड गौरू

10

रु । नामक एक कमांड प्रदान करता है । यदि आपके पास केवल कुछ संख्याएँ हैं जिन्हें आप कमांड लाइन पर पेस्ट कर सकते हैं, तो इस एक लाइनर का उपयोग करें:

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

जिसके परिणामस्वरूप

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

यदि आप मानक इनपुट से पढ़ना चाहते हैं तो इसका उपयोग करें:

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

यदि मानक इनपुट पर संख्या को कैरिज रिटर्न (यानी प्रति पंक्ति एक नंबर) द्वारा अलग किया जाता है, तो उपयोग करें

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

इन आदेशों के लिए एक उपनाम बना सकते हैं:

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: क्षमा करें, मैंने अभी-अभी रु। पाई है और इसे शामिल करने के लिए अपने उत्तर को संपादित किया है, इसलिए हमने एक समान उत्तर के साथ समाप्त किया है। आपका read.tableविचार एक-आइटम-प्रति-पंक्ति प्राप्त करने का एक अच्छा तरीका है।
वेन

ठीक है, पावती और +1 के लिए धन्यवाद।
अरनौद ए

3

डेटामैश एक और बेहतरीन विकल्प है। यह जीएनयू प्रोजेक्ट से है।

यदि आपके पास homebrew / linuxbrew है तो आप कर सकते हैं:

brew install datamash


2

सरल-आर भी है, जो लगभग वह सब कुछ कर सकता है जो आर कर सकता है, लेकिन कम कीस्ट्रोक्स के साथ:

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

बुनियादी वर्णनात्मक आंकड़ों की गणना करने के लिए, किसी एक को टाइप करना होगा:

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

कोई सरल-आर नहीं मिलता है!


2

Sta है, जो कि इन टिप्पणियों में संदर्भित सेंट c c + वैरिएंट है।

C ++ में लिखा जा रहा है, यह तेज़ है और बड़े डेटासेट को संभाल सकता है। यह उपयोग करने के लिए सरल है, इसमें निष्पक्ष या पक्षपाती अनुमानकर्ताओं की पसंद शामिल है, और मानक त्रुटि जैसी अधिक विस्तृत जानकारी का उत्पादन कर सकती है।

आप stith को github पर डाउनलोड कर सकते हैं ।

डिस्क्लेमर: मैं sta का लेखक हूं ।


1

बस के मामले में, वहाँ datastat है

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

लिनक्स के लिए एक साधारण प्रोग्राम कमांड-लाइन से सरल आँकड़ों की गणना करता है। उदाहरण के लिए,

बिल्ली file.dat | datastat

file.dat के प्रत्येक कॉलम के लिए सभी पंक्तियों में औसत मूल्य का उत्पादन करेगा। यदि आपको मानक विचलन, न्यूनतम, अधिकतम जानने की आवश्यकता है, तो आप क्रमशः --dev, --min और --ax विकल्प जोड़ सकते हैं।

डेटासैट में एक या अधिक "कुंजी" कॉलम के मूल्य के आधार पर पंक्तियों को एकत्र करने की संभावना है।

यह C ++ में लिखा गया है, तेजी से और छोटे मेमोरी ऑक्यूपेशन के साथ चलता है, और इसे अन्य टूल्स जैसे कि कट, ग्रीप, सेड, सॉर्ट, अवेक, आदि के साथ अच्छी तरह से पाइप किया जा सकता है।


1

आप क्लिस्टेट्स का उपयोग करने पर भी विचार कर सकते हैं । यह सीमांकित इनपुट संख्याओं की एक धारा के लिए आँकड़ों की गणना करने के लिए एक उच्च विन्यास योग्य कमांड लाइन इंटरफ़ेस उपकरण है।

I / O विकल्प

  • इनपुट डेटा फ़ाइल, मानक इनपुट, या पाइप से हो सकता है
  • आउटपुट को फ़ाइल, मानक आउटपुट या पाइप में लिखा जा सकता है
  • आउटपुट हेडर का उपयोग करता है जो "#" के साथ शुरू होता है ताकि पाइपिंग को ग्नुप्लॉट में सक्षम किया जा सके

पार्सिंग विकल्प

  • प्रसंस्करण को रोकने के लिए सिग्नल, एंड-ऑफ-फ़ाइल या रिक्त लाइन आधारित पहचान
  • टिप्पणी और सीमांकक चरित्र सेट किया जा सकता है
  • स्तंभों को प्रसंस्करण से फ़िल्टर किया जा सकता है
  • नंबरों को संख्यात्मक बाधा के आधार पर प्रसंस्करण से फ़िल्टर किया जा सकता है
  • पंक्तियों को स्ट्रिंग बाधा के आधार पर प्रसंस्करण से फ़िल्टर किया जा सकता है
  • प्रारंभिक हेडर पंक्तियों को छोड़ दिया जा सकता है
  • निश्चित संख्या में पंक्तियों को संसाधित किया जा सकता है
  • डुप्लिकेट सीमांकक को अनदेखा किया जा सकता है
  • पंक्तियों को कॉलम में फिर से आकार दिया जा सकता है
  • सख्ती से लागू होता है कि केवल उसी आकार की पंक्तियों को संसाधित किया जाता है
  • स्तंभ शीर्षक वाली पंक्ति का उपयोग आउटपुट आँकड़ों को शीर्षक देने के लिए किया जा सकता है

सांख्यिकी विकल्प

  • सारांश आँकड़े (गणना, न्यूनतम, औसत, अधिकतम, मानक विचलन)
  • सहप्रसरण
  • सह - संबंध
  • कम से कम वर्ग ऑफसेट
  • कम से कम वर्गों का ढलान
  • हिस्टोग्राम
  • फ़िल्टर करने के बाद कच्चा डेटा

नोट: मैं लेखक हूँ।


1

हां उपकरण जो कि ASCII मोड में सांख्यिकी और दृश्य वितरण की गणना के लिए इस्तेमाल किया जा सकता है, वह मिनिस्टैट है । यह FreeBSD से एक उपकरण है, लेकिन यह डेबियन / उबंटू जैसे लोकप्रिय लिनक्स वितरण के लिए भी पैक किया गया है।

उपयोग उदाहरण:

$ 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

यह वास्तव में क्लिस्टेट्स क्या करता है (विवरण और अन्य सुविधाओं के लिए उत्तर देखें)।
dpmcmlxxvi

0

इस पुराने धागे में कुछ और की तलाश में ठोकर खाई। एक ही चीज़ चाहते थे, कुछ भी सरल नहीं पा सकते थे, इसलिए इसे बहुत ही तुच्छ माना जाता था, लेकिन इसे दिन में कई बार इस्तेमाल करते हैं: http://moo.nac.uci.edu/~hjm/stats

उदाहरण:

 $ 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

(स्कट एक धीमी, लेकिन यकीनन कट के संस्करण के लिए आसान है): http://moo.nac.uci.edu/~hjm/scut वर्णित: http://moo.nac.uci.edu/~hjm-scut_cols_HOWTO। एचटीएमएल


0

एक और उपकरण: eBay का TSV यूटिलिटीज से tsv-संक्षेप । मूल सारांश के कई आंकड़ों का समर्थन करता है, जैसे कि न्यूनतम, अधिकतम, माध्य, माध्य, क्वांटिल, मानक विचलन, एमएडी और कुछ और। यह बड़े डेटासेट के लिए अभिप्रेत है और कुंजी द्वारा कई क्षेत्रों और समूहीकरण का समर्थन करता है। आउटपुट टैब अलग है। संख्या 1 से 1000 के अनुक्रम के लिए एक उदाहरण, प्रति पंक्ति एक:

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

हेडर आम तौर पर इनपुट में एक हेडर लाइन से उत्पन्न होते हैं। यदि इनपुट में हेडर नहीं है तो -wस्विच का उपयोग करके जोड़ा जा सकता है :

$ 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

डिस्क्लेमर: मैं लेखक हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.