贡献

感谢您帮助构建 dask-ml

克隆仓库

创建 dask-ml 仓库 的分支并克隆该分支

git clone https://github.com/<your-github-username>/dask-ml
cd dask-ml

您可能希望将 https://github.com/dask/dask-ml 添加为上游远程仓库。

git remote add upstream https://github.com/dask/dask-ml

创建环境

我们在 ci 目录中提供了包含所有必要依赖的 conda 环境 YAML 文件。

conda env create -f ci/environment-latest.yaml --name=dask-ml-dev

创建一个 conda 环境并安装所有依赖项。

如果你使用的是 pip,你可以在 setup.py 中查看所有必需和可选的依赖项(查看 install_requires 字段获取必需依赖项,extras_require 字段获取可选依赖项)。

构建 dask-ml

Dask-ML 是一个纯 Python 仓库。开发安装应该像克隆仓库并在克隆的目录中运行以下命令一样简单:

pip:

python -m pip install -e ".[dev]"

conda:

conda activate dask-ml-dev
python -m pip install --no-deps -e .

如果你遇到任何问题,请在 dask-ml 问题追踪器 上提交一个议题。

风格

Dask-ML 使用 black 进行格式化,并使用 flake8 进行代码检查。如果你通过 python -m pip install -e ".[dev]" 安装了 dask-ml,这些工具已经安装好了。

black .
flake8
isort -rc dask_ml tests

您可能希望设置一个 预提交钩子 ,以便在提交更改时运行 black。

运行测试

Dask-ml 使用 py.test 进行测试。你可以从主 dask-ml 目录运行测试,如下所示:

pytest tests

或者,您可以选择仅运行完整测试套件的一个子集。例如,要仅测试预处理子模块,我们将按如下方式运行测试:

pytest tests/preprocessing

覆盖率

如果你的 Pull Request 减少了代码覆盖的行数,CI 可能会失败。有时这是可以接受的,维护者仍然会合并它。要在本地检查覆盖率,请使用

pytest --cov --cov-report=html

除了这些之外,您仍然可以使用所有常见的 pytest 命令行选项。

预提交钩子

安装并构建 pre commit 工具,如下所示:

python -m pip install pre-commit
pre-commit install

安装一些插件,如 black、isort 和 flake8。这些工具将在每次提交时自动运行。你可以使用 git commit --no-verify 跳过检查。

约定

在大多数情况下,我们遵循 scikit-learn 的 API 设计。如果你正在实现一个新的估计器,它理想情况下应该通过 scikit-learn 的 estimator check

在 dask 的上下文中,我们还需要做出一些额外的决策。理想情况下

  1. .fit 过程中学习的所有属性都应该是 具体的,即它们不应该是 dask 集合。

  2. 在可能的范围内,转换器应予以支持。

    • numpy.ndarray

    • pandas.DataFrame

    • dask.Array

    • dask.DataFrame

  3. 如果可能,转换器应接受一个 columns 关键字,以限制转换仅限于这些列,同时保持其他列不变。inverse_transform 应表现出类似的行为(忽略其他列),以便 inverse_transform(transform(X)) 等于 X

  4. 返回数组的方法(如 .transform, .predict),应返回与输入相同类型的数组。因此,如果传入的是 dask.array,则应返回具有相同分块的 dask.array

文档

我们使用 numpydoc 来编写我们的文档字符串。

构建文档是可能的

$ conda env create -f ci/environment-docs.yaml --name=dask-ml-dev-docs
$ conda activate dask-ml-dev-docs
$ python -m pip install -e .
$ cd docs
$ make html

示例是以 Jupyter 笔记本的形式编写的,其输出已被剥离,无论是手动还是使用 nbstripout。我们希望示例能够在 binder 上运行,因此它们应该小巧,但包括如何扩展到更大问题的说明。

大多数示例的源代码保存在 dask-examples 仓库中。更新应在那里进行,并且它们会自动作为 Dask-ML 文档构建过程的一部分被包含。

当为仅在主分支中可用的新功能添加示例时,笔记本应首先包含在 Dask-ML 仓库的 docs/source/examples/ 目录下。这些示例将作为 Dask-ML 发布过程的一部分移动到 dask/dask-examples