今天给大家介绍如何用网络科学的大数据挖掘技术探索比特币交易的网络情况,特别是针对尺度较大的网络分析思路。
一般来讲,网络分析主要采用Ucinet、Netdraw、Gephi、Cytoscape、NodeXL等,但是往往节点或边数量受到限制,大部分只能处理节点或边在5000-10万之间,当然我们也不要期望能够将百万级别的节点和网络呈现总体的可视化。
对于大尺度的网络分析需要寻找新的编程思路,这里我们选择Python编程IPython Notebook是俺学习和最喜欢的编程环境,特别是Graphlab包提供了SGraph图数据包和分析Toolkits等一系列算法。
网络科学成为大数据挖掘最具代表性的算法和分析思想,无论是追踪网络交易行为、个性化推荐、计算PageRank、中心性测量等都需要我们有一套完善的网络分析思想,复杂网络科学的很多概念都会涉及到,不过今天主要是通过案例介绍Python分析比特币交易的过程、侦测特点节点异常交易并可视化这种交易过程。
首先,俺找到了一个Bitcoin的交易数据集,Bitcoin.csv,75兆大小。
用Jupther Notebook来操作:
我们先加载必要的算法包和设定环境,表征输出结果在Notebook里。
接下来我们把比特币交易数据集Bitcoin.csv加载进来,(也可以直接从云服务器下载)
整个交易数据包含了近200万的交易记录,数据结构非常简单,就是在什么时间源ID=Src与目标ID=Dst,在一个时间戳timestamp有个交易,交易比特币的价格=btc。
200万的可视化本身就是一个大数据分析问题,只是单用Excel无法处理,在这里非常快可以处理和可视化。
从可视化表可以看到有68万的源交易ID,近86万的目标ID,比特币btc交易的统计量也显示出来。先对数据量和统计信息有个基本了解。
接下来我们要从timestamp时间戳变量抽取年、月、日字段。
我们有了比特币交易数据,但是交易的实际交割日的比特币相当多少美金,我们需要找到比特币交易数据集,我们找到和下载这个交易期的数据集Martet-price.csv。加载进来…
该数据集标识了交易期的bitcoin收盘价close-price。
下面我们将对应交易日期年、月、日的交易日与交易收盘价合并两个数据集。事先将时间戳抽取年、月、日
至此数据准备工作完成。
接下来我们需要探索数据的交易情况,可以用Python的matplotlib包进行图形分析。
分别得到月交易量,单一用户ID交易量和交易分布图(省略部分算法)
交易最大值出现在2011年2-7月
source和destination用户的交易分布
具有粗略幂律分布的长尾分布,表明大部分交易频次在1次左右。
接下来,我们需要将交易数据集构造成为图SGraph存储结构,以便进行网络=图的网络分析算法。
总共有约88万个节点(vertice)和约196万的边(edge)
网络分析的重要统计量是度degree分布,通过计算出度outdegree和入度indegree和总degree的分布,我们可以看出度分布基本上服从幂律分布特性。
幂律分布的基本要点:越重大的事情越很少发生,存在少数个别节点起着重要的作用。
我们很容易查看一下top=5,出度和入度比较异常的outliers交易ID
我们还可以看看最大比特币交易量的top5
我们也可以计算特别指定的某交易ID=307659的P2P交易的主要情况。
接下来我们利用Pagerank算法计算网络交易的Pagerank值。
Pagerank是Google网页排名算法:一个网页的价值是由链接这个网页的网页的加权计算的。
接下来我们进入比特币交易网络分析和路径可视化。我们不可能将整个网络可视化出来(但目前也找到了可以用javascript进行大规模网络数据展现的可能性,还没有学完)
指定ID=9264的节点看该ID的交易一度网络。
选择特定节点筛选后的比特币交易网络的交易对象和交易值
交易账户的特定网络可视化
特点账户人物的交易网络
高亮两个特点节点的交易网络。
筛选后的某账户节点的交易行为。
某账户节点的比特币交易路径和资金交易行为。
两个账户交易日期的网络路径可视化。
通过上述操作,我们可以看到数据结构是非常简单的,分析思想和算法语法都可以模仿,比如如果我们能够拿到微信群抢红包数据,就可以进行相关网络挖掘。
如果谁建一个群,招募500个人玩抢红包,把数据保留下来,进行分析也是非常有意思的事情。数据量足够大的话甚至可以反推红包算法了。
当然我主要学习这个算法后处理移动手机通过清单,分析的原理是一样的。
本文作者:沈浩
来源:51CTO