2016-11-29 39 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,非常感謝您的回覆。它奇妙地工作。乾杯 –