专栏首页阿黎逸阳的代码手把手教你用neo4j搭建简单关联图谱(基于家有儿女中的人物关系)

手把手教你用neo4j搭建简单关联图谱(基于家有儿女中的人物关系)

我第一次建立关联图谱用的是R语言,通过写代码帮公安挖掘团伙犯罪,并用图形展示团伙之间的关联关系。

如有需要请关注本公众号的后续文章,会手把手教大家用R搭建关联图谱,做成app,让没有安装R的电脑通过你分享的网址链接看到罪犯的关联关系。

本文跟大家一起用neo4j一步步搭建简单关联图谱,让大家快速熟悉neo4j的语法。为便于理解,关系数据采用家有儿女中的人物关系。

一、创建节点

1 删除数据库中以往的图,确保在一个空白的环境中进行操作

match (n) detach delete n

match是匹配操作,小括号(可以想象成小圆)表示节点node,n为标识符,通过该语句可以删除neo4j数据库中所有点。

2 创建人物节点

create (n:Person {name:'夏东海'}) return n

create是创建操作,n是节点名,Person是标签,代表节点的类型,花括号中存放节点的属性

该语句表示创建一个标签为Person的节点,该节点有一个name属性,属性值是夏东海。

加了return n就会在neo4j中显示创建好该节点的图,不加只创建点,不展示图。

创建家有儿女中主要人物的节点

create (n:Person {name:'刘梅'}) return n
create (n:Person {name:'刘星'}) return n
create (n:Person {name:'夏雪'}) return n
create (n:Person {name:'夏雨'}) return n
create (n:Person {name:'胡统一'}) return n
create (n:Person {name:'玛丽'}) return n
create (n:Person {name:'范晓英'}) return n
create (n:Person {name:'夏祥'}) return n
create (n:Person {name:'杨欣'}) return n
create (n:Person {name:'戴明明'}) return n
create (n:Person {name:'戴天高'}) return n
create (n:Person {name:'胖婶'}) return n

运行如下语句

match(n) return n

得到结果如下:

3 创建工作节点和地点节点

create (n:Job {title:'护士长'}) return n
create (n:Job {title:'学生'}) return n
create (n:Job {title:'编导'}) return n
create (n:Job {title:'无业游民'}) return n
create (n:Job {title:'社区工作人员'}) return n
create (n:Job {title:'无业游民'}) return n
create (n:Location {country:'中国',city:'北京'})
create (n:Location {country:'美国',city:'纽约'})

运行如下语句

match(n) return n

得到结果如下:

感觉这个颜色组合起来有点丑,可以运行如下语句:

:style

点击右下角的图标可以更换颜色

二、创建关系

1 创建人物之间的关系

创建刘梅和夏东海之间的关系

match (a:Person {name:'刘梅'}), (b:Person {name:'夏东海'}) MERGE (a)-[:妻子]->(b)

该语句中的-[:妻子]->表示刘梅是夏东海的妻子。

创建家有儿女中主要人物的关系

match (a:Person {name:'刘梅'}), (b:Person {name:'夏东海'}) MERGE (a)-[:'妻子']->(b)
match (a:Person {name:'刘梅'}), (b:Person {name:'夏雨'}) MERGE (a)-[:继母]->(b)
match (a:Person {name:'刘梅'}), (b:Person {name:'夏雪'}) MERGE (a)-[:继母]->(b)
match (a:Person {name:'刘梅'}), (b:Person {name:'胡统一'}) MERGE (a)-[:前妻]->(b)
match (a:Person {name:'刘星'}), (b:Person {name:'刘梅'}) MERGE (a)-[:儿子]->(b)
match (a:Person {name:'刘星'}), (b:Person {name:'胡统一'}) MERGE (a)-[:儿子]->(b)
match (a:Person {name:'夏东海'}), (b:Person {name:'刘星'}) MERGE (a)-[:继父]->(b)
match (a:Person {name:'玛丽'}), (b:Person {name:'夏东海'}) MERGE (a)-[:前妻]->(b)
match (a:Person {name:'夏雪'}), (b:Person {name:'夏东海'}) MERGE (a)-[:女儿]->(b)
match (a:Person {name:'夏雨'}), (b:Person {name:'夏东海'}) MERGE (a)-[:儿子]->(b)
match (a:Person {name:'夏雪'}), (b:Person {name:'玛丽'}) MERGE (a)-[:女儿]->(b)
match (a:Person {name:'夏雨'}), (b:Person {name:'玛丽'}) MERGE (a)-[:儿子]->(b)
match (a:Person {name:'夏雨'}), (b:Person {name:'夏雪'}) MERGE (a)-[:弟弟]->(b)
match (a:Person {name:'夏雪'}), (b:Person {name:'刘星'}) MERGE (a)-[:姐姐]->(b)
match (a:Person {name:'刘星'}), (b:Person {name:'夏雨'}) MERGE (a)-[:哥哥]->(b)
match (a:Person {name:'戴明明'}), (b:Person {name:'夏雪'}) MERGE (a)-[:朋友]->(b)
match (a:Person {name:'戴天高'}), (b:Person {name:'刘梅'}) MERGE (a)-[:同学]->(b)
match (a:Person {name:'戴天高'}), (b:Person {name:'戴明明'}) MERGE (a)-[:父亲]->(b)
match (a:Person {name:'胖婶'}), (b:Person {name:'刘梅'}) MERGE (a)-[:邻居]->(b)
match (a:Person {name:'夏祥'}), (b:Person {name:'夏东海'}) MERGE (a)-[:父亲]->(b)

运行如下语句

match(n) return n

得到结果如下:

2 创建人物和居住地址之间的关系

创建家有儿女中主要人物的居住地址关系

match (a:Person {name:'刘梅'}),(b:Location {country:'中国',city:'北京'})  MERGE (a)-[:居住]->(b)
match (a:Person {name:'夏东海'}),(b:Location {country:'中国',city:'北京'})  MERGE (a)-[:居住]->(b)
match (a:Person {name:'玛丽'}),(b:Location {country:'美国',city:'纽约'})  MERGE (a)-[:居住]->(b)

得到结果如下:

3 创建人物和职业之间的关系

创建家有儿女中主要人物职业关系

match (a:Person {name:'刘梅'}),(b:Job {title:'护士长'})  MERGE (a)-[:职业]->(b)
match (a:Person {name:'夏东海'}),(b:Job {title:'编导'})  MERGE (a)-[:职业]->(b)
match (a:Person {name:'胡统一'}),(b:Job {title:'无业游民'})  MERGE (a)-[:职业]->(b)
match (a:Person {name:'夏雨'}),(b:Job {title:'学生'})  MERGE (a)-[:职业]->(b)
match (a:Person {name:'刘星'}),(b:Job {title:'学生'})  MERGE (a)-[:职业]->(b)
match (a:Person {name:'夏雪'}),(b:Job {title:'学生'})  MERGE (a)-[:职业]->(b)
match (a:Person {name:'胖婶'}),(b:Job {title:'社区工作人员'})  MERGE (a)-[:职业]->(b)

得到结果如下:

至此,基于家有儿女中人物关系的关联图谱已经建好,接下来讲一讲查询。

三、查询

1 查询单个点

MATCH (n:Person) 
WHERE n.name = '夏东海'
RETURN n

上面的语句为查询属性名为夏东海的节点,得到结果

2 查询所有关系的节点

MATCH (n)--() RETURN n

得到结果如下:

3 查询单个关系

查询身份为学生的所有人

MATCH (a:Person)-[:职业]->(b:Job {title:'学生'}) RETURN a,b

得到结果如下:

找到了夏雪、刘星、夏雨三个身份为学生的人。

4 查询所有对外有关系的节点

MATCH (n)-->() RETURN n

得到结果如下:

职业和居住地址等对外有没有关系的节点就不会展示。

5 查询关系为父亲的子图

MATCH (n)-[:父亲]-() RETURN n

得到结果如下:

四、更新图形

1 为节点增加属性

match (n) where id(n)=48 set n.sex = '男' return n;

得到结果如下:

2 为节点增加标签

match (n) where id(n)=33 set n:护士 return n;

得到结果如下:

3 为关系增加属性

match (n)<-[r]-(m) where id(n)=48 and id(m)=33 set r.team='夫妻' return n;
match (n)<-[r]-(m) where id(n)=48 and id(m)=68 set r.team='父子' return n;
match (n)<-[r]-(m) where id(n)=48 and id(m)=36 set r.team='父子' return n;

查询所有点

MATCH (n) RETURN n LIMIT 25

得到结果如下:

neo4j创建关联图谱的基本语句就是上面这些啦,大家入门愉快。

参考文献

https://zhuanlan.zhihu.com/p/88745411 https://www.cnblogs.com/ljhdo/p/5516793.html https://www.w3cschool.cn/neo4j/neo4j_cql_where_clause.html

本文分享自微信公众号 - 阿黎逸阳的代码(gh_f3910c467dfe),作者:阿黎逸阳

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【Python】基于某些列删除数据框中的重复值

    Python按照某些列去重,可用drop_duplicates函数轻松处理。本文致力用简洁的语言介绍该函数。

    阿黎逸阳
  • Python中的集合

    Python中的集合专门用于存储信息,存储的元素无序且不能重复,它用一对花括号{}定义,数据之间用逗号隔开。

    阿黎逸阳
  • 数据概览神器—Pandas-profiling

    Python中有很多常用的数据分析函数,可以帮助我们对样本有一个初步的认识,比如describe()函数,可以很方便地生成每个变量的最大值、最小值、分位数等。

    阿黎逸阳
  • Spark UI (基于Yarn) 分析与定制

    有时候我们希望能对Spark UI进行一些定制化增强。并且我们希望尽可能不更改Spark的源码。为了达到此目标,我们会从如下三个方面进行阐述:

    用户2936994
  • python 类

    类时面向对象编程的核心内容。通常把具有相同特征(数据元素)与行为(功能)的事物描述定义为一个类,类是一个抽象的概念,把类实例化既可以得到一个对象。

    py3study
  • ggplot2:结合ggmap绘制地图

    ggmap包整合了四种地图资源,分别是Google、OpenStreetMaps、Stamen和Cloudmade。可以方便的与ggplot进行涂层叠加,实现在...

    三猫
  • Spark2.x学习笔记:6、在Windows平台下搭建Spark开发环境(Intellij IDEA)

    Spark2.x学习笔记 6、 在Windows平台下搭建Spark开发环境(Intellij IDEA+Maven) 6.1 集成开发环境IDE 为了方便应用...

    程裕强
  • silverlight向wcf传递大于8192字节(8k)的字符串

    默认情况下,silverlight在调用wcf时,如果传递的参数长度大于8192字节,即8k,会提示Not Found错误。 解决方法如下: 1、wcf服务端修...

    菩提树下的杨过
  • 【iOS】修改checkra1n+chimera环境(chimera1n)

    这样海外和已经有系统全局代理设置的朋友们就可以直接使用 brew 命令安装软件了。

    zby1101
  • [计算机视觉论文速递] 2018-06-06

    这篇文章有4篇论文速递信息,涉及目标跟踪、GAN、Zero-Shot Learning、视频分类和行人重识别等方向(含一篇IJCAI 2018和一篇IROS 2...

    Amusi

扫码关注云+社区

领取腾讯云代金券