【51CTO.com快译】在Stack Overflow数据团队当中,我们投入了大量时间与精力考量技术生态系统,以及各类技术方案间的相互关联。我们随处运用这些关联,旨在发布相关内容建议以帮助客户了解如何招聘开发人员,最终提升Stack Overflow的用户体验。实现这种技术关联结论的方式之一在于建立标签相关性。标签间的相关性负责衡量各标签协同起效与独立起效频度间的比例。
协同与独立
我们掌握大量可用于衡量标签相关性的数据源。例如,Stack Overflow工程技术经理Matt Sherman开发出一款工具,可用于衡量Stack Overflow问题之上标签的叠加频率。我们还使用流量数据并查看用户对各代码对的访问频率。为了实现分析,我们使用多种数据集,包括在开发者故事中使用“喜欢的标签”。其它开发者故事中也存在类似的信号,我们可以观察这些标签的分布及其相关性,从而了解技术间如何彼此关联。值得一提的是,开发者故事标签拥有出色的信噪比。我们关注技术间的关联起协同效应,而开发者自身提供的工作与职业描述能够很好地揭示出这种效应。
从这里开始,我们先看看使用频率***的标签。可以看到,今天我们关注的是开发者最常用的编程语言。
接下来,我们计算标签的共同出现次数,并找出哪些标签通常一同出现。例如在开发者故事中,最常使用的几种重要语言(例如C#、C++、JavaScript以及Python)的开发者故事标签是什么?
请注意,这里出现的仍然是我们在上一场景下看到的常见重要语言。Java、C这四种重要语言在开发者故事中被频繁共同使用,但这只能体现其作为常见技术的特性。要探索标签相关性,我们需要提出新的问题——哪些标签与这四种语言相关度***?
现在我们看到了不同的技术组合。这些标签在开发者故事当中以更高频度同四大重要语言关联起来,现在我们开始对Stack Overflow上的开发者总体数据以深入了解各项技术间的交互。例如,我们发现多数开发者使用Python与R、Pandas以及NumPy语言处理数据科学任务,而配合Django与Flask则更多见于Web应用开发。通过计算标签相关性,我们得以发现这些技术间的真实关系。
相关性网络
我们并非只能一次查看一个标签。我们可以将这种相关性扩展到更多标签,并根据其彼此关联建立起一套标签网络。
在这套交互网络视图中(您可以缩放、滚动以及点击),各个圆圈的大小代表着标签的使用频率; 圈子越大,标签使用频度越高。基于其在网络中的子组成员身份,圆圈会通过大量随机游走进行计算。此网络包含的标签皆在开发者故事中拥有超过800次使用次数,且相关性较其它标签高0.1以上。
我们可以通过这套网络获得大量结论!可以注意到,网络中的各个分组展示了整体技术生态系统——其中一些彼此紧密相连。我们可以看到其中一部分分组包含:
§ 从HTML到JavaScript再到Bootstrap的前端Web开发技术
§ 包括C#、.NET以及SQL Server在内的微软相关技术
§ AWS与Docker等DevOps技术(Go亦属于这部分)
§ 包括Android与Objective-C的移动技术
您使用的技术在哪里,其与哪些技术存在关联?大家可以自行探索这套网络并找到答案。该网络数据结构公开于Kaggle数据集内。大家也可以查看我创建的Kaggle内核以了解如何使用这些网络节点及链接以创建类似的网络图形。
另外需要注意的是,一部分技术属于不同技术生态系统间的桥梁。Python是开发者故事中出镜率***的语言之一,其与前端范围相关(通过Django),亦与Linux/系统管理范畴相关,同样与C/C++嵌入式范畴乃至R与机器学习相关。除了Python之外,Java、git以及JSON也属于这类“桥梁”技术。
利用开发者故事中“喜欢的标签”数据,我们得以构建起这套丰富且复杂的技术网络。开发者将我们视为真正关注其需求的专家,而我们则可借此真正了解开发者社区。
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】