use strict;
use warnings;
use Statistics::Descriptive;

my @messwerte = qw( 17 20 19 30 20 22 24 16 20 12 22 19 15 24
                    22 20 18 20 22 25 13 29 19 28 24 27 26 25);

my $stat = Statistics::Descriptive::Full->new();

$stat->add_data(@messwerte) ;
display_stat();


sub display_stat
  {
  print 'Anzahl Elemente.......: ',  $stat->count(), "\n";
  print 'Summe.................: ', $stat->sum(), "\n";
  print 'Minimum...............: ' , $stat->min(),
        ' (', $stat->mindex(), ". Wert)\n";
  print 'Maximum...............: ', $stat->max(),
        ' (', $stat->maxdex(), ". Wert)\n";
  print 'Stichprobenbereich....: ',  $stat->sample_range(), "\n";
  print 'Arithmetisches Mittel.: ',  $stat->mean(), "\n";
  # Sortiert die Daten und liefert den Medianwert
  print 'Median................: ',  $stat->median(), "\n";
  print 'Harmonisches Mittel...: ', $stat->harmonic_mean(), "\n";
  print 'Geometrisches Mittel..: ', $stat->geometric_mean(), "\n";
  print 'Varianz...............: ', $stat->variance(), "\n";
  print 'Standardabweichung....: ', $stat->standard_deviation(), "\n";
  print "\n";

  # skalaren Kontext erzwingen, da print Listenkontext verwendet
  print 'Wert 25% Percentil....: ', scalar $stat->percentile(25), "\n";
  my ($value,$index) =  $stat->percentile(25);
  print "Wert 25% Percentil....: $value, Index: $index \n";

  print "\nQuantile\n";
  print 'Q1....................: ', $stat->quantile(1) , "\n";
  print 'Q2....................: ', $stat->quantile(2) , "\n";
  print 'Q3....................: ', $stat->quantile(3) , "\n";
  print 'Q4....................: ', $stat->quantile(4) , "\n";
  print "\n";

  my $partitions = 4;
  print "Haeufigkeitsverteilung fuer $partitions Partitionen: \n";
  my $f = $stat->frequency_distribution_ref($partitions);
  for my $partition ( sort {$a <=> $b} keys %$f )
    {
    printf("Partition = %5.2f, Anzahl = %d\n", $partition, $f->{$partition});
    }
  }