如何使用 igraph 构建二分图?
How to construct bipartite graphs using igraph?
我需要为消费者-品牌关系创建一个二分图。
这是我的示例数据:
datf <- data.frame(Consumers = c("A", "B", "C", "D", "E"),
Brands = c("Costa", "Starbucks", "Cafe2U", "Costa", "Costa"))
下面的代码给了我一个网络。但是我不确定如何添加节点类型属性来标记消费者和品牌:
library(igraph)
dat=read.csv(file.choose(),header=TRUE)
el=as.matrix(dat)
el[,1]=as.character(el[,1])
el[,2]=as.character(el[,2])
g=graph.edgelist(el,directed=FALSE)
我想创建一个二分图,其边将每个消费者与他们喜欢的品牌联系起来。理想情况下,节点将标有文本。
你能告诉我如何使用 library(igraph)
做到这一点吗?
Shizuka Lab 中的此资源对于使用 igraph
探索 R 中的二分网络非常有用。简而言之:
library(igraph)
# Your matrix containing consumer choice by brands
m = matrix(data = sample(0:1, 25, replace = TRUE), nrow = 5, ncol = 5)
colnames(m) = c("A", "B", "C", "D", "E")
rownames(m) = c("Costa", "Starbucks", "Cafe2U", "Petes", "Philz")
# Convert it to a bipartitie network
bg = igraph::graph.incidence(m)
bg
# See the vertex attributes
V(bg)$type
V(bg)$name
# Plot the network
shape = ifelse(V(bg)$type, "circle", "square") # assign shape by node type
col = ifelse(V(bg)$type, "red", "yellow") # assign color by node type
plot(bg, vertex.shape = shape, vertex.color = col)
给出:
我需要为消费者-品牌关系创建一个二分图。
这是我的示例数据:
datf <- data.frame(Consumers = c("A", "B", "C", "D", "E"),
Brands = c("Costa", "Starbucks", "Cafe2U", "Costa", "Costa"))
下面的代码给了我一个网络。但是我不确定如何添加节点类型属性来标记消费者和品牌:
library(igraph)
dat=read.csv(file.choose(),header=TRUE)
el=as.matrix(dat)
el[,1]=as.character(el[,1])
el[,2]=as.character(el[,2])
g=graph.edgelist(el,directed=FALSE)
我想创建一个二分图,其边将每个消费者与他们喜欢的品牌联系起来。理想情况下,节点将标有文本。
你能告诉我如何使用 library(igraph)
做到这一点吗?
Shizuka Lab 中的此资源对于使用 igraph
探索 R 中的二分网络非常有用。简而言之:
library(igraph)
# Your matrix containing consumer choice by brands
m = matrix(data = sample(0:1, 25, replace = TRUE), nrow = 5, ncol = 5)
colnames(m) = c("A", "B", "C", "D", "E")
rownames(m) = c("Costa", "Starbucks", "Cafe2U", "Petes", "Philz")
# Convert it to a bipartitie network
bg = igraph::graph.incidence(m)
bg
# See the vertex attributes
V(bg)$type
V(bg)$name
# Plot the network
shape = ifelse(V(bg)$type, "circle", "square") # assign shape by node type
col = ifelse(V(bg)$type, "red", "yellow") # assign color by node type
plot(bg, vertex.shape = shape, vertex.color = col)
给出: