Linux中國

Grank:如何評估一個 Github 項目的活躍度

在深圳剛剛結束的 CosCon 2018 大會上發布了《中國開源調查報告》,Grank 作為其中數據篇的部分數據提供者,構建了一個 Github 項目活躍度、社區化的模型,並以 Python 實現。

項目地址: https://github.com/lctt/grank/

Grank 模型

我們認為,一個健康的開源項目應該體現為以下兩個方面:

  • 項目的活躍度趨勢
  • 項目的社區化(去中心化)程度

而這兩個方面分別有多個因素組成:

活躍度和活躍度趨勢

項目的活躍度,我們定義為項目的提交數、 拉取請求數和貢獻者數(其它數據,如代碼行數、文件數、issue 數、 fork 數、star 數,要麼是權重相對低得多,要麼是代表意義不夠確定,此處忽略不計入模型)。

但是,對於不同的項目,其橫向比較其活躍度,或有不同的活躍度形態,或不具備可比性。很難說一個項目比另外一個項目的提交數高,而拉取請求(PR)數低代表的確切含義。因此我們不認為對不同項目的這些數據進行絕對值的比較有太多的科學意義。

所以,我們認為一個項目本身的活躍度變化的趨勢和幅度,會更有項目間比較的意義。

如果以三維空間來描述一個項目的活躍度,以提交數、拉取請求數、貢獻者數為三維,可以確定在某個時間點某個項目的坐標,那麼計算一段時間內,該坐標點的移動軌跡和速率,可以真實的反映該項目的活躍度趨勢。

考慮到按周工作的作息時間的普遍影響,我們以一個工作周作為一個時間採樣點,然後計算連續的幾周內該坐標的移動速率。這反映了該項目的發展速度。

社區化程度

開源誕生於社區,繁榮於社區,根植於社區,雖然現在大型組織、商業公司也紛紛投身於開源生態,但是我們認為,開源項目的生命力仍然在於社區。我們並不否認機構、商業公司對開源的巨大貢獻和影響力,但是如果一個開源項目變成了一家或幾家大企業的私人遊戲,其必然失去開源項目的生命力,它或許會在商業上取得成功,但是那個成功不是開源項目的成功模式。

因此,我們認為需要有一個評估開源項目的社區化(去中心化)程度的指標。項目(尤其是軟體項目)的一個重要屬性是開發人員的社區化身份,因此,我們以實際向項目貢獻了代碼的人員的社區化離散程度來評估項目的社區化程度。

每個參與項目開發的人員均有其身份屬性,這個身份可能是企業僱傭身份,也可能是社區志願者身份。我們通過對項目的提交中的提交者數據進行收集,然後根據開發人員的身份信息、郵件後綴等依優先順序來判斷其所屬身份。然後對這些信息進行聚類,以一個離散評估模型來評估該數據集的離散程度。

雖然項目越中心化,其發展風險越高,但是,並不是社區化程度越高的項目就越健康,過於離散的項目也容易出現項目分裂、迭代緩慢等問題。這顯然是存在一個適當的區域。

Grank 的結果長什麼樣子?

多項目活躍度:

多項目社區化:

單項目社區化及活躍度:

使用方法

  1. 使用 pip 安裝項目 pip install grank
  2. 獲取 Github 的 Personal Access Token
  3. 使用 grank login 設置 Token
  4. 使用 grank config 設置社區化企業關鍵詞
  5. 使用 grank analy <owner> [<repository>] 來分析特定用戶 /組織和項目,比如 grank analy lctt grank,分析結果可以在執行命令目錄的 result 目錄中找到。
  6. 使用命令行模式操作,如 grank --token=XXXX --start=2018-01-01 --stop=2018-05-21 --askrule=0 --rule=inc analy <owner> <repository> 其中 token 必須指定,其他可以使用預設設置

Grank 是如何實現的?

Grank 使用 Github 的 GraphQL 來完成數據抓取的工作,抓取項目的所有提交和拉取請求來進行分析,並使用 Pandas、numpy、pandas 進行數據的分析,最終得出結果。

此外,Grank 目前為命令行工具,採用了 Click 來編寫命令行的支持。

Grank 能夠為你帶來什麼?

  1. 評估自己的項目情況
  2. 學習 Python 項目編寫
  3. 了解 Click 的使用
  4. 了解 pytest 的使用。

項目地址:https://github.com/LCTT/Grank

Pypi 地址:https://pypi.org/project/Grank/


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國