Neo4j系列-圖分析
阿新 • • 發佈:2018-11-04
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
關鍵節點
在網路中,如果一個節點位於其它兩個節點所有的最短路徑上,即稱為關鍵節點。下面我們找出網路中所有的關鍵節點: