análise estatística simples do nível do shell

2

Estou à procura de algum programa / script útil para o qual eu possa bombear dados via stdin e que possa apresentar-me algumas estatísticas básicas dos dados de entrada. por exemplo - fornecido com um conjunto de valores separados por um novo caractere de linha que gostaria de obter:

  • média de todos os valores
  • média de dados, exceto 5% menores e 5% maiores valores
  • desvio padrão

sim - eu sei, pode ser feito com bash ou awk, mas talvez você já saiba de algo útil?

ps.

Eu estou perfeitamente ciente de 'grandes canhões' como oitava, r e alguns outros - mas eu preciso de algo muito mais simples.

obrigado

    
por pQd 18.07.2010 / 11:20

4 respostas

1

Esse pequeno snippet AWK fará parte do que você está procurando:

awk '{sum += $0; count++; vals[$0]++} END {mean = sum / count; print "Total: ", sum; print "Mean: ", mean; for (i in vals){ s += vals[i] * ((i - mean) ** 2) }; print "Standard Dev: ", sqrt(s/count)}' datafile

A parte da queda de 5% seria um pouco mais complicada e dependeria exatamente do seu significado.

Eu sei que você está procurando algo enlatado, mas não usando nada de R, Octave, SAS ou SPSS, não sei de nada.

Editar: fórmula corrigida

    
por 18.07.2010 / 17:08
1

você poderia tentar algo nos moldes de:

perl -e 'use List::Util qw(sum);while($r = <>){push (@array, $r)}; print sum(@array) / @array';

para obter a média. E você poderia instalar o pacote Statistics :: Descriptive link

para fazer o que você precisa para os outros requisitos. O stdev é provavelmente fácil, o outro levaria mais algumas linhas para classificar e filtrar. (sem dúvida é possível fazer em uma única linha ...; -)

    
por 18.07.2010 / 15:05
1

R pode ser exatamente o que você está procurando, ou pode ser um problema total para o seu propósito. Difícil dizer da sua pergunta.

De qualquer forma, confira link

    
por 18.07.2010 / 17:56
1

O primeiro e último itens são habilitados (eu os fiz algumas vezes) sem manter todo o conjunto de dados na memória e sem saber o número total de itens antecipadamente. O item do meio (descartando os outliers) é mais desafiador e requer manter toda a lista na RAM ou pelo menos saber o número total de itens antecipadamente.

Eu não conheço nenhuma ferramenta pré-construída simples para fazer nada disso (embora Octave e R soem como se eles fossem assim).

    
por 18.07.2010 / 20:25