社区发现算法与可视化
from community import community_louvain
因为community 不能够直接导入我想要的best_partition,在这里我找到了community库里面的community_louvain能够直接调用,效果是一样的
import networkx as nx
import matplotlib.pyplot as plt
这里把绘图和计算复杂网络的库导入
#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()
这里我们把方法就介绍完了。
我导入以下数据,大概有17万组数据,如图所示34282组是节点数据,后边10多万的edges数据,我们首先把它导入。
以上是数据的简要描述。我们要做的就是怎么去做community detection.
导入数据
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])
然后运行这段代码,意思是,用networkx里面的算法,用绘图工具matplotlib展现出来。
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()
结合以上实验进行分析:
1 从图表可以看出导演、演员、作家和电影的分布。相同的属性或类型将出现在同一个社区中。
2 它包含10个主题:美国电影演员,美国电视演员,黑人和白人电影,戏剧电影,喜剧电影,英国电影,美国电影导演,独立电影,美国电影剧本,美国舞台演员。不同的类型也被分成不同的群体。
3 通过实验分析,中部地区的人物是作家和导演,和外面的代表电影和演员
4 彼此之间有重叠,如作家和导演可以创建多个作品和电影,它们是通过许多演员
5 从内到外,该中心是作者导演,演员和电影。
完成了分析,perfect!
如有兴趣,联系我。。微信:cs757592433