값 스트림에 대한 기본 통계를 계산하는 명령 줄 도구 [닫기]


27

표준 입력에서 숫자의 흐름 (ASCII 형식)을 허용하고 최소, 최대, 평균, 중앙값, RMS, Quantile 등과 같은이 흐름에 대한 기본 설명 통계를 제공하는 명령 줄 도구가 있습니까? 명령 행 체인의 다음 명령으로 출력을 구문 분석 할 수 있습니다. 작업 환경은 Linux이지만 다른 옵션도 환영합니다.


1
STAT을 살펴 보는 것이 좋습니다 . 그것은 꽤 오래된 소프트웨어이지만 그러한 것들에 매우 편리합니다. 도 있습니다 PYP , 그리고 여러 가지 다른 유엔 * X 도구.
chl

@chl 링크 ISTAT가 손상되었습니다. 업데이트하거나 답을 구할 수 있습니까?
Léo Léopold Hertz 준영

1
@Masi Yup, 페이지가 더 이상 존재하지 않는 것 같습니다. 다음은 업데이트 된 링크 입니다.
chl

답변:


22

R 로이 작업을 수행 할 수 있습니다.

편집 2 : [OOPS, 다른 사람이 이것을 타이핑하는 동안 Rscript에 맞은 것처럼 보입니다.] 더 쉬운 방법을 찾았습니다. R과 함께 설치하려면 Rscript를 사용해야합니다. 예를 들어 bar숫자 목록 이있는 파일이있는 경우 한 줄에 하나씩 :

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))'

Quantiles를 얻기 위해. 그리고 다음과 같이 첫 번째 출력 라인 (라벨 포함)을 잘라낼 수 있습니다.

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()))다음 나머지 파일의 줄 당 하나의 숫자 데이터 항목을 만들었습니다 . 는 readLines()단지 (파일이 끝날 때까지, 다음 무엇을 모든되는) 표준 입력에서 읽고 있습니다.
Wayne

우리 R가 두 대답 모두에 진지하게 붙어 있는 것처럼 보이며 작은 작업을위한 거대한 도구 인 것 같습니다. 글쎄, 대답은 효과가 있지만 어쨌든 다른 것이 R있습니까?
mbaitoff

2
@mbaitoff : scipy특히 Python을 이미 사용하고 있다면 Python을로 사용할 수 있습니다 . Clojure (JVM을 기반으로 한 리스 , clojure.org ) 를 사용하거나 좋아 하면 Incanter( incanter.org ) 통계 환경이 구축됩니다. gnu Octave를 사용해 볼 수도 있습니다.
Wayne

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-Monica Monica 복원

감사! 2019 년 현재 stHomebrewbrew install st
Noah Sussman을

그주의 st에도을 참조 할 수있다 simple terminal.
Skippy le Grand Gourou

10

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

+1 : 죄송합니다. Rscript를 찾은 다음이를 포함하도록 답변을 수정했습니다. 따라서 비슷한 답변을 얻었습니다. 귀하의 read.table아이디어는 한 줄에 한 항목 씩 돌아갈 수있는 좋은 방법입니다.
Wayne

감사합니다. +1 감사합니다.
Arnaud A

3

datamash 는 또 다른 훌륭한 옵션입니다. GNU 프로젝트에서 온 것입니다.

homebrew / linuxbrew가 있으면 다음을 수행 할 수 있습니다.

brew install datamash


2

R이 할 수있는 거의 모든 작업을 수행 할 수 있지만 키 입력은 줄이면서 더 간단합니다.

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

기본적인 기술 통계량을 계산하려면 다음 중 하나를 입력해야합니다.

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

simple-R을 얻지 못합니다!


2

이 주석에서 참조 된 st의 c ++ 변형 인 sta가 있습니다.

C ++로 작성 되었기 때문에 빠르며 대용량 데이터 세트를 처리 할 수 ​​있습니다. 사용이 간편하고 편견 또는 편향 추정기의 선택을 포함하며 표준 오류와 같은보다 자세한 정보를 출력 할 수 있습니다.

github 에서 sta를 다운로드 할 수 있습니다 .

면책 조항 : 나는 sta 의 저자입니다 .


1

경우에 따라 datastat가 있습니다.

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

리눅스는 명령 줄에서 간단한 통계를 계산하는 간단한 프로그램입니다. 예를 들어

고양이 file.dat | datastat

file.dat의 각 열에 대한 모든 행의 평균 값을 출력합니다. 표준 편차 min, max를 알아야하는 경우 각각 --dev, --min 및 --max 옵션을 추가 할 수 있습니다.

datastat는 하나 이상의 "키"열의 값을 기반으로 행을 집계 할 수 있습니다.

C ++로 작성되었으며, 빠른 메모리 용량과 작은 메모리 용량으로 실행되며 cut, grep, sed, sort, awk 등과 같은 다른 도구와 잘 연결될 수 있습니다.


1

clistats 사용을 고려할 수도 있습니다 . 구분 된 입력 번호 스트림에 대한 통계를 계산하기 위해 고도로 구성 가능한 명령 행 인터페이스 도구입니다.

I / O 옵션

  • 입력 데이터는 파일, 표준 입력 또는 파이프에서 올 수 있습니다.
  • 출력은 파일, 표준 출력 또는 파이프에 쓸 수 있습니다
  • 출력은 "#"로 시작하는 헤더를 사용하여 gnuplot으로 파이핑 할 수 있도록합니다.

파싱 ​​옵션

  • 처리를 중지하는 신호, 파일 끝 또는 빈 줄 기반 감지
  • 설명 및 구분 문자를 설정할 수 있습니다
  • 처리에서 열을 걸러 낼 수 있습니다
  • 숫자 제약 조건을 기반으로 처리에서 행을 필터링 할 수 있습니다.
  • 문자열 제약 조건을 기반으로 처리에서 행을 필터링 할 수 있습니다.
  • 초기 헤더 행을 건너 뛸 수 있습니다
  • 고정 된 수의 행 처리 가능
  • 중복 구분 기호는 무시할 수 있습니다
  • 행은 열로 재구성 가능
  • 동일한 크기의 행만 처리되도록 엄격하게 시행
  • 열 제목을 포함하는 행을 사용하여 출력 통계 제목을 지정할 수 있습니다.

통계 옵션

  • 요약 통계 (개수, 최소, 평균, 최대, 표준 편차)
  • 공분산
  • 상관 관계
  • 최소 제곱 오프셋
  • 최소 제곱 경사
  • 히스토그램
  • 필터링 후 원시 데이터

참고 : 저는 저자입니다.


1

ASCII 모드에서 통계 및 뷰 분포를 계산하는 데 사용할 수있는 Ya 도구는 ministat 입니다. FreeBSD의 도구이지만 데비안 / 우분투와 같은 널리 사용되는 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

너무 많은 메모리와 프로세서 파워. 이런 식으로 R을 사용하는 것은 모기를 죽이는 망치를 얻는 것과 거의 같습니다. 좋아하는 언어를 사용하고 임시 수단 알고리즘을 구현하십시오. 평균 :

엑스¯=(1)엑스¯1+엑스
; 그리고 분산에 대해 :
에스2=에스1
에스=에스1+(엑스엑스¯1)(엑스엑스¯).

갖다 엑스¯0=에스0=0시작 값으로. 가중 분석에 대한 수정이 가능합니다. 두 배정 밀도 실수와 카운터를 사용하여 계산을 수행 할 수 있습니다.


일부와 함께 사용해보십시오 엑스나는에 해당 FLOAT_MAX-1.0하거나엑스나는엑스나는+1 매우 작지만 엑스나는엑스나는1매우 큰.
mbaitoff

이것이 실제로 clistats가하는 일 입니다 (자세한 내용 및 기타 기능은 답변 참조).
dpmcmlxxvi 2016 년

0

이 오래된 실을 우연히 발견하여 다른 것을 찾고 있습니다. 똑같은 것을 원하고 간단한 것을 찾을 수 없었으므로 펄에서 상당히 사소한 것이었지만 하루에 여러 번 사용하십시오 : 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

(절단 속도는 느리지 만 논란의 여지가 쉬운 편이다) : http://moo.nac.uci.edu/~hjm/scut 설명 : http://moo.nac.uci.edu/~hjm/scut_cols_HOWTO. html


0

또 다른 도구 : eBay의 TSV 유틸리티 에서 tsv 요약 . 최소값, 최대 값, 평균값, 중앙값, 분위수, 표준 편차, MAD 등과 같은 많은 기본 요약 통계를 지원합니다. 대규모 데이터 세트를위한 것으로 여러 필드 및 키별로 그룹화를 지원합니다. 출력은 탭으로 구분됩니다. 한 줄에 하나씩 숫자 1부터 1000까지의 순서에 대한 예 :

$ 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.