#bucket

downsample-oxide

Largest Triangle Three Buckets Implementation

3 releases

0.1.2 Mar 22, 2023
0.1.1 Mar 22, 2023
0.1.0 Mar 22, 2023

#239 in Visualization

MIT license

13KB
152 lines

Downsample Oxide

Largest Triangle Three Buckets implementation based off https://github.com/jeromefroe/lttb-rs

docs.rs License crates.io

Documentation


From Jerome's Readme:

An implementation of the largest triangle three buckets (lttb) algorithm for time series downsampling as described in Downsampling Time Series for Visual Representation. This is a Rust port of the original Javascript implementation.

This implementation is heavily based and inspired from his original. Some QOL updates and datatype differences, such as using rust_decimal and offering output types to work generically or with chrono or time (both behind features).


Example

use downsample_oxide::*;
use chrono::*;

fn first_day_of_month(month_num: u32) -> DateTime<Utc> {
    NaiveDate::from_ymd_opt(2022, month_num, 1)
        .unwrap()
        .and_time(NaiveTime::default())
        .and_local_timezone(Utc)
        .unwrap()
}

fn main() {
    let dps = Vec::from([
        DataPoint::new(first_day_of_month(1), Decimal::from(10)),
        DataPoint::new(first_day_of_month(2), Decimal::from(12)),
        DataPoint::new(first_day_of_month(3), Decimal::from(8)),
        DataPoint::new(first_day_of_month(4), Decimal::from(10)),
        DataPoint::new(first_day_of_month(5), Decimal::from(12)),
    ]);

    let output = dps.downsample(3);
}

Dependencies

~0.6–1.4MB
~26K SLoC