用Igraph創(chuàng)建關(guān)系網(wǎng)絡(luò)&簡(jiǎn)單網(wǎng)絡(luò)分析

---------------------------------------------目錄--------------------------------------------

一.Igraph簡(jiǎn)介

二.Igraph網(wǎng)絡(luò)圖創(chuàng)建與優(yōu)化

三.網(wǎng)絡(luò)圖信息價(jià)值挖掘

四.小結(jié)

---------------------------------------------正文--------------------------------------------

一.Igraph簡(jiǎn)介

問(wèn)題1:Igraph是什么,可以用來(lái)干什么笙纤?

Igraph是一個(gè)python工具包耗溜,它可以用于創(chuàng)建,操作和研究復(fù)雜網(wǎng)絡(luò)系統(tǒng)粪糙。

問(wèn)題2:為什么用Igraph强霎?
實(shí)際運(yùn)用過(guò)程中,很可能會(huì)遇到非常龐大的關(guān)系數(shù)據(jù)蓉冈,當(dāng)網(wǎng)絡(luò)規(guī)模急劇擴(kuò)大時(shí)城舞,情況會(huì)變得紛繁復(fù)雜,處理網(wǎng)絡(luò)結(jié)構(gòu)的代價(jià)和開(kāi)銷也會(huì)隨之增大寞酿,Igraph很多功能使用C語(yǔ)言開(kāi)發(fā)家夺,運(yùn)算效率很高,十分適合解決大型復(fù)雜網(wǎng)絡(luò)問(wèn)題伐弹。另外拉馋,Igraph實(shí)現(xiàn)了一些復(fù)雜網(wǎng)絡(luò)算法,如網(wǎng)絡(luò)流惨好、圖同構(gòu)煌茴、匹配算法以及社團(tuán)結(jié)構(gòu)等,分析的時(shí)候更加方便高效日川。

問(wèn)題3:如何安裝和使用Igraph包呢蔓腐?
可以直接執(zhí)行命令pip install python-igraph安裝。
或者下載igraph安裝包后龄句,先解壓安裝包回论;再cd到安裝包所在目錄散罕,如:cd C:\Users\user\Desktop\igraph;最后執(zhí)行python setup.py install就可以啦傀蓉。
安裝完畢后欧漱,運(yùn)行代碼:import igraph,如果沒(méi)報(bào)錯(cuò)葬燎,代表已經(jīng)成功安裝误甚。

二.Igraph網(wǎng)絡(luò)圖創(chuàng)建與優(yōu)化
以中國(guó)古代戰(zhàn)國(guó)七雄為對(duì)象(點(diǎn)),不同國(guó)家若地理位置相鄰萨蚕,則認(rèn)為存在地理聯(lián)系(邊)靶草,以此為基準(zhǔn),試著創(chuàng)建一個(gè)簡(jiǎn)單的抽象網(wǎng)絡(luò)圖(這里只探究?jī)蓛上噜応P(guān)系岳遥,不保證地理方位的正確性):

# 創(chuàng)建一個(gè)空對(duì)象
g = igraph.Graph()
# 添加網(wǎng)絡(luò)中的點(diǎn)
vertex = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
g.add_vertices(vertex)
# 添加網(wǎng)絡(luò)中的邊
edges = [('a', 'c'), ('a', 'e'), ('a', 'b'), ('b', 'd'), ('b', 'g'), ('c', 'e'),
         ('d', 'f'), ('d', 'g'), ('e', 'f'), ('e', 'g'), ('f', 'g')]
g.add_edges(edges)
# -----------------------其它信息-----------------------------
# 國(guó)家名稱
g.vs['label'] = ['齊', '楚', '燕', '韓', '趙', '魏', '秦']
# 國(guó)家大致相對(duì)面積(為方便顯示沒(méi)有采用真實(shí)面積)
g.vs['aera'] = [50, 100, 70, 40, 60, 40, 80]
# 統(tǒng)計(jì)日期
g['Date'] = '公元前279年'
# -----------------------簡(jiǎn)單作圖-----------------------------
# 選擇圖的布局方式
layout = g.layout('kk')
# 用Igraph內(nèi)置函數(shù)繪圖
igraph.plot(g, layout)
戰(zhàn)國(guó)勢(shì)力地理關(guān)系圖1.0

這張圖不是很美觀奕翔,那么如何去優(yōu)化和完善它呢?比如說(shuō)點(diǎn)的顏色浩蓉、大小派继,邊的長(zhǎng)短、粗細(xì)等捻艳〖菘撸可以通過(guò)調(diào)節(jié)igraph.plot()中的參數(shù)達(dá)到我們想要的效果:

# -----------------------設(shè)置參數(shù)-----------------------------
# 參數(shù)集合。visual_style是一個(gè)參數(shù)字典认轨,可以動(dòng)態(tài)添加想要個(gè)性化設(shè)定的參數(shù)
visual_style = {}
# 根據(jù)相對(duì)面積绅络,設(shè)置點(diǎn)的大小
visual_style["vertex_size"] = g.vs['aera']
# 根據(jù)國(guó)家實(shí)力,設(shè)置點(diǎn)的顏色
visual_style["vertex_color"] = [color_map[power] for power in g.vs["power"]]
# 邊的粗細(xì)(這里隨機(jī)生成)
visual_style['edge_width'] = [2 + 5*np.random.rand() for i in np.arange(11)]
# 圖尺寸
visual_style["bbox"] = (600, 480)
# 邊緣距離
visual_style["margin"] = 50
# 布局方式
visual_style["layout"] = layout
# -----------------------畫圖-----------------------------
igraph.plot(g, **visual_style)
戰(zhàn)國(guó)勢(shì)力地理關(guān)系圖1.1

PS:看懂以上代碼嘁字,就了解了Igraph中基本的網(wǎng)絡(luò)圖的構(gòu)建方法恩急,以及可視化展示的常用參數(shù)設(shè)置方法。接下來(lái)纪蜒,重點(diǎn)講講如何從這些網(wǎng)絡(luò)圖中找出一些有價(jià)值的信息衷恭。

三.網(wǎng)絡(luò)圖信息價(jià)值挖掘
那么,基于這張圖纯续,有哪些有價(jià)值的信息可以挖掘呢随珠?
1.節(jié)點(diǎn)的度(degree)。
概念:某節(jié)點(diǎn)的度猬错,只與該節(jié)點(diǎn)有直接聯(lián)系的其它點(diǎn)的個(gè)數(shù)窗看。在有向圖中,度還可分為出度(out-defree)和進(jìn)度(in-degree)倦炒,它一定程度上表現(xiàn)了某節(jié)點(diǎn)周圍的密集程度显沈。
在本例中,度的實(shí)際含義是一個(gè)國(guó)家的鄰國(guó)數(shù)量析校。

# 點(diǎn)的度
numbers = g.degree()
# 不同國(guó)家鄰國(guó)數(shù)量
neighbors = dict(zip(g.vs['label'], numbers))
print(neighbors)

輸出結(jié)果:

{'魏': 3, '燕': 2, '趙': 4, '楚': 3, '齊': 3, '韓': 3, '秦': 4}

2.中介中心性(betweenness)构罗。
概念:一個(gè)結(jié)點(diǎn)擔(dān)任其它兩個(gè)結(jié)點(diǎn)之間最短路路勁的橋梁的次數(shù),次數(shù)越多智玻,該數(shù)越大遂唧。
在本例中指的是國(guó)家起到的樞紐作用大小。

# 計(jì)算中介中心性
betweenness = g.betweenness()
# 保留一位小數(shù)
betweenness = [round(i, 1) for i in betweenness]
# 與國(guó)家名對(duì)應(yīng)
country_betweenness = dict(zip(g.vs['label'], betweenness))
print('不同國(guó)家的中介中心性(樞紐作用):\n', country_betweenness)

輸出結(jié)果:

不同國(guó)家的中介中心性(樞紐作用):
 {'魏': 0.8, '燕': 0.0, '趙': 4.2, '楚': 1.8, '齊': 1.8, '韓': 0.5, '秦': 1.8}
中介中心性

3.另一個(gè)非常常見(jiàn)的操作是找兩個(gè)點(diǎn)之間的最短路徑吊奢。
概念:任選兩個(gè)節(jié)點(diǎn)盖彭,連通這兩個(gè)節(jié)點(diǎn)的最少邊數(shù),定義為這兩個(gè)節(jié)點(diǎn)的最短路徑長(zhǎng)度页滚。
當(dāng)然召边,這里所指的最短路徑,只用來(lái)表示不同國(guó)家間的抽象地理關(guān)系裹驰,和實(shí)際中的最短路徑含義并不一致隧熙。

# 計(jì)算魏國(guó)和齊國(guó)的最短路徑(如有多條路徑,只取其中之一)
path = g.get_shortest_paths('c', 'd')[0]
seq = g.vs.select(path)
print('燕韓之間的最短路徑: ', seq['label'])

輸出文字結(jié)果:

燕韓之間的最短路徑:  ['燕', '齊', '楚', '韓']

將最短路徑用紅色標(biāo)記:

# --------------------------路徑-----------------------------
path = seq['name']
# ---------------------給邊設(shè)定顏色---------------------------
# 默認(rèn)為黑色
edge_color = dict(zip(edges, ['black']*11))
# 最短路徑里的邊映射為紅色幻林。映射時(shí)需要考慮元組中對(duì)象順序贞盯,這里按字母從小到大排序
for i in np.arange(np.size(path)-1):
    if path[i] < path[i+1]:
        edge_color[(path[i], path[i + 1])] = 'red'
    else:
        edge_color[(path[i + 1], path[i])] = 'red'
visual_style['edge_color'] = [edge_color[edge] for edge in edges]
# ------------------------畫圖------------------------------
m = igraph.plot(g, **visual_style)
燕韓最短路徑標(biāo)識(shí)

四.小結(jié)
理解網(wǎng)絡(luò)圖的角度很多,往往是對(duì)圖網(wǎng)絡(luò)進(jìn)行某種程度的抽象統(tǒng)計(jì)或聚焦觀察沪饺。以上只是舉了一個(gè)通俗易懂的小例子躏敢,實(shí)現(xiàn)了網(wǎng)絡(luò)圖的創(chuàng)建和展示,并提供了幾種分析圖信息的方法整葡,可以作為初步理解網(wǎng)絡(luò)結(jié)構(gòu)的工具件余。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市遭居,隨后出現(xiàn)的幾起案子啼器,更是在濱河造成了極大的恐慌,老刑警劉巖魏滚,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镀首,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡鼠次,警方通過(guò)查閱死者的電腦和手機(jī)更哄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)腥寇,“玉大人成翩,你說(shuō)我怎么就攤上這事∩庖郏” “怎么了麻敌?”我有些...
    開(kāi)封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)掂摔。 經(jīng)常有香客問(wèn)我术羔,道長(zhǎng)赢赊,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任级历,我火速辦了婚禮释移,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寥殖。我一直安慰自己玩讳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布嚼贡。 她就那樣靜靜地躺著熏纯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粤策。 梳的紋絲不亂的頭發(fā)上樟澜,一...
    開(kāi)封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音叮盘,去河邊找鬼往扔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛熊户,可吹牛的內(nèi)容都是我干的萍膛。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼嚷堡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蝗罗!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蝌戒,我...
    開(kāi)封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤串塑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后北苟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體桩匪,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年友鼻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了傻昙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡彩扔,死狀恐怖妆档,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情虫碉,我是刑警寧澤贾惦,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜做裙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洋措。 院中可真熱鬧,春花似錦杰刽、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至雁乡,卻和暖如春第喳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背踱稍。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工曲饱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人珠月。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓扩淀,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親啤挎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子驻谆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • feisky云計(jì)算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,815評(píng)論 0 5
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    小邁克閱讀 2,961評(píng)論 1 3
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,441評(píng)論 6 428
  • 英文原版:https://github.com/vinta/awesome-python中文版:https://g...
    會(huì)灰的大飛狼閱讀 3,600評(píng)論 1 56
  • 其實(shí)庆聘,這本書的封面設(shè)計(jì)給我的感覺(jué)就很不好胜臊。流線型的金屬外殼,用鉚釘連接伙判,一塊接一塊象对,白色細(xì)斜體的書名“孤獨(dú)深處”。...
    單海閱讀 939評(píng)論 0 1