Back to Hideout
study
Data analysis

大数据分析

2025-05-13
大数据分析.md
TOP
SECRET

第一步:数据准备

数据来源:
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))))
    
  • 边重要性(如基于边介数)


总结:你可按以下结构撰写报告

  1. 数据描述与图构建

  2. 节点与边中心性分析

  3. 三种社团发现算法比较

  4. 可视化展示(图 + 图注)

  5. 参数对比与验证

  6. 应用场景分析

  7. 总结与未来扩展方向