为什么说 Python
是数据科学的发动机(一)发展历程(附视频中字)

在PyData Seattle 2017中,Jake
Vanderplas介绍了Python的发展历程以及最新动态。在这里我们把内容分成上下两篇,先给大家带来上篇--Python的发展历程。

主讲人:

Jake
Vanderplas是华盛顿大学eScience研究所物理科学研究的负责人。该研究所负责跨学科项目,旨在支持科学领域在数据方面发现。Jake的研究领域包括天文学、天体物理学、机器学习以及可伸缩计算。此外,他是许多开源Python项目的维护者和频繁贡献者,包括scikit-learn、scipy、altair等。

CDA字幕组该讲座视频进行了汉化,附有中文字幕的视频如下:

针对不方面开视频的小伙伴,CDA字幕组也贴心的整理了文字版本,如下:

Python究竟是怎样成为了数据科学的发动机?考虑到一开始它的初衷并非如此。

Python 是数据科学的发动机(一)发展历程(附视频中字)">

Python的发展历程

我想回顾一下Python的初衷和早期发展情况。

1990s: 脚本时代

在上世纪90年代,我认为Python以及数据科学处于脚本时代。这时的座右铭为"Python是Bash的替代品”。

没有人愿意用Bash编程,那么让我们换成用Python吧。这就是我们90年代的情况。

Python 是数据科学的发动机(一)发展历程(附视频中字)">

当时有个从事科学领域的人,名叫David
Beasley。你可能通过《Python
Cookbook》一书熟知他。在90年代他在一个研究实验室工作,他写了一篇关于使用Python进行科学计算的文章。在文中他说:

“科学家正在使用各种不同的工具,他们倾向于使用自行开发的软件,来实现自己的特定领域语言。或者用命令行界面将它们组合到一起。”

在本文中他提出,为什么我们不使用Python把这些都组合到一起呢?

Python 是数据科学的发动机(一)发展历程(附视频中字)">

他提出一个他已进行了4年的案例研究,当中他把Python作为胶水,把许多其他的工具都粘到了一起。他写这个库在当时影响力非常大,SWIG(simplified
wrapper and interface
generator)。这能够解析整个Fortran或C代码,为你生成一个Python接口。因此为了驱动代码,你不必再去编写Fortran和C语言。

许多早期的SciPy等工具都是建立在SWI上的,我对scikit-learn的第一个贡献是用SWIG加上C
代码。之后我们不再用SWIG而转为Cython,但这是另一回事了。

2000s: SciPy时代

之后是2000年,我认为2000年代是SciPy时代。

这时的座右铭是,Python是MATLAB替代品。

我看到观众中有些点头赞同,当中有很多原因。如果看到2000年代早期有影响力并且发展SciPy堆栈的人群,可以在他们身上发现一些共同点。

例如John
Hunter是Matplotlib的创始人,在2012年他去世前的几周,他发表了很棒的SciPy演讲。

当中他谈到了Pre-Python,他有各种工作进程的大杂烩Perl脚本C
。他编写了MATLAB之后他厌倦了MATLAB,开始把东西加载到GnuPlot上。这启发他编写了Matplotlib,这基本上是用Python编写的MATLAB替代品。

Python 是数据科学的发动机(一)发展历程(附视频中字)">

同样还有Travis
Oliphant。他创建了continuum,在这之前他编写了Numpy和SciPy项目。

他说“在Python之前,我用过Perl。然后是MATLAB、shell、scrip、Fortran以及C
库等。当我发现Python时,我真的很喜欢这个语言。但这个语言是萌芽阶段 缺少很多库。
我认为我可以通过在Python中,连接低等级的库和高等级的usage。从而在世界中献出自己的一份力量。”这启发了SciPy,SciPy取代了MATLAB、Fortran、shell、scrip。

同样的如果你熟悉IPython项目、Jupyter项目,那你肯定知道Fernando
Perez,他创建了IPython。他也有类似五花八门的工具,C、C
、Unix(awk/sed/sh)Perl、IDL、Mathematica。

想到Python出现之前的科学就很可怕。接着Fernando创建了IPython项目,他想在Python中做类似IDL或类似Mathematica,以便他能够用一个简单的工具代替这所有。

在21世纪初出现了各种工具,相同的目标是想取代MATLAB,取代所有组合的包。若看到早期的代码,会发现它们都包括可视化、计算以及壳的内容。如果看一下Matplotlib,你仍然可以导入MATLAB的子模块。类似计算周期等部分在MATLAB、Matplotlib中仍然有计算,尽管现在很多已经被移除。

如今我们熟知的库如Matplotlib、SciPy、IPython,它们的目标很清晰。社区一直在演变

我认为在SciPy时代的关键会议是SciPy大会。SciPy大会驱动了很多创新力,从2002年一直到如今。在场我认识的几个人将出席下周的SciPy在奥斯汀的会议,这是非常有意思的会议,如果有机会的话我建议你们参加。

Python 是数据科学的发动机(一)发展历程(附视频中字)">

2010s: PyData时代

在20世纪90年代脚本时代和SciPy时代之后,我认为2010年代是PyData时代。这时的座右铭应为"Python是R语言的替代品”。

Python 是数据科学的发动机(一)发展历程(附视频中字)">

我认为PyData社区在这点上做的很好。R语言还是有些做的很好且无法超越的地方。我认为其中一个常规数据统计,还有一个是可视化。有些人在致力于解决这些问题。

我认为PyData时代的代表是Wes
McKinney,以及他的pandas。还有他的书《利用Python进行数据分析》。

在书的序言中他这样说道“还没有任何一种工具能够很好的处理我的一些需求。例如:具有标记轴的数据结构;综合时间序列功能;算术运算和减少;缺少数据的灵活移交;合并和其他相关操作,我希望最好能够在一种语言中完成这一切。”

Python 是数据科学的发动机(一)发展历程(附视频中字)">

且能够符合软件开发的一般用途,这启发了pandas的诞生。可以说若没有pandas库,没有Wes,今天我们不可能坐在这里。在2009?2011年的时候,他辞掉了本来的工作,吃了2年拉面,这样他就可以天天编写pandas。如果你有天碰到了Wes,请感谢他。因为他真的对我们的社区做出了重大贡献。

还有许多重要的软件这个时期问世。

Python 是数据科学的发动机(一)发展历程(附视频中字)">

pandas第一个重大的发布是在2011年左右。

scikit-learn在07年有发布一个早期的指南,但主要的scikit-learn发布于2009年或201年。

Conda的packaging发布于2012年,这真的改变了我使用Python的方式,改变了人们做事的方式。

以及2012年的IPython项目,后来更名为Jupyter。Jupyter项目真正推动了我们处理代码的方式,特别是在这个社区中。

当然当中关键的会议是PyData。

2012年,为期一天的PyData研讨会由谷歌举办,地点位于山景城。这是我影响深刻的一次会议。这次会议上我第一次公开发表了关于Python的演讲,当中我对scikit-learn进行了1小时的讲解。从那之后我就着迷了,想尽可能多的参加这个会议。

Python 是数据科学的发动机(一)发展历程(附视频中字)">

PyData遍布世界各地,这一系列会议促进了数据科学的发展。数据科学与数据计算是不同的,之前SciPy时代则是围绕这点的。当然以上这些时代都是同时存在的。有人使用Python写脚本,有人使用SciPy工具,有人使用PyData。

人们热衷于使用Python。因为Python的直观性、美感、哲学性以及可读性。Python从其他语言中得到很多转换,因为它编写起来很有趣。因此人们做的就是结合其他工具,其他社区中习得的内容、编写相应的Python包。

Wes专门写了pandas,因为他想做到R语言对数据框的操作。John
Hunter专门写了Matplotlib,因为他想用MATLAB的方式进行绘制,但不必使用MATLAB许可证。

Python真的很擅长从其他工具其他领域摄取知识,并把它们转换到自己的空间内,然后进行运行。

我们还开发了很多自己的东西,例如scikit-learn。在任何语言中,这都是考虑机器学习的首要方式。至少是如何连接机器学习,如何进行机器学习API。我认为没有其他语言比scikit-learn更简洁,更深思熟虑的。

但我们必须认识到在整个过程中,Python并不是数据科学语言。

Python是通用语言,我认为Python的通用本质在于其优势。你可以把它Python想象成瑞士军刀。

Python 是数据科学的发动机(一)发展历程(附视频中字)">

使用Python你可以做各种不同的事情。比如你可以做网页编程,可以进行Django,可以做后端,也可以做前端。

但多年来越来越多的人都在用Python,这把瑞士军刀变得复杂起来了。这么多的工具,我们需要选择用哪个记住顺序,从而你能找到你想要的。这里的优势在于Python存在巨大的能力空间,但缺点在于从哪儿下手。

我想强调的是对于刚接触Python的人群,他们说"我想马上开始学习Python”。但是他们会发现,宇宙是如此巨大,有那么多的包,有许多需要学的东西。还有许多人们传递的未记录下来的知识,很难进入其中。

我们已经在本文中了解了Python的发展历程,之后我们将带来最新的发展动态,以及介绍一些热门的库,敬请期待哦。

为什么说 Python 是数据科学的发动机(一)发展历程(附视频中字)的更多相关文章

  1. python和数据科学(Anaconda)

    Python拥有着极其丰富且稳定的数据科学工具环境.遗憾的是,对不了解的人来说这个环境犹如丛林一般(cue snake joke).在这篇文章中,我会一步一步指导你怎么进入这个PyData丛林. 你可 ...

  2. Python和数据科学的起步指南

    http://python.jobbole.com/80853/ Python拥有着极其丰富且稳定的数据科学工具环境.遗憾的是,对不了解的人来说这个环境犹如丛林一般(cue snake joke).在 ...

  3. (数据科学学习手札69)详解pandas中的map、apply、applymap、groupby、agg

    *从本篇开始所有文章的数据和代码都已上传至我的github仓库:https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 pandas提供了很多方 ...

  4. (数据科学学习手札64)在jupyter notebook中利用kepler.gl进行空间数据可视化

    一.简介 kepler.gl是由Uber开发的进行空间数据可视化的开源工具,是Uber内部进行空间数据可视化的默认工具,通过其面向Python开放的接口包keplergl,我们可以在jupyter n ...

  5. (数据科学学习手札100)搞定matplotlib中的字体设置

    本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 matplotlib作为数据可视化的利器,被广泛 ...

  6. python 在数据科学中的应用之matplotlib

    1.matplotlib模块生成直线图和散点图 >>>import matplotlib.pyplot as plt >>>year = [1950,1970,19 ...

  7. (数据科学学习手札62)详解seaborn中的kdeplot、rugplot、distplot与jointplot

    一.简介 seaborn是Python中基于matplotlib的具有更多可视化功能和更优美绘图风格的绘图模块,当我们想要探索单个或一对数据分布上的特征时,可以使用到seaborn中内置的若干函数对数 ...

  8. (数据科学学习手札140)详解geopandas中基于pyogrio的矢量读写引擎

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,前不久我在一篇文章中给大家分享 ...

  9. (数据科学学习手册28)SQL server 2012中的查询语句汇总

    一.简介 数据库管理系统(DBMS)最重要的功能就是提供数据查询,即用户根据实际需求对数据进行筛选,并以特定形式进行显示.在Microsoft SQL Serve 2012 中,可以使用通用的SELE ...

随机推荐

  1. 【HDUOJ】1213 How many tables

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213 题意:Ignatius邀请了n个朋友来家里,朋友之间如果互相不认识的不想坐一起,所以至少要准备几 ...

  2. Deep Dive into Neo4j 3.5 Full Text Search

    In this blog we will go over the Full Text Search capabilities available in the latest major release ...

  3. 不同JDK版本之间的intern()方法的区别-JDK6 VS JDK6+

    String s = new Stirng(“a”); s.intern(); JDK6:当调用intern()方法时,如果字符串常量池先前已创建出该字符串对象,则返回池中的该字符串的引用.否则,将此 ...

  4. Shiro学习笔记1 —— Hello World

    1.创建一个Maven工程加载Shiro的jar包 <!-- junit --> <dependency> <groupId>junit</groupId&g ...

  5. 搜索框下面显示提示数据(数据是ajax读取)

    1.前台页面 <div style="margin: 0 auto"> <input type="text" id="wenxian ...

  6. Monkey 稳定性测试

    学习网址: https://blog.csdn.net/lucytan01/article/details/79958727 https://blog.csdn.net/hebbely/article ...

  7. promise 获取文件内容

    文件结构图 { "next":"b.json", "msg":"this is a" } a.json { " ...

  8. Java怎样判断身份证号

    判断身份证号是否正确使用的是正则,Java与js中使用正则的方式大差不差,下面是Java通过正则判断身份证号是否正确的 * */ @Test public void cardId() { System ...

  9. LeetCode第二题—— Add Two Numbers(模拟两数相加)

    Description: You are given two non-empty linked lists representing two non-negative integers. The di ...

  10. scala中的闭包简单使用

    object Closure { /** * scala中的闭包 * 函数在变量不处于其有效作用域内,还能够对变量进行访问 * * @param args */ def main(args: Arra ...