【学习笔记】第三章 python3核心技术与实践--Jupyter Notebook
可能你已经知道,Python 在 14 年后的“崛起”,得益于机器学习和数学统计应用的兴起。那为什么 Python 如此适合数学统计和机器学习呢?作为“老司机”的我可以肯定地告诉你,Jupyter Notebook (https://jupyter.org/)功不可没。
毫不夸张地说,根据我对 Facebook 等硅谷一线大厂的了解,一个 Python 工程师如果现在还不会使用 Jupyter Notebook 的话,可能就真的太落伍了。
磨刀不误砍柴工,高效的工具让我们的编程事半功倍。这一节课,我就来带你学习一下 Jupyter Notebook,为后面的 Python 学习打下必备基础。
什么是 Jupyter Notebook?
说了这么多,到底什么是 Jupyter Notebook?按照 Jupyter 创始人 Fernando Pérez 的说法,他最初的梦想是做一个综合 Ju (Julia)、Py (Python)和 R 三种科学运算语言的计算工具平台,所以将其命名为 Ju-Py-te-R。发展到现在,Jupyter 已经成为一个几乎支持所有语言,能够把软件代码、计算输出、解释文档、多媒体资源整合在一起的多功能科学运算平台。
英文里说一图胜千言(A picture is worth a thousand words)。看下面这个图片,你就明白什么是 Jupyter Notebook 了。
你在一个框框中直接输入代码,运行,它立马就在下面给你输出。怎么样,是不是很酷?你可能会纳闷儿,这样一个看起来“华而不实”的玩意儿,真的就成了 Python 社区的颠覆者吗?说实话放在几年前我也是不信的。所以 Jupyter Notebook 的影响究竟有多大呢?
Jupyter Notebook 的影响力
我们衡量一个技术的影响力,或者说要用自己的技术去影响世界时,必定绕不开这个技术对教育界的影响力。
就拿微软的 Word 文本处理系统来说吧。从纯技术角度来讲,Word 的单机设计理念早已落后时代 20 年。但以 Google Doc 为代表的在线文档系统,却并没有像想象中那样,实现对 Word 的降维打击。
直观的原因是用户习惯,使用 Word 修改文档,那就来回发几十遍呗,用着也还可以。但更深刻来想,之所以养成这样的用户习惯,是因为我们的教育根源。教育系统从娃娃抓起,用小学中学大学十几年的时间,训练了用户 Word 的使用习惯。到工作中,老员工又会带着新员工继续使用 Word,如此行程技术影响力生生不息的正向反馈。
回到我们今天的主题,我们来看 Jupyter Notebook。从 2017 年开始,已有大量的北美顶尖计算机课程,开始完全使用 Jupyter Notebook 作为工具。比如李飞飞的 CS231N《计算机视觉与神经网络》课程,在 16 年时作业还是命令行 Python 的形式,但是 17 年的作业就全部在 Jupyter Notebook 上完成了。再如 UC Berkeley 的《数据科学基础》课程,从 17 年起,所有作业也全部用 Jupyter Notebook 完成。
而 Jupyter Notebook 在工业界的影响力更甚。在 Facebook,虽然大规模的后台开发仍然借助于功能齐全的 IDE,但是几乎所有的中小型程序,比如内部的一些线下分析软件,机器学习模块的训练都是借助于 Jupyter Notebook 完成的。据我了解,在别的硅谷一线大厂,例如 Google 的 AI Research 部门 Google Brain,也是清一色地全部使用 Jupyter Notebook,虽然用的是他们自己的改进定制版,叫 Google Colab。
看到这里,相信你已经认可了 Jupter Notebook 现如今的江湖地位。不过,说到技术的选择,有些人会说,这个技术流行,我们应该用;有些人认为,阿里已经在用这个技术了,这就是未来,我们也要用等等。不得不说,这些都是片面的认知。不管是阿里还是 Facebook 用的技术,其实不一定适用你的应用场景。
我经常会鼓励技术同行,对于技术选择要有独立的思考,不要人云亦云。最起码你要去思考,Facebook 为什么选择这个技术?这个技术解决了哪些问题?Facebook 为什么不选择别的技术?有哪些局限?单从选择结果而言,Facebook 选择的技术很可能是因为它有几百个产品线,几万个工程师。而同样的技术,在一个十人的团队里,反而成了拖累。
在这里,我不想忽悠你任何技术,我想教会你的是辩证分析技术的思考方法。接下来,我们就来看看,Jupyter 究竟解决了哪些别人没有解决的问题。
Jupyter 的优点
1、整合所有的资源
在真正的软件开发中,上下文切换占用了大量的时间。什么意思呢?举个例子你就很好理解了,比如你需要切换窗口去看一些文档,再切换窗口去用另一个工具画图等等。这些都是影响生产效率的因素。
正如我前面提到的,Jupyter 通过把所有和软件编写有关的资源全部放在一个地方,解决了这个问题。当你打开一个 Jupyter Notebook 时,就已经可以看到相应的文档、图表、视频和相应的代码。这样,你就不需要切换窗口去找资料,只要看一个文件,就可以获得项目的所有信息。
2、交互性编程体验
在机器学习和数学统计领域,Python 编程的实验性特别强,经常出现的情况是,一小块代码需要重写 100 遍,比如为了尝试 100 种不同的方法,但别的代码都不想动。这一点和传统的 Python 开发有很大不同。如果是在传统的 Python 开发流程中,每一次实验都要把所有代码重新跑一遍,会花费开发者很多时间。特别是在像 Facebook 这样千万行级别的代码库里,即使整个公司的底层架构已经足够优化,真要重新跑一遍,也需要几分钟的时间。
而 Jupyter Notebook 引进了 Cell 的概念,每次实验可以只跑一小个 Cell 里的代码;并且,所见即所得,在代码下面立刻就可以看到结果。这样强的互动性,让 Python 研究员可以专注于问题本身,不被繁杂的工具链所累,不用在命令行直接切换,所有科研工作都能在 Jupyter 上完成。
3、零成本重现结果
同样在机器学习和数学统计领域,Python 的使用是非常短平快的。常见的场景是,我在论文里看到别人的方法效果很好,可是当我去重现时,却发现需要 pip 重新安装一堆依赖软件。这些准备工作可能会消耗你 80% 的时间,却并不是真正的生产力。
Jupyter Notebook 如何解决这个问题呢?
其实最初的 Jupyter Notebook 也是挺麻烦的,需要你先在本机上安装 IPython 引擎及其各种依赖软件。不过现在的技术趋势,则是彻底云端化了,例如 Jupyter 官方的 Binder 平台(介绍文档:https://mybinder.readthedocs.io/en/latest/index.html)和 Google 提供的 Google Colab 环境(介绍:https://colab.research.google.com/notebooks/welcome.ipynb)。它们让 Jupyter Notebook 变得和石墨文档、Google Doc 在线文档一样,在浏览器点开链接就能运行。
所以,现在当你用 Binder 打开一份 GitHub 上的 Jupyter Notebook 时,你不需要安装任何软件,直接在浏览器打开一份代码,就能在云端运行。
4、Jupyter Notebook 初体验
学习技术的最好方法就是用技术。不过,在今天的篇幅里,我不可能带你完全学会 Jupyter Notebook 的所有技巧。我想先带你直接感受一下,使用 Jupyter Notebook 的工作体验。
比如这样一个GitHub 文件。在Binder中,你只要输入其对应的 GitHub Repository 的名字或者 URL,就能在云端打开整个 Repository,选择你需要的notebook,你就能看到下图这个界面。
每一个 Jupyter 的运行单元都包含了 In、Out 的 Cell。如图所示,你可以使用 Run 按钮,运行单独的一个 Cell。当然,你也可以在此基础上加以修改,或者新建一个 notebook,写成自己想要的程序。赶紧打开链接试一试吧!
另外,我还推荐下面这些 Jupyter Notebook,作为你实践的第一站。
第一个是 Jupyter 官方:https://mybinder.org/v2/gh/binder-examples/matplotlib-versions/mpl-v2.0/?filepath=matplotlib_versions_demo.ipynb
第二个是 Google Research 提供的 Colab 环境,尤其适合机器学习的实践应用:https://colab.research.google.com/notebooks/basic_features_overview.ipynb
如果你想在本地或者远程的机器上安装 Jupyter Notebook,可以参考下面的两个文档。
安装:https://jupyter.org/install.html
运行:https://jupyter.readthedocs.io/en/latest/running.html#running
总结
这节课,介绍了 Jupyter Notebook,并告诉你它为什么日趋成为 Python 社区的必学技术。这主要是因为它的三大特点:整合所有的资源、交互性编程体验和零成本重现结果。但还是那句话,学习技术必须动手实操。这节课后,希望你能自己动手试一试 Jupyter Notebook,后面我们的一些课程代码,我也会用 Jupyter Notebook 的形式分享给你。
【学习笔记】第三章 python3核心技术与实践--Jupyter Notebook的更多相关文章
- 【学习笔记】第八章 python3核心技术与实践--条件与循环
[第七章]思考题答案,仅供参考:
- 《DOM Scripting》学习笔记-——第三章 DOM
<Dom Scripting>学习笔记 第三章 DOM 本章内容: 1.节点的概念. 2.四个DOM方法:getElementById, getElementsByTagName, get ...
- The Road to learn React书籍学习笔记(第三章)
The Road to learn React书籍学习笔记(第三章) 代码详情 声明周期方法 通过之前的学习,可以了解到ES6 类组件中的生命周期方法 constructor() 和 render() ...
- [HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设
[HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设 敲黑板!! <q>元素添加短引用,<blockquote>添加长引用 在段落里添加引用就使用< ...
- JVM学习笔记-第三章-垃圾收集器与内存分配策略
JVM学习笔记-第三章-垃圾收集器与内存分配策略 tips:对于3.4之前的章节可见博客:https://blog.csdn.net/sanhewuyang/article/details/95380 ...
- python学习笔记——第三章 串
第三章 字符串学习 1.字符串不灵活, 它不能被分割符值 >>> format = "hello, %s. %s enough for ya?" >> ...
- JavaScript高级编程学习笔记(第三章之一)
继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感: ...
- [HeadFirst-JSPServlet学习笔记][第三章:实战MVC]
第三章 实战MVC J2EE如何集成一切 Java2企业版(Java 2 Enterprise Editon,J2EE)是一种超级规范.规定了servlets2.4,JSP2.0,EJB2.1(Ent ...
- c#高级编程第七版 学习笔记 第三章 对象和类型
第三章 对象和类型 本章的内容: 类和结构的区别 类成员 按值和按引用传送参数 方法重载 构造函数和静态构造函数 只读字段 部分类 静态类 Object类,其他类型都从该类派生而来 3.1 类和结构 ...
随机推荐
- javaScript基础-02 javascript表达式和运算符
一.原始表达式 原始表达式是表达式的最小单位,不再包含其他表达式,包含常量,直接量,关键字和变量. 二.对象和数组的初始化表达式 对象和数组初始化表达式实际上是一个新创建的对象和数组. 三.函数表达式 ...
- 记一次 Windows MySQL 恢复
0x00 事件 因为本地的服务器硬件出现故障,导致一台 Windows 系统的开发环境挂了,且无法短时间内恢复状态. 应急方案是使用了云上的系统重建了开发环境. 开发人员说需要挂了的那台 Window ...
- 8.7 day28 网络编程 socket套接字 半连接池 通信循环 粘包问题 struct模块
前置知识:不同计算机程序之间的数据传输 应用程序中的数据都是从程序所在计算机内存中读取的. 内存中的数据是从硬盘读取或者网络传输过来的 不同计算机程序数据传输需要经过七层协议物理连接介质才能到达目标程 ...
- Kafka之Producer
通过https://www.cnblogs.com/tree1123/p/11243668.html 已经对consumer有了一定的了解.producer比consumer要简单一些. 一.旧版本p ...
- ThreadLocalSingleton.h——base
#ifndef MUDUO_BASE_THREADLOCALSINGLETON_H #define MUDUO_BASE_THREADLOCALSINGLETON_H #include <boo ...
- 蓝桥杯c语言基础题
问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n ...
- Linux下sudo配置
转载请注明: 凌云物网智科嵌入式实验室: http://iot-yun.com/ 郭文学<guowenxue@gmail.com> [guowenxue@centos6_studi ...
- Leetcode之二分法专题-162. 寻找峰值(Find Peak Element)
Leetcode之二分法专题-162. 寻找峰值(Find Peak Element) 峰值元素是指其值大于左右相邻值的元素. 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1] ...
- emlog博客的安装教程
简介 emlog 是一款基于PHP和MySQL的功能强大的博客及CMS建站系统.致力于为您提供快速.稳定,且在使用上又极其简单.舒适的内容创作及站点搭建服务. 安装步骤 1.将src文件夹下的所有文件 ...
- xib上的控件属性为什么要使用weak
常规中,从xib拖出一个控件时,系统会自动生成一段代码,如下: 从这个图片中,可以看到控件的属性都是用的weak,这是为什么呢? 首先,如果把weak修改成strong其实也是可以的,但是会出现一个问 ...