2017年度开源贡献榜 国内阿里排第一
来源:互联网 发布:vue引入第三方js 编辑:程序博客网 时间:2024/04/30 02:33
原文:Who contributed the most to open source in 2017? Let’s analyze GitHub’s data and find out
作者:Felipe Hoffa
翻译:无阻我飞扬
摘要:作者依据来自GitHub 2017年度的数据,对近百家公司的开源贡献数据进行了分析排名,也对自己的分析方法做了说明,以下是译文。
这篇分析,我们将看到GitHub在2017年度发表的所有的pushevents
。对每个GitHub用户,我们不得不尽最大努力推测他们属于哪个组织。本分析只关注在 2017 年增长超过 20 个 star 的仓库。
下面是我的分析结果,大家可以在我的交互数据仓库报告中修改这些结果。
顶级云提供商的比较
2017年度GitHub数据:
- 微软大约有 1,300 名员工积极地将代码推送到 GitHub 上的 825 个顶级仓库。
- 谷歌大约有 900 名员工活跃于 GitHub,将代码推送到约 1,100 个顶级仓库。
- 亚马逊大约有 134 名员工活跃于 GitHub,将代码推送到 仅158 个顶级仓库。
- 并不是所有的项目都是公平的:谷歌员工贡献的代码仓库比微软的多了 25%,仓库获得的 star 数也更多(530,000 vs 260,000)。亚马逊仓库 2017年的 star 总数为 27,000。
RedHat, IBM, Pivotal, Intel, 和 Facebook
亚马逊远远落后于微软和谷歌,那处在它们之间的有哪些公司呢? 根据贡献情况排名如下:RedHat,Pivotal,Intel也对GitHub做出了突出贡献。
注意,下面的表格合并了所有的IBM全球的域名(IBM在各个国家的域名都会带有各个国家的域名后缀)——虽然各个区域仍旧出现在接下来的表格中。
Facebook 和 IBM(US) 的 GitHub 用户数量与亚马逊的相似,但它们贡献的项目收获到了更多的 star(尤其是 Facebook):
紧接着是Alibaba, Uber, 和 Wix:
GitHub自己,Apache 和 Tencent:
Baidu, Apple, Mozilla:
Oracle, Stanford, Mit, Shopify, MongoDb, Berkeley, VmWare, Netflix, Salesforce, Gsa.gov:
LinkedIn, Broad Institute, Palantir, Yahoo, MapBox, Unity3d, Automattic, Sandia, Travis-ci, Spotify:
Chromium, UMich, Zalando, Esri, IBM (UK), SAP, EPAM, Telerik, UK Cabinet Office, Stripe:
Cern, Odoo, Kitware, Suse, Yandex, IBM (Canada), Adobe, AirBnB, Chef, The Guardian:
Arm, Macports, Docker, Nuxeo, NVidia, Yelp, Elastic, NYU, WSO2, Mesosphere, Inria
Puppet, Stanford (CS), DatadogHQ, Epfl, NTT Data, Lawrence Livermore Lab:
我的方法
如何将GitHub用户和企业联系在一起
确定每个GitHub用户隶属于哪个组织并不容易—但是我们可以通过email的域名来确定,域名信息包含在提交的PushEvents里:
- 不止一个用户用同一个电子邮件,所以我们只能考虑到GitHub用户在同一时期可以将代码推送到超过20个star的GitHub 项目。
- 我只计同一时期超过3个推送的GitHub用户。
- 用户推送代码到GitHub可以在推送中显示许多不同的电子邮件—部分解释了Git是如何工作。为了确定每个用户的所属组织,查看他们推送显示最频繁的电子邮件。
- 不是每个人都会用自己组织的邮箱地址。在 Github 上有很多 gmail.com, users.noreply.github.com 或其它的邮箱。有时候出于保护自己企业邮箱的需要,用户会匿名——所以我看不见他们的邮件域名,那就没办法把他们计入进去了。
- 有时候雇员更换了组织,也就是跳槽了。我就把他们分配到获得更多推送的公司。
我的查询
#standardSQLWITHperiod AS ( SELECT * FROM `githubarchive.month.2017*` a),repo_stars AS ( SELECT repo.id, COUNT(DISTINCT actor.login) stars, APPROX_TOP_COUNT(repo.name, 1)[OFFSET(0)].value repo_name FROM period WHERE type='WatchEvent' GROUP BY 1 HAVING stars>20), pushers_guess_emails_and_top_projects AS ( SELECT *# , REGEXP_EXTRACT(email, r'@(.*)') domain, REGEXP_REPLACE(REGEXP_EXTRACT(email, r'@(.*)'), r'.*.ibm.com', 'ibm.com') domain FROM (SELECT actor.id , APPROX_TOP_COUNT(actor.login,1)[OFFSET(0)].value login , APPROX_TOP_COUNT(JSON_EXTRACT_SCALAR(payload, '$.commits[0].author.email'),1)[OFFSET(0)].value email , COUNT(*) c , ARRAY_AGG(DISTINCT TO_JSON_STRING(STRUCT(b.repo_name,stars))) reposFROM period aJOIN repo_stars bON a.repo.id=b.idWHERE type='PushEvent'GROUP BY 1HAVING c>3 )) SELECT * FROM ( SELECT domain, githubers, (SELECT COUNT(DISTINCT repo) FROM UNNEST(repos) repo) repos_contributed_to, ARRAY( SELECT AS STRUCT JSON_EXTRACT_SCALAR(repo, '$.repo_name') repo_name , CAST(JSON_EXTRACT_SCALAR(repo, '$.stars') AS INT64) stars , COUNT(*) githubers_from_domain FROM UNNEST(repos) repo GROUP BY 1, 2 HAVING githubers_from_domain>1 ORDER BY stars DESC LIMIT 3 ) top, (SELECT SUM(CAST(JSON_EXTRACT_SCALAR(repo, '$.stars') AS INT64)) FROM (SELECT DISTINCT repo FROM UNNEST(repos) repo)) sum_stars_projects_contributed_to FROM (SELECT domain, COUNT(*) githubers, ARRAY_CONCAT_AGG(ARRAY(SELECT * FROM UNNEST(repos) repo)) reposFROM pushers_guess_emails_and_top_projects#WHERE domain IN UNNEST(SPLIT('google.com|microsoft.com|amazon.com', '|'))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 hostersGROUP BY 1HAVING githubers > 30 ) 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)ORDER BY githubers DESC
常见问题解答
如果一个组织有1500个仓库,为什么只计算200个呢?如果一个仓库有7000个star,为什么只显示1500个?
我做了关联过滤,只计算了2017年度的star数。例如,在GitHub上Apache有大于1500个仓库,但在2017年,只有205个收到多于20个star数。
这是开源的现状吗?
请注意,分析GitHub数据不包括顶级的团体,如Android,Chromium, GNU, Mozilla,也不包括Apache或者Eclipse基金会,还有一些其它项目选择在GitHub之外运行它们的大部分活动。
对我的组织不公平
我只能计算我所能看见的。大家可以质疑我的臆断,告诉我你如何用更好的方式来衡量。工作查询是最好的方法。
例如,当将IBM的基于区域的域名用一个SQL转换语句合并为顶级域名时,看看它们的排名是如何变化的:
SELECT *, REGEXP_REPLACE(REGEXP_EXTRACT(email, r'@(.*)'), r'.*.ibm.com', 'ibm.com') domain
(当合并IBM的区域电子邮件域名时,它的相对排名发生显著变化)
接下来的步骤
我以前可能错过——错误可能还会再次发生。请看看GitHub所有可用的原始数据,并质疑我所有的臆断——那会很酷,可以看看你会得到什么样的结果。
用交互式数据仓库报告
- 2017年度开源贡献榜 国内阿里排第一
- GitHub开源贡献榜:微软超越Facebook和Google排第一
- 为开源事业贡献了第一份力量
- GitHub 贡献第一的微软开源软件列表
- 国内H5页面制作工具评测,iH5排第一
- 2017阿里技术年度精选值得拥有
- 开源项目贡献
- 入围CCID年度ITSM市场研究报告 彰显国内IT管理第一品牌实力
- 外媒评年度十大Mac应用 商务类中Office排第一
- 阿里获四席:2016年度最受欢迎中国开源软件TOP 20
- 修改CentOS源为国内阿里云
- 第一次开源项目贡献
- 2017阿里技术年度精选集合集下载,全集下载
- 2017阿里技术年度精选(上).pdf 免费下载
- 2017阿里技术年度精选(下).pdf 免费下载
- 2017阿里技术年度精选集下载地址
- 国内知名SAAS CRM平台排行 雀搜竟然排第一
- 为国内开源做点贡献 编译glib
- bzoj 2143 飞飞侠【最短路】
- 转DjVu格式为什么要选人工转?
- pytorch学习_2
- 翻译:iOS视图控制器编程指南(十)——自定义过渡动画(Customizing the Transition Animations)
- 迈出从3K到1W的重要一步——掌握设计模式
- 2017年度开源贡献榜 国内阿里排第一
- HDU 5927 (最近公共祖先)(bfs+树)
- CentOS7.2搭建代理服务器
- 微信三大平台
- “安防+”时代 物联网开辟新机遇
- 大小端的判断 十进制itoa实现
- C#选择文件、选择文件夹、打开文件(或者文件夹)
- Java
- 如何给变量命名-彻底告别变量命名的苦恼