python 使用csv文件中的边创建图形并计算其节点之间的公共邻居

qxgroojn  于 2022-12-10  发布在  Python
关注(0)|答案(1)|浏览(118)

“我有两个文件:nodes.csv和edges.csv,其中包含节点和节点之间的边,如下所示nodes.csv(182个节点)

0
1
2
.
.
.

和由2列(300条边)表示的边
我想通过图形表示这些文件中的节点和边,并计算由边表示的每对节点之间的公共邻居
我尝试了代码

import networkx as nx
import pandas as pd
G=nx.Graph()

node= pd.read_csv("nodes.csv")
edges=pd.read_csv("edges.csv")
for row in node: 
    G.add_nodes_from(row)
for row in edges:
    if len(row) == 2 : # add an edge only if both values are provided
        G.add_edge(row[0],row[1])

print(G)   # this is give my Graph with 4 nodes and 1 edges 

def predict(u, v):
     cnbors = list(nx.common_neighbors(G, u, v))
     mult_val = G.degree(u) * G.degree(v)
     if mult_val == 0:
         return 0
     else:
         return len(cnbors)/ mult_val

for row in edges:
    predict(row[0], row[1]) # this is give me an error: u is not in the graph
soat7uwm

soat7uwm1#

首先,你可以使用read_edgelist阅读edges.csv文件来生成图形对象。可能会有一些节点不在edges.csv文件中,因此你可以稍后手动添加它们。图形已经准备好了,代码如下:

import networkx as nx
import pandas as pd

g = nx.read_edgelist("edges.csv", nodetype=int)
nodes = pd.read_csv("nodes.csv")
for node in nodes.values:
    g.add_node(node[0])

现在你可以简单地得到所有可能的节点对和它们的公共邻居,如下所示:

common_neighbors = [(n1, n2, list(nx.common_neighbors(g, n1, n2))) for n1 in g.nodes() for n2 in g.nodes() if n2 > n1]

结果是一个元组列表,每个元组有三项,包含第一个节点、第二个节点和公共邻居列表。

[(0, 1, [2, 4]),
 (0, 2, [1, 3]),
 (0, 3, [2, 4]),
 (0, 4, [1, 3]),
...

相关问题