#standard-deviation #regression #linear-regression #percentile #data-processing #data-analysis #polynomial

bin+lib std-dev

您处理任何数量数据的瑞士军刀。适用于工业和教育目的。

1 个不稳定版本

0.1.0 2024年2月25日

#554 in 数学

Download history 9/week @ 2024-03-30 16/week @ 2024-06-29 19/week @ 2024-07-06 17/week @ 2024-07-13

52 每月下载量

LGPL-3.0-or-later

245KB
5K SLoC

std-dev

您处理任何数量数据的瑞士军刀。适用于工业和教育目的。

此代码库经过良好文档化并添加注释,旨在向公众展示数据分析的精彩算法。

我们正在不断扩展,但到目前为止,以下功能已实现。

  • 标准差,适用于泛型切片和聚类
  • 对于大型数据集,具有有限值选项的快速中位数和均值(聚类
  • O(n) - 线性时间 - 算法,适用于任意泛型列表(任何类型的数字)和聚类
    • 百分位数
      • 中位数
    • 标准差
    • 均值
  • 普通最小二乘法,用于线性和多项式回归
  • 简单的(O(n²))Theil-Sen 估计量,用于线性和多项式回归(O(n^(m),其中 m 是度 + 1))
  • 指数/增长和幂回归,具有对负数的**正确处理**(大多数其他应用程序默默地忽略它们)
  • 如果你不知道要使用哪种回归模型,可以使用“最佳拟合”方法
  • (二进制)一个基本的绘图功能,用于预览与输入数据相关的方程式

用法

此应用程序支持将其用作 (带有可选的 cargo 功能)、交互式 CLI 程序,以及通过 管道 将数据传入,通过标准输入。

它接受任何以逗号或空格分隔的值。支持科学计数法。这是设计上简约的,因为其他程序可能在处理数据之前用于生成/修改数据。

Shell 完成功能

使用子命令 completion,std-dev 会自动为您生成 shell 完成功能,并尝试将它们放在适当的位置。

当使用 Bash 或 Zsh 时,您应作为 root 运行 std-dev,因为我们需要 root 权限才能写入它们的完成目录。或者,使用 --print 选项来自动生成完成文件。

Cargo 功能

当作为库使用时,我建议禁用所有功能(除了base)(std-dev = { version = "0.1", default-features = false, features = ["base"] }),并启用您需要的功能。

  • bin(默认,二进制功能):这使二进制文件可以编译。
  • prettier(默认,二进制功能):使二进制输出更美观。包括颜色和交互式使用的提示。
  • completion(默认,二进制功能):启用生成shell补全的能力。
  • regression(默认,库和二进制功能):启用所有回归估计器。这需要nalgebra,它提供线性代数。
  • ols(默认,库功能):启用OLS的使用,它是“默认”估计器。这还启用多项式Theil-Sen(度数>2)和best_fit函数中的多项式回归。
  • arbitrary-precision(默认,库功能):使用任意精度代数进行>10度多项式回归。
  • percentile-rand(默认,基础,库功能):启用与百分位数相关的函数推荐的pivot_fn
  • simplify-fraction(默认,基础,库功能):简化分数。放宽分数输入的要求并实现分数的Eq和Ord。
  • generic-impls(默认,基础,库功能):使meanstandard_deviation和百分位数解析通用于数字。这使您能够无障碍地使用来自其他库的数值类型。

文档

主分支的文档可以在doc.icelk.dev找到。

要使用有关启用代码的cargo功能的文档设置环境变量RUSTDOCFLAGS--cfg docsrs(例如在Fish中set -x RUSTDOCFLAGS "--cfg docsrs")然后运行cargo +nightly doc

性能

这个库旨在尽可能快,同时保持代码易于阅读。

聚类

由于所有算法现在都是线性时间执行的,这个功能不是很有用,但仍然是一个有趣的功能。如果您已经拥有聚类数据,这个功能很棒。

当使用聚类功能(将您的列表转换为ClusterList)时,计算是按唯一值进行的。比如说,您有一个婴儿身高的数据集,以厘米为单位。这可能只有大约40个不同的值,但可能有数百万条记录。使用聚类,所有这些数据仅以O(40)进行处理,而不是O(数百万)。 (我知道这种表示法不正确,但您能理解我的意思)。

创建这个聚类涉及到将所有值添加到一个映射中。这需要O(n)的时间,但与其他所有算法相比非常慢。创建后,此库中的大多数操作都以O(m)的时间执行,其中m是唯一值的数量。

依赖关系

~0-12MB
~95K SLoC