前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于neo4j图数据库笔记四-交往圈和六度模型

关于neo4j图数据库笔记四-交往圈和六度模型

作者头像
python与大数据分析
发布2022-03-11 13:47:15
5450
发布2022-03-11 13:47:15
举报

六度理论是一个数学领域的猜想,名为Six Degrees of Separation,理论指出:你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过6个中间人你就能够认识任何一个陌生人。这就是六度分割理论,也叫小世界理论。

交往圈无论是在运营商还是在社交平台都发挥着举足轻重的作用,但交往圈由于其数据量庞大,社会交往关系网错综复杂,假设一个人平均交往10个人的话,6度模型扩散出去至少可以达到10万级,而运营商/社交平台的用户数都是百万级甚至数亿,由此形成的交往关系可达到数万亿,这样的数据量和运算量在关系数据库、在大数据平台中基本都是无法做到的。

neo4j提供了这种计算能力和扩展能力,本文的样例数据来自于《Neo4j权威指南》,本人也做了一些补充。

首先创建15个人,20条认识规则

代码语言:javascript
复制
CREATE 
(小北:朋友圈{姓名:"小北"}),
(小菲:朋友圈{姓名:"小菲"}),
(小鹏:朋友圈{姓名:"小鹏"}),
(小颖:朋友圈{姓名:"小颖"}),
(小兰:朋友圈{姓名:"小兰"}),
(小峰:朋友圈{姓名:"小峰"}),
(小讯:朋友圈{姓名:"小讯"}),
(小东:朋友圈{姓名:"小东"}),
(小唯:朋友圈{姓名:"小唯"}),
(小窦:朋友圈{姓名:"小窦"}),
(小齐:朋友圈{姓名:"小齐"}),
(小林:朋友圈{姓名:"小林"}),
(小锐:朋友圈{姓名:"小锐"}),
(小伟:朋友圈{姓名:"小伟"}),
(小玲:朋友圈{姓名:"小玲"}),
(小讯)-[:认识]->(小窦),
(小讯)-[:认识]->(小齐),
(小讯)-[:认识]->(小林),
(小讯)-[:认识]->(小鹏),
(小讯)-[:认识]->(小伟),
(小讯)-[:认识]->(小峰),
(小菲)-[:认识]->(小鹏),
(小菲)-[:认识]->(小峰),
(小菲)-[:认识]->(小唯),
(小峰)-[:认识]->(小北),
(小峰)-[:认识]->(小兰),
(小东)-[:认识]->(小林),
(小东)-[:认识]->(小锐),
(小东)-[:认识]->(小菲),
(小鹏)-[:认识]->(小颖),
(小北)-[:认识]->(小兰),
(小颖)-[:认识]->(小东),
(小唯)-[:认识]->(小鹏),
(小唯)-[:认识]->(小锐),
(小唯)-[:认识]->(小玲)

展示整个朋友圈关系图

MATCH (n) RETURN n

MATCH n=(:朋友圈{姓名:"小峰"})-[*..6]-() RETURN n

由于数据量不大,交往圈尚未达到6度,所以返回六度数据等同于所有交往圈

展示一度关系

展示小讯直接认识的朋友

MATCH n=(:朋友圈{姓名:"小讯"})-[:认识]-() RETURN n

展示二度关系

展示小讯直接认识的朋友以及小讯认识的朋友的朋友

MATCH n=(:朋友圈{姓名:"小讯"})-[*..2]-() RETURN n

展示三度关系

展示小讯直接认识的朋友以及小讯认识的朋友的朋友以及小讯认识的朋友的朋友的朋友

MATCH n=(:朋友圈{姓名:"小讯"})-[*..3]-() RETURN n

展示相关人员

展示小讯可以通过朋友认识其他朋友的朋友

MATCH (n:朋友圈{姓名:"小讯"})-[:认识]-(other)-[:认识]-(otherother) RETURN other

展示小讯可以通过朋友认识的朋友的

MATCH (n:朋友圈{姓名:"小讯"})-[:认识]-(other)-[:认识]-(otherother) RETURN otherother

展示小讯可以通过朋友认识其他朋友的朋友和小讯的朋友

MATCH (n:朋友圈{姓名:"小讯"})-[:认识]-(other)-[:认识]-(otherother) RETURN other,otherother

展示小讯可以通过朋友认识其他朋友的朋友和小讯的朋友以及小讯

MATCH (n:朋友圈{姓名:"小讯"})-[:认识]-(other)-[:认识]-(otherother) RETURN n,other,otherother

依托社交网络搜寻两人之间的最短熟人路径

需要注意的是方向箭头,->代表有向,-代表无向

选择小讯和小锐之间的最短路径

MATCH n=shortestPath((小讯:朋友圈{姓名:"小讯"})-[*..6]->(小锐:朋友圈{姓名:"小锐"})) RETURN n

MATCH n=allshortestPaths((小讯:朋友圈{姓名:"小讯"})-[*..6]-(小锐:朋友圈{姓名:"小锐"})) RETURN n

MATCH n=allshortestPaths((小讯:朋友圈{姓名:"小讯"})-[*..6]-(小锐:朋友圈{姓名:"小菲"})) RETURN n

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python与大数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档