1. 程式人生 > >複雜網路分析工具及其比較(轉)

複雜網路分析工具及其比較(轉)

剛加入複雜網路圈子,暫時還沒有成熟的研究內容,先發個資料性的東西佔坑:
作複雜網路研究離不開對各種實際或模擬網路的統計、計算、繪圖等工作。對於一般性的工作,我們可以用PajekNetdrawUcinet等軟體完成。但對一些特殊應用(比如自己開發了一個新模型),現有的軟體不能提供相應的建模或計算功能,這時就必須要通過程式設計的辦法來解決問題了。

在這篇文章中,向大家介紹我使用過的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官方網站:http://www.boost.org/doc/libs/1_42_0/libs/graph/
技術書籍《The Boost Graph Library》,作者: Jeremy G. Siek,Lie-QuanLee,Andrew Lumsdaine,見:http://www.douban.com/subject/1463103/
《使用Boost Graph library》,一個簡短的BGL使用介紹,適合快速上手,見:
http://www.cppprog.com/2009/0408/100.html

《Boost Graph Library 學習筆記》,討論學習BGL中遇到的問題,見:http://blog.csdn.net/magicblue/archive/2009/05/22/4208976.aspx

二、QuickGraph —— .NET平臺下的BGL

QuickGraph是一個用C#語言編寫的.NET元件庫,所提供的演算法與BGL類似,可以看作是Boost GraphLibrary在.NET平臺下的實現。目前QuickGraph的最高版本是3.3,支援.NET 2.0和.NET3.5平臺。

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


參考資源:
QuickGraph官方網站:http://www.codeplex.com/quickgraph
中文資料暫時還找不到。

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

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

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

參考資料:
igraph官方網站:http://igraph.sourceforge.net/
關於Python語言的介紹,見:http://zh.wikipedia.org/wiki/Python
關於R語言的介紹,見:http://zh.wikipedia.org/wiki/R語言

四、NetworkX ——全面支援複雜網路分析的Python包

NetworkX是一個建立和操縱複雜網路,並對複雜網路的結構、功能和動力學進行研究的Python包,它提供了目前應用最廣泛的一些複雜網路分析演算法,當然也包括基本的經典圖論演算法。NetworkX目前只能在Python語言中使用(這也是我學Python的原因之一,見《從C#到Python ——談談我學習Python一週來的體會》)。

我個人認為NetworkX比igraph要好用,因為NetworkX的文件更清晰易讀,程式結構組織得也很好,我現在主要在用這個包。但NetworkX的執行效率多數情況下會比igraph要低(見DrewConway所作的對比:http://files.meetup.com/1406240/sna_in_R.pdf)。所以也不適合作太大規模的網路分析計算。此外,NetworkX和Python的一個繪圖包——Matplotlib結合得很好,可很方便地進行復雜網路視覺化。

參考資源:
NetworkX官方網站:http://networkx.lanl.gov/
Matplotlib(科學繪圖的Python包):http://matplotlib.sourceforge.net


五、總結

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


附:幾個庫的開發及呼叫語言對比(*看來學Python還是不錯的,這幾個庫都可以呼叫-_-)

庫名稱 原始開發語言 可用某語言呼叫
BGL C++ C++/ Python(通過boost-python)
QuickGraph    C#
支援.NET平臺的任何語言(Python程式設計師可用IronPython)
igraph        C C/C++/R/Python(理論上至少有50種語言可直接或間接呼叫C程式)
NetworkX      Python Python


                

相關推薦

複雜網路分析工具及其比較

剛加入複雜網路圈子,暫時還沒有成熟的研究內容,先發個資料性的東西佔坑: 作複雜網路研究離不開對各種實際或模擬網路的統計、計算、繪圖等工作。對於一般性的工作,我們可以用Pajek、Netdraw和Ucinet等軟體完成。但對一些特殊應用(比如自己開發了一個新模型),現有的軟體不能提供相應的建模或計算功能,

各種圖論模型及其解答

歐拉公式 否則 但是 至少 接下來 分解 聯系 均可 競賽圖 原文轉自Jelline blog http://blog.chinaunix.net/uid-9112803-id-411340.html 摘要: 本文用另一種思路重新組織《圖論及其應用》相關知識。首先,用通俗化

Understand:高效代碼靜態分析神器詳解

none 前段時間 兩個 箭頭 ++ 開發 obj 結構 導入 之前用Windows系統,一直用source insight查看代碼非常方便,但是年前換到mac下面,雖說很多東西都方便了,但是卻沒有了靜態代碼分析工具,很幸運,前段時間找到一款比source insight軟

MFC單文件框架分析及執行流程

原文轉自 https://blog.csdn.net/u011619422/article/details/40402705   首先來分析一下MFC單文件類的結構: 它包括如下幾個類: CAboutDlg :  對話方塊框類,對應應用程式的“幫助”->“關於”選單,彈出“關

資料分析工具之Pandas轉載

一、Pandas統計計算和描述 示例程式碼: import numpy as np import pandas as pd df = pd.DataFrame(np.random.randn(5,4), columns = ['a', 'b', 'c', 'd']) print(d

資料分析工具之Pandas轉載

第三部分資料分析工具Pandas Pandas的名稱來自於面板資料(panel data)和Python資料分析(data analysis)。 Pandas是一個強大的分析結構化資料的工具集,基於NumPy構建,提供了 高階資料結構 和 資料操作工具,它是使Pytho

Unicode與中文轉換工具類方法

/* * 中文轉unicode編碼 */ public static String gbEncoding(final String gbString) { char[] utfBytes = gbString.toCharArray(); St

JAVA DateUtil 工具類封裝

原文連結 https://blog.csdn.net/wangpeng047/article/details/8295623    作者三次整理後的程式碼 下載連結   https://www.lanzous.com/i2pzpda github連結:

VirtualBox 和 Vmware 的比較

幾星期前我的XP出了個毛病,每隔幾分鐘就出現鍵盤和滑鼠沒有響應,持續5、6秒鐘,懷疑是病毒所致,可是卻無從下手。加上這段時間大多數時間都在 ubuntu 下面,使用感覺很不錯,於是有了使用它作為主作業系統的想法。可是我的工作要求使用windows下的工具進行程式設計和測試,完

VirtualBox虛擬機器配置CentOS7網路圖文詳解教程

之前很多次安裝CentOS7虛擬機器,每次配置網路在網上找教程,今天總結一下,全圖文配置,方便以後檢視。 Virtual Box可選的網路接入方式包括: NAT 網路地址轉換模式(NAT,Network Address Translation) Bridged Adapter 橋接模式 Internal

GML、VML、SVG的比較

GML、SVG和VML都是基於XML的可用來描述向量圖形的標記語言,都是XML詞表,它們的語法並不難理解,但它們都有各自不同的用途和特點,下面簡單介紹一下。 GML(Geography Markup Language) 是基於XML的空間資訊編碼標準,由OpenGIS C

一個小老闆眼中的開發工具— PowerBuilder 雜談

有人說一流的IT人員做老闆,二流的人員做軟體構架,三流的IT人員做專案管理,四流的IT人員做程式設計師。事實上,一般小型軟體公司不可能分得如此之細,而1+2+3+4就是我的日常工作。1.什麼是最好的開發工具?     什麼是最好的開發工具,其實這個問題從有計算機以來就是一直在探討和爭論,語言的發展也從最初的機

IPSEC與SSL/TLS的比較

Ipsec Ipsec顧名思義就是ip security,ip安全,主要應用於ip包傳輸的安全,也就是網路層的安全傳輸, IPSec提供了兩種安全機制:認證(採用ipsec的AH)和加密(採用ipsec的ESP)。 認證機制使IP通訊的資料接收方能夠確認資料傳送方的

開源靜態分析工具androguard體驗

雖然在windows端免費版的IDA、VTS等工具都可用來靜態分析,但相對來說這些工具用來人工分析在合適不過,但對於專案開發,相對來說都忽視很好擴充套件。而在androguard卻很適合進行擴充套件或者移植成為自己專案的某一模組,雖然早有耳聞,但也最近才動手體驗幾把。當然,

複雜網路系列】模組度Modularity 的計算方法

相關公式可參考論文《Finding and evaluating community structure in networks 》 Modularity Measure(模組

使用PHP+Swoole實現的網頁即時聊天工具:PHPWebIM

使用PHP+Swoole實現的網頁即時聊天工具 全非同步非阻塞Server,可以同時支援數百萬TCP連線線上 同時支援websocket+comet2種相容協議,可用於所有種類的瀏覽器包括IE 擁有完整的UI介面 支援單聊/群聊/組聊等功能 支援傳送表

高清播放機 主晶片 1073 8635 1283 方案之比較

高清播放機 主晶片 1073 8635 1283 方案之比較     http://www.ypbfq.net/thread-20-1-1.html 另外:透過現象看本質 高清機解碼4種方案   http://www.it.com.cn/dghome/hd/gqbfq/20

Linux用戶管理之使用/bin/false和/usr/sbin/nologin拒絕用戶登錄及其功能分析

其他 spa 狀態 roo 服務器 linux用戶 密碼 targe let /bin/nologin,/bin/false的意思是禁止某個用戶登錄。 比較常用的用法: #添加一個不能登錄的用戶 useradd -d /usr/local/apache -g ap

複雜網路複雜網路分析庫NetworkX學習筆記4:統計指標計算

無論是實際網路還是對模型網路進行分析,都離不開對網路拓撲統計指標的計算。反映網路結構與動力學特性的統計指標有很多,Costa等的Characterization of Complex Networks: A Survey of measurements一文對此有全面的綜述,本文僅介紹一些常用的統計指

網路抓包工具 wireshark 入門教程

Wireshark(前稱Ethereal)是一個網路資料包分析軟體。網路資料包分析軟體的功能是擷取網路資料包,並儘可能顯示出最為詳細的網路資料包資料。Wireshark使用WinPCAP作為介面,直接與網絡卡進行資料報文交換。 網路管理員使用Wireshark來檢測網路問題