用于计算值流的基本统计数据的命令行工具

机器算法验证 描述性统计 计算统计
2022-01-16 01:32:07

是否有任何命令行工具可以接受来自标准输入的数字流(以 ascii 格式)并提供该流的基本描述性统计信息,例如最小值、最大值、平均值、中值、RMS、分位数等?欢迎使用命令行链中的下一个命令解析输出。工作环境是 Linux,但欢迎使用其他选项。

4个回答

你可以用R来做到这一点,这可能有点矫枉过正......

编辑 2:[哎呀,当我重新输入此内容时,看起来像其他人一样Rscript。] 我找到了一种更简单的方法。与 R 一起安装应该是Rscript,这意味着做你想做的事情。例如,如果我有一个包含bar数字列表的文件,每行一个:

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

将文件中的数字发送到 R 并在行summary上运行 R 的命令,返回如下内容:

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

您还可以执行以下操作:

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

得到分位数。您显然可以使用以下内容切断第一行输出(包含标签):

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

我强烈建议您首先在交互式 R 中做您想做的事情,以确保您的命令正确。在尝试这个时,我省略了右括号,Rscript 什么也不返回——没有错误消息,没有结果,什么也没有。

(作为记录,文件栏包含:

1
2
3
4
5
6

试试“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

(免责声明:我写了这个工具:))

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

datamash是另一个不错的选择。它来自 GNU 项目。

如果你有 homebrew / linuxbrew 你可以这样做:

brew install datamash