我正在尝试从几个数据框列中建立一个关系图(网络)。
例如,我的数据点如下所示:
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)
但是我对这种方法有点困惑,因为如果我是对的话,我可以使用那种热编码作为邻接矩阵吗?
如果有人能给我一些有关如何从这些数据点,邻接矩阵以及在边上分配边关系的方法来有效构建网络的建议,我将不胜感激。