用Python偵測(cè)比特幣交易的網(wǎng)絡(luò)可視化分析
今天給大家介紹如何用網(wǎng)絡(luò)科學(xué)的大數(shù)據(jù)挖掘技術(shù)探索比特幣交易的網(wǎng)絡(luò)情況,特別是針對(duì)尺度較大的網(wǎng)絡(luò)分析思路。
一般來講,網(wǎng)絡(luò)分析主要采用Ucinet、Netdraw、Gephi、Cytoscape、NodeXL等,但是往往節(jié)點(diǎn)或邊數(shù)量受到限制,大部分只能處理節(jié)點(diǎn)或邊在5000-10萬之間,當(dāng)然我們也不要期望能夠?qū)?**別的節(jié)點(diǎn)和網(wǎng)絡(luò)呈現(xiàn)總體的可視化。
對(duì)于大尺度的網(wǎng)絡(luò)分析需要尋找新的編程思路,這里我們選擇Python編程IPython Notebook是俺學(xué)習(xí)和最喜歡的編程環(huán)境,特別是Graphlab包提供了SGraph圖數(shù)據(jù)包和分析Toolkits等一系列算法。
網(wǎng)絡(luò)科學(xué)成為大數(shù)據(jù)挖掘***代表性的算法和分析思想,無論是追蹤網(wǎng)絡(luò)交易行為、個(gè)性化推薦、計(jì)算PageRank、中心性測(cè)量等都需要我們有一套完善的網(wǎng)絡(luò)分析思想,復(fù)雜網(wǎng)絡(luò)科學(xué)的很多概念都會(huì)涉及到,不過今天主要是通過案例介紹Python分析比特幣交易的過程、偵測(cè)特點(diǎn)節(jié)點(diǎn)異常交易并可視化這種交易過程。
首先,俺找到了一個(gè)Bitcoin的交易數(shù)據(jù)集,Bitcoin.csv,75兆大小。
用Jupther Notebook來操作:
我們先加載必要的算法包和設(shè)定環(huán)境,表征輸出結(jié)果在Notebook里。
接下來我們把比特幣交易數(shù)據(jù)集Bitcoin.csv加載進(jìn)來,(也可以直接從云服務(wù)器下載)
整個(gè)交易數(shù)據(jù)包含了近200萬的交易記錄,數(shù)據(jù)結(jié)構(gòu)非常簡(jiǎn)單,就是在什么時(shí)間源ID=Src與目標(biāo)ID=Dst,在一個(gè)時(shí)間戳timestamp有個(gè)交易,交易比特幣的價(jià)格=btc。
200萬的可視化本身就是一個(gè)大數(shù)據(jù)分析問題,只是單用Excel無法處理,在這里非常快可以處理和可視化。
從可視化表可以看到有68萬的源交易ID,近86萬的目標(biāo)ID,比特幣btc交易的統(tǒng)計(jì)量也顯示出來。先對(duì)數(shù)據(jù)量和統(tǒng)計(jì)信息有個(gè)基本了解。
接下來我們要從timestamp時(shí)間戳變量抽取年、月、日字段。
我們有了比特幣交易數(shù)據(jù),但是交易的實(shí)際交割日的比特幣相當(dāng)多少美金,我們需要找到比特幣交易數(shù)據(jù)集,我們找到和下載這個(gè)交易期的數(shù)據(jù)集Martet-price.csv。加載進(jìn)來…
該數(shù)據(jù)集標(biāo)識(shí)了交易期的bitcoin收盤價(jià)close-price。
下面我們將對(duì)應(yīng)交易日期年、月、日的交易日與交易收盤價(jià)合并兩個(gè)數(shù)據(jù)集。事先將時(shí)間戳抽取年、月、日
至此數(shù)據(jù)準(zhǔn)備工作完成。
接下來我們需要探索數(shù)據(jù)的交易情況,可以用Python的matplotlib包進(jìn)行圖形分析。
分別得到月交易量,單一用戶ID交易量和交易分布圖(省略部分算法)
交易***值出現(xiàn)在2011年2-7月
source和destination用戶的交易分布
具有粗略冪律分布的長(zhǎng)尾分布,表明大部分交易頻次在1次左右。
接下來,我們需要將交易數(shù)據(jù)集構(gòu)造成為圖SGraph存儲(chǔ)結(jié)構(gòu),以便進(jìn)行網(wǎng)絡(luò)=圖的網(wǎng)絡(luò)分析算法。
總共有約88萬個(gè)節(jié)點(diǎn)(vertice)和約196萬的邊(edge)
網(wǎng)絡(luò)分析的重要統(tǒng)計(jì)量是度degree分布,通過計(jì)算出度outdegree和入度indegree和總degree的分布,我們可以看出度分布基本上服從冪律分布特性。
冪律分布的基本要點(diǎn):越重大的事情越很少發(fā)生,存在少數(shù)個(gè)別節(jié)點(diǎn)起著重要的作用。
我們很容易查看一下top=5,出度和入度比較異常的outliers交易ID
我們還可以看看***比特幣交易量的top5
我們也可以計(jì)算特別指定的某交易ID=307659的P2P交易的主要情況。
接下來我們利用Pagerank算法計(jì)算網(wǎng)絡(luò)交易的Pagerank值。
Pagerank是Google網(wǎng)頁排名算法:一個(gè)網(wǎng)頁的價(jià)值是由鏈接這個(gè)網(wǎng)頁的網(wǎng)頁的加權(quán)計(jì)算的。
接下來我們進(jìn)入比特幣交易網(wǎng)絡(luò)分析和路徑可視化。我們不可能將整個(gè)網(wǎng)絡(luò)可視化出來(但目前也找到了可以用javascript進(jìn)行大規(guī)模網(wǎng)絡(luò)數(shù)據(jù)展現(xiàn)的可能性,還沒有學(xué)完)
指定ID=9264的節(jié)點(diǎn)看該ID的交易一度網(wǎng)絡(luò)。
選擇特定節(jié)點(diǎn)篩選后的比特幣交易網(wǎng)絡(luò)的交易對(duì)象和交易值
交易賬戶的特定網(wǎng)絡(luò)可視化
特點(diǎn)賬戶人物的交易網(wǎng)絡(luò)
高亮兩個(gè)特點(diǎn)節(jié)點(diǎn)的交易網(wǎng)絡(luò)。
篩選后的某賬戶節(jié)點(diǎn)的交易行為。
某賬戶節(jié)點(diǎn)的比特幣交易路徑和資金交易行為。
兩個(gè)賬戶交易日期的網(wǎng)絡(luò)路徑可視化。
通過上述操作,我們可以看到數(shù)據(jù)結(jié)構(gòu)是非常簡(jiǎn)單的,分析思想和算法語法都可以模仿,比如如果我們能夠拿到微信群搶紅包數(shù)據(jù),就可以進(jìn)行相關(guān)網(wǎng)絡(luò)挖掘。
如果誰建一個(gè)群,招募500個(gè)人玩搶紅包,把數(shù)據(jù)保留下來,進(jìn)行分析也是非常有意思的事情。數(shù)據(jù)量足夠大的話甚至可以反推紅包算法了。
當(dāng)然我主要學(xué)習(xí)這個(gè)算法后處理移動(dòng)手機(jī)通過清單,分析的原理是一樣的。