我一直在寻找新的数据集,我们可以用它来展示我们团队工作的强大之处。 CHAOSSEARCH 将您的 Amazon S3 对象存储数据转换为完全可搜索的 Elasticsearch 类集群。借助 Elasticsearch API 或 Kibana 等工具,您就可以查询您找到的任何数据。
当我发现 GHTorrent 项目时,我感到很兴奋。GHTorrent 旨在构建可通过 GitHub API 获得的所有数据的离线版本。如果数据集是您感兴趣的东西,那么这是一个值得查看的项目,甚至可以考虑 捐赠您的一个 GitHub API 密钥。
访问 GHTorrent 数据
有很多方法可以访问和使用 GHTorrent 的数据,这些数据以 NDJSON 格式提供。这个项目在以多种形式提供数据方面做得非常出色,包括 CSV (用于还原到 MySQL 数据库)、所有对象的 MongoDB 转储和 Google Big Query (免费),用于将数据直接导出到 Google 的对象存储中。但有一个注意事项:此数据集包含从 2008 年到 2017 年的几乎完整的数据集,但从 2017 年至今的数据集不太完整。这将影响我们进行确定性查询的能力,但这仍然是一个令人兴奋的信息量。
我选择 Google Big Query 是为了避免自己运行任何数据库,因此我能够快速下载包括用户和项目在内的完整数据语料库。CHAOSSEARCH 可以原生分析 NDJSON 格式,因此在将数据上传到 Amazon S3 后,我能够在几分钟内对其进行索引。CHAOSSEARCH 平台不需要用户为其数据设置索引模式或定义映射,因此它可以自行发现所有字段(字符串、整数等)。
我的数据已完全索引并准备好进行搜索和聚合,我想深入了解我们可以学到哪些见解,例如 GitHub 项目中最流行的软件语言是什么。
(关于格式的说明:这是一个有效的 JSON 查询,我们不会在此处正确格式化它,以避免滚动疲劳。要正确格式化它,您可以将其复制到本地并发送到像 jq 这样的命令行实用程序。)
{"aggs":{"2":{"date_histogram":{"field":"root.created_at","interval":"1M","time_zone":"America/New_York","min_doc_count":1}}},"size":0,"_source":{"excludes":[]},"stored_fields":["*"],"script_fields":{},"docvalue_fields":["root.created_at","root.updated_at"],"query":{"bool":{"must":[],"filter":[{"match_all":{}}],"should":[],"must_not":[{"match_phrase":{"root.language":{"query":""}}}]}}}
对于任何关注近年来开源语言状态的人来说,这个结果并不令人意外。

JavaScript 仍然是卫冕冠军,虽然有些人认为 JavaScript 正在走向衰落,但它仍然是 800 磅重的大猩猩,并且可能会在一段时间内保持这种状态。Java 面临类似的谣言,但此数据表明它是开源生态系统的重要组成部分。
考虑到 Docker 和 Kubernetes 等项目的受欢迎程度,您可能会想,“Go (Golang) 呢?” 这正好提醒我们,此处讨论的 GitHub 数据集存在一些差距,最显着的是 2017 年之后,那时我看到 Golang 项目如雨后春笋般涌现。我希望使用完整的 GitHub 数据集重复此搜索,看看它是否会改变排名。
现在让我们探索项目创建的速度。(提醒:这是为提高可读性而合并的有效 JSON。)
{"aggs":{"2":{"date_histogram":{"field":"root.created_at","interval":"1M","time_zone":"America/New_York","min_doc_count":1}}},"size":0,"_source":{"excludes":[]},"stored_fields":["*"],"script_fields":{},"docvalue_fields":["root.created_at","root.updated_at"],"query":{"bool":{"must":[],"filter":[{"match_all":{}}],"should":[],"must_not":[{"match_phrase":{"root.language":{"query":""}}}]}}}
看到新项目的创建速度也会很有趣,令人印象深刻,从 2012 年左右开始出现巨大的增长

现在我知道了项目创建的速度以及用于创建这些项目的最流行的语言,我想找出这些项目选择了哪些开源许可证。不幸的是,GitHub 项目数据集中不存在此数据,但是 Tidelift 的出色团队发布了一个详细的 GitHub 项目列表、使用的许可证以及有关其 Libraries.io 数据中开源软件状态的其他详细信息。将此数据集导入 CHAOSSEARCH 只需几分钟,让我看到哪些开源软件许可证在 GitHub 上最受欢迎
(提醒:这是为提高可读性而合并的有效 JSON。)
{"aggs":{"2":{"terms":{"field":"Repository License","size":10,"order":{"_count":"desc"}}}},"size":0,"_source":{"excludes":[]},"stored_fields":["*"],"script_fields":{},"docvalue_fields":["Created Timestamp","Last synced Timestamp","Latest Release Publish Timestamp","Updated Timestamp"],"query":{"bool":{"must":[],"filter":[{"match_all":{}}],"should":[],"must_not":[{"match_phrase":{"Repository License":{"query":""}}}]}}}
结果显示了一些明显的异常值

正如您所看到的,MIT 许可证 和 Apache 2.0 许可证 远远超过了用于这些项目的大多数其他开源许可证,而 各种 BSD 和 GPL 许可证 则远远落后。考虑到 GitHub 的开放模式,我对这些结果并不感到惊讶。我猜想大多数项目是由用户而非公司创建的,并且他们使用 MIT 许可证是为了让其他人可以轻松地使用、共享和贡献。 Apache 2.0 许可紧随其后也很有道理,因为有很多公司希望确保他们的商标受到尊重并在其业务中拥有开源组件。
现在我已经确定了最流行的许可证,我很好奇想看看最少使用的许可证。通过调整我的最后一个查询,我将前 10 名反转为后 10 名,并且能够找到仅有两个项目使用了 伊利诺伊大学—NCSA 开源许可证。我以前从未听说过此许可证,但它与 Apache 2.0 非常接近。看到所有 GitHub 项目中使用了如此多不同的软件许可证真是令人惊讶。

伊利诺伊大学/NCSA 开源许可证。
在那之后,我深入研究了一种特定的语言 (JavaScript),以查看那里最流行的许可证。(提醒:这是为提高可读性而合并的有效 JSON。)
{"aggs":{"2":{"terms":{"field":"Repository License","size":10,"order":{"_count":"desc"}}}},"size":0,"_source":{"excludes":[]},"stored_fields":["*"],"script_fields":{},"docvalue_fields":["Created Timestamp","Last synced Timestamp","Latest Release Publish Timestamp","Updated Timestamp"],"query":{"bool":{"must":[{"match_phrase":{"Repository Language":{"query":"JavaScript"}}}],"filter":[{"match_all":{}}],"should":[],"must_not":[{"match_phrase":{"Repository License":{"query":""}}}]}}}
此输出中存在一些意外情况。

即使使用 npm init 创建 NPM 模块时的默认许可证是来自 Internet Systems Consortium (ISC) 的许可证,您也可以看到相当多的这些项目也使用 MIT 以及 Apache 2.0 作为其开源许可证。
由于 Libraries.io 数据集包含丰富的开源项目内容,并且由于 GHTorrent 数据缺少最近几年的数据(因此缺少有关 Golang 项目的任何详细信息),因此我决定运行类似的查询,以查看 Golang 项目如何许可其代码。
(提醒:这是为提高可读性而合并的有效 JSON。)
{"aggs":{"2":{"terms":{"field":"Repository License","size":10,"order":{"_count":"desc"}}}},"size":0,"_source":{"excludes":[]},"stored_fields":["*"],"script_fields":{},"docvalue_fields":["Created Timestamp","Last synced Timestamp","Latest Release Publish Timestamp","Updated Timestamp"],"query":{"bool":{"must":[{"match_phrase":{"Repository Language":{"query":"Go"}}}],"filter":[{"match_all":{}}],"should":[],"must_not":[{"match_phrase":{"Repository License":{"query":""}}}]}}}
结果与 Javascript 大相径庭。

Golang 提供了与 JavaScript 的惊人逆转——使用 Apache 2.0 许可的 Golang 项目数量几乎是 MIT 的三倍。虽然很难准确解释为什么会这样,但在过去几年中,Golang 取得了巨大的增长,尤其是在构建项目和软件产品(包括开源和商业产品)的公司中。
正如我们在上面了解到的,这些公司中的许多公司都希望强制执行其商标,因此转向 Apache 2.0 许可证是有道理的。
结论
最后,我通过深入研究 GitHub 用户和项目数据转储,发现了一些有趣的结果。其中一些结果我肯定会猜到,但也有一些结果让我感到惊讶,尤其是像很少使用的 NCSA 许可证这样的异常值。
总而言之,您可以看到 CHAOSSEARCH 平台如何让我们快速轻松地找到复杂问题的有趣答案。我深入研究了这个数据集,并在无需自己运行任何数据库的情况下获得了深入的分析,甚至将数据廉价地存储在 Amazon S3 上——因此几乎不需要维护。现在我可以随时提出有关数据的任何其他问题。
您还在询问您的数据哪些其他问题,您使用哪些数据集?请在评论中或在 Twitter @petecheslock 上告诉我。
本文的早期版本最初发布在 CHAOSSEARCH 上。
评论已关闭。