我会给neo4j写一个巨大的图表。使用我的代码需要不到两个月的时间。
我从Kaggle's events recommendation challenge获取数据,我使用的user_friends.csv
文件看起来像
user,friends
3197468391,1346449342 3873244116 4226080662, ...
我使用py2neo batch
工具来生成代码。这是我能做的最好还是有另一种方法可以显着缩短运行时间?
这是代码
#!/usr/bin/env python
from __future__ import division
from time import time
import sqlite3
from py2neo import neo4j
graph = neo4j.GraphDatabaseService("http://localhost:7474/db/data/")
batch = neo4j.WriteBatch(graph)
people = graph.get_or_create_index( neo4j.Node,"people")
friends = graph.get_or_create_index( neo4j.Relationship,"friends")
con = sqlite3.connect("test.db")
c = con.cursor()
c.execute("SELECT user, friends FROM user_friends LIMIT 2;")
t=time()
for u_f in c:
u_node = graph.get_or_create_indexed_node("people",'name',u_f[0])
for f in u_f[1].split(" "):
f_node = graph.get_or_create_indexed_node("people",'name', f)
if not f_node.is_related_to(u_node, neo4j.Direction.BOTH,"friends"):
batch.create((u_node,'friends',f_node))
batch.submit()
print time()-t
此外,我找不到使用高级py2neo
设施创建无向图的方法?我知道cypher
可以使用create (node(1) -[:friends]-node(2))
提前致谢。
答案 0 :(得分:1)
你应该创建不与Direction.BOTH
建立联系。选择一个方向,然后在遍历时使用Direction.BOTH
忽略它 - 它没有性能影响但是关系方向是确定性的。当您说a--b
时,Cypher会这样做。