在 neo4j/Connections 中创建一个带有时间戳的社交网络 csv

Create a social network csv in neo4j / Connections with a timestamp

首先,我检查了以前的问题并找到了一些答案,但无法将解决方案转移到我的确切问题上。最接近我的问题的问题是

我的问题:

我有一个很大的 .csv 文件,其中包含来自不同 ids 的交互,带有 timestamp.这些列是 sourcetargetservertime,一行如下所示:

B_655, B_632, 2020-07-03 00:11:48.828

由于不同的设备测量两个方向的连接,因此通常几乎同时发生相同的连接但具有切换的源和目标:

B_632, B_655, 2020-07-03 00:11:47.258

此外,不同的设备每 15 秒测量一次,因此较长的连接(持续 45 秒的交互)将有 3 个不同的行。

B_655, B_632, 2020-07-03 00:11:48.828
B_655, B_632, 2020-07-03 00:12:03.828
B_655, B_632, 2020-07-03 00:12:18.828

我知道我想将所有这些数据都放在我的 Neo4j 数据库中,并在两个 id(源和目标)之间的连接上有更大的权重,这种情况发生得更频繁,但也能够调查关于时间。例如,我想查询日期 X 和日期 y 之间有多少个新连接 ID B_649

ID 是唯一的,但正如我之前所说,它们可以出现在源列和目标列中。

In 能够在 neo4J 浏览器中读取数据,但难以建立连接。用于读取我的 csv 文件的 Cypher-Query 如下所示:

LOAD CSV WITH HEADERS FROM 'file:///connections.csv' AS row
WITH row.source as sourcetag, datetime(replace(row.servertime, ' ', 'T')) as timestamp, row.target as beacon
RETURN timestamp, sourcetag, beacon
limit 3

有人知道将这样的社交网络导入 neo4j 的方法吗? 非常感谢!

首先,您要为节点创建唯一约束。我假设这是一个

(:User)-[:INTERACTS]->(:User)

但您以后可以根据自己的喜好进行更改。

CREATE CONSTRAINT ON (u:User) ASSERT u.id IS UNIQUE;

现在您可以继续导入 csv 文件了:

LOAD CSV WITH HEADERS FROM 'file:///connections.csv' AS row
WITH row.source as sourcetag, 
     datetime(replace(row.servertime, ' ', 'T')) as timestamp, 
     row.target as beacon
MERGE (s:User{id:sourcetag})
MERGE (t:User{id:beacon})
CREATE (s)-[:INTERACTION{date:timestamp}]->(t)

您可以根据自己的喜好更改节点标签和关系类型。