編者按:本文作者 Jing Xuan,來自 Teradata Data Science 團隊,新加坡國立大學數學系 2016 界研究生。本期博文介紹 Neo4j 圖算法應用及可視化工具,文末還有福利環節哦~
Neo4j 是由 Neo4j, Inc 開發的圖形資料庫管理系統,在眾多圖資料庫中處於領導地位。 在近5年的 DB-Engines 的歡迎度排名中,Neo4j在圖資料庫中一直位列榜首,可以說它是目前使用最廣、用戶最多、商業化最好的圖資料庫。
其實嚴格地來說,Neo4j不僅僅是資料庫,而是一套基於圖資料庫的圖平臺。下面這張圖呈現了Neo4j圖平臺的特點和覆蓋的功能模塊。很多關於圖資料庫的介紹都側重在其作為資料庫的性能和操作層面,今天我們就從數據科學家和商業分析師的視角來看一看 Neo4j 在數據分析上的應用。
在開始之前先來看一下普通用戶如何獲得 Neo4j。Neo4j分為社區版和企業版,普通用戶想使用或體驗的話可以下載 Neo4j Desktop 或者使用 Online Sandbox版本。目前 Neo4j 已宣布其和 Google Cloud達成戰略合作,用戶可以在GCP(Google Cloud Platform)上看到 Neo4j 企業版的Engine。
圖算法應用相信小夥伴們都看了之前介紹圖算法的博文 ,博文中提到的 O』Reilly 新書 《Graph Algorithms》的作者 Amy Holder 和 Mark Needham其實都是 Neo4j的員工,理所當然,書中的案例也是主要基於 Neo4j 所編寫。
編者按:O』Reilly 官網上原本提供了兩個版本的《Graph Algorithms》,除了在圖算法博文中介紹的,還有Neo4j version。現在的官網只保留了Neo4j version
Neo4j的使用主要基於 Cypher語言,其圖分析算法的實現主要由 Graph Algorithm 插件支持。目前這個插件除了囊括了上篇博文中介紹的路徑分析、中心度分析和社群分析三類圖算法函數,還包括了相似度計算、連結預測、數據預處理等模塊,具體算法的使用可以參考 The Neo4j Graph Algorithms User Guide v3.5。能夠感受到的是,無論是在函數的豐富程度方面還是文檔的編寫方面,Neo4j對圖算法的支持還在飛速進化中。
那麼 Neo4j 中的圖算法是如何應用於數據科學任務的呢?我們以鏈路預測(link prediction)問題為例來一探究竟。
鏈路預測問題2004年 Jon Kleinberg 和 David Liben-Nowell 在其關於社交網絡的論文中拋出了這樣的問題:
如果我們有某個時點的社交網絡,是否能夠推斷成員之間在未來是否會發生新的連結?
提出這樣問題的一個假設前提是網絡不是靜態的,而是會發生變化的,並且推斷的成員之間當前沒有連結。在網際網路界,鏈路預測最具代表性的應用是 Facebook的朋友推薦和 Amazon的商品推薦;在學術界,則可以根據學者們過往合作論文的關係來預測或推薦未來的合作者。
除了預測未來的連結,鏈路預測還可以尋找到網絡中隱藏或缺失的連結,如用來完善恐怖組織人員網絡,進而更好地對犯罪分子進行抓捕等。同樣在2004年,矽谷最神秘的獨角獸 Palantir Technologies 成立,主要為美國政府機構和軍方提供數據分析和軟體服務。Palantir的傳奇故事有很多,其中最出名的傳聞是 Palantir 軟體在抓捕賓·拉登的行動中扮演了重要的角色,而圖的應用正是其軟體的主打特色。
當然身處和平年代,抓恐怖分子這樣的事情基本不用我們吃瓜群眾操心,有時間有精力不如多交一些良師益友。還是來看看怎麼找朋友吧~
鏈路預測算法之前的博文對圖算法已經介紹的很詳細,在此之外,圖分析中還有一些主要針對鏈路問題的算法和指標。Neo4j 圖算法中的鏈路預測模塊共支持六個算法函數,這些函數能夠對每對節點算出一個分數,分數反映的是兩個節點之間的接近程度(proximity),分數越高,該對節點之間產生連結的可能性就越大。下面我們就來介紹鏈路問題中幾個比較典型的算法。
Common NeighborsCommon Neighbors 可以算是最簡單也最直觀的方法,它計算的是共同好友數,對圖來說就是計算兩個節點共有的相鄰節點數。下圖中A和D有兩個共同的朋友B、C,而A和E只有一個共同的朋友B,因此A和D之間更容易產生連結。
方法雖然簡單,但是很實用。最常見的是 Linkedin 在推薦好友時,會顯示共同好友人數,通常會把共同好友人數相對較高的人排在前面,而如果一個人和你沒有共同好友,Ta被推薦給你的可能性就很低了。
Preferential Attachment這個指標的計算也很簡單,它的思想是如果A和B都是兩個朋友很多的人,那他們倆認識的可能性就會很大。它的計算就是兩個節點的 degree 相乘。下圖中A、B和C的degree分別為5,2和6,AB的得分10小於AC的得分30,那麼在這個方法下,AC之間產生連結的可能性會更高。
也叫 Frequency weighted Common Neighbors 算法,這個算法首先找出兩個人的共同好友,計算他們共同好友的degree,取對數的倒數後再相加。相比於Common Neighbors中對共同好友的直接累加,取對數的倒數相當於給每個共同好友計算了一個權重,一個共同好友的degree越大,則權重越低。可以理解為如果一個共同好友的朋友太多,那Ta介紹兩個人認識的概率就比較低了。
摸著良心說話,Neo4j畢竟靠資料庫起家,對於圖算法支持的完善程度還是有一定提升空間的。不過對於數據科學任務來說,算法只是工具,不在於全面和複雜,能夠貼合實際解決問題才是關鍵。
Beyond 圖算法回到鏈路預測,此類問題很多時候可以看作是一個二分類的預測問題。對於該類問題,很容易想到監督學習的方法。結合監督學習,解決的思路就是將圖算法生成的 Common Neighbors、Adamic-Adar甚至是之前博文中介紹的 PageRank等等指標作為監督學習模型的輸入變量,用於模型的訓練。這時,圖算法可以被看作一個特徵抽取器,作為機器學習任務的一個環節,提升並優化了機器學習任務的流程。
目前對於機器學習任務,最常用的程式語言非 Python和 R 莫屬。Neo4j 現已官方提供了Python接口,也支持和 R 的交互。下圖中列出了Neo4j支持交互的其他語言,可以說幾乎涵蓋了主流的程式語言,在這一點上,Neo4j比其他的圖資料庫勝一籌。
可視化的目的是為了更好地傳遞信息和表達想法,通常可以按照是否支持交互分為兩類。不支持交互的可視化更側重設計和構思,而可交互的可視化更側重讓受眾去探索,網絡的可視化大多屬於後者。雖然可視化不算圖分析的核心,但絕對是圖分析的魅力所在。Neo4j官方羅列的支持的可視化工具就有不下十種,這些工具的設計大多是為了能夠讓非技術人員探索數據、理解數據。
Neo4j 原生可視化工具Neo4j本身就自帶一定的可視化功能,不過需要 Cypher 查詢語句實現。查詢得到的圖配色清新,支持拖拉拽,且能夠清晰的顯示節點、關係和屬性的信息,對中文的支持也非常友好,在查詢節點不多的時候非常實用。不過當想要顯示的點很多的話,就會顯得有點擠。話不多說,上圖:
Neo4j 自己主推的可視化工具叫做 Neo4j Bloom,可以通過關鍵詞搜索來探索網絡。不過只有商業版,想使用的話需要付費。根據官方宣傳的圖片,默認的風格跟上面的比較接近,但自由調整的餘地大了很多:
Neo4j 對其他可視化工具的支持分為三類,分別為內置連接的可視化庫、沒有直接連接的可視化庫以及單獨的第三方產品。找幾張官宣圖來看一看吧
內置連接的可視化庫Neovis.js:
沒有直接連接的可視化庫Sigma.js:
這裡我們重點介紹一個單獨的第三方產品 GraphXR,因為它比較酷~
GraphXRGraphXR 是一個基於網頁的圖可視化平臺,於2018年12月發布,現可作為插件在 Neo4j Desktop 中安裝。GraphXR 可以使用關鍵詞搜索和 Cypher語言構建圖,其最大的特點是支持 VR(Virtual Reality),並且是目前唯一的能夠同時支持二維數據可視化和VR功能的工具。其實數據可視化從二維到三維並不難,但是三維下的數據可視化往往被認為比較雞肋。在VR環境下,三維可視化讓人們有了更多期待。
拋開VR,GraphXR也算是可圈可點。它的界面絢麗,並提供地圖支持地理空間映射和時間序列的動態可視化。官方給出的圖例也還算走心。
風險投資人關係分析:
虛擬貨幣XRP交易分析:
不過GraphXR也不是盡善盡美,畢竟還在發展初期。在GraphXR中,當網絡中的兩個節點中有多個關係時,只會顯示一條關係,且中文在網絡中有時會顯示不出來,另外當節點比較少時,網絡的顏值會顯得比較低。
說到網絡的可視化,不得不提及Gephi。Gephi主打的就是網絡的可視化探索。在顏值方面,GraphXR 幾乎是目前為數不多地能夠跟 Gephi平分秋色地可視化工具。
福利—免費T恤和證書Neo4j的開發者們為了鼓(hu)勵(you)更多技術人員加入社區也是很捨得下血本。最近在學習Neo4j的過程中發現,只要通過一個免費的Neo4j Certification考試,Neo4j就會免費贈送官方紀念T恤,T恤很實在的區分了男款和女款,還支持免費的國際郵遞。所以上一句話的重點就是免費。懷揣著一顆買菜大媽的少女心,很開心的刷完了這個證書,從刷完到收到T恤寄到手中大約花了50天,都免費了慢一點算啥!下面就奉上攻略,詳情可見https://neo4j.com/graphacademy/neo4j-certification/ 。
薅羊毛攻略首先你需要通過 Neo4j Certification 考試,考試包含80道選擇題,答對64道就算通過。考試的內容包括圖模型、Cypher語言特性、圖資料庫的特性等等。當然在考試之前需要進行一定的學習,學習的資料基本都來源於Neo4j官網的文檔和視頻。當然一點都不想學也不是不行,因為考試不限次數,答了兩次,發現考題幾乎是固定的。
通過考試後你就會收到一個電子版證書和一封 Order your t-shirt的郵件,點開郵件中的連結就可以選衣服的大小和填寫收貨地址啦。大約過了一個月後終於從一個不知名的城市發貨了,又經過了二十天左右,寄到了上海,同時寄來的還有一個電腦貼紙。
Neo4j社區還是很活躍的,每周都會有online meetup來介紹不同行業的圖分析案例,而meetup的常駐主持人正是算法書的作者Mark Needham。
總結今天的博文更多的是介紹和一些經驗分享,實際生活中經常會有人質疑圖分析真的有用嗎?別急,下半年將會帶你 Unlock Secrets,敬請期待吧!
References:https://neo4j.com/
https://www.cs.cornell.edu/home/kleinber/link-pred.pdf
https://medium.com/neo4j/link-prediction-with-neo4j-part-1-an-introduction-713aa779fd9
http://be.amazd.com/link-prediction/
http://statweb.stanford.edu/~owen/courses/319/achouldechova.pdf
https://www.coursera.org/learn/python-social-network-analysis/lecture/hvFPZ/link-prediction
https://en.wikipedia.org/wiki/Palantir_Technologies
https://www.palantir.com/
https://www.bilibili.com/video/av14732029/?spm_id_from=333.788.videocard.1
https://www.kineviz.com/graphxr/
http://www.socialflow.com/breaking-bin-laden-visualizing-the-power-of-a-single/
點擊閱讀原文,同步關注知乎專欄,了解更多。