Neo4j 數據分析—附薅羊毛教程

2021-02-25 數據科學一線DSFrontier

編者按:本文作者 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 Neighbors

Common 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之間產生連結的可能性會更高。

Adamic-Adar

也叫 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 原生可視化工具

Neo4j本身就自帶一定的可視化功能,不過需要 Cypher 查詢語句實現。查詢得到的圖配色清新,支持拖拉拽,且能夠清晰的顯示節點、關係和屬性的信息,對中文的支持也非常友好,在查詢節點不多的時候非常實用。不過當想要顯示的點很多的話,就會顯得有點擠。話不多說,上圖:

Neo4j 自己主推的可視化工具叫做 Neo4j Bloom,可以通過關鍵詞搜索來探索網絡。不過只有商業版,想使用的話需要付費。根據官方宣傳的圖片,默認的風格跟上面的比較接近,但自由調整的餘地大了很多:

Neo4j 對其他可視化工具的支持分為三類,分別為內置連接的可視化庫、沒有直接連接的可視化庫以及單獨的第三方產品。找幾張官宣圖來看一看吧

內置連接的可視化庫Neovis.js:

沒有直接連接的可視化庫Sigma.js:

這裡我們重點介紹一個單獨的第三方產品 GraphXR,因為它比較酷~

GraphXR

GraphXR 是一個基於網頁的圖可視化平臺,於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/

點擊閱讀原文,同步關注知乎專欄,了解更多。

相關焦點

  • 智能化探索(5)圖資料庫 Neo4j 的部署、數據導入和簡單使用
    /:/data \ -e NEO4J_AUTH=neo4j/neo4j_password \ neo4j內存設置這塊有三項設置,分別是前兩者決定了查詢語言運行時候可用的內存,第三個則用於緩存數據和索引以提高查詢效率。
  • 手把手教你快速入門知識圖譜 - Neo4J教程
    先摘一段百度百科:知識圖譜(Knowledge Graph),在圖書情報界稱為知識域可視化或知識領域映射地圖,是顯示知識發展進程與結構關係的一系列各種不同的圖形,用可視化技術描述知識資源及其載體,挖掘、分析、 構建、繪製和顯示知識及它們之間的相互聯繫。
  • 知識圖譜Task00:Neo4j安裝配置
    任務安排Task01:知識圖譜介紹(1天)Task02:基於醫療知識圖譜的問答系統操作介紹(1天)Task03:Neo4j圖資料庫導入數據(1天)知識圖譜Task00:Neo4j安裝配置(Centos)安裝配置一、CentOS伺服器安裝neo4j並使用本地瀏覽器訪問1、下載wget https://neo4j.com/artifact.php?
  • PyTorch 模型訓練實用教程(附代碼)
    本文也按順序的依次介紹數據、模型和損失函數及優化器,從而給大家帶來清晰的機器學習結構。通過本教程,希望能夠給大家帶來一個清晰的模型訓練結構。當模型訓練遇到問題時,需要通過可視化工具對數據、模型、損失等內容進行觀察,分析並定位問題出在數據部分?模型部分?還是優化器?只有這樣不斷的通過可視化診斷你的模型,不斷的對症下藥,才能訓練出一個較滿意的模型。
  • 薅谷歌羊毛!1美元從零開始訓練Bert,內附教程
    source=post_page與更常用的文本數據集(如維基百科)不同,該數據集並不需要進行任何複雜的數據預處理。它也預先格式化了,每行一個句子,便於後續處理。你也可以通過設置相應的語言代碼來使用該數據集。
  • 圖形資料庫Neo4J簡介
    好,現在我們就來看一個通過Cypher來創建並操作圖形資料庫的例子(來自http://neo4j.com/developer/guide-data-modeling/):  首先,我們需要為將要存入到Neo4J中的數據定義相應的數據類型(來自於http://projects.spring.io/spring-data-neo4j/):
  • 【必備神器】安卓模擬器,擼羊毛必備
    2、安卓模擬器跟薅羊毛有啥關係?解決設備問題:很多擼羊毛的用戶只有些老人機接收簡訊用,配合模擬器最合適。提高時間效率:更快的完成羊毛任務,手機配置遠跟不上電腦,軟體裝多了難免變卡。但是世上矛跟盾總是同時存在,個別軟體還是能識別出模擬器跟手機的差別的,所以大家擼羊毛過程中也要注意下。3、哪種安卓模擬器好用?現在市面上有幾十種安卓迷你器,比較常用的是以下6款:主要有逍遙安卓、夜神、藍疊、海馬玩、靠譜助手和天天助手。
  • 無意間領到 Bitmax 500羊毛 | 一個低門檻可以用法幣挖的礦
    上個月29號寫的FURUCombo操作教程,想為擼空投提前做個準備。就在前兩天項目方真的公布了空投細則。
  • Neo4j 操作與 py2neo 用法
    圖形資料庫也就意味著它的數據並非保存在表或集合中,而是保存為節點以及節點之間的關係。Neo4j 的數據由下面幾部分構成:Neo4j 除了頂點(Node)和邊(Relationship),還有一種重要的部分——屬性。無論是頂點還是邊,都可以有任意多的屬性。屬性的存放類似於一個 HashMap,Key 為一個字符串,而 Value 必須是基本類型或者是基本類型數組。
  • (千元亞馬遜羊毛可薅)
    Mask R-CNN 的一些常見用例包括:自動駕駛汽車的感知、表面缺陷檢測和地理空間圖像分析。文中選擇 Mask R-CNN 模型的關鍵原因有三個:大型數據集上的 Mask R-CNN 分布式數據並行訓練可增加通過訓練管道的圖像吞吐量,並縮短訓練時間。Mask R-CNN 模型有許多開源 TensorFlow 實現。
  • Task03:Neo4j簡介與醫療知識圖譜代碼分析
    一、引言在計算機科學中,圖形作為一種特定的數據結構,用於表達數據之間的複雜關係,如社交關係、組織架構、交通信息、網絡拓撲等等。在圖計算中,基本的數據結構表達式是:G=(V,E),V=vertex(節點),E=edge(邊)。圖形結構的數據結構一般以節點和邊來表現,也可以在節點上增加鍵值對屬性。
  • 基於yolo5工地安全帽和禁入危險區域識別系統,附數據集
    代碼及運行教程關於增加數據集分類的方法:SHWD 數據集裡面沒有 person 的類別,先將現有的自己的數據集執行腳本生成 yolov5 需要的標籤文件 .txt,之後再用 yolov5x.pt 加上 yolov5x.yaml ,使用指令檢測出人體python detect.py --save-txt --source .
  • 「微笑傳遞」背後的數據分析
    (Jia-Bin Huang)為什麼有些人自拍出來的照片總是特別地好看?很明顯,自拍時相機與臉之間的相對角度佔了絕大部分的因素。打開網絡搜尋,很快地就可以搜尋到非常多與擺姿勢相關的技巧教程。然而,這些教程往往太過抽象而不容易簡單地運用在日常生活中。我們心中不免疑惑,究竟要怎麼樣擺姿勢才是最好看的呢?不同於專家的意見,我們直接試著從數據中找出規律來。
  • 豬臉識別(附數據集)
    ,這樣訓練數據集就完成了;訓練數據集:豬主體數據:8700張(1000 * 800左右大小),豬臉數據:4100(500 * 500左右大小),一共12800張圖像。(2)數據預處理: data argumentation。包括數據類型轉換(float32)、在圖像中按一定長寬比和面積比crop圖像區域、隨機左右翻轉、隨機顏色變換、擴大像素區間範圍。
  • MOXA交換機環網實戰教程(附PLC400冗餘Intouch配置)
    MOXA交換機環網實戰教程(附PLC400冗餘Intouch配置)
  • MongoDB入門教程
    {id:2,name:'lisi',age:47})db.teacher.insert({id:3,name:'wangwu',age:26})查詢數據db.teacher.count()  #計數統計db.teacher.find()  #查詢所有記錄。
  • OpenCV最新中文版官方教程來了(附下載)
    OpenCV 中文版官方教程來了。
  • . | 三節課分析
    從今年參戰的各家截至目前公布的一些數據來看,今年的戰場也是「風起雲湧」:京東的數據顯示,6月1日零點伊始訂單量就呈現出井噴狀態,第一個小時共售出超過1700萬件商品,同比增長83%;蘇寧易購總裁侯恩龍公布了蘇寧開門紅一小時戰報:「超10大品牌銷售瞬間破億。」