1. 程式人生 > >Neo4j系列-圖分析

Neo4j系列-圖分析

1、人物數量

萬事以簡單開始。先看看上圖上由有多少人物:

MATCH (c:Person) RETURN count(c)

2、概要統計

統計每個角色接觸的其它角色的數目:

MATCH (c:person)-[:INTERACTS]->() WITH c, count(*) AS num RETURN min(num) AS min, max(num) AS max, avg(num) AS avg_characters, stdev(num) AS stdev

3、圖(網路)的直徑

網路的直徑或者測底線或者最長最短路徑:
// Find maximum diameter of network // maximum shortest path between two nodes

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

4、最短路徑

作者使用Cypher 的shortestPath函式找到圖中任意兩個角色之間的最短路徑。讓我們找出“王菲”和“周迅”之間的最短路徑:

MATCH (王菲:person {name: "王菲"}), (周迅:person {name: "周迅"}) MATCH p=shortestPath((王菲)-[INTERACTS*]-(周迅)) RETURN p

5、所有最短路徑

聯結王菲”和“周迅”之間的最短路徑可能還有其它路徑,我們可以使用Cypher的allShortestPaths函式來查詢:

MATCH (王菲:person {name: "王菲"}), (周迅:person {name: "周迅"}) MATCH p=allShortestPaths((王菲)-[INTERACTS*]-(周迅)) RETURN p

關鍵節點

在網路中,如果一個節點位於其它兩個節點所有的最短路徑上,即稱為關鍵節點。下面我們找出網路中所有的關鍵節點: