社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

谁是 2017 年度开源贡献之王?—— GitHub 数据分析报告

技术最前线 • 8 年前 • 670 次点击  

(点击上方公众号,可快速关注)


转自:开源中国

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 12 
        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 domainCOUNT(*) 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 要闻


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/TWpbFLBpq2
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/3970