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

jopen 5年前
   <p style="text-align: center;"><a href="/misc/goto?guid=4958532088171536400" title="Python"><img alt="为什么Python发展得如此之快?" src="https://simg.open-open.com/show/b83ea5eff6a00f09590e11f864f980a7.gif" /></a></p>    <p>Stack Overflow 最近的调查<a href="https://stackoverflow.blog/2017/09/06/incredible-growth-python/?utm_source=so-owned&utm_medium=blog&utm_campaign=gen-blog&utm_content=blog-link&utm_term=why-python-growing-quickly">显示</a>,Python 已经成了发展最快的主流编程语言,也是 Stack Overflow 上来自<a href="https://stackoverflow.blog/2017/08/29/tale-two-industries-programming-languages-differ-wealthy-developing-countries/?utm_source=so-owned&utm_medium=blog&utm_campaign=gen-blog&utm_content=blog-link&utm_term=why-python-growing-quickly">高收入国家</a>的访问中,点击量最高的标签。</p>    <p>为什么 Python 发展得这么快?Python 的应用范围非常广,从网站开发到数据科学,再到 DevOps,到处都可以看到它的身影。所以值得认真研究一下 Python 最近到底是在哪些具体的方面应用得更广了。我是一个使用R语言的数据科学家,我对 Python 在我从事的领域内的发展很感兴趣。在本文中,我会从另一个角度解读 Stack Overflow 的数据,理解具体是哪些方面的 Python 应用在增长,以及在什么样的公司和组织中 Python 用得最多。</p>    <p>分析得出了两个结论。首先,对 Python 的使用发展得最快的主要有以下几个领域:数据科学、机器学习和学术研究。这一点从 <a href="/misc/goto?guid=4959011357311372192">Pandas</a> 包的使用增长率就可以很容易看出,这也是网站上和 Python 相关的标签中访问量增长最快的。至于是哪些行业在使用 Python,我们发现在下面几个行业使用得更多些:电子、制造、软件、政府,尤其是大学。不过,总体来看 Python 的增长在各个行业之间的分布还是比较均衡的。总之,我们可以从结论中看出数据科学和机器学习已经在许多不同类型的公司中普及开了,而 Python 则是在这个过程中为大家所普遍接受的选择。</p>    <p>我们的分析数据都来自于<a href="/misc/goto?guid=4959011357406018206">世界银行组织认可的高收入国家</a>。</p>    <p><strong>Python 发展的类型</strong></p>    <p>Python 是可以适用于多种用途的编程语言,可以用于网站开发、数据科学等各种不同类型的任务。那我们该怎样整理出 Python 最近在这些领域之间的发展情况呢?</p>    <p>作为新手,我们可以查看每个领域内最有名的 Python 包,看看代表它们的标签的访问量的增长情况。可以把网站开发框架 Django 和 Flask 与数据科学的包 NumPy、Matplotlib 和 Pandas 等进行对比。(你也可以用 <a href="/misc/goto?guid=4959011357499082062">Stack Overflow Trends</a> 来比较问题的提问率,而不仅仅是访问量)</p>    <p style="text-align:center"><img alt="为什么Python发展得如此之快?" src="https://simg.open-open.com/show/55cdba9bdd93a2821de02385cbff81b0.png" /></p>    <p>从来自于高收入国家的 Stack Overflow 访问量来看,很明显 Pandas 是增长最快的 Python 包:它在 2011 年才刚刚出现,现在 Stack Overflow 上却有约1% 的问题是关于它的。随着时间的增长,关于 NumPy 和 Matplotlib 的问题量也有了很大增长。与之形成对比的是,与 Django 相关的问题量在这段时间内保持得很平稳,Flask 虽然有所增长,但占比还比较小。这表明 Python 的增长应该主要归功于数据科学,而不是网站开发。</p>    <p>但这么看还不全面,因为这里只显示出了那些应用很广的 Python 特有的包。系统管理员和 DevOps 工程师们也在很多地方用到了 Python,他们提的 Python 问题也会涉及 Linux、Bash 和 Docker 等。同样,很多与 Python 有关的网站开发问题没有提到 Django 或 Flask,那些开发者提的问题关联的是 JavaScript、HTML 和 CSS 之类的“技术支持”标签。但我们不能把 Linux、Bash、JavaScript 等标签也直接考虑进来,武断地假设它们就是与 Python 相关的。因此,我们只探讨那些与 Python 被一起提到的标签。</p>    <p>我们只考虑 2017 年夏天(七月和八月)的访问量,这样就排除了学生的影响,而且还排除了跨越很长统计周期带来的巨大计算量问题。我们只考虑已注册的用户,而且要在这个时间段内起码浏览过 50 个 Stack Overflow 上的问题。我们认为要把一个人称为 Python 用户至少要满足两个条件:1、他浏览的标签主要是 Python;2、他访问的页面至少有 20% 是与 Python 相关的。</p>    <p><strong>常浏览与 Python 有关标签的人还会喜欢浏览哪些标签?</strong></p>    <p style="text-align:center"><img alt="为什么Python发展得如此之快?" src="https://simg.open-open.com/show/05cafee82c037a5c2cf073c567dc3b2f.png" /></p>    <p>Pandas 毫无悬念地成为 Python 开发者们访问得最多的标签,经过上文的分析我们就不会对此感到惊奇了。Python 开发者们访问得第二多的标签是 JavaScript,这代表了用 Python 做网站开发的那群人,下面不远的 Django 也是这样。这证实了我们的想法,我们应该考虑那些与 Python 一起被访问的标签,而不只是一般意义上与 Python 有关的标签的增长情况。</p>    <p>在列表的下面部分可以看到其它的技术“簇”。我们考虑哪些标签是倾向于被关联起来的,以此来发现它们之间的关系:即 Python 用户对两个标签的访问量是否会相差甚远。用高度皮尔森相关算法将标签成对过滤之后,我们可以得到如下的网络图。类似这样的可视化技巧还有<a href="http://tidytextmining.com/ngrams.html#counting-and-correlating-pairs-of-words-with-the-widyr-package/?utm_source=so-owned&utm_medium=blog&utm_campaign=gen-blog&utm_content=blog-link&utm_term=why-python-growing-quickly">很多</a>。</p>    <p style="text-align:center"><img alt="为什么Python发展得如此之快?" src="https://simg.open-open.com/show/ab2109bec50a2d8bc01891cb7975c4ca.png" /></p>    <p>从图中可以看到,几个比较大的技术簇可以粗略地描述出一般可以用 Python 解决的几类问题。图上面中间部分展示的是数据科学和机器学习的簇:中间是 Pandas、NumPy 和 Matplotlib,它们与R、Keras 和 TensorFlow 等技术紧密相连。下面的簇代表了网站开发,与 JavaScript、HTML、CSS、Django、Flask 和 JQuery 等相连。图中还有两个小簇,一个是系统管理和 DevOps,另一个是右边的数据工程(Spark、Hadoop 和 Scala)。</p>    <p><strong>按主题的增长</strong></p>    <p>现在我们已经看到与 Python 有关的 Stack Overflow 访问可以被大致分成几个主题。接下来我们就可以分析到底是哪些主题带来了 Stack Overflow 上 Python 访问量的巨大增长了。</p>    <p>想像一下,假设当我们查看一个用户的浏览历史时,我们发现 Python 是他访问得最多的标签。那我们怎么可以判断出他是一个网站开发者、数据科学家、系统管理员,或者别的什么呢?我们应该看看他访问得第二多的标签,然后是第三个,等等,顺着他的访问量列表一直看下去,直到发现了某些与上图中某个簇相关的东西。</p>    <p>我们总结出了下面的简单方法,可以将一个用户归类入某个主题。以下是用户最常访问的九个标签,根据这些就可以把他们分类了。</p>    <ul>     <li>数据科学家:Pandas、NumPy 或 Matplotlib;</li>     <li>网站开发者:JavaScript、Django、HTML;</li>     <li>系统管理员或 DevOps:Linux、Bash 或 Windows;</li>     <li>其它:除上面的九个标签之外,其它标签所占的流量都不超过5%。</li>    </ul>    <p>这样做虽然不够严密,但已经足以让我们快速地评估每一类 Python 增长带来的影响了。我们也试过像<a href="/misc/goto?guid=4959011357680020644">潜在狄利克雷分布</a>这样更严格的算法,但得到的结果都差不多。</p>    <p>哪一类 Python 开发者慢慢地变得越来越多?注意我们是在将用户分类,而不是将被浏览的问题分类,我们展示的是 Stack Overflow 上所有注册用户(包括了没有访问 Python 的那些)的一部分。</p>    <p style="text-align:center"><img alt="为什么Python发展得如此之快?" src="https://simg.open-open.com/show/d175a254d291cf5d78b4f058fb50467a.png" /></p>    <p>上图显示在过去的三年里,因网站或系统管理等相关的技术而产生的 Python 浏览量增长相对缓慢而平稳。但与数据科学相关的 Python 浏览量却增长得非常快。这表明在数据科学和机器学习领域 Python 的广泛应用应该就是它快速增长的主要推动力了。</p>    <p>我们还要计算在 2016 和 2017 年间 Python 开发者对各个标签的访问量来判断单个标签的访问量增长情况。比如,也有可能 Javascript 的流量从整体看比较平稳,但事实上在 Python 用户内部访问量的百分比却有所下降。在得到了这样的基于标签的增长率之后,就可以把这些结果展示在我们的网络图中,用于理解哪些主题在增长,哪些在萎缩了。</p>    <p style="text-align:center"><img alt="为什么Python发展得如此之快?" src="https://simg.open-open.com/show/92a668182a877ba5b69e76f064d9e190.png" /></p>    <p>这帮助我们证实了猜想,绝大部分与 Python 有关的增长都是与数据科学和机器学习相关的。那些簇的颜色在朝着橙色发展,表明相应的标签已经开始成为 Python 生态系统中的主要部分了。</p>    <p><strong>行业</strong></p>    <p>理解 Python 使用量增长的另一个角度是考虑相应的浏览量来自于什么类型的公司。这个角度与考虑浏览网页的开发者类型的不同之处在于,零售公司和媒体公司都会同时雇佣数据科学家和网站开发者。</p>    <p>我们主要关注 Python 增长量非常大的两个国家:美国和英国。在这两个国家中,我们可以把访问量按行业拆分开来(就像比较 <a href="https://stackoverflow.blog/2017/07/21/trends-cloud-computing-uses-aws-uses-azure/?utm_source=so-owned&utm_medium=blog&utm_campaign=gen-blog&utm_content=blog-link&utm_term=why-python-growing-quickly">AWS 和 Azure</a> 一样)。</p>    <p style="text-align:center"><img alt="为什么Python发展得如此之快?" src="https://simg.open-open.com/show/74b5d1f957226ac55acbe3854e15e066.png" /></p>    <p>访问量高居榜首的是以高等院校为主的学术界。原因是现在的本科生们在编程课上学的都是 Python 吗?</p>    <p>这样说有道理,但不完全正确。我们在<a href="/misc/goto?guid=4959011357865307722">之前的一篇文章</a>中提到过,来自高校的 Python 访问量在夏天是很平稳的,不只在春天和秋天是这样。比如,在来自高校的访问量中 Python 和 Java 都很高,但按季节来划分却可以看到差别。</p>    <p style="text-align:center"><img alt="为什么Python发展得如此之快?" src="https://simg.open-open.com/show/05cc50e30f07b29131aeb06929af1ad0.png" /></p>    <p>从百分比可以看到,每年一到夏天 Java 的访问量就会出现断崖式下跌,因为在大学生的课堂上 Java 课已经很普通了。与之对比,每年夏天的流量中 Python 占比却很高。因此高校 Python 问题的主要流量是来自于学术研究者们,因为他们整年都在持续不断地工作。这也从另一个角度为 Python 的增长主要来自于科学计算和数据分析提供了证据。</p>    <p><a href="https://stackoverflow.blog/2017/07/12/trends-government-software-developers/?utm_source=so-owned&utm_medium=blog&utm_campaign=gen-blog&utm_content=blog-link&utm_term=why-python-growing-quickly">政府部门</a>大量地使用了 Python,应用增长非常迅速,Python 在电气和制造业中也应用得非常广泛。我对这些行业没那么熟悉,因此也很想知道其中的原因。Python 在零售业和保险公司中的应用不多,有些调查显示在那里 Java 仍是主流。</p>    <p>这篇文章的主旨在于调查 Python 增长的原因。Python 的流量是不是在某些行业中增长得特别多呢?</p>    <p style="text-align:center"><img alt="为什么Python发展得如此之快?" src="https://simg.open-open.com/show/db272152c121a897ab03efbb78276c4e.png" /></p>    <p>至少从美国和英国的数据来看,去年 Python 的应用已经在许多行业中推广开来。在每个行业中,Python 带来的流量都有百分之二到三的绝对数量的增长。(注意这就意味着与保险、零售之类应用得没那么广泛的行业对比,在上述行业中的相对增长就更大了)</p>    <p>根据 2017 年迄今为止的数据,在大多数行业中 Java 仍然是被访问得最多的标签,但 Python 一直在保持增长。比如从金融业(Stack Overflow 流量的一个大贡献者)的数据来看,Python 标签的访问量已经从 2016 年的第四位提升到了 2017 年的第二位。</p>    <p><strong>结论</strong></p>    <p>作为一个以前使用 Python,现在使用R的数据科学家,看了这个分析之后我是不是该换回来继续使用 Python 呢?</p>    <p>我不觉得。一方面,R的增长势头也很好,之前的一篇文章显示它在发展最快的编程语言排行榜中仅次于 Python。另一方面,我喜欢用R做数据分析,这与它被应用的广泛度关系不大。我也在计划再写一篇文章讲讲我从 Python 换到R的经历,我喜欢这两种语言的哪些特性,以及为什么我不愿意被迫换回去。</p>    <p>不管怎样,数据科学都是令人兴奋而又发展迅速的领域,自然也会有多种语言在其中共同发展。我的主要目的是想鼓励刚入行的开发者们考虑培养他们在数据科学领域内的技能集。毫无疑问这是软件开发领域发展得最快的部份,也在许多行业里都得到了充分的推广。</p>    <p>来自: <a href="/misc/goto?guid=4959011358052005033" id="link_source2">InfoQ</a></p>