用于时间序列分析、绘图和报告的工具。
项目描述
索姆
SoaM 是Mutt创建的基于Prefect的库。它的目标是创建一个预测框架,这个工具是结合以前项目的经验开发的。名字来了:狗的儿子= SoaM
SoaM 管道
图源代码
graph LR
id0[(Database I)]-->id2[/SoaM Time Series Extractor/]
id1[(Database II)]-->id2
id2-->id3[/SoaM Transformer/]
id3-->id4[/SoaM Forecaster/]
id5{{Forecasting Model}}-->id4
id4-->id6[(SoaM Predictions)]
id6-->id7[/SoaM Forecaster Plotter/]
id6-->id8[/SoaM Reporting/]
id7-->id8
在 SoaM 中运行的步骤概述
萃取
此阶段从所需的来源中提取数据,为后续步骤构建精简数据集。这往往取决于项目。然后它通过一些分类属性将整个数据集转换为所需的时间粒度和聚合级别。
预处理
此步骤实现了进一步清理和准备以下步骤的数据的功能,例如:
- 添加功能/转换
- 填写 nan 值
- 应用值标准化
- 移位值
预测
这个阶段接收干净的数据,执行预测并将预测值存储在定义的存储中。目前有一些实现可以存储在 CSV 文件和 SQL 数据库中。目前支持多种模型来拟合和预测数据。它们可以扩展以创建自定义的。
回测
窗口政策
为了进行回测,数据在训练和验证中被拆分,有两种拆分方法:
- 滑动:为在验证数据开始处结束的训练数据创建一个固定大小的窗口。
- 扩展:从序列开始到验证数据的剩余数据创建训练数据。
有关更多信息,请查看此文档:大规模回测
后期处理
最后一个阶段准备处理管道生成的预测。例如:
- 剪辑/清理预测。
- 执行进一步分析(例如异常检测)。
- 导出报告。
目录
安装
通过执行以下命令通过pipy安装基本库:
pip install soam
或者克隆这个存储库:
git clone [soam-repo]
然后运行:
pip install . or pip install -e .
安装附件
该项目包含一些额外的依赖项,这些依赖项未包含在默认安装中,以使其轻量级。如果要安装扩展,请使用:
pip install -e ".[slack]"
pip install -e ".[prophet]"
pip install -e ".[pdf_report]"
pip install -e ".[gsheets_report]"
pip install -e ".[report]" # slack and *_report extras
pip install -e ".[all]" # all previous
注意:pdf_report额外的可能需要在安装之前运行以下命令(更多信息)
$apt-get install texlive-xetex texlive-fonts-recommended libpoppler-cpp-dev
快速开始
这是一个快速入门 SoaM 的示例。在其中加载、处理和预测具有 AAPL 股票价格的时间序列。同样,还有其他示例具有相同的步骤,但会爆发流的力量。
用法
有关更多信息,请查看我们的端到端示例,其中我们解释了 SoaM 如何在通用项目中与 Airflow 和 Cookiecutter 交互。
数据库管理
对于数据库存储,有一些补充工具:
- 解耦将数据库信息存储在单独的文件中。使用一个
settings.ini文件来存储数据库凭据和一般配置,修改它时不要更改键名。 - Alembic创建数据库迁移。简要说明如下。
- SQLAlchemy作为 ORM,表的模式在data_models中定义。
蒸馏器
这个包使用了alembic,希望你用起来!
Alembic 是一个用于 SQLAlchemy 的数据库迁移工具。定义模式后,使用 SQLAlchemy,Alembic 跟踪数据库修改,例如添加新列、修改模式或添加新表。
Alembic 设置为使用settings.ini文件中的凭据并从data_models. 请注意,alembic 需要安装此软件包才能运行!
在对数据模型进行任何更改时,您需要将它们影响到数据库中,为此您必须运行:
alembic revision --autogenerate
alembic upgrade head
第一个命令将检查数据库的最新版本,并将 自动生成 带有必要更改的 python 文件。始终需要手动查看和更正自动生成的候选迁移。
第二个命令将使用此文件来影响数据库中的更改。
有关更多 alembic 命令,请访问文档
开发者指南
如果你要开发 SoaM,你应该在添加代码之前检查文档目录,你可以从项目结构文档开始。
测试
要运行默认测试套件,请运行以下命令:
pytest
使用 nox 运行测试:
nox --session tests
测试数据提取
提取器的测试目前依赖于本地 Postgres 数据库和TEST_DB_CONNSTR使用它的连接字符串设置的变量。
最简单的方法如下:
docker run --network=host \
-e "POSTGRES_USER=soam" \
-e "POSTGRES_PASSWORD=soam" \
-e "POSTGRES_DB=soam" \
--rm postgres
TEST_DB_CONNSTR="postgresql://soam:soam@localhost/soam" pytest
要运行特定的测试文件:
TEST_DB_CONNSTR="postgresql://soam:soam@localhost/soam" pytest -v tests/test_file.py
请注意,即使该示例在测试期间具有数据库名称,也会创建和删除新数据库以确保在运行之间不维护任何状态。
测试图
为了生成用于测试的图像,我们使用pytest-mpl如下:
pytest --mpl-generate-path=tests/plotting/baseline
要运行基于图像的测试:
pytest --mpl
贡献
我们感谢您考虑帮助维护该项目。如果您想投稿,请阅读我们的投稿指南。
CI
要在本地运行 CI 作业,您必须使用nox运行它:在项目根目录中,有一个 noxfile.py 文件定义了所有作业,这些作业将在从 CI 调用时执行,或者您可以在本地调用它们。
例如,您可以使用命令nox从项目根目录运行所有作业,也可以使用命令仅运行一项作业nox --session test。
.gitlab-ci.yml 文件将 gitlab CI 配置为运行 nox。Nox 让我们在提交之前执行一些测试和检查。我们正在使用:
每次提交后,它都会在 gitlab 机器上运行。
我们正在为每个分支上的每个作业缓存环境。在分支的每次首次提交时,如果您向项目添加依赖项或新包,您也必须更改策略。Gitlab缓存策略:
pull:从云端拉取缓存文件。push:将创建的文件推送到云端。pull-push:拉取缓存文件并推送新创建的文件。
经验法则
本节包含使用 SoaM 时避免常见错误的一些建议:
- 尽可能重用对象以保留其配置。例如:转换、预测器等。
- 在进行回测和训练以进行部署和以后使用时,使用相同的训练测试窗口。
学分
Alejandro Rusi
Diego Leguizamón
Diego Lizondo
Eugenio Scafati
Fabian Wolfmann
Federico Font
Francisco Lopez Destain
Guido Trucco
Hugo Daniel Viotti
Juan Martin Pampliega
Pablo Andres Lorenzatto
Wenceslao Villegas
执照
soam根据Apache 许可证 2.0获得许可。