为什么Python发展得如此之快?

1,335 阅读11分钟
原文链接: www.infoq.com

本文翻译自“Why is Python Growing So Quickly?”,翻译已获得原作者David Robinson授权。

Stack Overflow最近的调查显示,Python已经成了发展最快的主流编程语言,也是Stack Overflow上来自高收入国家的访问中,点击量最高的标签。

为什么Python发展得这么快?Python的应用范围非常广,从网站开发到数据科学,再到DevOps,到处都可以看到它的身影。所以值得认真研究一下Python最近到底是在哪些具体的方面应用得更广了。我是一个使用R语言的数据科学家,我对Python在我从事的领域内的发展很感兴趣。在本文中,我会从另一个角度解读Stack Overflow的数据,理解具体是哪些方面的Python应用在增长,以及在什么样的公司和组织中Python用得最多。

分析得出了两个结论。首先,对Python的使用发展得最快的主要有以下几个领域:数据科学、机器学习和学术研究。这一点从Pandas包的使用增长率就可以很容易看出,这也是网站上和Python相关的标签中访问量增长最快的。至于是哪些行业在使用Python,我们发现在下面几个行业使用得更多些:电子、制造、软件、政府,尤其是大学。不过,总体来看Python的增长在各个行业之间的分布还是比较均衡的。总之,我们可以从结论中看出数据科学和机器学习已经在许多不同类型的公司中普及开了,而Python则是在这个过程中为大家所普遍接受的选择。

我们的分析数据都来自于世界银行组织认可的高收入国家

Python发展的类型

Python是可以适用于多种用途的编程语言,可以用于网站开发、数据科学等各种不同类型的任务。那我们该怎样整理出Python最近在这些领域之间的发展情况呢?

作为新手,我们可以查看每个领域内最有名的Python包,看看代表它们的标签的访问量的增长情况。可以把网站开发框架Django和Flask与数据科学的包NumPy、Matplotlib和Pandas等进行对比。(你也可以用Stack Overflow Trends来比较问题的提问率,而不仅仅是访问量)

从来自于高收入国家的Stack Overflow访问量来看,很明显Pandas是增长最快的Python包:它在2011年才刚刚出现,现在Stack Overflow上却有约1%的问题是关于它的。随着时间的增长,关于NumPy和Matplotlib的问题量也有了很大增长。与之形成对比的是,与Django相关的问题量在这段时间内保持得很平稳,Flask虽然有所增长,但占比还比较小。这表明Python的增长应该主要归功于数据科学,而不是网站开发。

但这么看还不全面,因为这里只显示出了那些应用很广的Python特有的包。系统管理员和DevOps工程师们也在很多地方用到了Python,他们提的Python问题也会涉及Linux、Bash和Docker等。同样,很多与Python有关的网站开发问题没有提到Django或Flask,那些开发者提的问题关联的是JavaScript、HTML和CSS之类的“技术支持”标签。但我们不能把Linux、Bash、JavaScript等标签也直接考虑进来,武断地假设它们就是与Python相关的。因此,我们只探讨那些与Python被一起提到的标签。

我们只考虑2017年夏天(七月和八月)的访问量,这样就排除了学生的影响,而且还排除了跨越很长统计周期带来的巨大计算量问题。我们只考虑已注册的用户,而且要在这个时间段内起码浏览过50个Stack Overflow上的问题。我们认为要把一个人称为Python用户至少要满足两个条件:1、他浏览的标签主要是Python;2、他访问的页面至少有20%是与Python相关的。

常浏览与Python有关标签的人还会喜欢浏览哪些标签?

Pandas毫无悬念地成为Python开发者们访问得最多的标签,经过上文的分析我们就不会对此感到惊奇了。Python开发者们访问得第二多的标签是JavaScript,这代表了用Python做网站开发的那群人,下面不远的Django也是这样。这证实了我们的想法,我们应该考虑那些与Python一起被访问的标签,而不只是一般意义上与Python有关的标签的增长情况。

在列表的下面部分可以看到其它的技术“簇”。我们考虑哪些标签是倾向于被关联起来的,以此来发现它们之间的关系:即Python用户对两个标签的访问量是否会相差甚远。用高度皮尔森相关算法将标签成对过滤之后,我们可以得到如下的网络图。类似这样的可视化技巧还有很多

从图中可以看到,几个比较大的技术簇可以粗略地描述出一般可以用Python解决的几类问题。图上面中间部分展示的是数据科学和机器学习的簇:中间是Pandas、NumPy和Matplotlib,它们与R、Keras和TensorFlow等技术紧密相连。下面的簇代表了网站开发,与JavaScript、HTML、CSS、Django、Flask和JQuery等相连。图中还有两个小簇,一个是系统管理和DevOps,另一个是右边的数据工程(Spark、Hadoop和Scala)。

按主题的增长

现在我们已经看到与Python有关的Stack Overflow访问可以被大致分成几个主题。接下来我们就可以分析到底是哪些主题带来了Stack Overflow上Python访问量的巨大增长了。

想像一下,假设当我们查看一个用户的浏览历史时,我们发现Python是他访问得最多的标签。那我们怎么可以判断出他是一个网站开发者、数据科学家、系统管理员,或者别的什么呢?我们应该看看他访问得第二多的标签,然后是第三个,等等,顺着他的访问量列表一直看下去,直到发现了某些与上图中某个簇相关的东西。

我们总结出了下面的简单方法,可以将一个用户归类入某个主题。以下是用户最常访问的九个标签,根据这些就可以把他们分类了。

  • 数据科学家:Pandas、NumPy或Matplotlib;
  • 网站开发者:JavaScript、Django、HTML;
  • 系统管理员或DevOps:Linux、Bash或Windows;
  • 其它:除上面的九个标签之外,其它标签所占的流量都不超过5%。

这样做虽然不够严密,但已经足以让我们快速地评估每一类Python增长带来的影响了。我们也试过像潜在狄利克雷分布这样更严格的算法,但得到的结果都差不多。

哪一类Python开发者慢慢地变得越来越多?注意我们是在将用户分类,而不是将被浏览的问题分类,我们展示的是Stack Overflow上所有注册用户(包括了没有访问Python的那些)的一部分。

上图显示在过去的三年里,因网站或系统管理等相关的技术而产生的Python浏览量增长相对缓慢而平稳。但与数据科学相关的Python浏览量却增长得非常快。这表明在数据科学和机器学习领域Python的广泛应用应该就是它快速增长的主要推动力了。

我们还要计算在2016和2017年间Python开发者对各个标签的访问量来判断单个标签的访问量增长情况。比如,也有可能Javascript的流量从整体看比较平稳,但事实上在Python用户内部访问量的百分比却有所下降。在得到了这样的基于标签的增长率之后,就可以把这些结果展示在我们的网络图中,用于理解哪些主题在增长,哪些在萎缩了。

这帮助我们证实了猜想,绝大部分与Python有关的增长都是与数据科学和机器学习相关的。那些簇的颜色在朝着橙色发展,表明相应的标签已经开始成为Python生态系统中的主要部分了。

行业

理解Python使用量增长的另一个角度是考虑相应的浏览量来自于什么类型的公司。这个角度与考虑浏览网页的开发者类型的不同之处在于,零售公司和媒体公司都会同时雇佣数据科学家和网站开发者。

我们主要关注Python增长量非常大的两个国家:美国和英国。在这两个国家中,我们可以把访问量按行业拆分开来(就像比较AWS和Azure一样)。

访问量高居榜首的是以高等院校为主的学术界。原因是现在的本科生们在编程课上学的都是Python吗?

这样说有道理,但不完全正确。我们在之前的一篇文章中提到过,来自高校的Python访问量在夏天是很平稳的,不只在春天和秋天是这样。比如,在来自高校的访问量中Python和Java都很高,但按季节来划分却可以看到差别。

从百分比可以看到,每年一到夏天Java的访问量就会出现断崖式下跌,因为在大学生的课堂上Java课已经很普通了。与之对比,每年夏天的流量中Python占比却很高。因此高校Python问题的主要流量是来自于学术研究者们,因为他们整年都在持续不断地工作。这也从另一个角度为Python的增长主要来自于科学计算和数据分析提供了证据。

政府部门大量地使用了Python,应用增长非常迅速,Python在电气和制造业中也应用得非常广泛。我对这些行业没那么熟悉,因此也很想知道其中的原因。Python在零售业和保险公司中的应用不多,有些调查显示在那里Java仍是主流。

这篇文章的主旨在于调查Python增长的原因。Python的流量是不是在某些行业中增长得特别多呢?

至少从美国和英国的数据来看,去年Python的应用已经在许多行业中推广开来。在每个行业中,Python带来的流量都有百分之二到三的绝对数量的增长。(注意这就意味着与保险、零售之类应用得没那么广泛的行业对比,在上述行业中的相对增长就更大了)

根据2017年迄今为止的数据,在大多数行业中Java仍然是被访问得最多的标签,但Python一直在保持增长。比如从金融业(Stack Overflow流量的一个大贡献者)的数据来看,Python标签的访问量已经从2016年的第四位提升到了2017年的第二位。

结论

作为一个以前使用Python,现在使用R的数据科学家,看了这个分析之后我是不是该换回来继续使用Python呢?

我不觉得。一方面,R的增长势头也很好,之前的一篇文章显示它在发展最快的编程语言排行榜中仅次于Python。另一方面,我喜欢用R做数据分析,这与它被应用的广泛度关系不大。我也在计划再写一篇文章讲讲我从Python换到R的经历,我喜欢这两种语言的哪些特性,以及为什么我不愿意被迫换回去。

不管怎样,数据科学都是令人兴奋而又发展迅速的领域,自然也会有多种语言在其中共同发展。我的主要目的是想鼓励刚入行的开发者们考虑培养他们在数据科学领域内的技能集。毫无疑问这是软件开发领域发展得最快的部份,也在许多行业里都得到了充分的推广。

感谢郭蕾对本文的审校。