Najlepsze praktyki dotyczące kwerend grafów według atrybutów krawędzi i węzłów w NetworkX
Korzystanie z NetworkX i nowości w bibliotece do zapytania o analizę sieci społecznościowych. Przez Query mam na myśli wybieranie / tworzenie podgrafów według atrybutów obu węzłów krawędzi, gdzie krawędzie tworzą ścieżkę, a węzły zawierają atrybuty. Wykres używa MultiDiGraph formularza
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" )
Zapytany o
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"
Czy jest lepszy sposób na zapytanie? Czy jest to najlepsza praktyka tworzenia niestandardowych iteracji w celu tworzenia podgrafów?
Alternatywnie (i osobne pytanie) wykres można uprościć, ale nie używam poniższego wykresu, ponieważ obiekty typu „nienawiści” będą miały predyktory. Czy to ułatwiłoby zapytanie? Wydaje się, że łatwiej jest iterować po węzłach
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")
Inne notatki:
Być możeadd_path
dodaje identyfikator do utworzonej ścieżki?iGraph maładna funkcja zapytania g.vs.select()