如何解决AttributeError:“设置”对象没有与NetworkX一起使用的属性“ number_of_nodes”
我是NetworkX的新手,使用NetworkX 2.5,并且不赞成使用代码。该代码是从here中提取的。我尝试修复一些不推荐使用的功能,但无法使代码正常工作。我也不明白connected_components函数是如何工作的。
panama_nodes = panama.nodes()
relabel = {}
for f,cc,name in NODES:
with open(f,encoding='utf8') as infile:
kind = f.split(".")[0]
data = csv.DictReader(infile)
names_countries = {node["node_id"] :
(node[name].strip().upper(),node[cc])
for node in data
if node["node_id"] in panama_nodes}
names = {nid: values[0] for nid,values in names_countries.items()}
countries = {nid: values[1] for nid,values in names_countries.items()}
kinds = {nid: kind for nid,_ in names_countries.items()}
nx.set_node_attributes(panama,countries,"countries")
nx.set_node_attributes(panama,kinds,"kind")
relabel.update(names)
nx.relabel_nodes(panama,relabel,copy=False)
if "ISSUES OF:" in panama:
panama.remove_node("ISSUES OF:")
if "" in panama:
panama.remove_node("")
print(nx.number_of_nodes(panama),nx.number_of_edges(panama))
components = [p.nodes() for p in nx.connected_components(panama)
if nx.number_of_nodes(p) >= 20
or nx.number_of_edges(p) >= 20]
panama0 = panama.subgraph(itertools.chain.from_iterable(components))
with open("panama-beneficiary.pickle","wb") as outfile:
pickle.dump(panama0,outfile)
这些代码行返回AttributeError:
components = [p.nodes() for p in nx.connected_components(panama)
if nx.number_of_nodes(p) >= 20
or nx.number_of_edges(p) >= 20]
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-6-108e98bba596> in <module>
----> 1 components = [p.nodes() for p in nx.connected_components(panama)
2 if nx.number_of_nodes(p) >= 20
3 or nx.number_of_edges(p) >= 20]
4
5 panama0 = panama.subgraph(itertools.chain.from_iterable(components))
<ipython-input-6-108e98bba596> in <listcomp>(.0)
1 components = [p.nodes() for p in nx.connected_components(panama)
----> 2 if nx.number_of_nodes(p) >= 20
3 or nx.number_of_edges(p) >= 20]
4
5 panama0 = panama.subgraph(itertools.chain.from_iterable(components))
~\AppData\Local\Programs\Python\Python37\lib\site-packages\networkx\classes\function.py in number_of_nodes(G)
83 def number_of_nodes(G):
84 """Returns the number of nodes in the graph."""
---> 85 return G.number_of_nodes()
86
87
AttributeError: 'set' object has no attribute 'number_of_nodes'
感谢您的帮助!
解决方法
connected_components
仅检索NetworkX
2.5中的节点集。如果我在旧版本中没有记错,它会返回子图。要调整代码,您需要执行以下操作:
components = [panama.subgraph(p).copy() for p in nx.connected_components(panama)]
# probably you want a list/set instead of a NodeView
components = [list(p.nodes()) for p in components
if p.number_of_nodes(p) >= 20
or p.number_of_edges(p) >= 20]
或直接
components = [p for p in nx.connected_components(panama)
if len(p) >= 20
or panama.subgraph(p).number_of_edges() >= 20]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。