표준 입력에서 숫자의 흐름 (ASCII 형식)을 허용하고 최소, 최대, 평균, 중앙값, RMS, Quantile 등과 같은이 흐름에 대한 기본 설명 통계를 제공하는 명령 줄 도구가 있습니까? 명령 행 체인의 다음 명령으로 출력을 구문 분석 할 수 있습니다. 작업 환경은 Linux이지만 다른 옵션도 환영합니다.
표준 입력에서 숫자의 흐름 (ASCII 형식)을 허용하고 최소, 최대, 평균, 중앙값, RMS, Quantile 등과 같은이 흐름에 대한 기본 설명 통계를 제공하는 명령 줄 도구가 있습니까? 명령 행 체인의 다음 명령으로 출력을 구문 분석 할 수 있습니다. 작업 환경은 Linux이지만 다른 옵션도 환영합니다.
답변:
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
명령에 흐름을 추가해야 합니까?
foo
포함 된 파일 을 만든 summary (as.numeric (readLines()))
다음 나머지 파일의 줄 당 하나의 숫자 데이터 항목을 만들었습니다 . 는 readLines()
단지 (파일이 끝날 때까지, 다음 무엇을 모든되는) 표준 입력에서 읽고 있습니다.
R
가 두 대답 모두에 진지하게 붙어 있는 것처럼 보이며 작은 작업을위한 거대한 도구 인 것 같습니다. 글쎄, 대답은 효과가 있지만 어쨌든 다른 것이 R
있습니까?
scipy
특히 Python을 이미 사용하고 있다면 Python을로 사용할 수 있습니다 . Clojure (JVM을 기반으로 한 리스 , 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 라는 명령을 제공합니다 . 명령 행에 붙여 넣을 수있는 숫자가 몇 개인 경우이 라이너를 사용하십시오.
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
read.table
아이디어는 한 줄에 한 항목 씩 돌아갈 수있는 좋은 방법입니다.
R이 할 수있는 거의 모든 작업을 수행 할 수 있지만 키 입력은 줄이면서 더 간단합니다.
https://code.google.com/p/simple-r/
기본적인 기술 통계량을 계산하려면 다음 중 하나를 입력해야합니다.
r summary file.txt
r summary - < file.txt
cat file.txt | r summary -
simple-R을 얻지 못합니다!
경우에 따라 datastat가 있습니다.
https://sourceforge.net/p/datastat/code/
리눅스는 명령 줄에서 간단한 통계를 계산하는 간단한 프로그램입니다. 예를 들어
고양이 file.dat | datastat
file.dat의 각 열에 대한 모든 행의 평균 값을 출력합니다. 표준 편차 min, max를 알아야하는 경우 각각 --dev, --min 및 --max 옵션을 추가 할 수 있습니다.
datastat는 하나 이상의 "키"열의 값을 기반으로 행을 집계 할 수 있습니다.
C ++로 작성되었으며, 빠른 메모리 용량과 작은 메모리 용량으로 실행되며 cut, grep, sed, sort, awk 등과 같은 다른 도구와 잘 연결될 수 있습니다.
clistats 사용을 고려할 수도 있습니다 . 구분 된 입력 번호 스트림에 대한 통계를 계산하기 위해 고도로 구성 가능한 명령 행 인터페이스 도구입니다.
참고 : 저는 저자입니다.
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
너무 많은 메모리와 프로세서 파워. 이런 식으로 R을 사용하는 것은 모기를 죽이는 망치를 얻는 것과 거의 같습니다. 좋아하는 언어를 사용하고 임시 수단 알고리즘을 구현하십시오. 평균 :
갖다 시작 값으로. 가중 분석에 대한 수정이 가능합니다. 두 배정 밀도 실수와 카운터를 사용하여 계산을 수행 할 수 있습니다.
FLOAT_MAX-1.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
또 다른 도구 : 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
면책 조항 : 나는 저자입니다.