本节书摘来异步社区《开源思索集》一书中的第1章,作者: 庄表伟 责编: 杨海玲, 更多章节内容可以访问云栖社区“异步社区”公众号查看。28万个开源项目之番外篇开源思索集一、工具
数据抓取最初是打算使用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个一个开源项目,名单如下:
相关资源:敏捷开发V1.0.pptx