社區(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)入。

以上是數(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é)合以上實(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