最近突发奇想,想统计一下全球程序猿都住在哪里,所以就爬了GitHub,将GitHub上的个人资料聚合在一起,结合国家或城市的人口进行分析并将数据用D3进行可视化。
通过分析,发现了一些有趣的结果。比如虽然顶尖程序猿都生活在世界各地,但他们中的很多人似乎都生活在旧金山湾区这个保育区。同时,在印度顶尖开发者属于濒危物种,而东欧有用大量可以远程雇佣的程序猿。
数据采集
首先,我通过GitHubArchive获取过去7年中活跃的GitHub用户列表,活跃的定义是fork或者关注一个repository,查看或者评论一个问题,或者提交代码等,应该有1500万用户符合这个标准。过去几个月我一直致力于通过GitHub/users/API获取每个活跃用户的基本信息,结果是这些用户中有230万用户可以获取到坐标信息。虽然很多用户没法获得坐标信息,但就已有的数据来分析,应该也能说明一些问题了。
然后,我通过Google Maps Geocoding API把这些凌乱的坐标串转换成真实的坐标。期间手动调整了几个地理编码错误,比如TheFuture被编码到帕洛阿尔托,World Wide Web被编码到波士顿,还有/dev/random被编码到印度。除开这些无关紧要的差错,GoogleMaps确实在转换过程中起到了巨大作用。
最后,我把所有的代码上传到了GitHub:https://github.com/benfred/github-analysis/。
顶尖程序猿
我们把目光着眼于关注者人数最高的顶尖程序猿,可以将地理编码地点和地图上进行结合。
首先我们凑个整,显示排名前1024开发人员,数据量并不是太大,所以它们不会完全重叠,并且可以看到所有这些开发人员的居住地点:
如果你说只有1024个程序猿,可能样本量不够,那再翻几番看看:
尽管顶尖程序猿的栖息地遍布全球,但很显然他们主要集中在多个区域。显而易见旧金山湾区是最集中的,但在北京,上海,纽约,伦敦和西雅图等地也颇为集中。
顶尖程序猿集中的国家
前面关注了顶尖程序猿而忽略了广大的普通程序猿,这一部分来看看汇总了普通的账户分别主要来自那几个国家。
换个更加直观方式再来看一下,颜色越深,说明GitHub用户越多:
从用户数量角度看,美国在排名上占主导地位:它拥有最多的GitHub账户,比其后5个国家加起来还多。但是,这不是对每个国家进行排名的唯一方式。本报告还列出了另外3种不同的排名方式,我接下来来谈谈为什么要用这些指标。
与人口或者GDP的关系
有个比较容易发现的事情就是GitHub账户多的国家通常都是人口众多的国家。虽然美国无疑是技术超级大国,但它也是地球上人口最多的国家之一。
举个例子,美国的GitHub账户数量比冰岛拥有的人多,因此在按GitHub账户数量排名时,无法指望冰岛能追上美国。但是,如果将排名方式切换到按照GitHub账户数每百万人口排序,冰岛一下跃居第一名。
通过散点图可以看到:
双对数回归的趋势线以橙色显示,其R²为0.5,也就是说,每个国家的GitHub账户数量中有一半的差异可以用人口来解释。图中我已经将偏离帕累托边界(Pareto frontier)较多国家作为离群值标记出来。
明显高于趋势线的国家主要是西方国家,如冰岛(IS),瑞典(SE),挪威(NO)和丹麦(DK)。明显低于趋势线的国家往往是比较贫穷的非洲国家,如埃塞俄比亚(ET),刚果(CG)和乍得(TD)。
查看按照“账户/百万人口”的排名就可以从某种程度上看起来接近衡量每个国家富裕程度的排序。
既然把人口因素放入GitHub账户的排名,那是不是也能将GitHub账户与GDP进行组合:
同样是双对数回归,当R²为0.84时,这里的相关性更强。
这里表现最差的主要是石油生产国,如沙特阿拉伯(SA),伊拉克(IQ),卡塔尔(QA)和科威特(KW)。这似乎与“荷兰病”有关,在这种情况下,自然资源丰富导致国家更加注重资源的出口,而对软件工程师这样的人力资本投资不足。
同时,前苏联国家的排名似乎在这个衡量标准中排名很高。乌克兰(UA),白俄罗斯(BY),塞尔维亚(RS)和摩尔多瓦(MD)的GitHub账户都比它们各自的国内生产总值对应的数量的要多。尤其乌克兰的程序猿是远程开发人员的最佳选择,也许继承了前苏联的优秀的教育底子,使乌克兰拥有大量开发人才。
关注者分布
印度和中国都有相差不多的GitHub账户数量,一般来说你可以预期这两个国家对GitHub有类似的贡献。然而,看一下顶尖程序猿和各自的地图,在北京,上海和深圳周围有大量的开发者,而印度只有少数几个开发者分散在各大城市。
虽然中国(13亿)和印度(10亿)有同一个量级的人口,但顶尖程序猿中有22%生活在中国,而只有不到1%居住在印度。同样,一个中国的顶尖程序猿最多拥有3.9万关注者,排在全球第三,而一个印度的顶尖程序猿最多只有3100多个关注者,只能排到200位。
为了体现这种情况,我添加了一个简单的“总体关注者”排名,该排名仅对每个国家/地区的关注者总数排序。印度在这一排名中从第3位下降到第8位(中国的关注者总人数约为印度的5.5倍)。
我不清楚为什么印度在这里表现不佳,我也曾怀疑一个账户在GitHub上的关注人数是否特别有意义。但是,GitHub上一个账户的关注人数从一定程度上说明这个用户对开源软件开发的影响力,所以我将其作为影响力的排名。
重要城市
只关注重点国家的粒度太粗了,大多数发达国家的城乡差别比这些国家之间的差异更为明显。按照之前类似的方式我们可以对不同的城市进行排名:
仅拥有约86万人的旧金山在这里脱颖而出,甚至超过了拥有2500万人口的上海等城市。然而,湾区只有很少一部分人居住在旧金山,南部湾正在发生巨大变化。为了了解这一点,我将圣克拉拉县,圣马特奥县,旧金山县和阿拉米达县都归在“旧金山湾区”标签下。
加州VS全球
当你看到下列数据,不必惊讶:
GitHub帐户 | 总关注者 | |
---|---|---|
旧金山 | 36,758 | 939,739 |
旧金山湾区 | 68,833 | 1,449,521 |
加州 | 134,644 | 1,964,815 |
如果按照关注者的数量排名,旧金山的排名将高于美国和中国以外的其他国家。一个拥有86万人口的城市比英国,德国,加拿大,巴西和印度等有着千万甚至上亿国家的影响力更大。同样,如果把加利福尼亚州看作一个国家,除了美国,中国和印度之外,它的GitHub账户数量将超过其他国家。
按人均计算,旧金山每百人拥有超过4个账户。这意味着旧金山的人均开发人数是全球排名最高的国家(冰岛)的10倍以上。至少有4%的市民拥有GitHub帐户,并且真实的数字可能更加高,因为只有约15%的帐户在其个人资料中列出了位置。
虽然湾区显然是全球程序猿的最集中的地点,但只有不到3%的程序猿居住在湾区,世界上大多数程序猿都住在别的地方。即使在美国境内,也只有约11%的GitHub账户来自湾区。