Existe-t-il un outil en ligne de commande qui accepte le flux de nombres (au format ascii) à partir de l'entrée standard et donne les statistiques descriptives de base pour ce flux, telles que min, max, moyenne, médiane, RMS, quantiles, etc.? La sortie peut être analysée par la prochaine commande dans la chaîne de ligne de commande. L'environnement de travail est Linux, mais d'autres options sont les bienvenues.
27
Réponses:
Vous pouvez le faire avec R , ce qui peut être un peu exagéré ...
EDIT 2: [OOPS, on dirait que quelqu'un d'autre a frappé avec Rscript pendant que je retapais cela.] J'ai trouvé un moyen plus facile. Installé avec R devrait être Rscript, qui est censé faire ce que vous essayez de faire. Par exemple, si j'ai un fichier
bar
qui contient une liste de nombres, un par ligne:Canalisera ces nombres dans R et exécutera la
summary
commande de R sur les lignes, retournant quelque chose comme:Vous pouvez également faire quelque chose comme:
pour obtenir des quantiles. Et vous pouvez évidemment couper la première ligne de sortie (qui contient des étiquettes) avec quelque chose comme:
Je recommande fortement de faire d'abord ce que vous voulez dans R interactif, pour vous assurer que la commande est correcte. En essayant cela, j'ai omis la parenthèse fermante et Rscript ne renvoie rien - pas de message d'erreur, pas de résultat, juste rien.
(Pour mémoire, la barre de fichiers contient:
la source
R
commandes?foo
qui contenait lesummary (as.numeric (readLines()))
comme première ligne, puis un élément de données numérique par ligne pour le reste du fichier. LereadLines()
lit simplement depuis stdin (qui est tout ce qui suit, jusqu'à la fin du fichier).R
dans les deux réponses, et cela semble être un énorme outil pour une petite tâche. Eh bien, les réponses fonctionnent, mais de toute façon, y a-t-il autre chose saufR
?scipy
, surtout si vous utilisez déjà Python. Si vous utilisez / comme Clojure (lisp basé sur JVM, clojure.org ), il y a l' environnement statistiqueIncanter
( incanter.org ) construit sur cela. Vous pouvez également essayer gnu Octave.Essayez "st":
Vous pouvez également voir le résumé à cinq chiffres:
Vous pouvez le télécharger ici:
https://github.com/nferraz/st
(AVERTISSEMENT: j'ai écrit cet outil :))
la source
st
est disponible via Homebrewbrew install st
st
peut également faire référence àsimple terminal
.R fournit une commande appelée Rscript . Si vous ne disposez que de quelques chiffres que vous pouvez coller sur la ligne de commande, utilisez cette ligne:
ce qui se traduit par
Si vous souhaitez lire à partir de l'entrée standard, utilisez ceci:
Si les nombres sur l'entrée standard sont séparés par des retours chariot (c'est-à-dire un nombre par ligne), utilisez
On peut créer des alias pour ces commandes:
la source
read.table
idée est un bon moyen de contourner un article par ligne.datamash est une autre excellente option. Cela vient du projet GNU.
Si vous avez homebrew / linuxbrew, vous pouvez faire:
brew install datamash
la source
Il y a aussi simple-r, qui peut faire presque tout ce que R peut faire, mais avec moins de touches:
https://code.google.com/p/simple-r/
Pour calculer les statistiques descriptives de base, il faudrait taper l'un des éléments suivants:
N'obtient pas de simple-R!
la source
Il y a sta, qui est une variante c ++ de st, également référencé dans ces commentaires.
Étant écrit en c ++, il est rapide et peut gérer de grands ensembles de données. Il est simple à utiliser, comprend le choix d'estimateurs non biaisés ou biaisés et peut produire des informations plus détaillées telles que l'erreur standard.
Vous pouvez télécharger sta sur github .
Avertissement: je suis l'auteur de sta .
la source
Juste au cas où, il y a un datastat
https://sourceforge.net/p/datastat/code/
un programme simple pour Linux calculant des statistiques simples à partir de la ligne de commande. Par exemple,
cat file.dat | datastat
affichera la valeur moyenne sur toutes les lignes pour chaque colonne de file.dat. Si vous avez besoin de connaître l'écart type, min, max, vous pouvez ajouter les options --dev, --min et --max, respectivement.
datastat a la possibilité d'agréger des lignes en fonction de la valeur d'une ou plusieurs colonnes "clés".
Il est écrit en C ++, s'exécute rapidement et avec peu d'occupation de mémoire, et peut être joliment canalisé avec d'autres outils tels que cut, grep, sed, sort, awk, etc.
la source
Vous pourriez également envisager d'utiliser des clistats . Il s'agit d'un outil d'interface de ligne de commande hautement configurable pour calculer les statistiques d'un flux de nombres d'entrée délimités.
Options d'E / S
Options d'analyse
Options statistiques
REMARQUE: je suis l'auteur.
la source
Un outil qui pourrait être utilisé pour calculer des statistiques et afficher la distribution en mode ASCII est ministat . C'est un outil de FreeBSD, mais il est également empaqueté pour une distribution Linux populaire comme Debian / Ubuntu.
Exemple d'utilisation:
la source
la source
FLOAT_MAX-1.0
Je suis tombé sur ce vieux fil à la recherche d'autre chose. Je voulais la même chose, je n'ai rien trouvé de simple, donc je l'ai fait en perl, assez trivial, mais utilisez-le plusieurs fois par jour: http://moo.nac.uci.edu/~hjm/stats
Exemple:
(scut est une version plus lente, mais sans doute plus facile à couper): http://moo.nac.uci.edu/~hjm/scut décrit: http://moo.nac.uci.edu/~hjm/scut_cols_HOWTO. html
la source
Un autre outil: résumé tsv des utilitaires TSV d' eBay . Prend en charge de nombreuses statistiques sommaires de base, telles que min, max, moyenne, médiane, quantiles, écart-type, MAD et quelques autres. Il est destiné aux grands ensembles de données et prend en charge plusieurs champs et le regroupement par clé. La sortie est séparée par des tabulations. Un exemple pour la séquence des nombres 1 à 1000, un par ligne:
Les en-têtes sont normalement générés à partir d'une ligne d'en-tête dans l'entrée. Si l'entrée n'a pas d'en-tête, une peut être ajoutée à l'aide du
-w
commutateur:Avertissement: je suis l'auteur.
la source