数据分析为什么常用Jupyter而不是直接使用Python脚本或Excel?

为什么要用jupyter进行分析,而不是用python脚本或仅仅利用excel? Why individuals and companies shou…
关注者
5,054
被浏览
1,576,554

136 个回答

上面的同学说了很多,但是通篇都在说好的,我说一下我的体验好了

先说下我的背景

这里大家讨论的是Jupyter Notebook, 下面在数据分析的场景说一下notebook的好坏,并且和Matlab, Excel比较一下

1. 优点

(1) 基于过程

数据分析和传统的MVC软件开发的最大区别在于,数据分析存在一个data flow, 我们是在不断的做计算,并且画图。这里存在一个大致的“顺序”,比如

  1. 先对数据进行处理,去掉有问题的数据 (Data Wrangling)
  2. 从各个角度看一个这个数据各个维度的分布情况 (Data Exploration)
  3. 根据自己的想法、要求,做具体的分析,计算
  4. 对计算结果做进一部分的分析

这有点类似做应用题。而这是传统的IDE (e.g. PyCharm) 没有办法做到的。假如全部都写脚本+输出,那么你每张图可能都要保存下来,然后再单独点进去看,很麻烦。而Notebook做这个要更方便,结果直接产生在Cell下面

反言之,如果你不需要这种频繁的计算-画图的话,那么notebook可能还真没什么大不了.

深一点而言,数据分析有不同的paradigm (大致可分为前处理-建模/计算-后处理)。因此,需要一个相应的工具。这一点,notebook并不是独创,这种方式应该是来源于mathematica.

(2) Python

主要是两点

语言优势

比如,在matlab中,你怎么给函数设定默认值?

function f(arg1,arg2,arg3)
  if nargin < 3
    arg3 =   'some default'
  end
end

Default Arguments in Matlab

这实在是太SB了

Package

我做研究的时候,需要画风玫瑰图,类似下面这种

这个matlab并没有. 我当然也可以自己去定义、去画,但那样效率太低

在Python里,已经有人做好了这个包,我安装,然后直接用就行了

再比如,我的研究涉及到一个很专业的函数拟合,这个东西,只有R有相关的包可以调用

而Python可以调用R来做计算,但Matlab却做不到,这又省了很多事情

进一步而言,Python具有开源、分享自己工作的基本条件。我自己做的研究、做的模型,也可以做成包分享出去,给别人使用,而Matlab则要困难许多。

(3) Hackable

和第一点对应,Notebook的是计算+文档的混合体,而本身又是web-based,因此非常好hack, 比如我的notebook因为非常长,所以就加了个侧边栏目录

(安装见: ipython-contrib/jupyter_contrib_nbextensions

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

再比如,这么长的文档,有时候用来做演示,那么可以再加个按钮,把code cell全部隐藏掉就好了

2. 缺点

(1) 计算语法过于复杂

标准的语法总是要np.array, np.sum, 非常的啰嗦,这一点matlab要好很多

(2) 功能的欠缺

比如像上面朋友说的,没有像matlab一样的variable explorer, 能够方便的查看数据

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

又比如,画的图不是可交互性的,

比如这里,我可能想知道上面某个点具体的值是多少,但是静态图做不到。

尽管目前有不少交互式的包,但是语法又极其复杂,并不像matplotlib那样容易使用。

再比如目前的图片,作为论文插图也不够好,matplotlib又不支持emf格式。因此图片插入word也是个很大的问题。

(3) Notebook不是IDE

主要问题在于,我在notebook中写的函数,没有办法快速跳转到其定义。而一般的IDE, CTRL+点击就行了。

3. 未来

(1) 大部分问题都是可以解决的

像上面说的很多欠缺的功能,都是可以解决、正在解决的,就好比我自己去策划推动了侧边栏目录一样。像variable explorer,已经有了初步的版本,但目前还是很难用就是了。

绝大部分欠缺的功能,都可以做,而且开发难度不高。实际上近几年大家有用notebook的话,就会感觉版本号跳得特别快(虽然始终不够用....)

(2) 框架

上面有朋友说了,自己写notebook的话,很容易写得很乱,左一个import, 又一个import. 所以要慎用,维护性很差。

但实际上,是缺乏一个框架(不好意思,我是Ruby on Rails过来的。。。。),把大家的best practice总结起来。

就拿我的notebook 来说, notebook是这样组织的。最上面的cell 雷打不动,一定是基本的设置

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

这样notebook界面上的代码就清爽很多,不会有各种import。当然,肯定也有比我的做法更好的方法,但问题就是,这些best practice需要分享出来。

又比如计算复用的函数,都可以抽象出去,只在Notebook里面尝试新的函数,和写运行脚本,这样维护性也更好一些(stackoverflow.com/quest

这些方面,都可以做得更简洁,有更好的practice,这个是需要一个框架来做的。

4. 总结

所以,为什么要用notebook呢?其实就是这几点

  • 适合数据分析的 处理-计算-分析 的过程,不需要再专门写报告
  • Python带来的丰富的第三方包支持,不需要自己再重复造轮子
  • 正在逐步丰富的功能,比如多个cell的剪切/粘贴,PPT放映, cell tag ...

但这并不是说就是“神器”了,实际上就目前的阶段(2017-08)而言,我觉得还远远称不上 (连个variable explorer都没有你好意思吗.....)但是按照目前的发展速度,我觉得是可以成为一个更好的数据分析、科学计算工具的。

Jupyter Notebook 顾名思义,它的核心在于展示与快速迭代。所以与其回答这个问题,我觉得看看各路大神都用Jupyter Notebook写出了什么,就自然可以直观地得出这个问题的结论。



先来个萌萌的

1.

XKCD plots in Matplotlib

仿制XKCD式手写图标


各种用Notebook写出的Python教程

2.

Introduction to Computer Science with Python as Tel-Aviv University

3.

Introduction to Python

4.

Exploratory computing with Python by Mark Bakker


数据分析机器学习篇

5.

Neural Networks

机器学习人工神经网络模型

6.

Map-Reduce and Apache Spark

大规模并行计算框架Spark教程

7.

Analysing structured data using pandas

表格数据处理库Pandas教程

9.

Automating Microsoft Office with Python

Microsoft Office+Python自动化

10.

Datamining Twitter with tweepy

Twitter数据挖掘入门


数学物理化学生物篇

11.

CBE20255 by jckantor

化学工程分析入门(圣母大学本科课程)

12.

Working with Reactions

化学反应模拟器

13.

Three-Body Problem

三体问题模拟器

14.

Color Science for Python

色彩学入门

15.

Population Genetics in an RNA World

RNA种群遗传学


地球科学与地理科学


16.

Estimated likelihood of observing a large earthquake on a continental low‐angle normal fault and implications for low‐angle normal fault activity

大陆板块低斜率断层对地震的预测

(大概是这么翻译的吧...?)

17.

NLTK, maps, and 007

007原著小说中詹姆斯邦德杀人地点的可视化


18.

Iris "Hidden" Features

美国国家海洋和大气管理局海洋天气信息采集点的可视化

19.

Python for Geosciences

基于Python的地理科学入门


语言学与文字信息挖掘


20.

Exercise to detect Algorithmically Generated Domain Names

机器生成域名的识别与分析


21.

Mining Twitter: Exploring Trending Topics, Discovering What People Are Talking About, and More

文字信息挖掘与分析 - Twitter热门话题

22.

Mining Facebook: Analyzing Fan Pages, Examining Friendships, and More

文字信息挖掘与分析 - Facebook粉丝页面,朋友关系

23.

Mining LinkedIn: Faceting Job Titles, Clustering Colleagues, and More

文字信息挖掘与分析 - LinkedIn职称,同事分组


24.

Mining Google+: Computing Document Similarity, Extracting Collocations, and More

文字信息挖掘与分析 - Google+文章相似性,词组提取


25.

Mining GitHub: Inspecting Software Collaboration Habits, Building Interest Graphs, and More

文字信息挖掘与分析 - GitHub软件合作习惯,兴趣关系图


信号处理篇


26.

Presentation Materials for my "Sound Analysis with the Fourier Transform and Python" OSCON Talk.

对声波的傅里叶变换

27.

Kalman and Bayesian Filters in Python

以卡尔曼和贝叶斯滤波器为基础的信号处理教程

28.

Timeseries Classification: KNN & DTW

时间序列分类问题:用KNN和DTW算法对人体运动模式的识别

29.

Lecture notes for the masters course Digital Signal Processing

电子信号处理(完整的硕士课程)

-----------------------我是工地分割线-------------------------
科学计算篇

社会科学数据处理篇

心理学与神经学篇

经济学与金融学篇

数据可视化篇


------------------------------------------------

点赞过20继续更...

10月11日已更:呦~居然过20赞了,怒更!

------------------------------------------------

点赞过40继续更...

10月14日已更:耶耶耶干货多的回答涨赞快~

------------------------------------------------

点赞过80继续更...


英语过关的童鞋可以直接去看source


sources:

A gallery of interesting IPython Notebooks · ipython/ipython Wiki · GitHub

Notebook Gallery