R语言rtweet包lookup_friendships函数的关注关系结果矩阵构建方法
批量好友关系查询与矩阵存储实现
前置初始化
先完成用户列表校验、邻接矩阵的提前初始化,避免后续循环中频繁修改矩阵结构带来的性能损耗:
# 替换为你的实际用户列表 user_vec <- c("user0", "user1", "user2", "user3") user_count <- length(user_vec) # 初始化带维度命名的邻接矩阵,方便后续按用户名直接索引 follow_matrix <- matrix( NA, nrow = user_count, ncol = user_count, dimnames = list(source_user = user_vec, target_user = user_vec) )
批量查询对生成
直接筛选所有满足i>j的用户组合,避免重复调用接口查询冗余关系:
# 生成全量用户两两组合 raw_pairs <- expand.grid( source = user_vec, target = user_vec, stringsAsFactors = FALSE ) # 计算每个用户在列表中的位置,筛选i>j的有效查询对 raw_pairs$source_idx <- match(raw_pairs$source, user_vec) raw_pairs$target_idx <- match(raw_pairs$target, user_vec) valid_pairs <- raw_pairs[raw_pairs$source_idx > raw_pairs$target_idx, ]
接口批量调用
利用
lookup_friendships原生支持多组查询对的特性,一次性提交所有待查询关系,相比逐对循环调用能减少90%以上的API请求次数,降低触发接口限流的概率
# 批量提交查询请求 relation_data <- lookup_friendships( source_user = valid_pairs$source, target_user = valid_pairs$target )
结果清洗与矩阵填充
按照你给定的过滤规则提取有效关系值,直接回填到预初始化的矩阵中:
# 按规则过滤有效关系字段 clean_data <- relation_data %>% filter(relationship == "source", variable == "following") %>% select(source, target, value) # 逐行回填矩阵 for (i in seq_len(nrow(clean_data))) { s <- clean_data$source[i] t <- clean_data$target[i] follow_matrix[s, t] <- clean_data$value[i] }
实操注意事项
- 接口频率适配:rtweet内置了接口频率自动检测逻辑,用户量较大时可将待查询的组合拆分为20-30组的小批次,在频率窗口内分批提交,避免请求被拦截。
- 结果校验:填充完成后可随机抽取2-3个已知的关注关系,手动调用单次查询函数比对矩阵中的值,确认过滤逻辑没有偏差。
- 异常值处理:对矩阵中保留的NA值,可单独生成待补查的组合列表,后续单独重查即可,不会破坏已经填充的有效结果。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

