|Develop Branch||Master Branch|
About the Library
This is a cross-pltaform library with implementations of various percentile algorithms on streams of data. These algorithms allow you to calculate approximate percentiles (e.g. 50th percentile, 95th percentile) in a single pass over a data set. They are particularly useful for calculating percentiles for immense data sets, for extremely high-throughput systems, or for near-real time use cases.
The library supports the following languages:
The library implements the following streaming percentile algorithms:
- Cormode-Korn-Muthukrishnan-Srivastava for high-biased, low-biased, uniform, and targeted quantiles
For more background on streaming percentiles, see Calculating Percentiles on Streaming Data.
Obtaining the Library
You can download the latest release of the library from the streaming-percentiles latest release page.
If you use NPM,
npm install streaming-percentiles. Otherwise, download
the latest release of the library from the streaming-percentiles latest
For convenience, you can also use the latest release JS directly
You can download the latest release's source code from the streaming-percentiles latest release page.
See CONTRIBUTING.md for instructions on how to build the release from source.
Using the Library
Here's an example on how to use the Greenwald-Khanna streaming percentile algorithm from C++:
double epsilon = 0.1;stmpct::gk<double>for (int i = 0; i < 1000; ++i)g.insert(rand());double p50 = g.quantile(0.5); // Approx. mediandouble p95 = g.quantile(0.95); // Approx. 95th percentile
Here's an example of how to use the library from Node.JS:
var sp = ;var epsilon = 01;var g = epsilon;for var i = 0; i < 1000; ++ig;var p50 = g; // Approx. medianvar p95 = g; // Approx. 95th percentile
Here's an example of how to use the library from a browser. Note that the
default module name is
See doc/api_reference/ for detailed API reference documentation.
This project is licensed under the MIT License. See LICENSE for more information.
If you are interested in contributing to the library, please see CONTRIBUTING.md.