基于NetworkX构建Twitter账号粉丝关联有向图的技术实现
用NetworkX构建Twitter粉丝关系有向图(基于JSON数据)
数据结构说明
假设你的JSON数据已存储目标账号的粉丝关系,每个条目包含目标账号ID、粉丝ID,以及该粉丝的粉丝ID列表,示例结构如下:
{ "target_account_id": "123456", "followers": [ { "follower_id": "789012", "follower_followers": ["345678", "901234"] }, { "follower_id": "345678", "follower_followers": ["789012", "123456"] } ] }
实现步骤与完整代码
- 导入依赖库
- 加载本地JSON数据文件
- 初始化有向图并构建节点、关系边
- 可选:输出图的基础统计或导出可视化文件
import networkx as nx import json # 加载JSON数据文件 with open('twitter_followers_data.json', 'r', encoding='utf-8') as f: data = json.load(f) # 初始化有向图 G = nx.DiGraph() # 添加目标账号节点 target_id = data['target_account_id'] G.add_node(target_id, node_type="Target Account") # 遍历每个粉丝,构建完整关系网络 for follower_item in data['followers']: follower_id = follower_item['follower_id'] # 添加当前粉丝节点 G.add_node(follower_id, node_type="Follower") # 添加「粉丝关注目标账号」的边(遵循Twitter逻辑:A关注B则边为A→B) G.add_edge(follower_id, target_id) # 为该粉丝与其自身粉丝建立连接 for sub_follower_id in follower_item['follower_followers']: G.add_node(sub_follower_id, node_type="Follower's Follower") # 添加「粉丝的粉丝关注该粉丝」的边 G.add_edge(sub_follower_id, follower_id) # 输出图的基础统计信息 print(f"总节点数: {G.number_of_nodes()}") print(f"总边数: {G.number_of_edges()}") # 可选:导出为GEXF格式,方便用Gephi等工具可视化 nx.write_gexf(G, 'twitter_follower_network.gexf')
关键注意事项
- 边方向逻辑:严格按照Twitter关注关系定义边的流向——若用户A关注B,则有向边为
A→B,确保关系网络的准确性。 - 自动去重:NetworkX会自动忽略重复添加的节点和边,无需额外处理重复ID的情况。
- 数据类型统一:确保JSON中的Twitter ID统一为字符串或整数类型,避免因类型不一致导致节点识别错误。
- 规模适配:针对135个粉丝的场景,即使每个粉丝平均有数百个粉丝,NetworkX也能轻松处理,生成的网络可通过可视化工具进一步分析层级结构。
内容的提问来源于stack exchange,提问作者user20717245
相关产品推荐
相关产品推荐

