Лучшие практики для запроса графиков по атрибутам ребер и узлов в NetworkX

Использование NetworkX и новинка в библиотеке для запроса анализа социальной сети. Под Запросом я подразумеваю выбор / создание подграфов по атрибутам обоих узлов ребер, где ребра создают путь, а узлы содержат атрибуты. График использует MultiDiGraph вида

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"  )

Запрашивается с

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" 

Есть ли лучший способ сделать запрос? Или лучше всего создавать пользовательские итерации для создания подграфов?

В качестве альтернативы (и отдельный вопрос) график может быть упрощен, но яЯ не использую приведенный ниже график, потому что "ненавидит» объекты типа будут иметь предшественников. Это сделает запрос проще? Кажется, легче перебирать узлы

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")

Другие заметки:

возможноadd_path добавляет идентификатор к созданному пути?у iGraph естьхорошая функция запроса g.vs.select()

Ответы на вопрос(3)

Ваш ответ на вопрос