`dslinter` 是一个用于 linting 数据科学和机器学习代码的 pylint 插件。我们计划支持以下 Python 库:TensorFlow、PyTorch、Scikit-Learn、Pandas、NumPy 和 SciPy。
项目描述
dslinter
你好!我们目前正在研究行业背景下机器学习项目中的代码异味,并寻求反馈
dslinter!如果您可以dslinter在行业环境中运行您的机器学习项目并将生成的txt文件发送到dslinter2022@gmail.com ,那将是一个巨大的帮助。步骤和命令可以在这里找到,它应该不会超过 10 分钟。如果您想一起完成整个过程,请随时给我发送电子邮件。该过程是匿名的,我们将在结果发布之前删除任何敏感信息。非常感谢!
dslinter是一个用于 linting 数据科学和机器学习代码的 PyLint 插件。它旨在帮助开发人员确保机器学习代码质量,并支持以下 Python 库:TensorFlow、PyTorch、Scikit-Learn、Pandas、NumPy 和 SciPy。
dslinter实现了我们之前工作识别的气味的检测规则。这些气味是从论文、灰色文献、GitHub 提交和 Stack Overflow 帖子中收集的。气味也在网站上详细说明:)
可以在此处找到演示视频中的示例项目。
安装
从 Python 包索引安装:
pip install dslinter
用法
要仅使用此插件中实现的检查器,请运行:
[适用于 Linux/Mac OS 用户]:
pylint \
--load-plugins=dslinter \
--disable=all \
--enable=import,unnecessary-iteration-pandas,unnecessary-iteration-tensorflow,\
nan-numpy,chain-indexing-pandas,datatype-pandas,\
column-selection-pandas,merge-parameter-pandas,inplace-pandas,\
dataframe-conversion-pandas,scaler-missing-scikitlearn,hyperparameters-scikitlearn,\
hyperparameters-tensorflow,hyperparameters-pytorch,memory-release-tensorflow,\
deterministic-pytorch,randomness-control-numpy,randomness-control-scikitlearn,\
randomness-control-tensorflow,randomness-control-pytorch,randomness-control-dataloader-pytorch,\
missing-mask-tensorflow,missing-mask-pytorch,tensor-array-tensorflow,\
forward-pytorch,gradient-clear-pytorch,pipeline-not-used-scikitlearn,\
dependent-threshold-scikitlearn,dependent-threshold-tensorflow,dependent-threshold-pytorch \
--output-format=text:report.txt,colorized \
--reports=y \
<path_to_sources>
[对于 Windows 用户]:
pylint --load-plugins=dslinter --disable=all --enable=import,unnecessary-iteration-pandas,unnecessary-iteration-tensorflow,nan-numpy,chain-indexing-pandas,datatype-pandas,column-selection-pandas,merge-parameter-pandas,inplace-pandas,dataframe-conversion-pandas,scaler-missing-scikitlearn,hyperparameters-scikitlearn,hyperparameters-tensorflow,hyperparameters-pytorch,memory-release-tensorflow,deterministic-pytorch,randomness-control-numpy,randomness-control-scikitlearn,randomness-control-tensorflow,randomness-control-pytorch,randomness-control-dataloader-pytorch,missing-mask-tensorflow,missing-mask-pytorch,tensor-array-tensorflow,forward-pytorch,gradient-clear-pytorch,pipeline-not-used-scikitlearn,dependent-threshold-scikitlearn,dependent-threshold-tensorflow,dependent-threshold-pytorch --output-format=text:report.txt,colorized --reports=y <path_to_sources>
或者将包含上述设置的.pylintrc配置文件放在运行命令的文件夹中,然后运行:
pylint <path_to_sources>
要使用此插件中的检查器扩展当前 pylint 配置,请运行:
pylint --load-plugins=dslinter <other_options> <path_to_sources>
如何贡献
欢迎投稿!如果您想贡献,请参阅以下步骤:
- 分叉存储库并克隆您分叉的存储库。
git clone https://github.com/your-github-account/dslinter.git
git submodule update --init --recursive
dslinter用于poetry管理依赖项,因此您需要先安装poetry,然后再安装依赖项。
pip install poetry
poetry install
- 要从
dslinter源代码安装以用于开发目的,请使用以下命令进行安装:
poetry build
pip install ./dist/dslinter-version.tar.gz
- 将自己分配给您要解决的问题。如果您发现需要解决的新问题,请随时打开新问题。
- 对存储库进行更改并运行测试。使用 pytest 运行测试:
poetry run pytest .
- 发出拉取请求。拉取请求有望通过测试。:)
已实施的检查器:
-
C5501 - C5506 | 进口 | 导入检查器:检查数据科学模块是否使用正确的命名约定导入。
-
R5501 | 不必要的迭代熊猫 | 不必要的迭代检查器(熊猫):矢量化解决方案优于 DataFrame 的迭代器。如果在可以使用矢量化 API 的同时使用迭代,则违反了规则。
-
W5501 | 数据框迭代修改-pandas | 不必要的迭代检查器(熊猫):不应修改迭代的数据帧。如果在迭代期间修改了数据框,则违反了规则。
-
R5502 | 不必要的迭代张量流 | Unnecessary Iteration Checker(TensorFlow):如果循环中有任何增广赋值操作,则违反了规则。循环中的增强分配可以用 TensorFlow API 中的矢量化解决方案替换。
-
E5501 | 南numpy | Nan Equality Checker(NumPy):值不能与 np.nan 进行比较,如
np.nan != np.nan. -
W5502 | 链索引熊猫| 链索引检查器(熊猫):链索引在熊猫代码中被认为是不好的做法,应该避免。如果在 pandas 数据帧上使用链索引,则违反规则。
-
R5503 | 数据类型-pandas | 数据类型检查器(熊猫):从数据导入数据帧时应设置数据类型,以确保按预期导入数据格式。如果导入时未设置数据类型,则违反规则。
-
R5504 | 列选择熊猫 | 列选择检查器(熊猫):应在导入数据框后选择列,以便更好地阐述下游的预期。
-
R5505 | 合并参数-pandas | Merge Parameter Checker(Pandas):应该为合并操作设置参数“how”、“on”和“validate”,以确保正确使用合并。
-
W5503 | 就地熊猫 | InPlace Checker(Pandas):对 DataFrames 的操作返回新的 DataFrames,它们应该分配给一个变量。否则结果将丢失,违反规则。白名单中的操作和带有
in_place参数集的操作被排除在外。 -
W5504 | 数据帧转换熊猫 | Dataframe Conversion Checker(Pandas):对于 pandas 代码中的 dataframe 转换,使用 .to_numpy() 而不是 .values。如果 .values 在 pandas 代码中使用,则违反规则。
-
W5505 | 缩放器缺失-scikitlearn | Scaler Missing Checker(ScikitLearn):在 scikit-learn 代码中的每个缩放敏感操作之前检查是否使用了缩放器。缩放敏感操作包括主成分分析 (PCA)、支持向量机 (SVM)、随机梯度下降 (SGD)、多层感知器分类器以及 L1 和 L2 正则化。
-
R5506 | 超参数-scikitlearn | Hyperparameter Checker(ScikitLearn):对于 scikit-learn 学习算法,需要设置一些重要的超参数。
-
R5507 | 超参数张量流 | Hyperparameter Checker(TensorFlow):对于神经网络学习算法,需要设置一些重要的超参数,例如学习率、批量大小、动量和权重衰减。
-
R5508 | 超参数-pytorch | Hyperparameter Checker(PyTorch):对于神经网络学习算法,需要设置一些重要的超参数,例如学习率、批量大小、动量和权重衰减。
-
W5506 | 内存释放张量流 | Memory Release Checker(TensorFlow):如果在循环中创建神经网络,并且没有使用内存清除操作,则违反规则。
-
W5507 | 确定性pytorch | Deterministic Algorithm Usage Checker(PyTorch):如果在 pytorch 程序中未使用 use_deterministic 算法,则违反规则。
-
W5508 | 随机控制numpy | Randomness Control Checker(NumPy): np.seed() 应该用于保持机器学习程序中的可重复性。
-
W5509 | 随机控制-scikitlearn | Randomness Control Checker(ScikitLearn):对于跨执行的可重现结果,请在 scikit-learn 估计器中删除任何 random_state=None 的使用。
-
W5510 | 随机控制张量流 | Randomness Control Checker(TensorFlow) : tf.random.set_seed() 应该用于在 Tensorflow 程序中保持可重复性。
-
W5511 | 随机控制pytorch | Randomness Control Checker(PyTorch):torch.manual_seed() 应该用于在 Tensorflow 程序中保持可重复性。
-
W5512 | 随机控制数据加载器-pytorch | 随机控制检查器(PyTorch-Dataloader):应在数据加载器中设置 worker_init_fn() 和生成器以保持可重复性。如果未设置,则违反规则。
-
W5513 | 缺少掩码张量流 | Mask Missing Checker(TensorFlow) : 如果代码中使用了 log 函数,检查参数值是否有效。
-
W5514 | 缺少掩码-pytorch | Mask Missing Checker(PyTorch) : 如果代码中使用了 log 函数,检查参数值是否有效。
-
W5515 | 张量数组张量流| 张量数组检查器(Tensorflow):使用 tf.TensorArray() 在循环中增长数组。
-
W5516 | 前向pytorch | Net Forward Checker(PyTorch):建议在 PyTorch 代码中使用 self.net() 而不是 self.net.forward()。如果在代码中使用了 self.net.forward(),则违反了规则。
-
W5517 | 梯度清除pytorch | Gradient Clear Checker(PyTorch):loss_fn.backward() 和 optimizer.step() 应该与 optimizer.zero_grad() 一起使用。如果
.zero_grad()代码中缺少 ,则违反了规则。 -
W5518 | 管道未使用的 scikitlearn | Pipeline Checker(ScikitLearn):所有 scikit-learn 估计器都应该在 Pipelines 内部使用,以防止训练和测试数据之间的数据泄漏。
-
W5519 | 依赖阈值-scikitlearn | Dependent Threshold Checker(TensorFlow):如果代码中使用了与阈值相关的评估(例如,f-score),请检查代码中是否也使用了与阈值无关的评估(例如,auc)指标。
-
W5520 | 依赖阈值张量流 | Dependent Threshold Checker(PyTorch):如果代码中使用了与阈值相关的评估(例如,f-score),请检查代码中是否也使用了与阈值无关的评估(例如,auc)指标。
-
W5521 | 依赖阈值pytorch | Dependent Threshold Checker(ScikitLearn):如果代码中使用了阈值相关评估(例如,f-score),请检查代码中是否也使用了与阈值无关的评估(例如,auc)指标。
团队
dslinter 由 Mark Haakman 和 Haiyin Zhang 在我们在 TU Delft 的软件工程研究组 (SERG) 和 ING 的 AI for FinTech 研究实验室的硕士论文中开发,由 Luís Cruz 和 Arie van Deursen 监督。
维护者:张海印 [ hynn0633@gmail.com ]。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。