community detection

社區(qū)發(fā)現(xiàn)算法與可視化

from community import community_louvain

因?yàn)閏ommunity 不能夠直接導(dǎo)入我想要的best_partition,在這里我找到了community庫(kù)里面的community_louvain能夠直接調(diào)用,效果是一樣的

import networkx as nx

import matplotlib.pyplot as plt

這里把繪圖和計(jì)算復(fù)雜網(wǎng)絡(luò)的庫(kù)導(dǎo)入

#better with karate_graph() as defined in networkx example.

#erdos renyi don't have true community structure

#G = nx.erdos_renyi_graph(30, 0.05)

#first compute the best partition

partition = community_louvain.best_partition(G)

#drawing

size = float(len(set(partition.values())))

pos = nx.spring_layout(G)

count = 0.

for com in set(partition.values()) :

count = count + 1.

list_nodes = [nodes for nodes in partition.keys()

if partition[nodes] == com]

nx.draw_networkx_nodes(G, pos, list_nodes, node_size = 20,

node_color = str(count / size))

nx.draw_networkx_edges(G,pos, alpha=0.5)

plt.show()

這里我們把方法就介紹完了。

我導(dǎo)入以下數(shù)據(jù),大概有17萬(wàn)組數(shù)據(jù),如圖所示34282組是節(jié)點(diǎn)數(shù)據(jù),后邊10多萬(wàn)的edges數(shù)據(jù),我們首先把它導(dǎo)入。

繪制大型演化圖的挑戰(zhàn)可以通過(guò)各種方式來(lái)解決。作為提交,歡迎任何基于比賽數(shù)據(jù)的可視化,包括動(dòng)畫(huà),靜態(tài)圖像,子圖和比賽圖的派生。除了可視化之外,我們還鼓勵(lì)參賽者提交補(bǔ)充材料,如圖形的背景相關(guān)性,案例研究,概念,算法,實(shí)驗(yàn),結(jié)構(gòu)結(jié)果等,以有意義的方式解決這類數(shù)據(jù)的可視化問(wèn)題。比賽數(shù)據(jù)提供基于互聯(lián)網(wǎng)電影數(shù)據(jù)庫(kù)的真實(shí)世界的數(shù)據(jù)集?。該圖是二部圖,其中每個(gè)節(jié)點(diǎn)對(duì)應(yīng)于演員或電影。電影和電影中的每個(gè)演員之間都有一個(gè)邊緣。而且,這些數(shù)據(jù)在節(jié)點(diǎn)上包含以下屬性:?指示節(jié)點(diǎn)是否對(duì)應(yīng)于電影的“電影”(類型布爾值)?指示電影名稱的“名稱”。actor(類型字符串)?年的電影(類型int);?屬性為0,如果節(jié)點(diǎn)是演員或年份是未知的?電影類型(字符串類型)

以上是數(shù)據(jù)的簡(jiǎn)要描述。我們要做的就是怎么去做community detection.

導(dǎo)入數(shù)據(jù)

nodeID=list()

nodeName =list()

nodeWeight =list()

nodeType =list()

edge1 =list()

edge2 =list()

with open('newmovies.txt') as n:

lines = n.readlines()[1:1000]

for line in lines:

nodeID.append(line.strip().split('\t')[0])

nodeName.append(line.strip().split('\t')[1])

nodeWeight.append(line.strip().split('\t')[2])

nodeType.append(line.strip().split('\t')[3])

with open('newmovies.txt') as e:

lines = e.readlines()[34285:36285]

for line in lines:

edge1.append(line.strip().split('\t')[0])

edge2.append(line.strip().split('\t')[1])

然后運(yùn)行這段代碼,意思是,用networkx里面的算法,用繪圖工具matplotlib展現(xiàn)出來(lái)。

import networkx as nx

G = nx.Graph()

G.add_nodes_from(nodeID,name=nodeName,weight=nodeWeight,ntype=nodeType)

for x in range(0,len(edge1)):

G.add_edge(edge1[x], edge2[x])

G.number_of_nodes()

partition = community_louvain.best_partition(G)

size =float(len(set(partition.values())))

pos = nx.spring_layout(G)

count =0.

for com in set(partition.values()) :

count = count +1.

list_nodes = [nodesfornodesinpartition.keys()

????????????????????????if partition[nodes] == com]

nx.draw_networkx_nodes(G, pos, list_nodes,node_size=20,

????????????????node_color=str(count / size))

nx.draw_networkx_edges(G,pos,alpha=0.5)

plt.show()

最終結(jié)果圖

結(jié)合以上實(shí)驗(yàn)進(jìn)行分析:

1 從圖表可以看出導(dǎo)演、演員、作家和電影的分布。相同的屬性或類型將出現(xiàn)在同一個(gè)社區(qū)中。

2 它包含10個(gè)主題:美國(guó)電影演員,美國(guó)電視演員,黑人和白人電影,戲劇電影,喜劇電影,英國(guó)電影,美國(guó)電影導(dǎo)演,獨(dú)立電影,美國(guó)電影劇本,美國(guó)舞臺(tái)演員。不同的類型也被分成不同的群體。

3 通過(guò)實(shí)驗(yàn)分析,中部地區(qū)的人物是作家和導(dǎo)演,和外面的代表電影和演員

4 彼此之間有重疊,如作家和導(dǎo)演可以創(chuàng)建多個(gè)作品和電影,它們是通過(guò)許多演員

5 從內(nèi)到外,該中心是作者導(dǎo)演,演員和電影。

完成了分析,perfect!

如有興趣,聯(lián)系我。。微信:cs757592433

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容