Сгенерируйте график с атрибутами узлов и ребер из DataFrame

У меня есть кадр данных pandas, который я хочу преобразовать в сеть, с такой структурой:

[NodeID, TargetID, NodeAttr1, NodeAttr2]

Но загвоздка в том, что у меня есть несколько строк, в которых TargetID может быть None, так как есть узлы, которые не подключены к сети. Есть ли простой способ создать сетевую структуру и назначить свои атрибуты?

Я пытался:

G = nx.from_pandas_edgelist(df)

Но этот метод дает мне возможность добавлять только атрибуты ребер, а не узлы. Также он создаст ребра из моих узлов, которые не соединены с пустотой. Так что не то, что я хочу.

import pandas as pd
import networkx as nx

d = {'NodeID': [1, 2], 'TargetID': [2, None], 'NodeAttr1': ['aaaa', 'bbbbb'], 'NodeAttr2': [3, 4]}
df = pd.DataFrame(data=d)

node_df = df[df['Node_ID']]
edge_df = df[df.TargetID.notnull()]

G = nx.from_pandas_edgelist(edge_df, 'NodeID', 'TargetID')
G.add_nodes_from(node_df['NodeID'])

Этот код создаст сеть i простым способом, но у меня все еще есть проблема, заключающаяся в том, что у меня возникают проблемы с назначением атрибутов моим узлам.

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


person Sascha Stenger    schedule 06.07.2019    source источник
comment
я не знаю, эффективно ли это с точки зрения ресурсов, но я думаю, что если вы используете функцию pandas.DataFrame.to_dict с правильными аргументами (я думаю, вы хотите использовать orient="index") для перехода в add_nodes_from, вы, вероятно, сможете приблизиться. вам может понадобиться создать два отдельных графика и скомпоновать их, чтобы объединить ребра в узлы с атрибутами.   -  person Corley Brigman    schedule 07.07.2019


Ответы (1)


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

Пример со страницы функции NetworkX:

G = nx.path_graph(3)
attrs = {0: {'attr1': 20, 'attr2': 'nothing'}, 1: {'attr2': 3}}
nx.set_node_attributes(G, attrs)
person vesper    schedule 14.05.2020