Визуализация социальной сети из узлов и ребер массивов
Я хочу визуализировать социальные сети, используя какой-то инструмент (предпочтительно какой-то инструмент в 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')