igaph 是一個項目,目標是創建一條簡單,易用的網絡分析工具,有 R, python, C/C++ 等語言的具體實現;node
項目主頁:python
http://igraph.org/算法
在R語言中,對應的就是 igraph 這個R包網絡
安裝:數據結構
install.packages("igraph")
使用:wordpress
對於圖 graph 這種數據結構而言,最基本的元素包括節點(node) 和 邊(節點之間的連線,edge);函數
igraph 這個R包提供了不少種建立graph的方式,咱們先看一個最基本的例子,從數據框建立一個graph;工具
咱們將要建立的graph 以下:佈局
能夠看到,這個graph 包括5個節點,首先建立一個數據框,這個數據框中的每一行是一個節點,每一列是節點的屬性.net
代碼以下:
> actors <- data.frame(name=c("Alice", "Bob", "Cecil", "David", "Esmeralda"), age=c(48,33,45,34,21), gender=c("F","M","F","M","F")) > actors name age gender 1 Alice 48 F 2 Bob 33 M 3 Cecil 45 F 4 David 34 M 5 Esmeralda 21 F
actors 這個數據框保存了圖中全部節點的信息,共5個節點,有name, age, gender 3種屬性;注意節點的屬性是自定義的
接下來建立另一個數據框,保存邊的信息,
代碼以下:
> relations <- data.frame(from=c("Bob", "Cecil", "Cecil", "David", + "David", "Esmeralda"), + to=c("Alice", "Bob", "Alice", "Alice", "Bob", "Alice"), + same.dept=c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE), + friendship=c(4,5,5,2,1,1), advice=c(4,5,5,4,2,3)) > relations from to same.dept friendship advice 1 Bob Alice FALSE 4 4 2 Cecil Bob FALSE 5 5 3 Cecil Alice TRUE 5 5 4 David Alice FALSE 2 4 5 David Bob FALSE 1 2 6 Esmeralda Alice TRUE 1 3
relations 數據框保存了節點之間的連線信息, from, to 兩列描述了這條邊是從哪一個節點到哪一個檢點,最後的3列是每條邊的一些自定義的屬性
當兩個數據框建立完成以後,就能夠利用 graph_from_data_frame 函數建立一個graph, 代碼以下:
g <- graph_from_data_frame(relations, directed=TRUE, vertices=actors)
第一個參數是保存edge 信息的數據框,directed 參數控制graph 有無方向,vertices 參數是保存節點信息的數據框
最後進行一個簡單的可視化
plot(p)
就能夠獲得以下所示的圖:
上面只是最基本的可視化的例子,對於graph 而言,有directed graph 和 undirected graph 兩種,在可視化的時候,最核心的東西是計算每一個節點的位置,對於不一樣類型的graph, 有不一樣的自動化的佈局算法
經過layout 參數能夠方便的指定,使用不一樣的佈局算法
代碼示例:
plot(g, layout = layout.fruchterman.reingold)
效果圖以下:
參考資料:
https://rdatamining.wordpress.com/2012/05/17/an-example-of-social-network-analysis-with-r-using-package-igraph/
http://kateto.net/networks-r-igraph