【Nosql-neo4j-基于社区发现算法和图分析Neo4j解读《权力的游戏》】

导读

几个月前,数学家 Andrew Beveridge 和Jie Shan在数学杂志上发表《权力的网络》( 链接: 权力的网络),主要分析畅销小说《冰与火之歌》第三部《冰雨的风暴》中人物关系,其已经拍成电视剧《权力的游戏》系列。他们在论文中介绍了如何通过文本分析和实体提取构建人物关系的网络。紧接着,使用社交网络分析算法对人物关系网络分析找出最重要的角色;应用社区发现算法来找到人物聚类。

其中的分析和可视化是用Gephi做的,Gephi是非常流行的图分析工具。但作者觉得使用Neo4j来实现更有趣。

导入原始数据到neo4j

数据下载
请添加图片描述
上面是人物关系的之邻接表以及关系权重。作者使用简单的数据模型:

(:Character {
   name})-[:INTERACTS]->(:Character {
   name})
  • 带有标签Character的节点代表小说中的角色, 用单向关系类型INTERACTS代表小说中的角色有过接触。
  • 节点属性会存储角色的名字name, 两角色间接触的次数作为关系的属性:权重(weight)。

首先创建节点c,并做唯一限制性约束,c.name唯一,保证schema的完整性:

CREATE CONSTRAINT ON (c:Character) ASSERT c.name IS UNIQUE;

一旦约束创建即相应的创建索引,这将有助于通过角色的名字查询的性能。作者使用Neo4j的Cypher(Cypher是一种声明式图查询语言,能表达高效查询和更新图数据库)LOAD CSV语句导入数据:

# 使用网络直接加载数据(自己尝试没有成功)
LOAD CSV WITH HEADERS FROM "https://www.macalester.edu/~abeverid/data/stormofswords.csv" AS row
MERGE (src:Character {
   name: row.Source})
MERGE (tgt:Character {
   name: row.Target})
MERGE (src)-[r:INTERACTS]->(tgt)
SET r.weight = toInt(row.Weight)
![请添加图片描述](https://img-blog.csdnimg.cn/008d456e35df40bdb4807c5a8ea0dcbe.webp)


 ##########################################


# 下载到本地,加载到nei4j中
LOAD CSV WITH HEADERS FROM "file:/stormofswords.csv" AS row
MERGE (src:Character {
   name: row.Source})
MERGE (tgt:Character {
   name: row.Target})
MERGE (src)-[r:INTERACTS]->(tgt)
SET r.weight = toInt(row.Weight)

我们能可视化整个图形,但是这并不能给我们很多信息,比如哪些是最重要的人物,以及他们相互接触的信息:

MATCH p=(:Character)-[:INTERACTS]-(:Character)
RETURN p

请添加图片描述

人物网络分析

作者使用Neo4j的图查询语言Cypher来做《权力的游戏》图分析,应用到了网络分析的一些工具,具体见《网络,人群和市场:关于高度连接的世界》

人物数量

万事以简单开始。先看看上图上由有多少人物:

MATCH (c:Character) 
RETURN count(c)

请添加图片描述

概要统计

统计每个角色接触的其它角色的数目:

MATCH (c:Character)-[:INTERACTS]->()
WITH c, count(*)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Durian1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值