Networkx中的图论
我现在开始使用这个接口,我对Python有一些经验,但不算太多。我正在计算一个小图的传递性和社区结构:
import networkx as nx
G = nx.read_edgelist(data, delimiter='-', nodetype=str)
nx.transitivity(G)
#find modularity
part = best_partition(G)
modularity(part, G)
我计算传递性没问题,不过在计算模块度的时候出现了以下错误。
NameError: name 'best_partition' is not defined
我只是按照networkx网站上提供的文档操作的,我是不是哪里做错了?
2 个回答
2
我刚遇到了同样的错误 NameError: name 'best_partition' is not defined
,是在使用这个示例代码的时候。
这个错误发生是因为我把我的Python文件命名为 networkx.py
,所以当我们运行这个程序时,
import networkx as nx
这个程序可能会导入我们自己定义的 networkx
,而不是库里的内容。在程序中,best_partition
没有被定义,所以就出现了这个错误。
文件名和库名相同是不合适的。也许你应该检查一下这个问题!
10
根据我的了解,best_partition
这个东西并不是 networkx 里自带的。看起来你想用的是 https://sites.google.com/site/findcommunities/,你可以从 https://bitbucket.org/taynaud/python-louvain/src 这个地方安装它。
安装好 community
之后,可以试试下面的代码:
import networkx as nx
import community
import matplotlib.pyplot as plt
G = nx.random_graphs.powerlaw_cluster_graph(300, 1, .4)
nx.transitivity(G)
#find modularity
part = community.best_partition(G)
mod = community.modularity(part,G)
#plot, color nodes using community structure
values = [part.get(node) for node in G.nodes()]
nx.draw_spring(G, cmap = plt.get_cmap('jet'), node_color = values, node_size=30, with_labels=False)
plt.show()
补充:我安装社区检测库的方法
ryan@palms ~/D/taynaud-python-louvain-147f09737714> pwd
/home/ryan/Downloads/taynaud-python-louvain-147f09737714
ryan@palms ~/D/taynaud-python-louvain-147f09737714> sudo python3 setup.py install