在Python使用 Networkx 的自我图
先决条件 -图形, Networkx 基础知识
自我网络是一种特殊类型的网络,由一个中心节点和与其直接相连的所有其他节点组成。中心节点被称为ego ,而其他与其直接相连的周围节点被称为alters 。自我网络主要用于分析社会联系、链接和关系。下图所示的网络是 Ego Network 的示意图。中心节点 (ego) 显示为被相邻节点 (alters) 包围的圆形。
自我网络广泛用于社交网络分析。关于自我网络的基本假设是强关系是同质的。同质性是指以某种方式与社会联系在一起的个人倾向于表现出某些特征或相似之处。简单来说,志同道合的人以某种方式紧密相连。自我网络帮助我们识别这些隐藏的联系。
Ego Networks 提供以下功能:
- 有效地传播信息。
- 从链接中产生意义,例如 – 社交链接、关系。
- 获取资源,高效的连接路径生成。
- 社区检测,识别群体的形成。
- 分析个人之间的社会支持关系。
在任何图形数据库上实现 ego 网络的最简单方法是使用 Networkx 库。它提供了许多用于网络分析和可视化的预定义功能。
Networkx: Networkx 是一个Python包,用于创建、分析和研究复杂网络的性质。它是用于网络分析的最流行的Python库之一。
安装包:
pip install networkx
Networkx 库提供了ego_graph()方法来从任何图生成自我网络。该方法采用两个强制性参数和四个额外的可选参数。
Syntax: ego_graph(G, n, radius=1, center=True, undirected=False, distance=None)
Parameters:
- G (graph) – A NetworkX Graph (The parent network in whose ego network is to be created)
- N (node) – A single node (Ego/Central node of the ego network)
- Radius (number, optional) – Include all neighbors of distance <= radius from n.
- Center (bool, optional) – If False, do not include center node (ego) in graph
- Undirected (bool, optional) – If True use both in- and out-neighbors of directed graphs.
- Distance (key, optional) – Use specified edge data key as distance. For example, setting distance=’weight’ will use the edge weight to measure the distance from the node n.
创建示例网络
我们正在采用一个样本网络,其中很少有相互连接的节点。在这个例子中,节点是 – (A, B, C, D, E, F, G, H),在这些节点中,一个节点被当作中心节点(ego),在我们的例子中,我们把 A 当作自我。以下代码创建并显示了我们的示例网络。
例子:
Python3
# import networkx for graph generation
import networkx as nx
# import matplotlib library
import matplotlib.pyplot as plt
# generation of a sample graph
G = nx.Graph()
G.add_edges_from([('A', 'B'), ('A', 'C'),
('B', 'C'), ('E', 'F'),
('D', 'E'), ('A', 'D'),
('D', 'G'), ('C', 'F'),
('D', 'F'), ('E', 'H')])
# Defining ego as large and red
# while alters are in lavender
# Let 'A' be the ego
ego = 'A'
pos = nx.spring_layout(G)
nx.draw(G, pos, node_color = "lavender",
node_size = 800, with_labels = True)
options = {"node_size": 1200, "node_color": "r"}
nx.draw_networkx_nodes(G, pos, nodelist=[ego], **options)
plt.show()
Python3
# create ego network
hub_ego = nx.ego_graph(G, ego)
# showing the ego network
nx.draw(hub_ego, pos, node_color="lavender",
node_size = 800, with_labels = True)
nx.draw_networkx_nodes(
hub_ego, pos, nodelist = [ego], **options)
plt.show()
输出:
节点 A 被定义为 ego,因此显示为红色。
创建自我网络
下面的代码创建并显示了将节点 A 视为 ego 的 ego 网络。
蟒蛇3
# create ego network
hub_ego = nx.ego_graph(G, ego)
# showing the ego network
nx.draw(hub_ego, pos, node_color="lavender",
node_size = 800, with_labels = True)
nx.draw_networkx_nodes(
hub_ego, pos, nodelist = [ego], **options)
plt.show()
输出: