随着加密货币市场的逐渐火热,区块链也从原来的小众玩耍发展为一个新的科技热点。那么截止2017年底,究竟有多少人参与了区块链相关的行业呢?为了一探究竟,我以Dapp为切入点,从 Github 中抓取了所有和以太坊Dapp相关的项目的数据,并做了简单的整理和分析。
Dapp 现状
数据截止 2017年12月20日。
先看看所有Dapp的创建数量分布,横坐标表示新项目的创建时间,纵坐标表示新项目的数量:
从上图中我们可以很明显的发现,在2017年之前每月新增的Dapp数量一直是小于10个的。但是从2017年开始至2017年底,新项目的数量一直在飞速的增长,直到年底才有所缓和。由此可见从2017年开始,越来越多的人参与到区块链行业当中。
那么 Github 上创建的这些项目又有多少是当前还一直活跃的呢?下表展示了Dapp项目的活跃度分布,横坐标为项目的创建时间,纵坐标为项目的最后一次更新时间,方框中的数字表示项目的数量,数字越大则颜色越深:
图中最上面一行表示最近仍在更新的Dapp项目,而从左至右则表示这些项目的创建时间。可以看到的是大部分项目都是在最近创建并更新的。在早期创建的项目中,目前依然在更新的项目大概占总量的50%左右。通过调查,这些早期创建且持续更新的项目基本都是由组织拥有,且其中大部分还是 Ethereum 团队自己的项目。真正个人用户持续维护的项目主要还是在2017年以后陆续出现。
除了项目的活跃度分布外,我们还需要知道项目的质量如何。为此,我们将所有的项目以散点的形式分布在坐标系上,以点的半径大小来表示项目获得的 Stars 数量,Stars 越多则点的半径越大。同时,依然用横坐标表示项目的创建时间,用纵坐标表示项目的 commits 数量(为了让点分布更均匀,commits数量采用log分布):
在上图中,用不同的颜色来区分项目的拥有者。红色表示由组织创建的项目,黄色表示由个人创建的项目。
我们不难看出大部分的高 Stars 项目都伴随着高量的提交次数。在早期创建的项目中,有一批由 ethereum 官方创建的项目,目前依然在提交更新且都获得了不错的 Stars 数量。如果将所有项目以 Stars 作为标准进行排序,则前十名为:
可以看到由组织创建的项目更能得到大家的赞赏。
除了 Stars 数量,我们还关心项目的主要语言分布。统计后,得到下图:
经统计后:
有接近80%的项目都是用 JavaScript 作为主语言。JS 作为前端和客户端果然很火热。
HTML6%,
TypeScript4%,
CSS3%。
剩下8%由其他语言构成。将剩下的语言单独做一份统计后得到下图:
总结
整体上,2017年以太坊的Dapp项目数量增速明显。相比较2017年之前,更多的个人用户参与进了以太坊Dapp的开发。在总共创建的500多项目中,目前有60%的项目依然在持续更新当中。就获得的 Stars 数量而言,组织创建的项目比个人创建的更吃香。在编程语言方面,JavaScript 有着无可动摇的地位,其他后端语言则各有千秋。
上述图表的动态展现及数据下载可以至 Github 下载
---------------以下为实现部分---------------
方案实现
使用 “Ethereum” 和 “Dapp” 为关键词,在 Github 上搜索相关的项目。
用 python 来抓取搜索到的数据。
使用 MySQL 来存储获取的数据。
用 Echarts 呈现统计后的图表。
数据抓取
本来打算所有数据都用爬虫来获取,但后来发现 Github 官方提供了调取数据的 API,Github 对程序员真是很友好哈。在这里,使用了python库 github3 来调取 API:
方法返回的是一个包含了所有搜索结果信息的数组。数组的每个元素都可以通过 方法转化为 json 格式,json 转化后的元素大概长这样:
可以看到在这里能直接知道此项目的 name, url, stars 数量等基本信息。(真贴心哈哈哈~)
但是除了基本信息外,还需要知道项目的 commits 以及 issue 等情况用来分析项目的活跃度。同时,还需要获取项目拥有人的信息,比如拥有者是个人还是组织,拥有者的活跃状况等。在这里我们采用网络爬虫的方式获取这些数据。
具体方法是从上面的 json 数据中获取相关的 url。以获得 commits 数量为例子,我们通过上面的 json 中的 字段获得项目的 Github 主页地址: 。然后用 python 请求这个 url 从而获得返回的 HTML 文件:
有了 html 文件后,我们就可以通过正则表达式来获取我们需要的数据。为了获得正则表达式的规则,我们先用浏览器打开上面的 url。然后在我们需要的 commits 数据上面点 。然后浏览器就会帮我们定位到需要的 html 标签上。在这里我们得到的标签内容:
这里的 就是我们想要的,为了匹配上这个数据,我们可以这样写正则表达式:
这里的 就是我们最后想要的数据了。用同样的方法可以获得其他你想要的数据。
注:事实上这里完全可以继续使用 Github 的 API 来获得这些数据,那样应该会更方便。具体方法可以查询一下 github3 这个 python 库的可调用方法,或者查询 Github 官方 API 列表。
结果统计
为了更方便做后续统计聚类工作,我们将数据存至 MySQL 中。而在前端展现层面,我们使用了 Echarts 作为图表生成的工具。
领取专属 10元无门槛券
私享最新 技术干货