本節書摘來異步社群《開源思索集》一書中的第1章,作者: 莊表偉 責編: 楊海玲, 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
28萬個開源項目之番外篇
開源思索集
一、工具
資料抓取
最初是打算使用openhub.net的open api的,他們有不錯的api,還在github上放了一個開源項目。隻可惜,他們的api,最多隻能申請5個api key,每個key明天的通路請求數量不能超過1000次。當時我還不知道,其實openhub的資料隻有28萬多,還以為滿打滿算,至少得60多天才能全部抓完,頓時心就涼了。
後來有朋友介紹了一個很棒的直接抓取html頁面,然後做dom分析的工具,名叫noodle。
當然,後續的331個項目的明細資料,還是得通過openhub的api來抓取。
資料分析
完全是土法上馬:sqlite3+numbers+csv+ruby,反正各種手法,什麼稱手用什麼。
資料展示
原本是打算在numbers裡想想辦法的,後來發現實在太弱。excel也差不多,隻能到網上搜尋一些資訊圖制作的工具,後來找到了幾個不錯的線上工具,經過一番比較,最後決定用infogr.am來完成。的确非常不錯。
二、釋疑:項目大小與建立時間的關系
我與@雲風 在微網誌上有一小段讨論,起因還是我之前分析的一些觀點:
是否使用github,越是新的項目越願意用,越是大的項目越沒法用。
是否使用github來管理項目的issue,越是新的項目越願意用,越是大的項目越沒法用。
這個結論,其實在用詞上,是有些講究的:按理說,新與老相對,小與大相對;願意與不願意相對,能用與沒法用相對,我的兩個結論,對仗都不公整。其實,确實故意為之。
于是,雲風與我的對話如下。
雲風:項目規模和項目曆史本身有相關性吧。代碼規模越大的項目曆史很可能越久。
我:項目的規模,主要還是與項目本身的特性有關。原本複雜的項目,才可能越長越大。原本就是小項目,也未必就會穩定地逐年增長。
雲風:這隻能說明小項目可以曆史久,不能說明大項目可以曆史短啊。很少有新項目一開始就很大啊。代碼也是一行行寫出來的啊。
我:那就是成長速度不同了。比如openstack一開始就不小。
雲風:一開始就不小隻能說閉源開發過一段時間,或從别的地方搬遷過來的吧。你能想象不被版本管理工具管理的情況下,首次送出 10 萬行以上的代碼?看這個 link 送出日志寫的 initial fork out of nova。
後來,我也沒有再繼續這個讨論,但是卻一直在思考這個問題:“項目的大小與項目的建立時間,究竟有多少相關性?”
後來,我将兩個資料,做了一個分析:log(第一次送出代碼,至今的天數)/log(代碼行數),大概得到如下一個圖:
經過強大的excel的計算,兩個資料的相關系數,大約是0.203的樣子,也就是說:大緻上有較弱的正相關。
三、開源
目前,我已經将這個分析的相關資料,放在github上開源了。簡單介紹一下:
data.sqlite3.zip 是28萬基礎資料。
projects.sqlite3 是331個項目的詳細資料。
projects.csv 是我用來做資料分析的大表格。
四、名單
331個一個開源項目,名單如下: