Neo4j圖形算法:可視化映射圖

原文鏈接: https://markhneedham.com/blog/2018/10/31/neo4j-graph-algorithms-visualise-projected-graph/

幾周前,我寫了一篇文章《使用加權(quán)PageRank找出史上最優(yōu)秀的網(wǎng)球運動員》,在那篇文章中,我使用了一個映射可信圖。而本文我將詳細介紹一下這個映射可信圖。

正如我在那篇文章中所指出的,大部分圖模型在進行圖算法運行時,與圖算法所期待的模型是不匹配的,所以,我們需要映射出一個新的圖,來運行圖算法。

在當前示例中,PageRank算法是運行在‘可信圖’的基礎(chǔ)上的,可信圖中每個結(jié)點的可信度依賴于傳入的關(guān)系,可信度的值則取決于這些關(guān)系上的weight屬性。

對于網(wǎng)球圖而言,開始的圖是由比賽、勝者、負者所組成,然后使用下面的語句派生出一個可信圖:

MATCH (p1)<-[:WINNER]-(match)-[:LOSER]->(p2)
RETURN id(p2) AS source, id(p1) AS target, count(*) as weight

接著,我們繼續(xù)使用費德勒和納達爾比賽的例子來看他們是如何作用的,如果我們要查詢費德勒贏的比賽的情況,只要將“費德勒”名字賦值給p1,“納達爾"賦值給p2,查詢語句如下:

MATCH (p1:Player {name: "Roger Federer"})<-[:WINNER]-(match)-[:LOSER]->(p2:Player {name: "Rafael Nadal"})
RETURN id(p2) AS source, id(p1) AS target, count(*) as weight

查詢結(jié)果如下:

╒════════╤════════╤════════╕
│"source"│"target"│"weight"│
╞════════╪════════╪════════╡
│7 │124 │15 │
└────────┴────────┴────────┘

如果想得到納達爾贏得比賽的情況:

MATCH (p1:Player {name: "Rafael Nadal"})<-[:WINNER]-(match)-[:LOSER]->(p2:Player {name: "Roger Federer"})
RETURN id(p2) AS source, id(p1) AS target, count(*) as weight

查詢結(jié)果如下:

╒════════╤════════╤════════╕
│"source"│"target"│"weight"│
╞════════╪════════╪════════╡
│124 │7 │23 │
└────────┴────────┴────────┘

可視化這個映射圖之后就很容易理解了。我們可以使用APOC庫中的方法來進行可視化映射圖。

看下面的查詢語句:

MATCH (p1)<-[:WINNER]-(match)-[:LOSER]->(p2)
WITH p2, p1, count(*) AS count
CALL apoc.create.vRelationship(p2,"BEATEN_BY",{count:count},p1) yield rel
RETURN p2, p1, rel

前兩行與之前查詢語句沒有什么區(qū)別,但第三行我們在兩個運動員結(jié)點之間創(chuàng)建的虛擬關(guān)系,這個語句運行之后產(chǎn)生的映射圖比較大,所以,我們先產(chǎn)生個小的的映射圖,只包含一些著名的運動員。

首先 我們創(chuàng)建一個參數(shù),僅包括那些著名的運行員。

:params players => ["Roger Federer", "Andy Murray", "Novak Djokovic", "Rafael Nadal", "Alexander Zverev", "Pete Sampras", "Andre Agassi", "John McEnroe", "Yevgeny Kafelnikov"]

接下來,我們讓這些運行員之間的比較結(jié)果可視化:

MATCH (p1)<-[:WINNER]-(match)-[:LOSER]->(p2)
WHERE p1.name in $players AND p2.name IN $players
WITH p2, p1, count(*) AS count
CALL apoc.create.vRelationship(p2,"BEATEN_BY",{count:count},p1) yield rel
RETURN p2, p1, rel

運行之后得到下圖:?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容