Jupyter-NoteBook-你应该知道的N个小技巧
智能决策上手系列教程索引
不断更新
部分内容来自于翻译整理
多行输出
在Notebook的中开头cell中添加以下代码可以实现多行输出:
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = 'all' #默认为'last'
例如:

如果需要一劳永逸的在每个文件中自动实现这个功能,可以在macOS的/Users/your_user_name/.ipython/profile_default/或者windows的C:\Users\your_profile.ipython\profile_default文件夹下创建ipython_config.py文件。(mac下你可以在终端进入这个目录touch ipython_config.py来创建)。
然后打开ipython_config.py文件,添加以下两行:
c = get_config()
c.InteractiveShell.ast_node_interactivity = "all"
保存,重启Notebook后生效。

感谢离宫2提示这个技巧。
module 'numpy' has no attribute 'version'
import pandas as pd就报这个错误,原因未知,解决方法就是-f强制重新安装:
conda install -f numpy
conda install -f pandas
Jupyter Notebook可能是当今最常用的数据科学工具
写Python代码很多人会告诉你要用Pycharm,但那是开发Python项目用的, 那种由成百上千个文件组成、包含数万行代码的项目必须要很专业的复杂工具才行。
但如果你的目的是数据分析、算法研究等方面的工作,那么Jupyter Notebook 最适合你,因为它足够简单,让你可以专注于数据和算法的逻辑而不是工具。JupyterNotebook不仅可以写代码还能输出图像、表格等
你可以用用下面一些代码实验(代码来自天池实验室):
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jn
from IPython.display import display, clear_output
import time
x = np.linspace(0,5)
f, ax = plt.subplots()
ax.set_title("Bessel functions")
for n in range(1,10):
time.sleep(1)
ax.plot(x, jn(x,n))
clear_output(wait=True)
display(f)
plt.close()
得到如下图所示:
image.png常用的绘图分析工具有Matplotlib、Seaborn、plot.ly。
使用Anaconda来安装最省事
如果你要快速开始Python编程,直接下载Anaconda是最简单的,它包含了你所需要的一切,甚至连Python都不需要单独安装。
开机,下载和安装Anaconda,打开Anaconda navigator就看到Jupyter notebook了。
Anaconda3.5.2:
百度网盘下载(非VIP较慢)
官方下载(Windows电脑使用)
官方下载(苹果电脑使用)更省事的是阿里云天池Notebook实验室
这是一个在线版的Notebook,什么都不需要安装就能开始编码和运行!
唯一麻烦的就是需要你注册并实名认证。
你在网页里编写Python代码,然后免费在阿里云服务器上运行并返回结果。你写的代码也存在服务器上,不用再担心会丢失了,它甚至包含了代码版本管理功能!
阿里云天池Notebook
已知的确缺点有:- 不能随意的安装第三方功能模块。不过它已经自带了很多,大多数情况都足够了。
- 不能安装Notebook插件。基本上也不是问题,没事谁也不折腾这个。
- 要命的是你不能像控制自己的电脑一样控制远程服务器,当你在爬取某个网站数据的时候,网站发现你的IP(阿里云服务器的IP)访问不正常要求在浏览器内做人工识别字符验证,这时候你就无助了。——如果在你自己电脑上就只要打开浏览器操作一下就OK了。
Ipython是Jupyter的前身
Jupyter项目是从Ipython项目演进过来的,所以当你看到存储的文件是
.ipynb时候不要奇怪,就是ipython notebook的意思。实际上以后在很多地方都会看到Ipy字样。JupyterLab是Notebook的加强版
在Anaconda navigator里面还有一个JupyterLab。Lab在Notebook基础上增加了更多的功能,如果你已经使用过一段时间的Notebook,那可以试试看Lab。
Shift+回车执行单元代码
快速运行并输出结果,并跳转到下一个单元。
代码自动完成
在代码顶部添加
%config IPCompleter.greedy=True这一行并且shift+回车运行,对于接下来运行过的内容都会被列入自动提示中。
按Tab键弹出自动提示
如下图,输入my然后Tab键就弹出上面自定义的两个变量名,然后按回车直接输入myCount,按向下箭头键再回车就输入myNum。
image.png同样对于
import导入的功能模块也可以提示。比如下图,输入requ然后按tab就自动补全输入requests(因为已经导入,并且是唯一的,而刚才的myCount和myNum都是my开头)。
输入到requests.的时候按tab就会弹出requests包含的所有功能命令,继续输入g就得到下图的情况。
image.png不要把代码都写在一个单元cell里!
这非常重要!
但也不要每行一个cell...
合理安排,一个cell就是一个小的逻辑单元,这样既可以理清思路,又方便单独运行每个cell方便测试寻找问题。
推荐把相关的设置变量都集中放在最上面单独一个或几个cell,这样以后使用时候可以集中修改,不影响代码逻辑。
比如下图中的代码,以后修改只要修改两个变量num1、num2就可以直接运行得到结果。
image.png另外一个建议就是把能够独立的代码变为一个
def单独拿出去作为cell内容,比如下面把求整体方差avri分拆出了两个def函数,avg求平均数,sqr求两数差的平方。(代码仅供示意)
image.pngCell不仅可以写代码,还能Markdown
Markdown是用来写文章的,比如这个简书文章就是用markdown语法写的。
新建cell可以选markdown用来写代码注释。写起来是这样的:
image.pngshift回车运行后是这样的(双击可以返回到修改模式):
image.png更改默认打开的项目
默认Notebook总是打开电脑中我的文档目录,以下方法可以让它打开指定的目录。
打开命令行工具输入jupyter notebook --generate-config
然后会返回一个地址,找到它(可能是隐藏文件),用写字板打开那个文件jupyter_notebook_config.py:
image.png然后再顶部添加(等号后面引号内换成你自己的文件夹地址)
c.NotebookApp.notebook_dir = '/Users/zhyuzh/Desktop/Jupyter'
然后重新打开Jupyter Notebook就会默认打开这个文件夹了。苹果电脑显示隐藏文件的命令:
defaults write com.apple.finder AppleShowAllFiles -bool YES
苹果电脑下复制当前文件夹路径快捷键Command+Option+C扩展插件
插件可以让Notebook变得更好用一些。一般情况我们不需要安装插件,等你使用久了再慢慢了解。
官方Github插件主题列表
非官方contrib贡献插件列表
非官方贡献版插件更多更容易安装些,因为可以一次都装上,要用哪个再开启哪个。
安装命令:conda install -c conda-forge jupyter_contrib_nbextensions
运行后可能稍等一下才有反应,根据提示按y。
然后再启用,比如启用collapsible_headings:jupyter nbextension enable collapsible_headings/main
注意/main是必须的。collapsible_headings插件可以让Notebook把一个cell折叠起来,在cell菜单下出现insert head cell字样:
image.png这个插件在JupyterLab下面好像不能用。不过Lab自身就可以双击折叠一个cell,比这个更方便些。
collapsible_headings/main其实是指文件夹collapsible_headings下的main.js文件。所有可用的文件夹名称都可以在电脑里搜索nbextensions文件夹找到。苹果电脑的位置类似/anaconda3/pkgs/jupyter_contrib_nbextensions-0.5.0-py36_0/lib/python3.6/site-packages/jupyter_contrib_nbextensions/nbextensions
JupyterNoteBook的插件本质都是NodeJs的npm插件。如果你了解nodejs那么很容易搞明白它的原理。格式化自动美化代码
代码整齐很重要!
对于Python来说混乱的代码格式可能是致命的!
这里介绍安装code-pretty自动格式化插件,先执行命令开启:jupyter nbextension enable code_prettify/code_prettify
依照官方说明还需要执行另外一个命令安装必要的第三方功能模块:conda install yapf
然后就可以看到Notebook如下图出现一个小锤头工具。点击它就能把当前cell的代码自动格式化变整齐了,也可以使用快捷键Ctrl+L(苹果下也是ctrl不是Command)。
image.png用
?输出帮助提示比如下图:
image.png运行或载入外部Python文件
使用
%run代码可以直接外部的执行.py文件,比如在Notebook文件夹内有一个a.py文件:aa='haha'
print(aa)
那么可以用下面代码直接在Notebook内运行它(注意这里的
./表示在同一文件夹下)%run ./a
print('>>'+aa)
image.png如果使用
%load则直接把代码读进来(下面是%load ./a运行的结果):
image.png公式编辑器LaTeX
Notebook的Markdown单元是支持LateX公式编辑的,比如输入
\\( P(A \mid B) = \frac{P(B \mid A) \, P(A)}{P(B)} \\)运行得到下图:
image.png关于LaTeX语法可以在简书里搜索。
可以保存为.py或pdf文件
从
file菜单可以保存为多种格式。
Jupyter-NoteBook-你应该知道的N个小技巧的更多相关文章
- Java程序员应该知道的10个调试技巧
试可以帮助识别和解决应用程序缺陷,在本文中,作者将使用大家常用的的开发工具Eclipse来调试Java应用程序.但这里介绍的调试方法基本都是通用的,也适用于NetBeans IDE,我们会把重点放在运 ...
- 【转】你应该知道的 10 个 VirtualBox 技巧与高级特性
原文网址:http://www.oschina.net/translate/10-virtualbox-tricks-and-advanced-features-you-should-know-abo ...
- (转) Java程序员应该知道的10个调试技巧
原地址:http://www.csdn.net/article/2012-09-03/2809495-java-debugging-tips-with-eclipse 调试可以帮助识别和解决应用程序缺 ...
- (转)Java程序员应该知道的10个调试技巧
(转自 酷勤网 – 程序员的那点事!http://www.kuqin.com/) 试可以帮助识别和解决应用程序缺陷,在本文中,作者将使用大家常用的的开发工具Eclipse来调试Java应用程序.但这里 ...
- 早该知道的7个JavaScript技巧
我写JavaScript代码已经很久了,都记不起是什么年代开始的了.对于JavaScript这种语言近几年所取得的成就,我感到非常的兴奋:我很幸运也是这些成就的获益者.我写了不少的文章,章节,还有一本 ...
- 程序员必需知道的Mac OS使用技巧
macos sierra正式版发布了,于是我把我沉寂了一年没有用过了的macbook拿出来玩玩,顺便把一些常用技巧mark. 1.apple store下载软件无响应(经常出现的问题) 解决方法:更改 ...
- 早该知道的 7 个JavaScript 技巧[转]
简洁写法 对象的简写在过去,如果你想创建一个对象,你需要这样: var car = new Object(); car.colour = 'red'; car.wheels = 4; car.h ...
- 【转】早该知道的7个JavaScript技巧
我写JAVAScript代码已经很久了,都记不起是什么年代开始的了.对于JavaScript这种语言近几年所取得的成就,我感到非常的兴奋:我很幸运也是这些成就的获益者.我写了不少的文章,章节,还有一本 ...
- 您可能不知道的ASP.Net小技巧
<!-- 页码和简介 --> 1. 在提交页面之后,保持滚动条的位置 可以在page指令上加上MaintainScrollPositionOnPostback指令 <%@ Page ...
随机推荐
- PDO查询语句结果中文乱码
PDO::MYSQL_ATTR_INIT_COMMAND (整数)连接到MySQL服务器时执行的命令.重新连接时会自动重新执行.请注意,此常量只能driver_options 在构建新的数据库句柄时在 ...
- appium 版本更新后的方法变化更新收集 ---持续更新
在高版本的android手机(例如android 7.0 , 8.0等等),必须使用高版本的appium, 以及对应的selenium版本,那么很多的appium或者selenium方法会变得无法直接 ...
- grid布局
display: grid; //行 //每一行中有几块,每块所占的width的百分比(1) grid-template-columns: 70% 30%; //每个div的width 100px,自 ...
- mysql 悲观锁与乐观锁的理解
悲观锁与乐观锁是人们定义出来的概念,你可以理解为一种思想,是处理并发资源的常用手段. 不要把他们与mysql中提供的锁机制(表锁,行锁,排他锁,共享锁)混为一谈. 一.悲观锁 顾名思义,就是对于数据的 ...
- 十三、实现Comparable接口和new Comparator<T>(){ }排序的实现过程
参考:https://www.cnblogs.com/igoodful/p/9517784.html Collections有两种比较规则方式,第一种是使用自身的比较规则: 该类必须实现Compara ...
- Jenkins+Gradle+Docker打docker镜像包上传至s3
gradle打包跟maven打包的环境搭建有相似之处,可参考maven打包https://www.cnblogs.com/chenchen-tester/p/6408815.html 进入Jenkin ...
- JavaScript初见
警告alert() 确认confirm() 提问prompt() 空格 JavaScript-打开新窗口(window.open) open() 方法可以查找一个已经存在或者新建的浏览器窗口. 语法: ...
- 从 Basic Paxos 到 Multi Paxos 到 Raft
在朴素Paxos算法中, 各个节点经过 Prepare 和 Accept 阶段, 会达成一个值, 这个值一旦达成, 就不能被修改, 如下例子: 图示1 上面的操作几乎没有任何实用价值, 于是演变成下面 ...
- PowerDesigner code、name显示设置 及 同时显示办法
菜单->Tool->Model Options->Name Convention->右侧display中选择显示name还是code. 不支持同时显示,但可以选择显示code, ...
- C#事务提交
using (System.Transactions.TransactionScope transcope = new System.Transactions.TransactionScope()) ...