新技术层出不穷,比季节更迭还快。作为一名开发者,有时很难判断哪些工具值得了解和学习如何使用,而哪些工具在仅仅两个月后就会变成“去年的新闻”。然而,Jupyter 项目绝对值得您花时间去了解。十多年来,他们一直在为开发者创造工具。他们的执行和软件指导委员会成员来自 AWS、Netflix 和 Apple 等顶尖公司。 他们每年还会表彰杰出的贡献者。经典的 Jupyter Notebooks 进入教育和学习领域自有其充分理由。因此,如果您近期曾是一名开发者,您很可能听说过甚至使用过 Jupyter Notebooks。也许您甚至使用过 JupyterLab 及其提供的高级工具。但如果您没有,那么 Jupyter Notebooks 和 JupyterLab 是什么,以及为什么这些工具很有用呢?
从重要的事情开始:如果您有一些想要向量化的数据,并且想尝试不同的模型和不同类型的相似度计算,还有什么比使用一个允许您运行单个单元格而不必重新运行处理、导入或其他不想更改的部分的工具更容易随时调整呢?通过这些产品所提供的增量开发方式,您可以在代码执行过程中导入新的库,并逐个单元格地进行尝试,而无需投入过多时间和精力。
多年来,Jupyter 项目已经发布了许多工具,使得对模型进行增量更改和调整变得异常容易。最酷的功能之一是小部件,它们实际上允许您使用滑块来调整变量输入,并实时显示函数产生的任何图表或输出的变化。
如果您想立即开始使用 Jupyter、Redis 和向量搜索,您可以查看 GitHub 上的演示 来帮助您入门。
“Jupyter” 这个名字结合了它最初支持的三种编程语言:Julia、Python 和 R。然而,它的范围此后已经扩大,以适应多种语言,并提供来自 Project Jupyter 的多个内核(在 Notebooks 中运行代码的东西)。
Jupyter 已在教育环境中普及,其灵活性和互动性对学生和教育工作者都具有巨大的吸引力。只需运行一个单元格,就能向学生展示不同的变量、不同的排序等操作对单个数据集的影响。通过 Jupyter Notebooks,文本、代码和可视化的结合可以使教育工作者以一种互动且快速适应的方式进行教学。
其核心在于,Project Jupyter 提供了一个交互式计算环境,促进了代码、数据和可视化的无缝集成。这个项目不仅仅是创建工具;它旨在培养一种开放、协作和可复现的研究文化。
Jupyter Notebook 是 Project Jupyter 的旗舰产品。它是一种开放的文档格式,允许用户创建和共享包含代码、方程式、可视化和叙述性文本的文档。Notebooks 可以通过基于网络的界面访问,使其具有平台无关性,并易于在不同设备间共享。这些 Notebooks 是任何开发者工具箱中的有用工具。它们使开发过程变为增量式,避免了开发者在某一行代码出错时不得不重新运行整个程序或脚本的沮丧。相反,Jupyter Notebook 可以分段运行代码,并在每段保存状态,这样我们就无需在每次想尝试不同的东西时重新加载数据集。虽然数据加载问题也可以通过像 Redis 这样的向量数据库来解决,但这种分步执行代码的方式还有许多其他好处。
一个 Jupyter Notebook 被组织成单元格,每个单元格可以包含代码、文本或多媒体元素。这种结构提供了一种自然的方式,将复杂问题分解为易于管理的模块化组件。这些单元格可以单独运行,无论是按顺序还是不按顺序,向用户精确展示每个单元格带来的变化。跳过一个单元格在演示为何需要某个步骤时特别有用,并且通过这种单元格结构很容易实现。查看每个中间结果确实可以增强学习数据科学的探索性。虽然许多调试器提供分步代码执行功能,但能够“时间倒流”仍然是一个不常见的功能。但 Jupyter 可以让您做到!您可以更改最后一个单元格,并且仅通过重新运行最后一个单元格,您就可以(至少在您的程序层面)实现“时间倒流”,回到它完全未运行之前的状态。而且不仅仅是最后一个单元格,您可以在 Notebook 中的任何位置继续,并从那里开始更改,而无需重新运行之前的单元格。仅此一项优势就巨大,它为我节省了大量调试和更改编程逻辑的时间,我可以单独调试一个 for 循环,而不必运行整个 Python 脚本。
Notebooks 的另一个强大功能是丰富的可视化能力,支持集成交互式图表、图形和其他视觉元素。这使得数据探索和分析更加直观和富有洞察力。通过集成 Matplotlib、Plotly 和 Seaborn 等库,用户可以直接在 notebook 环境中生成高质量的可视化内容。
虽然 Jupyter Notebooks 奠定了交互式计算的基础,但 JupyterLab 代表了下一次进化。JupyterLab 是一个可扩展的环境,为交互式计算提供了灵活而强大的界面。它保留了 Jupyter Notebooks 的关键特性,但引入了更模块化和可扩展的架构。
JupyterLab 的优势之一在于其可扩展性。用户可以通过安装扩展来自定义其环境,从而添加新的特性和功能。这种可扩展性促进了创新,使社区能够开发和共享满足特定需求的工具,从增强的文本编辑到高级数据可视化。这些扩展包括但不限于:渲染不同文件类型(如 DMN)、通过语言服务器协议提供的编码辅助、GUI 风格的 Python 代码生成器,甚至可以将 Notebooks 转换为包含文本、代码和图片幻灯片的软件包。还有一些网站,如 Binder,可以将 GitHub 仓库变成一个包含所有这些内容(指 Notebooks 等)的“binder”,使您的整个仓库能够被任何人重现。
自 Notebooks 以来,另一个重大进步是引入了交互式小部件。上面显示的示例来自 Project Jupyter 自己的试用演示。这里的“solve_lorenz”是上面一个单元格中定义的一个函数,但在交互式小部件中被用来显示变量范围。这些滑块可以通过鼠标点击和拖动来移动,每次移动滑块时,生成的图都会随之更新。这种可视化效果酷炫至极,而且这个工具也非常有用。您无需调用一个包含您认为需要的变量的函数,这些滑块允许您以一种有趣且引人入胜的方式调整输入。新的参数更新可视化效果的速度也体现了 Jupyter 项目背后的计算能力。
Project Jupyter 超越了许多技术趋势短暂的生命周期,提供了一个不仅促进创新、更能激发创新的平台。它与 Redis 在向量搜索任务上的集成,体现了 Jupyter 在不断变化的计算挑战面前适应和发展的潜力。对于开发者和数据科学家来说,投入时间掌握 Jupyter 并探索其与 Redis 结合的应用,不仅有益,更是保持在技术前沿的关键。