赞
踩
全文共 4715字,预计学习时长 10分钟
最近,一篇很有见地的文章《Jupyter即新型Excel》(Jupyter is the new Excel)备受瞩目。很多专业人士在应对大量数据分析任务时首选Excel,但文章作者Semi Koen认为,对于许多“大数据”难题来说,Jupyter笔记本会更有效。
如果你精通Jupyter兼容语言,你就会知道她在说什么,并且也不会真的打算用Excel来处理大数据集。
本文旨在与那些不太熟悉代码的人分享Jupyter的功能,并探寻一些挑战的解决方案。
比如说,你辛辛苦苦对数据进行分析并生成了一些图标,要通过什么和别人分享?
这主要取决于受众目标,以下是两种主要途径:
· 导出(例如,可以通过电子邮件发送单独的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,但导出选项不多……
讨论分享笔记本电脑的每一种潜在方式时,将再次讨论这个问题。
首先,来看看那些看起来像是托管的Jupyter笔记本程序中取出东西的最佳途径,最后再回到可以附加到电子邮件中的简单文件。
在Jupyter笔记本中查看文件菜单,打开“另存为”,就可以查看现有的一些文件格式。
“HTML”选项是在独立文件中准确表示原始笔记本的最佳方法。其还可以通过上面提到的“StackOverflow”代码片段来维护代码单元格的隐藏,但不会涉及大多数微件。在任何情况下,HTML都不是管理人员用来接收电子邮件的格式,甚至可能被安全软件阻止。
听起来,PDF和它更像。但是这很难直接获得(需要先安装某种形式的LaTeX软件,这可能很麻烦),而且它不会隐藏你的代码单元。事实上,生成一个PDF最好的方法可能仅仅是使用浏览器自己的打印功能,要求它输出一个PDF,显示当前浏览器中的笔记本。这包含当时在浏览器中看到的所有内容(因此,如果代码单元格通过隐藏所有输入数据被隐藏,那么这也将反映在PDF中)。
大多数其他可用的格式都极具技术性,并不真的适合此处试图实现的目标。于是笔者启动了nb2xls project——一个易于安装的额外导出途径,允许用户根据笔记本的输出单元格(标准情况下不包括输入代码单元格)获取Excel电子表格文件。
这样做的好处是表格仍然是电子表格中的表格——可以在数字上拖动鼠标,查看总数和平均值!还将显示图形输出,如图表。不需要担心页面大小,因为如果笔记本很长或很宽,有很多行和列要填。
要安装,只需运行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中,这样就可以对列进行格式化,并在标题下面加上下划线等。
虽然上面的导出选项只允许以独立的文件格式获取笔记本的核心,但有时(尤其是当微件在笔记本中占据重要位置时),需要找到一种方法来保持现有的Jupyter格式。
如果需要找到与非开发人员分享的途径,以便达到以下目标:
· 让他们理解
· 易于获取
· 安全,只有组织内能看到敏感数据
· 防御,非开发人员无法破坏任何东西或数据
下文的信息将会揭露一些潜在的途径。
JupyterHub(https://jupyter.org/hub)是在共享资源上集中创建Jupyter工作区的一种方法,因此至少其他用户不需要运行自己的Jupyter服务器。除非你有一个可以在内部网络上运行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 (https://github.com/jupyter/nbviewer)是一个更适合的轻量级服务,可以通过一个URL轻松地托管笔记本。可以把它看作上面讨论的HTML导出选项的托管web页面版本:Javascript可以工作,但是其背后没有活动内核,所以用户只能在最后一次运行笔记本时看到作为输出的工作结果。
与Binder一样,提供一个免费的nbviewer托管版本试用。可以在GitHub上提供指向笔记本的URL,但也可以使用Dropbox链接。例如,在Dropbox的ipynb文件上“复制Dropbox链接”,然后将URL粘贴到https://nbviewer.jupyter.org/的框中。你可以与同事共享生成的查看器页面的URL,但当然要注意这并不安全。
与向数据的管理团队发送HTML文件相比,共享URL更容易让人感到自然,但实际上,你不会从nbviewer获得HTML导出无法实现的很多东西。因此,到目前为止,Jupyter计划的任何一个主要项目似乎都没有带来多大帮助。
事实正是如此!
Jupyter项目最近的一个开发可能正是大家正在寻找的:voilà(https://github.com/QuantStack/voila)允许你托管一个带有活动内核的笔记本,而不需要任何移位输入。默认情况下,代码单元格是隐藏的且禁止前端的执行请求,所以用户即使尝试,也不能破坏任何东西!
在正在讨论的情况下,这可能成为一种非常好的分享笔记本的方式,但是仍然需要大量的工作。在编写本文时,只能共享一个指向记事本应用程序的单用户链接,如果多个用户的独立操作混淆了记事本中的数据流,则多个用户可能会发生冲突。
Kyso(https://kyso.io/)是一种第三方服务,允许“将数据科学博客化”。其主页上列出了一些公共笔记本(以及文章、链接、数据集和图表),可以让你了解如何共享笔记本。在付费计划中,你可以将协作限制在团队内部。默认情况下,代码输入单元格是隐藏的!
其应该带有实时的Jupyter微件,尽管现在遇到了一些问题,因为JupyterLab并不完全稳定,而且许多Jupyter微件还没有适应JupyterLab。Kyso目前似乎固定在JupyterLab 0.35上。
另一项服务,Saturn Cloud(https://www.saturncloud.io/)是一个完整的云托管环境,作为谷歌云或亚马逊云服务等服务的替代,内置“发布”功能。虽然你的同事可以很容易地推出你的笔记本,但完全私人的出版似乎是不可能的。
事实证明,这比我们希望与非开发人员分享Jupyter笔记本实验结果要困难得多!我们想要的特性是确保代码被隐藏,结果易于访问,根据需要显示是交互式的,并且数据要保持安全。
虽然现在已经有了一些导出功能(超文本标记语言、个人数据文件、电子表格),但在共享复杂数据时,这些都带来了挑战或限制。考虑到更实质性的托管选项,要么需要实现自己的基础架构(例如,运行自己的nbviewer或voilà实例),要么将数据科学工作流程改造为新的第三方云托管服务。
因此,最佳解决方案将在很大程度上取决于共享的数据,以及需要多久提交一次类似的报告。值得注意的是,在整个组织中所做的各种演示中,都有一些模式。对于大数据分析的特别共享,仍然需要从仔细导出的CSv中汇编电子表格;但是如果这种情况经常发生,也许是时候投资一些可用的基础设施来解决这个问题了。
留言 点赞 关注
我们一起分享AI学习与发展的干货
欢迎关注全平台AI垂类自媒体 “读芯术”
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。