Python 为何发展迅速?基于 Stack Overflow 数据分析
Stack Overflow 最近的调查显示,Python 已经成了发展最快的主流编程语言,也是高收入国家访问中点击量最高的标签。为什么突然间 Python 就发展如此快了?
1. 背景与目的
本文旨在分析 Python 最近到底是在哪些具体的方面应用得更广了。作为一个数据科学领域的从业者,对 Python 在相关领域内的发展很感兴趣。通过解读 Stack Overflow 的数据,理解具体是哪些方面的 Python 应用在增长,以及在什么样的公司和组织中 Python 用得最多。
分析得出了两个主要结论:首先,对 Python 的使用发展得最快的主要有以下几个领域:数据科学、机器学习和学术研究。这一点从 Pandas 包的使用增长率就可以很容易看出,这也是网站上和 Python 相关的标签中访问量增长最快的。其次,关于行业分布,发现在电子、制造、软件、政府,尤其是大学中使用得更多些。不过,总体来看 Python 的增长在各个行业之间的分布还是比较均衡的。总之,我们可以从结论中看出数据科学和机器学习已经在许多不同类型的公司中普及开了,而 Python 则是在这个过程中为大家所普遍接受的选择。
我们的分析数据都来自于世界银行组织认可的高收入国家。
2. 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)。
3. 按主题的增长
现在我们已经看到与 Python 有关的 Stack Overflow 访问可以被大致分成几个主题。接下来我们就可以分析到底是哪些主题带来了 Stack Overflow 上 Python 访问量的巨大增长了。
想像一下,假设当我们查看一个用户的浏览历史时,我们发现 Python 是他访问得最多的标签。那我们怎么可以判断出他是一个网站开发者、数据科学家、系统管理员,或者别的什么呢?我们应该看看他访问得第二多的标签,然后是第三个,等等,顺着他的访问量列表一直看下去,直到发现了某些与上图中某个簇相关的东西。
我们总结出了下面的简单方法,可以将一个用户归类入某个主题。以下是用户最常访问的九个标签,根据这些就可以把他们分类了:


