首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用neo4j绘制宿舍运动图

用neo4j绘制宿舍运动图
EN

Stack Overflow用户
提问于 2017-05-19 04:08:40
回答 1查看 56关注 0票数 0

我真的很难把我的头绕着neo4j,我希望有人能帮我找到正确的方向。

基本上,我有一份可以称为事件的清单;这个事件可以说是指病人进出房间的情况。

每个事件都有一个唯一的标识符;它还有一个有关学生的标识符以及开始和结束时间(例如,学生在12:00进入房间,在12:05离开)和房间的标识符。

事件和数据可能沿着下面的一行看,列由管道分隔符分隔。

代码语言:javascript
复制
ID|SID|ROOM|ENTERS|LEAVES
1|1|BLUE|1/01/2015 11:00|4/01/2015 10:19
2|2|GREEN|1/01/2015 12:11|1/01/2015 12:11
3|2|YELLOW|1/01/2015 12:11|1/01/2015 12:20
4|2|BLUE|1/01/2015 12:20|5/01/2015 10:48
5|3|GREEN|1/01/2015 18:41|1/01/2015 18:41
6|3|YELLOW|1/01/2015 18:41|1/01/2015 21:00
7|3|BLUE|1/01/2015 21:00|9/01/2015 9:30
8|4|BLUE|1/01/2015 19:30|3/01/2015 11:00
9|5|GREEN|2/01/2015 19:08|2/01/2015 19:08
10|5|ORANGE|2/01/2015 19:08|3/01/2015 2:43
11|5|PURPLE|3/01/2015 2:43|4/01/2015 16:44
12|6|GREEN|3/01/2015 11:52|3/01/2015 11:52
13|6|YELLOW|3/01/2015 11:52|3/01/2015 17:45
14|6|RED|3/01/2015 17:45|7/01/2015 10:00

可能提出的问题可以是:

学生参观了哪些房间?按什么顺序?

学生在房间之间的移动是什么样子的??学生离开y室时去哪个房间?

听起来很简单,但我把自己绑在了绳结上。

我开始为学生和房间创造独特的约束条件。

创建对(学生:学生)的约束断言student.id是唯一的

然后我在房间里也做了同样的事情。

然后我把学生装成

使用定期提交1000加载csv与标头从'file://c:/event.csv‘作为行合并(s:学生{id: line.SID});

我也做了同样的房间和访问。

我完全不知道如何建立关系,虽然能够回答上述问题。每个活动都列出了学生进入和离开房间的时间,但没有列出学生去的房间。从摘录开始,应该修改摘录,使其包含学生离开的房间吗?如果有人能帮助我了解我需要如何思考需要建立的关系,那将是非常感谢的。

干杯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-19 11:41:18

正如俗话说的那样,有不止一种方法可以剥去乌普河的皮--或者阻止一位法师。你可以这样做的一种方法(这是最简单的建模方法,海事组织)如下:

代码语言:javascript
复制
CREATE CONSTRAINT ON (s:Student) ASSERT s.studentID IS UNIQUE;
CREATE CONSTRAINT ON (r:Room) ASSERT r.roomID IS UNIQUE;

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///dorm.csv" as line fieldterminator '|'
MERGE (s:Student {studentID: line.SID})
MERGE (r:Room {roomID: line.ROOM})
CREATE (s)-[:VISIT {starttime: apoc.date.parse(line.ENTERS,'s',"dd/MM/yyyy HH:mm"), endtime: apoc.date.parse(line.LEAVES,'s',"dd/MM/yyyy HH:mm")}]->(r);

# What rooms has student x visited and in what order
MATCH (s:Student {studentID: "2"})-[v:VISIT]->(r:Room)
RETURN r.roomID,v.starttime ORDER BY v.starttime;

# What does the movement of students between rooms look like - to which room does students go to when they leave room y
MATCH (s:Student)-[v:VISIT]->(r:Room {roomID: "GREEN"})
WITH s, v
MATCH (s)-[v2:VISIT]->(r2:Room)
WHERE v2.starttime > v.endtime
RETURN s.studentID, r2.roomID, v2.starttime ORDER BY s.studentID, v2.starttime;

因此,实际上,您只需要将、student、 room 作为节点,而学生则访问,因为房间将构成这种关系(以输入/离开时间作为该关系的属性)。现在,您可以看到,对于第二个查询来说,这可能并不理想(尽管它确实有效)。另一种选择是让访问节点并将其链接到学生和房间(作为时间轴事件)。关于如何做到这一点,有很多例子。

希望这能帮上忙汤姆

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44061303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档