本發明涉及一種互聯網應用技術方法,涉及數據拓撲展示技術,特別涉及一種面向大數據的關系分析展示方法。
背景技術:
隨著互聯網和通訊技術的迅猛發展和廣泛應用,在相當程度上改變了社會關系網絡,重構了網絡與現實社會的關系,所以,網絡社會的互動行為逐漸成為我們研究的重點,比如血緣關系(兄弟、婚姻關系等)、社會角色(領導、教師等)、情感關系(尊敬誰,喜歡誰等)、認知關系(知道誰,與誰看起來相似等)、行動關系(同誰開會,同誰吃飯等)、距離關系(兩地距離)等。然而,隨著網絡通信方式越來越多,數據量越來越大,對于數據分析的難度也就越來越高,傳統的行業應用系統很難實現高性能的數據展示。
傳統行業應用系統對于一些信息往往會采用大量繁瑣的圖表來說明,圖表的大量出現使得用戶體驗變得很差,可能需要很長時間來分析所有的數據和聯系,而數據可視化后,用戶可以快速發現關鍵點,有研究表明,80%的人記得他們所看到的,但只有20%的人記得他們閱讀的,可見可視化的重要程度。
技術實現要素:
本發明提供了一種面向大數據的關系分析展示方法,針對互聯網應用中的海量數據關系分析效率慢及展示體驗差的現狀,本發明提出的一種基于Neo4j圖數據庫和Flex的關系分析方法,能夠支持網絡存儲和可視化展示,以便能夠實現高性能的數據展示。其幾乎方案如下所述:
一種面向大數據的關系分析展示方法,包括存儲模塊和展示模塊,所述存儲模塊包括數據存儲模塊和查詢分析模塊,所述數據存儲模塊用于存儲原始數據和數據之間的關系,采用Neo4j圖數據庫進行存儲;存儲時定義查詢用的帳號作為根節點,每個賬號名字作為一個節點,節點之間的關系作為連線顯示;關系中的from(發送方)屬性作為父節點,關系中的to(接收方)屬性作為子節點,沒有子節點的節點作為葉子節點;所述查詢分析模塊用于查詢滿足條件的海量數據并進行關系分析,所述展示模塊用于將存儲模塊中的數據進行圖表展示和展示操作。
所述查詢分析模塊能夠分析的內容包括:數據關系類型、關系的方向性、關系值及關系的詳細信息。
利用所述查詢分析模塊進行查詢時,包括下列步驟:
1)根據查詢條件查詢數據,每個數據為一個關系,所以每個數據中存在一個父節點和一個子節點;
2)建立一個MAP(存儲鍵值對元素的集合)集合,KEY(鍵)放父節點和子節點的名字,VALUE(值)為一個新的對象,其屬性包括兩個節點的名字、關系類型、關系值、關系方向;
3)循環查詢到的數據;
4)判斷MAP集合中是否存在兩個數據節點名字的KEY值,如果存在,將對象取出并將其關系值加1,如果不存在,新建一個對象,關系值默認設置為1,并將對象添加到MAP集合;
5)設置對象的關系類型;
6)設置對象的關系方向,數據中存在用戶名、發送方、接收方屬性,如果用戶名和發送方名字相同,方向為從左向右;如果用戶名和接收方名字相同,方向為從右向左;如果MAP集合中已經存在過該對象且對象中關系方向既有從左向右又有從右向左,那么將該關系方向設置為雙向;
7)將數據封裝成XML格式發給展示模塊。
所述展示模塊將存儲模塊的數據進行展示時采用環形展示方法,讓每一層的子節點數據以根節點為中心環形展示;對環形展示方法的展示操作有挖掘更深的關系網的二次擴展操作、隱藏/顯示操作、查詢定位操作、放大縮小操作、關系值顯示操作、詳細信息操作。
所述環形展示方法包括下列步驟:
1)提取節點和連線,創建節點對象數組和連線對象數組,循環所有的關系,每一個關系都會產生兩個節點和一條連線,將節點保存到節點對象數組中,將連線保存到連線對象數組中,其中節點對象的主要屬性包括:當前節點名稱、連線數組、父節點對象;連線對象的主要屬性包括父節點對象、子節點對象。
2)確定節點深度,以步驟1)中提取的對象數組和連線數組為基礎數據,首先提取根節點下的子節點,然后遞歸查詢每個子節點下是否還存在子節點,節點深度依次遞增,其中,根節點深度為0,其子節點深度為1,依次遞增,深度最高的節點為葉子節點;
3)設置根節點位置,根節點放在圓的正中心位置;
4)設置葉子節點位置,葉子節點作為圓的最外層數據進行展示,葉子節點的半徑計算公式為節點的深度*基礎半徑,基礎半徑是根據展示畫布的大小進行設置的;葉子節點的角度計算公式為2π/n*i,其中n為葉子節點總數,i為葉子節點的序號;
5)設置父節點位置,父節點作為圓的內層數據進行展示,父節點的位置是和其子節點個數相關的,當子節點的個數為奇數時,父節點的角度應該和其最中間位置的子節點角度一樣,半徑計算公式為父節點的深度*基礎半徑;當子節點的個數為偶數時,父節點的位置應該在最中間的兩個子節點的正中間,角度計算公式為2π/n*1/2,其中n為子節點數,半徑計算公式為父節點的深度*基礎半徑。
本發明描述的關系分析展示方法,能夠滿足海量大數據高性能查詢分析的要求,支持可視化展示,并且具有良好的擴展性。
附圖說明
圖1是數據查詢分析流程圖;
圖2是關系拓撲圖展示算法流程圖。
具體實施方式
為了解決現有技術的架構下,海量數據查詢分析效率慢,界面用戶體驗差,本發明提供的面向大數據的關系分析展示方法,包括:
存儲模塊,主要是將抓取到的海量數據存儲到Neo4j圖數據庫中,并提供查詢分析功能。
展示模塊,采用Flex(圖形設計)技術對查詢分析到的數據進行可視化展示。主要包括節點的展示算法、子節點的二次擴展、詳細信息的查看、節點的查詢定位(高亮顯示)及關系程度顯示等。
本發明提供的面向大數據的關系分析方法,可以支持可視化展示。
下面結合附圖和實施例,對本發明的具體實施方式作進一步詳細描述。
存儲模塊包括:
A1.數據存儲,主要是存儲原始數據和數據之間的關系,采用Neo4j圖數據庫進行存儲。Neo4j是一個java開發的圖數據庫,它將結構化數據存儲在網絡(從數學角度叫做圖)上而不是表中。相對于關系數據庫來說,圖數據庫善于處理大量復雜、互連接、低結構化的數據,這些數據變化迅速,需要頻繁的查詢,在關系數據庫中,這些查詢會導致大量的表連接,因此會產生性能上的問題。Neo4j重點解決了擁有大量連接的傳統RDBMS(關系型數據庫)在查詢時出現的性能衰退問題。Neo4j還提供了非??斓膱D算法、推薦系統和OLAP(數據挖掘)風格的分析,而這一切在目前的RDBMS(關系型數據庫)系統中都是無法實現的。它提供了廣泛使用的REST接口,能夠方便地集成到基于JAVA、PHP、.NET和JavaScript的環境里。
A2.查詢分析,查詢滿足條件的海量數據并進行關系分析,其中分析內容主要包括:數據關系類型、關系的方向性、關系值(比如通信類,記錄通信次數)及關系的詳細信息(包括時間、地點、內容等)等。具體描述如下:
先解釋幾個概念:
根節點:以哪個賬號做的關系查找,就將其作為根節點,圖形化展示時將其放到圖層的正中間位置。
節點:每個賬號名字就作為一個節點顯示。
連線:節點之間的關系作為連線顯示。
父節點:關系中的from屬性作為父節點。
子節點:關系中的to屬性作為子節點。
葉子節點:沒有子節點的節點。
如圖1和圖2所示:
A21.根據查詢條件查詢數據,每個數據為一個關系,所以每個數據中存在一個父節點和一個子節點。
A22.建立一個MAP集合,KEY值放父節點和子節點的名字,VALUE值為一個新的對象,其屬性包括兩個節點的名字、關系類型、關系值、關系方向等。
A23.循環查詢到的數據。
A22.判斷MAP集合中是否存在兩個數據節點名字的KEY值,如果存在,將對象取出并將其關系值加1,如果不存在,新建一個對象,關系值默認設置為1,并將對象添加到MAP集合。
A23.設置對象的關系類型。
A24.設置對象的關系方向,比如通訊類關系,數據中存在用戶名、發送方、接收方屬性,如果用戶名和發送方名字相同,方向為從左向右;如果用戶名和接收方名字相同,方向為從右向左;如果MAP集合中已經存在過該對象且對象中關系方向既有從左向右又有從右向左,那么將該關系方向設置為雙向。
A25.將數據封裝成XML格式發給展示模塊,數據格式如下:
描述:
from:父節點
to:子節點
type:關系類型(郵件類)
aspect:關系方向,0:從左向右,1:從右向左,2:雙向
relationValue:關系值(通訊次數)
展示模塊包括:
B1.數據展示算法,為了使數據展示的更加清晰、美觀,我們提供了環形展示算法,此算法可以讓每一層的子節點數據以根節點為中心環形展示。
B2.二次擴展功能,即挖掘更深的關系網,比如我們通過查詢分析知道A和B之間有關系,現在想知道B和誰有關系,那我們可以繼續以B為父節點,查詢分析和他有關的數據并進行展示,這樣我們的關系網就會越來越龐大。
B3.隱藏/顯示功能,當我們的關系網越來越龐大后,有些關系可能不是我們想要的,我們可以將其隱藏,用到時還可以再顯示。
B4.查詢定位功能,我們支持數據的模糊查詢,并將查詢到的數據節點高亮顯示。
B5.放大縮小功能,我們支持整個或局部圖層的放大與縮小,同時支持節點之間連線的放大與縮小,使用戶能夠更清楚的觀察數據結果。
B6.關系值顯示功能,在數據節點連線上我們會展示關系值,例如情感類關系,我們會顯示數據之間的親密程度;如果是通訊類關系,我們會顯示他們之間的通訊次數等。
B7.詳細信息查看功能,我們雙擊數據節點之間的連線,可以展示連線兩端節點之間的詳細信息。例如通訊類關系,詳細信息主要包括通訊時間、通訊地點及通訊內容等。
其中對于步驟B1中數據展示算法,可以具體描述為:
B11.提取節點和連線,創建節點對象數組和連線對象數組,循環所有的關系,每一個關系都會產生兩個節點和一條連線,將節點保存到節點對象數組(去重)中,將連線保存到連線對象數組中,其中節點對象的主要屬性包括:當前節點名稱、連線數組(一個節點會對應很多連線)、父節點對象等;連線對象的主要屬性包括:父節點對象、子節點對象等。
B12.確定節點深度,以B11中提取的對象數組和連線數組為基礎數據,首先提取根節點下的子節點,然后遞歸查詢每個子節點下是否還存在子節點,節點深度依次遞增(根節點深度為0,其子節點深度為1,依次遞增),深度最高的節點為葉子節點。
B13.設置根節點位置,根節點放在圓的正中心位置。
B14.設置葉子節點位置,葉子節點作為圓的最外層數據進行展示。葉子節點的半徑計算公式為節點的深度*基礎半徑,基礎半徑是根據展示畫布的大小進行設置的;葉子節點的角度計算公式為2π/n*i,其中n為葉子節點總數,i為葉子節點的序號。
B15.設置父節點位置,父節點作為圓的內層數據進行展示。父節點的位置是和其子節點個數相關的,當子節點的個數為奇數時,父節點的角度應該和其最中間位置的子節點角度一樣,半徑計算公式為父節點的深度*基礎半徑;當子節點的個數為偶數時,父節點的位置應該在最中間的兩個子節點的正中間,角度計算公式為2π/n*1/2,其中n為子節點數,半徑計算公式為父節點的深度*基礎半徑。
以上實施例僅用于說明本發明而不是限制,并且在應用上可以延伸到其它的修改、變化、應用和實施例,同時認為所有這樣的修改、變化、應用和實施例都在本發明的范圍內。