2015-06-23 36 views
3

我正在開發一個項目,我需要找到一些社交活動的範圍。我想知道有多少人在丹麥的一個名爲Tinderbox的節日上接受評論。 我所做的是在Twitter上獲取狀態信息,包括丹麥語語言中的「tinderbox」字樣。然後,我想從這些屏幕名稱中提取關注者的數量。所以,我的代碼的第一部分由下式給出:Twitter:一次獲得多個用戶的關注者

library("twitteR") 
setup_twitter_oauth(consumer_key,consumer_secret,access_token,access_secret) 
1 
#get data 
TB<-searchTwitter("tinderbox", lan="da", n=10000) 
#put into a dataframe 
df <- do.call("rbind", lapply(TB, as.data.frame)) 

我的想法是使用相同的輸出作爲在下面的例子,那就是 直接從Twitter的數據得到FOLLOWERSCOUNT。 這個例子在stackoverflow上找到。但我不知道該怎麼做才能解決我的目的(fetching large number of followers and followees in R

library(twitteR) 
user <- getUser("krestenb") 
followers <- user$getFollowers() 
b <- twListToDF(followers) 
f_count <- as.data.frame(b$followersCount) 
u_id <- as.data.frame(b$id) 
u_sname <- as.data.frame(b$screenName) 
u_name <- as.data.frame(b$name) 
final_df <- cbind(u_id,u_name,u_sname,f_count) 
sort_fc <- final_df[order(-f_count),] 
colnames(sort_fc) <- c('id','name','s_name','fol_count') 

我的問題是,我不能簡單地使用用戶名的向量的追隨者< - < - 用戶$ getFollowers(),由從df $ screenName提取屏幕名稱列表。

所以我的想法是,也許我需要做一個循環與所有不同的屏幕名稱。但我不知道該怎麼做。

我已經描繪了我想要得到的東西,以及我怎麼想/我想到那裏。

本週末的節日即將到來,人們對此有很大的幫助。

+0

我沒有在本地機器上配置OAuth,因此我無法使用您的代碼。但是我可以告訴你,避免在R中使用循環的典型方法是使用'apply'函數之一。你可以定義一個用戶向量,然後使用'apply()'遍歷它。 –

+0

感謝您的快速回復。 我還是R的新手 - 只是最近纔開始將它用於其他的東西,而不僅僅是製作統計模型。 因此,我會很感激,如果你可以鍵入一些示例代碼abvout如何使用上面給出的代碼中的應用函數。 –

回答

1

這是基於你在原來的問題有哪些,這將彙集Twitter的結果爲一組用戶的一些示例代碼:

# create a data frame with 4 columns and no rows initially 
df_result <- data.frame(t(rep(NA, 4))) 
names(df_result) <- c('id', 'name', 's_name', 'fol_count') 
df_result <- df_result[0:0,] 

# you can replace this vector with whatever set of Twitter users you want 
users <- c("krestenb", "tjb25587")     # tjb25587 (me) has no followers 

# iterate over the vector of users and aggregate each user's results 
sapply(users, function(x) { 
        user <- getUser(x) 
        followers <- user$getFollowers() 
        if (length(followers) > 0) {  # ignore users with no followers 
         b <- twListToDF(followers) 
         f_count <- as.data.frame(b$followersCount) 
         u_id <- as.data.frame(b$id) 
         u_sname <- as.data.frame(b$screenName) 
         u_name <- as.data.frame(b$name) 
         final_df <- cbind(u_id,u_name,u_sname,f_count) 
         sort_fc <- final_df[order(-f_count),] 
         colnames(sort_fc) <- c('id','name','s_name','fol_count') 
         df_result <<- rbind(df_result, sort_fc) 
        } 
       }) 

要點

我所使用的全局賦值運算符<<-當在df_result數據幀上做rbind,以便它將「粘」在循環外。正如我在我的原始答案中提到的那樣,您可以使用sapply函數遍歷用戶的向量。在循環內部,結果被彙總。

我使用包含Twitter用戶的矢量進行了測試,這兩個用戶都擁有且沒有追隨者,並且工作正常。

+0

感謝您的回覆。我相信你對這種方法是正確的。但我無法弄清楚以下錯誤。如果我運行 twitter.users <-c(「krestenb」) #隨機選擇krestenb,因爲他沒有太多追隨者 hest < - sapply(twitter.users,function(x){ user < - getUser(x)}) 我得到預期的列表。但如果我添加 twitter.users < - c(「krestenb」) hest < - sapply(twitter。用戶,功能(X){ 用戶< - 的getUser(X) 追隨者< - 用戶$ getFollowers() #做你的處理,這裏的其餘部分爲用戶 }) 我得到:在can_access_other_account 錯誤(USER_ID ): –

+0

加上以下錯誤: 錯誤can_access_other_account(USER_ID) 嘗試應用非功能除了:警告消息: 在twInterfaceObj $ doAPICall( 「帳號/ verify_credentials」,...): 限速遇到&達到重試限制 - 返回部分結果 –

+0

不使用OAuth配置我的計算機,這是我可以給予的最大幫助。 –

相關問題