1. 程式人生 > >【演算法】複雜網路之Networkx——手把手教你構建網路&分析資料

【演算法】複雜網路之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)

//節點介數中心繫數。在無向圖中,該值表示為節點作佔最短路徑的個數除以((n-1)(n-2)/2);在有向圖中,該值表達為節點作佔最短路徑個數除以((n-1)(n-2))。

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}