为R中的多个用户获取Twitter追随者和朋友网络



亲爱的我是R的新手,我需要您的帮助,

我有一个用户名列表,我需要检索所有关注者和朋友,并创建一个边缘列表并将其存储在csv.file中以进行进一步分析。问题:我编制的用户名列表很大,我需要迭代用户的向量,并将每个用户的结果汇总到一个文件中。 我可以一个一个一个,但是自动执行此操作显然更好。这是我用来为一个Twitter用户创建Edgelist的代码。正如我所解释的那样,我打算做同样的事情,但是对于大量的Twitter用户名。假设已经建立了与Twitter API的连接,我使用以下软件包:

library(twitteR)
library(foreign)
library(xlsx)
library(base64enc)
library(rJava)
library(devtools)
library(RCurl)
library(igraph)

然后我得到用户朋友:

start <- getUser("@camharvey")
friends_object <- lookupUsers(start$getFriendIDs())
friends_object
friendsCount(start)

让用户关注者

followers_object <- lookupUsers(start$getFollowerIDs())
followers_object
followersCount(start)

从两个对象创建一个列表

friends <- sapply(friends_object[1:117],name)
followers <- sapply(followers_object[1:1033],name)

将两个列表合并到数据框架中,以创建关注者和朋友的边缘文件

relations <- merge(data.frame(User='@camharvey',followers=friends), data.frame(User=followers, followers='@camharvey'), all=TRUE)

我该如何为多个用户名做同样的事情?预先感谢

您可以在用户名列表上创建一个for循环,以填充列表。然后将此列表变成一个edgelist。这将需要一些时间,因为您说您有大量用户,而朋友和追随者的列表可能很大。(尤其是,线lookupUsers(start$getFriendIDs())followers_object <- lookupUsers(start$getFollowerIDs())需要一段时间,不确定是否有更有效的方法来完成此操作...)

users <- c("@camharvey",etc.) #List of usernames
userrelations <- list() #Create an empty list to populate
for (i in 1:length(users)){
  start <- getUser(users[i])
  friends_object <- lookupUsers(start$getFriendIDs())
  followers_object <- lookupUsers(start$getFollowerIDs())
  friends <- sapply(1:length(friends_object), 
                    function(x) name(friends_object[[x]]))
  followers <- sapply(1:length(followers_object), 
                      function(x) name(followers_object[[x]]))
  userrelations[[i]] <- merge(data.frame(User=users[i],followers=friends),
                              data.frame(User=followers, followers=users[i]), 
                              all=TRUE)
}

这填充了每个用户的朋友和关注者网络的列表。接下来,将列表的所有元素组合到数据框架中,然后写入CSV:

user_el <- do.call("rbind",userrelations)
write.csv(user_el, "filename.csv", row.names = F)

我只尝试了三个用户,这花了一些时间。在我的计算机上,运行时间看起来像这样:

   user  system elapsed 
175.544   3.356 317.304 

fyi, start$getFollowerIDs()lookupUsers(start$getFollowerIDs())快得多,因此您可以使用ID号而不是名称,它的发展速度会更快。

最新更新