包含关键词“生物信息学”的推文示例
第1步:加载所需的软件包
# 加载所需的软件包 library(igraph)
第2步:收集关于“生物信息学”的推文
# 包含“生物信息学”的英语推文 dm_tweets = searchTwitter("bioinformatics", n=500,) # 得到文本 dm_txt = sapply(dm_tweets, function(x) x$getText())
第3步:识别转发
# 查找转发的正则表达式 grep("(RT|via)((?:\\b\\W*@\\w+)+)", dm_tweets, # 哪些推文是转发推文 rt_patterns = grep("(RT|via)((?:\\b\\W*@\\w+)+)", dm_txt, ignore.case=TRUE) # 显示转发(这些是我们要关注的转发) dm_txt[rt_patterns]
第4步:收集谁转发和谁发布
我们将使用这些结果来形成边列表以创建图形
# 创建列表以存储用户名 who_retweet = as.list(1:length(rt_patterns)) # for循环 for (i in 1:length(rt_patterns)) { # 通过转发实体获取消息 twit = dm_tweets[[rt_patterns[i]]] # 获取转推源 poster = str_extract_all(twit$getText(), "(RT|via)((?:\\b\\W*@\\w+)+)") #删除':' poster = gsub(":", "", unlist(poster)) # 转推的用户名 who_post[[i]] = gsub("(RT @|via @)", "", poster, ignore.case=TRUE) # 转推用户名 who_retweet[[i]] = rep(twit$getScreenName(), length(poster)) # 转换列表为向量格式 who_post = unlist(who_post)
第5步: 从编辑清单创建图形
# 两列边矩阵 retweeter_poster = cbind(who_retweet, who_post) # 产生图 rt_graph = graph.edgelist(retweeter_poster) # 获取点名称 ver_labs = get.vertex.attribute(rt_graph, "name", index=V(rt_graph))
第6步: 让我们绘制图
# 选择绘图布局 glay = layout.fruchterman.reingold(rt_graph) # 绘图 par(bg="gray15", mar=c(1,1,1,1)) plot(rt_graph, layout=glay, vertex.label.color=hsv(h=0, s=0, v=.95, alpha=0.5), edge.width=3, edge.color=hsv(h=.95, s=1, v=.7, alpha=0.5)) # 添加标题 title("\nTweets with 'bioinformatics': Who retweets whom", cex.main=1, col.main="gray95")
第7步:生物信息学表示
# 绘制另外一个图 par(bg="gray15", mar=c(1,1,1,1)) plot(rt_graph, layout=glay, edge.color=hsv(h=.35, s=1, v=.7, alpha=0.4)) # 添加标题 title("Tweets with 'bioinformatics': Who retweets whom", cex.main=1, col.main="gray95", family="mono")