首页 > 解决方案 > 用 R 对 twitter 用户进行排名

问题描述

您好我正在做一项数据挖掘工作,我尝试对 Twitter 用户进行分类以了解他们是否是教师,然后根据单词我必须复制他们的网名,然后在他们的描述中搜索如下代码:

library(twitteR)
library (tidyverse)
palabras = c("dolor", "cansado", "#agotado")
todosTwits = list()
  
for(i in seq((palabras))){
  todosTwits[[i]] = searchTwitter(palabras[c(i)], n=100)  
  }
 
todosTwits %>% 
    map_df(as_tibble)  #I become tbl

listaUsuarios = list()
#recorrer todos los twits:
#todosTwits$screenName
for(name in todosTwits$screenName){
  if (!(name%in%listaUsuarios)){
    append(listaUsuarios,name)
  }
}



#buscar usuarios
usrs <- lookupUsers(listaUsuarios)
usrs
#convertir a dataset
usuarios <- data.frame(usrs)
#calcular el tamaño de filas
tam = dim(usuarios)[1]

listaDocentes = c()
for(i in seq(tam)){
  print(usuarios[c(i,1)]$description)
  if ("docente" %in% usuarios[c(i,1)]$description){
    listaDocente.append(usuarios[c(i,1)]$screenName)
  }
}

首先,我无法将todosTwits列表转换为 tbl,因为我需要该格式才能获取用户名,然后显示其描述并对其进行分类。

在这种情况下,我希望你能帮助我或给我一些关于这项活动的建议。

标签: rtwittertext-mining

解决方案


进行试错搜索我能够通过用户描述获得分类算法,我在这里分享它:

library("tm")
library("stringr")
library("caret")
library("twitteR")
library("tidyverse")
library("knitr")
library("httpuv")


appname<-" "
consumerKey = " "
consumerSecret =" "
accessToken = " "
accessSecret = " "
setup_twitter_oauth(consumer_key = consumerKey, consumer_secret = consumerSecret,
                    access_token = accessToken, access_secret = accessSecret)



#words to search
dolor<-tbl_df(map_df(searchTwitter("dolor", n=200),as.data.frame))
cansado<-tbl_df(map_df(searchTwitter("cansado", n=200),as.data.frame))
agotado<-tbl_df(map_df(searchTwitter("agotado", n=200),as.data.frame))


#joining searches
todosTwits<- bind_rows(dolor,cansado,agotado)

#check if there are no repeat users
n_occur <- data.frame(table(todosTwits$screenName))

#user list
listaUsuarios<-as.vector(n_occur$Var1)

#get user information
usrs <- lookupUsers(listaUsuarios)

usuarios  <- tbl_df(map_df(usrs, as.data.frame))

limpiar_tokenizar <- function(texto){
  # El orden de la limpieza no es arbitrario
  # Se convierte todo el texto a minúsculas
  nuevo_texto <- tolower(texto)
  # Eliminación de páginas web (palabras que empiezan por "http." seguidas 
  # de cualquier cosa que no sea un espacio)
  nuevo_texto <- str_replace_all(nuevo_texto,"http\\S*", "")
  # Eliminación de signos de puntuación
  nuevo_texto <- str_replace_all(nuevo_texto,"[[:punct:]]", " ")
  # Eliminación de números
  nuevo_texto <- str_replace_all(nuevo_texto,"[[:digit:]]", " ")
  # Eliminación de espacios en blanco múltiples
  nuevo_texto <- str_replace_all(nuevo_texto,"[\\s]+", " ")
  # Tokenización por palabras individuales
  nuevo_texto <- str_split(nuevo_texto, " ")[[1]]
  # Eliminación de tokens con una longitud < 2
  nuevo_texto <- keep(.x = nuevo_texto, .p = function(x){str_length(x) > 1})
  return(nuevo_texto)
}

#Creamos un nuevo dataframe para usuarios y su descripción
tweets <- usuarios %>% select(screenName,description)
tweets <- tweets %>% rename(autor = screenName,texto=description)

#tokenizar y separar texto de la descripción

tweets <- tweets %>% mutate(texto_tokenizado = map(.x = texto,
                                                   .f = limpiar_tokenizar))
tweets %>% select(texto_tokenizado) %>% head()


#separar palabras en el dataframe
tweets_tidy <- tweets %>% select(-texto) %>% unnest()
tweets_tidy <- tweets_tidy %>% rename(token = texto_tokenizado)


lista_docente <-c("maestro","educador","maestra","educadora","docente","profesor","profesora")
docentes<- tweets_tidy %>% filter(token %in% lista_docente)


推荐阅读