2017-01-23 17 views
0

thisと似たようなことをしようとしていますが、py2neoではなくneo4j-driverを使用しています。次のコードを実行すると、クエリによって返されたすべてのノードのリストが取得されますが、グラフはノードを作成しません。neo4jドライバのcypherクエリからiGraphを作成する

from igraph import Graph 
from neo4j.v1 import GraphDatabase, basic_auth 

driver = GraphDatabase.driver("bolt://localhost:7687", auth=basic_auth("neo4j", "pass123")) 
session = driver.session() 

result = session.run("MATCH (a:author)-[r:PUBLISHED]->(p:paper) RETURN a,r,p") 

for record in result: 
    print(record) 

g = Graph.TupleList(result) 
print(g) 
session.close() 

コンソール結果:

<Record a=<Node id=946 labels=set([u'author']) properties={u'name': u'a9', u'id': u'9'}> r=<Relationship id=950 start=946 end=955 type=u'PUBLISHED' properties={}> p=<Node id=955 labels=set([u'paper']) properties={u'year': 2009, u'id': u'9', u'name': u'p9'}>> 
<Record a=<Node id=946 labels=set([u'author']) properties={u'name': u'a9', u'id': u'9'}> r=<Relationship id=949 start=946 end=953 type=u'PUBLISHED' properties={}> p=<Node id=953 labels=set([u'paper']) properties={u'year': 2007, u'id': u'7', u'name': u'p7'}>> 
IGRAPH UN-- 0 0 -- 
+ attr: name (v) 

これはしてください動作しない理由を誰かが私に言うことはできますか?

答えて

2

Py2neoのcypher.executeメソッドは、基本的にdicts(または名前付きタプル)のリストであるオブジェクトを返します。 neo4jドライバはそうではありません。代わりに、session.runによって返されるカーソルオブジェクトを反復処理し、igraphコンストラクタに渡すタプルのリストを構築する必要があります。

from igraph import Graph 
from neo4j.v1 import GraphDatabase, basic_auth 

driver = GraphDatabase.driver("bolt://localhost:7687", auth=basic_auth("neo4j", "pass123")) 
session = driver.session() 

result = session.run("MATCH (p1:Person)-[r]->(p2:Person) RETURN p1.name AS name1, p2.name AS name2") 
nodelist = [] 
for record in result: 
    nodelist.append((record["name1"], record["name2"])) 

nodelistはこのようになりますタプルのリスト、である:ここでの例では、私は、現時点でのNeo4jに持っているものも、そう、あなたのニーズにクエリを適応させるだけでたまたまBuzzFeed Trumpworld graphからのデータを使用しています:私たちは、このグラフ上のPageRankを実行し、正気として最高のPageRankを持っているノードを確認でき

g = Graph.TupleList(nodelist) 

:次にIGRAPHオブジェクトをインスタンス化する

>>> print(nodelist) 

[('RUDY GIULIANI', 'WILBUR ROSS'), 
('GARY COHN', 'DONALD J. TRUMP'), 
('DAN COATS', 'DONALD J. TRUMP'), 
('MICHAEL POMPEO', 'DONALD J. TRUMP'), 
('OMAROSÉ ONEE MANIGAULT', 'DONALD J. TRUMP'), 
('MICK MULVANEY', 'DONALD J. TRUMP'), 
('ALEX SHNAIDER', 'DONALD J. TRUMP'), 
('MEHMET ALI YALCINDAG', 'DONALD J. TRUMP'), 
('MANGAL PRABHAT LODHA', 'DONALD J. TRUMP'), 
('ROGER KHAFIF', 'DONALD J. TRUMP')... 

チェック:

pg = g.pagerank() 
max_pg = max(pg) 
[g.vs[idx]["name"] for idx, pg in enumerate(pg) if pg == max_pg] 

、結果は次のとおりです。

['DONALD J. TRUMP'] 
関連する問題