Направленные сети и вес на краях с networkx - PullRequest
1 голос
/ 21 мая 2019

У меня есть следующие даты панды:

df = pd.DataFrame({
    'id_emp':[13524791000109, 12053850000137, 4707821000113],
    'name_emp': [
        'JL Consultores',
        'GRAAL OURINHOS',
        'SOJA COMERCIO DE DERIVADOS DE PETROLEO LTDA'
    ],
    'name_dep': [
        'DIONILSO MATEUS MARCON',
        'JOSE AUGUSTO ROSA',
        'LUCIO ANTONIO MOSQUINI'
    ],
    'donnated_value': [ 750.00, 5000.00, 27350.00],
    'donnated_amount': [1,1,1],
    'reimbursed_value':[36000.00,410.55, 241.22],
    'amount_reimbursed': [1,2,1],
    'roi':[4800.00, 8.21,0.88]
})

Мне нужно создать ориентированную сеть, где df ['name_dep'] и df ['id_emp] являются узлами. Затем каждая строка информационного кадра содержит два узла, связанных ребром с весом. Вес ребер согласуется с колонкой roi: для значений roi от 0 до 100 вес равен 1; от 100 до 1000, вес равен 2; До 1000, вес равен 3. Как показано ниже, я могу построить сеть для определенного name_dep:

G = nx.Graph()
deputado = 'DIONILSO MATEUS MARCON'
lista_subset_graph = list(df[df["name_dep"] == deputado]["id_emp"]) + 
[deputado]
H = G.subgraph(lista_subset_graph)
nx.draw(H, style = "solid", with_labels = True)
plt.savefig("teste.png")  
plt.show() 

Теперь необходимо построить сеть как все узлы и с весом по краям. Я ценю любую помощь.

1 Ответ

0 голосов
/ 22 мая 2019
# Create graph
G = nx.Graph()
# Add id_emp nodes
G.add_nodes_from(df['id_emp'])
# Set 'name_emp' attribute for 'name_emp' column values
for node in G.nodes:
    G.nodes[node]['name_emp'] = df.loc[df['id_emp'] == node]['name_emp'].values[0]
# Add name_dep nodes
G.add_nodes_from(df['name_dep'])
# Create the new column with transformed 'roi' values
df['roi_new'] = df['roi'].apply(
    lambda x: 1 if x < 100 else 2 if 100 <= x < 1000 else 3
)
# Add weighted edges
G.add_weighted_edges_from(df[['id_emp', 'name_dep', 'roi_new']].values)

P.S. Похоже, вы должны поменять местами name_dep и name_emp, значения в name_emp больше подходят для name_dep.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...