2017-01-15 14 views
0

Мне любопытно, как получить доступ к дополнительным атрибутам для графа, связанного с ребрами. Для того, чтобы следовать здесь минимальный пример:анализ текста подграфа в R (igraph)

library("igraph") 
library("SocialMediaLab") 

myapikey ='' 
myapisecret ='' 
myaccesstoken = '' 
myaccesstokensecret = '' 

tweets <- Authenticate("twitter", 
         apiKey = myapikey, 
         apiSecret = myapisecret, 
         accessToken = myaccesstoken, 
         accessTokenSecret = myaccesstokensecret) %>% 
Collect(searchTerm="#trump", numTweets = 100,writeToFile=FALSE,verbose=TRUE) 
g_twitter_actor <- tweets %>% Create("Actor", writeToFile=FALSE) 
c <- igraph::components(g_twitter_actor, mode = 'weak') 
subCluster <- induced.subgraph(g_twitter_actor, V(g_twitter_actor)[which(c$membership == which.max(c$csize))]) 

Начальные твиты содержит следующие столбцы

colnames(tweets) 
[1] "text"   "favorited"  "favoriteCount" "replyToSN"  "created_at"  "truncated"  "replyToSID"  "id"    
[9] "replyToUID"  "statusSource" "screen_name"  "retweetCount" "isRetweet"  "retweeted"  "longitude"  "latitude"  
[17] "from_user"  "reply_to"  "users_mentioned" "retweet_from" "hashtags_used" 

Как я могу получить доступ свойства текста для подграфа, чтобы выполнить анализ текста? E(subCluster)$text не работает

ответ

1

E(subCluster)$text не работает, потому что значения для tweets$text не добавляются к графике, когда она сделана. Поэтому вы должны сделать это вручную. Это немного боль, но выполнимо. Требуется некоторое подмножество фрейма данных tweets и сопоставление на основе имен пользователей.

Во-первых, обратите внимание, что типы кромок находятся в определенном порядке: ретвиты, упоминания, ответы. Тот же текст от конкретного пользователя может применяться ко всем трем из них. Поэтому я думаю, что имеет смысл добавить текст в серийном порядке.

> unique(E(g_twitter_actor)$edgeType) 
[1] "Retweet" "Mention" "Reply" 

Использование dplry и reshape2 делает это проще.

library(reshape2); library(dplyr) 
#Make data frame for retweets, mentions, replies 
rts <- tweets %>% filter(!is.na(retweet_from)) 
ms <- tweets %>% filter(users_mentioned!="character(0)") 
rpls <- tweets %>% filter(!is.na(reply_to)) 

Поскольку users_mentioned может содержать список лиц, мы должны unlist его. Но мы хотим связать пользователей, упомянутых с пользователем, который их упомянул.

#Name each element in the users_mentioned list after the user who mentioned 
names(ms$users_mentioned) <- ms$screen_name 
ms <- melt(ms$users_mentioned) #melting creates a data frame for each user and the users they mention 

#Add the text 
ms$text <- tweets[match(ms$L1,tweets$screen_name),1] 

Теперь добавьте каждую из них в сеть как атрибут края, сопоставляя тип края.

E(g_twitter_actor)$text[E(g_twitter_actor)$edgeType %in% "Retweet"] <- rts$text 
E(g_twitter_actor)$text[E(g_twitter_actor)$edgeType %in% "Mention"] <- ms$text 
E(g_twitter_actor)$text[E(g_twitter_actor)$edgeType %in% "Reply"] <- rpls$text 

Теперь вы можете подмножить и получить значение края для текста.

subCluster <- induced.subgraph(g_twitter_actor, 
          V(g_twitter_actor)[which(c$membership == which.max(c$csize))]) 
+0

спасибо много вы знаете, как я могу решить http://stackoverflow.com/questions/41664769/igraph-get-ids-of-connected-components, а? –