User Tools

Site Tools


perl:quick_stats

Estatísticas à Pressa

Possivelmente só a quem precisa de fazer uma tese de mestrado ou de doutoramento, ou precisa mesmo de escrever um relatório, é que esta script pode vir a fazer jeito. Mas deparei-me com a necessidade de calcular um conjunto de medias sobre uma lista de números (reais ou inteiros), para construir umas tabelas giras de resultados. Basicamente, tenho um conjunto de ficheiros com dados, que com base num conjunto de greps e cuts me retornam uma lista de valores, com um valor por linha. Dessa lista precisava de calcular o valor mínimo, o máximo, a média e o desvio padrão.

Embora o cálculo da média seja fácil de implementar, o desvio padrão não me apetecia. Precisava dos resultados e não estava virado para o implementar. Então, como bom Perleiro, fui visitar o cpan e encontrei um módulo, básico e possivelmente pouco eficiente, chamado Statistics::Basic. Entre outras funcionalidades, permite calcular a média e o desvio padrão a partir de uma referência para um array. Dado isto, a implementação da minha script de estatísticas é completamente trivial. Mas para vos poupar algum tempo, aqui fica ela. Chamei-lhe (por enquanto) stats.pl e já a coloquei na minha PATH.

  #!/usr/bin/perl
  use strict;
  use warnings;
  use Statistics::Basic::StdDev;
  use Statistics::Basic::Mean;
  
  my ($min,$max,$count);
  my $vector = [];
  while(<>) {
  
      chomp;
      push @$vector, $_;
  
      $count++;
      $min = $_ if !defined($min) || $_ < $min;
      $max = $_ if !defined($max) || $_ > $max;
  }
  
  print "\n";
  print "Count: $count\n";
  print "Minimum: $min\n";
  print "Maximum: $max\n";
  print "Mean: ",Statistics::Basic::Mean->new($vector)->query,"\n";
  print "StdDev: ",Statistics::Basic::StdDev->new($vector)->query,"\n";
  print "\n";

Alberto Simões: 2008/07/10 14:22

perl/quick_stats.txt · Last modified: 2008/07/10 22:22 by ambs