3 个版本

0.1.2 2023 年 3 月 22 日
0.1.1 2023 年 3 月 22 日
0.1.0 2023 年 3 月 22 日

#401可视化

39 每月下载次数

MIT 许可证

13KB
152 代码行

Downsample Oxide

基于 https://github.com/jeromefroe/lttb-rs 的最大三角形三个桶实现

docs.rs License crates.io

文档


来自 Jerome 的 Readme

这是一个实现了时间序列下采样的大三角形三个桶(lttb)算法,如《用于视觉表示的时间序列下采样》所述。这是从原始的 JavaScript 实现迁移到 Rust 的版本。

这个实现很大程度上基于他的原始版本,并进行了一些 QOL 更新和数据类型差异,例如使用 rust_decimal,并提供输出类型以通用方式或与 chronotime(都位于功能之后)一起使用。


示例

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

依赖项

~0.6–1.4MB
~26K SLoC