获取 Stack Overflow 上的季度页面浏览量并不容易,在这篇文章中,我们将向你介绍这些数据的意义所在,以及获取这些数据的过程。
根据 Stack Overflow 的趋势统计工具,网站中打上 tensorflow 标签的问题现在比 git 的更受欢迎:
那这个数据是否有什么意义?虽然 tensorflow 获得了更多的关注,但 git 是开发者中最流行的开发工具之一 —— 无论是否在机器学习技术社区内。事实证明,这个趋势工具可以衡量每个标签下面的新问题数量,但这只是反映现象的一半情况。如果我们可以比较每个标签获得的网页浏览量百分比和问题的百分比:
上图:'git' 在 Stack Overflow 上的浏览量百分比,比较对象是 'tensorflow';下图:Stack Overflow 上每个标签的新问题百分比。可以看到,'git' 获得的新问题数量在减少,但拥有更高的页面浏览量。
所以发生了什么事?不妨看回图表,即使 tensorflow 标签下的问题每个季度都会创建得更多,但 git 标签下的问题获得的浏览数至少是 tensorflow 标签的 6 倍。
我们可以看看 .net vs firebase、c++ vs r 以及 .net vs typescript 的类似趋势:
这些图表显示,在 '.net' vs 'firebase','c++' vs 'r' 和 '.net' vs 'typescript' 中,其中一种技术获得了更多的浏览量,而另一种获得了更多的新问题数量。
因此你可以在这里看到,衡量新问题的数量只能反映一半的现象。如果你是 Stack Overflow 博客的粉丝,你会发现即使他们在很多地方都用到了这个页面浏览量的百分比。
所以结论就是,要观察 Stack Overflow 上相关技术的趋势不能单看一个指标,或许某种技术在某个指标下的分数很高,但这只能反映这种指标下的现象,要做到综合评估,就需要综合看待各项指标。像上面的情况,关于新技术的问题数量肯定是会不断增加的,但不能表明比较老的技术就呈现“疲软”的状态,因为浏览它们的用户依旧有很多,问题少的原因可能是绝大部分的问题都有答案了。相对而言,新技术仍处于“踩坑-填坑”阶段,自然就会产生更多的新问题。
Java 和 JavaScript 一直都是最受关注的标签 —— 但 JavaScript 标签每季度都会有更多的新问题。
Python 标签的问题数量正在快速赶上!不过与 JavaScript 相比,它仍然少得多,但 Python 标签的页面浏览量比 Java 和 JavaScript 要多。
就页面浏览量而言,C# 也是排在前面的标签,不过 C# 标签的问题数量未能排在前五。另一方面,PHP 标签的问题数量十分多,不过它的页面浏览量也没能排在前五。
如果 angularjs 正在死亡,谁将会替代它的位置?毫无疑问将会是 angular!你可以通过问题数量和浏览量明显看到新标签是如何接替旧标签的。
reactjs 一直处在上升的趋势。
vue.js 比其他替代方案更受大家关注,但仍有很长的路要走。
TensorFlow 和 Kera 几乎占了机器学习领域的大多数问题,以及关注度。
PyTorch 和 MxNet 几乎无人问津。Caffe 在 2017 年表现强劲,但最近它的数据表现也逐渐滑落。
明显可以看到,Swift 的数据表现可谓是甩其他的一条街。
Go 标签的浏览量明显比问题数量要高。
Kotlin 是增长得最快的。
Haskell 和 Rust:两者都保持着稳定的发展趋势
#standardSQL WITH historic_views AS ( SELECT *, '201703' q FROM `fh-bigquery.stackoverflow_archive.201703_posts_questions` UNION ALL SELECT *, '201706' q FROM `fh-bigquery.stackoverflow_archive.201706_posts_questions` UNION ALL SELECT *, '201709' q FROM `fh-bigquery.stackoverflow_archive.201709_posts_questions` UNION ALL SELECT *, '201712' q FROM `fh-bigquery.stackoverflow_archive.201712_posts_questions` UNION ALL SELECT *, '201803' q FROM `fh-bigquery.stackoverflow_archive.201803_posts_questions` UNION ALL SELECT *, '201806' q FROM `fh-bigquery.stackoverflow_archive.201806_posts_questions` ), top_tags AS ( SELECT value FROM UNNEST(( SELECT APPROX_TOP_COUNT(tags, 5000)top FROM `fh-bigquery.stackoverflow_archive.201803_posts_questions` WHERE NOT tags LIKE '%|%')) WHERE count > 10), views_per_tag AS ( SELECT tag, COUNTIF(DATE(creation_date) BETWEEN DATE_SUB(PARSE_DATE('%Y%m', q), INTERVAL 3 MONTH) AND PARSE_DATE('%Y%m', q)) questions , SUM(view_count) views_cum, PARSE_DATE('%Y%m', q) q FROM historic_views, UNNEST(SPLIT(tags, '|')) tag GROUP BY tag, q ), views_per_q AS ( SELECT *, views_cum - LAG(views_cum, 1) OVER(PARTITION BY tag ORDER BY q) views FROM views_per_tag ), percents AS ( SELECT * , 100*views/SUM(views) OVER(PARTITION BY q) views_percent , 100*questions/SUM(questions) OVER(PARTITION BY q) questions_percent FROM views_per_q WHERE views IS NOT null AND tag IN (SELECT value FROM top_tags) )SELECT *FROM percents
#standardSQL WITH toptags AS ( SELECT * FROM `fh-bigquery.stackoverflow.201806_stacko_tags_views` WHERE q='2018-06-01' AND tag NOT IN ('string', 'git', 'sql') AND views_percent>0.05 ) SELECT a.tag, b.tag btag, a.views_percent - b.views_percent FROM toptags a JOIN toptags b ON a.tag!=b.tag AND a.views_percent>b.views_percent AND a.questions_percent< b.questions_percent ORDER by 3 DESC
(文/开源中国)