前言
随着互联网、大数据技术的不断发展,人与人、组织与组织之间的连接愈发紧密,各类关系网络成为研究社会行为、组织运转、信息传播的重要载体。社会网络分析(Social Network Analysis,SNA) 作为一门融合图论、统计学、社会学、计算机科学的交叉研究方法,凭借可视化与量化分析能力,被广泛应用于社群研究、企业组织管理、舆情分析、行为研判等多个领域。
本文将从社会网络分析的基础概念、核心要素、应用场景、优劣特点入手,详解主流分析维度与量化指标,并结合 Python 的 NetworkX 库完成全流程代码实现,同时结合团队管理实战案例,帮助读者全面掌握社会网络分析的理论与落地方法。

一、社会网络分析基础认知
1.1 发展与核心思想
社会网络分析的研究雏形诞生于 20 世纪 30 年代的社会学领域,在 70 年代迎来快速发展阶段。进入数字时代后,计算机算力与大数据技术进一步推动该方法走向普及,如今结合机器学习技术,更是实现了海量网络数据的高效处理与模型迭代。
该方法的核心逻辑十分直观:将网络中的独立实体(人、部门、企业、账号等)定义为节点,实体之间产生的合作、交流、关注、交易等关联行为定义为连线(边),以此搭建完整的网络拓扑结构。通过剖析拓扑结构的特征、节点位置、关系强弱,挖掘网络内部隐藏的规律、关键角色与潜在问题。
1.2 网络核心构成要素
想要开展社会网络分析,首先要理解网络的基础组成单元与专业概念,这也是后续指标计算与解读的前提:
- 节点(Node):网络的最小单元,可指代个人、团队、企业、平台等各类实体,是分析的主体。
- 边(Edge / 连接):代表节点之间的关系,分为单向关系(如关注、指令下达)和双向关系(如好友、合作交流)。
- 权重(Weight):用于标注边的强弱,数值越大,代表两个节点的联系越紧密、互动越频繁。
- 网络密度:衡量整个网络的连通紧密程度,为实际存在的连接数量与理论最大连接数量的比值。密度越高,网络内部互动越活跃。
- 中心性:判断单个节点在网络中的地位与影响力,是 SNA 中最核心的指标之一。
- 社团(凝聚子群):网络内部联系高度密集的子群体,群体内部互动多,和外部群体连接偏少。
- 结构洞:连接多个不同社团的特殊节点,相当于网络中的 “信息桥梁”,掌控结构洞的节点拥有信息传播与资源调配的天然优势。
- 社会资本:节点依托自身社交 / 合作网络所获取的信息、信任、资源等无形价值,也是网络为实体带来的核心增益。
1.3 主流应用领域
社会网络分析的适用场景覆盖多个行业,从民生研究到商业管理均有落地:
- 社交网络领域:分析平台用户互动行为、追踪信息传播路径、挖掘兴趣社群、预测舆情走向,支撑精准营销与内容运营。
- 组织管理领域:剖析企业 / 团队内部协作模式,识别沟通壁垒、核心骨干与信息孤岛,优化组织架构与分工协作。
- 影响力挖掘领域:定位网络中的意见领袖、核心决策者,为舆论引导、品牌推广、人才选拔提供依据。
- 犯罪网络分析:梳理团伙成员关系、追踪活动链路,辅助案件侦查与风险预判。
- 健康领域:研究健康行为、疾病信息在人群中的传播规律,助力健康科普与疾病防控。
结合本次团队实战案例来看,通过 SNA 分析可得出明确结论:成员王静是团队核心信息枢纽,而 Team C 团队出现沟通断层、关系疏离的问题,据此可制定优化方案,增加王静对该团队的支持,并拓展外部合作接入点,化解团队割裂风险。
1.4 社会网络分析的优势与局限
任何分析方法都有适用边界,客观看待 SNA 的优缺点,才能在实际场景中合理运用:
(1)核心优势
- 深挖隐性结构:突破表面关系,发现网络中隐藏的层级、小团体与沟通链路,洞察深层问题。
- 具备预测与干预能力:依托网络演化规律,预判信息传播、群体行为趋势,可针对性制定干预策略。
- 跨学科适配性强:不受行业限制,可结合社会学、管理学、医学、刑侦等多领域开展研究。
- 数据驱动决策:所有结论基于量化数据得出,规避主观判断,让决策更科学。
- 挖掘潜在价值:识别潜力节点、优质合作对象与闲置资源,为资源调配、商务合作提供参考。
(2)现存短板
- 数据处理门槛高:分析需要大量关系数据,数据采集、清洗、整理流程复杂,耗时耗力。
- 隐私与伦理风险:分析过程会接触个人、组织的敏感信息,必须严格遵守隐私保护规范。
- 存在分析局限性:难以捕捉临时互动、隐性私下关系等非正式连接,需搭配其他分析方法补充验证。
- 网络动态难追踪:人际关系、合作关系会持续变化,静态分析模型需要不断更新迭代。
- 易受样本影响:若采样数据不完整、不具备代表性,会直接导致分析结果失真。
二、社会网络分析核心维度与量化指标
2.1 三大主流分析视角
在实际分析中,业内最常用三类分析思路,分别对应不同的研究目标:
- 中心性分析重点评估单个节点的权力、地位与影响力,分为个体中心度(单节点影响力)和网络中心势(整个网络节点影响力的差异程度)。根据计算方式不同,又细分为点度、介数、接近三大类。
- 凝聚子群分析俗称 “小团体分析”,专门识别网络中联系紧密的子群体,分析子群内部、子群之间的互动特征,常用于团队拆分、社群划分等场景。
- 核心 - 边缘结构分析按照连接数量与重要性,将节点划分为核心节点与边缘节点,清晰区分网络主干与外围部分,广泛应用于精英圈层、科研引文、企业组织等网络分析。
2.2 常用量化指标及释义
为了将网络特征数字化,行业制定了一系列标准统计指标,结合计算公式可精准量化网络状态:
- 节点度:单个节点的连接总数,有向网络分为入度(被连接数)和出度(主动连接数),度数越高代表节点人脉 / 合作对象越多。
- 中心性系列指标
- 度中心性:节点实际度数与网络最大度数的比值,直观体现节点连接广度;
- 接近中心性:以节点到其他所有节点的平均路径长度倒数计算,数值越高,节点到达全网的效率越高;
- 介数中心性:衡量节点充当 “中间桥梁” 的能力,统计全网最短路径中经过该节点的比例;
- 特征向量中心性:不仅看自身连接数,还看重相连节点的质量,连接高影响力节点则自身分值更高。
- 群体结构指标
- 聚类系数:描述节点周边伙伴的抱团程度,系数越接近 1,代表局部圈子越紧密;
- 平均最短路径长度:全网节点两两之间路径的平均值,反映信息传播的整体距离;
- 模块化系数:评判网络社区划分的合理性,系数越高,代表各个子社群区分越清晰。
- 网络形态指标包含网络密度、同配性、直径、节点偏心率、网络半径、维纳指数、网络全局 / 局部效率等,分别用于描述网络整体连通性、节点连接偏好、网络最大传播距离、信息传输效率等特征。
- 其他特色指标
- 互惠性:统计双向连接在所有连线中的占比,判断关系是否对等;
- 度分布:统计不同度数节点的数量分布,无标度网络会呈现幂律分布特征;
- K - 核:筛选网络中高连通性的核心子图,剔除边缘松散节点;
- 小世界效应:真实网络普遍具备的特征,表现为节点之间能通过极少步骤完成连接。
三、基于 Python 的社会网络分析代码实现
本文使用NetworkX库搭建网络、计算各类指标,搭配 Matplotlib 完成可视化,所有代码可直接运行,下面按功能模块逐一展示。
3.1 中心度计算(度中心度、介数中心度、接近中心度)
该模块实现三大基础中心度的求解,使用随机生成的网络作为测试样本。
import networkx as nx# 计算度中心度def calculate_degree_centrality(G): return nx.degree_centrality(G)# 计算介数中心度def calculate_betweenness_centrality(G): return nx.betweenness_centrality(G, normalized=True)# 计算接近中心度def calculate_closeness_centrality(G): return nx.closeness_centrality(G)# 生成测试网络G = nx.barabasi_albert_graph(100, 2)# 执行计算degree_centrality = calculate_degree_centrality(G)betweenness_centrality = calculate_betweenness_centrality(G)closeness_centrality = calculate_closeness_centrality(G)# 输出结果print("度中心度:", degree_centrality)print("介数中心度:", betweenness_centrality)print("接近中心度:", closeness_centrality)
3.2 网络中心势计算
中心势用于评估节点邻居的综合影响力,分为度数、接近、中介三类中心势。
import networkx as nx# 计算度数中心势def calculate_degree_centrality_potential(G): degree_centrality = nx.degree_centrality(G) degree_centrality_potential = {} for node in G.nodes(): neighbors = set(G.neighbors(node)) node_potential = sum(degree_centrality[n] for n in neighbors) degree_centrality_potential[node] = node_potential return degree_centrality_potential# 计算接近中心势def calculate_closeness_centrality_potential(G): closeness_centrality = nx.closeness_centrality(G) closeness_centrality_potential = {} for node in G.nodes(): neighbors = set(G.neighbors(node)) node_potential = sum(closeness_centrality[n] for n in neighbors) closeness_centrality_potential[node] = 1 / node_potential return closeness_centrality_potential# 计算中介中心势def calculate_betweenness_centrality_potential(G): betweenness_centrality = nx.betweenness_centrality(G, normalized=True) betweenness_centrality_potential = {} for node in G.nodes(): neighbors = set(G.neighbors(node)) node_potential = sum(betweenness_centrality[n] for n in neighbors) betweenness_centrality_potential[node] = node_potential return betweenness_centrality_potential# 测试网络G = nx.barabasi_albert_graph(100, 2)# 计算并输出degree_centrality_potential = calculate_degree_centrality_potential(G)closeness_centrality_potential = calculate_closeness_centrality_potential(G)betweenness_centrality_potential = calculate_betweenness_centrality_potential(G)print("度数中心势:", degree_centrality_potential)print("接近中心势:", closeness_centrality_potential)print("中介中心势:", betweenness_centrality_potential)
3.3 网络密度与同配性计算
网络密度反映连通松紧,同配性判断节点的连接偏好(强者连强者 / 强者连弱者)。
import networkx as nx# 构建自定义网络G = nx.Graph()G.add_edges_from([(1, 2), (1, 3), (2, 3), (2, 4)])# 计算网络密度density = nx.density(G)print("网络密度:", density)# 计算同配性系数assortativity = nx.degree_assortativity_coefficient(G)print("同配性:", assortativity)
3.4 路径、距离相关指标计算
包含直径、节点偏心率、半径、维纳指数、全局效率、平均路径长度等指标。
import networkx as nx# 构建网络G = nx.Graph()G.add_edges_from([(1, 2), (1, 3), (2, 3), (2, 4)])# 网络直径diameter = nx.diameter(G)print("直径:", diameter)# 节点偏心率eccentricity = nx.eccentricity(G)print("节点偏心率:", eccentricity)# 网络半径radius = nx.radius(G)print("半径:", radius)# 维纳指数wiener_index = nx.wiener_index(G)print("维纳指数:", wiener_index)# 网络全局效率global_efficiency = nx.global_efficiency(G)print("网络全局效率:", global_efficiency)# 网络平均一致估计mean_nodal_efficiency = 1 / global_efficiencyprint("网络平均一致估计:", mean_nodal_efficiency)# 平均路径长度average_path_length = nx.average_shortest_path_length(G)print("平均路径长度:", average_path_length)
3.5 聚类系数与模块化系数计算
用于分析节点抱团程度和社区划分质量。
import networkx as nx# 构建网络G = nx.Graph()G.add_edges_from([(1, 2), (1, 3), (2, 3), (2, 4)])# 整体网络聚类系数clustering_coefficient = nx.average_clustering(G)print("网络聚类系数:", clustering_coefficient)# 局部聚类系数均值local_clustering_coefficient = nx.clustering(G)average_local_clustering_coefficient = sum(local_clustering_coefficient.values()) / len(local_clustering_coefficient)print("局部聚类系数:", average_local_clustering_coefficient)# 模块化系数(社区划分质量)modularity_coefficient = nx.algorithms.community.quality.modularity(G, nx.algorithms.community.greedy_modularity_communities(G))print("模块化系数:", modularity_coefficient)
3.6 网络互惠性计算
统计双向连接占比,衡量关系对等性。
import networkx as nx# 构建网络G = nx.Graph()G.add_edges_from([('A', 'B'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('D', 'E'), ('E', 'D')])# 计算互惠性reciprocity = nx.reciprocity(G)print("互惠性:", reciprocity)
3.7 介数中心性单独计算
import networkx as nxG = nx.Graph()G.add_edges_from([('A', 'B'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('D', 'E'), ('E', 'D')])betweenness_centrality = nx.betweenness_centrality(G)print("介数中心性:", betweenness_centrality)
3.8 度分布可视化
绘制节点度数分布直方图,直观展示网络节点连接分布特征。
import networkx as nximport matplotlib.pyplot as pltG = nx.Graph()G.add_edges_from([('A', 'B'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('D', 'E'), ('E', 'D')])# 提取度序列并统计degree_sequence = [d for n, d in G.degree()]degree_count = nx.degree_histogram(G)degrees = range(len(degree_count))# 绘图plt.bar(degrees, degree_count, width=0.80, color='b')plt.title("Degree Distribution")plt.ylabel("Frequency")plt.xlabel("Degree")plt.show()
3.9 K - 核子图提取
筛选网络中高连通性的核心子图。
import networkx as nxG = nx.Graph()G.add_edges_from([('A', 'B'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('D', 'E'), ('E', 'D')])# 提取K-核节点k_core = nx.k_core(G)print("K-Core子图节点:", k_core.nodes())
3.10 小世界效应计算
判断网络是否具备典型的小世界特征。
import networkx as nximport numpy as npdef calculate_small_world_effect(G): # 原始网络平均最短路径 L_real = nx.average_shortest_path_length(G) # 生成同结构随机网络 G_random = nx.double_edge_swap(G, nswap=len(G.edges())*5, max_tries=len(G.edges())*10) # 随机网络平均最短路径 L_random = nx.average_shortest_path_length(G_random) # 小世界指数 small_world_effect = L_real / L_random return small_world_effect# 生成小世界模型网络G = nx.watts_strogatz_graph(100, 6, 0.1)small_world_effect = calculate_small_world_effect(G)print("小世界效应指数:", small_world_effect)
3.11 凝聚子群(社区)挖掘与可视化
识别网络中的社群,并绘制网络拓扑图。

import networkx as nximport matplotlib.pyplot as pltfrom networkx.algorithms.community import greedy_modularity_communities# 加载经典测试网络G = nx.karate_club_graph()# 挖掘社区communities = list(greedy_modularity_communities(G))# 绘图展示fig, ax = plt.subplots()pos = nx.spring_layout(G)nx.draw(G, pos, with_labels=True, node_color='lightblue', node_size=500, ax=ax)ax.set_title('Karate Club Network with Agglomerative Hierarchical Clustering')plt.show()# 输出社区分组print("识别出的社区:")for idx, community in enumerate(communities): print(f"社区 {idx + 1}: {community}")
3.12 核心 - 边缘节点划分
根据节点度数阈值,拆分核心节点与边缘节点并可视化。

import networkx as nximport matplotlib.pyplot as pltdef core_and_periphery_partition(G, threshold): core_nodes = [node for node, degree in G.degree() if degree >= threshold] periphery_nodes = [node for node, degree in G.degree() if degree < threshold] core_subgraph = G.subgraph(core_nodes) periphery_subgraph = G.subgraph(periphery_nodes) return core_subgraph, periphery_subgraph# 构建随机网络G = nx.erdos_renyi_graph(n=20, p=0.2)# 设置度数阈值degree_threshold = 5# 划分核心与边缘core_subgraph, periphery_subgraph = core_and_periphery_partition(G, degree_threshold)# 双栏绘图fig, axs = plt.subplots(1, 2, figsize=(12, 5))# 绘制核心节点if core_subgraph.number_of_nodes() > 0: nx.draw(core_subgraph, ax=axs[0], with_labels=True, node_color='lightblue', node_size=500) axs[0].set_title('Core Nodes')else: axs[0].set_title('No Core Nodes to Display') axs[0].axis('off')# 绘制边缘节点if periphery_subgraph.number_of_nodes() > 0: nx.draw(periphery_subgraph, ax=axs[1], with_labels=True, node_color='lightgreen', node_size=500) axs[1].set_title('Periphery Nodes')else: axs[1].set_title('No Periphery Nodes to Display') axs[1].axis('off')plt.tight_layout()plt.show()
3.13 网络全局效率与局部效率计算
评估网络整体与单个节点周边的信息传输效率。
import networkx as nx# 构建网络G = nx.Graph()G.add_edges_from([(1, 2), (1, 3), (2, 3), (2, 4)])# 全局效率global_efficiency = nx.global_efficiency(G)print("全局效率:", global_efficiency)# 局部效率local_efficiency = nx.local_efficiency(G)print("每个节点的局部效率:", local_efficiency)
四、总结
社会网络分析依托节点与连线的基础模型,将抽象的人际关系、组织关系转化为可量化、可可视化的网络数据,是打通理论研究与落地应用的实用工具。
从理论层面来看,本文梳理了 SNA 的发展历程、基础要素、应用场景与利弊,讲解了中心性、凝聚子群、核心 - 边缘三大分析视角,以及数十种常用量化指标,构建了完整的知识框架。从实操层面,基于 Python NetworkX 库实现了全维度指标计算、社群挖掘、节点分层、各类可视化图表绘制,代码覆盖主流分析场景,可直接复用。
在企业团队、社交平台、公共管理等实际场景中,结合 SNA 的分析结果,能够精准定位关键角色、发现沟通漏洞、预判发展趋势,为管理优化、运营策略制定提供强有力的数据支撑。同时我们也需要正视该方法的局限性,在开展分析时做好数据治理与隐私保护,结合多种分析手段互补验证,让社会网络分析发挥更大价值。