将 neo4j 查询结果加载到 python 的 `igraph` 图中
Loading neo4j query result into python's `igraph` graph
如何将 Cypher 查询的结果加载到 python 中的 igraph
中,同时保留所有边和顶点属性?
使用 py2neo 和 igraph 的 Graph.TupleList
方法很容易。
您需要安装 py2neo 和 igraph。
pip install py2neo
pip install python-igraph
这两个包都依赖于 Graph
class 所以我们应该在导入时将它们别名为其他东西。
from py2neo import Graph as pGraph
from igraph import Graph as iGraph
首先,使用 py2neo 的 Graph
对象连接到 Neo4j。
neo4j = pGraph()
然后将 Cypher 查询写入 return 边缘列表。假设我们已将示例电影数据集加载到 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
return 类似于命名元组列表,因此我们可以将其直接传递给 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']
如何将 Cypher 查询的结果加载到 python 中的 igraph
中,同时保留所有边和顶点属性?
使用 py2neo 和 igraph 的 Graph.TupleList
方法很容易。
您需要安装 py2neo 和 igraph。
pip install py2neo
pip install python-igraph
这两个包都依赖于 Graph
class 所以我们应该在导入时将它们别名为其他东西。
from py2neo import Graph as pGraph
from igraph import Graph as iGraph
首先,使用 py2neo 的 Graph
对象连接到 Neo4j。
neo4j = pGraph()
然后将 Cypher 查询写入 return 边缘列表。假设我们已将示例电影数据集加载到 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
return 类似于命名元组列表,因此我们可以将其直接传递给 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']