標準入力から(ASCII形式の)数値のフローを受け入れ、最小、最大、平均、中央値、RMS、変位値など、このフローの基本的な記述統計を提供するコマンドラインツールはありますか?出力は、コマンドラインチェーンの次のコマンドで解析できることを歓迎します。作業環境はLinuxですが、他のオプションも歓迎します。
標準入力から(ASCII形式の)数値のフローを受け入れ、最小、最大、平均、中央値、RMS、変位値など、このフローの基本的な記述統計を提供するコマンドラインツールはありますか?出力は、コマンドラインチェーンの次のコマンドで解析できることを歓迎します。作業環境はLinuxですが、他のオプションも歓迎します。
回答:
Rでこれを行うことができますが、少しやり過ぎかもしれません...
編集2:[OOPS、これを再入力しているときに他の誰かがRscriptでヒットしたように見えます。]私はもっと簡単な方法を見つけました。Rと共にインストールされるのはRscriptである必要があります。たとえば、bar
1行に1つずつ、数字のリストがあるファイルがある場合:
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
コマンドをフローの先頭に追加する必要がありますか?
foo
を含むファイルを作成し、ファイルsummary (as.numeric (readLines()))
の残りの行ごとに1つの数値データ項目を作成しました。これreadLines()
は、stdinから読み取っているだけです(ファイルの最後まで、これはすべて続きます)。
R
両方の答えに真剣にこだわっているように見えますが、それは小さなタスクのための巨大なツールのようです。さて、答えは機能しますが、とにかく、他に何か他のものはありますR
か?
scipy
特にPythonを既に使用している場合は、でPythonを使用できます。Clojure(JVMに基づくlisp、clojure.org)を使用/使用する場合、それに基づいて構築されたIncanter
(incanter.org)統計環境があります。gnu Octaveを試すこともできます。
「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
また、5つの数字の要約を見ることができます。
$ seq 1 10 | st --summary
min q1 median q3 max
1 3.5 5.5 7.5 10
こちらからダウンロードできます:
(免責事項:私はこのツールを書きました:))
st
Homebrewbrew install st
st
も参照する可能性があることに注意してくださいsimple terminal
。
RはRscriptと呼ばれるコマンドを提供します。コマンドラインに貼り付けることができる数が少ない場合は、この1つのライナーを使用します。
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"))))'
標準入力の数字がキャリッジリターン(つまり、1行に1つの数字)で区切られている場合、
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
read.table
アイデアは、1行に1項目を回避する良い方法です。
datamashはもう 1つの優れたオプションです。GNUプロジェクトからです。
homebrew / linuxbrewがある場合は、次のことができます。
brew install datamash
simple-rもあります。これは、Rができることのほとんどすべてを実行できますが、キーストロークは少なくて済みます。
https://code.google.com/p/simple-r/
基本的な記述統計を計算するには、次のいずれかを入力する必要があります。
r summary file.txt
r summary - < file.txt
cat file.txt | r summary -
simple-Rを取得しません!
念のため、データスタットがあります
https://sourceforge.net/p/datastat/code/
コマンドラインからの単純な統計を計算するLinux用の単純なプログラム。例えば、
cat file.dat | datastat
file.datの各列のすべての行の平均値を出力します。標準偏差min、maxを知る必要がある場合は、それぞれ--dev、-min、および--maxオプションを追加できます。
datastatは、1つ以上の「キー」列の値に基づいて行を集約する可能性があります。
C ++で書かれており、高速でメモリ使用量が少なく、cut、grep、sed、sort、awkなどの他のツールでうまくパイプできます。
clistatsの使用を検討することもできます。区切り文字で区切られた入力番号のストリームの統計を計算するための高度に構成可能なコマンドラインインターフェイスツールです。
注:私は著者です。
ASCIIモードで統計の計算と分布の表示に使用できるYaツールはministatですです。FreeBSDのツールですが、Debian / Ubuntuなどの一般的なLinuxディストリビューション用にパッケージ化されています。
使用例:
$ 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
他の何かを探しているこの古いスレッドに出くわしました。同じことを望んでいて、簡単なものを見つけることができなかったので、perlでそれはかなり簡単でしたが、1日に複数回使用しました: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は低速ですが、おそらくcutのバージョンよりも簡単です):http ://moo.nac.uci.edu/~hjm/scutの 説明: http ://moo.nac.uci.edu/~hjm/scut_cols_HOWTO 。 html
別のツール:TSV-まとめたものから、eBayのTSVユーティリティ。最小、最大、平均、中央値、分位数、標準偏差、MADなどの基本的な要約統計の多くをサポートします。大規模なデータセットを対象としており、複数のフィールドとキーによるグループ化をサポートしています。出力はタブ区切りです。1〜1000の数字のシーケンスの例(1行に1つ):
$ 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
免責事項:私は著者です。