将neo4j查询结果加载到python的`igraph`图中

Bor*_*lik 1 python igraph neo4j cypher

如何将Cypher查询的结果加载到igraphpython中,保留所有边缘和顶点属性?

Nic*_*ite 5

使用py2neo和igraph的Graph.TupleList方法很容易.

你需要安装py2neo和igraph.

pip install py2neo
pip install python-igraph
Run Code Online (Sandbox Code Playgroud)

这两个包都依赖于一个Graph类,所以我们应该在导入时将它们别名为别的.

from py2neo import Graph as pGraph
from igraph import Graph as iGraph
Run Code Online (Sandbox Code Playgroud)

首先,使用py2neo的Graph对象连接到Neo4j .

neo4j = pGraph()
Run Code Online (Sandbox Code Playgroud)

然后编写Cypher查询以返回边缘列表.假设我们将示例电影数据集加载到Neo4j中,我们想要一个共同行动的演员边缘列表.

query = """
MATCH (p1:Person)-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(p2:Person)
RETURN p1.name, p2.name
"""

data = neo4j.cypher.execute(query)
print data[0]
Run Code Online (Sandbox Code Playgroud)

这为我们提供了一个共同行动的演员名单.

p1.name      | p2.name    
--------------+-------------
Hugo Weaving | Emil Eifrem
Run Code Online (Sandbox Code Playgroud)

方便的是,py2neo Graph.cypher.execute返回类似于命名元组的列表,因此我们可以将它直接传递给igraph的Graph.TupleList方法来创建igraph对象.

ig = iGraph.TupleList(data)
print ig
Run Code Online (Sandbox Code Playgroud)

现在我们有一个igraph对象.

<igraph.Graph at 0x1083a2908>
Run Code Online (Sandbox Code Playgroud)

谁拥有最高学位?

best = ig.vs.select(_degree = ig.maxdegree())["name"]
print best
Run Code Online (Sandbox Code Playgroud)

当然是汤姆汉克斯.

[u'Tom Hanks']
Run Code Online (Sandbox Code Playgroud)