GraphGists

Graph de la Brousse En Folie, tome V

cover

引言

创建此 GraphGist 的目的是为了

  • 使用 Neo4j 进行 GraphGist 的首次测试

  • 以交互方式突出显示此漫画书人物之间的关系

一篇 LinkedIn 文章已撰写完成,可在此处查看:https://goo.gl/dvnL3Z

brousse5 28022003

数据模型

数据模型非常简单,完全侧重于衡量人物之间的互动:一个人物 PARLE_A(与…对话)另一个人物。

节点

  • 英雄

关系

关系模型非常简单,“一个英雄与另一个英雄对话”

  • Hero PARLE_A Hero

数据加载

我们从 Github 上准备好的数据集(csv 格式)构建图 (https://github.com/adriens/brousse-en-folie-network)

首先是节点(英雄)

LOAD CSV WITH HEADERS FROM "https://raw.githubusercontent.com/adriens/brousse-en-folie-network/master/nodes.csv" AS csvLine
CREATE (p:Hero {id: csvLine.id, name: csvLine.label});

,然后是关系

LOAD CSV WITH HEADERS FROM "https://raw.githubusercontent.com/adriens/brousse-en-folie-network/master/edges.csv" AS edges
MATCH (a:Hero { id: edges.source })
MATCH (b:Hero { id: edges.target })
MERGE (a)-[r:PARLE_A]->(b)
// la partie magique, on somme les poids en chargeant
ON MATCH SET r.weight = r.weight + 1 ON CREATE SET r.weight = 1;

我们对英雄设置了唯一性约束

CREATE CONSTRAINT ON (hero:Hero) ASSERT hero.id IS UNIQUE;

最终,我们得到了如下的图

数据利用

人物数量

MATCH (h:Hero) RETURN count(h) as Nb_heros

人物互动统计

MATCH (h:Hero)-[:PARLE_A]->()
WITH h, count(*) AS num
RETURN min(num) AS min, max(num) AS max, avg(num) AS avg_characters, stdev(num) AS stdev

图直径

图的直径,即图中所有最短路径中最长的一条路径

MATCH (a:Hero), (b:Hero) WHERE id(a) > id(b)
MATCH p=shortestPath((a)-[:PARLE_A*]-(b))
RETURN length(p) AS length, extract(x IN nodes(p) | x.name) AS path
ORDER BY length DESC LIMIT 5

最短路径

Dédé 和酋长之间的最短路径是什么?

MATCH (chef:Hero {name: "Le chef coutumier"}), (dede:Hero {name: "Dédé"})
MATCH p=shortestPath((chef)-[PARLE_A*]-(dede))
RETURN p

度中心性

度中心性:节点在网络中的连接数量。在我们的上下文中,它表示每个人物与多少其他人物进行了互动。我们可以像下面这样用纯 Cypher 计算它

MATCH (c:Hero)
RETURN c.name AS Personnage, size( (c)-[:PARLE_A]-() ) AS degree
ORDER BY degree DESC

加权度中心性

我们存储了两个人之间的互动次数,以便为关系添加权重:权重越大,交流越重要……关系也就越紧密。在我们的案例中,聚合(计数)在加载关系 csv 时已经计算过了。

用 Cypher 表达如下

MATCH (h:Hero)-[t:PARLE_A]-()
RETURN h.name as hero,sum(t.weight) as weighted_degree
ORDER BY weighted_degree DESC LIMIT 10
© . All rights reserved.