在kedro管道中包括Quarto渲染,并将其传递给输入/输出



我正在使用kedro进行一些比较分析。

我使用的是quarto python包,它通过render函数为quarto cli提供了一个包装器。该函数将接收一个qmd文件作为输入,并在计算python块时从中生成一个html报告。

在四分之一报告中,我有一些包含output_var1output_var2评估的块,例如:

plot_function(output_var1)
plot_function(output_var2)

其中output_var1和output_varg2是熊猫数据帧(可以是任何类型的数据(

在管道的最后,我想使用管道的结果用quarto计算我的报告,而不将其保存到数据目录中。

from quarto import render
def create_pipeline(**kwargs) -> Pipeline:
return pipeline([node(func=function1,
inputs='my_input', 
outputs="output_var1"),
node(func=function2,
inputs='my_input',
outputs="output_var2"),
node(func=render,
inputs='params:my_quarto_report', # path to a quatro report *.qmd
outputs=None))])

在该示例中,在数据目录中描述了my_input,但没有描述output_var1output_var2

上面的例子失败了,因为我不知道如何将output_var1和output_varg2传递给quarto。这是怎么做到的?quarto是否有传递复杂变量(如数据帧(的方法?我知道如何传递简单的文本或数字变量,但我不知道如何传递不适合命令行的内容。

经过一些修补,我设法找到了一个不错的解决方案:我不能将复杂的变量直接传递给quarto,但我可以通过将它们作为kwargs提供给调用quarto render函数的节点,使生成报告的节点依赖于其他一些kedro目录项。这里是generate_reportskedro管道生成依赖于在不同管道/节点中生成的output_var的报告的示例。

conf/base/catalog.yml:

output_var_catalog_entry:
type: pickle.PickleDataSet
filepath: data/07_model_output/output_var.pkl

conf/base/parameters.yml:

report_filename: notebooks/report.qmd

笔记本/报告.qmd:

---
jupyter: python3
title: My title
---
Some explanations
```{python}
import kedro
conf_loader = kedro.config.ConfigLoader('conf')
conf_catalog = conf_loader.get("catalog.yml")
catalog = kedro.io.DataCatalog.from_config(conf_catalog)
output_var = catalog.load("output_var_catalog_entry")
some_plot(output_var)
``` 

src/project_name/pipelines/generate_reports/nodes.py

from quarto import render
def generate_report(report: str, **kwargs):
print("This report depends on:")
for kw in kwargs:
print(kw)
render(report)

src/project_name/ppipelines/generate_reports/pipeline.py

def create_pipeline(**kwargs) -> Pipeline:
return pipeline([node(func=generate_report,
inputs={"report": 'params:report_filename',
"output_var": "output_var"},
outputs=None,
name='generate_report')])

相关内容

  • 没有找到相关文章