从节点和边缘数组可视化社交网络

Visualization of social network from nodes and edges arrays

我想使用某种工具(最好是 python 中的某种工具)可视化社交网络。目前,我的数据是数组形式的:一个包含节点信息的数组(我们将其命名为 Nodes)。该数组的每一行都指向一个节点,而该数组的每一列都指向一个特定的属性。 Nodes 的每一列中的值描述了属性值。此 Nodes 数组中的零值表示缺少属性值。

除了节点数组,我还有一个邻接矩阵(边)数组。我们称这个数组为 EdgesEdges 数组是一个方形数组,其大小与 Nodes 数组中的行数(节点)相同。这个数组 (Edges) 填充了 01 作为值。 Edges(i,j) 位置的值 0 意味着节点 ij 没有相互连接。而 (m,n) 位置的 1 值意味着节点 mn 相互连接。

这里是一个包含 10 个节点的数组 NodesEdges 的小示例:

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个属性。如何使用这些数组(NodesEdges)获得网络的可视化效果?

你应该调查一下 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')