removed shit.

This commit is contained in:
didier.amyot committed 2014-05-20 11:16:25 -04:00
1 parent 37e09a0f99
commit 5242d125f8
2 files changed
+29 -96

No files matched your search

+17 -51
View File
@@ -10,34 +10,24 @@ var _ = fmt.Print
const initialLength int = 1024 const initialLength int = 1024
const verySmall float64 = -100000 const verySmall float64 = -100000
const veryBig float64 = 100000 const veryBig float64 = 100000
const epsilon = 0.00000002
type Stats struct {
Mean float64 `json:"mean"`
Var float64 `json:"var"`
Std float64 `json:"std"`
}
type StatAggregator struct { type StatAggregator struct {
sum float64 sum float64
sumOfTheSquares float64 sumOfTheSquares float64
n int n int
// histogram is a list of point between [min max] each point in the histogram []float64
//histogram represents the beginning of the histogram bars. min float64
histogram []float64 max float64
histogramValues []int
histogramBarWidth float64
numberOfHistogramBar int
min float64
max float64
} }
type Stats struct{}
func NewStatAggregator() *StatAggregator { func NewStatAggregator() *StatAggregator {
return &StatAggregator{0, return &StatAggregator{0, 0, 0, make([]float64, initialLength), veryBig, verySmall}
0,
0,
make([]float64, 0, initialLength),
make([]int, 0, initialLength),
0,
initialLength,
veryBig,
verySmall}
} }
func (this *StatAggregator) AddStats(dataChannel chan float64, output chan *Stats) { func (this *StatAggregator) AddStats(dataChannel chan float64, output chan *Stats) {
@@ -52,39 +42,15 @@ func (this *StatAggregator) AddStats(dataChannel chan float64, output chan *Stat
this.max = datum this.max = datum
} }
} }
output <- nil output <- this.getFinalStats()
} }
// always assume the min and max includes the value! func (this *StatAggregator) getFinalStats() *Stats {
func (this *StatAggregator) AddDataToHistogram(value float64) { stats := new(Stats)
if len(this.histogramValues) < this.numberOfHistogramBar { stats.Mean = this.sum / float64(this.n)
this.AddDataToHistogramWhenLessDataThanBarAreOnHistograms(value) stats.Var = this.sumOfTheSquares/float64(this.n) - stats.Mean*stats.Mean
} else { stats.Std = math.Sqrt(stats.Var)
this.AddDataToHistogramWithMaximalNumberOfBars(value)
} return stats
} }
func (this *StatAggregator) AddDataToHistogramWithMaximalNumberOfBars(value float64) {
}
func (this *StatAggregator) AddDataToHistogramWhenLessDataThanBarAreOnHistograms(value float64) {
for i, v := range this.histogram {
if math.Abs(value-v) < epsilon {
this.histogramValues[i]++
return
} else if value < v {
this.histogram = append(this.histogram, 0)
copy(this.histogram[i+1:], this.histogram[i:])
this.histogram[i] = value
this.histogramValues = append(this.histogramValues, 0)
copy(this.histogramValues[i+1:], this.histogramValues[i:])
this.histogramValues[i] = 1
return
}
}
this.histogramValues = append(this.histogramValues, 1)
this.histogram = append(this.histogram, value)
}
+12 -45
View File
@@ -1,7 +1,6 @@
package main package main
import ( import (
"reflect"
"testing" "testing"
) )
@@ -10,11 +9,9 @@ func TestNewStats(t *testing.T) {
if s.n != 0 || if s.n != 0 ||
s.sum != 0 || s.sum != 0 ||
s.sumOfTheSquares != 0 || s.sumOfTheSquares != 0 ||
s.numberOfHistogramBar != initialLength || len(s.histogram) != initialLength ||
s.min != veryBig || s.min != veryBig ||
s.max != verySmall || s.max != verySmall {
len(s.histogram) != 0 ||
len(s.histogramValues) != 0 {
t.Fail() t.Fail()
} }
} }
@@ -34,52 +31,22 @@ func TestAddStatsBasic(t *testing.T) {
if s.n != 4. || s.min != -1. || s.max != 20. || s.sum != 23. || s.sumOfTheSquares != 411. { if s.n != 4. || s.min != -1. || s.max != 20. || s.sum != 23. || s.sumOfTheSquares != 411. {
t.Error(">>>", s.max, s.min) t.Error(">>>", s.max, s.min)
} }
}
func TestAddDataToHistogramWhenLessDataThanBarAreOnHistograms(t *testing.T) {
s := NewStatAggregator()
s.AddDataToHistogramWhenLessDataThanBarAreOnHistograms(17)
if !reflect.DeepEqual([]float64{17}, s.histogram) {
t.Error("bad histogram", s.histogram)
}
if !reflect.DeepEqual([]int{1}, s.histogramValues) {
t.Error("bad histogramValues:", s.histogramValues)
}
s.histogram = []float64{-1, 1, 2, 3}
s.histogramValues = []int{1, 1, 1, 1}
s.AddDataToHistogramWhenLessDataThanBarAreOnHistograms(2)
if !reflect.DeepEqual([]int{1, 1, 2, 1}, s.histogramValues) {
t.Error("bad histogramValues", s.histogramValues)
}
s.AddDataToHistogramWhenLessDataThanBarAreOnHistograms(2.5)
if !reflect.DeepEqual([]float64{-1, 1, 2, 2.5, 3}, s.histogram) {
t.Error("bad histogram", s.histogram)
}
if !reflect.DeepEqual([]int{1, 1, 2, 1, 1}, s.histogramValues) {
t.Error("bad histogramValues:", s.histogramValues)
}
s.AddDataToHistogramWhenLessDataThanBarAreOnHistograms(22.5)
if !reflect.DeepEqual([]float64{-1, 1, 2, 2.5, 3, 22.5}, s.histogram) {
t.Error("bad histogram", s.histogram)
}
if !reflect.DeepEqual([]int{1, 1, 2, 1, 1, 1}, s.histogramValues) {
t.Error("bad histogramValues:", s.histogramValues)
}
} }
func TestAddDataToHistogramWithMaximalNumberOfBars(t *testing.T) { func TestGetFinalStats(t *testing.T) {
s := NewStatAggregator() s := NewStatAggregator()
s.numberOfHistogramBar = 5 s.sumOfTheSquares = 5000
s.histogram = []float64{1, 2, 3, 4, 5} s.sum = 200
s.histogramValues = []int{1, 1, 2, 3, 4} s.n = 10
s.AddDataToHistogramWithMaximalNumberOfBars(3.5) stats := s.getFinalStats()
if !reflect.DeepEqual(s.histogram, []float64{1, 2, 3, 4, 5}) { if stats.Mean != 20. {
t.Fail() t.Fail()
} }
if !reflect.DeepEqual(s.histogramValues, []int{1, 1, 2, 3, 4}) { if stats.Var != 100. {
t.Fail()
}
if stats.Std != 10. {
t.Fail() t.Fail()
} }
} }