【问题标题】:igraph compute metrics for each node and its networkigraph 计算每个节点及其网络的指标
【发布时间】:2017-01-18 12:23:18
【问题描述】:

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

为每个节点计算欺诈连接的百分比

  • 直接节点(有向)

  • 直接节点(无向)

  • 来自节点的友谊网络(有向)

  • 来自节点的友谊网络(无向)

    总计和每种关系类型。

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的评论手动移动

【问题讨论】:

    标签: r graph igraph


    【解决方案1】:

    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 
    

    【讨论】:

    • 我明白了,所以我需要 1 次通过来获得进入的数量,一次用于出度,一种用于每个节点的度数,然后再增加 2 次(1x 用于每个节点的“欺诈级别”,1x对于朋友网络欺诈连接)。图上不是很多次吗?有没有可能把这些结合起来?
    • 我认为一次通过就很难做到这一点。您可以遍历边距和函数以减少一些步骤(我会将其添加到答案中)。
    • 你认为图形内核可能更适合解决这个问题吗?
    • 我的理解(这是有限的)是图内核和同构用于检测图内和图之间的结构模式。不确定这是否对您有帮助,因为您似乎对自我网络构成感兴趣。但可能值得研究。
    猜你喜欢
    • 2017-02-15
    • 2018-12-17
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 2021-04-20
    相关资源
    最近更新 更多