3 个版本

0.0.3 2019年12月2日
0.0.2 2019年12月2日
0.0.1 2019年11月30日

881文本处理

MIT 许可证

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-jsonSerDe 一起处理所有 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