igraph计算每个节点及其网络的指标

时间:2017-01-18 12:23:19

标签: r graph igraph

我很好奇如何为每个节点计算一些指标。

为每个节点计算

的欺诈性连接的百分比
  • 直接节点(指示)
  • 直接节点(无向)
  • 来自节点的友谊网络(定向)
  • 来自节点(未定向)的友谊网络

    总计和每种关系类型。

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

的评论手动执行

1 个答案:

答案 0 :(得分:2)

gapply包中的sna函数为计算各种自我网络统计数据提供了很大的灵活性。它的功能或多或少类似于apply函数系列,但特别是在网络邻域上循环。 intergraph包可以轻松转换igraphsna

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