数据科学
大型综合巡天望远镜(Large Synoptic Survey Telescope,LSST)坐落在智利安第斯山脉帕穹山脊,计划 2022 年启用。它将自动探测南方的天空,每晚产生数兆字节的数据。为了处理这些数据,天文学家将要用到一个熟悉且日益流行的工具——Jupyter notebook。
Jupyter 是一款免费、开源的交互式 web 工具,是一种计算笔记本(computational notebook)。研究人员可以利用它将软件代码、计算输出、解释文本和多媒体资源组合在一个文档中。计算笔记本已经发展了几十年,但是过去几年里 Jupyter 特别受欢迎。因为它的架构经过重新设计,允许 notebook「说」几十种编程语言,所以深受开发人员的喜爱。而根据其共同创始人 Fernando Pérez 的说法,这一点更体现在它的名字中:Jupyter——Julia ( Ju )、Python ( Py )、R。
对代码共享网站 GitHub 的一项分析显示,截至 2018 年 9 月,Jupyter 上公开的 notebook 超过了 250 万份,而 2015 年这一数字仅为 20 万左右。Pérez 表示,Gmail 和 Google Docs 等 web 软件的改进是驱动其使用量增长的一个原因;Python 和数据科学的成熟也是其中一个原因,尤其是 notebook 可以轻松地访问远程数据,因为有些数据可能无法下载(比如 LSST 的数据)。针对 Jupyter 基于云的能力,Pérez 表示,很多情况下,把计算机移动到数据比将数据移到计算机内要容易得多。因为这种架构相当于告诉读者数据在哪里,而且还提供了一台电脑。
华盛顿特区乔治·华盛顿大学的机械和航空工程师 Lorena Barba 说,对于数据科学家来说,Jupyter 已经成为事实上的标准。而负责协调 LSST 数据管理团队的西雅图华盛顿大学天文学家 Mario Jurić则表示,「我从未见过这么快的迁移,真是太好用了!」
数据勘探
可计算的 notebook 本质上是用于科学计算的实验室 notebook。比如说,研究人员没有将 DNA 凝胶黏贴在实验室协议旁边,而是嵌入代码、数据和文本来记录他们的计算方法。圣路易斯·奥比斯波加州理工州立大学的 Jupyter 联合创始人 Brian Granger 说,这种做法的结果是产生了「计算叙事」——一种允许研究人员用分析、假设和推测补充其代码和数据的文件。
对于数据科学家而言,这种格式可以推动探索。Barba 表示,notebook 是一种交互式计算方式,在这种环境中,用户可以执行代码,观察结果,修改并重复研究人员与数据之间的一种迭代对话。它并不是这种对话的唯一载体,交互式 Python 解释器 IPython(Jupyter 前身 IPython Notebook 的创建基础)也是一种载体。但 notebook 允许用户记录这些对话,并在「主题、理论、数据和结果之间建立更强大的联系」。
研究人员还可以用 notebook 为其软件创建教程或交互式手册。哈佛大学的系统神经科学家 Mackenzie Mathis 对 DeepLabCut 就是这么做的。DeepLabCut 是其团队为行为神经科学研究开发的一个编程库。他们可以用 notebook 来准备手稿,或者作为教具。自 2013 年开始,Barba 就在她所教的每门课程中实施了 notebook。在 2014 年的一次主题演讲中,她还讲述了 notebook 让学生以课堂无法比拟的方式互动地参与课程并从中受益的经验。她说,「IPython notebook 确实是科学和工程教学计算的一个杀手级应用程序。」
说我的语言
Jupyter notebook 有两个组件。在前后端网页中,用户在矩形输入框中输入编程代码或者文本。然后浏览器把代码输送到后端内核,后端内核运行该代码并把结果反馈回来。据 Pérez 统计,已经有超过 100 个 Jupyter 内核被创建,支持数十种编程语言。正常来说,每个 notebook 只能够运行一个内核和一种语言,但存在工作区。例如,一个 Demo notebook,支持 Python、Julia、R 和 Fortran。
重要的是,内核不需要驻留于用户的计算机。当 LSST 的未来用户使用 Jupyter notebook 来分析数据时,代码会在位于伊利诺斯州的超级计算机上运行,提供台式机、笔记本无法比拟的算力。Notebook 也可以在云上运行。例如谷歌的 Colaboratory 项目,为 Jupyter notebook 提供了以谷歌为主题的前后端。它使得用户能够协作、运行利用谷歌云资源的代码,例如图处理单元,可以把文档保存在谷歌 Drive 上。
Jupyter 的最新版本是 JupyterLab,于 2018 年 1 月作为测试版发布,它既能作为独立的安装包使用,又能作为免费 Anaconda 科学计算环境的一部分使用。
Jason Grout 是加州旧金山金融服务公司 Bloomberg 的一名软件工程师,也是 JupyterLab 团队的一员。他将 JupyterLab 称为 Jupyter notebook 的「下一代 web 接口」,它通过拖放功能以及文件浏览器、数据查看器、文本编辑器和命令控制台扩展了人们熟悉的 notebook 的内涵。标准 Jupyter notebook 向每个 notebook 分配单独的内核,而 JupyterLab 创建了一个允许这些组件共享的计算环境。因此,用户可以在一个窗口中查看 notebook,在第二个窗口中编辑一份所需的数据文件,在第三个窗口中记录所有的执行命令——所有窗口都在一个 web 浏览器接口中。
用户也可以对 JupyterLab 进行调整,使其适合自己的工作流程。例如,内置查看器用于查看图片、文本和 CSV 文件,但用户也可以构建自定义组件。这些组件可以展示基因组比对、地理空间数据等。参加 Pérez 的一名学员甚至还创建了一个用来展示 3D 大脑成像数据的组件。他表示,「显然,这完全是一个神经科学领域专用工具——Jupyter 团队没有必要写这种东西。但我们提供了正确的标准,那个团队就可以在 24 小时之内写出一个来。」
还有两种工具增强了 Jupyter 的用途。一个是 JupyterHub,这种工具允许机构向大量用户提供 Jupyter notebook。Pérez 任教的加州大学伯克利分校的 IT 团队已经部署了这样一个中心,Pérez 利用该中心确保参加其数据科学课程的所有学生拥有相同的计算环境。他表示,「我们不可能管理 800 名学生的 IT 支持,帮助他们调试电脑,以及找出他们笔记本电脑安装程序后无法运行的原因;这根本行不通。」
另一个工具是 Binder,这是一种开源服务,允许用户在 web 浏览器中的 GitHub 上使用 Jupyter notebook,无需安装软件或任何编程库。用户也可以在谷歌云上执行 Jupyter notebook,通过在 GitHub 上 notebook 里的 URL 之前键入 https://colab.research.google.com/github 或使用 Code Ocean 商业服务。9 月份,Code Ocean 为其基于云的代码共享和代码执行服务推出了一个新的用户接口,同样也基于 Jupyter。
值得注意的问题
这种工具通过简化代码重用来实现计算再现性。但用户仍需知道如何正确使用 notebook。
Joel Grus 是华盛顿州西雅图艾伦人工智能研究所(Allen Institute for Artificial Intelligence)的一名研究工程师,今年年初,他在纽约 Jupyter 开发者大会上做了一场主题为「我不喜欢 notebook」(I don't like notebooks)的演讲。他说,他见过 notebook 不按预期运行时编程者受挫的样子,通常是因为他们无意中运行了无序的代码单元。他指出,在 Jupyter notebook 中将代码按逻辑整理出来非常困难,因此编程实践体验很差,它将代码分解成可重用的模块,并开发测试来确保代码正常工作。
Grus 坦言,这些并非不可逾越的困难,但 notebook 在执行代码时的确需要规则:例如,将分析代码移到可以从 notebook 中调用的外部文件中,在 notebook 的顶部定义关键变量,定期重启内核以及自上向下地运行 notebook。一位 Twitter 用户打趣道:「你得重启并运行所有程序,否则没办法用。」
这是 Barba 试图灌输给学生的一课。「上课第一天我就向学生解释说,他们可以以非线性的方式与 notebook 交互,这激发了他们巨大的探索能力,」她说。「但力量越大,责任越大。」
Verdant 可能是一种有帮助的工具,它是 Jupyter 里面一个可以捕捉用户活动历史的插件。「作者构建了一个扩展,可以实现灵活的用户工作流程,同时捕捉执行的特定代码,以什么顺序以及在什么样的特定数据上,」加州州立理工大学 Jupyter 团队的成员 Carol Willing 表示。
Jake VanderPlas 是谷歌的一名软件工程师,也是 Colaboratory 的成员之一,他表示,notebook 就像锤子一样:他们可能被滥用,也并非适用于所有应用。但在数据探索和沟通方面,notebook 表现出色。天文学界似乎同意这种说法。「大约六年前,还没有 Jupyter notebook,现在我们却每天都在用它,」Jurić表示。
原文链接:https://www.nature.com/articles/d41586-018-07196-1