文本挖掘:社交网络、社群划分
g10?<-?graph_from_adjacency_matrix(adjm,?weighted=TRUE,?add.rownames="row",add.colnames="col")?? 代码解读:adjm是随便构造的一个矩阵,函数; graph_from_adjacency_matrix中, weighted=TRUE,是否需要加入权重; add.rownames以及add.colnames,因为前面的自编译函数init.igraph可以自定义标签,这里定义名称,可以用add.rownames加入标签列,这样你可以用V(g10)$row以及V(g10)$col直接看到标签。其中还可以自己定义名字,row,col都是笔者自己定义的。 三、一些基本操作关系网络中,每一个点的信息存放在V中,每一个线的信息存放在E中。并且通过自编译的init.igraph函数,V(g)$label以及E(g)$weight都是自带的属性。 可以生成一个空的关系网络。 并且关系网络生成之后,R里面就不是用真实的名字来做连接,是采用编号的。例如(小明-小红)是好朋友,在R里面就显示为(1-2),所以需要单独把名字属性加到序号上。
1、关系网络中的点集V点集就是网络中所有的点,如有向文本型那个数据格式,包括了14个点;7条线。 (1)点集属性点集与数据框的操作很相似,属性是可以自己赋上去的,比如V(g)$label就是赋上去的,你还可以给点集加上颜色(V(g)$color)、加上每个点的尺寸(V(g)$size),加上分类(V(g)$member) 点集的选择跟数据框操作一样,比如我要选择群落为1的点集,就是V(g)[which(V(g)$member==1)] 比如我要选择点度数大于1的点集,V(g)[degree(g)>1] 如果我想知道一下这两个点之间是否有关系,可以用edge.connectivit函数,edge.connectivity(g,4,9) ?代表着第四个点与第九个点之间是否有连接关系。返回的0/1。0是没有线,1代表有线。 (2)点集加减操作我想在原来的基础上加入一些点,用add.vertices
如果我想减去点度数为0的点
(3)相邻点的集合——neighbors(很重要)
eighbors可以找出标签如果是“会计”的点,与之有关系的点的序号是啥;不过你也可以通过V(g.zn)$label让临近点的标签一起筛选出来 其中mode代表点出度(out)以及点入度(in),还有两个都有的点度(total)。 2、关系网络中的线集E(1)线集的类型关系网络中线的关系比较多,loop线就是循环到自己的点,1-2-1;multiple代表线的重叠。
(2)线集属性线的属性中,自编译函数能够拿到线权重,E(g)$weight。但是没有标签项,这时候需要用set_vertex_attr加入线标签。
原理就是把点集的标签,打到线集上来,name是默认的设置。
(3)线集加减线集的加减可以用add.edges以及-来实现
其中需要注意,add.edges中,需要把列数据,转置为行数据,平放id与词条。 同时线集也会有重复性的问题,见下文count.multiple(g) 以及simplify函数。 还有一些特别的函数,diameter(g)可以做到最长的链接经过了多少根线。 4、关系网络的重复性问题在关系网络中,重复是常见的,而且无向线中1-2与2-1是重复的,重复线的数量也可以作为线的权重。也就是E(g)$weight。其中igrarh包中笔者看到两个函数跟重复性问题有关。count.multiple(g) 以及simplify函数。 (1)count.multiple(g) 函数可以获得网络中线的重复情况。不重复是1,重复一次+1。比如:无向网络(1-2,2-3,2-1)就是(2,1,2) 等价于E(g)$weight (2)simplify函数函数常规式:simplify(g,remove.multiple = TRUE,remove.loops = TRUE,edge.attr.comb = "mean") 其中loops是指是否循环回自己,比如1-2-1就是一个循环到自己;multiple是指重复比如1-2,2-1。
simplify函数识别了两种重复方式,一种是线重复,比如1-2,2-1,;一种是点重复比如1-1,2-2就是点重复。 remove.multiple=TRUE,把重复的线删除 SNA社会关系网络分析中,关键的就是通过一些指标的衡量来评价网络结构稳定性、集中趋势等。主要有中心度以及中心势两大类指标。 ? ? 以下的代码都是igraph包中的。 中心度指标的对比 一、中心度 中心度指标有四类点度中心度、接近中心度、中间中心度、特征向量中心度。 1、点度中心度——点出度、点入度、相对点中心度、点度频率有两个部分:绝对中心度+相对中心度。是最基本的概念,就是在某个点上,有多少条线。比如以下这个数列,“小明”这个点,有三个度(小明-小红,小白-小明,小明-小胖)。 绝对中心度中,在有向图中还有点出度、点入度之分。比如“小明”这个点,有两个点出度(小明-小红,小明-小胖);一个点入度(小白-小明)。 相对点中心度中,相对点中心度=绝对点中心度/最大度数(可以作为不同网络结构的比较,相对数与绝对数的区别),此时小明的相对点中心度就是3/3=1。 id1 di2 ?
|