【问题标题】:Loading neo4j query result into python's `igraph` graph将neo4j查询结果加载到python的`igraph`图中
【发布时间】:2015-08-03 20:54:30
【问题描述】:

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

【问题讨论】:

标签: python neo4j cypher igraph


【解决方案1】:

这很容易使用 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 中,并且我们想要一个一起行动的演员的边缘列表。

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

data = neo4j.cypher.execute(query)
print data[0]

这为我们提供了一起表演的演员的边缘列表。

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']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    相关资源
    最近更新 更多