图论与复杂网络建模工具Networkx的四种网络模型
Networkx的四種網絡模型
- 一. Networkx的下載安裝
- 二. 規則圖
- 三、ER隨機圖
- 四、WS小世界網絡
- 五、BA無標度網絡
- 六. 總結
NetworkX提供了4種常見網絡的建模方法,分別是:規則圖,ER隨機圖,WS小世界網絡和BA無標度網絡。
一. Networkx的下載安裝
畫圖之前先將NetworkX裝好,直接pip install Networkx的話會特別慢,而且通常會失敗,所以我一般都是先把庫下載下來,再在本地安裝。
1、下載傳送門:https://pypi.org/project/networkx/#files
我下載的這個:
2、放到自己指定的文件夾(隨意)
3、本地安裝
二. 規則圖
規則圖差不多是最沒有復雜性的一類圖,random_graphs.random_regular_graph(d, n)方法可以生成一個含有n個節點,每個節點有d個鄰居節點的規則圖。
下面一段示例代碼,生成了包含20個節點、每個節點有3個鄰居的規則圖:
三、ER隨機圖
ER隨機圖是早期研究得比較多的一類“復雜”網絡,模型的基本思想是以概率p連接N個節點中的每一對節點。
用random_graphs.erdos_renyi_graph(n,p)方法生成一個含有n個節點、以概率p連接的ER隨機圖:
四、WS小世界網絡
用random_graphs.watts_strogatz_graph(n, k, p)方法生成一個含有n個節點、每個節點有k個鄰居、以概率p隨機化重連邊的WS小世界網絡。
import networkx as nx import matplotlib.pyplot as plt #生成一個含有20個節點、每個節點有4個鄰居、以概率p=0.3隨機化重連邊的WS小世界網絡 WS = nx.random_graphs.watts_strogatz_graph(20, 4, 0.3) # circular 布局 pos = nx.circular_layout(WS) nx.draw(WS, pos, with_labels = False, node_size = 30) plt.show()五、BA無標度網絡
用random_graphs.barabasi_albert_graph(n, m)方法生成一個含有n個節點、每次加入m條邊的BA無標度網絡。
import networkx as nx import matplotlib.pyplot as plt #生成一個含有20個節點、每次加入1條邊的BA無標度網絡。 BA = nx.random_graphs.barabasi_albert_graph(20, 1) # spring 布局 pos = nx.spring_layout(BA) nx.draw(BA, pos, with_labels = False, node_size = 30) plt.show()六. 總結
(1)基本繪圖流程:
在NetworkX中,繪制一個網絡使用nx.draw()方法,它至少接受一個參數:即你希望繪制的網絡G。實際上這個方法非常復雜,它可以指定20多個關鍵字參數,后邊會介紹一些常用的參數,我們先從最簡單的情況入手,看看下邊的例子:
(2)運用樣式
上邊的代碼雖然簡單,但生成的圖形略顯單調。NetworkX提供了一系列樣式參數,可以用來修飾和美化圖形,達到我們想要的效果。常用的參數包括:
- node_size: 指定節點的尺寸大小(默認是300,單位未知,就是上圖中那么大的點)
- node_color: 指定節點的顏色 (默認是紅色,可以用字符串簡單標識顏色,例如’r’為紅色,'b’為綠色等,具體可查看手冊)
- node_shape: 節點的形狀(默認是圓形,用字符串’o’標識,具體可查看手冊)
- alpha: 透明度 (默認是1.0,不透明,0為完全透明)
- width: 邊的寬度 (默認為1.0)
- edge_color: 邊的顏色(默認為黑色)
- style: 邊的樣式(默認為實現,可選: solid|dashed|dotted,dashdot)
- with_labels: 節點是否帶標簽(默認為True)
- font_size: 節點標簽字體大小 (默認為12)
- font_color: 節點標簽字體顏色(默認為黑色)
靈活運用上述參數,可以繪制不同樣式的網絡圖形,例如:nx.draw(G,node_size = 30,with_labels = False) 是繪制節點尺寸為30、不帶標簽的網絡圖。
(3)運用布局
NetworkX在繪制網絡圖形方面提供了布局的功能,可以指定節點排列的形式。這些布局包括:
circular_layout:節點在一個圓環上均勻分布
random_layout:節點隨機分布
shell_layout:節點在同心圓上分布
spring_layout: 用Fruchterman-Reingold算法排列節點(這個算法我不了解,樣子類似多中心放射狀)
spectral_layout:根據圖的拉普拉斯特征向量排列節點?我也不是太明白
布局用pos參數指定,例如:nx.draw(G,pos = nx.circular_layout(G))。
我的第二篇博客,部分參考了他人的,參考鏈接在底部。初學者,歡迎交流!
參考:https://www.cnblogs.com/forstudy/archive/2012/03/20/2407954.html
https://www.cnblogs.com/gispathfinder/p/5790949.html
總結
以上是生活随笔為你收集整理的图论与复杂网络建模工具Networkx的四种网络模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机创业计划书800字大全,2017创
- 下一篇: 网络攻防WEB入门指南