Networkx: сети с множеством узлов - PullRequest
0 голосов
/ 01 июня 2019

У меня есть фрейм данных с примерно 8 800 строками, из которого я хочу создать сеть с помощью networkx.Базовая структура фрейма данных для генерации сети показана ниже:

df = pd.DataFrame({'id_emp':[13524791000109, 12053850000137, 4707821000113],
               'name_dep': ['DIONILSO MATEUS MARCON', 'JOSE AUGUSTO ROSA', 'LUCIO ANTONIO MOSQUINI'],
               'roi':[12, 15, 18]
              })

В сети, которую я хочу представить, есть два типа узлов: «id_emp» и «name_dep», и для каждого есть ребрапара этих значений, которые находятся на одной линии.Следовательно, сеть будет иметь 17 600 узлов.Края будут иметь веса, основанные на колонке Рой.Ниже приведен код для создания сети:

import networkx as nx
G = nx.Graph()
G.add_nodes_from(df['id_emp'], type_='id_emp')
for node in G.nodes:
    G.nodes[node]['fornecedor'] = df[df['id_emp'] == node]['fornecedor'].values[0]

G.add_nodes_from(df['name_dep'], type_='name_dep')

G.add_weighted_edges_from(df[['id_emp', 'name_dep', 'roi']].values)

colors = ['#0000FF' if G.nodes[n]['type_'] == 'id_emp' else '#FF0000' for n in G.nodes]

edge_width = [a[2]['weight'] for a in G.edges(data=True)]

plt.figure(figsize=(7.5,7.5))

nx.draw(G, pos = nx.kamada_kawai_layout(G), node_size = 100, 
node_color = colors, with_labels=False, edge_cmap=plt.cm.Blues)
nx.draw_networkx_edges(G,pos=nx.kamada_kawai_layout(G),width=edge_width)
plt.axis('off')
plt.show()

Сеть с исходным фреймом данных выглядит следующим образом:

enter image description here

Myвопросы заключаются в следующем: уместно ли строить сети с таким количеством узлов, используя networkx?Если да, как я могу улучшить вид сети?Если нет, что я должен сделать, чтобы улучшить вид сети?

1 Ответ

0 голосов
/ 05 июня 2019

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

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

попробуйте этот код для доступных макетов:

[x for x in nx.__dir__() if x.endswith('_layout')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...