2019 年第 64 篇文章,总第 88 篇文章

本文大约 6400 字,阅读大约需要 17 分钟

原文链接:https://www.dataquest.io/blog/jupyter-notebook-tutorial/

Jupyter notebook 是一个很强大的交互式和展示数据科学项目的工具,它可以作为一个开发文档,包含代码、解释说明文字、代码运行结果、数学公式等等,功能非常强大,也是现在非常流行的工具。

本文会通过一个简单的数据分析例子来介绍 Jupyter notebook 的使用方法。这里的例子就是给定一个自 1955 年发布以来,一共 50 年时间的美国 500 家公司的数据,任务是分析这些公司的利润变化过程。

1. 安装

最简单的安装方式就是通过 Anaconda 进行安装,Anaconda 是使用最广泛的环境管理工具,并且它可以预先安装很多常用的第三方库,包括 numpy 、pandas 、matplotlib 等。

具体的 Anaconda 可以查看之前公众号发表过的一篇文章--Python 基础入门--简介和环境配置。

除了通过 Anaconda 安装,也可以直接采用 pip

pip install jupyter

2. 创建你的第一个 Notebook

这一部分将介绍如何运行和保存 notebooks,熟悉 Jupyter notebook 的结构和交互界面。这里将通过一个例子来熟悉一些核心的用法,更好的了解 Jupyter notebook 的使用。

运行 Jupyter

在 Windows,可以通过添加到开始菜单的快捷方式运行 Jupyter ,当然也可以通过在命令行输入命令 jupyter notebook 开始运行,然后会在默认浏览器中打开一个新的窗口,窗口内容如下:


当然上述还不是一个 notebook,它是 Notebook 的管理界面,用于管理当前文件夹的所有 Notebooks。

注意,这里仅仅展示 Jupyter 运行时候的所在文件夹内的文件和文件夹,也就是在命令行运行 jupyter notebook 时所在的文件夹,当然这个也可以改变,运行命令的时候可以指定文件夹位置,即输入:

jupyter notebook filepath

此外,这里在浏览器上的 URL 地址是类似 http://localhost:8888/tree,其中 localhost 是表示本地地址,然后 8888 是端口。

接下来就是创建一个新的 notebook,可以如下图所示,在管理界面的右上角位置,点击 New 菜单,这里就可以选择 Python 3 (或者其他的版本),然后就可以创建成功,并且是在新的窗口打开这个 notebook,在默认命名就是 Untitled.ipynb


ipynb 文件

每个 ipynb 文件都是通过 JSON 格式来描述 notebook 的内容,包括每个单元及其内容,都是通过 metadata 的格式展示。这里可以在打开 ipynb 文件后,菜单中选择 Edit->Edit Notebook Metadata ,进行编辑。

notebook 界面

现在开始介绍下 notebook 的界面信息,一个新的 notebook 界面如下图所示。


这里有两个术语需要知道--cells 和 kernels ,两个都是非常重要的术语:

  • kernel :表示计算引擎,用于执行 notebook 中的代码块

  • cell :单元块,用于展示文本或者是代码。

单元(Cells)

首先介绍的是 Cells ,一个 Cell 就是上图中绿色框部分,它是 notebook 的主要部分,通常有两种主要的 cell 类似:

  • code cell :包括需要执行的代码,以及其运行结果

  • Markdown cell :包含的是 Markdown 格式的文本并且其执行结果

下图展示了一个简单的例子,第一行 Jupyter 入门教程 这个就是一个 Markdown cell ,这里展示的是执行这个 cell 的结果,如果需要执行一个 cell ,可以点击 Run 按钮,或者快捷键 Ctrl + Enter 即可,然后下方两个都是 code cell ,第一个是导入第三方库,第二个则是打印一段话以及其运行结果。


可以注意到 code cell 的左侧会有一个标签 In [1] ,这里的数字表示该代码块运行的次序,即在该 notebook 中,如果没有执行,显示的是 In [ ] ,如果是该 notebook 第一个运行的代码块,则是 In [1] ,如果再次运行,则显示 In [2],依次类推,同个代码块多次执行,这个数字也是会改变的。而 In 是 Input 的缩写。如果代码块运行时间有点久,它会显示 In [*] ,表示当前代码块正在运行中。

对于 notebook,还可以直接展示变量的数值,或者是函数的返回值,不需要调用 print 函数,如下图所示,当然它只会打印当前单元的最后一行的内容。


还需要注意的一件事情就是,对于一个单元,如果正在编辑,其边界框显示的是绿色,而运行时候则显示蓝色。这里展示的就是两种模式,即绿色表示编辑模式,蓝色表示命令模式

快捷键

notebook 有很多快捷键,可以通过菜单中的 Help->Keyboard Shortcuts 查看,也可以直接用快捷键 Ctrl+Shift+P 查看。下面简单介绍一些快捷键:

  • 编辑模式和命令模式可以通过 Esc 和 Enter 进行转换,一般是按 Esc 进入命令模式,Enter 进入编辑模式

命令模式下:

  • 在 cell 之间上下浏览采用上下箭头,或者 Up 和 Down 键

  • A 表示在当前 cell 上方插入一个新的 cell ,而 B 则是下方插入新的cell

  • M 表示变为 Markdown cell ,而 Y 是表示变为 code cell

  • 连续按两次 D 是删除当前 cell

  • Z 是撤销操作

  • Shift 加上 Up 或者 Down 可以一次选择多个 cells ,接着采用 Shift + M 可以合并多个 cells

Markdown

Markdown 是一个轻量级的易于学习使用的标记语言,主要用于格式化文本文字。它的语法类似 HTML 语言,是一个非常有帮助的语言,可以用于添加注释说明或者添加图片。

可以尝试在 Jupyter notebook 中输入下面的文字,记住是在 Markdown cell中:

# This is a level 1 heading
## This is a level 2 heading
This is some plain text that forms a paragraph.
Add emphasis via **bold** and __bold__, or *italic* and _italic_.
Paragraphs must be separated by an empty line.
* Sometimes we want to include lists.
* Which can be indented.
1. Lists can also be numbered.
2. For ordered lists.
[It is possible to include hyperlinks](https://www.example.com)
Inline code uses single backticks: `foo()`, and code blocks use triple backticks:
```
bar()
```
Or can be indented by 4 spaces:
foo()
And finally, adding images is easy: ![Alt text](https://www.example.com/image.jpg)

得到的结果如下图所示:


如果想添加图片,有三种做法:

  • 使用网络上的图片,添加其网络链接 URL,比如上述例子就是这种做法,URL 是 https://www.example.com/image.jpg

  • 采用一个本地 URL,那么图片就只能使用在该 notebook 中,比如在同一个 git 仓库中

  • 菜单栏选择 “Edit->Insert Image",这种做法会将图片转换为字符串形式并存储在 .ipynb 文件中,这种做法会增加 ipynb 文件的大小

Markdown 的使用方法可以参考其发明者 John Gruber 的官方教程:

https://daringfireball.net/projects/markdown/syntax

Kernels

每个 notebook 都有一个 kernel。当执行一个单元内的代码的时候,就是采用 kernel 来运行代码,并将结果输出显示在单元内。同时 kernel 的状态会保留,并且不止局限在一个单元内,即一个单元内的变量或者导入的第三方库,也是可以在另一个单元内使用的,并不是相互独立的。

某种程度来说,notebook 可以看做是一个脚本文件,除了增加了更多输入方式,比如说明文字、图片等等。

这里同样用一个代码例子进行介绍 kernel 的这种特性,如下图所示,分别在两个单元内输入两段代码,第一个单元内时导入 numpy 并定义函数 square(),而第二个单元内就调用了这个函数 square() ,并成功运行输出结果。


大部分情况下都是自顶向下的运行每个单元的代码,但这并不绝对,实际上是可以重新回到任意一个单元,再次执行这段代码,因此每个单元左侧的 In [ ] 就非常有用,其数字就告诉了我们它是运行的第几个单元。

此外,我们还可以重新运行整个 kernel,这里介绍菜单 Kernel 中的几个选项:

  • Restart :重新开始 kernel,这会清空 notebook 中所有的变量定义

  • Restart & Clear Output: 和第一个选项相同,但还会将所有输出都清除

  • Restart & Run All: 重新开始,并且会自动从头开始运行所有的单元内的代码

通常如果 kernel 陷入某个单元的代码运行中,希望停止该代码的运行,则可以采用 Interupt 选项。

选择一个 kernel

在 Kernel 菜单中同样提供了一个更换 kernel 的选项,最开始创建一个 notebook 的时候,就是选择了一个 kernel ,当然这里能否选择其他的 kernel ,取决于是否有安装,比如 Python 的版本,当你同时安装了 python3.6 和 python2.7 ,那么就有这两个选择,除了 Python 语言,Juypter notebook 支持的 kernel 还包括其他超过一百种语言,比如 Java、C、R、Julia 等等。

3. 数据分析例子

现在就开始文章开始说的数据分析例子,即从一份公司财富数据中分析公司的利润变化情况。

命名 notebooks

首先,给 notebook 命名一个有意义的名字,比如 jupyter-notebook-tuorial,可以直接在 notebook 界面直接点击上方文件名,如果未命名,那就是 Untitle.ipynb ,当然也可以返回管理界面进行命名,如下所示,选择 notebook 后,上方会出现一行选项,包括:

  • Duplicate:复制

  • Shutdown:停止该 notebook 的 kernel

  • View:查看 notebook 内容

  • Edit :编辑其 metadata 内容

以及还有一个删除文件的选项。


注意,关闭 notebook 的界面并不会关掉 notebook 的 kernel,它会一直在后台运行,在管理界面看到 notebook 还是绿色状态,就表明其在运行,这需要选择 Shutdown 选项,或者命令行里关掉 Jupyter notebook 的命令。

准备工作

首先导入一些需要用的第三方库:

%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()

pandas 用于处理数据,Matplotlib 用于绘制图表,而 seaborn 可以让图表更加漂亮。通常也需要导入 Numpy ,不过在本例中我们将通过 pandas 来使用。此外,%matplotlib inline 这并不是 python 的命令,它是 Jupyter 中独有的魔法命令,它主要是让 Jupyter 可以捕获 Matplotlib 的图片,并在单元输出中渲染。

接着就是读取数据:

df = pd.read_csv('fortune500.csv')

保存和检查点(checkpoint)

在开始前,要记得定时保存文件,这可以直接采用快捷键 Ctrl + S 保存文件,它是通过一个命令--“保存和检查点”实现的,那么什么是检查点呢?

每次创建一个新的 notebook,同时也创建了一个 checkpoint 文件,它保存在一个隐藏的子文件夹 .ipynb_checkpoints 中,并且也是一个 .ipynb 文件。默认 Jupyter 会每隔 120 秒自动保存 notebook 的内容到 checkpoint 文件中,而当你手动保存的时候,也会更新 notebook 和 checkpoint 文件。这个文件可以在因为意外原因关闭 notebook 后恢复你未保存的内容,可以在菜单中 File->Revert to Checkpoint 中恢复。

对数据集的探索

现在开始处理我们的数据集,通过 pandas 读取后得到的是称为 DataFrame 的数据结构,首先就是先查看下数据集的内容,输入以下两行代码,分别表示输出数据的前五行,和最后五行的内容。

df.head()
df.tail()

输出内容如下所示:


通过查看,我们了解到每行就是一个公司在某一年的数据,然后总共有 5 列,分别表示年份、排名、公司名字、收入和利润。

接着,为了方便,可以对列重命名:

df.columns = ['year', 'rank', 'company', 'revenue', 'profit']

然后,还可以查看数据量,如下所示:

len(df)

如下图所示,总共有 25500 条数据,刚好就是 500 家公司从 1955 到 2005 的数据量。


接着,我们再查看数据集是否和我们希望导入的一样,一个简单的检查方法就是查看数据类型是否正确:


这里可以发现 profit 数据类型居然是 object 而不是和收入 revenue 一样的float64 类型,这表示其中可能包含一些非数字的数值,因此我们需要检查一下:


输出结果表明确实存在非整数的数值,而是是 N.A,然后我们需要确定是否包含其他类型的数值:


输出结果表示只有 N.A ,那么该如何处理这种缺失情况呢,这首先取决有多少行数据缺失了 profit :


369 条数据缺失,相比于总共 25500 条数据,仅占据 1.5% 左右。如果缺失的数据随着年份的变化符合正态分布,那么最简单的方法就是直接删除这部分数据集,代码如下所示


从结果看,缺失数据最多的一年也就是 25 条也不到,相比每年 500 条数据,最多占据 4%,并且只有在 90 年代的数据缺失会超过 20 条,其余年份基本在 10 条以下,因此可以接受直接删除缺失值的数据,代码如下:


删除数据后,profit 就是 float64 类型了。

简单的数据探索完成了,接下来进行图表的绘制。

采用 matplotlib 进行绘制图表

首先绘制随着年份变化的平均利润表,同时也会绘制收入随年份的变化情况,如下图所示:


结果看起来有点类似指数式增长,但出现两次巨大的下降情况,这其实和当时发生的事件有关系,接下来可以看看收入的变化情况,如下图所示:


从收入看,变化并没有像利润一样出现两次波动。

参考 https://stackoverflow.com/a/47582329/604687,我们添加了利润和收入的标准差情况,用于反馈同一年不同公司的收入或者利润差距,如下图所示:


结果表明了不同公司的差距还是很大的,存在有收入几十亿,也有亏损几十亿的公司。

其实还有很多问题可以深入探讨,但目前给出的例子已经足够入门 Jupyter notebook,这部分例子展示了如何分析探索数据,绘制数据的图表。


参考

  • Markdown:https://www.markdownguide.org/getting-started

  • https://stackoverflow.com/a/47582329/604687


最后本文的代码和教程可以公众号后台回复“Jupyter”获取链接地址,或者点击阅读原文。

欢迎关注我的微信公众号--算法猿的成长,或者扫描下方的二维码,大家一起交流,学习和进步!


如果觉得不错,在看、转发就是对小编的一个支持!

快速入门 Jupyter notebook相关推荐

  1. 快速安装Jupyter Notebook主题皮肤并设置教程

    Jupyter Notebook的默认背景主题是白色,字体还不符合自己的眼光,看着实在费眼-也不够酷炫.我就不多赘述了,现在就来给我们的Jupyter notebook画一下妆,让它变得更加炫酷吧. ...

  2. Jupyter Notebook 快速入门简易教程

    Jupyter Notebook 快速入门 Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言.在本文中,我们将介绍 Ju ...

  3. 60分钟快速入门PyTorch

    点击上方"算法猿的成长",关注公众号,选择加"星标"或"置顶" 总第 136 篇文章,本文大约 26000 字,阅读大约需要 60 分钟 P ...

  4. Jupyter notebook 入门教程

    原文链接:https://www.dataquest.io/blog/jupyter-notebook-tutorial/ Jupyter notebook 是一个很强大的交互式和展示数据科学项目的工 ...

  5. Python,Jupyter Notebook,IPython快速安装教程

    Python,IPython,Jupyter Notebook快速安装教程 下一篇:IPython.Notebook.qtconsole使用教程 下一篇Python数据科学安装Numby,pandas ...

  6. 在jupyter notebook中同时安装python2和python3

    环境 win10 已安装anaconda3 How 1.安装python27> conda create -n py27 python=2.72. conda install --prefix= ...

  7. python ipython notebook或者 jupyter notebook 的安装

    IPython Notebook使用浏览器作为界面,向后台的IPython服务器发送请求,并显示结果.在浏览器的界面中使用单元(Cell)保存各种信息.Cell有多种类型,经常使用的有表示格式化文本的 ...

  8. PEP8 python规范神器和jupyter notebook主题更改--Jupyter Notebook 快速入门

    PEP8 python规范神器和jupyter notebook主题更改--Jupyter Notebook 快速入门 原文: https://www.cnblogs.com/xxtalhr/p/10 ...

  9. python的jupyter的使用教程-Jupyter notebook快速入门教程

    作者:xiaoyu 微信公众号:Python数据科学 知乎:python数据分析师 本篇将给大家介绍一款超级好用的工具:Jupyter notebook. 为什么要介绍这款工具呢? 如果你想使用Pyt ...

最新文章

  1. 台式计算机系统重新安装软件,有人教我重装电脑程序的吗,谢谢了
  2. J2EE项目工具集(转)
  3. c语言对n个数选择排序_选择排序法 -- C语言
  4. 二十四、爬取古诗网中的100首古诗文
  5. 树莓派Raspberry命令行配置无线网络连接
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的体育竞赛比赛赛事管理系统
  7. RxJava学习(四利用RxJava打造自己的RxBus)
  8. guava 集合上 三
  9. C++循环控制经典例题*
  10. 动软代码生成器 模板
  11. 72张三国历史演变地图
  12. onenote 0xE000078D解决
  13. ffmpeg利用crop滤镜进行视频裁剪
  14. E45: ‘readonly‘ option is set (add to override) 解决方法
  15. 成为虚无鸿蒙系统掌控者,飞剑问道:烟雨飞剑破开鸿蒙空间,秦云成第四位鸿蒙掌控者!...
  16. 国外14部经典励志电影推荐
  17. 单元节点和积分点有什么区别
  18. jquery服务器文件保存到本地,jQuery本地存储
  19. java计算机毕业设计基于springboo个人家庭理财记账管理系统
  20. JFinal解决IE浏览器下载问题

热门文章

  1. 计算机没有搜索筛选功能,EXCEL中筛选工具怎么没有搜索功能
  2. pta通讯录排序用python实现,python实现将android手机通讯录vcf文件转化为csv
  3. mxm智能教育机器人无法智能对话_零代码使用腾讯TBP打造智能对话机器人
  4. win7打开计算机死机,怎么样解决Win7系统运行程序引起的死机问题
  5. Winform可读取html语言,C# Winform 用WebBrowser实现 Html 编辑功能
  6. Linux C学习---递归函数
  7. vc++6.0 模拟鼠标点击代码 木马程序的编写 VC 模拟键盘输入
  8. 怎么把OCX打包成cab文件
  9. 显示当前行号、文件名和函数名(二)
  10. 前端学习(3290):react hook state-hook传入对象