用Python侦测比特币交易的网络可视化分析

用Python侦测比特币交易的网络可视化分析_第1张图片

今天给大家介绍如何用网络科学的大数据挖掘技术探索比特币交易的网络情况,特别是针对尺度较大的网络分析思路。

一般来讲,网络分析主要采用Ucinet、Netdraw、Gephi、Cytoscape、NodeXL等,但是往往节点或边数量受到限制,大部分只能处理节点或边在5000-10万之间,当然我们也不要期望能够将百万级别的节点和网络呈现总体的可视化。

对于大尺度的网络分析需要寻找新的编程思路,这里我们选择Python编程IPython Notebook是俺学习和最喜欢的编程环境,特别是Graphlab包提供了SGraph图数据包和分析Toolkits等一系列算法。

网络科学成为大数据挖掘最具代表性的算法和分析思想,无论是追踪网络交易行为、个性化推荐、计算PageRank、中心性测量等都需要我们有一套完善的网络分析思想,复杂网络科学的很多概念都会涉及到,不过今天主要是通过案例介绍Python分析比特币交易的过程、侦测特点节点异常交易并可视化这种交易过程。

首先,俺找到了一个Bitcoin的交易数据集,Bitcoin.csv,75兆大小。

用Jupther Notebook来操作:

我们先加载必要的算法包和设定环境,表征输出结果在Notebook里。

用Python侦测比特币交易的网络可视化分析_第2张图片

接下来我们把比特币交易数据集Bitcoin.csv加载进来,(也可以直接从云服务器下载)

用Python侦测比特币交易的网络可视化分析_第3张图片

整个交易数据包含了近200万的交易记录,数据结构非常简单,就是在什么时间源ID=Src与目标ID=Dst,在一个时间戳timestamp有个交易,交易比特币的价格=btc。

200万的可视化本身就是一个大数据分析问题,只是单用Excel无法处理,在这里非常快可以处理和可视化。

用Python侦测比特币交易的网络可视化分析_第4张图片

从可视化表可以看到有68万的源交易ID,近86万的目标ID,比特币btc交易的统计量也显示出来。先对数据量和统计信息有个基本了解。

接下来我们要从timestamp时间戳变量抽取年、月、日字段。

用Python侦测比特币交易的网络可视化分析_第5张图片

我们有了比特币交易数据,但是交易的实际交割日的比特币相当多少美金,我们需要找到比特币交易数据集,我们找到和下载这个交易期的数据集Martet-price.csv。加载进来…

用Python侦测比特币交易的网络可视化分析_第6张图片

该数据集标识了交易期的bitcoin收盘价close-price。

下面我们将对应交易日期年、月、日的交易日与交易收盘价合并两个数据集。事先将时间戳抽取年、月、日

用Python侦测比特币交易的网络可视化分析_第7张图片

至此数据准备工作完成。

接下来我们需要探索数据的交易情况,可以用Python的matplotlib包进行图形分析。

用Python侦测比特币交易的网络可视化分析_第8张图片

分别得到月交易量,单一用户ID交易量和交易分布图(省略部分算法)

用Python侦测比特币交易的网络可视化分析_第9张图片

交易最大值出现在2011年2-7月

source和destination用户的交易分布

用Python侦测比特币交易的网络可视化分析_第10张图片

具有粗略幂律分布的长尾分布,表明大部分交易频次在1次左右。

接下来,我们需要将交易数据集构造成为图SGraph存储结构,以便进行网络=图的网络分析算法。

用Python侦测比特币交易的网络可视化分析_第11张图片

总共有约88万个节点(vertice)和约196万的边(edge)

用Python侦测比特币交易的网络可视化分析_第12张图片用Python侦测比特币交易的网络可视化分析_第13张图片

网络分析的重要统计量是度degree分布,通过计算出度outdegree和入度indegree和总degree的分布,我们可以看出度分布基本上服从幂律分布特性。

幂律分布的基本要点:越重大的事情越很少发生,存在少数个别节点起着重要的作用。

用Python侦测比特币交易的网络可视化分析_第14张图片

我们很容易查看一下top=5,出度和入度比较异常的outliers交易ID

我们还可以看看最大比特币交易量的top5

用Python侦测比特币交易的网络可视化分析_第15张图片

我们也可以计算特别指定的某交易ID=307659的P2P交易的主要情况。

接下来我们利用Pagerank算法计算网络交易的Pagerank值。

用Python侦测比特币交易的网络可视化分析_第16张图片

Pagerank是Google网页排名算法:一个网页的价值是由链接这个网页的网页的加权计算的。

用Python侦测比特币交易的网络可视化分析_第17张图片

接下来我们进入比特币交易网络分析和路径可视化。我们不可能将整个网络可视化出来(但目前也找到了可以用javascript进行大规模网络数据展现的可能性,还没有学完)

指定ID=9264的节点看该ID的交易一度网络。

用Python侦测比特币交易的网络可视化分析_第18张图片

选择特定节点筛选后的比特币交易网络的交易对象和交易值

用Python侦测比特币交易的网络可视化分析_第19张图片

交易账户的特定网络可视化

用Python侦测比特币交易的网络可视化分析_第20张图片

特点账户人物的交易网络

用Python侦测比特币交易的网络可视化分析_第21张图片

高亮两个特点节点的交易网络。

用Python侦测比特币交易的网络可视化分析_第22张图片

筛选后的某账户节点的交易行为。

用Python侦测比特币交易的网络可视化分析_第23张图片

某账户节点的比特币交易路径和资金交易行为。

用Python侦测比特币交易的网络可视化分析_第24张图片

两个账户交易日期的网络路径可视化。

通过上述操作,我们可以看到数据结构是非常简单的,分析思想和算法语法都可以模仿,比如如果我们能够拿到微信群抢红包数据,就可以进行相关网络挖掘。

如果谁建一个群,招募500个人玩抢红包,把数据保留下来,进行分析也是非常有意思的事情。数据量足够大的话甚至可以反推红包算法了。

当然我主要学习这个算法后处理移动手机通过清单,分析的原理是一样的。


本文作者:沈浩

来源:51CTO

你可能感兴趣的:(区块链,数据结构与算法,人工智能)