เครื่องมือบรรทัดคำสั่งเพื่อคำนวณสถิติพื้นฐานสำหรับกระแสค่า [ปิด]


27

มีเครื่องมือบรรทัดคำสั่งใดบ้างที่ยอมรับการไหลของตัวเลข (ในรูปแบบ ascii) จากอินพุตมาตรฐานและให้สถิติเชิงพรรณนาพื้นฐานสำหรับโฟลว์นี้เช่น min, max, average, median, RMS, quantiles และอื่น ๆ ? เอาต์พุตยินดีที่จะแยกวิเคราะห์โดยคำสั่งถัดไปในห่วงโซ่บรรทัดคำสั่ง สภาพแวดล้อมการทำงานคือ Linux แต่มีตัวเลือกอื่น ๆ ยินดีต้อนรับ


1
ผมอยากจะแนะนำให้ดูที่| STAT มันเป็นซอฟต์แวร์ที่ค่อนข้างเก่า แต่มันก็สะดวกสำหรับสิ่งเหล่านี้ นอกจากนี้ยังมีPYPและหลาย อื่น ๆ Un * x เครื่องมือ
chl

@chl Link ISTAT เสีย โปรดอัปเดตหรือทำให้เป็นคำตอบได้ไหม
LéoLéopold Hertz 준영

1
@Masi Yup ดูเหมือนว่าหน้าจะไม่มีอยู่อีกต่อไป นี่คือการเชื่อมโยงการปรับปรุง
chl

คำตอบ:


22

คุณสามารถทำได้ด้วยRซึ่งอาจจะเกินความเป็นไปได้ ...

แก้ไข 2: [OOPS ดูเหมือนว่ามีคนอื่นตี Rscript ขณะที่ฉันพิมพ์ใหม่นี้] ฉันพบวิธีที่ง่ายกว่า การติดตั้งด้วย R ควรเป็น Rscript ซึ่งมีไว้เพื่อทำสิ่งที่คุณพยายามจะทำ ตัวอย่างเช่นถ้าฉันมีไฟล์barที่มีรายการตัวเลขหนึ่งรายการต่อบรรทัด:

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

จะไพพ์ตัวเลขเหล่านั้นลงใน R และรันsummaryคำสั่งR บนบรรทัดแล้วคืนค่าดังนี้:

   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

ฉันอยากจะแนะนำให้ทำสิ่งที่คุณต้องการในการโต้ตอบ R ก่อนเพื่อให้แน่ใจว่าคุณมีคำสั่งที่ถูกต้อง ในการลองนี้ฉันออกจากวงเล็บปิดและ Rscript ไม่ส่งคืนอะไร - ไม่มีข้อความแสดงข้อผิดพลาดไม่มีผลลัพธ์ไม่มีอะไรเลย

(สำหรับการบันทึกแถบไฟล์ประกอบด้วย:

1
2
3
4
5
6

ดังนั้นฉันควรเสริมโฟลว์ของฉันด้วยRคำสั่งเหล่านั้น
mbaitoff

@mbaitoff: ใช่ สำหรับการทดสอบของฉันฉันสร้างไฟล์fooที่มีsummary (as.numeric (readLines()))บรรทัดแรกแล้วรายการข้อมูลตัวเลขหนึ่งรายการต่อบรรทัดสำหรับไฟล์ที่เหลือ readLines()เป็นเพียงการอ่านจาก stdin (ซึ่งเป็นทุกสิ่งต่อไปจนกว่าจะสิ้นสุดของไฟล์)
Wayne

ดูเหมือนว่าเราติดอยู่กับRคำตอบทั้งสองอย่างจริงจังและดูเหมือนจะเป็นเครื่องมือขนาดใหญ่สำหรับงานเล็ก ๆ คำตอบใช้ได้ผล แต่มีอะไรอย่างอื่นอีกRบ้างไหม?
mbaitoff

2
@mbaitoff: คุณสามารถใช้ Python ได้scipyโดยเฉพาะถ้าคุณใช้ Python อยู่แล้ว หากคุณใช้ / ชอบ Clojure (เสียงกระเพื่อมตาม JVM, clojure.org ) มีสภาพแวดล้อมทางสถิติIncanter( incanter.org ) สร้างขึ้นบนที่ คุณสามารถลอง gnu Octave ได้เช่นกัน
Wayne

21

ลอง "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

คุณยังสามารถดูสรุปหมายเลขห้า:

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

คุณสามารถดาวน์โหลดได้ที่นี่:

https://github.com/nferraz/st

(หมายเหตุ: ฉันเขียนเครื่องมือนี้ :))


ยินดีต้อนรับสู่เว็บไซต์ @ user2747481 คุณจะรังเกียจคำตอบนี้บ้างไหม? เราต้องการคำตอบของตัวเองเป็นส่วนใหญ่ เนื่องจากคุณยังใหม่ที่นี่คุณอาจต้องการอ่านหน้าเกี่ยวกับของเราซึ่งมีข้อมูลสำหรับผู้ใช้ใหม่
gung - Reinstate Monica

ขอบคุณ! ตั้งแต่ 2019 stให้บริการผ่าน Homebrewbrew install st
Noah Sussman

ระวังว่าอาจจะมีการอ้างอิงถึงst simple terminal
Skippy le Grand Gourou

10

R ให้คำสั่งที่เรียกว่าRscript หากคุณมีตัวเลขเพียงไม่กี่ตัวที่คุณสามารถวางลงบนบรรทัดคำสั่งได้ให้ใช้ตัวซับนี้:

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: ขออภัยฉันเพิ่งพบ Rscript และแก้ไขคำตอบของฉันเพื่อรวมสิ่งนี้ดังนั้นเราจึงได้คำตอบที่คล้ายกัน read.tableความคิดของคุณเป็นวิธีที่ดีในการรับหนึ่งรายการต่อบรรทัด
Wayne

ตกลงขอบคุณสำหรับการตอบรับและ +1
Arnaud A


2

นอกจากนี้ยังมี simple-r ซึ่งสามารถทำเกือบทุกอย่างที่ R สามารถทำได้ แต่ใช้การกดแป้นน้อย:

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

ในการคำนวณสถิติเชิงพรรณนาขั้นพื้นฐานคุณจะต้องพิมพ์หนึ่งใน:

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

ไม่ได้ง่าย ๆ -R!


2

มี sta ซึ่งเป็น c ++ varient ของ st ยังอ้างอิงในความคิดเห็นเหล่านี้

การเขียนด้วย c ++ มันรวดเร็วและสามารถรองรับชุดข้อมูลขนาดใหญ่ได้ มันใช้งานง่ายรวมถึงตัวเลือกของตัวประมาณค่าแบบเอนเอียงหรือเอนเอียงและสามารถส่งออกข้อมูลรายละเอียดเพิ่มเติมเช่นข้อผิดพลาดมาตรฐาน

คุณสามารถดาวน์โหลด STA ที่GitHub

Disclaimer: ผมผู้เขียนของSTA


1

ในกรณีที่มี datastat

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

เป็นโปรแกรมอย่างง่ายสำหรับการคำนวณสถิติอย่างง่ายของ Linux จากบรรทัดคำสั่ง ตัวอย่างเช่น,

cat file.dat | datastat

จะส่งออกค่าเฉลี่ยในทุกแถวสำหรับแต่ละคอลัมน์ของ file.dat หากคุณต้องการทราบค่าเบี่ยงเบนมาตรฐาน, min, max, คุณสามารถเพิ่มตัวเลือก - เดฟ, - นาทีและ - แม็กซ์ตามลำดับ

datastat มีความเป็นไปได้ที่จะรวมแถวตามค่าของคอลัมน์ "คีย์" หนึ่งคอลัมน์หรือมากกว่า

มันเขียนใน C ++, ทำงานได้อย่างรวดเร็วและมีหน่วยความจำขนาดเล็กและสามารถใช้กับเครื่องมืออื่น ๆ เช่น cut, grep, sed, sort, awk เป็นต้น


1

นอกจากนี้คุณยังอาจพิจารณาใช้clistats มันเป็นเครื่องมืออินเตอร์เฟสบรรทัดคำสั่งที่สามารถกำหนดค่าได้สูงเพื่อคำนวณสถิติสำหรับสตรีมของหมายเลขอินพุตที่คั่นด้วย

ตัวเลือก I / O

  • ข้อมูลอินพุตได้จากไฟล์อินพุตมาตรฐานหรือไพพ์
  • สามารถเขียนเอาต์พุตไปยังไฟล์เอาต์พุตมาตรฐานหรือไพพ์ได้
  • เอาต์พุตใช้ส่วนหัวที่ขึ้นต้นด้วย "#" เพื่อเปิดใช้งาน piping ไปยัง gnuplot

ตัวเลือกการแยก

  • การตรวจจับที่อ้างอิงสัญญาณ, สิ้นสุดไฟล์หรือบรรทัดว่างเพื่อหยุดการประมวลผล
  • สามารถตั้งค่าความคิดเห็นและอักขระตัวคั่น
  • คอลัมน์สามารถกรองออกจากการประมวลผล
  • แถวสามารถกรองออกจากการประมวลผลตามข้อ จำกัด ที่เป็นตัวเลข
  • แถวสามารถกรองออกจากการประมวลผลตามข้อ จำกัด ของสตริง
  • แถวส่วนหัวเริ่มต้นสามารถข้ามได้
  • สามารถประมวลผลจำนวนแถวคงที่ได้
  • ตัวคั่นที่ซ้ำกันสามารถถูกละเว้นได้
  • แถวสามารถปรับเปลี่ยนเป็นคอลัมน์ได้
  • บังคับใช้อย่างเคร่งครัดว่าประมวลผลแถวที่มีขนาดเท่ากันเท่านั้น
  • แถวที่มีชื่อคอลัมน์สามารถใช้เพื่อตั้งชื่อสถิติผลลัพธ์

ตัวเลือกสถิติ

  • สถิติสรุป (นับ, ต่ำสุด, ค่าเฉลี่ย, สูงสุด, ส่วนเบี่ยงเบนมาตรฐาน)
  • แปรปรวน
  • ความสัมพันธ์
  • ชดเชยกำลังสองน้อยที่สุด
  • สี่เหลี่ยมลาดเอียงน้อยที่สุด
  • histogram
  • ข้อมูลดิบหลังการกรอง

หมายเหตุ: ฉันเป็นผู้เขียน


1

เครื่องมือ Ya ซึ่งสามารถนำมาใช้สำหรับการคำนวณสถิติและการกระจายมุมมองในโหมด ASCII เป็นministat มันเป็นเครื่องมือจาก FreeBSD แต่มันก็บรรจุสำหรับการแจกจ่าย Linux ที่ได้รับความนิยมเช่น Debian / Ubuntu

ตัวอย่างการใช้งาน:

$ 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=(n-1)x¯n-1+xnn
Sn=Sn-1+(x
sn2=Snn-1
Sn=Sn-1+(xn-x¯n-1)(xn-x¯n).

x¯0=S0=0


ลองกับเทียบเท่าหรือกับx i - x i + 1xผมFLOAT_MAX-1.0xผม-xผม+1xผม-xผม-1

นี่คือสิ่งที่clistatsทำ (ดูคำตอบสำหรับรายละเอียดและคุณสมบัติอื่น ๆ )
dpmcmlxxvi

0

เจอสิ่งเก่า ๆ ที่มองหาสิ่งอื่น ต้องการสิ่งเดียวกันไม่สามารถหาอะไรง่ายๆได้ดังนั้นจึงทำได้ในภาษา Perl ที่ไม่สำคัญ แต่ใช้วันละหลายครั้ง: 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

(scut ช้าลง แต่เนื้อหาตัดง่ายกว่า): http://moo.nac.uci.edu/~hjm/scut อธิบาย: http://moo.nac.uci.edu/~hjm/scut_cols_HOWTO HTML


0

เครื่องมืออื่น ๆ : TSV-สรุปจากอีเบย์ TSV ยูทิลิตี้ รองรับสถิติสรุปพื้นฐานหลายอย่างเช่น min, max, Mean, มัธยฐาน, quantiles, ส่วนเบี่ยงเบนมาตรฐาน, MAD และอีกมากมาย มันมีไว้สำหรับชุดข้อมูลขนาดใหญ่และรองรับหลายสาขาและการจัดกลุ่มโดยคีย์ เอาท์พุทแท็บแยกออกจากกัน ตัวอย่างสำหรับลำดับของตัวเลข 1 ถึง 1,000 หนึ่งรายการต่อบรรทัด:

$ 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

คำเตือน: ฉันเป็นผู้เขียน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.