NAME

OP::Series - Consolidated series data

DESCRIPTION

Generate consolidated, interpolated series data from an array of objects.

SYNOPSIS

use OP::Series;

my $series = OP::Series->new();

INSTANCE METHODS

Axis Options

  • setXKey($xKey), setYKey($yKey)

    Define which object keys to use for X and Y axis:

    $series->setXKey("timestamp");
    $series->setYKey("value");

X Axis Options

  • setXMin($xMin), setXMax($xMax)

    Confine the received data to a range specified by xMin and xMax.

    Set X axis opts (time opts, in this case):

    $series->setXMin(1218508949);
    $series->setXMax(1218508969);
  • setXTickSize($size)

    Specify the desired step interval between datapoints on the X axis.

    The unit of measurement would be the same as the value being used for the axis (so, seconds if plotting seconds, widgets if plotting widgets).

    $series->setXTickSize(1); # 1 Second
  • setXMajorTickSize($size)

    Apply a "moving average" to the data after expanding base ticks. (Optional/Experimental)

    $series->setXMajorTickSize(60); # 1 Minute
  • setXConsolidator($const)

    Specify a function to use for consolidation of overlapping values.

    See OP::Enum::Consol.

    This is an optional argument, and defaults to Average.

    $series->setXConsolidator(
      OP::Enum::Consol::Median
    );

Y Axis Options

  • setYInterpolate($const)

    Optional, set interpolation type.

    See OP::Enum::Inter.

    Defaults to Linear.

    $series->setYInterpolate(OP::Enum::Inter::Spline);
  • setYRpn($rpnStr)

    Optional, supply an RPN expression

    $series->setYRpn("-1,*"); # Inverted axis
  • setYType($const)

    Optional, supply statistic type.

    See OP::Enum::StatType.

    Defaults to Gauge.

    $series->setYType(OP::Enum::StatType::Counter);

Processing Data

  • addObject($object)

    Add an object to the raw data set. The objects don't need to be blessed, they just need to contain similar attributes:

    $series->addObject({
      timestamp => 1218508949,
      value => 99.1
    });
    
    $series->addObject({
      timestamp => 1218508969,
      value => 99.8
    });
    
    ...
  • cooked()

    Generate an OP::Hash object, containing consolidated, interpolated, unsorted associative rows:

    ...
    
    for ( @objects ) {
      $series->addObject($_);
    }
    
    my $data = $series->cooked(); # Returns an OP::Hash
    
    # { X => Y, ... }
    #
    # This example has been dealing with time series data
    # (X is time) and the hash will look like:
    #
    # { 
    #   timestamp => value,
    #   timestamp => value,
    #   ...
    # }
    
    #
    # Access the processed series data as a normal Perl hashref,
    # or with any OP::Hash instance method:
    #
    $data->each( sub{
      print "at unix time $_, value was $data->{$_}\n";
    } );
  • clearHash()

    Resets all internal data structures to a pre-cooked state.

    ...
    
    my $set1 = $series->cooked();
    
    $series->clearHash();
    
    ...
    
    my $set2 = $series->cooked();

SEE ALSO

Parse::RPN, Math::Spline, Math::VecStat

OP::Class, OP::Array, OP::Hash

OP::Enum::Consol, OP::Enum::Inter, OP::Enum::StatType

Inspired by Tie::Hash::Interpolate

This file is part of OP.