本文由 伯乐在线 - HanSir 翻译,toolate 校稿

英文出处:Quora

【伯乐在线导读】:这个问题来自 Quora,题主还补充说,“似乎很多搞数据的程序员都挺擅长 Python 的,这是为什么呢?”下面是 Jeff Hammerbacher 的回复。(693 赞)


Python是一种解释型、动态语言,具有明确而高效的语法。Python具有良好的REPL(Read-Eval-Print Loop ,‘读取-求值-输出’循环),还可以通过dir()和文档字符串从REPL中开发新模块。这是程序员更偏向于Python而不是C、C++或Java的一个原因。

Python社区于90年代中期投入精力开发了Numeric,它是“Python的一个扩展,以使其像Matlab那样自然地支持数值分析”[1]。Numeric后来演变成为NumPy[2]。几年后,Matlab的绘图功能通过matplotlib库被移植到Python中[3]。科学计算的库围绕NumPy和matplotlib建立,并打包成SciPy包[4],这在商业上由Enthought支持[5]。Python在类Matlab的数组操作和绘图功能上的支持,是它比Perl和Ruby更受到青睐的主要原因。

如今,对数据科学家来说,Python最流行的替代品是R、Matlab/Octave和Mathematica/Sage。除了前面提到的把Matlab的特性移植到Python的工作外,近期的工作已经把一些R和Mathematica中流行的特性移植到了Python。

R语言中的数据框和相关操作(来自plyr和reshape包)已经由pandas库实现[6]。scikit-learn项目[7]呈现了许多机器学习算法的通用接口,类似于R中的caret包。

Mathematica/Sage中“notebook”的概念已经由IPython notebooks实现[8]。

以我个人的观点,Python仍然在一些重要领域有所欠缺。

1. 首先是Python在数组操作和公式设定上的语法相对更加繁琐。Matlab/Octave在数组操作上的语法仍更受青睐(例如,这是它被斯坦福大学机器学习课程所采用的原因),而R语言在公式设定上的语法相当不错。

2. 再者就是静态图形库ggplot2与交互式图形库D3的对应Python库。matplotlib库既不易安装,又难以使用,还不容易建立用于web的交互式图形。

3. 第三就是NumPy和pandas库在处理大数据集时的可扩展性。Continuum公司正致力于解决这个问题,但距离创造出一些连贯又可用的东西还有很长的路要走。

4. 第四是缺乏一个类似于LINQ项目的、用于数据操作的嵌入式、声明式语言。Pandas作为一个低层次的数据操作工具箱来说很有用,但是跟踪复杂操作的专用Pandas语法会令人沮丧。

5. 最后是对数据科学家来说缺乏一个像R Studio一样高品质的IDE。

参考资料:

[1] http://hugunin.net/story_of_jyth…
[2] http://numpy.scipy.org/
[3] http://matplotlib.sourceforge.net/
[4] http://www.scipy.org/
[5] http://www.enthought.com/
[6] http://pandas.pydata.org
[7] http://scikit-learn.org
[8] http://blog.fperez.org/2012/01/i…
[9] http://continuum.io/

写于2012年8月29日。

关于作者: HanSir

为什么数据科学家们选择了Python语言?的更多相关文章

  1. 关于Python你不得不知道的Python语言特点

    首先什么是语言?什么是编程? 准确来说是:定义计算机程序的语言,用来向计算机发送指令 个人理解:   语言:是一种交流的工具或者方式.比如我们的汉语普通话.各地的方言.外语中的英语.俄语.日语等.我们 ...

  2. mooc-python语言语法week3-6

    week3 1.类型的概念:程序编程不允许有歧义的数据类型存在,所以对数据进行了划分,python语言类型分为,数字类型.字符串类型.元组类型.列表类型.文件类型.字典类型. i:数字类型: pyth ...

  3. 一文总结数据科学家常用的Python库(下)

    用于建模的Python库 我们已经到达了本文最受期待的部分 - 构建模型!这就是我们大多数人首先进入数据科学领域的原因,不是吗? 让我们通过这三个Python库探索模型构建. Scikit-learn ...

  4. 一文总结数据科学家常用的Python库(上)

    概述 这篇文章中,我们挑选了24个用于数据科学的Python库. 这些库有着不同的数据科学功能,例如数据收集,数据清理,数据探索,建模等,接下来我们会分类介绍. 您觉得我们还应该包含哪些Python库 ...

  5. 总结数据科学家常用的Python库

    概述 这篇文章中,我们挑选了24个用于数据科学的Python库. 这些库有着不同的数据科学功能,例如数据收集,数据清理,数据探索,建模等,接下来我们会分类介绍. 您觉得我们还应该包含哪些Python库 ...

  6. 基于python语言的经典排序法(冒泡法和选择排序法)

    前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 ...

  7. Web 开发和数据科学家仍是 Python 开发的两大主力

    由于 Python 2 即将退役,使用 Python 3 的开发者大约为 90%,Python 2 的使用量正在迅速减少.而去年仍有 1/4 的人使用 Python 2. Web 开发和数据科学家仍是 ...

  8. 人工智能为什么选择Python语言?

    作为新手,在面对广泛应用于企业级应用开发的 Java.游戏客户端开发的 C++.嵌入式开发的 C.人工智能领域的 Python 等数百种编程语言时,你会如何选择自己的第一门编程语言? 作者 | JAC ...

  9. SparkR:数据科学家的新利器

    摘要:R是数据科学家中最流行的编程语言和环境之一,在Spark中加入对R的支持是社区中较受关注的话题.作为增强Spark对数据科学家群体吸引力的最新举措,最近发布的Spark 1.4版本在现有的Sca ...

随机推荐

  1. ajax请求(二),后台返回的JSon字符串的转换

    ajax请求,json的转换 $.ajax({ url : "../folder/isExistAddFolder.do?t="+new Date(), type : 'POST' ...

  2. How can I work smarter, not just harder? Ask it forever

    How can I  work smarter, not just harder? 记住,永远要问自己这个问题.当你发现在做一件事情时,总是那么的繁琐无味,那么一定是出了什么问题. 如果一味地强调更加 ...

  3. UVa 297 (四分树 递归) Quadtrees

    题意: 有一个32×32像素的黑白图片,用四分树来表示.树的四个节点从左到右分别对应右上.左上.左下.右下的四个小正方区域.然后用递归的形式给出一个字符串代表一个图像,f(full)代表该节点是黑色的 ...

  4. BZOJ 4408 神秘数

    题解同各神犇的方法... #include<iostream> #include<cstdio> #include<cstring> #include<alg ...

  5. HDU 5360 Hiking 登山 (优先队列,排序)

    题意: 有n个人可供邀请去hiking,但是他们很有个性,每个人都有个预期的人数上下限[Li,Ri],只有当前确定会去的人数在这个区间内他才肯去.一旦他答应了,无论人数怎样变更,他都不会反悔.问最多能 ...

  6. Python [Leetcode 141]Linked List Cycle

    题目描述: Given a linked list, determine if it has a cycle in it. 解题思路: 快的指针和慢的指针 代码如下: # Definition for ...

  7. 给产品经理讲技术,不得不懂的TCP和UDP

    TCP/IP协议,你一定经常听说吧,其中TCP(Transmission Control Protocol)称为传输控制协议,IP(Internet Protocol)称为因特网互联协议,好吧,这都是 ...

  8. 计算机网络——TCP三次、四次握手详解

    三次握手:建立TCP连接 连接建立过程: B的TCP服务器进程先创建传输控制块TCB(存储了每一个连接中的一些重要信息,如:TCP连接表,到发送和接收缓存的指针,到重传队列的指针,当前的发送和接收序号 ...

  9. Task和BackTask

    一.总结性知识点:     1.Android应用运行时会创建任务Task,用于存放主窗口     2.每一个任务包含一个堆栈数据结构,用于保存当前应用已创建的窗口对象,这个堆栈即回退栈BackSta ...

  10. crontab 每月最后一天

    0 8 28-31 * * [ `date -d tomorrow +%e` -eq 1 ] && do-something   我觉得能想到这种方法的,都是经验丰富的人.程序员们,想 ...