2017年哪个公司对开源贡献最多?让我们用GitHub的数据分析下

开源
在这篇分析报告中,我们将使用2017年度截止至当前时间(2017年10月)为止,GitHub上所有公开的推送事件的数据。对于每个GitHub用户,我们将尽可能地猜测其所属的公司。此外,我们仅查看那些今年得到了至少20个星标的仓库。

在这篇分析报告中,我们将使用2017年度截止至当前时间(2017年10月)为止,GitHub上所有公开的推送事件的数据。对于每个GitHub用户,我们将尽可能地猜测其所属的公司。此外,我们仅查看那些今年得到了至少20个星标的仓库。

以下是我的报告结果,你也可以在我的交互式 Data Studio 报告上进一步加工。

***云服务商的比较

2017 年它们在 GitHub 上的表现:

  • 微软看起来约有 1300 名员工积极地推送代码到 GitHub 上的 825 个***仓库。
  • 谷歌显示出约有 900 名员工在 GitHub 上活跃,他们推送代码到大约 1100 个***仓库。
  • 亚马逊似乎只有 134 名员工活跃在 GitHub 上,他们推送代码到仅仅 158 个***项目上。
  • 不是所有的项目都一样:在超过 25% 的仓库上谷歌员工要比微软员工贡献的多,而那些仓库得到了更多的星标(53 万对比 26 万)。亚马逊的仓库 2017 年合计才得到了 2.7 万个星标。

2017年哪个公司对开源贡献最多?让我们用GitHub的数据分析下

红帽、IBM、Pivotal、英特尔和 Facebook

如果说亚马逊看起来被微软和谷歌远远抛在了身后,那么这之间还有哪些公司呢?根据这个排名来看,红帽、Pivotal 和英特尔在 GitHub 上做出了巨大贡献:

注意,下表中合并了所有的 IBM 地区域名(各个地区会展示在其后的表格中)。

2017年哪个公司对开源贡献最多?让我们用GitHub的数据分析下

2017年哪个公司对开源贡献最多?让我们用GitHub的数据分析下

Facebook 和 IBM(美)在 GitHub 上的活跃用户数同亚马逊差不多,但是它们所贡献的项目得到了更多的星标(特别是 Facebook):

2017年哪个公司对开源贡献最多?让我们用GitHub的数据分析下

接下来是阿里巴巴、Uber 和 Wix:

2017年哪个公司对开源贡献最多?让我们用GitHub的数据分析下

以及 GitHub 自己、Apache 和腾讯:

2017年哪个公司对开源贡献最多?让我们用GitHub的数据分析下

百度、苹果和 Mozilla:

2017年哪个公司对开源贡献最多?让我们用GitHub的数据分析下

(LCTT 译注:很高兴看到国内的***互联网公司阿里巴巴、腾讯和百度在这里排名前列!)

甲骨文、斯坦福大学、麻省理工、Shopify、MongoDb、伯克利大学、VmWare、Netflix、Salesforce 和 Gsa.gov:

2017年哪个公司对开源贡献最多?让我们用GitHub的数据分析下

LinkedIn、Broad Institute、Palantir、雅虎、MapBox、Unity3d、Automattic(WordPress 的开发商)、Sandia、Travis-ci 和 Spotify:

2017年哪个公司对开源贡献最多?让我们用GitHub的数据分析下

Chromium、UMich、Zalando、Esri、IBM (英)、SAP、EPAM、Telerik、UK Cabinet Office 和 Stripe:

2017年哪个公司对开源贡献最多?让我们用GitHub的数据分析下

Cern、Odoo、Kitware、Suse、Yandex、IBM (加)、Adobe、AirBnB、Chef 和 The Guardian:

2017年哪个公司对开源贡献最多?让我们用GitHub的数据分析下

Arm、Macports、Docker、Nuxeo、NVidia、Yelp、Elastic、NYU、WSO2、Mesosphere 和 Inria:

2017年哪个公司对开源贡献最多?让我们用GitHub的数据分析下

Puppet、斯坦福(计算机科学)、DatadogHQ、Epfl、NTT Data 和 Lawrence Livermore Lab:

2017年哪个公司对开源贡献最多?让我们用GitHub的数据分析下

我的分析方法

我是怎样将 GitHub 用户关联到其公司的

在 GitHub 上判定每个用户所属的公司并不容易,但是我们可以使用其推送事件的提交消息中展示的邮件地址域名来判断。

  • 同样的邮件地址可以出现在几个用户身上,所以我仅考虑那些对此期间获得了超过 20 个星标的项目进行推送的用户。
  • 我仅统计了在此期间推送超过 3 次的 GitHub 用户。
  • 用户推送代码到 GitHub 上可以在其推送中显示许多不同的邮件地址,这部分是由 GIt 工作机制决定的。为了判定每个用户的组织,我会查找那些在推送中出现更频繁的邮件地址。
  • 不是每个用户都在 GitHub 上使用其组织的邮件。有许多人使用 gmail.com、users.noreply.github.com 和其它邮件托管商的邮件地址。有时候这是为了保持匿名和保护其公司邮箱,但是如果我不能定位其公司域名,这些用户我就不会统计。抱歉。
  • 有时候员工会更换所任职的公司。我会将他们分配给其推送最多的公司。

我的查询语句

  1. #standardSQL 
  2. WITH 
  3. period AS ( 
  4.   SELECT * 
  5.   FROM `githubarchive.month.2017*` a 
  6. ), 
  7. repo_stars AS ( 
  8.   SELECT repo.id, COUNT(DISTINCT actor.login) stars, APPROX_TOP_COUNT(repo.name, 1)[OFFSET(0)].value repo_name  
  9.   FROM period 
  10.   WHERE type='WatchEvent' 
  11.   GROUP BY 1 
  12.   HAVING stars>20 
  13. ),  
  14. pushers_guess_emails_and_top_projects AS ( 
  15.   SELECT * 
  16.     # , REGEXP_EXTRACT(email, r'@(.*)') domain 
  17.     , REGEXP_REPLACE(REGEXP_EXTRACT(email, r'@(.*)'), r'.*.ibm.com''ibm.com') domain 
  18.   FROM ( 
  19.     SELECT actor.id 
  20.       , APPROX_TOP_COUNT(actor.login,1)[OFFSET(0)].value login 
  21.       , APPROX_TOP_COUNT(JSON_EXTRACT_SCALAR(payload, '$.commits[0].author.email'),1)[OFFSET(0)].value email 
  22.       , COUNT(*) c 
  23.       , ARRAY_AGG(DISTINCT TO_JSON_STRING(STRUCT(b.repo_name,stars))) repos 
  24.     FROM period a 
  25.     JOIN repo_stars b 
  26.     ON a.repo.id=b.id 
  27.     WHERE type='PushEvent' 
  28.     GROUP BY  1 
  29.     HAVING c>3 
  30.   ) 
  31. SELECT * FROM ( 
  32.   SELECT domain 
  33.     , githubers 
  34.     , (SELECT COUNT(DISTINCT repo) FROM UNNEST(repos) repo) repos_contributed_to 
  35.     , ARRAY( 
  36.         SELECT AS STRUCT JSON_EXTRACT_SCALAR(repo, '$.repo_name') repo_name 
  37.         , CAST(JSON_EXTRACT_SCALAR(repo, '$.stars'AS INT64) stars 
  38.         , COUNT(*) githubers_from_domain FROM UNNEST(repos) repo  
  39.         GROUP BY 1, 2  
  40.         HAVING githubers_from_domain>1  
  41.         ORDER BY stars DESC LIMIT 3 
  42.       ) top 
  43.     , (SELECT SUM(CAST(JSON_EXTRACT_SCALAR(repo, '$.stars'AS INT64)) FROM (SELECT DISTINCT repo FROM UNNEST(repos) repo)) sum_stars_projects_contributed_to 
  44.   FROM ( 
  45.     SELECT domain, COUNT(*) githubers, ARRAY_CONCAT_AGG(ARRAY(SELECT * FROM UNNEST(repos) repo)) repos 
  46.     FROM pushers_guess_emails_and_top_projects 
  47.     #WHERE domain IN UNNEST(SPLIT('google.com|microsoft.com|amazon.com''|')) 
  48.     WHERE domain NOT IN UNNEST(SPLIT('gmail.com|users.noreply.github.com|qq.com|hotmail.com|163.com|me.com|googlemail.com|outlook.com|yahoo.com|web.de|iki.fi|foxmail.com|yandex.ru''|')) # email hosters 
  49.     GROUP BY 1 
  50.     HAVING githubers > 30 
  51.   ) 
  52.   WHERE (SELECT MAX(githubers_from_domain) FROM (SELECT repo, COUNT(*) githubers_from_domain FROM UNNEST(repos) repo  GROUP BY repo))>4 # second filter email hosters 
  53. ORDER BY githubers DESC 

FAQ

有的公司有 1500 个仓库,为什么只统计了 200 个?有的仓库有 7000 个星标,为什么只显示 1500 个?

我进行了过滤。我只统计了 2017 年的星标。举个例子说,Apache 在 GitHub 上有超过 1500 个仓库,但是今年只有 205 个项目得到了超过 20 个星标。

2017年哪个公司对开源贡献最多?让我们用GitHub的数据分析下

2017年哪个公司对开源贡献最多?让我们用GitHub的数据分析下

这表明了开源的发展形势么?

注意,这个对 GitHub 的分析没有包括像 Android、Chromium、GNU、Mozilla 等***社区,也没有包括 Apache 基金会或 Eclipse 基金会,还有一些其它项目选择在 GitHub 之外开展起活动。

这对于我的组织不公平

我只能统计我所看到的数据。欢迎对我的统计的前提提出意见,以及对我的统计方法给出改进方法。如果有能用的查询语句就更好了。

举个例子,要看看当我合并了 IBM 的各个地区域名到其***域时排名发生了什么变化,可以用一条 SQL 语句解决:

  1. SELECT *, REGEXP_REPLACE(REGEXP_EXTRACT(email, r'@(.*)'), r'.*.ibm.com', 'ibm.com') domain 

 

2017年哪个公司对开源贡献最多?让我们用GitHub的数据分析下

2017年哪个公司对开源贡献最多?让我们用GitHub的数据分析下

当合并了其地区域名后, IBM 的相对位置明显上升了。

回音

关于“ GitHub 2017 年***贡献者”的一些思考

接下来

我以前犯过错误,而且以后也可能再次出错。请查看所有的原始数据,并质疑我的前提假设——看看你能得到什么结论是很有趣的。

  • 用一下交互式 Data Studio 报告

感谢 Ilya Grigorik 保留的 GitHub Archive 提供了这么多年的 GitHub 数据!

责任编辑:未丽燕 来源: Linux中国
相关推荐

2021-10-09 12:10:38

索尼Linux基金会开源

2024-01-29 18:04:24

前端框架TypeScript

2019-08-05 13:35:10

数据分析Python分析工具

2017-12-08 12:44:44

GithubiOS机器学习

2018-08-15 09:16:40

2019-12-10 09:14:12

数据分析初创公司大数据

2020-12-01 22:35:12

数据分析初创公司数据

2017-03-06 17:04:54

数据分析智能数据张冬梅

2017-03-22 22:52:52

大数据分析预测报告

2016-11-22 23:44:56

2017-03-20 10:22:58

大数据

2021-08-09 09:39:59

Docker部署镜像

2018-12-06 08:19:27

数据分析初创公司智能技术

2013-01-09 09:57:34

大数据分析大数据Actuate

2017-01-11 16:54:34

数据分析数据准备数据虚拟化

2017-08-03 15:20:19

大数据数据分析

2020-05-15 15:09:51

R语言数据分析

2017-02-09 15:46:09

数据分析互联网

2013-10-16 10:40:15

Facebook收购数据分析

2022-12-13 11:13:34

数据传感器
点赞
收藏

51CTO技术栈公众号