作者简介: 本文作者系大学统计学专业教师,多年从事统计学的教学科研工作,在随机过程、统计推 断、机器学习领域有深厚的理论积累与应用实践。
2. 从文件读取网络数据
数据集1: 边列表
边列表数据集由两个文件组成。
- Media-Example-NODES.csv
- Media-Example-EDGES.csv
nodes <- read.csv("Dataset1-Media-Example-NODES.csv", header=T, as.is=T)
links <- read.csv("Dataset1-Media-Example-EDGES.csv", header=T, as.is=T)
检查一下数据
head(nodes)
head(links)
nrow(nodes); length(unique(nodes$id))
nrow(links); nrow(unique(links[,c("from", "to")]))
注意到,link数多余唯一的from-to组合数,这说明存在相同的两个结点之间有多条边的情况。同一对结点间相同类型的边应该只算一次。
links <- aggregate(links[,3], links[,-3], sum)
links <- links[order(links$from, links$to),]
colnames(links)[4] <- "weight"
rownames(links) <- NULL
数据集2:矩阵
第二个数据集记录的是新闻源与阅读者。
nodes2 <- read.csv("Dataset2-Media-User-Example-NODES.csv", header=T, as.is=T)
links2 <- read.csv("Dataset2-Media-User-Example-EDGES.csv", header=T, row.names=1)
检查数据
head(nodes2)
head(links2)
links2 <- as.matrix(links2)
dim(links2)
dim(nodes2)
3. 转换网络成图对象
首先,我们使用graph.data.frame()
函数把原始数据转换成一个igraph网络对象。 该函数包括两个必要的数据框参数:d and vertices.
- d 网络边。它的前两列是边的源结点与终结点。随后的列是边的属性,例如,权值、类型、标签等。
- vertices 结点ID列。
3.1 数据集1
library(igraph)
net <- graph_from_data_frame(d=links, vertices=nodes, directed=T)
class(net)
net
我们也很容易显示图的结点、边和其它属性。
E(net) # The edges of the "net" object
V(net) # The vertices of the "net" object
E(net)$type # Edge attribute "type"
V(net)$media # Vertex attribute "media"
plot(net, edge.arrow.size=.4,vertex.label=NA)
我们想删除图中的环。
et <- simplify<