1.R语言网络数据分析概述
R语言的网络数据分析用途多样而且实用。R语言提供了多个图形类型软件包实现分析,因此获得广泛应用。在大数据分析中,R语言有优势。R语言网络分析的特点是(1)编程简单。不想c、C++,java等难学。(2)网络分析灵活。例如Cytoscape(http//www.cytoscape.org/)生物学网络软件,尽管能输出许多分析的报表,但是只能做常规的、固定的网络分析。不能接受多种的网络数据格式,而且不能适用不同的算法,例如修改图的广度优先算法,因此适应性差。
1.R语言创建网路分析图的软件包
network软件包
2.igraph和graph软件包
3.应用
网络社区用户分析(注意不是居住社区)、生物网络数据分析。
4.生物网络数据分析
R语言做生物学网络分析是不错的选择,R体系的Bioconductor项目为用户提供了网络分析的整体解决方案。然而R的网络分析优势却被许多人忽视,认为“R就是用来做统计的,Bioconductor就是用做芯片处理”,实际上Bioconductor是基因芯片。若把R当作C&C++或java类型的高级语言,而把Bioconductor当成开源的网络分析解决项目时,则R强大的网络分析功就能显示。
(1)Bioconductor人类基因组分析项目
网址:http://www.bioconductor.org/
此项目是R语言实现的、面向人类基因组信息分析的应用软件集合。Bioconductor项目中的软件包功能强大,提供各种方式的基因组数据分析和注释工具,其中大多数工具是针对DNA微阵列或基因芯片数据的处理、分析、注释及可视化的。同时,Bioconductor还提供许多与DNA微阵列相关的数据包。当然,bioconductor网络分析功能也很强大,它包括graph、RBGL、Rgraphviz等软件包来实现网络分析。graph包主要用于构建网络和简单的对网络属性的操作;RBGL包用于对网络分析算法的实现,包括求最短路径,求子网络等。Rgraphviz用于可视化网络。
R语言网络数据分析程序设计
R网络数据分析的两个关键问题是数据分析和建立图数据结构。在R语言中的网络数据分析中,两个流行的数据类型是UCinet和ERGM模型。
R语言网络数据分析的标准过程是:
1.建立图结构
R语言将图结构称为网络格式数据,但是R语言增加了节点属性。创建图的主要内容是建立图的节点和边。图的数据结构有很多包括:
邻接矩阵、邻接表。R语言称为网络邻接矩阵(adjacency)等。R语言的软件包是network,在网络分析项目中另外有软件包,需要到网址下载,应小心慎重。函数network()建立图的邻接矩阵,例如,mtr是数据框
>library(network)
>net1<-network(mtr) #建立邻接矩阵
>summary(net1) #汇总统计邻接矩阵net1的数据特征,并且显示Network edgelist matrix
>plot(net1)
2.网络节点属性(vertice attibute)的导入
节点属性的原始文件建议保存在csv格式文件。
>node_attri<-read.csv(file.choose(),header=T)
注意函数read.csv()的参数“header=T”表示源文件中的首行“senority | project | office”在导入时作为节点属性的名称,不可忽略。
3.建立完善的网络数据图
>net2<-network(mtr,vertex.attr = node_attri) #建立网络数据图,有节点属性
>net2 #网络数据图
... ...
Vertex attribute names: #注意节点属性vertex.names 建立
office projects seniority vertex.names #包括mtr的三项属性office、projects、seniority
No edge attributes #没有建立边的属性
网络数据net2项目属性值project,
>net2 %v% 'projects'
2.R语言制作网络数据分析图
library<igraph>
igraph软件包画网络图,可以求网络的拓扑属性等,详细见igraph的帮助文档。
igraph软件包建立的数据结构有邻接矩阵或边列表等。
最新igraph软件包的节点是从1开始,
若原始数据中有0,则应将数据+1。
layout=layout.circle是环形布局。不能太稠密了,以致分不清线条。 [/backcolor]
其他布局,layout.fruchterman.reingold,[/backcolor]
layout=layout.kamada.kawai[/backcolor]。 [/backcolor]
两个实例,一个是对多个数据制作网络分析图,一个是对社交网络数据建立网路数据图。
eg1.多个数据建立网络分析图
>net.data <- read.table("d:/neural.txt")
>graph.data.frame(net.data[1:2]) %>%
set.edge.attribute("weight",value=net.data[[3]]) %>%
>plot(vertex.size=5,vertex.label=NA,edge.arrow.size=0.3)
eg2.社交网络数据图
igraph包的作图功能绘制相应的网络图。(社交网络)
library(igraph)
people = data.frame(id = tmp1[, 4], name = tmp1[, 3])
gg = graph.data.frame(d = tmp2, directed = F, vertices = people)
is.simple(gg)
gg = simplify(gg)## 去掉重复的连接
is.simple(gg)
dg = degree(gg)
gg = subgraph(gg, which(dg > 0) - 1)## 去掉孤立点##
png("net_simple.png", width = 500, height = 500)
par(mar = c(0, 0, 0, 0))
set.seed(14)
plot(gg, layout = layout.fruchterman.reingold, vertex.size = 5, vertex.label = NA, edge.color=grey(0.5),
edge.arrow.mode = "-")
##dev.off()
3.R语言实现生物学网络分析
在R语言编程环境中安装graph、RBGL、Rgraphviz软件包。
软件包的下载地址为http://bioconductor.org/packages/release/software.html。
eg1.构建4个蛋白质构成的蛋白质网络图
蛋白质1与2、3有物理作用,因此网络图中存在边。实际是建立数据结构的图。
library(graph)
#character类型的变量存储蛋白质网络的结点集,nodes={蛋白质1,蛋白质2,蛋白质3}。建立图数据结构g1。
nodes<-c("protein1","protein2","protein3","protein4")
g1<-new("graphNEL",nodes=nodes, edgemode="undirected")
#plot图检验
library(Rgraphviz)
plot(g1)
#建立边用函数addEdge()
#建立protein1和protein2节点间的边
g2 <- addEdge("protein1","protein2", g1)
plot(g2)
#建立protein1和protein3节点间的边
g3 <- addEdge("protein1","protein3", g2)
plot(g3)
#增加结点用函数addNode()
#增加蛋白质(protein5),它和protein1有一条边。
g4<-addNode("protein5",g3)
g5<-addEdge("protein1","protein5",g4)#增加蛋白质节点,也应增加它和其他节点间的边
plot(g5)
eg2.用边集合的方式建立蛋白质网络图数据结构
nodes<-c("protein1","protein2","protein3","protein4")
#构建一个空的长度为4的list变量edges。edges中将存储边的信息。它的长度为4,表示网络有4个结点。
edges<-vector("list",length=4)
#把这4个结点的名称赋给edges的名称属性。
names(edges)<-nodes
#构建边protein1-protein2,protein1-protein3
edges[[1]]<-list(edges=c("protein2","protein3"))
#构建边protein2-protein1
edges[[2]]<-list(edges=c("protein1"))
#构建边protein3-protein1
edges[[3]]<-list(edges=c("protein1"))
#构建蛋白质网络图
gR<- new("graphNEL", nodes=nodes, edgeL=edges,edgemode="undirected")
蛋白质网络图的边集合edges是一个两层的list结构。
参考资料
-
1.
社会网络分析:探索人人网好友推荐系统
- http://bbs.pinggu.org/thread-3166191-1-1.html
-
2.
用R语言实现生物学网络分析
- http://blog.163.com/zhoulili1987619@126/blog/static/3530820120148178125084 3. 美国宾夕法尼亚州立大学教学资源网址
- http://sites.stat.psu.edu/~dhunter/Rnetworks/ 4. 用R语言建立网络格式的数据
- http://blog.sina.com.cn/s/blog_3d4f90bb0102wd94.html