2016-11-29 68 views
4

亲爱的我是新来的R和我需要你的帮助,获取Twitter的追随者和朋友网络为多个用户中的R

我用户名的列表,我需要找回所有的追随者和朋友,并创建一个边缘列表并将其存储在CSV文件中以供进一步分析。问题:我编译的用户名列表非常大,我需要迭代用户的矢量并将每个用户的结果集中到一个文件中。 我可以一个接一个做,但它显然更好自动做到这一点。以下是我用来为ONE Twitter用户创建边界列表的代码。正如我解释的,我打算做同样的事情,但对于大量的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) 

我如何可以做同样的多个用户名边缘文件? 在此先感谢

回答

2

您可以创建for循环并遍历用户名列表来填充列表。然后将此列表转换为边界列表。这需要一些时间,因为你说你有大量的用户,朋友和追随者的名单可能会很大。 (尤其是线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 

仅供参考,start$getFollowerIDs()lookupUsers(start$getFollowerIDs()),所以你可以使用ID号而不是名称,它就会快很多。

+0

亲爱的Paqmo,非常感谢您的回复。它奇妙地工作。干杯 –