Jupyter Notebook 介绍(Jupyter的前世今生)

发布时间:2024-09

浏览量:127

本文字数:2667

读完约 9 分钟

一、简介

Jupyter Notebook专为「文学化编程」而设计 — 它将代码、文本、结果、图表及详细阐释融合在一起,形成一份优美流畅的文档。

Jupyter是Notebook类产品的鼻祖,它是Notebook的典型代表,也是目前很多数据科学家用来做数据实验、人工智能开发的系统和平台,后面的Notebook类产品的架构基本都是由Jupyter演变和进化来的。

二、发展历史

Jupyter Notebook是从一个名为IPython的项目演变而来的。

IPython早在2007年就开始作为Python的REPL(read-eval-print loop)工具。2011年,它通过Qt框架获得了专用的前端,同年晚些时候,它还获得了基于Web的前端,称为IPython Notebook。

随着时间的推移,IPython Notebook支持的语言不断增多,因此于2014年创建了Jupyter项目,并在2015年项目独立出来。Jupyter是Julia、Python和R的结合体,这是用于数据分析的三种最流行语言。

Jupyter Notebook是重新命名的IPython Notebook。它不局限于Python内核,而是通用的,也可以与其他内核交互,如Julia和R。

IPython基本变成了Jupyter的Python内核,但也有很多来自于IPython但独立于语言之外的功能集成到了Jupyter core,比如Notebook格式(nbformat),我们从文件的扩展名.ipynb中仍可以看出。

三、来源背景

Notebook最早是从实验室的笔记本(手写的笔记本)中汲取的灵感。在学术研究中,实验方法、实验结果和见解按顺序记录在实验室笔记本中。这种风格的文档非常适合学术研究,能够保证实验是“可理解的”、”可重复的”,并且容易检索。

随着实验研究过渡到计算环境,实验室笔记本迎来了虚拟化、电子化转型。第一个Notebook计算是大约30年前在Mathematica中引入的。自Mathematica以来,我们见证了Notebook产品的激增,最被大众所熟知的:Jupyter,MATLAB,R Markdown和Apache Zeppelin。

Notebook与其他编程环境的区别究竟是什么?是什么让它比Shell、文本编辑器或IDE(集成开发环境) 更好?虽然各式各样的Notebook产品在界面和语言上存在诸多差异,但它们基本都遵循共同的设计模式:

  1. 独立执行和显示代码块输出的能力。

  2. 代码与自然语言交织在一起的能力。

作为一种科学实践,数据科学从科学方法(scientific method)中汲取了大部分研究方法和流程。Cathy O'Neill在她的《Doing Data Science》一书中说,数据科学过程实际上只是科学方法的延伸:

  1. 列出问题

  2. 做背景研究

  3. 构建假设

  4. 通过实验来检验你的假设

  5. 分析数据并得出结论

  6. 分享和交流结果

与科学方法类似,数据科学在很大程度上是一个探索和迭代的过程:你可以将问题解构为多个独立探索的逻辑块,并一步步迭代构建出更加细致的结论。这种方法使得数据科学代码模块化和可重复性显得尤为重要。

Notebook使得原本整体式的脚本分解为可执行代码的模块化集合。用户能够独立于Notebook的其它部分运行代码块并检查其各自的输出。这个功能对于日益复杂的数据科学工作流中管理认知和复杂计算方面至关重要。

四、文学化编程

1983年,Donald Knuth提出了一种新的编程范式,称为「文学化编程」。

Notebook通过利用“文学化编程”的编程风格来解决数据科学中存在的挑战。“文学化编程”是这样一种范式,它将模块化的代码块与代码上下文的自然语言解释块交织在一起。

传统的结构化编程使人们花费大量的力气让我们的代码顺应计算机的逻辑顺序,指导计算机做事,而文学化编程则是让我们集中精力向人类解释我们需要计算机做什么,因此更顺应我们的思维逻辑。

由此产生的Notebook编程环境,便是针对人类理解进行了优化,也是Notebook在数据科学时代蓬勃发展的原因。它使数据团队能够非常方便的阐述和交付他们的工作,以便受众可以轻松的理解。在数据科学的输出日益成为关键决策的输入环境下,这种能有效提升洞察力的方式变得至关重要。

Notebook是文学化编程的具体实践,它是一种基于网页的交互式计算方式,用户可在Notebook中进行开发、文档编写、运行代码、展示结果以及结果分享。与传统非交互式开发环境相比,Notebook最大的特点是允许逐单元格(cell)执行脚本。

代码块是Notebook最基本的单元,包括输入(代码)、输出,同时也包括自然语言。这样由代码块、自然语言交织组成的一个逻辑体就是一个Notebook,它特别适合数据分析或数据探索。

五、Jupyter和Jupyter Notebook

Jupyter下的三个前端系统/产品

  • Jupyter Notebook:经典的Notebook界面。用于创建和共享计算文档的原始web应用程序,它提供了简单、精简、以文档为中心的体验。

  • JupyterLab:下一代Notebook界面。用于笔记本、代码和数据的最新基于web的交互式开发环境,其灵活的界面允许用户配置和编排数据科学、科学计算、高频计算和机器学习的工作流。模块化设计可方便的扩展插件和丰富功能。

  • JupyterHub:将Notebook的强大功能带给用户组。它让用户能够访问计算环境和资源,而不会给用户带来安装和维护任务的负担。用户(包括学生、研究人员和数据科学家)可以在自己的工作空间中使用共享资源完成工作,系统管理员可以有效地管理共享资源。

六、原理

1、架构

下图展示了单用户Jupyter Notebook的高级构建模块。浏览器使用WebSockets与HTTP服务器通信。该服务器使用Tornado(用Python实现的流行HTTP服务器)。

另一方面,服务器将消息中继到内核进程,进程间通信通过ZeroMQ完成,这是一种简化实现常见通信模式(如客户端/服务器和发布/订阅)的抽象。服务器和内核位于同一位置(即在同一主机中运行)。

当我们运行Jupyter Notebook时,服务器和内核在本地机器上运行,但其实也可以在远程主机上运行。

2、数据模型

Notebook的内容以JSON格式存储在带有扩展名的文本文件中,并且将计算结果也内联存储在此文件中。这样当你与其他人共享Notebook文件时,即使他们无法自己运行代码,也可以看到整个分析过程以及输出的结果。


参考来源: https://zhuanlan.zhihu.com/p/605871181




^