Я пытаюсь построить график отношений (сеть) из нескольких столбцов данных.
Например, мои данные выглядят так:
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)
Но я немного запутался в этом подходе, потому что, если я прав, то могу использовать это горячее кодирование в качестве матрицы смежности?
Буду очень признателен, если кто-нибудь даст мне несколько советов о том, как эффективно построить сеть из этих точек данных, матрицы смежности и назначить отношения ребер на ребрах.