用Python偵測比特幣交易的網絡可視化分析
今天給大家介紹如何用網絡科學的大數據挖掘技術探索比特幣交易的網絡情況,特別是針對尺度較大的網絡分析思路。
一般來講,網絡分析主要采用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個人玩搶紅包,把數據保留下來,進行分析也是非常有意思的事情。數據量足夠大的話甚至可以反推紅包算法了。
當然我主要學習這個算法后處理移動手機通過清單,分析的原理是一樣的。