在Neo4j中對漫威社交網(wǎng)絡(luò)進(jìn)行初步分析-上篇

原文鏈接:https://tbgraph.wordpress.com/2017/10/28/neo4j-marvel-social-graph-analysis/
譯者言:原文篇副較長呢铆,為了方便閱讀蝙斜,這里將原文拆成上下兩篇。上篇主要介紹了桶算法,三角形計數(shù)幾個分析方法赤兴,下篇主要介紹聚類系數(shù),連通分量禀综,加權(quán)連通分量幾種分析方法击胜,總體而言還都是比較基礎(chǔ)的分析方法。本文是上篇

本文是漫威社交網(wǎng)絡(luò)分析序列的第二篇桦沉,上一篇文章中每瞒,我們已經(jīng)將Kaggle競賽的帖子中漫威的數(shù)據(jù)導(dǎo)入到Neo4j中,同時演示了如何從二分圖映射到單分圖纯露。我們也使用了一個簡單的模型剿骨,將任何兩位英雄一起出現(xiàn)在漫畫的次數(shù)記錄下來。

譯者言:“兩位英雄一起出現(xiàn)在漫畫的次數(shù)”指在一本漫畫中埠褪,有兩位英雄出現(xiàn)了浓利,則計為1次,如在兩本漫畫中都出現(xiàn)钞速,則為2次贷掖。

為了便于理解,我們使用下面的函數(shù)來表示:

(:Hero)←(:Comic)→(:Hero)

(:Hero)←[:KNOWS{weight=一起出現(xiàn)在漫畫中的次數(shù)}]→(:Hero)

同時渴语,也可以映射到下面這種單分圖

(:Comic)←[{weight=同時出現(xiàn)英雄的個數(shù)}]→(:Comic)

好苹威,先這些,導(dǎo)入圖數(shù)據(jù)后驾凶,我們可以進(jìn)行接下來的分析了牙甫。

基本要求

  • Neo4j(https://neo4j.com/download/)

  • Neo4j官方圖算法庫(https://github.com/neo4j-contrib/neo4j-graph-algorithms/)

  • Apoc插件(https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases)

圖模型

我們已經(jīng)有一個簡單圖模型掷酗,接下來從Hero和Comics的二分圖網(wǎng)絡(luò)(兩種結(jié)點類型)開始,根據(jù)兩個英雄出現(xiàn)在同一個漫畫中的次數(shù)推導(dǎo)出一個單分圖(只有一種結(jié)點類型)腹暖。

開始分析

下面我們將在之前推導(dǎo)出來的單分圖上進(jìn)行一些分析汇在。關(guān)于數(shù)據(jù)分析,我通常的習(xí)慣是先進(jìn)行一些全局性的統(tǒng)計脏答,對圖有一個大概的感性的認(rèn)識糕殉,然后再深入研究細(xì)節(jié)。

權(quán)重分布

我們先來看一下具有相似權(quán)重的英雄分布情況殖告。權(quán)重值指兩英雄在相同漫畫中一塊出現(xiàn)的總次數(shù)阿蝶。

MATCH ()-[k:KNOWS]->()
RETURN (k.weight / 10) * 10 as weight,count(*) as count
ORDER BY count DESC LIMIT 20

第一眼看到這個查詢語句,發(fā)現(xiàn)?(k.weight / 10) * 10?這樣的子句出現(xiàn)黄绩,一定會認(rèn)為這是非常傻的語句羡洁。但是如果你了解Neo4j的計算規(guī)則(兩個整數(shù)相除得到仍是整數(shù)),就會明白爽丹,我們這種寫法筑煮,是為了完成一個“桶”函數(shù)的功能,即把權(quán)重都分配到10倍數(shù)的桶里粤蝎。這樣就很容易理解下面的結(jié)果了真仲。

?從結(jié)果中可以看出,在漫威英雄網(wǎng)絡(luò)中初澎,在171644個關(guān)系中秸应,有162489個關(guān)系(點總關(guān)系數(shù)據(jù)的94%)的權(quán)重是在10以下,也就是說碑宴,大部分英雄之間只有一面之緣软啼。

權(quán)重最大值是724,出現(xiàn)在“THING/BENJAMIN J. GR”(石頭人)和“HUMAN TORCH/JOHNNY S”(霹靂火),這倆真是一對好基友延柠。

譯者言:石頭人和霹靂火是神奇四俠中的英雄祸挪。實際上權(quán)重排名的前三都是神奇四俠的人。

盡管在漫威英雄的社交網(wǎng)絡(luò)中捕仔,大家都是彼此認(rèn)識的匕积,但是通過權(quán)重可以看出,大部分都是很弱的聯(lián)系榜跌。我大膽做兩個假設(shè):

  1. 大部分漫畫都有自己的英雄團(tuán)隊,但團(tuán)隊全體成員并不會在漫畫的每一集都會有出現(xiàn)盅粪。

  2. 偶爾會有幾集漫畫钓葫,不同英雄團(tuán)隊的英雄會一起出現(xiàn),因此會出現(xiàn)一些弱關(guān)系票顾。

為了驗證我的假設(shè)础浮,我先使用下面的查詢語句試試帆调。

MATCH (u:Comic)
RETURN avg(apoc.node.degree(u,'APPEARED_IN')) as average_heroes,
stdev(apoc.node.degree(u,'APPEARED_IN')) as stdev_heroes,
max(apoc.node.degree(u,'APPEARED_IN')) as max_heroes,
min(apoc.node.degree(u,'APPEARED_IN')) as min_heroes

上面顯示的是一些平均指標(biāo),而我個人更喜歡看分布情況豆同,就像我之前所使用的“桶”函數(shù)那樣:

MATCH (u:Comic)
RETURN (size((u)-[:APPEARED_IN]-()) / 10) * 10 as heroCount,
count(*) as times
ORDER BY times DESC limit 20

看起來我的假設(shè)好像還成番刊,8999(71%)個英雄在漫畫中出現(xiàn)的次數(shù)少于10次,加上前面平均每集7.5個英雄的推斷影锈,可以知道芹务,大部漫畫中可能只出現(xiàn)5個英雄或更少。有些漫畫會有“家族聚會”的情況鸭廷,這時會有超過30個英雄出現(xiàn)枣抱。有一集漫畫叫COCI,就有110個英雄出現(xiàn)辆床,應(yīng)該是《超級英雄大會》那期佳晶。

權(quán)重規(guī)一化

我們可以使用max或min方法將權(quán)重值進(jìn)行規(guī)一化處理。注意這次我們使用的?(toFloat(k1.weight) - min) / (max - min)?讼载,先將將k1.weight轉(zhuǎn)換成浮點型轿秧,這樣浮點型除以整形,得到的仍是浮點型咨堤。也就不會分組到之前的桶里了菇篡。

MATCH (:Hero)-[k:KNOWS]->(:Hero) 
//get the the max and min value
WITH max(k.weight) as max,min(k.weight) as min
MATCH (:Hero)-[k1:KNOWS]->(:Hero)
//normalize
SET k1.weight_minmax = (toFloat(k1.weight) - min) / (max - min)

譯者言:上面的語句為每個KNOWS關(guān)系都增加了一個規(guī)一化的權(quán)重屬性weight_minmax

上面可以看出來,這些分析還是非常簡單的吱型,原文作者寫的非常棒逸贾,從簡入手,讓我們看起來比較好理解津滞,稍后下篇時铝侵,會慢慢的增加更多的知識點。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末触徐,一起剝皮案震驚了整個濱河市咪鲜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撞鹉,老刑警劉巖疟丙,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鸟雏,居然都是意外死亡享郊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門孝鹊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炊琉,“玉大人,你說我怎么就攤上這事√洌” “怎么了锰悼?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長团赏。 經(jīng)常有香客問我箕般,道長,這世上最難降的妖魔是什么舔清? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任丝里,我火速辦了婚禮,結(jié)果婚禮上鸠踪,老公的妹妹穿的比我還像新娘丙者。我一直安慰自己,他們只是感情好营密,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布械媒。 她就那樣靜靜地躺著,像睡著了一般评汰。 火紅的嫁衣襯著肌膚如雪纷捞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天被去,我揣著相機與錄音主儡,去河邊找鬼。 笑死惨缆,一個胖子當(dāng)著我的面吹牛糜值,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播坯墨,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼寂汇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捣染?” 一聲冷哼從身側(cè)響起骄瓣,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎耍攘,沒想到半個月后榕栏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蕾各,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年扒磁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片式曲。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡渗磅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出检访,到底是詐尸還是另有隱情始鱼,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布脆贵,位于F島的核電站医清,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏卖氨。R本人自食惡果不足惜会烙,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筒捺。 院中可真熱鬧柏腻,春花似錦、人聲如沸系吭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肯尺。三九已至沃缘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間则吟,已是汗流浹背槐臀。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留氓仲,地道東北人水慨。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像敬扛,于是被迫代替她去往敵國和親晰洒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容