route/vendor/github.com/dgryski/go-onlinestats/tukey.go

28 lines
598 B
Go

package onlinestats
import "sort"
// Tukey returns the slice (sorted) with all the 1.5 IQR outliers removed
func Tukey(data []float64) []float64 {
sort.Float64s(data)
first := int(0.25 * float64(len(data)))
third := int(0.75 * float64(len(data)))
iqr := data[third] - data[first]
min := data[first] - 1.5*iqr
max := data[third] + 1.5*iqr
// TODO(dgryski): our data is sorted; we should be able to trim these elements faster than O(n)
result := make([]float64, 0, len(data))
for _, r := range data {
if r >= min && r <= max {
result = append(result, r)
}
}
return result
}