【问题标题】:How to get the details of triads in r/python?如何在 r/python 中获取三元组的详细信息?
【发布时间】:2019-02-15 09:56:32
【问题描述】:

我目前正在使用igraph 使用triad_census(g) 获取给定有向图的 traid 人口普查。这将返回 16 个类中每个类中的三元组的计数。

例如,16 3 0 10 1 0 0 0 0 0 0 0 0 0 0 0

但是,我想知道三合会的更多细节,而不是这些汇总统计数据。

即鉴于网络有 16 个003,它们是什么?假设网络有 3 个012,它们是什么?

示例:012 的 3 个 traid 分别是 (john -> emi, jenne)(cena -> ally, john)(emi -> peter, david)

有没有办法在 r 或 python 中做到这一点?

MWE

图表数据:http://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxkYWlzaGl6dWthfGd4OmFmZTI0NjhlMjQ0ZDQ5MQ

代码:

library(igraph)
#import the sample_dw_adj.csv file:
dat=read.csv(file.choose(),header=TRUE,row.names=1,check.names=FALSE) # read .csv file
m=as.matrix(dat)
net=graph.adjacency(m,mode="directed",weighted=TRUE,diag=FALSE)
plot.igraph(net,vertex.label=V(net)$name,layout=layout.fruchterman.reingold, vertex.label.color="black",edge.color="black",edge.width=E(net)$weight/3, edge.arrow.size=1.5)

所以,我的实际图表如下所示。

如果需要,我很乐意提供更多详细信息。

【问题讨论】:

  • 您能否提供一个可重现的示例?如果您需要有关如何操作的任何提示,可以查看here
  • @RomanLuštrik 当然,我会更新这个问题。我刚刚看到你的评论:)

标签: python r networkx igraph sna


【解决方案1】:

似乎没有内置方法可以使用 Networkx 完成您想要的。但是,您可以手动遍历每个三元组并定义它属于哪个类:

from itertools import combinations

triad_class = {}
for nodes in combinations(G.nodes, 3):
    triad_class[nodes] = [k for k, v in nx.triads.triadic_census(G.subgraph(nodes)).items() if v][0]

如果您希望有一个以类为键的字典,您可以尝试这样的操作:

from itertools import combinations

triad_class = {}
for nodes in combinations(G.nodes, 3):
    tc = [k for k, v in nx.triads.triadic_census(G.subgraph(nodes)).items() if v][0]
    triad_class.setdefault(tc, []).append(nodes)

【讨论】:

猜你喜欢
  • 2012-10-27
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
相关资源
最近更新 更多