3 个版本
0.0.3 | 2019年12月2日 |
---|---|
0.0.2 | 2019年12月2日 |
0.0.1 | 2019年11月30日 |
881 在 文本处理 中
1.5MB
60K SLoC
BOSS | 棒球开源软件
一个纯 Rust 棒球数据聚合和分析库。支持从包括 MLB 统计 API、MLB 比赛日文件在内的多个来源进行数据聚合。最终,还将添加其他来源,如 RetroSheet 和 NCAA。
BOSS 从一开始就被设计成非常高效。所有可以转换为枚举的文本字段都已仔细映射。棒球数据的挑战不在于数据收集的计算复杂性,而在于数据集的规模。BOSS 的主要设计目标之一是尽可能高效。
文档
待办事项
使用方法
[dependencies]
boss = "0.1"
先前的技术
baseballr by Bill Petti
pitchrx by Carson Sievert
动机
在 Rust 中构建棒球数据引擎将使普通球迷能够执行数据密集型工作负载,以及高效的数据收集。雄心勃勃地,目标是建立一个棒球数据分析平台,与 MLB 俱乐部内部的数据分析平台相媲美。显然,MLB 俱乐部将能够访问更多,可能更好的数据,然而,通过利用 Rust,我们应能够构建世界上最高效的棒球数据引擎。
这个项目也是作者的学习项目,随着作者对 Rust 技能的不断提高,应该会有很多变化。
架构
BOSS 依赖于三个 crate 来处理大部分工作负载。
- Isahc 处理所有网络请求以获取 JSON 文件。Isahc 强大的 Futures 支持使得异步请求的构建变得简单。
- serde-json 与 SerDe 一起处理所有 JSON 解析,通过声明性反序列化。我们只需告诉 serde-json 期望的结构,将其指向一个文件,其余的将由 serde-json 自动处理。
Rayon 用于添加并行性。我希望这一点最终会发展成为异步并行生成器(或类似的东西),其中 Rayon 了解其迭代中的所有 yield 点,以便在需要时进行跳转。
特性 - 当前和计划
- 默认并行。球员简介在下载一次后就会被缓存(缓存),这大大减少了网络调用的次数。
- 捕获历史玩家体重信息(仅适用于XML版本,可能稍后会添加到JSON版本中)
- 将所有数据扁平化并序列化为易于使用的CSV文件,可以导入Tableau或其他工具
- 很想为Tableau Hyper API构建一个Rust包装器,但还不知道如何做……
- 占用内存最多的数据是比赛描述,然而这些描述非常重复,应该可以被高度压缩。如果我们构建非扁平化的数据,我们可能需要压缩描述。
路线图
- 从GameDay xml文件中收集数据工具,适用于所有级别的联盟棒球(大部分完成,文件已被MLB弃用)
- 收集statcast数据工具,以及旋转效率计算(这些来自JSON文件,我们将)
- 整合Rust retrosheet解析器,并尝试将数据与GameDay和StatCast数据集对齐。希望能够使用现有的代码库
- 将扁平化(非规范化)的比赛导出到CSV(理想情况下,应该有一个选项将数据拆分为两个文件,一个用于元数据,一个用于逐球描述,而不是一个大型的扁平文件)
依赖项
~13-21MB
~319K SLoC