Визуализация социальной сети из узлов и ребер массивов

Я хочу визуализировать социальные сети, используя какой-то инструмент (предпочтительно какой-то инструмент в Python). В настоящее время у меня есть данные в виде массивов: массив с информацией об узлах (давайте дадим ему имя Nodes). Каждая строка этого массива указывает на узел, а каждый столбец этого массива указывает на определенный атрибут. Значения в каждом столбце Nodes отображать значения атрибутов Значения ноль в этом Nodes массив является представителем отсутствующих значений атрибута.

Наряду с массивом узлов у меня есть массив для матрицы смежности (ребер). Давайте назовем этот массив Edges, Edges массив - это квадратный массив того же размера, что и количество строк (узлов) в Nodes массив. Этот массив (Edges) заполнен 0 а также 1 как значения. Значение 0 в (i,j) положение Edges будет означать, что узлы i а также j не связаны друг с другом. Принимая во внимание, что значение 1 в (m,n) положение будет означать, что узлы m а также n связаны друг с другом.

Вот небольшой иллюстративный пример массивов Nodes а также Edges с 10 узлами:

Nodes = np.array([[1,2,4],[1,3,1],[2,2,1],[1,1,2],
              [1,2,2],[2,1,4],[1,2,1],[2,0,1],
              [2,2,4],[1,0,4]])

Edges = np.random.randint(2, size=(10,10))

В приведенных выше данных у нас есть 10 узлов и 3 атрибута. Как я могу получить визуализацию сети с помощью этих массивов (Nodes а также Edges)

1 ответ

Решение

Вы должны посмотреть на networkx. Чтобы создать свой график непосредственно из матрицы смежности, вы можете использовать функцию from_numpy_array,

import networkx as nx

adj = np.random.randint(2, size=(10,10))
G = nx.from_numpy_array(adj)

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

Визуализация это также вариант:

nx.draw(G, with_labels=True, font_weight='bold')

Другие вопросы по тегам