网络分析:如何从 csv 创建节点和边文件
network analysis: how to create nodes and edges files from csv
我有一个 csv 格式的双模式(授予 X 人)网络。我想创建这个网络的 personXperson 投影并计算一些网络度量(包括接近度和介数等的中心度量)。
我的第一步是什么?我猜想为节点和边创建 2 个单独的文件,运行 使用 igraph 包在 R 中进行分析?!
这是我的数据的超级简化版本 (my_data.csv)。
- 格兰特,人
- 一个, 1
- 一个, 2
- B , 2
- 乙, 3
决定图表如何表示数据。根据您的描述,一种方法是让图中的节点代表人,边代表赠款。在这种情况下,创建一个由获得相同资助的人组成的成对列表。 iGraph 中的边默认是双向的,所以你只需要每对边一次。
(1) 使用igraph
创建图表; (2) 宣布其为二分法; (3) 将其投影为单模图。
el <- read.table(text = "Grant,Person
A,1
A,2
B,2
B,3",
sep = ",", header = T, stringsAsFactors=F)
#1
net <- graph.edgelist(as.matrix(el))
#2
V(net)$type <- bipartite.mapping(net)$type
您可以检查该图是否为二分图:
> net
IGRAPH DN-B 5 4 --
+ attr: name (v/c), type (v/l)
+ edges (vertex names):
[1] A->1 A->2 B->2 B->3
第二行的"B"表示是二分图
#3
net1mode <- bipartite.projection(net)$proj2
bipartite.projection
函数创建两个项目,每个模式一个。节点是第二个投影,因为它们在原始边缘列表的第二列中。
par(mfrow=c(1,2))
plot(net,edge.arrow.size=0.5,main="Two mode")
plot(net1mode,edge.arrow.size=0.5, main="One mode projection")
我有一个 csv 格式的双模式(授予 X 人)网络。我想创建这个网络的 personXperson 投影并计算一些网络度量(包括接近度和介数等的中心度量)。
我的第一步是什么?我猜想为节点和边创建 2 个单独的文件,运行 使用 igraph 包在 R 中进行分析?!
这是我的数据的超级简化版本 (my_data.csv)。
- 格兰特,人
- 一个, 1
- 一个, 2
- B , 2
- 乙, 3
决定图表如何表示数据。根据您的描述,一种方法是让图中的节点代表人,边代表赠款。在这种情况下,创建一个由获得相同资助的人组成的成对列表。 iGraph 中的边默认是双向的,所以你只需要每对边一次。
(1) 使用igraph
创建图表; (2) 宣布其为二分法; (3) 将其投影为单模图。
el <- read.table(text = "Grant,Person
A,1
A,2
B,2
B,3",
sep = ",", header = T, stringsAsFactors=F)
#1
net <- graph.edgelist(as.matrix(el))
#2
V(net)$type <- bipartite.mapping(net)$type
您可以检查该图是否为二分图:
> net
IGRAPH DN-B 5 4 --
+ attr: name (v/c), type (v/l)
+ edges (vertex names):
[1] A->1 A->2 B->2 B->3
第二行的"B"表示是二分图
#3
net1mode <- bipartite.projection(net)$proj2
bipartite.projection
函数创建两个项目,每个模式一个。节点是第二个投影,因为它们在原始边缘列表的第二列中。
par(mfrow=c(1,2))
plot(net,edge.arrow.size=0.5,main="Two mode")
plot(net1mode,edge.arrow.size=0.5, main="One mode projection")