caio.co/de/go-tdigest


Add very simple `Update()` benchmarks 💬 by Caio 10 years ago (log)
> $ go test -run XXX -bench .
> PASS
> BenchmarkUpdate1-4        200000             10278 ns/op
> BenchmarkUpdate10-4        50000             35964 ns/op
> BenchmarkUpdate100-4       10000            157862 ns/op
> ok      github.com/caio/go-tdigest      5.791s

Tree


T-Digest

A map-reduce and parallel streaming friendly data-structure for accurate quantile approximation.

This package provides a very crude implementation of Ted Dunning's t-digest data structure in Go.

Build Status

Installation

go get github.com/caio/go-tdigest

Usage

import ("github.com/caio/go-tdigest" "math/rand" "fmt")

compression := 10
t := tdigest.New(compression)

for i := 0; i < 10000; i++ {
    t.Update(rand.Float64(), 1)
}

fmt.Printf("p(.5) = %.6f\n", t.Percentile(0.5))

Disclaimer

I've written this solely with the purpose of understanding how the data-structure works, it hasn't been throughly verified nor have I bothered with optimizations for now.

References

This is a very simple port of the reference implementation with some ideas borrowed from the python version. If you wanna get a quick grasp of how it works and why it's useful, this video and companion article is pretty helpful.