发布于 2017-10-27 00:55:45 | 157 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的精品教程,程序狗速度看过来!

Github代码托管服务

Github是全球最大的社交编程及代码托管网站,作为开源代码库以及版本控制系统,Github目前拥有140多万开发者用户。随着越来越多的应用程序转移到了云上,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

原文:Who contributed the most to open source in 2017? Let’s analyze GitHub’s data and find out.



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务