caio.co/de/go-tdigest


Add list of things I'm planning on doing 💬 by Caio 10 years ago (log)
Maybe.

One day.

Who knows.

Blob README.md

Showing rendered content. Download source code


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.

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))

Roadmap

  1. Add support for merging digests (else, what's the point?)
  2. Implement serialization. Maybe compatible with the reference implementation
  3. ???

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.