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