电子说
对于机器学习和数据科学的入门者来说,“有什么好用的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
小部件的基本类型是典型的基于输入和按钮的文本输入。你可以参考下面这幅动图,了解交互式小部件的外观:
来源:Dominodatalab
7. 快捷键
既然Jupyter Notebook的主打优势是便捷,那它自然少不了方便操作的快捷键。事实上,当你想运行任意代码块时,只需按下Ctrl + Enter就可以了。
下面是本文挑选的一些实用快捷键,有需要的读者可以视情况逐个阅读+尝试,如果今后你会经常用到Jupyter Notebook,那不会这些组合键的你就几乎已经是条咸鱼了。
Jupyter Notebook提供了两种不同的键盘输入模式——Command和Edit。其中Command模式是将键盘和计算机命令绑定在一起,这时单元框线是灰色的(左侧蓝色粗线)。Edit模式允许你将文本(或代码)键入活动单元,这时单元框线是绿色的。
用Esc和Enter分别在Command和Edit模式之间跳转。
更多快捷键介绍(中文):blog.csdn.net/lawme/article/details/51034543
8. 有用的扩展
添加扩展是提高Jupyter Notebook效率的一种非常有效的方式,那么安装和使用扩展哪家强?这里我们推荐Nbextensions。
先是安装(pip):
pip install jupyter_contrib_nbextensions
安装关联的JavaScript和CSS文件:
jupyter contrib nbextension install --user
完成此操作后,你会在Jupyter Notebook主页顶部看到一个'Nbextensions'选项卡。
如果要启用一个扩展,只需点击来激活。下面是4个比较有用的扩展。
Code prettify:它可以让你的代码更美观。
Printview:生成预览,新增的按钮叫jupyter nbconvert。
Scratchpad:生成一个实验环境(副本)跑代码,不会对笔记本代码造成影响。
Table of Contents (2):抓取所有标题,并显示在浮动窗口中。
此外,小编也曾经写过一篇《Top 5:五大最实用的Jupyter Notebook扩展插件》,介绍了另外5种好用的扩展,有兴趣的读者可以一起看一看。
9. 保存和共享你的笔记本
这是Jupyter Notebook中最重要和最棒的功能之一。有过写博客经历的读者也许知道这种痛,当你一腔热血想把自己的成果分享给别人时,可能代码格式还没转完你就放弃了。大多数笔记本都采用json格式,它不是很适合共享,也不利于在博客中发布不同的单元块。
但Jupyter Notebook不一样,点击进入“file”后,你会看到一个“Download as”:
看到这7个选项后你就很开心了,其中最常用的是.ipynb文件。你也可以用nbconvert选项手动将笔记本转换为不同的格式,如HTML和PDF。
此外,你还可以使用jupyterhub,它允许你在其服务器上托管笔记本并与多个用户共享。许多顶尖的研究项目都把这作为协作方式。
10. JupyterLab
JupyterLab是今年2月推出的一个工具,从某种程度上来说,它是Jupyter Notebook的一个发展——拥有同样的组件,但允许更灵活和更强大的项目工作方式。换句话说,它的用户体验更好。
JupyterLab的特色是允许用户在一个窗口内安排笔记本、终端、文本文件和输出的工作区。你可以把窗口拖到你想要的位置,也可以通过实时预览编辑常用文件格式,如Markdown、CSV和JSON,实时查看项目进展。
11. 实践和技巧
虽然自己钻研很有趣,但无论是学习还是工作,大部分时候你是在一个团队中工作的。在这种情况下,你要规范自己的操作和实践,确保笔记本中的代码和注释都是正确的,方便其他人阅读、理解。以下是一些实践指标,仅供参考:
对每个程序员来说最重要的事:要好好注释!
确保你保存了代码文档。
形成一套命名体系,并在实践中落到实处,方便自己和他人理解。
在刚开始的时候导入所需的库,并在旁边注释导入目的。
确保代码行距合适,你也不想别人因为看不懂你的循环和函数疯掉,对吧?
当代码越来越多时,隐藏不重要代码,确保干净整洁。
此外,当你需要把成果演示给别人看时(是的你又要做该死的PPT了),你是可以偷懒直接在Jupyter Notebook里做演示的。
找到“View”,点开其中的“Cell Toolbar”,然后是“Slideshow”。每个代码块都在右侧显示一个名为“Slide Type”的下拉选项:
具体效果如何,请自己尝试。
结语
写到这里,本文也就已经差不多结束了,虽然在一篇文章内塞进这么多内容可能会影响阅读体验,但我们还是真诚地希望新手能从中找到一些有用的东西。
全部0条评论
快来发表一下你的评论吧 !