NetworkX是一個用Python語言開發(fā)的圖論與復雜網(wǎng)絡建模工具,,內(nèi)置了常用的圖與復雜網(wǎng)絡分析算法,,可以方便的進行復雜網(wǎng)絡數(shù)據(jù)分析、仿真建模等工作,。我已經(jīng)用了它一段時間了,,感覺還不錯(除了速度有點慢),下面介紹我的一些使用經(jīng)驗,,與大家分享,。 一、NetworkX及Python開發(fā)環(huán)境的安裝 首先到http://pypi./pypi/networkx/下載networkx-1.1-py2.6.egg,,到http:///projects/pywin32/下載pywin32-214.win32-py2.6.exe,。如果要用Networkx的制圖功能,,還要去下載matplotlib和numpy,地址分別在http:///projects/matplotlib/和http:///projects/numpy/files/,。注意都要用Python 2.6版本的,。 上邊四個包中,pywin32,、matplotlib和numpy是exe文件,,按提示一路next,比較容易安裝,。而NetworkX是個egg文件,,安裝稍微麻煩,需要用easyinstall安裝,。具體方法: 啟動DOS控制臺(在“運行”里輸入cmd),,輸入C:\Python26\Lib\site-packages\easy_install.py C:\networkx-1.1-py2.6.egg,回車后會自動執(zhí)行安裝,。注意我是把networkx-1.1-py2.6.egg放到了C盤根目錄,,讀者在安裝時應該具體根據(jù)情況修改路徑。 安裝完成后,,啟動 “開始 - 程序 - ActiveState ActivePython 2.6 (32-bit) - PythonWin Editor”,,在shell中輸入: import networkx as nx print nx 如果能輸出: <module 'networkx' from 'C:\Python26\lib\site-packages\networkx-1.1-py2.6.egg\networkx\__init__.pyc'> 說明Networkx已經(jīng)安裝好了,可以正常調(diào)用,。 關于Python語言,,如果沒有接觸過可以找一本Python的語法書來看看(推薦《Python 精要參考(第二版)》,網(wǎng)上有電子版),。這個語言很簡單易學,,只要有點編程基礎,幾天就可以學會它,,然后就可以自如的運用它調(diào)用NetworkX了,。 二、建立圖或網(wǎng)絡 1,、無向圖 在PythonWin 的Shell里輸入: import networkx as nx #導入NetworkX包,,為了少打幾個字母,將其重命名為nx G = nx.Graph() #建立一個空的無向圖G G.add_node(1) #添加一個節(jié)點1 G.add_edge(2,3) #添加一條邊2-3(隱含著添加了兩個節(jié)點2,、3) G.add_edge(3,2) #對于無向圖,邊3-2與邊2-3被認為是一條邊 print G.nodes() #輸出全部的節(jié)點: [1, 2, 3] print G.edges() #輸出全部的邊:[(2, 3)] print G.number_of_edges() #輸出邊的數(shù)量:1 這樣就可以建立一個簡單的無向圖了,。如果你的數(shù)據(jù)是存在文件里的,,可以循環(huán)從文件中讀取節(jié)點和邊添加到G中。 2,、有向圖 有向圖的建立方式和無向圖基本類似,,只是在上述代碼的第二行,,將G = nx.Graph() 改為 G = nx.DiGraph() 。需要注意的是,,此時再添加邊3-2與邊2-3,,則被認為是兩條不同的邊(可以試著運行上述代碼,自己查看結果),。 同時,,有向圖和無向圖是可以相互轉化的,分別用到Graph.to_undirected() 和 Graph.to_directed()兩個方法,。 3,、加權圖(網(wǎng)絡) 有向圖和無向圖都可以給邊賦予權重,用到的方法是add_weighted_edges_from,,它接受1個或多個三元組[u,v,w]作為參數(shù),,其中u是起點,v是終點,,w是權重,。例如: G.add_weighted_edges_from([(0,1,3.0),(1,2,7.5)]) 添加0-1和1-2兩條邊,權重分別是3.0和7.5,。 如果想讀取權重,,可以使用get_edge_data方法,它接受兩個參數(shù)u和v,,即邊的起訖點,。例如: print G.get_edge_data(1,2) #輸出{'weight': 7.5},這是一個字典結構,,可以查看python語法了解它的用法,。 三、調(diào)用圖算法 NetworkX提供了常用的圖論經(jīng)典算法,,例如DFS,、BFS、最短路,、最小生成樹,、最大流等等,非常豐富,,如果不做復雜網(wǎng)絡,,只作圖論方面的工作,也可以應用NetworkX作為基本的開發(fā)包,。具體的算法調(diào)用方法我就不一一介紹了,,可以瀏覽NX的在線手冊http://networkx./reference/algorithms.html,對每個算法都提供了詳細的幫助文檔和示例,。下面只給出一個最短路算法的例子: path=nx.all_pairs_shortest_path(G) #調(diào)用多源最短路徑算法,,計算圖G所有節(jié)點間的最短路徑 print path[0][2] #輸出節(jié)點0,、2之間的最短路徑序列: [0, 1, 2] 四、小結 作為NetworkX學習筆記的第一部分,,今天先簡單介紹下NetworkX的安裝與基本使用方法,。后邊有時間會陸續(xù)介紹:用NetworkX進行復雜網(wǎng)絡拓撲結構統(tǒng)計指標計算、典型復雜網(wǎng)絡建模(隨機圖,、小世界,、無標度等)以及復雜網(wǎng)絡可視化的方法等,請感興趣的朋友關注并提出批評與意見,。 |
|