用 GHTorrent 和 Libraries.io 查詢 10 年的 GitHub 數據

我一直在尋找新的數據集,以用它們來展示我們團隊工作的力量。CHAOSSEARCH 可以將你的 Amazon S3 對象存儲數據轉換為完全可搜索的 Elasticsearch 式集群。使用 Elasticsearch API 或 Kibana 等工具,你可以查詢你所要找的任何數據。
當我找到 GHTorrent 項目進行探索時,我很興奮。GHTorrent 旨在通過 GitHub API 構建所有可用數據的離線版本。如果你喜歡數據集,這是一個值得一看的項目,甚至你可以考慮捐贈一個 GitHub API 密鑰。
訪問 GHTorrent 數據
有許多方法可以訪問和使用 GHTorrent 的數據,它以 NDJSON 格式提供。這個項目可以以多種形式提供數據,包括用於恢復到 MySQL 資料庫的 CSV,可以轉儲所有對象的 MongoDB,以及用於將數據直接導出到 Google 對象存儲中的 Google Big Query(免費)。 有一點需要注意:這個數據集有從 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 的精彩團隊在 Libraries.io 數據 里發布了一個 GitHub 項目的詳細列表,包括使用的許可證以及其中有關開源軟體狀態的其他詳細信息。將此數據集導入 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 項目中使用了多少個不同的軟體許可證,這很有意思。

之後,我針對特定語言(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 上以低成本的方式存儲數據,因此無需維護。 現在,我可以隨時查詢有關這些數據的任何其他問題。
你對數據提出了哪些其他問題,以及你使用了哪些數據集?請在評論或推特上告訴我 @petecheslock。
本文的一個版本最初發布在 CHAOSSEARCH,有更多結果可供發現。
via: https://opensource.com/article/19/5/chaossearch-github-ghtorrent
作者:Pete Cheslock 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive