用 GHTorrent 和 Libraries.io 查詢 10 年的 GitHub 資料
有一種方法可以在沒有任何本地基礎設施的情況下使用開源資料集探索 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 中國”官方小程式來檢視
相關文章
- SSH:hiberate實現資料的查詢(單查詢和全查詢)
- 資料的儲存和查詢分離不利查詢效能 - thenewstack
- SQL Server資料庫之datepart和datediff應用查詢當天上午和下午的資料SQLServer資料庫
- Flask——資料的查詢Flask
- MySQL - 資料查詢 - 簡單查詢MySql
- 查詢資料庫等待事件top10資料庫事件
- 查詢資料庫每個表佔用的大小資料庫
- SQL查詢的:子查詢和多表查詢SQL
- 【資料結構基礎應用】【查詢和排序演算法】資料結構排序演算法
- Java ——MongDB 插入資料、 模糊查詢、in查詢Java
- 資料庫高階查詢之子查詢資料庫
- MYSQL查詢和插入資料的流程是怎樣的MySql
- RESTFul資料查詢REST
- MYSQL查詢資料MySql
- indexedDB 查詢資料Index
- AMS 資料查詢
- Python—Django:關於在Django框架中對資料庫的查詢函式,查詢集和關聯查詢PythonDjango框架資料庫函式
- 資料庫基礎查詢--單表查詢資料庫
- elasticsearch查詢之大資料集分頁查詢Elasticsearch大資料
- 資料庫查詢工具:RazorSQL mac啟用版資料庫SQLMac
- 查詢資料庫的資料量的大小資料庫
- 查詢陣列裡資料刪除和增加的方法陣列
- Prometheus時序資料庫-資料的查詢Prometheus資料庫
- 查詢前90%的資料值
- MySQL 查詢重複的資料MySql
- 資料庫查詢慢的原因資料庫
- Mysql 查詢近半年的資料MySql
- 關係型資料庫查詢語言 SQL 和圖資料庫查詢語言 nGQL 對比資料庫SQL
- 資料庫查詢和資料庫(MySQL)索引的最佳化建議資料庫MySql索引
- 如何查詢和管理織夢CMS資料庫資料庫
- Jemter查詢資料庫資料庫
- 求助:資料庫查詢資料庫
- ThinkPHP 資料庫查詢PHP資料庫
- 資料庫排序查詢資料庫排序
- 查詢資料庫大小資料庫
- shell查詢prometheus資料Prometheus
- 使用nodejs應用查詢SAP HANA Express Edition裡的資料NodeJSExpress
- 使用PHP應用查詢SAP HANA Express Edition裡的資料PHPExpress