Skip to content

Commit

Permalink
python story
Browse files Browse the repository at this point in the history
  • Loading branch information
qiwsir committed Sep 14, 2015
1 parent 8c7d44d commit d357433
Show file tree
Hide file tree
Showing 4 changed files with 121 additions and 0 deletions.
Binary file added 0images/n00201.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 0images/n00401.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
73 changes: 73 additions & 0 deletions n003.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#大数据全栈式开发语言 – Python

来源:http://www.techug.com/full-stack-python

前段时间,ThoughtWorks 在深圳举办一次社区活动上,有一个演讲主题叫做“Fullstack JavaScript”,是关于用 JavaScript 进行前端、服务器端,甚至数据库(MongoDB)开发,一个 Web 应用开发人员,只需要学会一门语言,就可以实现整个应用。

受此启发,我发现 Python 可以称为大数据全栈式开发语言。因为 Python 在云基础设施,DevOps,大数据处理等领域都是炙手可热的语言。

![](./0imagesn00201.png)

就像只要会 JavaScript 就可以写出完整的 Web 应用,只要会 Python,就可以实现一个完整的大数据处理平台。

##云基础设施

这年头,不支持云平台,不支持海量数据,不支持动态伸缩,根本不敢说自己是做大数据的,顶多也就敢跟人说是做商业智能(BI)。

云平台分为私有云和公有云。私有云平台如日中天的 OpenStack,就是 Python 写的。曾经的追赶者 CloudStack,在刚推出时大肆强调自己是 Java 写的,比 Python 有优势。结果,搬石砸脚,2015 年初,CloudStack 的发起人 Citrix 宣布加入 OpenStack 基金会,CloudStack 眼看着就要寿终正寝。

如果嫌麻烦不想自己搭建私有云,用公有云,不论是 AWS,GCE,Azure,还是阿里云,青云,在都提供了 Python SDK,其中 GCE 只提供 Python 和 JavaScript 的 SDK,而青云只提供 Python SDK。可见各家云平台对 Python 的重视。

提到基础设施搭建,不得不提 Hadoop,在今天,Hadoop 因为其 MapReduce 数据处理速度不够快,已经不再作为大数据处理的首选,但是 HDFS 和 Yarn——Hadoop 的两个组件——倒是越来越受欢迎。Hadoop 的开发语言是 Java,没有官方提供 Python 支持,不过有很多第三方库封装了 Hadoop 的 API 接口(pydoop,hadoopy 等等)。

Hadoop MapReduce 的替代者,是号称快上 100 倍的 Spark,其开发语言是 Scala,但是提供了 Scala,Java,Python 的开发接口,想要讨好那么多用 Python 开发的数据科学家,不支持 Python,真是说不过去。HDFS 的替代品,比如 GlusterFS,Ceph 等,都是直接提供 Python 支持。Yarn 的替代者,Mesos 是 C++ 实现,除 C++ 外,提供了 Java 和 Python 的支持包。

##DevOps

DevOps 有个中文名字,叫做开发自运维。互联网时代,只有能够快速试验新想法,并在第一时间,安全、可靠的交付业务价值,才能保持竞争力。DevOps 推崇的自动化构建/测试/部署,以及系统度量等技术实践,是互联网时代必不可少的。

自动化构建是因应用而易的,如果是 Python 应用,因为有 setuptools, pip, virtualenv, tox, flake8 等工具的存在,自动化构建非常简单。而且,因为几乎所有 Linux 系统都内置 Python 解释器,所以用 Python 做自动化,不需要系统预安装什么软件。

自动化测试方面,基于 Python 的 Robot Framework 企业级应用最喜欢的自动化测试框架,而且和语言无关。Cucumber 也有很多支持者,Python 对应的 Lettuce 可以做到完全一样的事情。Locust 在自动化性能测试方面也开始受到越来越多的关注。

自动化配置管理工具,老牌的如 Chef 和 Puppet,是 Ruby 开发,目前仍保持着强劲的势头。不过,新生代 Ansible 和 SaltStack——均为 Python 开发——因为较前两者设计更为轻量化,受到越来越多开发这的欢迎,已经开始给前辈们制造了不少的压力。

在系统监控与度量方面,传统的 Nagios 逐渐没落,新贵如 Sensu 大受好评,云服务形式的 New Relic 已经成为创业公司的标配,这些都不是直接通过 Python 实现的,不过 Python 要接入这些工具,并不困难。

除了上述这些工具,基于 Python,提供完整 DevOps 功能的 PaaS 平台,如 Cloudify 和 Deis,虽未成气候,但已经得到大量关注。

##网络爬虫

大数据的数据从哪里来?除了部分企业有能力自己产生大量的数据,大部分时候,是需要靠爬虫来抓取互联网数据来做分析。

网络爬虫是 Python 的传统强势领域,最流行的爬虫框架 Scrapy,HTTP 工具包 urlib2,HTML 解析工具 beautifulsoup,XML 解析器 lxml,等等,都是能够独当一面的类库。

不过,网络爬虫并不仅仅是打开网页,解析 HTML 这么简单。高效的爬虫要能够支持大量灵活的并发操作,常常要能够同时几千甚至上万个网页同时抓取,传统的线程池方式资源浪费比较大,线程数上千之后系统资源基本上就全浪费在线程调度上了。Python 由于能够很好的支持协程(Coroutine)操作,基于此发展起来很多并发库,如 Gevent,Eventlet,还有 Celery 之类的分布式任务框架。被认为是比 AMQP 更高效的 ZeroMQ 也是最早就提供了 Python 版本。有了对高并发的支持,网络爬虫才真正可以达到大数据规模。

抓取下来的数据,需要做分词处理,Python 在这方面也不逊色,著名的自然语言处理程序包 NLTK,还有专门做中文分词的 Jieba,都是做分词的利器。

##数据处理

万事俱备,只欠东风。这东风,就是数据处理算法。从统计理论,到数据挖掘,机器学习,再到最近几年提出来的深度学习理论,数据科学正处于百花齐放的时代。数据科学家们都用什么编程?

如果是在理论研究领域,R语言也许是最受数据科学家欢迎的,但是R语言的问题也很明显,因为是统计学家们创建了R语言,所以其语法略显怪异。而且R语言要想实现大规模分布式系统,还需要很长一段时间的工程之路要走。所以很多公司使用R语言做原型试验,算法确定之后,再翻译成工程语言。

Python 也是数据科学家最喜欢的语言之一。和R语言不同,Python 本身就是一门工程性语言,数据科学家用 Python 实现的算法,可以直接用在产品中,这对于大数据初创公司节省成本是非常有帮助的。正式因为数据科学家对 Python 和R的热爱,Spark 为了讨好数据科学家,对这两种语言提供了非常好的支持。

Python 的数据处理相关类库非常多。高性能的科学计算类库 NumPy 和 SciPy,给其他高级算法打了非常好的基础,matploglib 让 Python 画图变得像 Matlab 一样简单。Scikit-learn 和 Milk 实现了很多机器学习算法,基于这两个库实现的 Pylearn2,是深度学习领域的重要成员。Theano 利用 GPU 加速,实现了高性能数学符号计算和多维矩阵计算。当然,还有 Pandas,一个在工程领域已经广泛使用的大数据处理类库,其 DataFrame 的设计借鉴自R语言,后来又启发了 Spark 项目实现了类似机制。

对了,还有 iPython,这个工具如此有用,以至于我差点把他当成标准库而忘了介绍。iPython 是一个交互式 Python 运行环境,能够实时看到每一段 Python 代码的结果。默认情况下,iPython 运行在命令行,可以执行ipython notebook在网页中运行。用 matplotlib 绘制的图可以直接嵌入式的显示在 iPython Notebook 中。

iPython Notebook 的笔记本文件可以共享给其他人,这样其他人就可以在自己的环境中重现你的工作成果;如果对方没有运行环境,还可以直接转换成 HTML 或者 PDF。

##为什么是 Python

正是因为应用开发工程师、运维工程师、数据科学家都喜欢 Python,才使得 Python 成为大数据系统的全栈式开发语言。

**对于开发工程师而言,**Python 的优雅和简洁无疑是最大的吸引力,在 Python 交互式环境中,执行import this,读一读 Python 之禅,你就明白 Python 为什么如此吸引人。Python 社区一直非常有活力,和 NodeJS 社区软件包爆炸式增长不同,Python 的软件包增长速度一直比较稳定,同时软件包的质量也相对较高。有很多人诟病 Python 对于空格的要求过于苛刻,但正是因为这个要求,才使得 Python 在做大型项目时比其他语言有优势。OpenStack 项目总共超过 200 万行代码,证明了这一点。

**对于运维工程师而言,**Python 的最大优势在于,几乎所有 Linux 发行版都内置了 Python 解释器。Shell 虽然功能强大,但毕竟语法不够优雅,写比较复杂的任务会很痛苦。用 Python 替代 Shell,做一些复杂的任务,对运维人员来说,是一次解放。

**对于数据科学家而言,**Python 简单又不失强大。和C/C++相比,不用做很多的底层工作,可以快速进行模型验证;和 Java 相比,Python 语法简洁,表达能力强,同样的工作只需要1/3 代码;和 Matlab,Octave 相比,Python 的工程成熟度更高。不止一个编程大牛表达过,Python 是最适合作为大学计算机科学编程课程使用的语言——MIT 的计算机入门课程就是使用的 Python——因为 Python 能够让人学到编程最重要的东西——如何解决问题。

顺便提一句,微软参加 2015 年 PyCon,高调宣布提高 Python 在 Windows 上的编程体验,包括 Visual Studio 支持 Python,优化 Python 的C扩展在 Windows 上的编译等等。脑补下未来 Python 作为 Windows 默认组件的场景。
48 changes: 48 additions & 0 deletions n004.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#机器学习编程语言之争,Python夺魁

来源:http://www.infoq.com/cn/news/2015/09/Python

随着科技的发展,拥有高容量、高速度和多样性的大数据已经成为当今时代的主题词。数据科学领域中所采用的机器学习编程语言大相径庭。究竟哪种语言最适合机器学习成为争论不休的话题。近日,密西根州立大学的博士生Sebastian Raschka再次发起了机器学习编程语言之争,分析了自己选择Python的原因。

目前,机器学习牵涉的编程语言十分多样,包括了MATLAB、Julia、R、Perl、Python、Ruby等等。首先,Raschka定义了语言好坏的原则:一门好的语言应该使得编写、调试和执行代码的总时间最短。然后,他花大篇幅讲述了一个简单的道理——没有一门语言是对所有情况、所有人都十分适合的。

>Roberto Waltman:“在这种唯一正确的方式下,面向对象的Spaghetti code就是Lasagna code。”
针对具体的应用场景以及参与项目的人员,开发团队或个人要对任务需求进行评估,再结合人员对于各个语言的熟悉程度和语言生态环境的情况等等,作出选择。接下来,Raschka开始正式点评各个语言相对与Python在机器学习时的优缺点。

##表现平平的MATLAB

作为机器学习、模式识别等方面经常使用的工具,MATLAB被放在了第一个分析。Raschka认为,MATLAB在实现机器学习算法时要比Python或者NumPy更加自然。很多高校也在计算机科学相关的课程中教授MATLAB语言。然而,MATLAB也存在很多的缺点:价格昂贵、非开源、性能表现平平、语法不符合程序员的习惯等。例如,MATLAB中矩阵乘积运算操作为X.dot(Y),而Python为X@W,更加简洁、明了。

![](./0images/n00401.png)

各种语言相对于C的测试性能——C的性能为1.0,越小越好
从上图可以看出,MATLAB的性能比Python、Go、Java等语言要差很多。Raschka也提到,上图中Python的性能也表现不好。但是,现在性能强劲的GPU为Python提供了强大的后盾。在2010年的时候,Python中的[Theano库](https://theano.readthedocs.org/en/latest/)在CPU上运行时,其速度是NumPy的1.8倍。而Theano在GPU上运行时,其速度就是NumPy的11倍。因此,在目前更高性能的GPU的帮助下,Python性能已经有了更大的改进。

##貌似很强大的Julia

作为一门新型的语言,Julia在设计之处就充分借鉴了C/Ruby/Python等语言的经验,试图重新融合众家之长,为科学计算提供一个有力的工具。Raschka充分认可了该语言。然而,对于其未来Julia是否会流行,Raschka持保留态度。

>Bjarne Stroustrup:世界上只有两种语言——大家一直在抱怨的和无人问津的。
Raschka认为一个语言是否有用又很大程度上取决于其是否流行。只有被广大编程人员所熟知的编程语言,相关的库才会更多,遇到问题时也能够方便的找到答案,且易于团队合作和代码分享。语言本身也会随着社区的关注不断得以改善。在流行度上,Julia并没有什么优势。

R语言本身无错

接下来,Raschka又提到了R语言。其实,Raschka之前使用过R语言,而且还专门撰写了一部有关R语言中Heat map的书。而且,他自己也不认为R语言存在任何令人不满意的地方。据Spectrum IEEE统计,在2015年排名前十的编程语言中,R语言是提升最快的。近期,微软对R语言表现出极大的兴趣。并且很快,微软的Azure便开始支持R语言了。

>Alan J. Perlis:当某人说“我想要一门编程语言。它要能够根据我的目标自动生成代码”。让他拿根棒棒糖,一边玩去吧!
Raschka总结R和Python之间的不同在于,R是统计学家开发的(数学)语言,而Python是计算领域科学家开发,可以应用到统计学的编程语言。这就是说,二者都可以很好的应用于数据科学或者机器学习,但Python的语法更容易被程序员所接受。

##Perl的没落

Raschka简单分析了Perl语言。作为一门古老的语言,Perl已经不可避免的走向了没落。Raschka表示,Perl曾经是他学习的第一门语言。但是,Perl目前主要用于简单的脚本编写,已经很少应用在机器学习的算法编写方面。

##老而弥坚的Python

最后,Raschka夸赞了自己所喜爱的Python语言。尽管Python已经走过了20多年的风雨历程,Raschka认为它仍然可以继续流行下去。而且,Raschka还不遗余力的列出了自己最喜欢的Python工具——NumPy、Theano、scikit-learn、matplotlib等。

至于Ruby、Java、Scala、Lua等,Raschka没有亲身体验,暂未点评。

对于Raschka的言论,很多人表示赞同,也有不少人反对。有人表示,自己从R切换到Python,主要原因也是Python更方便与团队之外的人进行合作和沟通。也有人表示,作为一个新入门的程序员,利用R进行数据科学的编程可以利用很多现成的库,十分得心应手。更有与Python打过8年交道的资深程序员表示,Julia十分具有吸引力,愿意花时间去尝试该语言。亲爱的读者朋友,你眼中最好的机器学习编程语言又是哪个呢?

0 comments on commit d357433

Please sign in to comment.