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

问题描述

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

我的问题:

我有一个很大的 .csv 文件,其中包含来自不同 ids 时间戳的交互。列为 source target servertime ,一行如下所示:

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

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

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

不同的设备每15秒测量一次,因此更长的连接(持续45s的交互)将具有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)

您可以更改节点标签和关系类型的显示方式。