R语言:关系网络初探

社会网络分析(Social Network Analysis,SNA)逐步成为数据挖掘领域的又一新宠。SNA的本质是利用各样本间的关系(故也成为关系网络)来分析整体样本的群落现象,并分析出样本点在群落形成的作用以及群落间的关系。利用R语言中的igraph包实现SNA。

用R语言建立关系网络

(1) 原始数据准备

from<-c("a","a","e","b","b","c","d","d","d","f")

to<-c("c","e","c","e","c","d","g","g","f","d")

data<-data.frame(from=from,to=to)

data

##    from to

## 1     a  c

## 2     a  e

## 3     e  c

## 4     b  e

## 5     b  c

## 6     c  d

## 7     d  g

## 8     d  g

## 9     d  f

## 10    f  d

# 然后读取每个样本点的名称:

(labels<-union(unique(data[,1]),unique(data[,2])))

## [1] "a" "e" "b" "c" "d" "f" "g"

# 建立点标识号向量id,并把其代表的样本名称labels作为元素名称.

ids<-1:length(labels)

names(ids)<-labels;ids

## a e b c d f g

## 1 2 3 4 5 6 7

# 通过向量ids中元素值和元素名称的映射关系,把数据框data转化为矩阵edges。

from<-as.character(data[,1]);to<-as.character(data[,2])

edges<-matrix(c(ids[from],ids[to]),ncol=2)

edges

##       [,1] [,2]

##  [1,]    1    4

##  [2,]    1    2

##  [3,]    2    4

##  [4,]    3    2

##  [5,]    3    4

##  [6,]    4    5

##  [7,]    5    7

##  [8,]    5    7

##  [9,]    5    6

## [10,]    6    5

(2) 建立关系网络 

# 1) 使用graph.empty函数建立一个空的关系网络g(没有定义任何点和线的信息),当参数directed=TRUE时,该关系网络为有有向图,当directed=FALSE时为无向图

library(igraph)

g<-graph.empty(directed=F)

# 2)使用add.vertices函数向关系网络g中添加length(lables)个点vertices,并为各个点添加名称信息V(g)$label。

g<-add.vertices(g,length(labels))

V(g)$label=labels

# 3)使用add.edges函数向关系网络中添加线edges信息。

g<-add.edges(g,t(edges))

# 4)把重复的线合并,并把重复次数作为线权重weight。

E(g)$weight<-count.multiple(g);E(g)$weight

##  [1] 1 1 1 1 1 1 2 2 2 2

g<-simplify(g,remove.multiple=TRUE,remove.loops=TRUE,edge.attr.comb="mean")

E(g)$weight

## [1] 1 1 1 1 1 1 2 2

# 这里的count.multiple(g)用于计算网络g中每条线的重复数。使用simplify函数把图中重复的线删除(remove.multiple=TRUE),并使用重复的次数来更新线权重E(g)$weight(edge.attr.comb="mean")

自此,就建立了一个完整的关系网络g。下面提取上述代码中的部门对象作为参数,并给出一段自定义的函数init.igraph用户建立关系网络

init.graph<-function(data,dir=F,rem.multi=T){

labels<-union(unique(data[,1]),unique(data[,2]))

ids<-1:length(labels);names(ids)<-labels

from<-as.character(data[,1]);to<-as.character(data[,2])

edges<-matrix(c(ids[from],ids[to]),ncol=2)

g<-graph.empty(directed=dir)

g<-add.vertices(g,length(labels))

V(g)$label<-labels

g<-add.edges(g,t(edges))

if(rem.multi){

E(g)$weight<-count.multiple(g)

g<-simplify(g,remove.multiple=TRUE,remove.loops=TRUE,edge.attr.comb="mean")

}

g

}

这里的参数data是包括点名称以及线数据的数据框。并且分为from列和to列。例如:

from<-c("a","a","e","b","b","c","d","d","d","f")

to<-c("c","e","c","e","c","d","g","g","f","d")

data<-data.frame(from=from,to=to)

参数dir是逻辑变量,设为TRUE时,表示建立有向图,否则是无向图。参数rem.multi是逻辑变量,设为TRUE时,表示删除重复变量并更新线权重weight,否则不删除并且线权重weight恒为1。

(3) 基础概念的R语言实现

 依次使用init.graph函数建立无向图和有向图,并使用plot函数绘制图像。代码如下:

par(mfcol=c(1,2))

g.undir<-init.graph(data)

plot(g.undir,edge.width=E(g.undir)$weight,main="无向图 g.undir",

edge.label=E(g.undir)$weight)

g.undir<-init.graph(data,dir=T)

plot(g.undir,edge.width=E(g.undir)$weight,main="有向图 g.undir",

edge.label=E(g.undir)$weight)

par(mfcol=c(1,1))

这里通过设置plot函数的edge.width参数为E(g)$weight,使得权重较高的线更粗.

时间: 2024-10-05 06:14:23

R语言:关系网络初探的相关文章

R语言多元统计分析初探

# 读取多元统计分析数据到R wine<-read.table("http://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data", sep=",") # 绘制多元统计数据 # 矩阵散点图 # 一种常见的方法是使用散点图画出多元统计数据,展现出所有变量两两之间的散点图. # 我们可以使用R中的"car"包里的"scatterplotMatrix()&q

手把手教你学习R语言

本文为带大家了解R语言以及分段式的步骤教程! 人们学习R语言时普遍存在缺乏系统学习方法的问题.学习者不知道从哪开始,如何进行,选择什么学习资源.虽然网络上有许多不错的免费学习资源,然而它们多过了头,反而会让人挑花了眼. 为了构建R语言学习方法,我们在Vidhya和DataCamp中选一组综合资源,帮您从头学习R语言.这套学习方法对于数据科学或R语言的初学者会很有用;如果读者是R语言的老用户,则会由本文了解这门语言的部分最新成果. R语言学习方法会帮助您快速.高效学习R语言. 前言 在开始学习之前

R语言:社会网络关系分析-进阶

本文内容参考李明<R语言与网站分析>一书 下面使用R语言实现社会网络分析的各个基础概念 # (1) 点集合(Vertexs)和点的属性数据 # 使用V(g)可返回关系网络g中所有点的集合V,并通过length函数直接返回点数目n.代码如下: V(g.undir) ## Vertex sequence: ## [1] 1 2 3 4 5 6 7 length(V(g.undir)) ## [1] 7 # 在g.undir中记录了点名称属性数据V(g.undir)$label,这里也可以直接展示.

R语言构建蛋白质网络并实现GN算法

R语言构建蛋白质网络并实现GN算法 1.蛋白质网络的构建 我们使用与人类HIV相关的蛋白质互作数据hunam-HIV PPI.csv来构建这个蛋白质互作网络. 在R中,我们可以从存储在R环境外部的文件读取数据.还可以将数据写入由操作系统存储和访问的文件. R可以读取和写入各种文件格式,如:csv,excel,xml等. 想要读取csv文件,我们需要: 设置工作目录 读取CSV文件 代码如下: setwd("/Users/.../Documents/...") data <- re

[R语言]关联规则1---不考虑items之间的时序关系

本文介绍的是关联规则,分为两部分:第一部分是---不考虑用户购买的items之间严格的时序关系,每个用户有一个“购物篮”,查找其中的关联规则.第二部分--- 考虑items之间的严格的时序关系来分析用户道具购买路径以及关联规则挖掘.此文为第一部分的讲解.(本文所需的代码和数据集可以在这里下载.) 关联规则最常听说的例子是“啤酒与尿布”:购买啤酒的用户通常也会购买尿布.在日常浏览电商网站时也会出现“购买该商品的用户还会购买….”等提示,这其中应用的就是关联规则的算法. 本文重点讲解的是关联规则的R

[R语言]关联规则2---考虑items之间严格的时序关系

前面介绍了关联规则1---不考虑用户购买的items之间的时序关系,但在一些情况下用户购买item是有严格的次序关系了,比如在某些休闲游戏中,用户购买了道具A才能购买道具B,且道具A和B只能购买一次,也就是说购买了道具A是购买道具B的充分条件,如果购买道具A的用户通常会购买道具A,在不考虑时序关系的时候,会得出“BàA”这样的关联规则,这会给运营的同事这样的结论:“购买了道具B的用户也非常有可能会购买道具A,当用户购买了道具B时应向其推荐道具A”,这从数据角度来说是没有问题的,但是从业务的角度来

在R语言中轻松创建关联网络

原文链接:http://tecdat.cn/?p=6483 数据 ## Ozone Solar.R Wind Temp Month Day ## 1 41 190 7.4 67 5 1 ## 2 36 118 8.0 72 5 2 ## 3 12 149 12.6 74 5 3 ## 4 18 313 11.5 62 5 4 ## 5 NA NA 14.3 56 5 5 ## 6 28 NA 14.9 66 5 6 计算相关矩阵 ## # A tibble: 6 x 7 ## rowname O

R语言数据挖掘实战系列(5)

R语言数据挖掘实战系列(5)--挖掘建模 一.分类与预测 分类和预测是预测问题的两种主要类型,分类主要是预测分类标号(离散属性),而预测主要是建立连续值函数模型,预测给定自变量对应的因变量的值. 1.实现过程 (1)分类 分类是构造一个分类模型,输入样本的属性值,输出对应的类别,将每个样本映射到预先定义好的类别.分类模型建立在已有类标记的数据集上,模型在已有样本上的准确率可以方便地计算,所以分类属于有监督的学习. (2)预测 预测是建立两种或两种以上变量间相互依赖的函数模型,然后进行预测或控制.

数据分析,R语言

数据结构 创建向量和矩阵 1 函数c(), length(), mode(), rbind(), cbind() 求平均值,和,连乘,最值,方差,标准差 1 函数mean(), sum(), min(), max(), var(), sd(), prod() 帮助文档 1 函数help() 生成向量 1 seq() 生成字母序列letters 新建向量 1 Which()函数,rev()函数,sort()函数 生成矩阵 1 函数matrix() 矩阵运算 1 函数t(),矩阵加减 矩阵运算 1