10bet十博注册

首页 > 正文

学者指南:如何毫不费力地优化Jupyter笔记本?

www.imoveischaves.com2019-08-12

  全文共6242字,预计学习时长15分钟或更长

  bfa9f6cf38b6704a3d0ed17df850e246.jpeg

peter_pyw/ Pixbay

  科技真正酷炫的地方在于可以让生活变得更加有趣。每一天,每一分,每一秒,都有人将心血、汗水倾注到工具设计中,使程序、程序包、应用软件运行得更加流畅,生活更加便捷。

  在这种情况下,有些人会认为下载并启动Jupyter笔记本就够了,如果笔记本能够运行就大功告成了!但其实有无穷无尽的方法可以定制个人的笔记本。安装程序或程序包才只是开始!

  为什么不花上几分钟做出一些改进呢?有很多简单快速的方法可以让Jupyter笔记本运行得更好,更快,更强,更酷炫,并且更有趣。

  首要事项

  安装完所有程序后,无论什么时候想要启动Jupyter 笔记本,都可以启动终端

  Jupyter notebook

  接着就可以运行程序。

  更换笔记本主题

  在使用Jupyter笔记本时,用户总是最先想要更换笔记本主题。人们总是对暗黑系很着迷!这非常容易,主题可以随时切换。

  Pip install jupyterthemes

  现在通过jt -t chesterish可以安装超人气的暗黑主题了。

  jt -t chesterish

  ed791f686600da0f39a4c5d5fafed1e4.jpeg

  可以恢复默认主题,用:

  Jt -r

  GitHub上Jupyter主题的repo代码传送门:

  基本命令

  · 可以使用命令面板迅速访问键盘快捷键。只需输入Ctrl + Shift + P或Cmd + Shift + P即可访问与Mac上的Spotlight搜索非常相似的对话框。如果不知道键盘快捷键是哪个的话,这可以很好地帮助用户按名称运行任何命令。

  d8d99dc80897ad0c440bd66451058026.jpeg

  · 组合键Shift + Enter可以运行当前单元格

  · Esc键可进入命令模式。现在可以用箭头键在笔记本上导航了!

  在命令模式,用

  · A键在当前单元格上方插入一个新的单元格

  · B键在当前单元格下方插入新的单元格

  · M键将当前单元格更改为Markdown

  · Y键返回到代码单元格

  · D + D键删除当前单元格(按两次键)

  · Enter键从命令模式返回编辑模式

  另外,

  · 组合键Shift + Tab将显示刚刚键入代码单元格的对象的文档。(可以通过该组合键循环切换几种模式。)

  · 组合键Esc + F可以在代码中查找和替换信息(而不是在输出中)。

  · 组合键Esc + 0切换单元格输出。

  · 组合键Shift + J或Shift + Down向下选择下一个单元格。Shift + K或Shift + Up向上选择下一个单元格。一旦选定单元格,就可以批量删除/复制/剪切/粘贴/运行它们。当需要移动笔记本的某些部分时,这真是太棒了!

  · Shift + M 可以合并多个单元格。(如果只是试图点击想要操作的单元格,就会遇到麻烦。按住Shift键并单击要合并的单元格。然后,仍然按住shift键,再按M键。)

  b3569224434a7ea9f39201fa0c97aad6.gif

  · 此外,如果在开头加上感叹号,还可以在笔记本中运行bash命令。例如:!pip install numpy

  · 可以通过在末尾添加分号来随时抑制最后一行函数的输出。

  注释和取消注释的代码块

  如果想要在工作时添加新代码行并注释掉旧代码行。如果正在提高或尝试调试代码性能,那就太棒了。

  首先,选择要注释掉的所有行。

  接着点击cmd + /注释掉突出显示的代码!

  bcc23907b382da4fa87d40785cd9ac08.gif

  LaTex

  可以随时在Markdown单元格中编写LaTex,它将作为公式呈现。

  这将

  $P(A mid B)=frac{P(B mid A)P(A)}{P(B)}$

  变成了

  038d575734281d6120ec1f251b74ff25.jpeg

  打印所有单元格输出

  通常只打印单元格中的最后一个输出。对于其他所有内容,都必须手动添加print(),这很有效,但不是很方便,可以通过在笔记本顶部添加这个来更改:

  从IPython.core.interactiveshell导入InteractiveShell InteractiveShell.ast_node_interactivity=all

  这意味着,虽然通常只打印一个输出

  c553a47b5fdb09a5331046c017dfd1c4.jpeg

  现在将看到两个输出。

  c65f738dd9fa651c47a91ad0a65fc86d.jpeg

  任何时候想回到初始设置,只需运行

  从IPython.core.interactiveshell导入InteractiveShell InteractiveShell.ast_node_interactivity=last_expr

  只需注意,必须在单独的单元格中更改设置,才能使其在下一次单元格运行时生效。

  扩展

  因为它是一个开源的Web应用程序,所以为Jupyter笔记本开发了大量的扩展项。

  iPython扩展列表传送门:

  可以随时在命令行中安装Nbextensions,就像这样:

  用pip

  pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user

  或者用 Anaconda

  conda install -c conda-forge jupyter_contrib_nbextensions conda install -c conda-forge jupyter_nbextensions_configurator jupyter contrib nbextension install --user

  安装完成后,将看到Nbextensions选项卡。开始探索吧!

  e60262be451dc8d05b87d20a0ca4ec48.jpeg

  传送门:关于扩展项的更多信息,例如如何启用、禁用扩展项等等

  这里不会讲太多关于添加、启用扩展项或者如何使用它们的细节,因为这些在Jupyter 笔记本中都解释的非常详细。只需点击屏幕上的 Nbextensions ,点击感兴趣的扩展程序,然后向下滚动查看所需信息以及运行中的扩展程序的GIF动图。

  514dad294bdee942b4d7fb7eed30e2d4.gif

  热门扩展

  · Scratchpad——这很酷炫。它可以创建临时单元格以进行快速计算,而无需在工作簿中创建新的单元格。这能节省大量时间!

  · Hinterland——这使得代码单元中的每个按键都可以启用代码自动完成菜单,而不仅仅是选项卡。

  · Snippets——添加下拉菜单,将代码段单元格插入当前笔记本。

  · Autopep8——是将python代码自动编排以符合PEP 8编程风格的工具。操作方便!确保在本地计算机上运行pip installautopep8 --user。这将确保遵循正确的python编码规范。

  · Split Cells Notebook——用以在Jupyter笔记本中拆分单元格。进入命令模式(Esc),用于Shift + s将当前单元格切换为拆分单元格或全宽度。

  · Table of Contents——扩展可以收集所有正在运行的标题,并将它们显示在浮动窗口中,作为侧边栏或导航菜单。

  · A Code Prettifier——清理、格式化和缩进你的代码,无需人工操作。

  · Notify——当内核空闲时,会显示桌面通知。当运行代码需要花费一些时间才能完成时,这就非常方便。

  · Code Folding——在编辑模式下,边缘会出现一个三角形,用于折叠代码。想要隐藏细节以提高可读性时,这一功能很有用。

  · Zen mode——使界面更加整洁。确保在设置中关闭背景。

  魔法命令

  Magics是一些方便的命令,可以使执行特定任务变得轻松。它们通常看起来像unix命令,但是都是通过Python实现的。

  更多魔法命令传送门:

  魔法命令分为两种: 行魔术命令(在行上使用)和单元格魔术命令(适用于整个单元格)。行魔术以一个百分号字符%开始,单元格魔术以两个%%开始。要查看可用的魔法,请运行:

  %lsmagic

  52445e6c9944969e663a64cdb1d15b2d.jpeg

  设置环境

  通过%env,不需要重启其他设置,也能够轻松管理笔记本的环境变量。如果在没有任何变量的情况下运行程序,笔记本中将会列出所有相关的环境变量。

  9766cd88ee2dd62dfc86fa21cf6da7bf.jpeg

  插入代码

  :%load用于插入一段外部代码。(详情请看下文,但是由于这一点非常重要,所以在此提出)例如:

  %loadbasic_imports.py

  将获取basic_imports.py文件并将其加载到笔记本中。

  导出单元内容

  这非常有用。%%writefile用于随时导出单元中的内容。例如:

  %%writefile thiscode.py 在此写下一些你想要输出代码或函数,以后也许会用到!

  你是否发现自己一直在所有笔记本中运行相同的输入值或者加载相同的函数?现在有一个一劳永逸的办法!建立一个文件夹basic_imports.py,里面包括以下代码:

  %writefile basic_imports.py import pandas as pd import numpy as np import matplotlib.pyplot as plt

  这将创建一个.py文件夹,其中包含基本的输入值。

  要想随时运行这些函数,只需写下:

  %load basic_imports.py

  执行此操作将用加载的文件替换单元内容。

  # %load imports.py import pandas as pd import numpy as np import matplotlib.pyplot as plt

  现在可以再次运行单元,导入所有模块,做好准备。

  32ff0d0ebd3fffb83794f01b83aa714b.gif

  存储和重新使用代码:%macro魔法命令

  大多数人都可能会反复地写着几个一样的任务,重复计算一些方程式,无数次产出同样的代码行。Jupyter可以将代码段保存为执行宏。执行宏只是代码,因此它们可以包含变量,这些变量必须在执行之前定义。现在来定义一个吧!

  比如说

  name='Kitten'

  现在,定义一个宏需要使用一些代码。从字符串到函数,或者所需要的任何东西,这几乎可以保存任何东西。

  print(‘Hello, %s!' % name) Hello, Kitten!

  %macro和%load魔法命令用于设置一个可重复使用的宏。通常在宏名称的开头加上双下划线,用以区别于其他变量。

  %macro -q__hello_you 32

  %macro魔法命令设置一个名称和一个单元编号(或编号),-q使其不那么冗长。%store可以保存任何其他板块的变量。在这里上传以创建的宏的名称,以便在内核关闭后或在其它笔记本中再次使用。

  要加载宏,只需运行:

  %load __hello_you

  要运行宏,只需运行一个包含宏名的单元:

  __hello_you Hello, Kitten!

  完成!

  修改宏中所使用的变量。

  name='Muffins'

  运行宏时,修改过后的值就会被执行。

  __hello_you Hello,Muffins!

  56ed07f02d20d7fa25b318ef4f7b9165.jpeg

  这是因为宏在单元范围内执行已保存的代码。如果未定义名称,则会出现错误。

  想要在整个笔记本中都使用同一个宏吗?

  存储魔法命令

  %store 可以存储宏,并且在整个jupyter笔记本中运行被存储的宏。

  cac74f23c3158c180c893cb5f1db5a3d.jpeg

  现在,打开一个新的笔记本,尝试输入%store -r__hello_you吧。加载那项代码,就可以感受新世界了!

  %store-r __hello_you name='Rambo' %load __hello_you Hello,Rambo!

  08c456d0a8ae7338b0f7d183df855836.jpeg

  运行魔法命令

  %run魔法命令将执行代码,并显示结果,包括matplotlib图。甚至整个笔记本都可以采用这种方式来运行。

  %run可以执行.py文件中的python代码,还可以运行其他Jupyter笔记本。

  Pycat 魔法命令

  在不确定脚本内容的情况下,%pycat可用于显示脚本内容。

  %pycatbasic_imports.py

  01cc80c368a0c0aa4ca6e216077390fe.jpeg

  自动保存

  %autosave魔法命令可以更改笔记本自动保存到检查点文件的频率。

  %autosave 60

  该代码设置每60秒就自动保存一次。

  显示图像

  %matplotlib inline

了。%matplotlib inline将在单元输出结果中显示Matplotlib绘图图像,这意味着笔记本中可以包含Matplotlib图表和图形。在笔记本的开头运行这个程序是有意义的。

  96d06df95f737937aada2f13e591ba75.jpeg

  计时

  Ipython有两种魔术命令可用于计时,分别是%%time和%timeit。当代码运行得很慢,用户试图找出问题所在时,这些命令就变得非常重要。这两种命令都有行和单元模式。

  %timeit和%time之间主要的不同之处在于%timeit多次运行特定代码,并算出平均值。

  %%time则在单元中呈现出代码单次运行的结果。

  %%timeit使用Python timeit模式,这种模式可以多次运行一个代码,并且就结果取平均值。-n选项用于设置运行次数,-r选项用于设定重复次数等等。

  在不同的操作系统运行代码

  也可以使用指定的语言。系统中有多种语言扩展,例如:

  · %%bash

  · %%HTML

  · %%python

  · %%python2

  · %%python3

  · %%ruby

  · %%perl

  · %%capture

  · %%javascript

  · %%js

  · %%latex

  · %%markdown

  · %%pypy

  为了在笔记本中呈现HTML,需要运行:

  %%HTML This is really neat!

  9da319bc502caca22f215ba2bb7c8c52.jpeg

  也可以随时直接使用LaTeX,通过:

  %%latex 这是一个方程式:$E=mc^2$

  LaTeX传送门:

  c74caa17b6cc76a67d966864bd956ee1.jpeg

  Who魔法命令

  毫无争议,%who命令可以列出全球范围内所有的变量,而传递str这样的参数将只列出该类型的变量。所以如果在笔记本中输入%who str这样的代码,将会得到

  ca2f3fc2b5df5e127b046024254837aa.jpeg

  Prun魔法命令

  %prun 将展示程序在每个函数上所花费的时间。使用%prun statement_name可以得到一个有序的表,该表记录了在语句中调用每个内部函数的次数、每次调用所用的时间以及函数累计运行时间。

  python调试器魔法命令

  Jupyter拥有自己的Python调试器接口。这使得我们可以查看函数内部工作。可以通过在单元顶部运行%pdb来打开它。

  传送门:

  高分辨率绘图

  用视网膜屏时,一IPython magic的一个简单行将输出双分辨率绘图。请注意,这不会在非视网膜屏幕上呈现。

  %config InlineBackend.figure_format='retina'

  在运行时跳过一个单元

  只需在单元顶部添加%%script false

  %%script false 你将在这里输入一些暂时不需要运行的长代码。

  提醒

  实际上,这是一个python窍门,在运行一个耗时超长的代码时,可以使用这一窍门。如果不想一整天都盯着代码的话,就需要知道代码什么时候运行完毕。可以在代码运行完毕时,设置一个闹铃。

  在linux(和mac)系统上

  import os duration=1 # second freq=440 # Hz os.system('play --no-show-progress --null--channels 1 synth %s sine %f' % (duration, freq))

  在windows系统上

  import winsound duration=1000 # millisecond freq=440 # Hz winsound.Beep(freq, duration)

  为了使用这些,需要安装sox,一起使用。

  现在开始动手吧!

  67e647af1652cdc84f1c13dc73a6b86b.jpeg

  留言 点赞 关注

  我们一起分享AI学习与发展的干货

  欢迎关注全平台AI垂类自媒体 “读芯术”

达到当天最大量
热门浏览
热门排行榜
热门标签
日期归档