❶ 如何用python實現網路圖節點權重的添加以及如何把一個非連通的大網路圖分成多個小網路圖
networkx是python的一個庫,它為圖的數據結構提供演算法、生成器以及畫圖工具。近日在使用ryu進行最短路徑獲取,可以通過該庫來簡化工作量。該庫採用函數方式進行調用相應的api,其參數類型通常為圖對象。
函數API的調用,按照以下步驟來創建構建圖:
1.networkx的載入
在python中調用networkx通常只需要將該庫導入即可
import networkx as nx
2.圖對象的創建
networkx提供了四種基本圖對象:Graph,DiGraph,MultiGraph,MultiDiGraph。
使用如下調用方式,可以創建以上四種圖對象的空圖。
G=nx.Graph()
G=nx.DiGraph()
G=nx.MultiGraph()
G=nx.MultiDiGraph()
在 networkx中,圖的各個節點允許以哈希表對象來表示,而對於圖中邊的各個參量,則可以通過與邊相關聯的方式來標識,一般而言,對於權重,用weight作為keyword,而對於其他的參數,使用者可以採用任何除weight以外的keyword來命名。
3.在2中,創建的只是一副空圖,為了得到一個有節點、有邊的圖,一般採用下面這個函數:
1
2
G.add_edge(1,2) #default edge data=1
G.add_edge(1,2) #specify edge data=0.9
add_edge()函數,該函數在調用時需要傳入兩個參數u和v,以及多個可選參數
u和v即圖中的兩個節點,如果圖中不存在節點,在調用時會自動將這兩個節點添加入內,同時構建兩個節點之間的連接關系,可選參數通常指這條邊的權重等關系參量。需要注意的是,如果圖中已經存在了這條邊,重新進行添加時會對這條邊進行跟新操作(也就是覆蓋了原有的信息)。
對於該函數,除了上述的構建方式以外,還有以下幾種方式來創建邊:
1
2
3
G.add_edge(*e) # single edge as tuple of two nodes
G.add_edge(1, 3, weight=7, capacity=15, length=342.7) #using many arguements to create edge
G.add_edges_from( [(1, 2)] ) # add edges from iterable container
有時候,當採用默認方式創建邊以後,我們可能還會往邊裡面添加邊的相關參數,這時候,可以採用下面的方式來更新邊的信息:
1
2
3
4
5
#For non-string attribute keys, use subscript notation.
G.add_edge(1, 2)
G[1][2].update({0: 5}) #更新邊的信息
G.edges[1, 2].update({0: 5}) #更新邊的信息
#上述兩種更新方式,擇一選取即可
細心的朋友可能注意到我在寫創建圖的內容的時候,提到了add_edges_from()函數,該函數也是用來創建邊的,該方式與add_edges()略有不同,比之add_edges()採用一個一個節點的方式進行創建,它來的更為便利。這個函數在調用時,需要一個節點元組作為參數以及多個可選參數作為邊的信息。你可以這么傳遞:
默認創建節點之間的邊:
1
G.add_edges_from([(u,v)])
也可以這么寫,在創建的同時添加信息:
1
G.add_edges_from([(3, 4), (1, 4)], label='WN2898')
通過上述方式,就構建了一個3-4-1的圖的連接,並給每條邊打上了標簽。
由此你就可以創建出自己的圖模型了。
❷ Python中數據可視化經典庫有哪些
Python有很多經典的數據可視化庫,比較經典的數據可視化庫有下面幾個。
是Python編程語言及其數值數學擴展包 NumPy 的可視化操作界面。它利用通用的圖形用戶界面工具包,如 Tkinter, wxPython, Qt 或 GTK+,向應用程序嵌入式繪圖提供了應用程序介面。
pyplot 是 matplotlib 的一個模塊,它提供了一個類似 MATLAB 的介面。 matplotlib 被設計得用起來像 MATLAB,具有使用 Python 的能力。
優點:繪圖質量高,可繪制出版物質量級別的圖形。代碼夠簡單,易於理解和擴展,使繪圖變得輕松,通過Matplotlib可以很輕松地畫一些或簡單或復雜的圖形,幾行代碼即可生成直方圖、條形圖、散點圖、密度圖等等,最重要的是免費和開源。
優點:用於創建、操縱和研究復雜網路的結構、以及學習復雜網路的結構、功能及其動力學。
上面是我的回答,希望對您有所幫助!
❸ 怎樣基於python networkx實現社區發現
k_clique_communities的input是G,networkx的graph的數據結構。 所以原鏈接的test.txt文件應該是包涵一個graph的文件。
networkx可以讀取的graph文件種類如鏈接所示。Reading and writing graphs
常見的類型有edgelist (usually stored as a text file)和GML。如果我們用Network data 的dolphins social network (which is stored as a GML file)做例子的話,運行如下的code:
import networkx as nx import matplotlib.pyplot as plt G = nx.read_gml('dolphins.gml')klist = list(nx.k_clique_communities(G,3)) #list of k-cliques in the network. each element contains the nodes that consist the clique.#plottingpos = nx.spring_layout(G)plt.clf()nx.draw(G,pos = pos, with_labels=False)nx.draw(G,pos = pos, nodelist = klist[0], node_color = 'b')nx.draw(G,pos = pos, nodelist = klist[1], node_color = 'y')plt.show()
我們的到如下結果:
<img src="https://pic3.mg.com/50/v2-_hd.png" data-rawwidth="800" data-rawheight="600" class="origin_image zh-lightbox-thumb" width="800" data-original="https://pic3.mg.com/v2-_r.png">
which gives us four clique communities.
❹ 如何在Windows操作系統下安裝Python和Networkx
Networkx是一套基於Python的多種網路構造庫。因為之前沒有學過Python,因此一點點上手,這一篇講一講如何在Windows環境下安裝Python2.7和Networkx。
首先要澄清一下,如果是想深入系統學習Python的同學,還是盡早換Linux系統,因為Windows底下的庫安裝非常麻煩;而Linux底下只需要運行命令行(Terminal):
sudo apt-get install python-matplotlib
就可以了。
由於僅僅是使用Networkx構造數據的關系,以下簡單說明如何在Windows底下快速地安裝和使用Python2.7。
0. 先留個記號:Python的初學者指南
https://wiki.python.org/moin/BeginnersGuide
1. 下載Python 2.7,雙擊安裝
https://www.python.org/downloads/windows/
添加路徑變數:在<開始>菜單 - Control Panel - System and Security - System - Advanced System Settings - (Advanced Tab) - Environmental Variables - 找到『Path』,雙擊打開 - 添加路徑『C:\Python27』(系統安裝文件夾),一路確定。
確認安裝:在<開始>菜單 - 運行cmd - 進入命令行,輸入『python』,顯示
Python 2.7.8 (default, Jun 30 2014, 16:08:48)
即安裝成功。
(輸入exit()退出Python)
2. 安裝networkx之前,需要下載並安裝setuptools,下載地址:
https://pypi.python.org/pypi/setuptools
放到Python27的文件夾下,雙擊自動安裝。
3. 下載networkx,解壓文件夾,復制到Python27的文件夾下:
https://pypi.python.org/pypi/networkx/
在cmd窗口命令行下進入networkx的文件夾,輸入『python setup.py install』 安裝networkx庫。
安裝程序完成。
4. 測試程序:
在cmd任何路徑下進入python,使用小測試程序確認安裝成功!
http://networkx.github.io/examples.html
程序如下:
>>> import networkx as nx
>>> G=nx.Graph()
>>> G.add_node("spam")
>>> G.add_edge(1,2)
>>> print(G.nodes())
[1, 2, 'spam']
>>> print(G.edges())
[(1, 2)]
5. 附networkx的Tutorial:
https://networkx.github.io/documentation/latest/overview.html
networkx網路生成函數:
http://networkx.lanl.gov/reference/generators.html#mole-networkx.generators.random_graphs