当前位置:   article > 正文

jupyter导出存什么文件_面对海量数据用Excel无从下手?试试Jupyter吧

jupyter notebook数据处理好怎么保存为excel

850f45d27c5d31893637a20542a49e65.png
全文共 4715字,预计学习时长 10分钟

最近,一篇很有见地的文章《Jupyter即新型Excel》(Jupyter is the new Excel)备受瞩目。很多专业人士在应对大量数据分析任务时首选Excel,但文章作者Semi Koen认为,对于许多“大数据”难题来说,Jupyter笔记本会更有效。

如果你精通Jupyter兼容语言,你就会知道她在说什么,并且也不会真的打算用Excel来处理大数据集。

本文旨在与那些不太熟悉代码的人分享Jupyter的功能,并探寻一些挑战的解决方案。

40e35e4de325fa20e8591f37d3311b7e.png
图片来源:Campaign Creators/Unsplash

4884e45587ff9e40794304b4b0fb19fa.png

从何下手?

比如说,你辛辛苦苦对数据进行分析并生成了一些图标,要通过什么和别人分享?

这主要取决于受众目标,以下是两种主要途径:

· 导出(例如,可以通过电子邮件发送单独的PDF或Excel电子表格)

· 托管(一些易阅读的笔记本版本,期间可能被简化,但交互性质没变)

很多途径都跟一个简单但令人崩溃的问题相关:难以隐藏代码单元格。管理团队肯定不愿意看见收到的文件里有用于生成表格和图表的Python代码。

隐藏代码

事实证明,要做到这一点非常困难,而且没有适用于所有场景的万能解决方法。

Jupyter的一个拓展件可隐藏所有输入数据(https://github.com/ipython-contrib/jupyter_contrib_nbextensions/tree/master/src/jupyter_contrib_nbextensions/nbextensions/hide_input_all?source=post_page---------------------------),能够自由切换Jupyter中的隐形及可见代码状态,但这对于大多数导出/静态共享方案无效。

StackOverflow post(https://stackoverflow.com/questions/27934885/how-to-hide-code-from-cells-in-ipython-notebook-visualized-with-nbviewer/28073228#28073228)包含一个建议的代码片段,可以粘贴到笔记本顶部,它可以进入nbviewer(稍后讨论的“静态托管”共享解决方案之一)并导出HTML,但导出选项不多……

讨论分享笔记本电脑的每一种潜在方式时,将再次讨论这个问题。

4884e45587ff9e40794304b4b0fb19fa.png

导出方案

首先,来看看那些看起来像是托管的Jupyter笔记本程序中取出东西的最佳途径,最后再回到可以附加到电子邮件中的简单文件。

另存为

在Jupyter笔记本中查看文件菜单,打开“另存为”,就可以查看现有的一些文件格式。

“HTML”选项是在独立文件中准确表示原始笔记本的最佳方法。其还可以通过上面提到的“StackOverflow”代码片段来维护代码单元格的隐藏,但不会涉及大多数微件。在任何情况下,HTML都不是管理人员用来接收电子邮件的格式,甚至可能被安全软件阻止。

听起来,PDF和它更像。但是这很难直接获得(需要先安装某种形式的LaTeX软件,这可能很麻烦),而且它不会隐藏你的代码单元。事实上,生成一个PDF最好的方法可能仅仅是使用浏览器自己的打印功能,要求它输出一个PDF,显示当前浏览器中的笔记本。这包含当时在浏览器中看到的所有内容(因此,如果代码单元格通过隐藏所有输入数据被隐藏,那么这也将反映在PDF中)。

用心爱的Excel表格制表软件

大多数其他可用的格式都极具技术性,并不真的适合此处试图实现的目标。于是笔者启动了nb2xls project——一个易于安装的额外导出途径,允许用户根据笔记本的输出单元格(标准情况下不包括输入代码单元格)获取Excel电子表格文件。

这样做的好处是表格仍然是电子表格中的表格——可以在数字上拖动鼠标,查看总数和平均值!还将显示图形输出,如图表。不需要担心页面大小,因为如果笔记本很长或很宽,有很多行和列要填。

9760bc0c43eb3a9523045689c685433a.png
nb2xls 截图

要安装,只需运行pip install nb2xls,这应该会在文件菜单中添加一个额外的“Download As”选项:“Excel Spreadsheet (.xlsx)”。

在编写时,它是一个实验性的包——代码仍需要一些工作来为复杂的表或标记提供最佳结果。

详情和范例传送门:https://github.com/ideonate/nb2xls?source=post_page---------------------------

在命令行上进行转换

所有这些“另存为”选项实际上只是命令行实用程序nbconvert的包装器,使用默认选项调用转换过程。如果确实需要指定任何转换选项,则可以使用命令行等效项。

例如,隐藏所有输入数据扩展文档时,建议使用下面的命令来获得导出的HTML文件,并删除输入代码单元格:

jupyter nbconvert --template=nbextensions --to=html my_notebook.ipynb

自行保存

“另存为”选项提供了一些有用的基础设施,可以将笔记本的骨架导出到单独的文件中。但是值得注意的是,在已经处于熟悉的编码环境中,因此直接从代码单元格生成一些文件非常有意义。例如,如果有一个大型panda DataFrame,那么最好将其保存为CSV,以便收件人可以完整地加载。类似这样:df.to_csv('./data.csv')。在实践中,首先要将它导入到Excel中,这样就可以对列进行格式化,并在标题下面加上下划线等。

4884e45587ff9e40794304b4b0fb19fa.png

Jupyter必不可少

虽然上面的导出选项只允许以独立的文件格式获取笔记本的核心,但有时(尤其是当微件在笔记本中占据重要位置时),需要找到一种方法来保持现有的Jupyter格式。

如果需要找到与非开发人员分享的途径,以便达到以下目标:

· 让他们理解

· 易于获取

· 安全,只有组织内能看到敏感数据

· 防御,非开发人员无法破坏任何东西或数据

下文的信息将会揭露一些潜在的途径。

4884e45587ff9e40794304b4b0fb19fa.png

Jupyter自带的项目

Jupyter项目组织有一些辅助项目,如果需要经常共用笔记本电脑,那么可以考虑投资一些基础设施。

两个中心

JupyterHub(https://jupyter.org/hub)是在共享资源上集中创建Jupyter工作区的一种方法,因此至少其他用户不需要运行自己的Jupyter服务器。除非你有一个可以在内部网络上运行JupyterHub的小型组织,否则需要考虑如何为适当的用户添加身份验证。

17ca63bb4057852f4cc4ca310beb770b.png
JupyterHub的主页标识

BinderHub确实扩展了JupyterHub,允许用户基于特定的计算环境(Python包等)启动一个Jupyter工作区,该环境是在git存储库中定义的,同时还包含与项目相关的数据文件和笔记本。用户可以通过直接访问一个URL来启动工作区。这就为你的工作提供了一个更加正式和易于访问的展示窗口。要查看名为http://mybinder.org的BinderHub公共实例的示例,请查看GitHub上my nb2xls repo的Readme页面上的“Launch Binder”链接(https://github.com/ideonate/nb2xls)。

在实践中,这两个项目都不适合现成的任务——管理团队不想改变在笔记本上的输入方式。而且,将工作存储在git repo或工作区中(对于非开发人员来说是有意义的)会加大管理开销。

nbviewer

nbviewer (https://github.com/jupyter/nbviewer)是一个更适合的轻量级服务,可以通过一个URL轻松地托管笔记本。可以把它看作上面讨论的HTML导出选项的托管web页面版本:Javascript可以工作,但是其背后没有活动内核,所以用户只能在最后一次运行笔记本时看到作为输出的工作结果。

与Binder一样,提供一个免费的nbviewer托管版本试用。可以在GitHub上提供指向笔记本的URL,但也可以使用Dropbox链接。例如,在Dropbox的ipynb文件上“复制Dropbox链接”,然后将URL粘贴到https://nbviewer.jupyter.org/的框中。你可以与同事共享生成的查看器页面的URL,但当然要注意这并不安全。

ad820e7ed141dd5eb4961271e270530d.png
nbviewer.jupyter.org 主页

与向数据的管理团队发送HTML文件相比,共享URL更容易让人感到自然,但实际上,你不会从nbviewer获得HTML导出无法实现的很多东西。因此,到目前为止,Jupyter计划的任何一个主要项目似乎都没有带来多大帮助。

事实正是如此!

Jupyter项目最近的一个开发可能正是大家正在寻找的:voilà(https://github.com/QuantStack/voila)允许你托管一个带有活动内核的笔记本,而不需要任何移位输入。默认情况下,代码单元格是隐藏的且禁止前端的执行请求,所以用户即使尝试,也不能破坏任何东西!

e8e9f594924caac38a49cb6e3945748f.png
voilà 标识

在正在讨论的情况下,这可能成为一种非常好的分享笔记本的方式,但是仍然需要大量的工作。在编写本文时,只能共享一个指向记事本应用程序的单用户链接,如果多个用户的独立操作混淆了记事本中的数据流,则多个用户可能会发生冲突。

现有将voilà与JupyterHub(如上所述)集成的计划,这将允许多用户访问你的voilà托管笔记本电脑。当然,每当同事选择查看你的笔记本电脑时,你仍然需要确保voilà服务器正在运行,因此这不是你通常会在本地机器上持续运行的内容。

4884e45587ff9e40794304b4b0fb19fa.png

目光放远

Kyso(https://kyso.io/)是一种第三方服务,允许“将数据科学博客化”。其主页上列出了一些公共笔记本(以及文章、链接、数据集和图表),可以让你了解如何共享笔记本。在付费计划中,你可以将协作限制在团队内部。默认情况下,代码输入单元格是隐藏的!

其应该带有实时的Jupyter微件,尽管现在遇到了一些问题,因为JupyterLab并不完全稳定,而且许多Jupyter微件还没有适应JupyterLab。Kyso目前似乎固定在JupyterLab 0.35上。

ce5c1bd7f4e050fb580db56c56c5a8b4.png

另一项服务,Saturn Cloud(https://www.saturncloud.io/)是一个完整的云托管环境,作为谷歌云或亚马逊云服务等服务的替代,内置“发布”功能。虽然你的同事可以很容易地推出你的笔记本,但完全私人的出版似乎是不可能的。

4884e45587ff9e40794304b4b0fb19fa.png

结论

事实证明,这比我们希望与非开发人员分享Jupyter笔记本实验结果要困难得多!我们想要的特性是确保代码被隐藏,结果易于访问,根据需要显示是交互式的,并且数据要保持安全。

虽然现在已经有了一些导出功能(超文本标记语言、个人数据文件、电子表格),但在共享复杂数据时,这些都带来了挑战或限制。考虑到更实质性的托管选项,要么需要实现自己的基础架构(例如,运行自己的nbviewer或voilà实例),要么将数据科学工作流程改造为新的第三方云托管服务。

因此,最佳解决方案将在很大程度上取决于共享的数据,以及需要多久提交一次类似的报告。值得注意的是,在整个组织中所做的各种演示中,都有一些模式。对于大数据分析的特别共享,仍然需要从仔细导出的CSv中汇编电子表格;但是如果这种情况经常发生,也许是时候投资一些可用的基础设施来解决这个问题了。

e084b7386d9bf12dba87bfaf17f9dbdf.png

留言 点赞 关注

我们一起分享AI学习与发展的干货

欢迎关注全平台AI垂类自媒体 “读芯术”

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/1001089
推荐阅读
相关标签
  

闽ICP备14008679号