热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

n款好用的Jupyter插件,建议收藏

文:yuvipanda译:机器之心(一鸣、思源)当有人说:「你可以用Jupyter扩展解决这个问题」ÿ

文:yuvipanda  

译:机器之心(一鸣、思源)

当有人说:「你可以用 Jupyter 扩展解决这个问题」,他们可能没有说清楚是什么样的扩展。Jupyter 生态系统是非常模块化且具有扩展性的,所以有很多种扩展方式。这个博客希望能总结最常用的 Jupyter 扩展,并帮助你发掘生态系统中的新功能。

JupyterLab 扩展

在 JupyterLab 中用 jupyterlab-drawio 扩展绘图

JupyterLab 是广受欢迎的 Jupyter Notebook「新」界面。它是一个交互式的开发环境,可用于笔记本、代码或数据,因此它的扩展性非常强。使用相关的扩展,可以添加一整套新功能,或者完全改变界面的运行方式。这些扩展是基于 TypeScript 或 Javascript 写的,它们在浏览器里运行。

经典的 Jupyter Notebook 扩展

Jupyter Notebook 中的内容列表扩展

人们总是会想到经典的 Jupyter 笔记本界面,但实际上,你可扩展它的各个模块。这些 Javascript 客户端可以让你按照自己的想法添加或改变功能,它们和 JupyterLab 扩展是一样的。

笔记本服务器扩展(serverextention)

和前两种扩展不同,Jupyter 笔记本的服务器扩展使用 Python 语言编写,并加入了很多服务端的功能,以下有两个主要的例子。

在 JupyterLab 中预览 LaTeX 内容

预览 LaTeX

第一个是一个为 JupyterLab 或经典的 Jupyter 笔记本提供的后端扩展——jupyterlab-latex。它可以在 JupyterLab 中预览 LaTeX 文件。它有一个和 JupyterLab 文本编辑器集成的扩展,以及一个后端服务器扩展,可以运行 LaTeX 命令,并在前端显示效果。

集成网络应用

第二个则是为提供服务端处理提供用户界面的扩展。因为服务网扩展可以作为任意 TornadoHTTP handler,因此任何你想得到的网络应用都可以写成一个 Jupyter 服务扩展。这里的例子是 npgipuller,提供了用户界面,可以将 git 代码仓库发布给用户。

Jupyter 内核

你可能已经很熟悉在 Jupyter 笔记本中使用 Python 语言了,其实你可以在其中运行很多语言:R、Julia、Javascript、Octave、Scala/Spark、C++、bash,甚至是 Matlab。这些都被称作内核。你可以为自己常用的编程语言写一个内核,将 Jupyter 协议直接用在上面,用 metakernel 项目打包,或者用 Xeus 打包成 C++依赖。内核制作好以后,它可以在任何一个 Jupyter 前端运行,包括经典笔记本、JupyterLab、 nteract、Jupyter 命令行等。

IPython Magics

如果你在笔记本里写过如%matplotlib inline 这样的命令,那么你已经尝试过 IPython 功能了。这些命令就像是 Python 中的宏(macro)——你可以写定制化的代码,将剩余的代码块独立出来,然后做自己想做的事情。

这种魔术函数从% 开始,然后通过% 后面的代码发挥功能。例如%cd somedirectory 可以切换 Python 运行中的文件目录。代码块功能从%% 开始,并运行后面的整个块。%%timeit 应该是最著名的,它可以提供运行代码块的时间。

你也可以构建自己的魔术函数。例如,ipython-sql (https://github.com/catherinedevlin/ipython-sql) 包提供%%sql 命令,可以和 sql 数据库无缝工作。然而,和之前列出的扩展不同,IPython 的命令只能在有 IPython 内核的环境工作。

IPython 小工具

用 drop down 玩转绘图功能。

IPython 小工具为 Jupyter 笔记本和 IPython 内核提供了 GUI 工具。这些工具可以让你在共享笔记本时,使用 GUI 调试,而非使用代码。如果和其他工具,如 voila 联用,你可以制作一个类似仪表盘一样的应用,其他人可以直接使用,甚至都不知道这是一个 Jupyter 笔记本。

你可以自己定制一些工具,为其他人提供领域内的动态可视化。例如,你可以用 ipyleaflet 制作动态地图,用 itk-jupyter-widget 动态地研究图像分割/配准任务,或者用 pythreejs 建模 3D 目标。

内容管理器

内容管理器决定了你读写文件时的操作。默认情况下,管理器从本地文件系统中读写文件,但是一个定制化的管理器可以从其它地方读写文件,如 Amazon S3 / Google Cloud Storage、PostgreSQL、HDFS 等。你可以通过 web 界面读写它们,就好像文件在本地一样。

我最喜欢的内容管理器是 Jupytext。在你读写.ipynb 的文件时,它会将其转换为.py 文件,并保持文件同步。在你 IDE 中对一个.py 文件进行了很多编辑后,可以自动在笔记本中看到这些更新,这是很神奇的事情。

Jupytext: .ipynb 或者 .py? 我全都要

扩展 JupyterHub

JupyterHub 是多用户应用,可以使用于教学、实验室或者生产中。这些组织很可能有其它系统,所以 Jupyter 需要和这些系统集成到一起。以下是一些扩展 JupyterHub 的简单方法。

认证器

JupyterHub 是一个多用户应用,所以用户需要登录,认证器的工作是对登录用户进行身份验证。现在已经有许多流行的验证器了,如 LDAP、OAuth(Google、GitHub、CILogon、Globus、Okta、Canvas 等)。你可以写一个自己需要的认证器,因此 JupyterHub 可以覆盖各种使用场景。

生成器(Spawner)

如果使用一个可插拔的生成器,你可以用很多方法给每个用户提供 Jupyter 笔记本服务器。你可能让他们从一个节点生成 Docker 容器、将它们连接到 Kubernetes 上、让它们使用你的 HPC 集群、或者使用你的 Hadoop 或者 Spark 集群、用 systemd 提供服务、或者直接将这些服务器视为不同的 Linux 用户。这些生成器一般都很容易定制参数,当然你也可以自己写一个。

服务

你有时希望给 JupyterHub 用户提供额外服务——在闲置时回收资源,或者让他们发布笔记本。你可以运行一个 JupyterHub Service 来提供这些服务。用户可以发起请求,而服务也可以向 JupyterHub 发起 API 请求。这些可以是直接的请求,或者网络服务。例如,BinderHub (https://github.com/jupyterhub/binderhub) 是 JupyterHub 服务中的一种。

NBConvert Exporter

Nbconvert 扩展可以令笔记本格式的文件和其他格式相互转换。如果你导出笔记本到 PDF、LaTeX、HTML 或者 nbviwer 的话,你已经使用了这个扩展。在这个扩展里,对应每一个格式都有一个导出器,你也可以写一个针对自己格式的导出器,或者可以利用已有的定制一个。

在写这篇博客时,我最开心的时刻是发现有 docx 文档(word)导出器。

word 导出器:https://github.com/m-rossi/jupyter-docx-bundler

Bundler 扩展

很容易就能找到 nbconvert 导出器的方法

Bundler 扩展使你可以在菜单栏添加「下载为」按钮。这个按钮和 nbconvert 导出器联用,使得导出器更容易被找到,尽管你可以写一个定制化的扩展,使笔记本在下载前进行任何操作。例如,nbreport 扩展提供一个 bundler 扩展,可以将笔记本格式导出为 HTML。

Repo2Docker

Repo2Docker 扩展将 git 或者其他仓库转换为可重新使用、适合于数据科学的 docker 镜像。网站 mybinder.org(和其他 binderhub 安装包)使用这个扩展构建和运行 Jupyter/RStudio 进程。如下所示,现在有两种扩展 repo2docker 的方式。

BuildPacks

Repo2docker 会查看代码库中的内容,并决定如何去构建它。例如,如果里面有 requirements.txt 文件,它会设置一个小型 conda 环境,并把 Python 包安装进去。如果里面有 install.R 文件,扩展则会保证 R/RStudio 已经安装。写一个 BuildPack (https://repo2docker.readthedocs.io/en/latest/architecture.html#buildpacks) 使你可以将这个功能扩展到你喜欢的编程语言中。

ContentProviders

Repo2docker 中的 repo 部分有点用词不当——实际上你可以将任何程序打包进一个 Docker 镜像中。现在,它支持 git 本地文件夹和 zenodo (https://zenodo.org/) 代码仓库,但是你可以为自己喜欢的代码源添加支持,并制作一个新的 ContentProvider。

只有这些了吗?

当然不是!Jupyter 生态是一个很大的系统,一篇博客无法完全覆盖所有内容。这个博客已经少了一些,如 enterprise gateway 和 TLJH Plugins。Jupyter 的生态是活跃多变的,很快还有更多好用的扩展出现。

原文链接:https://blog.jupyter.org/99-ways-to-extend-the-jupyter-ecosystem-11e5dab7c54

分享或在看是对我最大的支持 


推荐阅读
  • 基于,docker,快速,部署,多,需求,spark ... [详细]
  • 你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路 ... [详细]
  • 马蜂窝数据总监分享:从数仓到数据中台,大数据演进技术选型最优解
    大家好,今天分享的议题主要包括几大内容:带大家回顾一下大数据在国内的发展,从传统数仓到当前数据中台的演进过程;我个人认为数 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 7.4 基本输入源
    一、文件流1.在spark-shell中创建文件流进入spark-shell创建文件流。另外打开一个终端窗口,启动进入spark-shell上面在spark-shell中执行的程序 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了如何使用Power Design(PD)和SQL Server进行数据库反向工程的方法。通过创建数据源、选择要反向工程的数据表,PD可以生成物理模型,进而生成所需的概念模型。该方法适用于SQL Server数据库,对于其他数据库是否适用尚不确定。详细步骤和操作说明可参考本文内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 探索MLlib机器学习
    公众号后台回复关键词:pyspark,获取本项目github地址。MLlib是Spark的机器学习库,包括以下主要功能。实用工具ÿ ... [详细]
  • HadoopYARN集群是一个通用的资源管理平台,可为各类计算框架提供资源的管理和调度。其核心是通过一个全局的资源管理器来实现分离资源管理与作业调度监控。Hadoop ... [详细]
author-avatar
peaxcwxzl_372248
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有