pythonnetworkx復雜網(wǎng)絡分析應用_第1頁
pythonnetworkx復雜網(wǎng)絡分析應用_第2頁
pythonnetworkx復雜網(wǎng)絡分析應用_第3頁
pythonnetworkx復雜網(wǎng)絡分析應用_第4頁
pythonnetworkx復雜網(wǎng)絡分析應用_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

pythonnetworkx復雜?絡分析應??章?錄networkx簡單介紹networkX是?個Python包,?于創(chuàng)建、操作和研究復雜?絡的結(jié)構(gòu)、動態(tài)和功能。安裝只需在控制臺使?pip安裝即可,問題不?。pipinstallnetworkx不過復雜?絡畢竟還是要可視化的,這邊建議您同時使?python圖形庫matplotlibimportnetworkxasnximportmatplotlib.pyplotaspltnetworkx基本操作根據(jù)圖的定義,圖是節(jié)點的集合,并且節(jié)點間有依賴關(guān)系(邊)。在NetworkX中,節(jié)點可以是任何可刷新的對象,如?本字符串、圖像、XML對象、另?個圖(Graph)、?定義節(jié)點對象等。使?如下代碼,即可?成?個圖。G=nx.Graph()節(jié)點(Nodes)使?如下代碼,即可?成包含三個節(jié)點的圖,當然沒有邊連接的圖就看起來特別搞笑。importnetworkxasnximportmatplotlib.pyplotaspltG=nx.Graph()#?成圖G.add_node(1)#添加?個節(jié)點G.add_nodes_from([2,3])#添加列表?的節(jié)點#可視化nx.draw(G)plt.show()邊(Nodes)直接定義邊連接,?需重新定義節(jié)點。importnetworkxasnximportmatplotlib.pyplotaspltG=nx.Graph()#?成圖G.add_edge(1,2)#添加?條邊G.add_edges_from([(1,3),(2,3)])#添加列表?的邊#可視化nx.draw(G)plt.show()節(jié)點與邊的屬性信息如下代碼可以為圖、節(jié)點、邊添加屬性信息。importnetworkxasnximportmatplotlib.pyplotasplt#為圖添加屬性G=nx.Graph(day="Friday")print(G.graph)#為節(jié)點添加屬性G.add_node(1,time='5pm')G.add_nodes_from([3],time='2pm')print(G.nodes[1])G.nodes[1]['room']=714print(G.nodes.data())#為邊添加屬性G.add_edges_from([(1,2),(1,3)])print(G.edges[1,2])G.edges[1,2]['color']="red"#為邊添加屬性print(G.edges[1,2])>>>{'day':'Friday'}>>>{'time':'5pm'}>>>NodeDataView({1:{'time':'5pm','room':714},3:{'time':'2pm'}})>>>{}>>>{'color':'red'}節(jié)點與邊的其他操作當添加新的節(jié)點、邊時,networkx會忽略任何已經(jīng)存在的節(jié)點、邊。importnetworkxasnximportmatplotlib.pyplotaspltG=nx.Graph()G.add_edges_from([(1,2),(1,3)])G.add_node(1)G.add_edge(1,2)G.add_node("spam")#添加節(jié)點"spam"G.add_nodes_from("spam")#添加四個節(jié)點:'s','p','a','m'G.add_edge(3,'m')nx.draw(G,with_labels=True,font_weight='bold')#顯?標簽,字體加粗plt.show()可視化結(jié)果啊啊啊啊同時也可以輸出圖中節(jié)點和邊的數(shù)量等信息。>>>G.number_of_nodes()8>>>G.number_of_edges()3>>>list(G.nodes)[1,2,3,'spam','s','p','a','m']>>>list(G.edges)[(1,2),(1,3),(3,'m')]>>>list(G.adj[1])#或list(G.neighbors(1)),輸出節(jié)點1的關(guān)聯(lián)節(jié)點[2,3]>>>G.degree[1]#?向圖中節(jié)點1的度,也就是該節(jié)點關(guān)聯(lián)節(jié)點的數(shù)量,也可以理解成連接邊數(shù)量2在圖中刪除節(jié)點與連邊>>>G.remove_node(2)>>>G.remove_nodes_from("spam")>>>G.remove_edge(1,3)>>>>list(G.nodes)[1,3,'spam']圖的遍歷操作遍歷操作是特別重要的,G.adjacency()和G.adj.items()可以對圖快速遍歷。不過需要注意的是,對于?向圖??,迭代會看到每條邊兩次。>>>FG=nx.Graph()>>>FG.add_weighted_edges_from([(1,2,0.125),(1,3,0.75),(2,4,1.2),(3,4,0.375)])>>>forn,nbrsinFG.adj.items():.........fornbr,eattrinnbrs.items():wt=eattr['weight']ifwt<0.5:print('(%d,%d,%.3f)'%(n,nbr,wt))(1,2,0.125)(2,1,0.125)(3,4,0.375)(4,3,0.375)通過邊線屬性可以?便地訪問符合權(quán)重?于0.5的邊。>>>for(u,v,wt)inFG.edges.data('weight'):...ifwt<0.5:print('(%d,%d,%.3f)'%(u,v,wt))(1,2,0.125)(3,4,0.375)有向圖與度有向圖就需要指定權(quán)重,并且節(jié)點會有出度值以及?度值。importnetworkxasnximportmatplotlib.pyplotaspltDG=nx.DiGraph()DG.add_weighted_edges_from([(1,2,0.5),(3,1,0.75)])print(DG.in_degree(1,weight='weight'))#節(jié)點1的?度值print(DG.out_degree(1,weight='weight'))#節(jié)點1的出度值print(DG.degree(1,weight='weight'))#節(jié)點1的度>>>0.75>>>0.5>>>1.25其他?成圖的?式除了按節(jié)點構(gòu)建圖或按邊構(gòu)建圖外,還可以通過其他?法?成圖。例如?成?個神秘的陣法。importnetworkxasnximportmatplotlib.pyplotaspltG=nx.dodecahedral_graph()#???體?options={'node_color':'black','node_size':100,'width':3,}shells=[[2,3,4,5,6],[8,1,0,19,18,17,16,15,14,7],[9,10,11,12,13]]nx.draw_shell(G,nlist=shells,**options)plt.show()在這?插?圖?描述都是?些騷操作,在此不做展開。networkx簡單應?以Wikivote投票?絡學習復雜?絡基本名詞以及networkx包對復雜?絡進?基本操作,并通過隨機ER圖、SW?世界圖和真實的合作?絡數(shù)據(jù)集為例,學習?絡的基本分析?法。數(shù)據(jù)來源importnetworkxasnximportmatplotlib.pyplotaspltG=nx.DiGraph()#讀取數(shù)據(jù)withopen('Wiki-Vote.txt')asf:forlineinf:iflen(line.split())>2:#tx?t件中前?四?是注釋信息continue#該判斷語句作?是過濾掉前四?data_line=line.split()G.add_edge(data_line[0],data_line[1])print('?絡中的節(jié)點數(shù)量:%d'%nx.number_of_nodes(G))#有沒有??投票給??的print('?絡有?環(huán)的節(jié)點數(shù)量:%d'%nx.number_of_selfloops(G))#既然沒有?環(huán)節(jié)點,那有向邊數(shù)量就是所有邊的數(shù)量print('?絡中有向邊數(shù)量:%d'%G.number_of_edges())#有多少對節(jié)點互相投票count=0forxinG.edges:if(x[1],x[0])inG.edges:count+=1print('?絡中互惠邊數(shù)量:%d'%(count//2))#計算?度和出度為0的節(jié)點count=0forxinG.in_degree():ifx[1]!=0:count+=1print('?絡?度為0的節(jié)點:%d'%(count))count=0forxinG.out_degree():ifx[1]!=0:count+=1print('?絡出度為0的節(jié)點:%d'%(count))#計算?度和出度?于10count=0的節(jié)點forxinG.in_degree():ifx[1]<10:count+=1print('?絡?度?于10的節(jié)點:%d'%(count))count=0forxinG.out_degree():ifx[1]>10:count+=1print('?絡出度?于10的節(jié)點:%d'%(count))輸出?絡中的節(jié)點數(shù)量:7115?絡有?環(huán)的節(jié)點數(shù)量:0?絡中有向邊數(shù)量:103689?絡中互惠邊數(shù)量:2927?絡?度為0的節(jié)點:2381?絡出度為0的節(jié)點:6110?絡?度?于10的節(jié)點:5165?絡出度?于10的節(jié)點:1612此為本?兩年前復雜?絡課程作業(yè),本?并沒有仔細關(guān)注有些計算是否有對應的?法,因此?些計算采?了迭代的?式算出結(jié)果,歡迎指正。networkx進階應?有向隨機圖通過調(diào)?以下?法實現(xiàn)gnm_random_graph(n,k,seed,directed=True])返回隨機圖importnetworkxasnximportmatplotlib.pyplotaspltimportnumpyasnp#?成n=5242個節(jié)點以及m=14484條邊的有向隨機圖。n=5242m=14484G1=nx.gnm_random_graph(n,m,seed=7,directed=True)nx.draw(G1,node_size=70)plt.show()Watts–Strogatz?世界圖通過調(diào)?以下?法實現(xiàn)watts_strogatz_graph(n,k,p[,seed])返回Watts–Strogatz?世界圖通過nx.watts_strogatz_graph(5242,4,p=0,seed=7)?法?成?個節(jié)點為5242的有向圖,每個節(jié)點與相鄰最近的4個節(jié)點相連,與其他節(jié)點相連的概率為0,隨機種?為7,通過pos布局設(shè)置為環(huán)狀。importnetworkxasnximportmatplotlib.pyplotaspltimportnumpyasnpn=5242k=4G=nx.watts_strogatz_graph(n,k,p=0,seed=7)pos=nx.circular_layout(G,scale=1,center=None,dim=2)print("sw?世界邊數(shù)為:",nx.number_of_edges(G)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論