Pipecuter为luigi提供了一些工具,以便它能够更好地与数据科学库和环境(如pandas、scikitlearn和Jupyter笔记本)配合使用。
pipecutter的Python项目详细描述
切管器
Pipecuter为luigi提供了一些工具,以便它能够更好地与数据科学库和环境(如pandas、scikit learn和Jupyter笔记本)配合使用。在
目录
安装
pip install pipecutter
Python3.6+是必需的。切管器跟随semantic versioning。在
使用
Pipecuter目前提供
- 一种在交互式环境(如Jupyter笔记本)中运行和调试luigi任务的更方便的方法
- 一些luigi的目标是将pandas数据帧保存到parquet,scikit使用joblib学习模型。。。在
在交互式环境中调试
使用luigi,您已经可以在Python脚本/Jupyter notebook/Python控制台中运行任务,方法是使用luigi.build
函数(可能使用local_scheduler=True
作为arugment)。但是,如果任务抛出异常,这将被luigi捕获,并且您无法进入事后调试会话。pipecutter.run
是{
这将减少在开发模型时已经使用luigi任务的障碍,从而使以后更容易投入生产。在
此外,您可以用pipecutter.print_tree
(包装luigi.tools.deps_tree.print_tree
)打印任务的依赖关系,或者用pipecutter.build_graph
构建一个graphviz图,可以将其另存为.png、.pdf等,或者直接在Jupyter笔记本中查看。请参阅完整的示例,以获取此外观的屏幕截图。build_graph
函数要求您有{a11}。在
目标
在pipecutter.targets
中,您可以找到一些基于luigi的LocalTarget
的目标,但是另外还有一个load
和一个dump
方法。命名目标的一种方便的方法是在名称中使用task_id
,这对于任务名称及其传入参数是唯一的。在
importluigiimportpipecutterfrompipecutter.targetsimportJoblibTargetfromsklearn.ensembleimportRandomForestClassifierclassTrainModel(luigi.Task):n_estimators=luigi.IntParameter()defoutput(self):returnJoblibTarget(self.task_id+".joblib")defrun(self):model=RandomForestClassifier(n_estimators=self.n_estimators)self.output().dump(model)pipecutter.run(TrainModel(n_estimators=100))# -> Produces a file called TrainModel_100_0b0ec0cdea.joblib
如果在文件名中使用task_id
,则可以使用添加了output
方法的pipecutter.targets.outputs
修饰符来编写更简洁的任务。默认情况下,它将文件放在一个名为data
的文件夹中。这可以通过可选的folder
参数进行调整。在
frompipeline.targetsimportoutputs@outputs(JoblibTarget)classTrainModel(luigi.Task):n_estimators=luigi.IntParameter()defrun(self):model=RandomForestClassifier(n_estimators=self.n_estimators)self.output().dump(model)
完整的例子
importluigiimportpandasaspdimportnumpyasnpimportpipecutterfromluigi.utilimportrequiresfrompipecutter.targetsimportoutputs,JoblibTarget,ParquetTargetfromsklearn.ensembleimportRandomForestClassifier@outputs(ParquetTarget)classPrepareData(luigi.Task):drop_missings=luigi.BoolParameter()defrun(self):train_df=pd.DataFrame.from_dict({"A":[0,1,np.nan],"B":[5,1,2],"label":[0,1,1]})ifself.drop_missings:train_df=train_df.dropna()self.output().dump(train_df)@requires(PrepareData)@outputs(JoblibTarget)classTrainModel(luigi.Task):n_estimators=luigi.IntParameter()defrun(self):train_df=self.input().load()X,y=train_df.drop("label",axis=1),train_df["label"]model=RandomForestClassifier(n_estimators=self.n_estimators)model.fit(X,y)self.output().dump(model)train_model=TrainModel(n_estimators=100,drop_missings=True)pipecutter.build_graph(train_model)
最后一个命令可用于可视化依赖关系树,如果管道更复杂,这一点尤其有用。它返回一个graphviz.Digraph
对象,该对象将在Jupyter笔记本中呈现为
最后,使用以下命令运行任务:
pipecutter.run(train_model)
- 项目
标签: