我正在寻找一些方便的程序/脚本,我可以通过 stdin 将数据泵入其中,并可以向我显示一些输入数据的基本统计数据。例如 - 提供一组由换行符分隔的值,我希望获得:
- 所有值的平均值
- 除 5% 最小值和 5% 最大值外的数据平均值
- 标准差
是的 - 我知道,可以用 bash 或 awk 来完成,但也许你已经知道一些方便的东西?
附言:
我完全了解像八度、r 和其他一些“大炮” - 但我需要一些更简单的东西。
谢谢
答案1
这个小小的 AWK 片段将完成您所寻找的部分内容:
awk '{sum += $0; count++; vals[$0]++} END {mean = sum / count; print "Total: ", sum; print "Mean: ", mean; for (i in vals){ s += vals[i] * ((i - mean) ** 2) }; print "Standard Dev: ", sqrt(s/count)}' datafile
下降 5% 的部分会稍微复杂一些,取决于你具体的意思。
我知道您正在寻找一些现成的东西,但除了使用 R、Octave、SAS 或 SPSS 之外,我什么都不知道。
编辑:修正公式
答案2
您可以尝试类似的方法;
perl -e 'use List::Util qw(sum);while($r = <>){push (@array, $r)}; print sum(@array) / @array';
得到平均值。你可以安装 Statistics::Descriptive 包 http://search.cpan.org/~colink/Statistics-Descriptive-2.6/Descriptive.pm
满足其他要求所需的操作。stdev 可能很容易,另一个需要多几行进行排序和过滤。(毫无疑问可以在一行中完成...;-)
答案3
R 可能正是您要找的东西,也可能完全超出您的目的。从您的问题很难判断。
无论如何,看看吧http://en.wikipedia.org/wiki/R_(programming_language)
答案4
第一个和最后一个项目是可以做到的(我已经做过几次了),无需在内存中维护整个数据集,也无需提前知道项目总数。中间的项目(删除异常值)更具挑战性,需要在 RAM 中维护整个列表,或者至少提前知道项目总数。
我不知道有任何简单的预构建工具可以完成这些任务(尽管 Octave 和 R 听起来好像是这样的)。