簡體   English   中英

R中的子圖文本分析(igraph)

[英]subgraph text analysis in 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"

如何訪問子圖的text屬性以執行文本分析? E(subCluster)$text不起作用

E(subCluster)$text不起作用,因為tweets$text的值在創建時未添加到圖形中。 因此,您必須手動執行此操作。 有點痛苦,但可行。 需要tweets數據框的某些子集,並需要根據用戶名進行匹配。

首先,請注意邊緣類型按特定順序排列:轉發,提及,回復。 來自特定用戶的相同文本可以應用於所有這三個。 因此,我認為串行添加文本是有意義的。

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

使用dplryreshape2使其更容易。

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可以包含個人列表,因此我們必須取消列出。 但是我們想將提到的用戶與提到他們的用戶相關聯。

#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))])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM