我很好奇如何为每个节点计算一些指标。
为每个节点计算
的欺诈性连接的百分比来自节点(未定向)的友谊网络
总计和每种关系类型。
igraph入门我不知道如何继续编写自己的图形处理功能(即不仅应用学位,pagerank,......)。期待通过图表只传递一次来解决此任务的一些建议。
最小样本在这里
library(igraph)
id = c("a", "b", "c", "d", "e", "f", "g")
name = c("Alice", "Bob", "Charlie", "David", "Esther", "Fanny", "Gaby")
fraud = c(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE)
verticeData <- data.frame(id, name, fraud)
verticeData
src <- c("a", "b", "c", "f", "e", "e", "d", "a")
dst <- c("b", "c", "b", "c", "f", "d", "a", "e")
relationship <-c("A", "B", "B", "B", "B", "A", "A", "A")
edgeData <- data.frame(src, dst, relationship)
edgeData
g <- graph_from_data_frame(edgeData, directed = TRUE, vertices = verticeData)
plot(g, vertex.color=V(g)$fraud)
# TODO compute metrics
我没有移动权限,因此会根据https://stats.stackexchange.com/questions/256859/igraph-compute-metrics-for-each-node-and-its-network
的评论手动执行答案 0 :(得分:2)
gapply
包中的sna
函数为计算各种自我网络统计数据提供了很大的灵活性。它的功能或多或少类似于apply
函数系列,但特别是在网络邻域上循环。 intergraph
包可以轻松转换igraph
和sna
。
library(sna)
net<-intergraph::asNetwork(g)
c <- c(1,2)
funcs <- c(sum,mean)
for (i in funcs){
for (j in list(1,2,c)){
print(gapply(net,j,net %v% "fraud",i))
}
}
gapply
并非超级直接使用。第二个参数(&#34; MARGIN&#34;)表示行方式(出局关系),列方式(进入关系)或两者(即无向)。第三个参数是要计算的统计量向量,第四个参数是要使用的函数。尽可能地,第三和第四个论点有很多灵活性。
> gapply(net,c(1,2),net %v% "fraud",sum)
[1] 0 1 0 1 1 0 0
> gapply(net,c(1),net %v% "fraud",sum)
Alice Bob Charlie David Esther Fanny Gaby
0 0 0 1 0 0 0
> gapply(net,c(2),net %v% "fraud",sum)
Alice Bob Charlie David Esther Fanny Gaby
0 1 0 0 1 0 0