




版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 黃岡科技職業(yè)學院《機器學習與人工智能》2023-2024學年第二學期期末試卷
- 天津師范大學《形體訓練(流行舞蹈)》2023-2024學年第二學期期末試卷
- 吉林省四平市伊通滿族自治縣2024-2025學年數(shù)學四年級第二學期期末復習檢測試題含解析
- 2025年昌都地區(qū)貢覺縣五下數(shù)學期末調(diào)研模擬試題含答案
- 2025屆湖北省武漢市經(jīng)濟開發(fā)區(qū)四年級數(shù)學第二學期期末質(zhì)量跟蹤監(jiān)視模擬試題含解析
- 沈陽航空航天大學北方科技學院《污染控制化學及工程》2023-2024學年第二學期期末試卷
- 朝陽師范高等??茖W校《學校心理危機干預》2023-2024學年第二學期期末試卷
- 杭州電子科技大學《衛(wèi)生財務管理》2023-2024學年第二學期期末試卷
- 系統(tǒng)配置更改后的驗證恢復
- 大連商務職業(yè)學院《英語教師課堂用語》2023-2024學年第二學期期末試卷
- 2025年呼和浩特職業(yè)學院單招職業(yè)傾向性測試題庫及參考答案
- 醫(yī)學遺傳學教案-山東大學醫(yī)學遺傳學
- 四川德陽歷年中考語文文言文閱讀試題12篇(含答案與翻譯)(截至2024年)
- 合唱之美知到智慧樹章節(jié)測試課后答案2024年秋山東航空學院
- 海南省澄邁縣2024-2025學年七年級上學期期末考試地理試題(含答案)
- 食品安全演練預案及流程
- 2025年蘇州衛(wèi)生職業(yè)技術(shù)學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2025屆威海市高三語文上學期期末考試卷附答案解析
- 新能源汽車充電設(shè)施建設(shè)規(guī)劃與管理計劃
- 心房顫動診斷和治療中國指南解讀課件
評論
0/150
提交評論