2016-11-29 2 views
4

Уважаемые все Я новичок в R и мне нужна ваша помощь,Получения Twitter Follower и партнерская сеть для нескольких пользователей в R

У меня есть список имен пользователей, для которых мне нужно получить все последователь и друг и создать и сохраните его в CSV.file для дальнейшего анализа. Проблема: список файлов, которые я скомпилировал, довольно большой, мне нужно перебрать вектор пользователей и объединить результаты каждого пользователя в один файл. Я могу сделать это один за другим, но это, безусловно, лучше сделать это автоматически. Вот код, который я использовал для создания edgelist для пользователя ONT twitter. Как я уже сказал, я намереваюсь сделать то же самое, но для большого количества твитерских имен. Предполагая, что связь с API Twitter был создан Я использую следующие пакеты:

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 и цикл по списку имен пользователей, чтобы заполнить список. Затем превратите этот список в 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()), так что это можно использовать идентификационные номера, а не имена, он будет идти гораздо быстрее.

+0

Дорогой Пакмо, спасибо большое за ваш ответ. Он работает чудесно. ура –