pythonnetworkx
『壹』 怎樣基於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.
『貳』 Python中數據可視化經典庫有哪些
Python有很多經典的數據可視化庫,比較經典的數據可視化庫有下面幾個。
matplotlib
是Python編程語言及其數值數學擴展包 NumPy 的可視化操作界面。它利用通用的圖形用戶界面工具包,如 Tkinter, wxPython, Qt 或 GTK+,向應用程序嵌入式繪圖提供了應用程序介面。
pyplot 是 matplotlib 的一個模塊,它提供了一個類似 MATLAB 的介面。 matplotlib 被設計得用起來像 MATLAB,具有使用 Python 的能力。
優點:繪圖質量高,可繪制出版物質量級別的圖形。代碼夠簡單,易於理解和擴展,使繪圖變得輕松,通過Matplotlib可以很輕松地畫一些或簡單或復雜的圖形,幾行代碼即可生成直方圖、條形圖、散點圖、密度圖等等,最重要的是免費和開源。
優點:用於創建、操縱和研究復雜網路的結構、以及學習復雜網路的結構、功能及其動力學。
上面是我的回答,希望對您有所幫助!
『叄』 python的networkx怎麼給邊加註釋
應該是不可以的
#!/usr/bin/env python
"""
Draw a graph with matplotlib.
You must have matplotlib for this to work.
"""
__author__ = """Aric Hagberg ([email protected])"""
try:
import matplotlib.pyplot as plt
except:
raise
import networkx as nx
G=nx.house_graph()
# explicitly set positions
pos={0:(0,0),
1:(1,0),
2:(0,1),
3:(1,1),
4:(0.5,2.0)}
nx.draw_networkx_nodes(G,pos,node_size=2000,nodelist=[4])
nx.draw_networkx_nodes(G,pos,node_size=3000,nodelist=[0,1,2,3],node_color='b')
nx.draw_networkx_edges(G,pos,alpha=0.5,width=6)
plt.axis('off')
plt.savefig("house_with_colors.png") # save as png
plt.show() # display
『肆』 如何用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中networkx中shortest_path使用的是哪一種最短路徑方法
不全是。依據傳入的參數決定調用哪種演算法。
看源碼:至少涉及了dijkstra、廣度優先/深度優先演算法。
ifsourceisNone:
iftargetisNone:
##Findpathsbetweenallpairs.
ifweightisNone:
paths=nx.all_pairs_shortest_path(G)
else:
paths=nx.all_pairs_dijkstra_path(G,weight=weight)
else:
##Findpathsfromallnodesco-accessibletothetarget.
directed=G.is_directed()
ifdirected:
G.reverse(=False)
ifweightisNone:
paths=nx.single_source_shortest_path(G,target)
else:
paths=nx.single_source_dijkstra_path(G,target,weight=weight)
#.
fortargetinpaths:
paths[target]=list(reversed(paths[target]))
ifdirected:
G.reverse(=False)
else:
iftargetisNone:
##.
ifweightisNone:
paths=nx.single_source_shortest_path(G,source)
else:
paths=nx.single_source_dijkstra_path(G,source,weight=weight)
else:
##Findshortestsource-targetpath.
ifweightisNone:
paths=nx.bidirectional_shortest_path(G,source,target)
else:
paths=nx.dijkstra_path(G,source,target,weight)