2017-01-18 140 views
0

我很好奇如何计算每个节点的一些指标。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

回答

2

sna包中的gapply功能评论给出了一个很大的灵活性来计算各种自我网络统计。它的功能或多或少像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在没有超级直接使用。第二个参数(“MARGIN”)表示行式(外向关系),列式(外来关系)或两者(即无向)。第三个参数是要计算的统计矢量,第四个参数是要使用的函数。如你所见,第三和第四个参数有很大的灵活性。

> 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 
+0

我看到那么我就需要1次拿到的数量,一个是出度一个为度每个节点,然后2个(1个为“欺诈水平”每节点和1x的朋友网络欺诈连接)。这不是图表上的很多传球吗?有没有可能将这些结合起来? –

+1

我认为在一回合中就很难做到这一点。你可以遍历边界和函数来减少一些步骤(我将把它添加到答案中)。 – paqmo

+0

你认为图形内核可能更适合解决这个问题吗? –