Jupyter是一个免费的开源交互式网络工具。研究人员可以使用该工具将软件代码、计算输出、解释性文本和多媒体资源组合在一个文档中。计算笔记本已经存在了几十年,但在过去几年中,Jupyter变得特别流行,成为数据科学家的首选工具。是什么原因?本文带你一探究竟。DataScienceLargeSynopticSurveyTelescope(LSST)位于智利安第斯山脉的Padome山脊,计划于2022年开放。它将自动勘测南部天空,每晚生成数兆字节的数据。为了处理这些数据,天文学家将使用一种熟悉且日益流行的工具——Jupyternotebook。Jupyter是一种免费的开源交互式网络工具和计算笔记本。研究人员可以使用它将软件代码、计算输出、解释性文本和多媒体资源组合在一个文档中。计算笔记本已经存在了几十年,但Jupyter在过去几年特别受欢迎。开发人员喜欢它是因为其重新设计的架构允许笔记本电脑“说”几十种编程语言。据其联合创始人FernandoPérez称,这在其名称中更能体现:Jupyter-Julia(Ju)、Python(Py)、R。对代码共享网站GitHub的分析显示,有超过250万个笔记本截至2018年9月,在Jupyter上公开可用,高于2015年的约200,000个。Pérez说,Gmail和GoogleDocs等网络软件的改进是增长的原因之一;Python和数据科学的成熟度也是如此,特别是笔记本允许轻松访问远程数据,其中一些可能无法下载(例如LSST数据)。对于Jupyter基于云的能力,Pérez表示,在很多情况下,将计算机移到数据上比将数据移到计算机上要容易得多。因为这个架构相当于告诉读者数据在哪里,同时也提供了计算机。对于数据科学家来说,Jupyter已经成为事实上的标准,位于华盛顿特区的乔治华盛顿大学的机械和航空航天工程师LorenaBarba说。负责协调LSST数据管理团队的西雅图华盛顿大学天文学家MarioJuri?说:“我从未见过如此快速的迁移。它真的很容易使用!”实验室笔记本。例如,研究人员不是将DNA凝胶贴在实验室方案旁边,而是嵌入代码、数据和文本来记录他们的计算。Jupyter的联合创始人、加州州立大学圣路易斯奥比斯波分校的BrianGranger说,这样做的结果是一个“计算叙述”——一个允许研究人员用分析、假设和推测来补充他们的代码和数据的文件。.对于数据科学家来说,这种格式推动了探索。Barba说,notebook是一种交互式计算环境,用户可以在其中执行代码、观察结果、修改和重复研究人员与数据之间的迭代对话。它不是进行此对话的唯一工具,交互式Python解释器IPython(Jupyter的前身IPythonNotebook就是在其上创建的)也是一种工具。但笔记本允许用户记录这些对话,并在“主题、理论、数据和结果之间建立更强大的联系”。研究人员还可以使用笔记本为其软件创建教程或交互式手册。哈佛大学的系统神经科学家MackenzieMathis使用DeepLabCut做到了这一点。DeepLabCut是他的团队开发的用于行为神经科学研究的编程库。他们可以使用笔记本来准备手稿,或作为教学辅助工具。自2013年以来,Barba在她教授的每门课程中都使用了笔记本。在2014年的一次主题演讲中,她还讲述了笔记本如何让学生以课堂无法做到的方式,以互动和互动的方式参与课程并从中受益。她说,“IPythonnotebook确实是教授科学和工程计算的杀手级应用程序。”说我的语言Jupyternotebook有两个组件。在前后端网页中,用户在矩形输入框中输入编程代码或文本。然后浏览器将代码发送给后端内核,后端内核运行代码并反馈结果。根据Pérez的说法,已经创建了100多个Jupyter内核,支持数十种编程语言。通常情况下,每个笔记本只能运行一个内核和一种语言,但是有工作空间。例如,支持Python、Julia、R和Fortran的Demo笔记本。重要的是,内核不需要驻留在用户的计算机上。当LSST的未来用户使用Jupyter笔记本分析数据时,代码将在伊利诺伊州的超级计算机上运行,??提供台式机和笔记本电脑无法比拟的计算能力。笔记本也可以在云端运行。例如,Google的Colaboratory项目为Jupyternotebooks提供了以Google为主题的前端和后端。它使用户能够协作、运行利用GoogleCloud资源(例如图形处理单元)的代码,以及将文档保存在GoogleDrive上。Jupyter的最新版本是JupyterLab,它于2018年1月作为测试版发布,既可以作为独立安装使用,也可以作为免费的Anaconda科学计算环境的一部分使用。JasonGrout是加利福尼亚州旧金山金融服务公司Bloomberg的一名软件工程师,也是JupyterLab团队的一员。他将JupyterLab称为Jupyternotebook的“下一代网络界面”,扩展了熟悉的notebook的拖放功能,以及文件浏览器、数据查看器、文本编辑器和命令控制台。在标准Jupyter笔记本为每个笔记本分配单独的内核的地方,JupyterLab创建了一个允许共享这些组件的计算环境。因此,用户可以在一个窗口中查看笔记本,在第二个窗口中编辑所需的数据文件,并在第三个窗口中记录所有执行的命令——所有这些都在一个网络浏览器界面中完成。用户还可以调整JupyterLab以适应他们的工作流程。例如,内置查看器用于查看图像、文本和CSV文件,但用户也可以构建自定义组件。这些组件可以表示基因组比对、地理空间数据等。Pérez的一名学生甚至创建了一个组件来以3D方式显示大脑成像数据。他说,“很明显,这是一个完全针对神经科学领域的工具——Jupyter团队不必编写这种东西。但我们提供了正确的标准,那个团队可以在24小时内编写一个。”有两个工具可以增强Jupyter的实用性。一个是JupyterHub,这是一种允许机构向大量用户提供Jupyter笔记本的工具。Pérez任教的加州大学伯克利分校的IT团队已经部署了这样一个中心,Pérez使用它来确保所有参加他的数据科学课程的学生都拥有相同的计算环境。“我们无法管理800名学生的IT支持,帮助他们调试计算机,并弄清楚为什么他们在笔记本电脑上安装了无法运行的程序;这根本行不通,”他说。另一个工具是Binder,这是一项开源服务,允许用户在Web浏览器中使用GitHub上的Jupyter笔记本,而无需安装软件或任何编程库。用户还可以通过在GitHub上的笔记本URL前键入https://colab.research.google.com/github或使用代码海洋商业服务在谷歌云上执行Jupyter笔记本。9月,CodeOcean为其基于云的代码共享和代码执行服务推出了一个新的用户界面,同样基于Jupyter。值得注意的问题该工具通过简化代码重用来实现计算重现性。但是用户仍然需要知道如何正确使用笔记本。华盛顿西雅图艾伦人工智能研究所的研究工程师JoelGrus今年早些时候在纽约的Jupyter开发者大会上发表了题为“我不喜欢笔记本”(Idon'tlikenotebooks)的演讲。他说他看到程序员在笔记本运行不正常时感到沮丧,这通常是因为他们无意中乱序运行了代码单元。他指出,在Jupyternotebook中逻辑组织代码非常困难,因此编程体验很差,将代码分解成可重用的模块并开发测试以确保代码正确运行。Grus承认这些都不是无法克服的困难,但notebook在执行代码时确实需要纪律:例如,将分析代码移动到可以从notebook内部调用的外部文件,在notebook顶部定义关键变量,定期重启内核,并自动上下运行笔记本。一位Twitter用户打趣道:“你必须重新启动并运行其他一切都行不通的东西,”这是Barba试图向他的学生灌输的一课。“我在第一天上课时就向学生们解释说,他们可以以非线性方式与笔记本互动,这激发了他们巨大的探索能力,”她说。“但能力越大,责任越大。”一个可能有用的工具是Verdant,这是一个Jupyter插件,可以捕获用户活动的历史记录。“作者构建了一个扩展,支持灵活的用户工作流程,同时捕获执行的特定代码、以什么顺序以及在什么特定数据上,”CalPoly的Jupyter团队成员CarolWilling说。谷歌软件工程师兼Colaboratory成员JakeVanderPlas表示,笔记本就像锤子:它们可能会被滥用,而且它们并不适用于所有应用程序。但在数据探索和通信方面,笔记本电脑表现出色。天文学界似乎同意这种说法。“大约六年前,还没有Jupyternotebook,而现在我们每天都在使用它,”Juri?说。原文链接:https://www.nature.com/articles/d41586-018-07196-1【本文为“机器之心”专栏原文翻译,微信公众号“机器之心”Machine(id:almosthuman2014)》】点此查看作者更多好文
