Как узнать подробности триады в r / python? - PullRequest
0 голосов
/ 15 февраля 2019

В настоящее время я использую igraph, чтобы получить данные переписи заданного ориентированного графа, используя triad_census(g).Это возвращает количество триад в каждом из 16 классов.

например, 16 3 0 10 1 0 0 0 0 0 0 0 0 0 0 0

Однако я хотел бы знать больше деталей триад, чем эти сводные статистические данные.

то есть, учитывая, что в сети 16 из 003, что они?учитывая, что в сети есть 3 012, что это такое?

Пример: 3 операции 012: (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)

Итак, мой фактический график будет выглядеть следующим образом.enter image description here

Я рад предоставить более подробную информацию, если это необходимо.

1 Ответ

0 голосов
/ 15 февраля 2019

Кажется, что нет встроенного метода для достижения того, что вы хотите с 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)
...