32 votos

Herramienta de línea de comandos para calcular las estadísticas básicas del flujo de valores

¿Existe alguna herramienta de línea de comandos que acepte el flujo de números (en formato ascii) desde la entrada estándar y proporcione las estadísticas descriptivas básicas de este flujo, como mínimo, máximo, media, mediana, RMS, cuantiles, etc.? La salida es bienvenida para ser parseable por el siguiente comando en la cadena de línea de comandos. El entorno de trabajo es Linux, pero otras opciones son bienvenidas.

1 votos

Le recomiendo que eche un vistazo a |STAT . Es un software bastante antiguo, pero es muy conveniente para estas cosas. También hay pyp y varios otros Herramientas Un*x.

0 votos

@chl Enlace ISTAT roto. ¿Pueden actualizarlo o convertirlo en una respuesta, por favor?

1 votos

@Masi Sí, parece que la página ya no existe. Aquí hay una enlace actualizado .

33voto

Piccolo Puntos 68

Prueba con la "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

También puede ver el resumen de cinco números:

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

Puede descargarlo aquí:

https://github.com/nferraz/st

(DESCARGO DE RESPONSABILIDAD: yo escribí esta herramienta :))

0 votos

Bienvenido al sitio, @user2747481. ¿Te importaría ampliar un poco esta respuesta? Nos gustaría que nuestras respuestas fueran en su mayoría autocontenidas. Como eres nuevo aquí, quizás quieras leer nuestro Acerca de la página que contiene información para los nuevos usuarios.

0 votos

Gracias. A partir de 2019 st está disponible a través de Homebrew brew install st

1 votos

Tenga en cuenta que st también puede hacer referencia a simple terminal .

31voto

Loren Pechtel Puntos 2212

Puede hacerlo con R que puede ser un poco exagerado...

EDIT 2: [OOPS, parece que alguien más golpeó con Rscript mientras escribía esto]. He encontrado una forma más fácil. Instalado con R debería ser Rscript que está destinado a hacer lo que usted está tratando de hacer. Por ejemplo, si tengo un archivo bar que tiene una lista de números, uno por línea:

Rscript -e 'summary (as.numeric (readLines ("stdin")))' < bar

Enviará los números del archivo a R y ejecutará el programa de R summary en las líneas, devolviendo algo como

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00    2.25    3.50    3.50    4.75    6.00 

También podrías hacer algo así:

Rscript -e 'quantile (as.numeric (readLines ("stdin")), probs=c(0.025, 0.5, 0.975))'

para obtener los cuantiles. Y, obviamente, podría cortar la primera línea de salida (que contiene las etiquetas) con algo como:

Rscript -e 'summary (as.numeric (readLines ("stdin")))' < bar | tail -n +2

Te recomiendo que hagas lo que quieres en R interactivo primero, para asegurarte de que tienes el comando correcto. Al intentar esto, omití el paréntesis de cierre y el Rscript no devuelve nada - ningún mensaje de error, ningún resultado, simplemente nada.

(Para que conste, la barra de archivos contiene:

1
2
3
4
5
6

13voto

user10000 Puntos 21

R proporciona un comando llamado Rscript . Si sólo tiene unos pocos números que pueda pegar en la línea de comandos, utilice esta línea:

Rscript -e 'summary(as.numeric(commandArgs(TRUE)))' 3 4 5 9 7

lo que resulta en

Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
3.0     4.0     5.0     5.6     7.0     9.0 

Si quieres leer desde la entrada estándar utiliza esto:

echo 3 4 5 9 7 | Rscript -e 'summary(as.numeric(read.table(file("stdin"))))'

Si los números de la entrada estándar están separados por retornos de carro (es decir, un número por línea), utilice

Rscript -e 'summary(as.numeric(read.table(file("stdin"))[,1]))'

Se pueden crear alias para estos comandos:

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

11voto

nibbo Puntos 133

datamash es otra gran opción. Es del Proyecto GNU.

Si tienes homebrew / linuxbrew puedes hacerlo:

brew install datamash

2 votos

Es increíble para calcular las estadísticas sobre los registros de acceso. Por ejemplo cat only_times.txt | datamash --header-out mean 1 perc:50 1 perc:90 1 perc:95 1 perc:97 1 perc:99 1 perc:100 1 | column -t .

6voto

Chrisb Puntos 505

Y.a. la herramienta que puede utilizarse para calcular las estadísticas y ver la distribución en modo ASCII es ministat . Es una herramienta de FreeBSD, pero también está empaquetada para distribuciones populares de Linux como Debian/Ubuntu.

Ejemplo de uso:

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

Como las estadísticas simples son tan fáciles de calcular, es tentador escribir una solución ad hoc una y otra vez. Para un programador es un hábito. Supongo que he escrito cientos de frases de una sola línea en octave, jq, r, shell o awk para calcular estadísticas básicas. Para mí, esta respuesta en particular resultó ser la solución más practicable. Es pequeño, simple, ubicuo y, el repositorio de paquetes de mi distro lo tiene . Su uso podría convertirse en un hábito que se mantiene (finalmente).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X