Skip to main content
 首页 » 编程设计

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

2025年05月04日33pander-it

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

请您参考如下方法:

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

您需要安装 py2neo 和 igraph。

pip install py2neo 
pip install python-igraph 

这两个包都依赖于 Graph 类,所以我们应该在导入时将它们别名为其他东西。

from py2neo import Graph as pGraph 
from igraph import Graph as iGraph 

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

neo4j = pGraph() 

然后编写一个 Cypher 查询以返回一个边缘列表。假设我们已将示例电影数据集加载到 Neo4j 中,并且我们想要一个一起表演过的 Actor 的边缘列表。

query = """ 
MATCH (p1:Person)-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(p2:Person) 
RETURN p1.name, p2.name 
""" 
 
data = neo4j.cypher.execute(query) 
print data[0] 

这为我们提供了一起行动的 Actor 的边缘列表。

p1.name      | p2.name     
--------------+------------- 
Hugo Weaving | Emil Eifrem 

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

ig = iGraph.TupleList(data) 
print ig 

现在我们有了一个 igraph 对象。

<igraph.Graph at 0x1083a2908> 

谁的学历最高?

best = ig.vs.select(_degree = ig.maxdegree())["name"] 
print best 

当然是汤姆·汉克斯。

[u'Tom Hanks']