前两天我们为大家总结了一下AI在2018年的发展以及对2019年AI应用的展望,今天我们便将回归到技术博客的本质,为大家讲讲为什么我对Jupyter Notebook如此推崇,以及为什么Jupyter Notebook与机器学习/数据分析是完美的搭配组合。
在讲为什么之前,先来介绍一下什么是Jupyter Notebook(以下简称Jupyter)。简单来说,它是一种模块化的Python编辑器(现在也支持R等多种语言),即在Jupyter中,你可以把大段的Python代码碎片化处理,分开每一段来运行。在软件开发中,Jupyter可能显得并没有那么好用,这个模块化的功能反而会破坏掉程序的整体性;但是当你在做数据处理、分析、建模、观察结果等的时候,Jupyter模块化的功能不仅会为你提供更好地视觉体验,更能大大缩小运行代码及调试代码的时间,同时还会让你整个处理和建模的过程变得异常清晰,接下来我将为大家一一详细讲述Jupyter的这些优点。
Jupyter Notebook将Python的交互式特点发挥到了极致
熟悉Python的同学一定对Python的交互式功能感触颇深。当工作后有一次和一个做嵌入式好友聊起Python时,同学表示他被Python的易读性和交互性所震惊了。做嵌入式用的C和C++每次都要经过编译,而且每一行的代码没有办法单独运行。与之不同的是,Python的每一行都像是人类交流所用的文字一样,简单易懂且有交互性,所谓交互性,就是有问有答,你输入一句,它便返回一句的结果。但在一般的IDE中(如PyCharm),Python的这一交互功能被极大地限制,通常我们会将程序整段编写之后一起运行。而在Jupyter当中,我们可以每写几行或者每完成一个小的模块便运行一次。也许对于软件工程师们来说,这个功能并没有多大的吸引力;但是对身为机器学习工程师的我们来说,这个功能可以说是我们的大救星。
熟悉机器学习和数据分析的朋友一定知道,分析和建模是非常碎片化的工作,而每一块的碎片又有着非常强的独立性,甚至可以说除了数据本身之外,每一块的代码之间并没有很强的关联性。数据分析和处理的过程往往是一个不断试验的过程,我们需要一次又一次的改变预处理的方式、尝试不同的特征工程处理、一遍又一遍的调整着模型参数等等等等。每一部分的工作都需要反复试验反复修改,而下一模块需要用到的只不过是上一模块输出的数据。通过Jupyter,我们可以最快的得知自己做出的调整是好还是坏,并尽快进入到下一次的试验当中。
以下是Jupyter Notebook与其他IDE输出结果的对比:
说到Jupyter Notebook,就不得不提到Anaconda。Anaconda是一款便捷的环境管理工具,利用Anaconda可以轻松创建虚拟环境,快速下载安装Python中的各种函数库。Anaconda中集成了1400数据科学/机器学习的函数库,目前这些库适配于Python 3.6,Python 3.7,以及Python 2.7三个版本。Anaconda让机器学习在Jupyter中更容易实现,也更容易去观测。
以下是部分Anaconda中的函数库:
Jupyter Notebook更利于汇报和教学
Jupyter在工作汇报和教学方面也是非常的优秀。由于Jupyter本身的模块化和内容的清晰化,使得其天生具有如PPT一般的展示工作成果的功能。
如上图所示,由于Jupyter中可以将输出结果嵌套在Notebook中,并且支持Markdown语句的操作,这样使得你可以在Jupyter中输入任何你需要展示的内容,并且这些内容都会以一种有组织有层次的样子排列出来。
而当Jupyter被应用于教学时,老师可以利用这个特点设置相应的题目以及部分的讲解内容,而学生则负责填满老师所留的空白,以达到老师作业的要求。目前Jupyter已经被各大慕课(MOOC)平台广泛应用。