- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章4个提高Jupiter Notebooks开发效率的工具由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
通常,notebook被认为是促进糟糕的编码实践,因为它们很难进行版本控制,经常依赖于以特定顺序运行的单元格来返回正确的结果,并且测试和调试可能很棘手.
但是,当涉及到探索性数据分析和初始机器学习模型开发等任务时,jupiter notebooks 仍然是大多数数据科学家的首选。根据代码可视化输出(如图表和表)以及向分析中添加丰富注释的能力是任何其他工具都无法复制的.
虽然notebook仍然是如此受欢迎的选择,但值得研究一些可用的选项,以克服可能使notebook代码不那么健壮的一些问题。在本文中,我将通过代码示例简要介绍为某些问题提供解决方案的4种工具。这些包括
。
使用Github之类的工具对notebook进行版本控制可能很困难。版本控制工具不能很好地呈现差异,因为它们不能理解典型notebook的逻辑结构。这可能会使跟踪更改和合并代码变得困难, 。
Nbdime是一个旨在解决这个问题的工具,它提供了更丰富的、可视化的差异,可以很容易地看到同一notebook的不同版本之间的变化.
Nbdime可以通过pip安装.
这应该会自动安装和启用扩展。如果没有正确安装,可以使用以下命令手动安装,添加一个标志来确定为——system(系统范围)、——user(当前用户)、——sys-prefix(当前虚拟环境)安装.
nbdime extensions --enable [--sys-prefix/--user/--system] 。
一旦一切都安装好,如果你打开一个jupiternotebook,你现在应该有以下新图标在你的工具栏.
我创建了一个notebook来展示nbdime的功能,它在波士顿房价数据集上训练一个简单的线性模型.
新的图标现在应该在notebook的工具栏上可用,形成nbdime的web视图功能。这个视图提供了对notebook所做的更改的丰富的可视化表示.
点击git按钮将显示上次提交和当前保存的notebook版本之间的差异.
单击看起来像钟面的图标将显示最新检查点和当前保存的版本之间的差异.
我将对notebook做一些改变,并使用web视图查看与上次提交的差异.
在notebook中,我改变了我正在使用的模型,并对残差图做了一个小的改变。让我们看一下nbdime提供的结果差异.
从下面的图片中可以看到,nbdime逐行和单元格显示了自上次提交以来所更改的内容。它甚至显示了每个单元格的输出是如何改变的,包括图形.
。
Linting是一个检查代码质量的过程。linting工具会扫描代码并检查常见的样式错误。例如,Python lint通常检查不符合广泛使用的风格指南(如Pep8)的代码.
NbQa是一个可以让你在jupiternotebook上运行任何标准python linter的工具。下面的代码可以通过这个工具访问:pylint, black, auto flake, check-ast, doctest, flake8, mypy和yapf.
要安装,只需运行以下程序.
让我们在我最近创建的notebook上运行pylint,这是一个常用的python linter。为此,您需要在命令行上运行以下命令.
这给了我一个标准的pylint输出,它突出显示了代码中的错误.
。
您使用notebook完成的每个项目可能需要不同的依赖项集。传统上,这些是在jupiternotebook外部使用虚拟环境管理的.
Jupyter nbrerequirements是一个工具,它可以让你管理依赖关系,并创建一个独立的优化环境,所有这些都在notebook中管理.
要开始使用pip安装库并使用下面所示的命令启用notebook扩展名.
您可以通过使用单元魔术命令或使用将在notebook顶部显示的UI来在notebook中安装库.
要使用单元格魔法安装像pandas这样的库,只需在notebook单元格中输入以下内容.
。
正如本文前面所描述的,notebook最常用于模型的探索性分析和初始开发。通常,存储这种类型的分析和最初的项目开发是非常有用的,既可以用于文档目的,也可以用于将来可能基于这项工作的发现进行构建.
py测试插件nbval是验证存储的notebook的有用工具。Nbval将自动运行notebook中的每个单元格,并检查当前输出是否与存储在上一个保存版本的.ipynb文件中的输出匹配。这作为对底层源代码中没有任何更改的检查,从而验证原始分析或实验的结果仍然是可靠的.
要使用此工具,首先通过以下命令进行pip安装.
通过运行以下命令,可以对目录中包含的所有文件执行测试.
或者在一个特定的notebook上运行这行代码.
我在现有的两本notebook上进行测试。第一个运行没有错误,并给出如下输出.
下面给出了一个notebook测试失败的例子.
虽然notebook经常用于探索性分析和初始模型开发,而不是生产代码,但仍然应该被视为一个重要的工作存储。最初的实验和分析是过去结果的有用记录,在以后的日子里应该可以回到notebook上建立你的工作。因此,值得探索的工具可以帮助使在notebook中编写的代码更加健壮和可复制.
本文介绍了四种工具,它们可以帮助使notebook中的代码更好、更可重用。有关可重复数据科学代码的更多提示,请参阅下面我之前的文章.
最后此篇关于4个提高Jupiter Notebooks开发效率的工具的文章就讲到这里了,如果你想了解更多关于4个提高Jupiter Notebooks开发效率的工具的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
第一个 .on 函数比第二个更有效吗? $( "div.container" ).on( "click", "p", function(){ }); $( "body" ).on( "click",
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 7 年前。 Improve
我有这样的查询: $('#tabContainer li'); JetBrains WebStorm IDE 将其突出显示为低效查询。它建议我改用这个: $('#tabContainer').find
我刚刚在 coursera ( https://www.coursera.org/saas/) 上听了一个讲座,教授说 Ruby 中的一切都是对象,每个方法调用都是在对象上调用发送方法,将一些参数传递
这可能是用户“不喜欢”的另一个问题,因为它更多的是与建议相关而不是与问题相关。 我有一个在保存和工作簿打开时触发的代码。 它在 f(白天与夜晚,日期与实际日期)中选择正确的工作表。 周一到周三我的情况
这只是我的好奇心,但是更有效的是递归还是循环? 给定两个功能(使用通用lisp): (defun factorial_recursion (x) (if (> x 0) (*
这可能是一个愚蠢的问题,但是while循环的效率与for循环的效率相比如何?我一直被教导,如果可以使用for循环,那我应该这样做。但是,实际上之间的区别是什么: $i = 0; while($i <
我有一个Elasticsearch索引,其中包含几百万条记录。 (基于时间戳的日志记录) 我需要首先显示最新记录(即,按时间戳降序排列的记录) 在时间戳上排序desc是否比使用时间戳的函数计分功能更有
使用Point2D而不是double x和y值时,效率有很大差异吗? 我正在开发一个程序,该程序有许多圆圈在屏幕上移动。他们各自从一个点出发,并越来越接近目的地(最后,他们停下来)。 使用 .getC
我正在编写一个游戏,并且有一个名为 GameObject 的抽象类和三个扩展它的类(Player、Wall 和 Enemy)。 我有一个定义为包含游戏中所有对象的列表。 List objects; 当
我是 Backbone 的初学者,想知道两者中哪一个更有效以及预期的做事方式。 A 型:创建一个新集合,接受先前操作的结果并从新集合中提取 key result = new Backbone.Coll
最近,关于使用 LIKE 和通配符搜索 MS SQL 数据库的最有效方法存在争论。我们正在使用 %abc%、%abc 和 abc% 进行比较。有人说过,术语末尾应该始终有通配符 (abc%)。因此,根
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 8 年前。 Improv
我想知道,这样做会更有效率吗: setVisible(false) // if the component is invisible 或者像这样: if(isVisible()){
我有一个静态方法可以打开到 SQL Server 的连接、写入日志消息并关闭连接。我在整个代码中多次调用此方法(平均每 2 秒一次)。 问题是 - 它有效率吗?我想也许积累一些日志并用一个连接插入它们
这个问题在这里已经有了答案: Best practice to avoid memory or performance issues related to binding a large numbe
我为我的 CS 课(高中四年级)制作了一个石头剪刀布游戏,我的老师给我的 shell 文件指出我必须将 do while 循环放入运行者中,但我不明白为什么?我的代码可以工作,但她说最好把它写在运行者
我正在编写一个需要通用列表的 Java 应用程序。该列表需要能够经常动态地调整大小,对此的明显答案是通用的Linkedlist。不幸的是,它还需要像通过调用索引添加/删除值一样频繁地获取/设置值。 A
我的 Mysql 语句遇到了真正的问题,我需要将几个表连接在一起,查询它们并按另一个表中值的平均值进行排序。这就是我所拥有的... SELECT ROUND(avg(re.rating
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Is there a difference between i==0 and 0==i? 以下编码风格有什么
我是一名优秀的程序员,十分优秀!