Minería de los tweets de Emma Watson con R

Publicado: 2018-02-03
Mostrar tabla de contenido
Extrayendo los datos de Twitter de Emma Watson
Análisis exploratorio
Tweets por año
Frecuencia de tuits a lo largo de los meses
Frecuencia de tweets a lo largo de una semana
Densidad de tweets a lo largo de un día
Comparación del número de retuits y tuits originales
Extracción de textos
1. Hashtags de uso frecuente
2. Nube de palabras
3. Análisis de sentimiento
A ti

El flujo de Twitter de cualquier persona contiene abundante información social que puede revelar mucho sobre esa persona. Dado que los datos de Twitter son públicos y la API está abierta para que cualquiera la use, las técnicas de extracción de datos se pueden aplicar fácilmente para descubrir todo, desde los patrones de tiempo y los temas en los que se enfoca la persona hasta los patrones de texto utilizados para expresar puntos de vista y pensamientos.

Datos de Twitter de Emma Watson

En este estudio, usaremos R para realizar análisis en los tweets publicados por una de las celebridades más famosas, es decir, Emma Watson. Primero pasaremos por el análisis exploratorio y luego pasaremos al análisis de texto.

Extrayendo los datos de Twitter de Emma Watson

La API de Twitter nos permite descargar 3200 tweets recientes; todo lo que tenemos que hacer es crear una aplicación de Twitter para obtener la clave API y el token de acceso. Siga los pasos que se indican a continuación para crear la aplicación:

  1. Abre https://apps.twitter.com
  2. Haga clic en 'Crear nueva aplicación'
  3. Introduce los datos y haz clic en 'Crea tu aplicación de Twitter'
  4. Haga clic en la pestaña 'Claves y tokens de acceso' y copie la clave API y el secreto
  5. Desplácese hacia abajo y haga clic en "Crear mi token de acceso"

Hay una biblioteca R llamada rtweet que se usará para descargar los tweets y crear un marco de datos. Use el código que se proporciona a continuación para continuar:

[lenguaje del código=”r”]
instalar.paquetes(“httr”)
instalar.paquetes ("rtweet")
biblioteca ("httr")
biblioteca ("rtweet")
# el nombre de la aplicación de twitter creada por ti
nombre de la aplicación <- "análisis de tweets"
# clave api (reemplace la siguiente muestra con su clave)
clave <- “8YnCioFqKFaebTwjoQfcVLPS”
# api secret (reemplace lo siguiente con su secreto)
secreto <- “uSzkAOXnNpSDsaDAaDDDSddsA6Cukfds8a3tRtSG”
# crear token llamado "twitter_token"
twitter_token <- crear_token(
aplicación = nombre de la aplicación,
consumidor_clave = clave,
consumidor_secreto = secreto)
#Descargando los tuits publicados por Emma Watson
ew_tweets <- get_timeline(“EmmaWatson”, n = 3200)
[/código]

Análisis exploratorio

Aquí resumiremos el conjunto de datos visualizando lo siguiente:

  1. Número de tuits publicados entre 2010 y 2018
  2. Frecuencia de tuits a lo largo de los meses
  3. Frecuencia de tweets a lo largo de una semana
  4. Densidad de tweets a lo largo de un día
  5. Comparación del número de retuits y tuits originales

Tweets por año

Usaremos la increíble biblioteca ggplot2 y lubridate para trazar gráficos y trabajar con las fechas. Continúe y siga el código que se proporciona a continuación para instalar y cargar los paquetes:

[lenguaje del código=”r”]
instalar.paquetes ("ggplot2")
install.packages(“lubricar”)
biblioteca ("ggplot2")
biblioteca ("lubridar")
[/código]

Ejecute el siguiente código para trazar el recuento de tweets a lo largo de los años desglosándolos en meses:

[lenguaje del código=”r”]
ggplot(datos = ew_tweets,
aes(mes(creado_en, etiqueta=VERDADERO, abbr=VERDADERO),
grupo=factor(año(creado_en)), color=factor(año(creado_en))))+
geom_line(stat=”recuento”) +
geom_point(stat=”recuento”) +
labs(x=”Mes”, color=”Año”) +
xlab(“Mes”) + ylab(“Número de tweets”) +
tema_minimal()
[/código]

El resultado es el siguiente gráfico:

minar twitter usando r

Podemos ver la ruptura de los tweets mensuales (picos en marzo de 2014, marzo de 2016 y octubre de 2015) a lo largo de los años, pero la interpretación es difícil. Ahora simplifiquemos el gráfico trazando solo los recuentos de tweets por año.

[lenguaje del código=”r”]
ggplot(datos = ew_tweets, aes(x = año(creado_en))) +
geom_bar(aes(llenar = ..contar..)) +
xlab(“Año”) + ylab(“Número de tuits”) +
scale_x_continuous (descansos = c(2010:2018)) +
tema_minimal() +
scale_fill_gradient(bajo = “cadetblue3”, alto = “chartreuse4”)
[/código]

El gráfico resultante muestra que estuvo más activa en 2015 y 2016, mientras que 2011 fue testigo de la menor actividad.

minar twitter usando r

Frecuencia de tuits a lo largo de los meses

Averigüemos ahora en los datos de Twitter de Emma Watson para ver si tuitea por igual durante los meses de un año o si hay meses específicos en los que tuitea más. Use el siguiente código para crear el gráfico:

[lenguaje del código=”r”]
ggplot(datos = ew_tweets, aes(x = mes(creado_en, etiqueta = VERDADERO))) +
geom_bar(aes(llenar = ..contar..)) +
xlab(“Mes”) + ylab(“Número de tweets”) +
tema_minimal() +
scale_fill_gradient(bajo = “cadetblue3”, alto = “chartreuse4”)
[/código]

Claramente, es más activa durante 'enero', 'marzo' y 'septiembre'.

minar twitter usando r

Frecuencia de tweets a lo largo de una semana

¿Hay algún día específico de la semana en el que sea más activa? Tracemos el gráfico ejecutando el siguiente código:

[lenguaje del código=”r”]
ggplot(data = ew_tweets, aes(x = wday(created_at, label = TRUE))) +
geom_bar(aes(llenar = ..contar..)) +
xlab(“Día de la semana”) + ylab(“Número de tuits”) +
tema_minimal() +
scale_fill_gradient(bajo = “turquesa3”, alto = “verde oscuro”)
[/código]

Hmm… ella está más activa los viernes. ¿Probablemente preparándose para entrar en modo fiesta?

minar twitter usando r

Densidad de tweets a lo largo de un día

Hemos averiguado el día más activo, pero no sabemos el momento en el que está más activa. El siguiente cuadro nos dará la respuesta.

[lenguaje del código=”r”]
# paquete para almacenar y formatear la hora del día
instalar.paquetes(“hms”)
# paquete para agregar pausas de tiempo y etiquetas
install.packages(“escalas”)
biblioteca ("hms")
biblioteca ("escalas")
# Extraiga solo el tiempo de la marca de tiempo, es decir, hora, minuto y segundo
ew_tweets$tiempo <- hms::hms(segundo(ew_tweets$creado_en),
minuto(ew_tweets$creado_en),
hora(ew_tweets$created_at))
# Convertir a `POSIXct` ya que ggplot no es compatible con `hms`
ew_tweets$tiempo <- as.POSIXct(ew_tweets$tiempo)
ggplot(datos = ew_tweets)+
geom_density(aes(x = tiempo, y = ..escalado..),
relleno = "verde vivo oscuro 4", alfa = 0.3) +
xlab(“Tiempo”) + ylab(“Densidad”) +
scale_x_datetime(breaks = date_breaks(“2 horas”),
etiquetas = formato_fecha(“%H:%M”)) +
tema_minimal()
[/código]

Esto nos dice que ella está más activa entre las 6 y las 8 p. m. Tenga en cuenta que la zona horaria es UTC (se puede averiguar usando la función `unclass`).

minar twitter usando r

Comparación del número de retuits y tuits originales

Ahora compararemos la cantidad de tweets originales y retweets. A continuación se muestra el código:

[lenguaje del código=”r”]
ggplot(datos = ew_tweets, aes(x = created_at, fill = is_retweet)) +
geom_histograma(contenedores=48) +
xlab(“Tiempo”) + ylab(“Número de tweets”) + theme_minimal() +
scale_fill_manual(valores = c(“chartreuse4”, “chartreuse3”),
nombre = “Retwittear”)
[/código]

La mayoría de los tweets son tweets originales. Es interesante ver que el número de re-tweets aumentó desde 2014.

minar twitter usando r

Extracción de textos

Pasemos ahora a un área más interesante: realizaremos técnicas de minería de texto, incluida la PNL, para descubrir lo siguiente:

1. Hashtags de uso frecuente
2. Nube de palabras de los textos de los tuits
3. Análisis de sentimiento

1. Hashtags de uso frecuente

El conjunto de datos descargado ya tiene una columna que contiene hashtags; lo usaremos para descubrir los 10 hashtags principales utilizados por Emma. A continuación se muestra el código para crear el gráfico para los hashtags:

[lenguaje del código=”r”]
# Paquete para trabajar fácilmente con marcos de datos
instalar.paquetes(“dplyr”)
biblioteca ("dplyr")
# Obtener los hashtags de la lista
ew_tags_split <- unlist(strsplit(as.character(unlist(ew_tweets$hashtags)),'^c(|,|”|)'))
# Formateo eliminando el espacio en blancoa
ew_tags <- sapply(ew_tags_split, function(y) nchar(trimws(y)) > 0 & !is.na(y))
ew_tag_df <- as_data_frame(table(tolower(ew_tags_split[ew_tags])))
ew_tag_df <- ew_tag_df[con(ew_tag_df,orden(-n)),]
ew_tag_df <- ew_tag_df[1:10,]
ggplot(ew_tag_df, aes(x = reordenar(Var1, -n), y=n)) +
geom_bar(stat=”identidad”, fill=”darkslategray”)+
tema_minimal() +
xlab(“#Hashtags”) + ylab(“Recuento”)
[/código]

Podemos ver que, como Embajadora de Buena Voluntad de ONU Mujeres, Emma Watson ha promovido la campaña “HeForShe” que se centra en la igualdad de género. Aparte de eso, ha promovido su club de lectura llamado "Nuestro estante compartido" y "Día internacional de la mujer". Viniendo al cine, "Noah", "La Bella y la Bestia" aparecen entre los 10 hashtags principales.

minar twitter usando r

2. Nube de palabras

Ahora analizaremos el texto del tweet para encontrar las palabras más frecuentes y crear una nube de palabras. Ejecute el siguiente código para continuar:

[lenguaje del código=”r”]
#instalar paquete de minería de texto y nube de palabras
install.packages(c(“tm”, “nube de palabras”))
biblioteca ("tm")
biblioteca ("nube de palabras")
tweet_text <- ew_tweets$texto
#Eliminación de números, signos de puntuación, enlaces y contenido alfanumérico
tweet_text<- gsub('[[:dígito:]]+', ”, tweet_text)
tweet_text<- gsub('[[:punto:]]+', ”, tweet_text)
tweet_text<- gsub(“http[[:alnum:]]*”, “”, tweet_text)
tweet_text<- gsub(“([[:alpha:]])1+”, “”, tweet_text)
#creando un corpus de texto
documentos <- Corpus(VectorSource(tweet_text))
# convertir la codificación a UTF-8 para manejar personajes divertidos
documentos <- tm_map(docs, function(x) iconv(enc2utf8(x), sub = “byte”))
# Convirtiendo el texto a minúsculas
documentos <- tm_map(docs, content_transformer(tolower))
# Eliminar palabras vacías comunes en inglés
docs <- tm_map(docs, removeWords, stopwords(“english”))
# Eliminar palabras vacías especificadas por nosotros como un vector de caracteres
documentos <- tm_map(docs, removeWords, c(“amp”))
# creando una matriz de documentos de términos
tdm <- TermDocumentMatrix(docs)
# definiendo tdm como matriz
m <- como.matriz(tdm)
# obtener recuentos de palabras en orden decreciente
word_freqs = sort(rowSums(m), decreciente=VERDADERO)
# creando un marco de datos con palabras y sus frecuencias
ew_wf <- data.frame(palabra=nombres(palabra_frecuencias), frecuencia=palabra_frecuencias)
# nube de palabras de trazado
set.seed(1234)
wordcloud(palabras = ew_wf$palabra, frecuencia = ew_wf$frecuencia,
min.freq = 1,escala=c(1.8,.5),
max.words=200, random.order=FALSE, rot.per=0.15,
colores=cervecero.pal(8, “Oscuro2”))
[/código]

Claramente, ha realizado una gran promoción para la campaña "HeforShe". Otras palabras de uso frecuente son “gracias”, “amor”, “mujeres”, “género” y “ONU-Mujeres”. Esto está claramente en línea con los hashtags que sugieren que su actividad en Twitter está bastante enfocada en temas de mujeres.

nube de palabras de tuit

3. Análisis de sentimiento

Para la extracción de sentimientos y el trazado, aplicaremos el paquete syuzhet . Este paquete se basa en un léxico de emociones que mapea diferentes palabras con varias emociones (alegría, miedo, ira, sorpresa, etc.) y polaridad de sentimiento (positivo/negativo). Tendremos que calcular la puntuación de emoción en función de las palabras presentes en los tweets y trazar lo mismo.

[lenguaje del código=”r”]
install.packages(“syuzhet”)
biblioteca (syuzhet)
# Conversión de tweets a ASCII para rastrear caracteres extraños
tweet_text <- iconv(tweet_text, from=”UTF-8″, to=”ASCII”, sub=””)
# eliminando retuits
tweet_text<-gsub(“(RT|via)((?:bw*@w+)+)”,””,tweet_text)
# eliminando menciones
tweet_text<-gsub(“@w+”,””,tweet_text)
ew_sentiment<-get_nrc_sentiment((tweet_text))
puntuaciones de sentimientos<-data.frame(colSums(ew_sentiment[,]))
nombres(puntuaciones de sentimientos) <- “Puntuación”
puntuaciones de opinión <- cbind(“opinión”=nombresdefila(puntuaciones de opinión),puntuaciones de opinión)
nombres de filas (puntuaciones de opiniones) <- NULL
ggplot(data=puntuaciones de sentimientos,aes(x=sentimiento,y=puntuación))+
geom_bar(aes(fill=sentimiento),stat = “identidad”)+
tema(leyenda.posición=”ninguno”)+
xlab(“Sentimientos”)+ylab(“Puntajes”)+
ggtitle(“Total sentimiento basado en puntajes”)+
tema_minimal()
[/código]

El siguiente gráfico muestra que los tweets tienen un sentimiento mayormente positivo. Las tres emociones más expresadas son 'alegría', 'confianza' y 'anticipación'.

Puntaje de análisis de sentimiento de Twitter

A ti

En este estudio, cubrimos el análisis exploratorio de datos y las técnicas de minería de textos para comprender los patrones de tuits y el tema subyacente de los tuits publicados por Emma Watson. Se pueden realizar análisis adicionales para encontrar el usuario de Twitter mencionado con frecuencia, crear un gráfico de red y clasificar los tweets mediante el modelado de temas.

Siga este tutorial y comparta sus hallazgos en la sección de comentarios.


Twitter-datos