R語言igraph 包-構建網絡圖


igaph 是一個項目,目標是建立一條簡單,易用的網絡分析工具,有 R, python, C/C++ 等語言的具體實現;

項目主頁:

http://igraph.org/

在R語言中,對應的就是 igraph 這個R包

安裝:

install.packages("igraph")

使用:

對於圖 graph 這種數據結構而言,最基本的元素包括節點(node) 和 邊(節點之間的連線,edge);

igraph 這個R包提供了很多種創建graph的方式,我們先看一個最基本的例子,從數據框創建一個graph;

我們將要創建的graph 如下:

可以看到,這個graph 包括5個節點,首先創建一個數據框,這個數據框中的每一行是一個節點,每一列是節點的屬性

代碼如下:

> 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM