1 个不稳定版本
0.1.0 | 2024年2月25日 |
---|
#554 in 数学
52 每月下载量
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
(默认,基础,库功能):使mean
、standard_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