我正在使用网络作为西班牙戏剧剧中人物之间互动的图表。这里是一个可视化:
我将节点(字符)的几个属性作为数据帧传递给网络,以便我可以使用此值(例如,节点的颜色由字符的性别设置)。我想用NetworkX计算每个节点的不同值(度数,中心性,中介性......);然后,我想输出DataFrame作为节点的属性以及使用NetworkX计算的值。我知道我可以要求节点的特定属性,例如:
nx.get_node_attributes(graph,'degree')
我可以使用它构建一个DataFrame,但我想知道是否没有更优雅的解决方案。我也试过了:
nx.to_dict_of_dicts(graph)
但是这只输出边缘而不是有关节点的信息。
那么,有什么帮助吗?谢谢!
答案 0 :(得分:2)
如果我正确理解您的问题,您希望拥有一个具有节点和每个节点的某些属性的DataFrame。
G = nx.Graph()
G.add_node(1, {'x': 11, 'y': 111})
G.add_node(2, {'x': 22, 'y': 222})
您可以按照以下list comprehension
获取特定节点属性:
pd.DataFrame([[i[0], i[1]['x'], i[1]['y']] for i in G.nodes(data=True)]
, columns=['node_name', 'x', 'y']).set_index('node_name')
# x y
#node_name
#1 11 111
#2 22 222
或者如果有许多属性并且您需要所有属性,这可能是更好的解决方案:
pd.DataFrame([i[1] for i in G.nodes(data=True)], index=[i[0] for i in G.nodes(data=True)])