Stack Overflow 上最热门问题是什么?

要找到 Stack Overflow 全时最热问题很容易,但是当前最热问题能告诉我们现在的重要话题。在本文中,你可以了解到怎么才能得到当前最热话题。
从下图的交互面板中你可以得到具体问题的答案。下面,我们来看看它是怎么创建的。
交互面板的链接如下:https://datastudio.google.com/reporting/1UUTtohIB1fBH7e8An-6AhEn4AyU3eMjd/page/QwNg
最热 stack overflow 问题 – 全时 vs 当前

我们可以看到:
最热的全时 Stack Overflow 问题——九年以前创建的超过七百万阅读量——甚至不是一个编程问题: 我怎么才能撤销 Git 里我最近的一次提交?
前十个最热问题,4 个是 git 相关,3 个 JavaScript 相关,一个 Java 相关,一个 Linux 相关,一个 HTML 相关。还差什么?
前十没有 Python 的问题。意不意外?
我们再看看最近一个季度的最热的十个问题:

我们可以看到:
最热的问题还是“我怎么才能撤销 Git 里我最近的一次提交?”——最近一个季度有 40 万个阅读量。
编程相关的问题变了:现在 10 个问题里面有 4 个与 Python 相关。
Java 不见了——它不再出现在当前最热的十个问题里。
观察最热 30 个问题的标签的话,趋势会更加明显:

Java 和 SQL 已经从前 30 中掉落了。同时 Python 牢牢占据了阅读量前 10 和前 30 的榜单之首。
每个标签的最热问题是什么?
你可以看到任何一个标签的最热问题。在查看每个标签的最热问题之前,你可以先猜一下 JavaScript,Python 和 go 的最热问题是什么。
JavaScript, Python, Go: 问题各不相同

从这个面板中每个标签的前十个问题以及它们的趋势都一目了然。Python 开发者一直在问“用 for 来遍历字典”,JavaScript 开发者问“我怎么才能从一个数组中移除某个元素”,Go 开发者问“字节数组转 string 的最佳方法是什么”
TensorFlow 问题

人们对机器学习兴趣满满,而 TensorFlow 是该领域最热的项目之一。但是从最热的问题可以看出人们还在挣扎于“用 pip 无法安装 TensorFlow”以及他们当前的 CPU/GPU 能力问题。
TensorFlow 项目组可以用这个面板来追踪这些问题的趋势——比如说研究出一种傻瓜式的方法来用 pip 安装 TensorFlow。
Kotlin 十大热门问题: 当前 vs 以前
用这个面板你可以直接看到在任何一个季度的最热的十个问题。比如说,我们可以来比较一下 Kotlin 在 2018 年第四季度和 2017 年第二季度的最热十个问题:


看起来不错:大多数 2017 年的热门问题消失了,可以猜测,这个团队在解决用户遇到的常见问题方面做得很不错。2018 年第四季度的热门问题基本上都是新的,跟几个月以前的完全不一样。
Redis 热门问题——基于 Java vs C#
以下是 Redis 的十大热门问题:

可以看到,当前最热门的问题是怎么在 Windows 上安装 Redis。如果你是打算改进 Java 库的 Redis 开发人员,这个信息对你用处不大——好在这个面板可以过滤出子标签的信息。
我们再来看看 Redis+Java 的前十个热门问题:

如果我们过滤 redis 和 Java,我们会看到不一样的问题:比如说,大多数都与 Redis 和 Spring 有关。
而 Redis 和 C# 的热门问题就大有不同了:

有意思的是,Redis+Java 的热门问题问的是 C# 的简要案例。也许开发者们在官方文档中没找到?
一个问题,多个回答
在这个面板上,你还可以看到每个问题有多少回答。比如说,最热门问题“在 Rust 里如何将 String 转换为 int”有 5 个回答。Go 语言的“把字节数组转换为 string 的最好方法是什么”有 12 个不同的回答。

往前十更深探索
为什么在前十就停止了?你也可以接着去探索更深入的热门前 30 问题:


怎么实现:queries
你可以在 BigQuery 里面找到所有的数据。每三个月 Stack Overflow 都会公布一份他们最近的数据快照,我们可以拿来副本来做查询。
Stack Overflow 热门问题,当前 vs 全时
复制代码
| SELECT ( | |
| SELECT tag | |
| FROM UNNEST(tags) | |
| ORDER BY view_count DESC LIMIT 1 | |
| ) tag | |
| , * EXCEPT(tags) | |
| FROM ( | |
| SELECT quarter_views , view_count | |
| , ROW_NUMBER() OVER(ORDER BY quarter_views DESC) q_ranking | |
| , ROW_NUMBER() OVER(ORDER BY view_count DESC) ranking | |
| , ARRAY( | |
| SELECT AS STRUCT tag, b.view_count | |
| FROM UNNEST(tags) tag | |
| JOIN `fh-bigquery.stackoverflow_archive_questions.merged_aux_tags` b | |
| ON tag=b.tag | |
| ) tags, title | |
| FROM `fh-bigquery.stackoverflow_archive_questions.merged` | |
| WHERE quarter=’2018-12-01′ | |
| AND view_count > 50000 | |
| ) | |
| WHERE q_ranking<30 OR ranking <30 | |
| ORDER BY 1 DESC |
查找每个问题在某段时间内的阅读量
首先我存下了这段时间的每个快照的副本,然后开始计算这些快照之间的阅读量的变化。
好在查询语句看起来很简单:
复制代码
| CREATE OR REPLACE TABLE `stackoverflow_archive_questions.merged` | |
| AS | |
| SELECT | |
| IFNULL( | |
| view_count – | |
| LAG(view_count) OVER(PARTITION BY id ORDER BY view_count) | |
| , view_count) quarter_views, * | |
| FROM ( | |
| SELECT PARSE_DATE(‘%Y%m’,_table_suffix) quarter | |
| , id, view_count | |
| , SPLIT(tags, ‘|’) tags | |
| , score, creation_date, answer_count | |
| , accepted_answer_id, title | |
| FROM `fh-bigquery.stackoverflow_archive_questions.q*` | |
| ) |
每个标签的热门问题
复制代码
| #standardSQL | |
| SELECT title, quarter_views, view_count | |
| FROM `fh-bigquery.stackoverflow_archive_questions.merged` | |
| WHERE ‘google-cloud-dataflow’ IN UNNEST(tags) | |
| AND quarter=’2018-12-01′ | |
| ORDER BY quarter_views DESC | |
| LIMIT 10 |

超过一年没有更新的当前最热问题
复制代码
| #standardSQL | |
| WITH top_questions AS ( | |
| SELECT id, title, quarter_views, view_count | |
| FROM `fh-bigquery.stackoverflow_archive_questions.merged` | |
| WHERE ‘google-cloud-dataflow’ IN UNNEST(tags) | |
| AND quarter=’2018-12-01′ | |
| ), latest_answer AS ( | |
| SELECT parent_id, DATE(MAX(COALESCE(last_edit_date, last_activity_date, creation_date))) answer_last_edit_date | |
| FROM `bigquery-public-data.stackoverflow.posts_answers` b | |
| GROUP BY parent_id | |
| ) | |
| SELECT SUBSTR(title, 0,80) title, quarter_views, view_count, answer_last_edit_date | |
| FROM top_questions a | |
| JOIN latest_answer b | |
| ON a.id=b.parent_id | |
| WHERE DATE_DIFF(CURRENT_DATE(), answer_last_edit_date, DAY)>360 | |
| ORDER BY quarter_views DESC | |
| LIMIT 10 |

英文原文:
本文文字及图片出自 InfoQ
你也许感兴趣的:
- 【外评】为什么 Stack Overflow 正在消失?
- 趣图:Stack Overflow上的讨论对比Github上的讨论
- Stack Overflow年度开发者报告:中国开发者最乐观 Rust 连续四年最受开发者喜爱
- Stack Overflow 2019 开发者调查报告发布,Python 或成赢家?
- Stack Overflow最新薪资计算器出炉:DevOps和Go语言开发者是大赢家
- Stack Overflow 上古怪恼人的规矩
- [外文翻译]为什么Stack Overflow需要用几年时间才把网站迁移到HTTPS
- Stack Overflow COO:如何招聘并留住高质量的技术型人才?
- 这不是笑话:Stack Overflow 教会了一百万开发者如何退出Vim
- Stack Overflow:我们如何赚钱
你对本文的反应是: