如何计算Apache Age图的节点度中心性并排序节点影响力?
计算Apache Age图的节点度中心性并排序
要通过Cypher查询计算Apache Age图的节点度中心性(以此判断节点重要性),并按影响力排序,需先将关系型数据映射为Age的图结构,再执行统计查询,步骤如下:
1. 初始化Apache Age图空间
如果还未创建Age图,先执行以下SQL初始化:
CREATE EXTENSION IF NOT EXISTS age; LOAD 'age'; SET search_path = ag_catalog, "$user", public; CREATE GRAPH social_network;
2. 导入关系型数据到Apache Age
导入Person节点
将people表的数据导入为Age的Person节点:
SELECT * FROM cypher('social_network', $$ CREATE (p:Person {id: $id, name: $name}) $$) AS (v agtype) FROM people;
导入双向朋友关系边
由于朋友关系是无向的,需创建双向边来模拟无向连接:
SELECT * FROM cypher('social_network', $$ MATCH (a:Person {id: $person_id}), (b:Person {id: $friend_id}) CREATE (a)-[:FRIENDS_WITH]->(b), (b)-[:FRIENDS_WITH]->(a) $$) AS (v agtype) FROM connections;
3. 计算度中心性并排序
无向图总度统计(核心查询)
总度是节点的所有连接数,直接反映节点在无向网络中的影响力:
MATCH (p:Person) WITH p, SIZE((p)--()) AS total_degree RETURN p.name, total_degree ORDER BY total_degree DESC, p.name ASC;
(p)--()匹配所有与节点p相连的边(忽略方向)SIZE()统计边的数量得到总度- 按
total_degree降序排序(影响力从高到低),同名节点按名称升序排列
有向图场景:区分入度与出度
如果是有向关系(如关注/被关注),可分别统计入度(收到的连接)和出度(发起的连接):
MATCH (p:Person) WITH p, SIZE((p)-->()) AS out_degree, SIZE((p)<--()) AS in_degree, SIZE((p)--()) AS total_degree RETURN p.name, out_degree, in_degree, total_degree ORDER BY total_degree DESC;
示例结果
针对你提供的示例数据,执行无向总度查询后,结果如下:
| name | total_degree |
|---|---|
| Bob | 3 |
| Charlie | 3 |
| David | 3 |
| Alice | 2 |
| Eve | 1 |
Bob、Charlie、David的总度最高,是网络中最核心的节点。
内容的提问来源于stack exchange,提问作者Muhammad Awais Bin Adil
相关产品推荐
相关产品推荐

