第一步:数据准备
数据来源:
Facebook Social Circles - SNAP 官网
数据格式说明:
-
每个文件对应一个用户(ego),其中
edges文件表示好友之间是否互相认识(不包含 ego 本人) -
例如:
0 1 0 2 1 2
可选文件:facebook_combined.txt(包含整个 4039 个节点和 88234 条边的完整无向图)
第二步:图构建
使用 Python + NetworkX:
import networkx as nx
# 读取 SNAP 提供的 facebook_combined.txt
G = nx.read_edgelist("facebook_combined.txt")
print(f"节点数量: {G.number_of_nodes()}")
print(f"边数量: {G.number_of_edges()}")
第三步:节点与边的重要性评估(3种方法)
1. Degree Centrality(度中心性)
deg_cent = nx.degree_centrality(G)
2. Betweenness Centrality(介数中心性)
btw_cent = nx.betweenness_centrality(G)
3. PageRank(网页排名算法)
pr = nx.pagerank(G)
可以打印并比较最重要的前5个节点:
top_nodes = sorted(pr.items(), key=lambda x: x[1], reverse=True)[:5]
print("Top 5 PageRank Nodes:", top_nodes)
第四步:社区检测算法(社团发现)(3种方法)
你可以使用以下方法进行社团划分:
1. Label Propagation Algorithm(标签传播)
communities_lpa = nx.community.label_propagation_communities(G)
2. Greedy Modularity(贪婪模块度优化)
from networkx.algorithms.community import greedy_modularity_communities
communities_greedy = greedy_modularity_communities(G)
3. Louvain Method(最常用)
安装:
pip install python-louvain
import community as community_louvain
partition = community_louvain.best_partition(G)
第五步:参数对比与可视化验证
社区数量对比:
print("LPA社区数:", len(list(communities_lpa)))
print("Greedy社区数:", len(communities_greedy))
print("Louvain社区数:", len(set(partition.values())))
可视化(Louvain 示例):
import matplotlib.pyplot as plt
pos = nx.spring_layout(G, seed=42)
colors = [partition[node] for node in G.nodes()]
plt.figure(figsize=(12, 8))
nx.draw_networkx_nodes(G, pos, node_size=20, node_color=colors, cmap=plt.cm.tab20)
nx.draw_networkx_edges(G, pos, alpha=0.2)
plt.title("Facebook Network Louvain Communities")
plt.show()
第六步:应用意义分析(社交领域)
可以写在你的报告中:
-
节点重要性: 高 PageRank/Betweenness 的用户通常是“桥梁型”用户,在社交网络中具有关键传播作用;
-
社团检测: 可用于发现“兴趣圈”或“熟人社交圈”,推荐系统可根据用户所在社团做精准推荐;
-
结构可视化: 揭示网络中的社群密度、用户分布,有助于平台优化社交体验;
-
潜在场景:
-
推荐好友 / 群组
-
舆情传播路径识别
-
核心用户影响力分析
-
第七步:扩展分析(可选)
-
网络统计特征(平均度、聚类系数、网络直径):
print("平均聚类系数:", nx.average_clustering(G)) print("网络直径(近似):", nx.diameter(G.subgraph(max(nx.connected_components(G), key=len)))) -
边重要性(如基于边介数)
总结:你可按以下结构撰写报告
-
数据描述与图构建
-
节点与边中心性分析
-
三种社团发现算法比较
-
可视化展示(图 + 图注)
-
参数对比与验证
-
应用场景分析
-
总结与未来扩展方向