Расчет двудольного графа в сетиx - PullRequest
0 голосов
/ 03 мая 2018

Предположим следующий примерный крайний список:

source,target,weight
162600,117237,200
192084,50240,200
200854,125014,200
166729,37059,5
157279,77297,1
186788,35124,2
199103,112437,5
194523,125618,5
169139,103847,5
156565,85646,5
157159,85646,10
168455,115687,15
139567,108206,5
172702,120323,5
175029,120590,5
167596,85646,10
202163,83381,15
163786,109135,5
183035,124200,4
154266,124200,2
187899,124200,20
190849,124200,8
169657,118867,11
157848,101997,2
143224,87832,1
140758,101009,21
197618,101009,20
175454,50240,4
150071,112472,10
199517,121453,20

Как видите, некоторые элементы source имеют общий target. Поэтому я подумал, что имеет смысл рассчитать и визуализировать двудольный граф в сети X.

Документация показывает, как это делается с ручными значениями, но мне интересно, как это можно применить к краевому списку сверху (включая веса.

Я был бы очень признателен, если бы кто-нибудь смог привести пример, используя приведенные выше данные, хотя входные данные могут привести к разреженной сети.

1 Ответ

0 голосов
/ 04 мая 2018

Я бы посоветовал беспрепятственно запустить функцию add_weighted_edges_from () в ориентированном графе. Это только после помещения ваших входных данных в список кортежей, как и было запрошено. Посмотрите эту документацию для получения дополнительной информации

import networkx as nx
import matplotlib.pyplot as plt
%matplotlib inline

INPUT = [
    (162600,117237,200),
    (192084,50240,200),
    (200854,125014,200),
    (166729,37059,5),
    (157279,77297,1),
    (186788,35124,2),
    (199103,112437,5),
    (194523,125618,5),
    (169139,103847,5),
    (156565,85646,5),
    (157159,85646,10),
    (168455,115687,15),
    (139567,108206,5),
    (172702,120323,5),
    (175029,120590,5),
    (167596,85646,10),
    (202163,83381,15),
    (163786,109135,5),
    (183035,124200,4),
    (154266,124200,2),
    (187899,124200,20),
    (190849,124200,8),
    (169657,118867,11),
    (157848,101997,2),
    (143224,87832,1),
    (140758,101009,21),
    (197618,101009,20),
    (175454,50240,4),
    (150071,112472,10),
    (199517,121453,20)
]

G=nx.DiGraph()
G.add_weighted_edges_from(INPUT)

elarge = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] > 22]
esmall = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] <= 21]

pos = nx.spring_layout(G, k=1)

plt.figure(figsize=(15,10))

# nodes
nx.draw_networkx_nodes(G, pos, node_size=700)

# edges
nx.draw_networkx_edges(G, pos, edgelist=elarge,
                       width=6)
nx.draw_networkx_edges(G, pos, edgelist=esmall,
                       width=1, alpha=0.5, edge_color='b', style='dashed')

# labels
nx.draw_networkx_labels(G, pos, font_size=12, font_family='sans-serif')

plt.axis('off')
plt.show()

Это должен быть вывод

enter image description here

...