ソーシャルネットワーク分析クエリに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()