在探索性数据分析和机器学习开发等任务时,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个解决版本控制的高效工具!相关推荐

  1. Access中出现改变字段“自己主动编号”类型,不能再改回来!(已解决)

    Access中出现改变字段"自己主动编号"类型,不能再改回来! (已解决) 一次把access中的自增字段改成了数值,再改回自增时,提示:在表中输入了数据之后,则不能将不论什么字段 ...

  2. 微信hash ajax,基于vue hash模式微信分享#号的解决

    看代码吧~ // 问题描述在微信中分享到朋友圈或好友时,分享出去的路由被破坏,打开分享的链接,路由中的"#"会被去掉并追加?fromTimeline之类的后缀参数,这就造成了分享出 ...

  3. 酷狗服务器显示失败怎么回事啊,酷狗音乐分享音乐失败怎么办 酷狗音乐分享音乐失败解决方法...

    对于喜欢听歌的伙伴而言,音乐是无国界的,在酷狗音乐里面可以随时播放国内外歌曲,觉得好听的歌曲还可以分享给好友听,但是最近有用户反映自己分享音乐出现失败显示,不知道如何解决的伙伴,可以在历趣看看哦! 酷 ...

  4. 分享几个好用的聚合工具网站,一个网站,解决一堆问题

    分享几个好用的聚合工具网站,一个网站,解决一堆问题 参考文章: (1)分享几个好用的聚合工具网站,一个网站,解决一堆问题 (2)https://www.cnblogs.com/zdz8207/p/al ...

  5. jupyter notebook内核报错解决

    提示: jupyter notebook内核报错解决 文章目录 前言 jupyter notebook 内核报错 一.升级更新 1.更新 二.卸载conda 安装的ipykernel,重新安装 2.卸 ...

  6. Js先执行点击事件,再执行失去焦点事件的解决方法

    Js先执行点击事件,再执行失去焦点事件的解决方法 思路:给失去焦点事件设置一个暂停,让点击事件先执行. js代码: //点击事件 先执行 $(document.body).on('click','#e ...

  7. JAVA基础再回首(一)——基本概念、JAVA开发工具、JAVA基本语法

    JAVA基础再回首(一)--基本概念.JAVA开发工具.JAVA基本语法 学了java,做了android应用开发,现在回想起来,真的是一路坎坷..我在上章博客中提到了我以后的几个学习计划和目标就是把 ...

  8. 苹果备忘录永久删除怎么恢复?分享2个找回备忘录的高效操作

    苹果用户经常习惯于使用备忘录来记录事情,所以就会导致误删备忘录里的资料,万一资料很重要怎么办?就这样没了吗?有办法恢复回来吗?当然有啊!那么,苹果备忘录永久删除怎么恢复呢?小编分享2个找回备忘录的高效 ...

  9. 解决 Birt 等报表工具制作报表的几个难题

    解决Birt等报表工具制作报表的几个难题 在上一篇<Birt 如何实现不规则月份统计>中,我们讲解了如何帮助 Birt 制作这种报表的详细过程,在本文中我们再继续讨论几个类似的制作难题,并 ...

最新文章

  1. 超越技术分析_超越技术面试
  2. 大工14春《计算机应用基础》在线测试2,大工14春《计算机应用基础》在线测试2...
  3. 关于windows的进程处理(七)
  4. mac pycharm打不开解决方法
  5. [js高手之路]打造通用的匀速运动框架
  6. 极客时间《玩转Git三剑客》之GItHub剑客
  7. jmeter模拟压测真实复杂用户场景,阶梯螺纹线程组Stepping Thread Group终极线程Ultimate Thread Group并发线程Concurrency Thread Group
  8. Android 系统(71)---Android系统build.prop文件生成过程
  9. 如何定制 Calico 网络 Policy - 每天5分钟玩转 Docker 容器技术(70)
  10. 关于ModifyStyle
  11. 飞鸽传书linux运行,Linux下飞鸽传书实现
  12. Routing and Switching Essentials ( 版本 6.00) - RSE 6.0 Chapter 5 Exam
  13. 【许晓笛】别傻了,瀑布到来时,一句口号根本守不住你的币
  14. svm算法java实现_谁有用JAVA实现机器学习svm算法的代码,感激不尽
  15. PROE/Croe如何编辑已完成的草图,让其再次进入草绘状态
  16. 计算机毕业设计JAVA人民医院体检预约mybatis+源码+调试部署+系统+数据库+lw
  17. 学堂在线-清华大学-操作系统实验Lab1【练习5-6】
  18. Google Code Jam程序设计大赛中国人获冠亚军
  19. 做公众号,这些事别去碰,碰就是死
  20. oracle卸载ogg,OGG-卸载

热门文章

  1. 织梦wap.php怎么改,利用DEDECMS织梦建立wap站
  2. RGB、YUY2、YUYV、YVYU、UYVY、AYUV
  3. C++17之折叠表达式
  4. 三、简单刷题APP(题库是Excel)之在APP添加题目
  5. mysql 日期的数据类型,MySQL日期数据类型、MySQL时间类型使用总结
  6. 命令行 | 登录校园网 | curl
  7. linux top 更新时间,linux top详解
  8. 如何使用金山文档进行同一文档的团队协作
  9. 【已解决】笔记本电脑关闭盖子后出现死机
  10. 品牌营销的反思录:品牌、市场与营销学习心得笔记