社会网络科学导论 / Introduction to Social Network Science
---
<!-- 纸书页码:15 --> <!-- 电子版侧边栏:💡 小知识:1967年斯坦利·米尔格拉姆的“六度分隔”实验发现,任意两个美国人平均只需5个中间人就能建立联系,这就是社交网络“小世界特性”的最早证明 --> <!-- 标签:#节点 #边 #图论 #邻接矩阵 #网络指标 #青少年双语 -->
在上一节我们定义了社会网络的核心构成要素,接下来我们将深入讲解这些要素的量化表示方法、网络的分类逻辑,以及衡量网络结构特征的核心指标。所有概念都会搭配你日常接触的社交场景展开,避免抽象的理论堆砌。
---
1.3 节点的多维度分类与边的属性
1.3.1 节点的类型:不止有“人”
我们在前文提到节点是网络的基础单元,但在真实的青少年社交场景中,节点的类型远不止“个体用户”这么简单。根据节点的本质属性,我们可以将其分为5大类,每一类都对应你熟悉的场景:
| 节点类型 Node Type | 定义 Definition | 青少年场景示例 Teen Scene Example | |-------------------|----------------|-----------------------------------| | 自然人节点 Natural Person Node | 现实中的个体,具有独立的社会属性 | 你的同学、老师、游戏队友、追星的同伴 | | 账号节点 Account Node | 网络平台上的注册账号,代表账号所有者 | 你的微信/抖音/B站账号、你关注的博主账号、游戏公会的官方账号 | | 内容节点 Content Node | 用户生产的各类信息内容 | 你发的朋友圈、抖音视频、B站投稿、班级群里的通知文件 | | 事件节点 Event Node | 具有时效性的社交活动或公共事件 | 学校运动会、班级春游、某明星的线下见面会、游戏版本更新 | | 群组节点 Group Node | 有明确边界或共同目标的集合 | 你的班级、游戏公会、追星粉丝群、学习打卡群 |
> 💡 电子版互动提示:你可以暂停阅读,在纸上列出你最近一周接触过的5类节点各3个例子,检验自己是否理解了节点的多样性。
举个具体的例子:你所在的高一年级2班,就同时包含5类节点:30个自然人节点(同学+班主任)、1个班级群账号节点、每周更新的班级公众号内容节点、即将到来的秋季运动会事件节点、以及整个班级这个群组节点。这些节点并不是孤立的,它们之间通过不同类型的边连接起来。
---
1.3.2 边的属性:连接的本质
边是节点之间的关联关系,除了前文提到的方向性,还有3个核心属性,直接决定了网络的特性:
(1)边的方向性 Directionality
边可以分为无向边和有向边两类:
- 无向边(Undirected Edge):关系是双向的,没有方向限制。比如你和好朋友的关系是双向的,你把他当朋友,他也会把你当朋友,这种关系对应的就是无向边。
- 有向边(Directed Edge):关系是单向的,有明确的指向。比如你在微博上关注了一个博主,博主不一定关注你,这种“关注”关系对应的就是有向边,箭头从你指向博主。
(2)边的权重 Weight
边的权重代表连接的强度,通常用数值量化。比如你和死党每周聊天10小时,边的权重可以设为10;你和隔壁班同学每周只在走廊碰到点头1次,边的权重可以设为1。权重越高,代表两个节点之间的互动越频繁、关系越紧密。
(3)边的类型 Edge Type
边的类型对应现实中的具体关系,常见的青少年场景边类型包括:
- 关系边:好友、师生、队友、互关
- 互动边:点赞、评论、转发、@、私信、组队
- 关联边:共同加入同一个群、共同参加同一个活动、共同关注同一个博主
---
1.4 图论基础:网络的数学表示方法
社会网络分析的数学基础是图论(Graph Theory),我们可以用“图(Graph)”来抽象表示任何社会网络:节点对应图里的“顶点(Vertex)”,边对应图里的“边(Edge)”。
1.4.1 邻接矩阵:网络的“数字地图”
邻接矩阵(Adjacency Matrix)是表示网络结构最直观的数学方式,它是一个$n \times n$的方阵($n$是网络的节点总数),矩阵中的元素$A_{ij}$表示节点$i$和节点$j$之间的连接关系:
- 如果是无向网络,$A_{ij}=1$表示节点$i$和节点$j$有边连接,$A_{ij}=0$表示没有连接。因为无向边是双向的,所以邻接矩阵是**对称矩阵**,即$A_{ij}=A_{ji}$。
- 如果是有向网络,$A_{ij}=1$表示存在从节点$i$指向节点$j$的有向边,此时矩阵不一定对称。
- 如果边有权重,$A_{ij}$可以直接存储权重数值,比如$A_{ij}=5$表示两个节点之间的互动强度是5。
我们以6人班级好友网络为例,节点编号为:1=小明,2=小红,3=小刚,4=小丽,5=小强,6=班长,他们的好友关系对应的邻接矩阵如下:
$$ A = \begin{bmatrix} 0 & 1 & 1 & 0 & 0 & 0 \\ 1 & 0 & 1 & 1 & 0 & 0 \\ 1 & 1 & 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 & 0 & 1 \\ 0 & 0 & 0 & 1 & 1 & 0 \\ \end{bmatrix} $$
你可以对照矩阵验证:第1行第2列的元素是1,对应小明和小红是好友;第1行第4列的元素是0,对应小明和小丽没有直接的好友关系,完全符合我们之前的设定。
邻接矩阵的优势是计算高效,适合做矩阵运算(比如计算网络的全局特征),但缺点是存储稀疏网络(大部分节点之间没有连接的网络)时浪费空间:比如一个有1000个节点的网络,如果平均每个节点只有10个连接,邻接矩阵会有100万个元素,但实际只有5000个有效连接,99.5%的空间都被浪费了。
---
1.4.2 邻接表:网络的“联系人列表”
邻接表(Adjacency List)是另一种常见的网络存储方式,它的逻辑和你的手机通讯录完全一致:每个节点对应一个列表,列表里存储所有和它直接连接的节点。还是以上面的6人班级网络为例,邻接表可以表示为:
| 节点 Node | 邻接节点列表 Adjacent Node List | |-----------|----------------------------------| | 小明 | 小红、小刚 | | 小红 | 小明、小刚、小丽 | | 小刚 | 小明、小红、小强 | | 小丽 | 小红、班长 | | 小强 | 小刚、班长 | | 班长 | 小丽、小强 |
邻接表的优势是存储稀疏网络时非常节省空间,适合快速查找某个节点的所有连接,劣势是不如邻接矩阵适合做全局计算。
---
1.4.3 代码实践:用Python生成你的班级网络图
如果你已经安装了Python环境,可以按照下面的代码,输入你班级的节点和边,快速生成可视化的网络图。代码使用了专门用于社会网络分析的`networkx`库,所有注释都配有英文翻译:
```python
导入所需库:networkx用于网络分析,matplotlib用于绘图
Import required libraries: networkx for network analysis, matplotlib for plotting
import networkx as nx import matplotlib.pyplot as plt
1. 创建无向图,代表班级好友网络(如果是关注关系就创建DiGraph()有向图)
1. Create an undirected graph to represent the class friend network (use DiGraph() for directed networks like following relationships)
G = nx.Graph()
2. 添加节点:可以输入你班级的10个以内的核心成员名字
2. Add nodes: you can input the names of 10 or fewer core members of your class
G.add_nodes_from(["小明", "小红", "小刚", "小丽", "小强", "班长", "你"])
3. 添加边:元组的第三个元素是边的权重(1-5,代表亲密程度/互动频率)
3. Add edges: the third element of the tuple is the edge weight (1-5, representing intimacy/interaction frequency)
edges = [ ("小明", "小红", 5), ("小明", "小刚", 4), ("小红", "小刚", 5), ("小红", "小丽", 3), ("小刚", "小强", 2), ("小丽", "班长", 4), ("小强", "班长", 3), ("你", "小红", 5), ("你", "小刚", 4), ("你", "班长", 3) ] G.add_weighted_edges_from(edges)
4. 计算核心指标
4. Calculate core metrics
度中心性:每个节点的连接数量
Degree centrality: number of connections for each node
degree = dict(G.degree())
中介中心性:每个节点作为“桥梁”的重要性
Betweenness centrality: how important each node is as a "bridge"
betweenness = nx.betweenness_centrality(G)
5. 输出结果
5. Output results
print("各节点的度(连接数) Degree of each node:") for node, deg in degree.items(): print(f"{node}: {deg}") print("\n各节点的中介中心性 Betweenness Centrality of each node:") for node, bc in betweenness.items(): print(f"{node}: {bc:.2f}")
6. 绘图
6. Plotting
pos = nx.spring_layout(G, seed=42) # 固定布局,保证每次画图位置一致
Fix layout to ensure consistent node positions each time
nx.draw(G, pos, with_labels=True, node_color="#87CEEB", node_size=2000, font_size=12, font_weight="bold")
标注边的权重
Label edge weights
edge_labels = nx.get_edge_attributes(G, 'weight') nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels) plt.title("班级好友网络可视化 Visualization of Class Friend Network") plt.show() ```
运行这段代码后,你会看到和你输入的班级关系完全对应的网络图,节点的大小和颜色可以自行调整,非常方便用来完成本章的实践任务。
---
1.5 社会网络的常见类型
根据边的方向性、节点类型的差异,我们可以把青少年日常接触的社会网络分为4类,每一类都有对应的应用场景:
1.5.1 无向网络 Undirected Network
定义:所有边都是无向的网络,节点之间的关系是双向对等的。 典型场景:微信好友关系、班级里的面对面好友关系、游戏里的双向好友关系。 特点:邻接矩阵是对称矩阵,不需要考虑方向,适合分析双向关系的网络。 我们可以用Mermaid语法绘制一个简单的无向班级好友网络示意图,你可以对照自己的班级关系理解:
```mermaid graph TD A[小明] --- B[小红] A --- C[小刚] B --- C B --- D[小丽] C --- E[小强] D --- F[班长] E --- F style A fill:#87CEEB,stroke:#333,stroke-width:2px style B fill:#87CEEB,stroke:#333,stroke-width:2px ```
---