追踪 GitHub 上前 100 个存储库的增长情况?

Posted

技术标签:

【中文标题】追踪 GitHub 上前 100 个存储库的增长情况?【英文标题】:Tracing the growth of top 100 repositories on GitHub? 【发布时间】:2012-12-14 14:04:12 【问题描述】:

我正在尝试跟踪 GitHub 上前 100 个存储库的增长情况。我有以下查询:

SELECT MAX(repository_forks) as forks, repository_url 
FROM [publicdata:samples.github_timeline] 
WHERE (created_at CONTAINS "2012-04-01") 
GROUP BY repository_url 
ORDER BY forks DESC LIMIT 100

这为我提供了 2012 年 4 月 1 日最大的 100 个存储库。然后我想跟踪每个存储库每个月的分叉数量如何增长。

因此我构造了以下查询:

SELECT repository_name, created_at as month,
SUM(repository_forks) as forks
FROM [githubarchive:github.timeline]
WHERE (repository_name = "rubinius")
GROUP BY repository_name, month
ORDER BY month DESC;

这种给了我我想要的东西,但并不完全。相反,我需要查询:

为每个月(每个 repo)的分叉总数提供一个数字 搜索第一个查询中确定的 100 个存储库

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

[publicdata:samples.github_timeline] 中的数据看起来像是每个存储库在不同时间戳的快照。如果是这种情况,要计算每月每个 repo 的分叉数变化,我认为你不应该这样做SUM(repository_forks)。相反,您希望获取每个月的第一个快照和最后一个快照,并进行 minus 计算以获取 delta

结果来自以下查询:

select repository_name, created_at, repository_forks  
from [publicdata:samples.github_timeline]
where repository_name='Bukkit'
order by created_at;

但是,我不明白为什么在2012-03-11 08:30:21,来自Bukkit 的repository_forks 数量为零。可能是数据错误?如果是数据错误,我会将它们视为异常值。对其设置一些阈值可能能够消除这些异常值。请注意我设置的阈值:where repository_forks > 10,以便跳过不良数据。

SELECT top100.repository_name, 
  substr(created_at, 0, 7) month, 
  max(repository_forks)-min(repository_forks) monthly_increase, 
  min(repository_forks) monthly_begin_at, 
  max(repository_forks) monthly_end_with 
FROM [githubarchive:github.timeline] timeline
JOIN
(SELECT repository_name , MAX(repository_forks) as forks 
FROM [githubarchive:github.timeline] 
WHERE (created_at CONTAINS "2012-04-01") 
GROUP BY repository_name 
ORDER BY forks DESC LIMIT 100) top100
on timeline.repository_name = top100.repository_name
where repository_forks > 10
GROUP BY top100.repository_name, month
ORDER BY top100.repository_name, month;

结果如下:

如果我错了,repository_forks 的数量已经发生了变化,你可以继续像你所做的那样对 repository_forks 进行求和。那么它实际上更容易:

SELECT repository_name, substr(created_at,0,7) as month, SUM(repository_forks) as forks
FROM [publicdata:samples.github_timeline] timeline
JOIN
(SELECT repository_url , MAX(repository_forks) as forks 
FROM [publicdata:samples.github_timeline] 
WHERE (created_at CONTAINS "2012-04-01") 
GROUP BY repository_url 
ORDER BY forks DESC LIMIT 100) top100
on timeline.repository_url = top100.repository_url
GROUP BY repository_name, month
ORDER BY repository_name, month DESC;

更新:

是的。我将数据集更改为指向githubarchive:github.timeline,然后我有数据直到2012年12月。对应sql并更新结果。但是数据质量不好,还是看到很多outlier的数据点。

【讨论】:

太棒了!但是,这似乎只提供了 2012 年 5 月之前的数据,但应该有一直到 2012 年 11 月的数据可用? 是的,你是对的。如果您改为查询 [githubarchive:github.timeline],则数据会正确显示(即直到 2012 年 11 月)。 对,如果我指向githubarchive,我们有更新的数据。

以上是关于追踪 GitHub 上前 100 个存储库的增长情况?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GraphQL 查询 GitHub 存储库的主要贡献者

对比丨深度学习库大排名:TensorFlowKeras名列一二,Sonnet增长最快

Github 操作无法从 Github 包存储库下载工件

更改 Github 存储库的后果

svn 迁移但转储存储库的一部分

如何链接到 GitHub 存储库的***目录