2017-01-18 147 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

你認爲圖形內核可能更適合解決這個問題嗎? –