别再吐槽 notebook!分享4个解决版本控制的高效工具!
在探索性数据分析和机器学习开发等任务时,Jupyter notebook 是大多数数据科学家的首选。在可视化图形、表格输出以及丰富注释的能力方面,其他开发工具是无法比拟的。
Jupyter notebook 在编程社区中也经常被吐槽。乔尔·格鲁斯在 2018 年的 JupyterCon 上发表了著名的"我不喜欢 notebook"的演讲,究其原因在于因为它难以进行版本控制,并且测试和调试可能很棘手。
在本文中,我将简要介绍四种可以解决上述痛点的工具。 包括:
- Nbdime 以获得更好的版本控制。
- 使用 nbQA 在笔记本代码上运行 linter。
- Jupyter-nbrequirements 用于管理 Notebook 中的依赖项。
- 使用 nbval 进行 Notebook 验证。
1、Nbdime 用于更好的版本控制使用
使用 Github 等工具对 notebook 进行版本控制可能很困难。版本控制工具不能很好地呈现差异,因为它们不了解 notebook 的逻辑结构。 这会使跟踪更改和合并代码变得具有挑战性。
Nbdime 是一个非常棒的工具,旨在通过提供更丰富的视觉差异来解决这个问题,很容易区分同一代码在不同版本之间的变化。
Nbdime 可以通过 pip 安装。
pip install nbdime
如果上述安装不正确,你可以使用以下命令手动执行此操作,添加标志之一以确定它是为哪些用户安装的–system(系统范围)、–user(当前用户)、–sys-prefix(当前虚拟环境)。
nbdime extensions --enable [--sys-prefix/--user/--system]
则安装所有内容后,在工具栏中现在应该可以使用以下新图标。
我创建了一个 notebook 来展示 nbdime 的功能,如下是波士顿房价数据集上训练一个简单的线性模型。这是我存储在 Github 存储库中的项目的一部分。
我将对 notebook 进行一些更改,并使用 Web 视图查看与上次提交的差异。单击 git 按钮将显示上次提交与当前保存的笔记本版本之间的差异。
正如从下图中所看到的,nbdime 逐行和逐个单元地显示了自上次提交以来发生的确切变化。它甚至显示了每个单元格的输出如何变化,包括图形。
2、使用 nbQA 进行校对
Linting 是检查代码质量的过程。一个 linting 工具扫描代码并检查常见的样式错误。例如,Python linter通常检查不符合广泛使用的样式指南(如Pep8)的代码。
NbQa是一个允许你在Jupyter notebook上运行任何标准python linter的工具。当前可通过此工具访问以下:pylint、black、auto flake、check ast、doctest、flake8、mypy和yapf。
要安装,只需运行以下命令。
pip install nbqa
让我们在我最近创建的笔记本上运行pylint,这是一种常用的 python linter。需要在命令行上运行以下命令。
$ nbqa pylint dataframe_basics.ipynb
这给了我标准的 pylint 输出,它突出显示了我的代码中的错误。
3、使用 jupyter-nbrequirements 管理依赖
在使用 notebook 处理每个项目可能需要一组不同的依赖项。传统上,这些是在 Jupyter notebook 之外使用虚拟环境进行管理的。
Jupyter nbrequirements 是一种工具,可让你管理依赖项并创建一个单独且优化的环境,所有这些都在 notebook 中进行管理。
使用 pip 安装库并使用下面显示的命令启用 notebook 扩展。
$ pip install jupyter-nbrequirements
$ jupyter nbextension install --user --py jupyter_nbrequirements
你可以使用魔法命令或使用 notebook 顶部的 UI 在笔记本中安装库。
要使用 cell magic 安装诸如 pandas 之类的库,只需在笔记本单元中键入以下内容即可。
%dep add pandas --version ">=0.24.0"
4、使用 nbval 进行 Notebook 验证
如本文前面所述,Notebook 通常用于探索性分析和模型的初始开发。通常,将这种类型的分析和初始项目开发存储起来是很有用的,既可以用于文档编制,也可以在以后的某个时候基于这项工作的发现进行构建。
py.test插件nbval,是验证存储的有用工具。Nbval将自动运行 Notebook 中的每个单元格,并检查当前输出是否与上次保存的.ipynb文件版本中存储的输出匹配。这起到了检查底层源代码中没有任何更改的作用,因此验证了原始分析或实验的结果仍然是可靠的。
要使用此工具,请先通过以下命令进行安装。
pip install nbval
可以通过运行以下命令对目录中包含的所有文件执行测试。
py.test --nbval
或者通过运行这行代码在 Notebook 上。
py.test ---notebook-name.ipynb
我在我现有的两个 Notebook 上运行了 py.test。第一次运行没有错误并给出以下输出。
下面给出了一个笔记本中测试失败的例子。
总结
尽管 Notebook 经常用于探索性分析和初始模型开发,而不是用于产品代码,但它仍然应该被视为一个重要的工作存储库。最初的实验和分析是对过去结果的有用记录,应该可以在以后的某一天回到 Notebook 上,在你的工作的基础上继续。因此,值得探索一些工具,这些工具有助于提高 Notebook 中编写的代码的健壮性和可复制性。
本文介绍了四种工具,它们可以帮助 Notebook 中的代码变得更好、更可重用。更多关于notebook的资料,可以参阅我以前的文章。
技术交流
欢迎转载、收藏本文,码字不易,有所收获点赞支持一下!
为方便进行学习交流,本号开通了技术交流群,添加方式如下:
直接添加小助手微信号:pythoner666,备注:CSDN+python,或者按照如下方式添加均可!
别再吐槽 notebook!分享4个解决版本控制的高效工具!相关推荐
- Access中出现改变字段“自己主动编号”类型,不能再改回来!(已解决)
Access中出现改变字段"自己主动编号"类型,不能再改回来! (已解决) 一次把access中的自增字段改成了数值,再改回自增时,提示:在表中输入了数据之后,则不能将不论什么字段 ...
- 微信hash ajax,基于vue hash模式微信分享#号的解决
看代码吧~ // 问题描述在微信中分享到朋友圈或好友时,分享出去的路由被破坏,打开分享的链接,路由中的"#"会被去掉并追加?fromTimeline之类的后缀参数,这就造成了分享出 ...
- 酷狗服务器显示失败怎么回事啊,酷狗音乐分享音乐失败怎么办 酷狗音乐分享音乐失败解决方法...
对于喜欢听歌的伙伴而言,音乐是无国界的,在酷狗音乐里面可以随时播放国内外歌曲,觉得好听的歌曲还可以分享给好友听,但是最近有用户反映自己分享音乐出现失败显示,不知道如何解决的伙伴,可以在历趣看看哦! 酷 ...
- 分享几个好用的聚合工具网站,一个网站,解决一堆问题
分享几个好用的聚合工具网站,一个网站,解决一堆问题 参考文章: (1)分享几个好用的聚合工具网站,一个网站,解决一堆问题 (2)https://www.cnblogs.com/zdz8207/p/al ...
- jupyter notebook内核报错解决
提示: jupyter notebook内核报错解决 文章目录 前言 jupyter notebook 内核报错 一.升级更新 1.更新 二.卸载conda 安装的ipykernel,重新安装 2.卸 ...
- Js先执行点击事件,再执行失去焦点事件的解决方法
Js先执行点击事件,再执行失去焦点事件的解决方法 思路:给失去焦点事件设置一个暂停,让点击事件先执行. js代码: //点击事件 先执行 $(document.body).on('click','#e ...
- JAVA基础再回首(一)——基本概念、JAVA开发工具、JAVA基本语法
JAVA基础再回首(一)--基本概念.JAVA开发工具.JAVA基本语法 学了java,做了android应用开发,现在回想起来,真的是一路坎坷..我在上章博客中提到了我以后的几个学习计划和目标就是把 ...
- 苹果备忘录永久删除怎么恢复?分享2个找回备忘录的高效操作
苹果用户经常习惯于使用备忘录来记录事情,所以就会导致误删备忘录里的资料,万一资料很重要怎么办?就这样没了吗?有办法恢复回来吗?当然有啊!那么,苹果备忘录永久删除怎么恢复呢?小编分享2个找回备忘录的高效 ...
- 解决 Birt 等报表工具制作报表的几个难题
解决Birt等报表工具制作报表的几个难题 在上一篇<Birt 如何实现不规则月份统计>中,我们讲解了如何帮助 Birt 制作这种报表的详细过程,在本文中我们再继续讨论几个类似的制作难题,并 ...
最新文章
- 超越技术分析_超越技术面试
- 大工14春《计算机应用基础》在线测试2,大工14春《计算机应用基础》在线测试2...
- 关于windows的进程处理(七)
- mac pycharm打不开解决方法
- [js高手之路]打造通用的匀速运动框架
- 极客时间《玩转Git三剑客》之GItHub剑客
- jmeter模拟压测真实复杂用户场景,阶梯螺纹线程组Stepping Thread Group终极线程Ultimate Thread Group并发线程Concurrency Thread Group
- Android 系统(71)---Android系统build.prop文件生成过程
- 如何定制 Calico 网络 Policy - 每天5分钟玩转 Docker 容器技术(70)
- 关于ModifyStyle
- 飞鸽传书linux运行,Linux下飞鸽传书实现
- Routing and Switching Essentials ( 版本 6.00) - RSE 6.0 Chapter 5 Exam
- 【许晓笛】别傻了,瀑布到来时,一句口号根本守不住你的币
- svm算法java实现_谁有用JAVA实现机器学习svm算法的代码,感激不尽
- PROE/Croe如何编辑已完成的草图,让其再次进入草绘状态
- 计算机毕业设计JAVA人民医院体检预约mybatis+源码+调试部署+系统+数据库+lw
- 学堂在线-清华大学-操作系统实验Lab1【练习5-6】
- Google Code Jam程序设计大赛中国人获冠亚军
- 做公众号,这些事别去碰,碰就是死
- oracle卸载ogg,OGG-卸载