
在数据分析的场景说一下notebook的好坏,并且和Matlab, Excel比较一下。
优点
(1) 基于过程数据分析和传统的MVC软件开发的最大区别在于,数据分析存在一个data flow, 我们是在不断的做计算,并且画图。这里存在一个大致的“顺序”,比如先对数据进行处理,去掉有问题的数据 (Data Wrangling)从各个角度看一个这个数据各个维度的分布情况 (Data Exploration)根据自己的想法、要求,做具体的分析,计算对计算结果做进一部分的分析这有点类似做应用题。而这是传统的IDE (e.g. PyCharm) 没有办法做到的。假如全部都写脚本+输出,那么你每张图可能都要保存下来,然后再单独点进去看,很麻烦。而Notebook做这个要更方便,结果直接产生在Cell下面,

反言之,如果你不需要这种频繁的计算-画图的话,那么notebook可能还真没什么大不了。
深一点而言,数据分析有不同的paradigm (大致可分为前处理-建模/计算-后处理)。因此,需要一个相应的工具。这一点,notebook并不是独创,这种方式应该是来源于mathematica。
(2) Python主要是两点语言优势比如,在matlab中,你怎么给函数设定默认值?

Default Arguments in Matlab这实在效率太低了。
Package需要画风玫瑰图,类似下面这种。

在Python里,已经有人做好了这个包,安装后直接用就行了。
再比如,函数拟合只有R有相关的包可以调用。
而Python可以调用R来做计算,但Matlab却做不到,这又省了很多事情。
进一步而言,Python具有开源、分享自己工作的基本条件,而Matlab则要困难许多。
(3) Hackable
和第一点对应,Notebook的是计算+文档的混合体,而本身又是-based,因此非常好hack, 比如notebook非常长,所以就加了个侧边栏目录。

再比如,在分析电影数据的时候,用card来展示更方便一点,所以可以这样显示数据。

再比如,长的文档有时候用来做演示,那么可以再加个按钮,把code cell全部隐藏掉就好了。
2. 缺点
(1) 计算语法过于复杂标准的语法总是要np.array, np.sum, 非常的啰嗦,这一点matlab要好很多
(2) 功能的欠缺比如像上面朋友说的,没有像matlab一样的variable explorer, 能够方便的查看数据

这一点极其不便。又比如基于一个 (excel型的数据),为什么不能直接点击、排序筛选,非要写查询语句?
又比如,画的图不是可交互性的。

比如这里,我可能想知道上面某个点具体的值是多少,但是静态图做不到。
尽管目前有不少交互式的包,但是语法又极其复杂,并不像matplotlib那样容易使用。
再比如目前的图片,作为论文插图也不够好,matplotlib又不支持emf格式。
因此图片插入word也是个很大的问题。
(3) Notebook不是IDE
主要问题在于notebook中写的函数,没有办法快速跳转到其定义。而一般的IDE, CTRL+点击就行了。
3. 未来
(1) 大部分问题都是可以解决的像上面说的很多欠缺的功能,都是可以解决、正在解决的,就好比我自己去策划推动了侧边栏目录一样。像variable explorer,已经有了初步的版本,但目前还是很难用就是了。
绝大部分欠缺的功能,都可以做,而且开发难度不高。实际上近几年大家有用notebook的话,就会感觉版本号跳得特别快。
(2) 自己写notebook的话,很容易写得很乱,左一个import, 又一个import所以要慎用,维护性很差。但实际上,是缺乏一个框架,把大家的best practice总结起来。就拿我的notebook 来说,notebook是这样组织的。最上面的cell 雷打不动,一定是基本的设置

然后所有的Import 放到文件里面在import 进来

这样notebook界面上的代码就清爽很多,不会有各种import。当然,肯定也有更好的方法,但问题就是,这些best practice需要分享出来。
又比如计算复用的函数,都可以抽象出去,只在Notebook里面尝试新的函数,和写运行脚本,这样维护性也更好一些。
4. 总结
所以,为什么要用notebook呢?其实就3点原因。
(1)适合的处理-计算-分析 的过程,不需要再专门写报告
(2)Python带来的丰富的第三方包支持,不需要自己再重复造轮子
(3)正在逐步丰富的功能,比如多个cell的剪切/粘贴、PPT放映、cell tag