Công cụ dòng lệnh để tính toán số liệu thống kê cơ bản cho luồng giá trị [đã đóng]


27

Có công cụ dòng lệnh nào chấp nhận luồng số (ở định dạng ascii) từ đầu vào tiêu chuẩn và đưa ra các thống kê mô tả cơ bản cho luồng này, chẳng hạn như min, max, trung bình, trung bình, RMS, lượng tử, v.v.? Đầu ra được chào đón để được phân tích cú pháp bởi lệnh tiếp theo trong chuỗi dòng lệnh. Môi trường làm việc là Linux, nhưng các tùy chọn khác đều được chào đón.


1
Tôi khuyên bạn nên xem qua | STAT . Đó là một phần mềm khá cũ, nhưng nó rất thuận tiện cho những thứ như vậy. Ngoài ra còn có pyp , và một vài khác Un * x công cụ.
chl

@chl Liên kết ISTAT bị hỏng. Có thể cập nhật nó hoặc làm cho nó một câu trả lời, xin vui lòng?
Léo Léopold Hertz

1
@Masi Yup, có vẻ như trang không còn tồn tại. Đây là một liên kết cập nhật .
chl 16/07/2015

Câu trả lời:


22

Bạn có thể làm điều này với R , có thể là một chút quá mức ...

EDIT 2: [OOPS, trông giống như một người khác bị tấn công bằng Rupcript trong khi tôi đang thử lại cái này.] Tôi tìm thấy một cách dễ dàng hơn. Được cài đặt với R phải là Rupcript, có nghĩa là để làm những gì bạn đang cố gắng làm. Ví dụ: nếu tôi có một tệp barcó danh sách các số, mỗi tệp một dòng:

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

Sẽ chuyển các số đó thành R và chạy summarylệnh của R trên các dòng, trả về một cái gì đó như:

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

Bạn cũng có thể làm một cái gì đó như:

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

để có được lượng tử. Và rõ ràng bạn có thể cắt dòng đầu ra đầu tiên (có chứa nhãn) bằng một cái gì đó như:

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

Tôi thực sự khuyên bạn nên làm những gì bạn muốn trong tương tác R trước tiên, để đảm bảo bạn có lệnh chính xác. Khi thử điều này, tôi đã bỏ dấu ngoặc đơn đóng và Rupcript không trả về gì - không có thông báo lỗi, không có kết quả, chỉ là không có gì.

(Đối với bản ghi, thanh tệp chứa:

1
2
3
4
5
6

Vì vậy, tôi nên chuẩn bị lưu lượng của tôi với các Rlệnh đó?
mbaitoff

@mbaitoff: Vâng. Đối với thử nghiệm của mình, tôi đã tạo một tệp foochứa summary (as.numeric (readLines()))dòng đầu tiên, sau đó một mục dữ liệu số trên mỗi dòng cho phần còn lại của tệp. Đây readLines()chỉ là đọc từ stdin (đó là tất cả những gì tiếp theo, cho đến khi kết thúc tập tin).
Wayne

Có vẻ như chúng tôi bị mắc kẹt nghiêm trọng Rtrong cả hai câu trả lời, và nó dường như là một công cụ khổng lồ cho một nhiệm vụ nhỏ. Vâng, các câu trả lời hoạt động, nhưng dù sao, có gì khác ngoại trừ R?
mbaitoff

2
@mbaitoff: Bạn có thể sử dụng Python với scipy, đặc biệt nếu bạn đã sử dụng Python. Nếu bạn sử dụng / như Clojure (lisp dựa trên JVM, clojure.org ), thì sẽ có môi trường thống kê Incanter( incanter.org ) được xây dựng trên đó. Bạn cũng có thể thử gnu Octave.
Wayne

20

Hãy thử "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

Bạn cũng có thể xem tóm tắt năm số:

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

Bạn có thể tải nó ở đây:

https://github.com/nferraz/st

(TUYÊN BỐ TỪ CHỐI: Tôi đã viết công cụ này :))


Chào mừng đến với trang web, @ user2747481. Bạn có phiền khi trả lời câu trả lời này một chút không? Chúng tôi muốn câu trả lời của chúng tôi chủ yếu là khép kín. Vì bạn là người mới ở đây, bạn có thể muốn đọc trang giới thiệu của chúng tôi , nơi chứa thông tin cho người dùng mới.
gung - Phục hồi Monica

Cảm ơn! Kể từ năm 2019 stcó sẵn thông qua Homebrewbrew install st
Noah Sussman

Coi chừng đó stcũng có thể tham khảo simple terminal.
Skippy le Grand Gourou

10

R cung cấp một lệnh gọi là Rupcript . Nếu bạn chỉ có một vài số mà bạn có thể dán trên dòng lệnh, hãy sử dụng một lớp lót này:

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

kết quả trong

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

Nếu bạn muốn đọc từ đầu vào tiêu chuẩn, hãy sử dụng:

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

Nếu số trên đầu vào tiêu chuẩn được phân tách bằng trả về vận chuyển (tức là một số trên mỗi dòng), hãy sử dụng

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

Người ta có thể tạo bí danh cho các lệnh này:

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: Xin lỗi, tôi vừa tìm thấy Rupcript và chỉnh sửa câu trả lời của mình để đưa vào câu hỏi này, vì vậy chúng tôi đã kết thúc với một câu trả lời tương tự. read.tableÝ tưởng của bạn là một cách hay để đi xung quanh một mục mỗi dòng.
Wayne

Ok, cảm ơn vì sự công nhận và +1.
Arnaud A

3

datamash là một lựa chọn tuyệt vời khác Đó là từ Dự án GNU.

Nếu bạn có homebrew / linuxbrew, bạn có thể làm:

brew install datamash


2

Ngoài ra còn có r đơn giản, có thể làm hầu hết mọi thứ mà R có thể, nhưng với ít lần nhấn phím hơn:

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

Để tính toán thống kê mô tả cơ bản, người ta sẽ phải nhập một trong số:

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

Không có bất kỳ đơn giản-R!


2

Có sta, là một biến c ++ của st, cũng được tham chiếu trong các bình luận này.

Được viết bằng c ++, nó nhanh và có thể xử lý các bộ dữ liệu lớn. Cách sử dụng đơn giản, bao gồm lựa chọn các công cụ ước tính không thiên vị hoặc thiên vị và có thể xuất ra thông tin chi tiết hơn như lỗi tiêu chuẩn.

Bạn có thể tải sta tại github .

Tuyên bố miễn trừ trách nhiệm: Tôi là tác giả của sta .


1

Chỉ trong trường hợp, có datastat

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

một chương trình đơn giản để tính toán Linux các số liệu thống kê đơn giản từ dòng lệnh. Ví dụ,

tập tin mèo.dat | kho dữ liệu

sẽ xuất giá trị trung bình trên tất cả các hàng cho mỗi cột của file.dat. Nếu bạn cần biết độ lệch chuẩn, min, max, bạn có thể thêm các tùy chọn --dev, --min và --max tương ứng.

datastat có khả năng tổng hợp các hàng dựa trên giá trị của một hoặc nhiều cột "khóa".

Nó được viết bằng C ++, chạy nhanh và chiếm dụng bộ nhớ nhỏ và có thể được xử lý độc đáo bằng các công cụ khác như cắt, grep, sed, sort, awk, v.v.


1

Bạn cũng có thể xem xét sử dụng clistats . Nó là một công cụ giao diện dòng lệnh có cấu hình cao để tính toán số liệu thống kê cho một luồng các số đầu vào được phân tách.

Tùy chọn I / O

  • Dữ liệu đầu vào có thể từ một tệp, đầu vào tiêu chuẩn hoặc đường ống
  • Đầu ra có thể được ghi vào một tệp, đầu ra tiêu chuẩn hoặc một đường ống
  • Đầu ra sử dụng các tiêu đề bắt đầu bằng "#" để cho phép đường ống đến gnuplot

Tùy chọn phân tích cú pháp

  • Phát hiện dựa trên tín hiệu, cuối tệp hoặc dòng trống để dừng xử lý
  • Nhận xét và ký tự phân cách có thể được đặt
  • Cột có thể được lọc ra khỏi chế biến
  • Hàng có thể được lọc ra khỏi quá trình xử lý dựa trên ràng buộc số
  • Các hàng có thể được lọc ra khỏi quá trình xử lý dựa trên ràng buộc chuỗi
  • Hàng tiêu đề ban đầu có thể được bỏ qua
  • Số lượng hàng cố định có thể được xử lý
  • Dấu phân cách trùng lặp có thể được bỏ qua
  • Hàng có thể được định hình lại thành các cột
  • Thực thi nghiêm ngặt rằng chỉ các hàng có cùng kích thước được xử lý
  • Một hàng chứa tiêu đề cột có thể được sử dụng để thống kê đầu ra tiêu đề

Tùy chọn thống kê

  • Thống kê tóm tắt (Đếm, Tối thiểu, Trung bình, Tối đa, Độ lệch chuẩn)
  • Hiệp phương sai
  • Tương quan
  • Hình vuông nhỏ nhất bù
  • Độ dốc hình vuông nhỏ nhất
  • Biểu đồ
  • Dữ liệu thô sau khi lọc

LƯU Ý: Tôi là tác giả.


1

Công cụ Ya có thể được sử dụng để tính toán thống kê và xem phân phối trong chế độ ASCII là ministat . Đây là một công cụ từ FreeBSD, nhưng nó cũng được đóng gói để phân phối Linux phổ biến như Debian / Ubuntu.

Ví dụ sử dụng:

$ 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

Đây thực sự là những gì clistats làm (xem câu trả lời để biết chi tiết và các tính năng khác).
dpmcmlxxvi

0

Tình cờ tìm thấy chủ đề cũ này để tìm kiếm một cái gì đó khác. Muốn điều tương tự, không thể tìm thấy bất cứ điều gì đơn giản, cũng vậy, trong perl, khá tầm thường, nhưng sử dụng nó nhiều lần trong ngày: http://moo.nac.uci.edu/~hjm/stats

thí dụ:

 $ 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 là phiên bản cắt chậm hơn, nhưng có thể dễ dàng hơn): http://moo.nac.uci.edu/~hjm/scut mô tả: http://moo.nac.uci.edu/~hjm/scut_cols_HOWTO. html


0

Một công cụ khác: tóm tắt tsv từ Tiện ích TSV của eBay . Hỗ trợ nhiều thống kê tóm tắt cơ bản, như min, max, trung bình, trung vị, lượng tử, độ lệch chuẩn, MAD, và một vài thứ nữa. Nó được dành cho các bộ dữ liệu lớn và hỗ trợ nhiều trường và nhóm theo khóa. Đầu ra là tab tách. Một ví dụ cho chuỗi các số từ 1 đến 1000, mỗi dòng trên một dòng:

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

Tiêu đề thường được tạo từ một dòng tiêu đề trong đầu vào. Nếu đầu vào không có tiêu đề, người ta có thể thêm vào bằng cách sử dụng công -wtắc:

$ 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

Tuyên bố miễn trừ trách nhiệm: Tôi là tác giả.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.