首页 > 解决方案 > 从 pandas 数据框创建图形(网络)

问题描述

我正在尝试从几个数据框列构建关系图(网络)。

例如,我的数据点如下所示:

graph_strucure = {
                   'node_a' : ['a','b','c','a','b','c'] , 
                   'node_b' : ['r','g','m','g','r','r'],
                   'edges': [['aa','bb','cc','dd'],['cc','rr'],['ae','rt'],['ew'],['rtr','tyu'],['df','yu']]
                  }

我想使用 node_a 和 node_b 构建一个网络,其中边是它们之间的关系。

到目前为止我所尝试的:

计算唯一值:

unique_nodes = list(set(graph_strucure['node_a'] + graph_strucure['node_b']))

转换成 one_hot :

one_hot_encoding = [np.zeros(len(unique_nodes)) for i in range(len(unique_nodes))]

tuples = list(zip(graph_strucure['node_a'] ,graph_strucure['node_b']))

for k in range(len(unique_nodes)):
    node = unique_nodes[k]
    for m in tuples:
        if node == m[0]:
            one_hot_encoding[k][unique_nodes.index(m[1])] = 1

        elif node == m[1]:
            one_hot_encoding[k][unique_nodes.index(m[0])] = 1

one_hot_encoding = np.matrix(one_hot_encoding)

使用networkx构建网络:

G = from_numpy_matrix(one_hot_encoding, create_using=DiGraph())
pos = spring_layout(G)

draw_networkx_nodes(G, pos, node_color='lightblue')
draw_networkx_edges(G,pos,width=1.0,alpha=0.5)

labels = dict(zip(G.nodes(), G.nodes()))
draw_networkx_labels(G, pos, labels, font_size=12)
plt.axis('off')

在此处输入图像描述

现在从这里开始,如果我想要邻接矩阵,我可以使用:

nx.adj_matrix(G)

但是我对这种方法有点困惑,因为如果我是对的,那么我可以使用那个热编码作为邻接矩阵吗?

如果有人给我一些关于如何从这些数据点、邻接矩阵有效地构建网络并在边缘上分配边缘关系的建议,我将不胜感激。

标签: pythonpandasgraphnetworkxadjacency-matrix

解决方案


推荐阅读