【演算法】複雜網路之Networkx——手把手教你構建網路&分析資料
NetworkX是一款Python的開源軟體包,用於創造、操作複雜網路,內建了常用的圖與複雜網路分析演算法,可以方便的進行復雜網路資料分析、模擬建模等工作。功能豐富、簡單易用。
一、安裝
pip install networkx
二、資料構造
新建excel表格,輸入鄰接矩陣:
第一行代表邊:a-b ,a-c, a-d三條有向邊
其餘各行以此類推。
完成資料後,將excel表格另存為.txt檔案,隨後儲存為relation.adjlist即可。
三、讀取檔案及視覺化
import networkx as nx
import matplotlib.pyplot as plt
#G = nx.read_adjlist('config/relation.adjlist')#預設無向圖
G = nx.read_adjlist('config/relation.adjlist',create_using=nx.DiGraph())#建立有向圖
#nx.draw(G)
nx.draw(G,with_labels = True)
plt.show()
四、資料分析
網路分析常用函式包括以下幾種:
nx.degree(G)// 計算圖的密度,其值為邊數m除以圖中可能邊數(即n(n-1)/2)
nx.degree_centrality(G)//節點度中心繫數。通過節點的度表示節點在圖中的重要性,預設情況下會進行歸一化,其值表達為節點度d(u)除以n-1(其中n-1就是歸一化使用的常量)。這裡由於可能存在迴圈,所以該值可能大於1.
nx.closeness_centrality(G)//節點距離中心繫數。通過距離來表示節點在圖中的重要性,一般是指節點到其他節點的平均路徑的倒數,這裡還乘以了n-1。該值越大表示節點到其他節點的距離越近,即中心性越高。
nx.betweenness_centrality(G)
nx.transitivity(G)//圖或網路的傳遞性。即圖或網路中,認識同一個節點的兩個節點也可能認識雙方,計算公式為3*圖中三角形的個數/三元組個數(該三元組個數是有公共頂點的邊對數,這樣就好數了)。
nx.clustering(G)//圖或網路中節點的聚類係數。計算公式為:節點u的兩個鄰居節點間的邊數除以((d(u)(d(u)-1)/2)。
nx.transitivity(G)//圖或網路的傳遞性。即圖或網路中,認識同一個節點的兩個節點也可能認識雙方,計算公式為3*圖中三角形的個數/三元組個數(該三元組個數是有公共頂點的邊對數,這樣就好數了)。
分析手工構建的網路:
print(nx.degree_centrality(G))#節點度中心繫數 已歸一化
print(nx.closeness_centrality(G))#節點距離中心繫數
print(nx.betweenness_centrality(G))#節點介數中心繫數
輸出:
{u'a': 0.6666666666666666, u'c': 0.16666666666666666, u'b': 0.16666666666666666, u'e': 0.5, u'd': 0.16666666666666666, u'g': 0.16666666666666666, u'f': 0.16666666666666666}
{u'a': 0.5, u'c': 0.0, u'b': 0.0, u'e': 0.5208333333333334, u'd': 0.0, u'g': 0.42857142857142855, u'f': 0.0}
{u'a': 0.2, u'c': 0.0, u'b': 0.0, u'e': 0.16666666666666666, u'd': 0.0, u'g': 0.0, u'f': 0.0}