NAME

Text::Quantize - render a list of numbers as a textual chart

VERSION

version 0.05

SYNOPSIS

use Text::Quantize;

print quantize([26, 24, 51, 77, 21]);

__END__

 value  ------------- Distribution ------------- count
     8 |                                         0
    16 |@@@@@@@@@@@@@@@@@@@@@@@@                 3
    32 |@@@@@@@@                                 1
    64 |@@@@@@@@                                 1
   128 |                                         0

FUSSY SYNOPSIS

use Text::Quantize ();

print Text::Quantize::quantize([map { chomp; $_ } <DATA>], {
    left_label             => 'microseconds',
    middle_label           => 'Calls per time bucket',
    right_label            => 'syscalls',
    distribution_width     => 80,
    distribution_character => '=',
});

__END__

 microseconds  ---------------------------- Calls per time bucket ----------------------------- syscalls
          256 |                                                                                 0
          512 |====                                                                             5
         1024 |=====                                                                            7
         2048 |==================                                                               23
         4096 |============================                                                     36
         8192 |=======                                                                          9
        16384 |=                                                                                2
        32768 |                                                                                 1
       262144 |                                                                                 1
       524288 |                                                                                 1
      1048576 |                                                                                 1
      2097152 |=======                                                                          9
      4194304 |===                                                                              4
      8388608 |                                                                                 1
     16777216 |                                                                                 0

FUNCTIONS

quantize([integers], {options})

quantize takes an array reference of integers and an optional hash reference of options, and produces a textual histogram of the integers bucketed into powers-of-2 sets.

Options include:

left_label (default: value)

Controls the text of the left-most label which represents the bucket's contents.

middle_label (default: Distribution)

Controls the text of the middle label which can be used to title the histogram.

right_label (default: count)

Controls the text of the right-most label which represents how many items are in that bucket.

distribution_width (default: 40)

Controls how many characters wide the textual histogram is. This does not include the legends.

distribution_character (default: @)

Controls the character used to represent the data in the histogram.

add_endpoints (default: 1)

Controls whether the top and bottom lines (which are going to have values of 0) are added. They're included by default because it hints that the data set is complete.

bucketize([integers], {options})

bucketize takes an array reference of integers and an optional hash reference of options, and produces a hash reference of those integers bucketed into powers-of-2 sets.

Options include:

add_endpoints (default: 1)

Controls whether extra buckets, smaller than the minimum value and larger than the maximum value, (which are going to have values of 0) are added. They're included by default because it hints that the data set is complete.

SEE ALSO

DTrace, which is where I first saw this kind of quantize() histogram.

dip, which ported quantize() to Perl first, and from which I took a few insights.

AUTHOR

Shawn M Moore <code@sartak.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2012 by Infinity Interactive.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.