chrisgray / accumulators

accumulators

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

#Accumulators I needed accumulators that needed to do basic accumulation for sum, mean, min, max, median, standard deviation (pooled), and smoothing (exponential). I wanted to have an easy way to interface with the accumulators and also have concurrent options. In addition the simple interface, I also wanted to be sure to use primitive types for performance. Right now the library only supports long/double options, but it can easily be extended to support the other numeric types.

##Sum LongAccumulator sum = new LongSumAccumulator(); sum.accumulate(5L); sum.accumulate(6L); sum.result(); //11L

DoubleAccumulator sum = new DoubleSumAccumulator();
sum.accumulate(5.0);
sum.accumulate(6.1);
sum.result(); //11.1

##Mean MeanAccumulator mean = new MeanAccumulator(); mean.accumulate(5L); mean.accumulate(6L); mean.result(); //5.5

##Min LongAccumulator min = new LongMinAccumulator(); min.accumulate(5L); min.accumulate(6L); min.result(); //5L

DoubleAccumulator min = new DoubleMinAccumulator();
min.accumulate(5.0);
min.accumulate(6.1);
min.result(); //5.0

##Max LongAccumulator max = new LongMaxAccumulator(); max.accumulate(5L); max.accumulate(6L); max.result(); //6L

DoubleAccumulator max = new DoubleMaxAccumulator();
max.accumulate(5.0);
max.accumulate(6.1);
max.result(); //6.1

##Median MedianAccumulator median = new MedianAccumulator(); median.accumulate(5L); median.accumulate(6L); median.result(); //5.5

MedianAccumulator<Long> median = new MedianAccumulator<Double>();
median.accumulate(5.0);
median.accumulate(6.0);
median.accumulate(7.0);
median.result(); //6.0

##Standard Deviation

Calculated using pooled standard deviation: http://en.wikipedia.org/wiki/Pooled_variance

StdDevAccumulator stddev = new StdDevAccumulator();
stddev.accumulate(1.0, 3); //where 1.0 = a standard deviation, for a sample-size of 3 (s = 1.0, n = 3)
stddev.accumulate(1.29, 4);
stddev.accumulate(2.12, 2);
stddev.accumulate(2.07, 5);
stddev.accumulate(1.58, 5);
stddev.result(); //1.66 (1.660720583705416)

##Exponential Smoothing

Calculated using: http://en.wikipedia.org/wiki/Exponential_smoothing

##Weighted Accumulators

For certain accumulators: mean and exponential smoothing allow for weights to be applied with their values. This can be used as:

DoubleWeightedAccumulator mean = new DoubleMeanAccumulator();
max.accumulate(1L, 1L);
max.accumulate(2l, 1L);
max.accumulate(3l, 1L);
max.accumulate(4l, 1000000L);
max.accumulate(5l, 1L);
max.result(); //very close to 4, because 4 is heavily weighted.

##Atomic Accumulators

Aim to use atomic wrappers in java.util.concurrent.atomic or more coarse-grain synchronization blocks in more complicated scenarios. Besides their implementation they should be drop-in replacements.

LongAccumulator max = new AtomicLongMaxAccumulator();
max.accumulate(5L);
max.accumulate(6L);
max.result(); //6L

About

accumulators


Languages

Language:Java 100.0%