- 数据抓取
最初是打算使用openhub.net的Open API的,他们有不错的API,还在Github上放了一个开源项目。只可惜,他们的API,最多只能申请5个API Key,每个Key明天的访问请求数量不能超过1000次。当时我还不知道,其实openhub的数据只有28万多,还以为满打满算,至少得60多天才能全部抓完,顿时心就凉了。
后来有朋友介绍了一个很棒的直接抓取HTML页面,然后做DOM分析的工具,名叫noodle。
接下来,只要抓取: https://www.openhub.net/p?ref=homepage&q=&page={num} 就能够拿到所有项目的概要数据了。
当然,后续的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个一个开源项目,名单如下: