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

2017 年 10 月 18 日

本文翻译自“ 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 的经历,我喜欢这两种语言的哪些特性,以及为什么我不愿意被迫换回去。

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

感谢郭蕾对本文的审校。

2017 年 10 月 18 日 17:394668
用户头像

发布了 152 篇内容, 共 57.9 次阅读, 收获喜欢 52 次。

关注

评论

发布
暂无评论
发现更多内容

天啊!怎么会有人把Spring Cloud微服务架构讲得这么透彻?

Java成神之路

Java 程序员 架构 面试 编程语言

话题讨论 | 那些年奇葩的面试经历

三号无名指

话题讨论

架构词典:SLA

lidaobing

架构 SLA

Gemini双子新约软件系统开发|Gemini双子新约APP开发

开發I852946OIIO

系统开发

如何在高速发展中等一等老人 银行数字化服务显温度

CECBC区块链专委会

银行 养老服务

二本毕业、两年Javacrud经验,面试阿里侥幸通过成功拿到P6级offer,分享面经!

Java成神之路

Java 程序员 架构 面试 编程语言

default-servlet-handler不生效原因,springmvc静态资源拦截方案比较

叫练

springmvc 静态资源拦截 default-servlet-handler 资源配置不生效

腾讯云区块链总经理李力:产业区块链的四大发展趋势

CECBC区块链专委会

区块链 大数据

移动端技术方案设计的经验总结

张明云

android 架构 移动应用 架构师 技术方案

面试被问线程安全怎么保障,我的回答让面试官眼前一亮

996小迁

Java 学习 架构 面试 笔记

roblox 杂记

katichar

字节总监首发1121道LeetCode算法刷题笔记(含答案)

Crud的程序员

程序员 面试 算法 字节 面试刷题

一文搞懂RESTful API

bigsai

RESTful Rest

深入理解Git的实现原理

程序员小灰

c++ git Linux 项目管理 架构师

史上最优美的Android原生UI框架XUI使用指南

android UI 框架开发

Flutter Plugin插件开发填坑指南

flutter 经验分享

技术博客,从零到数万访问,这两年我都做了什么

android 博客 经验分享

网络入门模拟器:Cisco Packet Tracer

网络技术平台

架构师训练营第12周作业

邓昀垚

Java对IPv6的支持详解:支持情况、相关API、演示代码等

JackJiang

Java 网络编程 ipv6 ipv4

史上最实用的Android切片应用库XAOP使用指南

android aop 开源项目 框架

架构师训练营第 12 周总结

邓昀垚

开源软件联盟PostgreSQL分会投稿指南

PostgreSQLChina

数据库 postgresql 软件 投稿

详解TCP IP网络协议栈底层原理到徒手实现

赖猫

c++ Linux 编程 程序 网络协议栈

京东T8Java架构师总结整理的《15w字的Java面试手册》,涵盖了大厂所有主流技术面试题及答案!

Java成神之路

Java 程序员 架构 面试 编程语言

我把Github上最牛b的Java教程和实战项目整合成了一个PDF文档

Java成神之路

Java 程序员 架构 面试 编程语言

史上最好用的Android全量版本更新库XUpdate使用指南

android UI 框架开发 xupdate

我是因为这个才选择当程序员的,那么你呢?

Java架构师迁哥

为什么说区块链完全去中心化做不到且没有意义

CECBC区块链专委会

区块链 去中心化

从构建小系统到架构分布式大系统,Spring Boot2的精髓全在这里了

Java成神之路

Java 程序员 架构 面试 编程语言

史上最全的开源项目创作指南

开源 经验分享

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