使用 Jupyter 近 2 年,发现了这 3 个实用技巧
Posted CSDN资讯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 Jupyter 近 2 年,发现了这 3 个实用技巧相关的知识,希望对你有一定的参考价值。
作者 | luanhz 责编 | 欧阳姝黎
Jupyter 对于 Python 爱好者尤其是数据从业者来说,应该是日常使用最为频繁的工具之一了,虽然其严格来讲算不上是 IDE,但却提供了非常便捷高效的数据探索和分析挖掘的 coding 环境。Jupyter 固然好用,但如果不能充分挖掘其中的高端技巧,恐怕也不能完全发挥其功力。所以,今天本文就来分享个人在使用 Jupyter 过程中的 3 个实用技巧。
jupyter = Julia + Python + R 三种语言的混合缩略词(其中的字母 e 用于辅助发音),主要是提供了这 3 种语言的编程环境,其中由于 Python 语言近年来的日益火爆,jupyter 对 Python 使用来说更为常见。
以 Python 语言为例,jupyter 实际上是对 Python 解释器实现的 Web UI 服务包装,jupyter 内部的一个个 cell 本质上与在 Python 命令行中键入一条条代码的效果是一致的,当然这里的 Python 解释器的 ipython,一种增强型的 python 交互型解释器。既然 jupyter 本质上是一种web服务,那么自然区分在本地搭建服务或者基于服务器搭建服务,这也就是 jupyter 的本地模式和服务器模式。jupyter lab 的配置和搭建可参考是时候总结一波 Python 环境搭建问题了。
另外,jupyter 当前主要有两大版本,一个是 jupyter notebook,另一个是其升级版,即 jupyter lab。本文的3个实用技巧均面向 jupyter lab 而言,个人也一直觉得 lab 要比 notebook 更为好用。
多解释器环境设置
Python 之所以如此功能强大和广受欢迎,其中一个重要原因就是其拥有强大的第三方库生态系统,甚至可以称得上是对大部分主流开源工具均有其 Python 实现版本,例如 Echarts 可视化有 pyecharts,Spark 工具有 pyspark 等等。然后,也正是由于库太多即由之而衍生的版本兼容问题,所以针对不同应用场景和需求建立不同的 Python 虚拟环境很重要。
jupyter 对于虚拟环境十分友好的一点就是可以针对不同的虚拟环境关联提供相应的解释器环境,例如可以通过conda创建一个 python 爬虫 env,而后安装常用的爬虫库,并在 jupyter 中提供一个爬虫解释器环境;类似的就可分别创建一个数据分析、机器学习或者是深度学习解释器环境,这样在 jupyter 中使用起来便会非常丝滑。
例如,如下是在 jupyter lab 内置全局解释器 python3 的基础上,增加一个 dataScience 解释器,而后在创建 ipynb 文件时即可选用对应的解释器即可。
这里给出在 linux 下增加 jupyter 解释器的主要命令:
pip install ipykernel # 需要安装ipykernel库用于管理解释器
# 虚拟环境名要求是已创建且存在的虚拟环境,一般使用conda管理
python -m ipykernel install --user --name 虚拟环境名 --display-name "web UI显示的解释器名称"
%和!:强大的魔法命令和shell支持
jupyter 除提供对 ipython 解释器的 web 服务外,还扩展了强大的魔法命令。这里,魔法命令是指以 % 开头的 line 魔法或 %% 开头的 cell 魔法,大家最熟悉的可能当属即时命令:
%time # 对当前行的代码执行进行计时
%%time # 对当前整个cell的代码执行进行计时,要求改命令位于整个cell的首行
然而除此之外,jupyter 实际上还提供了大量的魔法命令,可通过“%lsmagic”这条魔法命令本身打印输出所有魔法命令:
魔法命令打印结果分为面向 line 和面向 cell 的两类魔法命令,点开 line 魔法,我们可以看到以下几个熟悉的命令,例如 lsmagic 本身、run 以及 time 和 timeit 等,另外下面的例如 mkdir、ls、cd 等就是常用的 linux 命令。
再翻开 cell 魔法,几个值得关注的命令包括:
其中对!魔法命令的解释为“OSMagics”,意味着这是一个与系统有关的命令,实际上可以用!+linux 命令实现在 jupyter 中执行相应 linux 命令的效果。
注:通过 lsmagic 打印出魔法命令中,结果是一个嵌套的 json 格式,其中最里层的 key 即为魔法命令(上述绿字部分),后面的 value 是对其类型的解释(上述粉字部分)。
那么问题来了,说了这些魔法命令,他们有什么好用之处吗?这里简单举3个小例子:
使用 !pip 命令执行第三方库安装。当部署 jupyter 所在环境具有 pip 功能时,可直接在 jupyter 中通过 !pip 便捷的对当前解释器环境的第三方库依赖进行管理,非常方便;
使用 !python 或 %run 命令实现对本地 python 脚本文件的运行,其中 !python 中要求已在当前 linux 环境中配置 python 全局命令,相应的也可能是 python2 或 python3 等;
灵活使用 !ls 功能,将当前文件夹内的所有文件赋予给指定列表接收,避免一个个文件名的复制粘贴过程。例如,假设当前文件夹中存在很多 csv 或其他格式的数据文件,用如下命令实现文件名的列表化还是比较方便的:
替代Xshell和Xftp功能
这个功能源于一个真实的场景:话说在某个临时集群环境中,由于种种原因不能使用 Xshell 和 Xftp 等类似工具直接操作集群内文件(使用 linux 服务器的应该都很熟悉这两个工具吧),但是开放了部分端口可供使用。在此种情况下,笔者自然联想到可通过部署 jupyter lab 服务来曲线达成目的。具体而言:
完成 jupyter lab 服务部署和启动后(在服务器端部署 jupyter lab 服务的具体流程可自行搜索),注意到在其 web UI 界面左侧的文件管理中提供了 upload 和 download 功能,这不刚好就是 xftp 的核心需求吗?
在 jupyter lab 的解释器选择界面,除了 notebook 和 console 之外,下面还提供了 terminal 功能,点进去就直接提供了服务器端的 shell 功能,巧了,这不就是一个 xshell 嘛!
以上,从某种角度讲,jupyter lab = ipython + 部分 conda + Xshell + Xftp,何其强大也!
☞95后大学生利用漏洞免费吃肯德基获刑;Linux内核初步支持苹果M1;android Studio 4.2 发布|极客头条☞从“玩具”到“工具”,低代码能否完全替换纯代码?☞“跳过更新”还得付费?Docker 新变化引发群嘲
以上是关于使用 Jupyter 近 2 年,发现了这 3 个实用技巧的主要内容,如果未能解决你的问题,请参考以下文章
我不能在 jupyter notebook 中使用基于 01,02,03... 的索引
技术开发工程师 创业.工作近2年,3万注册公司,两人,一人一万五。