### LIBRERIAS #### library(rtweet) library(dplyr) library(stopwords) library(tidytext) library(stringr) ####### OBTENCION DE LISTA DE TWEETS POR HASTAG O PALABRAS CLAVE ###### # Autentificación para poder descargar datos de twitter, se necesita solo la primera vez # luego queda en la máquina la autentificación auth_setup_default() # Autenticación # Busqueda por hashtag musica = search_tweets2("#musica", n = 18000,lang = "es",retryonratelimit = TRUE) # este comando # permite buscar los hashtag. El parámetro retryonratelimit es el tamaño de la información que se puede bajar # Ahora los datos de los usuarios que tweetean se obtienen aparte usuarios_musica = users_data(musica) # Busqueda por multiples hashtag estadistica = search_tweets2( c("\"data science\"", "rstats", "python"), n = 20000, type = "mixed",lang = "en",retryonratelimit=TRUE) usuarios_estadistica = users_data(estadistica) # Busqueda por usuario nasa = get_timeline("NASA", n = 3200) elon = get_timeline("elonmusk", n = 50000,retryonratelimit=TRUE) # Se unen los tweets con la información de los usuarios musica_comp = data.frame(usuarios_musica,musica) estadistica_comp = data.frame(usuarios_estadistica,estadistica) # GUARDANDO EN DISCO LOS DATOS saveRDS(musica_comp,'musica.rds') saveRDS(estadistica_comp,'estadistica.rds') ###### SELECCIONANDO LOS DATOS ##### datos0 = estadistica_comp # el conjunto de datos a analizar: música, estadistica, etc. # Numero de datos brutos y Numero de columnas nrow(datos0) # número de filas de tweets ncol(datos0) # número de columnas # Seleccionamos sólo parte de las 66 columnas datos = select(datos0,crea_cuenta = created_at,crea_tweet = created_at.1, id_cuenta = id_str,id_tweet= id_str.1, name, screen_name, location,verified,full_text,display_text_range, retweet_count,quote_count,reply_count,favorite_count,friends_count,retweeted) #### ALGUNAS ESTADISTICAS DE LOS DATOS #### head(datos,5) # Vemos las primeras 5 filas del archivo # Lista de nombres de los usuarios que tweetearon name_usuarios = datos %>% arrange(screen_name) %>% pull(screen_name) %>% unique() head(name_usuarios,10) # Número de usuarios que tweetearon tot_usuarios = datos %>% pull(screen_name) %>% unique() %>% length() tot_usuarios # Número de tweets diferentes tot_twt = datos %>% pull(full_text) %>% unique() %>% length() tot_twt # Número de usuarios que tweetearon un mensaje original;es decir, no retweeteado tot_usuarios_tweet_orig = datos %>% filter(!retweeted) %>% pull(screen_name) %>% unique() %>% length() tot_usuarios_tweet_orig # Número de tweets originales tot_twt_orig = datos %>% filter(!retweeted) %>% pull(full_text) %>% unique() %>% length() tot_twt_orig # Número de tweets originales por cada usuario twt_per_us_orig = datos %>% filter(!retweeted) %>% group_by(screen_name)%>% unique() %>% count(sort = TRUE) head(twt_per_us_orig,20) # Numero de tweets por locación twt_per_local_orig = datos %>% filter(!retweeted) %>% group_by(location)%>% unique() %>% count(sort = TRUE) head(twt_per_local_orig,20) # tweets originales y Numero de veces que han sido retweeteados, twt_orig = datos %>% filter(!retweeted) %>% group_by(full_text) %>% summarise(tot_rt = sum(retweet_count)) %>% arrange(desc(tot_rt)) # los 10 más retweeteados mas_retweeted = twt_orig %>% head(10) mas_retweeted ##### CONTEO DE PALABRAS POR LETRA INICIAL ##### ## Función de limpieza de textos limpieza_texto = function(tuit){ # Stopwords a ser eliminados, en ingles y español # elimina las preposiciones # u otros que se repiten y no dan información, verbos etc # Stopwords tiene ya unas listas. lista_stopwords = c(stopwords("es"),stopwords("en")) # Simbolos a ser removidos removidos = "&|<|>" # simbolos que la gente usa: "&|<|>" # Remocion de simbolos, separación de los textos con formato tweet en palabras, eliminacion de stopwords limpio = tuit %>% mutate(texto = str_remove_all(full_text, removidos)) %>% unnest_tokens(word, texto, token = "tweets") %>% # separa por palabras: brigramas, trigramas, ngramas, oraciones, etc filter(!word %in% lista_stopwords, # me quedo con los que no están en la lista del stopwords !word %in% str_remove_all(lista_stopwords, "'"), # elimina ..... str_detect(word,"[a-z]"), # detecta solo palabras con letras y se queda con esas str_detect(word,"http",negate = TRUE) ) return(limpio) } ### Frecuencia de las palabras freq_word = token_twt %>% count(word, sort = TRUE) head(data.frame(freq_word),5 ) # Se mide cuantos caracteres tiene cada palabra freq_word$largo = str_length(freq_word$word) head(freq_word,10) # Se consideran solo palabras con más de 3 letras y menos de 25 palabras = freq_word %>% filter(largo>=3,largo<=25) head(palabras,10) # Se extrae la inicial de cada palabra palabras$inicial = str_sub(palabras$word,1,1) head(palabras,10) # numero de palabras por inicial de la letra/simbolo cuenta = palabras %>% group_by(inicial) %>% summarise(cuenta = length(word)) head(cuenta,15) #palabras más frecuentes por inicial de la letra/simbolo subp = palabras %>% group_by(inicial) %>% slice_head(n=1) %>% select(-largo) cuenta1 = inner_join(cuenta,subp,by="inicial") head(cuenta1,15) names(cuenta1) = c("inicial", "total_palabras", "mas_repetida" , "repeticiones_mr") # Nos quedamos solo con los que inician con un caracter alfabetico final = cuenta1[cuenta1$inicial %in% letters,] head(final,15)