如何按日/周/月时间切片计算账号基于hashtag的两两相似度
你只需要先给每条推文生成对应时间粒度的切片标签,再按切片分组后执行原有的相似度计算逻辑即可,具体实现代码如下:
library(rtweet) library(widyr) library(tidyverse) # 1. 拉取用户和推文数据,需要覆盖更长时间范围的话可以调大n参数 rstats <- search_users("rstats", n = 10) rstats_tmls <- get_timeline(rstats$user_id, n = 1000) # 2. 定义时间切片粒度,可选值:"day"(按日)/"week"(按周)/"month"(按月) time_unit <- "month" # 3. 分组计算各时间切片下的账号相似度 rstats_tmls %>% # 生成时间切片标签,按周计算要改周起始日可以加week_start参数,比如week_start=7代表周日为一周第一天 mutate(time_slice = floor_date(created_at, unit = time_unit)) %>% unnest(hashtags) %>% # 按时间切片+用户+hashtag计数 count(time_slice, user_id, hashtags) %>% # 按时间切片分组,组内计算两两相似度 group_by(time_slice) %>% pairwise_similarity(user_id, hashtags, n, sort = T, upper = FALSE)
最终输出结果会多一个time_slice列,标识每一条相似度结果对应的时间周期,你可以直接基于这个结果做后续的时间序列趋势分析。
注意事项
- 如果需要统计的时间跨度较长,记得调大
get_timeline的n参数,或者用rtweet的分页拉取接口获取更久之前的推文,避免单账号300条推文覆盖的时间范围不足 - 若某一时间切片内某个账号没有发布带hashtag的内容,该账号不会出现在当期的相似度计算结果中
- 按周统计时如果需要自定义周起始日,在
floor_date函数中添加week_start参数即可,参数取值1-7对应周一到周日
内容的提问来源于stack exchange,提问作者mundos
相关产品推荐
相关产品推荐

