【问题标题】:How to get new edgelists after manipulating graphs操作图后如何获取新的边列表
【发布时间】:2022-01-14 18:26:55
【问题描述】:

有什么方法可以使用来自网络的数据创建数据框?

例如,如果我从边缘列表构建图形

G = nx.from_pandas_edgelist(df, 'Col1', 'Col2')

然后我稍微操作一下网络(例如,删除节点或计算所有三角形), 我画了它

G1 = nx.triangles(G)
nx.draw(G1, with_labels=True)

是否可以提取我正在绘制的新数据?怎么样?

【问题讨论】:

  • 有几种方法可以将信息提取为数据框,我不确定这些方法是否适用于您的(确切)问题:networkx.org/documentation/stable/reference/…
  • 感谢 adrianop01。我尝试使用df = nx.to_pandas_edgelist(G, nodelist=['Col1', 'Col2']),但它返回一个空数据框。我想知道如何包含节点列表。我在网络中有数千个节点。是否有可能获得此信息?
  • get node names,您可以使用G.nodes。您是在更新的图表中提取 所有节点 的边,还是只为图表中的 节点子集 提取边?您可以尝试删除nodelist=['Col1', 'Col2'],因为我确信没有节点被称为'Col1''Col2'
  • 删除节点列表后我没有任何错误。我正在寻找节点子集的边,即更新图中的那些。目前,没有节点列表字段,它返回更多的边(即所有节点的边,包括那些不存在于子图中的节点)
  • 子图是什么意思?您是指删除G 中的某个节点后更新的图形G1?请接受我的道歉,但您能否添加代码详细信息以显示您如何从 G 到达 G1,谢谢!

标签: python pandas networkx


【解决方案1】:

试试G.subgraph(list_of_node_indices).copy()。在nx.triangles 的情况下,它将返回一个以节点名称作为键的字典。您可以做的是提取具有零值的键(假设您要过滤包含至少一个三角形的所有节点)。

示例

G = nx.Graph()
G.add_edge(1,2)
G.add_edge(2,3)
G.add_edge(3,4)
G.add_edge(4,2)
G.add_edge(4,1)
G.add_edge(5,1)
G.add_edge(6,1)
G.add_edge(6,7)
G.add_edge(7,8)
G1 = G.subgraph([ i[0] for i in nx.triangles(G).items() if not i[1]]).copy()
nx.draw(G)

print(nx.triangles(G))

{1: 1, 2: 2, 3: 1, 4: 2, 5: 0, 6: 0, 7: 0, 8: 0}
#only node 6,7,8 is included
print(nx.to_pandas_edgelist(G1))

   source  target
0       6       7
1       7       8

【讨论】:

  • 为什么是(#node_indices)?是不是打错字了?
  • 哦,我的意思是节点索引列表,谢谢提醒
  • 我的意思是为什么# :)
  • 我删除了#以避免混淆,我只是说输入是节点索引列表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 2020-07-10
  • 2012-03-25
  • 1970-01-01
  • 2012-12-15
相关资源
最近更新 更多