从熊猫数据框创建图形(网络)

时间:2019-04-04 15:28:07

标签: python pandas graph networkx adjacency-matrix

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

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

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')

enter image description here

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

nx.adj_matrix(G)

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

如果有人能给我一些有关如何从这些数据点,邻接矩阵以及在边上分配边关系的方法来有效构建网络的建议,我将不胜感激。

0 个答案:

没有答案