Pipecuter为luigi提供了一些工具,以便它能够更好地与数据科学库和环境(如pandas、scikitlearn和Jupyter笔记本)配合使用。

pipecutter的Python项目详细描述


切管器

PyPI versionPython versionsbuild statuscoverage

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是{}周围的轻型包装器,它禁用此异常处理。在

^{pr2}$

这将减少在开发模型时已经使用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笔记本中呈现为

build graph example

最后,使用以下命令运行任务:

pipecutter.run(train_model)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用MVC设计模式观察嵌套对象   java将多个客户端连接到服务器   合并Java Web应用程序   Spring Security中未捕获java AuthenticationSuccessEvent   java Firebase JSON到Arraylist内部的Arraylist,存在对象问题   在Java15的sealedclasses特性中,final类和非密封类之间有什么区别?   java我可以使用数组。copyOf制作二维数组的防御副本?   java球不会在屏幕上移动   Java类如何在同一个文件中包含两个类?   java使用“Character.isWhiteSpace”删除所有空白   java阻止在RealmList中保存时创建领域对象   如何仅在ConnectionFactory上使用Java JMS身份验证   spring可以强制java对象在运行时实现接口吗?   socket无法在JAVA中使用TCP启用双工模式通信