如何从 jupyter 笔记本创建业务就绪报告?

Posted

技术标签:

【中文标题】如何从 jupyter 笔记本创建业务就绪报告?【英文标题】:How to create business ready reports from jupyter notebooks? 【发布时间】:2020-08-29 07:48:53 【问题描述】:

我自己花了很长时间才得到一个合理的答案,但遇到了死胡同,希望你们能帮助我。

问题: 出于业务报告的目的,我创建了一些 juypter 笔记本,其中包括多个 pandas 表和 seaborn / matplotlib 图作为代码单元输出,中间偶尔会出现一些降价单元以提供解释。现在,我希望这些报告采用业务就绪格式,以便与利益相关者共享。对于业务就绪,我打算满足以下要求:

    报告不包含代码 输出文件格式:PDF 报告包括标题页、附加信息(例如分析日期)和目录 表格采用吸引人的视觉格式,便于接收信息 报告结构合理

...我无法将所有这些要求放在一起。

到目前为止,我更喜欢使用 vscode 并在必要时使用基于浏览器的 juypter notebook(遗憾的是它缺少一些功能)。

我尝试过的:

(1) 这很简单,我只是 --no-input 到 anaconda shell 中的 nbconvert 命令,无论我对接下来的几点做什么,它都排除了代码

(2) 到目前为止,我可以找到两种方法,它们会影响所有后续步骤/要求

方式 1(“html detour”):我将 .ipynb 转换为 html 并将其打印为 PDF(这是一个两步过程,因此我将其视为 detour)李> 方式 2(“乳胶转换”):我通过 nbconvert --to pdf 将其转换为 PDF,并在后台使用乳胶创建 pdf

(3) ...从这里开始问题:html detour: 我可以通过 jupyter 笔记本的 nbextension 扩展获得一个目录,有了它,我可以使用 H1标题级别作为标题或包含一个额外的降价单元格,并使用 html 命令增加字体大小,使其看起来很吸引人。附加信息在额外的代码单元中手动添加。但是toc只在浏览器版本的jupyter中有效,导致在vscode中写分析,去浏览器添加toc,在shell中转换,打开html打印为pdf... latex 转换: 我可以设置一个latex 模板,该模板包含在nbconvert 命令中,其中包含设计的目录。但是,它要么自动选择文件名作为标题,要么选择我可以在笔记本元数据中设置的标题,我只能从浏览器中编辑。此外,转换日期也会自动添加到标题下方,这可能是分析的日期,以防我因为有人想要进行细微更改或其他事情而必须重新转换它。因此,我无法关闭自动标题和日期(至少到目前为止我找不到选项)而且我也有多个步骤。

(4) 这最终会影响报告的可用性html 绕道: html 文件本身的格式是您通常使用 @ 从表格中获得的非常吸引人的格式987654327@ jupyter 中表格上的命令(如果您只是在没有print() 的情况下调用juyper 中的变量,或者如果您在降价单元格中构建表格,则无论如何都会使用该命令。该表有一个粗体标题,每隔一行有一个灰色背景。使用 pandas .style 方法,我可以很好地格式化 html 文件中的表格,红色字体仅用于负值或百分比条作为单元格背景。但是,当我打印 PDF 时,我会丢失所有这些格式。然后它只是一个粗体标题,一个粗体线分割标题和正文以及行。此外,所有单元格输出表在 html 中左对齐(我指的是表本身,而不是其内容)并且降价表居中,这看起来很奇怪,或者更确切地说 - 这就是问题 - 不专业。然而,好处是,如果表格比字母页宽,这些表格会在一定范围内自动调整为特定范围内的字母大小格式。 latex 转换: 根据设计,表格不会被转换。我必须使用pandas.set_option(display.large_repr, True) 来转换所有后续的熊猫表输出,或者将.to_latex()添加到每个熊猫表中。这有几个缺点。使用它,所有表都显示为在 Latex 中构建表所需的代码,并且在进行分析时,这通常更难解释......特别是如果你想找到错误。仅在分析完成后添加它,只会创建不必要的迭代。此外,我想将最后一份报告用作下一份报告的模板,并且必须删除命令,做我的工作并再次添加它。较宽的表格不适合字母大小,无论它们与页面大小相比有多宽,都会被剪掉,我必须检查每个表格(上次报告是 20+)是否包含所有内容。 ...如果包含解释性信息,标题会变长。最后,latex 表格格式最终看起来很专业,但在科学上更专业,而不是商业专业,根据我的经验,这可能会让一位或另一位读者望而却步。

(5) 因此,由于所有内容都是由单元格生成并自动转换的,因此您会得到一些奇怪的输出,其中一页末尾有标题,下一页有文本、表格和图表……或者只有一个图表的页面和等等... html 绕道 很难描述我遇到的一般问题。如果你曾经打印过一个网站,你可能会得到一些奇怪的文本块,看起来没有结构,偶尔会有半白页,它们不应该是。这就是你在打印 jupyter 的 html 文件时得到的。如果我可以包含强制分页符,并且您可以找到在单元格或单元格元数据中添加分页符的多个版本,但它们不起作用,因为 html 是使用禁止分页符的高级设置创建的,这将有所帮助。因此,我只能进入 html 代码并手动添加分页符。我想避免曼努埃尔的努力。 乳胶转换:好吧,\pagebreakworks。

因此,由于上述问题,我目前倾向于使用 html 绕道,但这并没有使它看起来像一个吸引人的报告。我尝试了几个乳胶模板,但通常对输出不满意,因为.to_latex 命令使它变得乏味,并且报告最终看起来像科学论文而不像商业报告。问题是,虽然这看起来像一个高标准,但所有这些要求都由 R-mardkown 笔记本满足,基本上是开箱即用的,文件顶部的 yaml 命令略有添加。但我不能将它们用于我想要创建的报告。

所以,经过这么长的介绍(感谢大家花时间阅读它),我的问题是如何从 jupyter notebook 中获得吸引人的报告?

谢谢!!!!!!

【问题讨论】:

嗨,你找到什么了吗?我和你一样,我不太喜欢下面提出的解决方案。 可以选择 Jupyter-book 吗?我正在进行类似的狩猎,今天刚刚遇到jupyterbook.org/intro.html,github.com/executablebooks/jupyter-book。我要试一试。 @bard 是的,它实际上是一个非常好的潜在选择。我在一些版本前对其进行了测试,并订阅了更新。然后,它并没有完全满足我的需要。我没有时间查看最新版本并更新问题。请让我知道您最近使用它的经验,非常感兴趣! 【参考方案1】:

老实说,我和你在同一条船上。使用 nbconvert 和朋友从 JupyterLab / Jupyter 本地生成可发布的 PDF 报告似乎非常具有挑战性。

解决方案(我正在使用):我可以推荐一种不同的工具,它可以帮助您制作精美的 PDF 报告。它使用 RStudio 的 Rmarkdown(完全免费)和使用 RStudio 中的 Python 的新功能。我将在我的 R/Python 团队课程中教授这个(course waitlist 已上线)。

报告示例

这是我在课程中的做法:

第 1 步 - 安装 Rstudio IDE 1.4+ 和 R 4.0+

前往 Rstudio 和 install their IDE。您还需要install R。

第 2 步 - 创建项目

第 3 步 - 设置项目的 Python 环境

转到工具 > 项目选项。选择 Python 解释器。

第 4 步 - 开始编写 Markdown 和 Python

使用“Python 代码块”。

第 5 步 - 编织成 PDF

请注意,这需要某种形式的 LatTex。您可以使用此软件包轻松安装:tinytex。

第 6 步 - 查看您的 PDF 报告

看起来很漂亮。

试试看它是否适合你。

【讨论】:

以上是关于如何从 jupyter 笔记本创建业务就绪报告?的主要内容,如果未能解决你的问题,请参考以下文章

如何将交互式 Jupyter 笔记本嵌入到 html 中?

如何将jupyter笔记本转换为幻灯片

如何从 Azure 数据科学虚拟机使用 SSL 保护我的 Jupyter 笔记本?

如何检查您是不是在 Jupyter 笔记本中

TPS从300笔/秒到5500笔/秒的性能测试优化之路

从外部托管的Jupyter笔记本导出数据