对于机器学习和数据科学的入门者来说,“有什么好用的IDE/环境/工具?”是他们提出的最常见的问题之一。这确实也是个不怎么好回答的问题,因为它没有具体选项——从面向特定语言的IDE(如R Studio、PyCharm)到Sublime Text、Atom等编辑器——它们都很优秀,所以如果你有选择恐惧症,你最好读读论智的这篇文章,从Jupyter Notebook开始学起。
如果每个数据科学家都应该使用或必须使用一种工具,毫无疑问,它就是Jupyter Notebook(曾用名iPython Notebook)。Jupyter Notebook是一个交互式笔记本,它功能强大,支持40多种编程语言,可共享,并提供在同一环境中构建可视化应用的服务。
数据科学家可以在上面创建和共享自己的文档,从实现代码到全面报告,Jupyter Notebook大大简化了开发者的工作流程,帮助他们实现更高的生产力和更简单的多人协作。也正是因为如此,它一直以来都是数据科学家们最喜欢的工具之一。
本文将全面介绍笔记本的安装、操作方法,并深入探讨它的特性和优势。当你读完全文后,我们希望你能找到用Jupyter Notebook帮助自己实现机器学习项目的灵感。
1. 什么是Jupyter Notebook?
Jupyter Notebook是一个开源的Web应用程序,旨在方便开发者创建和共享代码文档。
它提供了一个环境,用户可以在里面写代码、运行代码、查看结果,并在其中可视化数据。鉴于这些优点,Jupyter Notebook成了数据科学家眼里的一款人见人爱的工具,它能帮助他们便捷地执行各种端到端任务,如数据清洗、统计建模、构建/训练机器学习模型等。
而对于初学者,Jupyter Notebook也独具魅力。它的一个特色是允许把代码写入独立的cell中,然后单独执行。这样做意味着用户可以在测试项目时单独测试特定代码块,无需从头开始执行代码。虽然其他的IDE环境(如RStudio)也提供了这种功能,但就个人使用情况来看,Jupyter Notebook的单元结构是设计的最好的。
这个笔记本的优势还体现在灵活性和交互性上。Jupyter Notebook支持的编程语言数量高达40余种,除了最基础的Python,它还允许用户在上面运行R语言和SQL等语言。由于它比IDE平台更具交互性,用户也更乐于在各种教程中用它展示代码。
2. 如何安装Jupyter Notebook?
Jupyter Notebook原来也叫iPython Notebook,顾名思义,它和Python关系紧密。如果要在PC上安装笔记本,首先你要确保自己已经安装了Python(2.7/3.3或更高),这是必备条件。
Anaconda
官方在文档中强烈建议新用户用Anaconda打包安装Python和Anaconda——所谓懒人方法,小白必备。其实除了提到的两个工具,Anaconda还包含数据科学和机器学习中经常需要用到的各种软件包,只需下载、解压、安装,所有工具就都一步到位了。
下载地址:https://jupyter.readthedocs.io/en/latest/install.html
pip
如果你很欣赏自己,或者因为某些因素就是不想用Anaconda,你也可以用pip。当然首先,你得确保自己的机器上有pip的最新版本。
#Linux和OSX
pip install -U pip setuptools
#Windows
python -m pip install -U pip setuptools
然后,安装Jupyter Notebook:
#Python2用户看这里
pip install jupyter
#Python3用户不要跑
pip3 install jupyter
如果还是有疑问,请看官方文档(英)、官方文档翻译(中)。
3. 入门
安装完成后,如果要运行Jupyter Notebook,你只需在控制台输入以下命令:
jupyter notebook
你会看到笔记本打开了你的默认浏览器,网址为http:// localhost:8888/tree。
一般情况下,当你输入命令行后,控制台会出现一行“The Jupyter Notebook is running at……”,如果浏览器因为某些原因无法打开,你就需要复制这个URL,手动打开相应网址。
当笔记本打开后,它的顶部有Files、Running和Clusters三个选项。其中Files中列出了所有文件,Running显示了你已经打开的终端和笔记本,Clusters则是IPython parallel提供的。
如果你想新建一个笔记本,单击面板右侧的“New”,它会跳出4个选项:
Python 3
Text File
Folder
Terminal
选择Text File后,你会得到一个空白的页面。它相当于一个文本编辑器(类似于Ubuntu上的应用程序),你可以在上面输入任何字母、单词和数字,所以选择好编程语言后,你是可以在上面写脚本的。此外,它还提供查找和替换文件中的单词的功能。
选择Folder后,你其实是在编辑文件夹列表。你可以创建一个新文件夹,把所需文档放进里面,或者修改它的名称、直接把它删除。
而Terminal的工作方式和Mac、Linux计算机上的Terminal一样,都是在Web浏览器中创建终端支持。只需在终端输入Python,一个Python脚本就写好了。
由于本文重点介绍的是笔记本,下面我们会重点展示新建“Python 3”后的结果:
导入最常见的Python库来启动笔记本,如pandas和numpy。在代码上方的菜单中,那些图标依次表示添加、编辑、剪切、向上移动cell、向下移动cell、运行代码、停止运行和撤销。
这个下拉的列表提供了四个选项:
Code:这个不言自明,就是你写代码的地方;
Markdown:非常常见的轻量级标记语言,用来为代码添加注释和结论;
Raw NBConvert:一个命令行工具,可以把你的笔记本转换成另一种格式,如HTML;
Heading:添加标题,使你的文档看起来更干净整洁,它现在已经变成Markdown里的一个语法,用两个#表示。
4. Jupyter Notebook的魔术命令
作为iPython的继承者,开发人员已经在Jupyter Notebook中加入预定义的魔术命令(magic function)。这是一种增加便捷性和互动性的工具,如果要查看命令列表,你可以输入(注:通常不需要“%”):
%lsmagic
当看到那一串函数列表时,也许你能从中认出几张老面孔,如%clear、%autosave、%debug和%mkdir。只要你以前写过代码,这些函数就几乎是不可避免的。
在Jupyter Notebook中,魔术命令有两种运行方式,一是Line-wise,而是Cell-wise。顾名思义,Line-wise就是当你想执行一个命令行的时候需要用到的,而Cell-wise面向的就不单单是一行了,它作用的是整个cell的代码块。
为了区分两种运行方式,如果是Line-wise,所有命令必须以%字符打头;如果是Cell-wise,则用%%。
Line-wise:
%time a = range(10)
Cell-wise:
%%timeit a = range (10)
min(a)
以上只是两个最简单的示例,你可以试着自己运行这些命令,看看其中有什么区别。
5. 不仅限于Python
之前也提到了,Jupyter Notebook的成功离不开它的灵活性,虽然Python在数据科学和机器学习中都占局主导地位,但对于数据分析任务,其他语言也有各种各样的特色和优势,比如R语言的'ggplot2'软件包就非常好用。在这一点上,Jupyter Notebook的态度是开放的。
如果想在Jupyter Notebook中启用R,你需要先去GitHub上下载'IRKernel'(R的专用kernel),然后按以下8个步骤依次执行(附图解地址):
步骤一:用Anaconda安装Jupyter Notebook;
步骤二:完成下载后,打开Anaconda命令提示符;
步骤三:输入ipython notebook新建ipython笔记本
步骤四:用conda update ipython-notebook这个命令行更新笔记本;
步骤五:输入conda install -c r ipython-notebook r-irkernel安装IRkernel;
步骤六:用R.exe打开R;
步骤七:输入install.packages(c('rzmq','repr','IRkernel','IRdisplay'), repos = 'http://irkernel.github.io/', type = 'source')安装必要软件包;
步骤八:输入IRkernel::installspec()后再输入quit(),完成操作。
如果是Julia用户,你也可以在Jupyter Notebook中“畅所欲言”。考虑到篇幅因素,有需要的读者请前往www.analyticsvidhya.com/blog/2017/10/comprehensive-tutorial-learn-data-science-julia-from-scratch/查看图文攻略。
和R语言一样,JavaScript用户也需要去Github先下载‘IJavascript’ kernel:github.com/n-riesco/ijavascript。文档里已经明确写出了安装kernel所需的步骤,但要注意的是,记得先装Node.js和npm,这是大前提!
6. Jupyter Notebook的交互式控制面板
在添加小部件前,你需要先导入小部件包:
from ipywidgets import widgets
小部件的基本类型是典型的基于输入和按钮的文本输入。你可以参考下面这幅动图,了解交互式小部件的外观: