値のストリームの基本的な統計を計算するコマンドラインツール[終了]


27

標準入力から(ASCII形式の)数値のフローを受け入れ、最小、最大、平均、中央値、RMS、変位値など、このフローの基本的な記述統計を提供するコマンドラインツールはありますか?出力は、コマンドラインチェーンの次のコマンドで解析できることを歓迎します。作業環境はLinuxですが、他のオプションも歓迎します。


1
| STATをご覧になることをお勧めします。それはかなり古いソフトウェアですが、そのようなことには非常に便利です。ありますPYP、およびいくつかの のUn * xのツールが。
chl

@chlリンクISTATが壊れています。それを更新するか、答えにしてください。
レオレオポルトヘルツ준영

1
@Masi Yup、ページがもう存在しないようです。ここに更新されたリンクがあります。
chl

回答:


22

Rでこれを行うことができますが、少しやり過ぎかもしれません...

編集2:[OOPS、これを再入力しているときに他の誰かがRscriptでヒットしたように見えます。]私はもっと簡単な方法を見つけました。Rと共にインストールされるのはRscriptである必要があります。たとえば、bar1行に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コマンドをフローの先頭に追加する必要がありますか?
mbaitoff

@mbaitoff:はい。私のテストでは、最初の行としてfooを含むファイルを作成し、ファイルsummary (as.numeric (readLines()))の残りの行ごとに1つの数値データ項目を作成しました。これreadLines()は、stdinから読み取っているだけです(ファイルの最後まで、これはすべて続きます)。
ウェイン

R両方の答えに真剣にこだわっているように見えますが、それは小さなタスクのための巨大なツールのようです。さて、答えは機能しますが、とにかく、他に何か他のものはありますRか?
mbaitoff

2
@mbaitoff:scipy特にPythonを既に使用している場合は、でPythonを使用できます。Clojure(JVMに基づくlisp、clojure.org)を使用/使用する場合、それに基づいて構築されたIncanterincanter.org)統計環境があります。gnu Octaveを試すこともできます。
ウェイン

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

また、5つの数字の要約を見ることができます。

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

こちらからダウンロードできます:

https://github.com/nferraz/st

(免責事項:私はこのツールを書きました:))


サイト@ user2747481へようこそ。この回答を少し具体化してくれませんか?私たちの答えは、ほとんどが自己完結型であることを望みます。ここは初めてなので、新規ユーザー向けの情報が記載されているaboutページをご覧ください
GUNG -復活モニカ

ありがとう!2019年現在、stHomebrewbrew install st
Noah Sussman

stも参照する可能性があることに注意してくださいsimple terminal
スキッピールグラングロウ

10

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

+1:申し訳ありませんが、Rscriptを見つけて、これを含めるように回答を編集したため、同様の回答になりました。あなたのread.tableアイデアは、1行に1項目を回避する良い方法です。
ウェイン

OK、謝辞と+1に感謝します。
アルノー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 -

simple-Rを取得しません!


2

これらのコメントでも参照されているstaがあります。これはstのc ++バリアントです。

C ++で記述されているため、高速で、大きなデータセットを処理できます。使いやすく、偏りのない、または偏りのある推定量の選択が含まれており、標準誤差などのより詳細な情報を出力できます。

githubで staをダウンロードできます

免責事項:私はstaの著者です。


1

念のため、データスタットがあります

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などの他のツールでうまくパイプできます。


1

clistatsの使用を検討することもできます。区切り文字で区切られた入力番号のストリームの統計を計算するための高度に構成可能なコマンドラインインターフェイスツールです。

I / Oオプション

  • 入力データは、ファイル、標準入力、またはパイプから取得できます
  • 出力は、ファイル、標準出力、またはパイプに書き込むことができます
  • 出力は「#」で始まるヘッダーを使用して、gnuplotへのパイピングを有効にします

解析オプション

  • シグナル、ファイルの終わり、または空白行ベースの検出による処理の停止
  • コメントと区切り文字を設定できます
  • 列を処理から除外することができます
  • 数値制約に基づいて行を処理から除外できます
  • 文字列の制約に基づいて、行を処理から除外できます
  • 最初のヘッダー行はスキップできます
  • 固定行数を処理できます
  • 重複する区切り文字は無視できます
  • 行を列に再構成できます
  • 同じサイズの行のみが処理されるように厳密に実施する
  • 列タイトルを含む行を使用して、出力統計にタイトルを付けることができます

統計オプション

  • 要約統計(カウント、最小、平均、最大、標準偏差)
  • 共分散
  • 相関
  • 最小二乗オフセット
  • 最小二乗法面
  • ヒストグラム
  • フィルタリング後の生データ

注:私は著者です。


1

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

0

バツ¯n=n1バツ¯n1+バツnn
Sn=Sn1
sn2=Snn1
Sn=Sn1+バツnバツ¯n1バツnバツ¯n

バツ¯0=S0=0


いくつかでそれを試してみてくださいと同等か、とX I -バツFLOAT_MAX-1.0バツバツ+1バツバツ1

これは実際にclistatsが行うことです(詳細やその他の機能については回答をご覧ください)。
dpmcmlxxvi

0

他の何かを探しているこの古いスレッドに出くわしました。同じことを望んでいて、簡単なものを見つけることができなかったので、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


0

別のツール: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

免責事項:私は著者です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.