如何使用Jupyter笔记本批量生成报告?

时间:2019-07-10 10:01:10

标签: python loops jupyter-notebook jupyter

我有一个生产报告的Jupyter笔记本。该报告是对大型数据库的给定变量(数以百计的行的数百个变量)的单变量分析。

我的笔记本的结构如下:

report.ipynb

read database
variable_of_interest = 'var1'
plots & html tables for 'var1'

我已经能够通过控制台(而不是笔记本)使用nb convert将笔记本转换为html文件,并隐藏代码单元。

我将有兴趣为我的所有变量:'var1'...'varn'批量生成此报告。我遇到了一些困难,主要是建立一个循环,该循环将更改给定笔记本中的目标变量,然后运行并转换它。 (我的第一种方法是让笔记本在每次执行时都更新变量名,但是我仍然需要某种循环来多次运行它,并且处理特定变量不是很实际)。

更准确地说,我需要:

  • 循环访问所有变量名
  • 读取一次数据(或仅读取循环中的变量?)
  • 为每个变量运行报告(并生成图表)
  • 将报告转换为名称为“ report_vari.html”的html,也许在特定的文件夹“ report”中
  • 在其中一个报告中出现错误的情况下继续运行循环

从控制台或另一个笔记本运行.py脚本来运行这种循环的过程是什么?看起来像什么?

1 个答案:

答案 0 :(得分:1)

papermill + nbconvert是必经之路。 Papermill使您可以对笔记本进行参数设置,然后可以使用nbconvert将其转换为HTML。

如果笔记本之间有复杂的依赖关系,建议您使用ploomber(免责声明:我是作者)。它处理任务之间的依赖性,并透明地使用papermill和nbconvert来执行和转换笔记本。

示例:

dag = DAG()

get_data = PythonCallable(_get_data,
                          product=File('raw.parquet'),
                          dag=dag)

clean_data = PythonCallable(_clean_data,
                            product=File('clean.parquet'),
                            dag=dag)

# execute notebook and convert to HTML
report = NotebookRunner(report,
                        product=File('report.html'),
                        dag=dag,
                        kernelspec_name='python3',
                        ext_in='py')

# run get_data, then clean_data, then generate report
get_data >> clean_data >> report
dag.build()

Full example