R语言网络数据分析

来源:互联网 发布:steam更新网络连接 编辑:程序博客网 时间:2024/03/28 18:51

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
链接地址:http://rsoftware.h.baike.com/article-1975189.html

0 0
原创粉丝点击