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