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

标签 pandas visual-studio-code jupyter-notebook latex

我自己花了很长时间才对我的询问做出合理的回答,但遇到了死胡同,希望你们能帮助我。

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

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

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

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

    我尝试过的:

    (1) 这很简单,我只是 --no-inputnbconvert anaconda shell 中的命令以及我对下一点所做的任何事情,它都排除了代码

    (2) 到目前为止,我可以找到两种方法,它们会影响所有后续步骤/要求
  • 方式 1(“html detour”):我将 .ipynb 转换为 html 并将其打印为 PDF(这是一个 2 步过程,因此我将其视为绕行)
  • 方式 2(“ latex 转换”):我通过 nbconvert --to pdf 将其转换为 PDF它在后台使用 latex 来创建 pdf

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

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

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

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

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

    谢谢!!!!!

    最佳答案

    老实说,我和你在同一条船上。使用 nbconvert 和 friend 从 JupyterLab/Jupyter 本地生成可发布的 PDF 报告似乎非常具有挑战性。
    解决方案(我正在使用):我可以推荐的是一种不同的工具,可以帮助您制作出色的 PDF 报告。它正在使用 RStudio 的 Rmarkdown(完全免费)和来自 RStudio 的使用 Python 的新功能 .我将在我的 R/Python 团队类(class)中教授这个(course waitlist 已上线)。
    报告示例
    enter image description here
    以下是我在类(class)中的做法:
    第 1 步 - 安装 Rstudio IDE 1.4+ 和 R 4.0+
    前往 Rstudio 和 install their IDE .您还需要install R .
    第 2 步 - 创建一个项目
    enter image description here
    第 3 步 - 设置项目的 Python 环境
    转到工具 > 项目选项。选择 Python 解释器。
    enter image description here
    第 4 步 - 开始编码 Markdown 和 Python
    使用“Python 代码块”。
    enter image description here
    第 5 步 - 编织成 PDF
    请注意,这需要某种形式的 LatTex。您可以使用此软件包轻松安装:tinytex .
    enter image description here
    第 6 步 - 查看您的 PDF 报告
    看起来很光滑。
    enter image description here
    试试看,看看它是否适合你。

    关于pandas - 如何从 jupyter 笔记本创建业务就绪报告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61769201/

    相关文章:

    python - 如何在 Python/Pandas 中构建 "many-hot"?

    css - 如何修复 "no such file or directory, lstat ' scss/'"?

    css - 使用主题 tokenColors 的 VS 代码 webview css 变量名称

    python - 在 Jupyter Lab 中,在 Python 控制台中执行编辑器代码

    python - 从多个 OHLCV 数据帧创建单个 pandas 数据帧

    python - 从列表中查找 pandas 列与另一列的唯一组合

    python - Pandas 列值替换

    visual-studio-code - 获取 "Error: Failed to connect to OmniSharp"

    python - 将多列融合为一列

    jupyter-notebook - 有没有办法方便地折叠/展开 ipython 单元格?