Práticas recomendadas para consulta de gráficos por atributos de borda e nó no NetworkX

Usando o NetworkX e novo na biblioteca, para uma consulta de análise de rede social. Por consulta, quero dizer selecionar / criar subgrafos por atributos de ambos os nós de arestas onde as arestas criam um caminho e os nós contêm atributos. O gráfico está usando um MultiDiGraph do formulário

G2 = nx.MultiDiGraph()
G2.add_node( "UserA", { "type" :"Cat" } )
G2.add_node( "UserB", { "type" :"Dog" } )
G2.add_node( "UserC", { "type" :"Mouse" } )
G2.add_node( "Likes", { "type" :"Feeling" } )
G2.add_node( "Hates", { "type" :"Feeling" } )

G2.add_edge( "UserA", 'Hates' ,  statementid="1" )
G2.add_edge( "Hates", 'UserB' ,  statementid="1"  )
G2.add_edge( "UserC", 'Hates' ,  statementid="2" )
G2.add_edge( "Hates", 'UserA' ,  statementid="2"  )
G2.add_edge( "UserB", 'Hates' ,  statementid="3"  )
G2.add_edge( "Hates", 'UserA' ,  statementid="3"  )
G2.add_edge( "UserC", 'Likes' ,  statementid="3"  )
G2.add_edge( "Likes", 'UserB' ,  statementid="3"  )

Consultado com

for node,data in G2.nodes_iter(data=True):
    if ( data['type'] == "Cat" ):
       # get all edges out from these nodes
            #then recursively follow using a filter for a specific statement_id

#or get all edges with a specific statement id
   # look for  with a node attribute of "cat" 

Existe uma maneira melhor de consultar? Ou é prática recomendada criar iterações personalizadas para criar subgrafos?

Como alternativa (e uma pergunta separada), o gráfico poderia ser simplificado, mas não estou usando o gráfico abaixo porque os objetos do tipo "odeia" terão predecessores. Isso tornaria a consulta mais simples? Parece mais fácil iterar nos nós

G3 = nx.MultiDiGraph()
G3.add_node( "UserA", { "type" :"Cat" } )
G3.add_node( "UserB", { "type" :"Dog" } )

G3.add_edge( "UserA", 'UserB' ,  statementid="1" , label="hates")
G3.add_edge( "UserA", 'UserB' ,  statementid="2" , label="hates")

Outras notas:

Possivelmenteadd_path adiciona um identificador ao caminho criado?O iGraph tem umbom recurso de consulta g.vs.select()

questionAnswers(3)

yourAnswerToTheQuestion