(点击上方公众号,可快速关注)
转自:开源中国
www.oschina.net/news/90001/the-top-contributors-to-github
有位作者分析了 2017 年截至今天 GitHub 上所有的 PushEvents......
作者对于每个 GitHub 用户都尽量分辨了他们属于哪个组织,并且只关注在 2017 年增长超过 20 个 star 的仓库(比如 Apache 目前在 GitHub 有超过 1500 个仓库,但只有 205 个在今年获得了 20 个以上的 star。因此,这里只分析这 205 个仓库的提交情况)。
各公司的贡献情况
按仓库 star 数排名
微软大约有 1,300 名员工积极地将代码推送到 GitHub 上的 825 个顶级仓库
谷歌大约有 900 名员工活跃于 GitHub,将代码推送到约 1,100 个顶级仓库
亚马逊大约有 134 名员工活跃于 GitHub,仅将代码推送到 158 个顶级仓库
谷歌员工贡献的代码仓库比微软的多了 25%,存储卡获得的 star 数也更多(530,000 vs 60,000)。亚马逊仓库 2017 的 star 总数为 27,000。
亚马逊远远落后于微软和谷歌,那夹在它们之间有什么公司?
根据贡献情况排名如下:RedHat,IBM,Pivotal,Intel 和 Facebook 也做出了突出贡献。
Facebook 和 IBM(US) 的 GitHub 用户数量与亚马逊的相似,但他们贡献的项目收获到了更多的 star(尤其是 Facebook):
紧接着的是 Alibaba, Uber, 和 Wix:
GitHub,Apache 和 Tencent:
Baidu, Apple 和 Mozilla:
更详细的内容可直接参看这个可交互的版本:The top contributors to GitHub (2017)。
1、数据来源:GitHub Archive。
2、怎么判断 Github 用户属于哪个公司?
这里主要通过用户提交记录中的邮件地址来进行判断。当然不是每个人都会用自己组织的邮箱地址,有很多人在 Github 上都选择如 gmail.com, users.noreply.github.com 或其他的邮箱,这种情况就没有办法了。
3、所用工具:Google Big Query。
4. 具体的 SQL 代码:
#standardSQL
WITH
period 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 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))) repos
FROM period a
JOIN repo_stars b
ON a.repo.id=b.id
WHERE type='PushEvent' GROUP BY 1 HAVING 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)) repos
FROM 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 hosters
GROUP BY 1 HAVING 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
觉得这条资讯有帮助?请转发给更多人
关注 技术最前线 ,看 IT 要闻