为什么喜欢在线的编程环境?

每当我打开在收藏夹里吃灰的数据分析或数据科学的资源时,就会发现每一个教程总是绕不开 「环境搭建」的部分。不可否认的是,好的编程环境可以让学习者更好地体验编程学习的乐趣;但环境搭建又往往不可避免的存在很多坑,也许没等一个环境搭建好,就在当中遇到各种奇奇怪怪的问题,学习的兴致早就被报错折磨殆尽了。所以,不得不说环境搭建对于新手而言往往兴趣的 Killer。

我在入职之初,发现大公司的电脑出于安全性的考虑,往往不能随意安装各种应用软件;但是为了想好好利用上班闲暇之余继续学习数据科学的东西,于是我开始对在线的「云环境」产生了兴趣。

体验过一番之后,可以说,云环境是新手学习数据分析或者是入门数据科学最友好的方式了。虽然说在自己电脑上搭建一个环境之后也是一劳永逸,但是像我这样每天在个人电脑和公司电脑间切换,而公司电脑又不能随便安装东西的情况下,云环境就比较符合我的胃口了。

而这当中,Jupyter Notebook就扮演者重要的角色。


什么是 Jupyter Notebook?

Jupyter Notebook 这一名称实际上是分为两部分,前半部分是结合了木星 Juipter 一词,并对 Julia(新兴语言)、Python、R 这三门编程语言的参考组合而来;而 Notebook 则是对伽利略发现木星笔记的致敬1

Jupyter Notebook 官方快照

Jupyter Notebook 本质上是一个开源的 Web 应用,支持但不限于实时代码展示、可视化、Markdown 等功能,这就意味着你可以用 JavaScript 对其进行改造(比如有人移植了echarts),也可以很好的将其移植。因此基于这些特性,可以将 Jupyter Notebook 很轻易地部署在网页或服务器上运行。

Jupyter Notebook 

从目前来看,在数据科学领域,R 语言和 Python 往往都是新手入门的选择。像我这样的「两栖动物」,可能有时两者都用到,因此我希望的云环境可以将二者都集成。恰好Jupyter Notebook 都支持运行这二者的内核。

顾名思义,既然叫 Notebook,那么其实 Jupyter Notebook 更多时候还是像笔记本一样,可以用来展示。如果你有使用过 Rstudio 中的 R Markdown,那么你会对这种交互式笔记本并不陌生。

R Markdown 

当然,如果你只想在自己的电脑上进行操作学习,又想避免环境搭建的许多麻烦,那么其实安装 Anaconda 后就可以直接「开箱即用」。但是原始的 Jupyter Notebook 如果没有其他插件辅助的话,可能仅仅就是一个单一的编辑器,所以仍然还需要额外的插件才能让使用上更接近于 IDE(集成开发环境)

好在已经有人用 JavaScript 替我们写好了插件,你可以在 Github 上搜索到jupyter_contrib_nbextensions插件,然后按照官方文档只输入两行命令后即可搞定

pip install jupyter_contrib_nbextensions # 也可以使用 conda 安装,详见官方文档

jupyter contrib nbextension install --user

安装好后只需要重新进入 Jupyter Notebook 的主页,就可以看到「NBextensions」选项,点击进入到选项之中即可以勾选喜欢的插件来提高你的编程体验了!

Jupyter Notebook Extensions 界面


第三方平台的在线 Jupyter Notebook

前面我提到,由于 Jupyter Notebook 便于移植,所以在网页或服务器上部署也就是十分简单了。目前就我了解到的平台来看,主要有但不限于以下平台集成了 Jupyter Notebook 环境:

  • 科赛和鲸 K-lab(国内)
  • 阿里天池大数据 (国内)
  • Azure notebooks
  • Kaggle
  • Google Colab
  • CoCalc

这些第三方平台实际上都已经事先集成了经常使用的包如 Python 领域的pandasnumpy或 R 语言中的ggplot2等,一般无需额外下载,真正做到了开箱即用。但是如果恰好你使用的包并未预先安装,那么你可以调用命令行来进行安装下载,这里以 Python 为例子。

 !pip install pandas

国内的第三方在线 Jupyter Notebook 平台我就只用过 K-lab 和天池大数据,实际上感觉二者都是大同小异,也都是有点效仿 Kaggle 只需要你将学习或练习的数据集上传并设定好路径,通过相应函数读入数据即可开始学习,这对于国内师生的教学简直就是福音。

K-lab 操作界面

除此之外,微软的Azure Notebooks、Kaggle等本质上都是相似的;当然如果你能魔法上网并且经常进行深度学习,那么 Google Colab 的羊毛你绝对不会错过。

当然,如果你想和国外的数据科学爱好者或者资深人士一较高下,那么 Kaggle 一定是你的不二选择。需要注意的是,虽然 Kaggle 在国内是可以访问并注册的,但是在注册 Kaggle 账号后,点击邮箱里的激活链接时,一定要魔法上网后才可以弹出谷歌验证,验证成功后方可激活。否则无法通过机器人验证,会让自己的账号操作受限。

微软自从收购了 Github 后,Azure Notebooks 也同样支持你将自己的代码方便快捷地同步到自己的 Repo。但是在国内访问 Azure Notebooks 还是有点延迟,使用体验上并不佳。所以还是尽量推荐访问国内的 K-lab 或天池大数据,又或者是在本地端将代码写好后以.ipynb的形式上传。


Programing Anywhere

以上的在线第三方平台是基于你能请求桌面端网页时,才能使用。但是在手机用户和电脑用户间还有这么一类平板使用者,尤其是像大学生群体,上课带着 iPad 也不在少数了;所以如果在使用 iPad 登录上面的第三方平台上能否拥有和桌面端一样的体验呢?

答案是肯定的。

在 iOS 上,不乏看到许多像「Pythonisate」、「Juno」 这类的应用。


虽然说一定程度上是对电脑端上的移植,但是需要额外付费,并且实际的体验效果和电脑端上相差得不是一星半点。但是恰巧你使用的是 iPad 并且配有一个蓝牙键盘,又想学习时,主要有两种方式:

向第三方平台请求桌面站点

iPad 无论是 Safari 还是 Chrome,都可以拥有请求桌面站点的选项,在实际的学习过程使用鼠标的频率还是较低的。所以只要你连接上了 WiFi 并配有蓝牙键盘,除了显示内容多少以外,基本上还是可以拥有和桌面端上等价体验。

在今年的 WWDC 宣布 iPadOS 从 iOS 独立出来后,只要 iPad 升级了 iPadOS,用 iPad 打开网页会强制请求桌面端。我想到那时,在 iPad Pro 上的体验会更加接近于桌面端,这对于有着 iPad 并学习数据科学的朋友而言是个不错的选择。

用 VPS 搭建你自己的在线 Jupyter Notebook

第三方平台的 Jupyter Notebook 不好的地方在于,每次给你分配的运行时间以及资源都是有限的;并且如果有些包不是内置而是自己手动下载的,那么每次重新进入到 Jupyter Notebook 中则需要再重新手动下载安装,十分麻烦。

所以如果你有着自己的 VPS 服务器话,也可以在 VPS 上对 Jupyter Notebook 进行部署。这样的话你就可以随时随地访问你服务器上的 Jupyter Notebook 了。

不过由于我手上没有现成的 VPS 服务器,并且在 VM 虚拟机上好像并没有操作成功;但是我这里还是找了两份比较详细的搭建教程,一份是基于 CentOS 搭建的,另一份则是基于 Debian/Ubuntu 搭建的。感兴趣又或者自己目前有在用 VPS 服务器的小伙伴可以手动实操一下。最后如果显示以下界面就说明部署成功了。


结尾

在线的 Jupyter Notebook 可以让新手在入门时快速地开箱即用,很大程度上避免了环境搭建所带来的各种麻烦,节省学习时间。但是等到自己真正入门时,对于环境搭建的坑还需要及时填补起来。这样即使是迁移在其他平台或者在使用其他电脑时,也能快速的熟悉并且运行。

Jupyter Notebook 可以将代码、文字和图片以图文并茂的方式导出成一份漂亮的报告;同时也支持 Markdown、LaTeX 等语法,可以让你在编辑时不用切换到其他平台,简直就是「一站式写作」

不过使用 Jupyter Notebook 久了以后,就会习惯性地每敲一段代码就运行一次,实际上对于整个编程的连贯性和流畅性是有所影响的,这也是其弊端之一;同时,在比较大的项目或是更偏编程操作的开发中,像 Pycharm 和 Spyder 这类的 IDE 可能更能胜任。选择自己趁手的 IDE 实际上也是一个不断探索的过程,不过在入门之初,还是尽量把学习的精力都放在核心内容上吧。