複雜網路分析常用的程式庫

2021-07-07 06:52:52 字數 2423 閱讀 7527

剛加入

複雜網路圈子

,暫時還沒有成熟的研究內容,先發個資料性的東西佔坑:)

作複雜網路研究離不開對各種實際或模擬網路的統計、計算、繪圖等工作。對於一般性的工作,我們可以用

pajek

、netdraw

和ucinet

等軟體完成。但對一些特殊應用(比如自己開發了乙個新模型),現有的軟體不能提供相應的建模或計算功能,這時就必須要通過程式設計的辦法來解決問題了。

在這篇文章中,向大家介紹我使用過的4個面向圖論及複雜網路分析的程式庫,它們可以(分別或同時)用c、c++、c#和python等語言呼叫。同時這些庫都是開源的,可以通過研讀它們的源**提高程式設計水平。

好,下邊開始介紹,第一位出場的是:

一、boost graph library —— 「準」c++標準庫

boost graph library(bgl)是c++ boost庫的成員之一。boost是乙個經過千錘百鍊的c++庫,作為標準模板庫stl的後備,是c++標準化程序的發動機之一。boost庫由c++標準委員會庫工作組成員發起,在c++社群中影響甚大,是不折不扣的「準」標準庫。

bgl的特點是靈活性和高執行效率。bgl是以模板的形式提供的,這意味著你可以在模板的基礎上建立自己的型別,比如自定義的節點類。bgl的開發者是世界上最頂尖的c++專家,這個庫中實現的各種圖演算法具有非常高的執行效率,而且bgl本身具有工業強度,你可以放心的使用它。此外,bgl的**結構良好,是非常值得研讀的精品,對於學習演算法與資料結構會有很大的幫助。

從我的角度來看,bgl的缺點是沒有提供複雜網路分析的演算法,所以在實際中我使用的還不多。建議對於分析大規模的網路問題時使用這個庫,利用它良好的圖資料結構,開發自己的複雜網路分析演算法,將會獲得很高的執行效率。

參考資源:

bgl官方**:

《使用boost graph library》,乙個簡短的bgl使用介紹,適合快速上手,見:

《boost graph library 學習筆記》,討論學習bgl中遇到的問題,見:

二、quickgraph —— .net平台下的bgl

quickgraph是乙個用c#語言編寫的.net元件庫,所提供的演算法與bgl類似,可以看作是boost graph library在.net平台下的實現。目前quickgraph的最高版本是3.3,支援.net 2.0和.net 3.5平台。

對於複雜網路研究,quickgraph能夠提供的幫助與bgl基本類似。如果你對c#語言(以及其它支援.net的語言)比較熟悉,可以考慮選擇這個庫。但由於.net程式是在虛擬機器下執行的原因,所以效率不夠高,不適合處理大規模的計算問題。

參考資源:

quickgraph官方**:

中文資料暫時還找不到。

三、igraph —— c語言寫的複雜網路分析庫

igraph是乙個建立和操縱無向圖、有向圖的開源c程式庫,它既包含經典圖論裡的各種演算法(例如最小支撐樹、網路流等),也包含了最近的出現的一些網路分析演算法(如社團結構搜尋等)。

igraph是c寫的,這意味著你很容易在c/c++中使用它。如果你不熟悉這兩種語言,或者覺得用c/c++太繁瑣的話,igraph還提供了r語言(一種國外很流行的統計分析語言)和python語言的介面,所以也很適合科研人員使用(我現在用的是python,呼叫igraph很簡單)。

參考資料:

igraph官方**:http:/

/igraph.sourceforge.net/

關於python語言的介紹,見:

關於r語言的介紹,見:

語言四、networkx —— 全面支援複雜網路分析的python包

networkx是乙個建立和操縱複雜網路,並對複雜網路的結構、功能和動力學進行研究的python包,它提供了目前應用最廣泛的一些複雜網路分析演算法,當然也包括基本的經典圖論演算法。networkx目前只能在python語言中使用(這也是我學python的原因之一,見《

從c#到python —— 談談我學習python一周來的體會

》)。我個人認為networkx比igraph要好用,因為networkx的文件更清晰易讀,程式結構組織得也很好,我現在主要在用這個包。但networkx的執行效率多數情況下會比igraph要低(見drew conway所作的對比:

)。所以也不適合作太大規模的網路分析計算。此外,networkx和python的乙個繪圖包——matplotlib結合得很好,可很方便地進行複雜網路視覺化。

參考資源:

networkx官方**:

matplotlib(科學繪圖的python包):

五、總結

本文介紹了圖論與複雜網路研究常用的一些程式庫。用好這些程式庫(以及其它一些軟體工具),可以避免我們無謂的re-invent the wheel,從而提高工作效率。在網上了解到,國外同行用這些庫的很多,而在國內還很少搜尋到這方面的資料(除了bgl)。作為我進複雜網路圈的敲門磚,向各位圈友推薦這幾個庫。另外,我近期正在學習python和networkx,如果您感興趣,歡迎和我交流:)

複雜網路分析拓撲指標

1.點強度 無向圖研究節點i所有連線的邊的權重和作為點i的點強度,在複雜網路分析中,節點的點強度越大,說明該節點轉換至其他節點的頻數越多,該節點越重要。平均點強度就是所有點強度和除所有點的個數所得到的值 2.加權聚類係數 對於加權複雜網路,節點i的加權聚類係數定義為 式子中,k為節點i的度 a表徵節...

複雜網路分析之資料準備篇

關係圖之原始資料 我給大家編了下面兩組原始資料,試圖畫出abcd四元素之間的關係 nodes data a b c d raw data acw aca cae ec cd dc 我們做關係網路前的最初始資料最好就是上面這樣子,這種資料格式還是比較簡單的。nodes data表示節點資料,用來在圖中...

嗯嗯嗯 複雜網路分析(二)

咱們還是從頭開始研究。以下是我導師的博士 的主要內容,我借其用來學習學習。整個學習流程所涉及的知識點還是很多的。學習路線就是這麼乙個情況,我試著從頭開始,看能不能完成呢!1.複雜網路概論 1.1複雜網路的特性 1.2網路屬性 1.3網路模型 1.4資訊網路 2.複雜網路上的資訊過濾 2.1推薦系統 ...