Создание графика (сети) из фрейма данных pandas - PullRequest
2 голосов
/ 04 апреля 2019

Я пытаюсь построить график отношений (сеть) из нескольких столбцов данных.

Например, мои данные выглядят так:

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)

Но я немного запутался в этом подходе, потому что, если я прав, то могу использовать это горячее кодирование в качестве матрицы смежности?

Буду очень признателен, если кто-нибудь даст мне несколько советов о том, как эффективно построить сеть из этих точек данных, матрицы смежности и назначить отношения ребер на ребрах.

...