Más que palabras: tokenización (2)
El paquete tidytext te permite analizar datos de texto usando paquetes del "tidyverse" como dplyr y sparklyr. Cómo hacer sentiment analysis queda fuera del alcance de este curso; puedes ver más en Sentiment Analysis. Este ejercicio está pensado para darte una idea rápida de cómo hacerlo en Spark.
La sentiment analysis básicamente te permite asignar una puntuación o emoción a cada palabra. Por ejemplo, en el léxico AFINN, la palabra "outstanding" tiene una puntuación de +5, ya que casi siempre se usa en un contexto positivo. "grace" es una palabra ligeramente positiva y tiene una puntuación de +1. "fraud" suele usarse en un contexto negativo y tiene una puntuación de -4. El conjunto de datos de puntuaciones AFINN se obtiene con get_sentiments("afinn"). Para tu comodidad, los datos de palabras expandidos (unnested) y el léxico de sentimientos se han copiado a Spark.
Normalmente, querrás comparar el sentimiento de varios grupos de datos. Para ello, el patrón de código es el siguiente.
text_data %>%
inner_join(sentiments, by = "word") %>%
group_by(some_group) %>%
summarize(positivity = sum(score))
Un inner join toma todos los valores de la primera tabla y busca coincidencias en la segunda. Si encuentra una coincidencia, añade los datos de la segunda tabla. A diferencia de un left join, eliminará las filas en las que no encuentre coincidencias. El principio se muestra en este diagrama.

Al igual que los left joins, los inner joins son un tipo de mutating join, ya que añaden columnas a la primera tabla. Intenta adivinar qué función se usa para los inner joins y cómo usarla. (Pista: su uso es muy similar a left_join(), anti_join() y semi_join()).
Este ejercicio forma parte del curso
Introducción a Spark con sparklyr en R
Instrucciones del ejercicio
Se ha creado una conexión a Spark llamada spark_conn. Los tibbles con las palabras de los títulos y el léxico de sentimientos almacenados en Spark se han predefinido como title_text_tbl y afinn_sentiments_tbl, respectivamente.
- Crea una variable llamada
sentimental_artistsa partir detitle_text_tbl.- Usa
inner_join()para unirafinn_sentiments_tblcontitle_text_tblpor"word". - Agrupa por
artist_name. - Resume para definir una variable
positivity, igual a la suma del camposcore.
- Usa
- Encuentra los 5 artistas con los títulos de canciones más negativos.
- Ordena
sentimental_artistspor positividad ascendente. - Usa
slice_maxpara obtener los 5 mejores resultados.
- Ordena
- Encuentra los 5 artistas con los títulos de canciones más positivos.
- Ordena
sentimental_artistspor positividad descendente. - Obtén los 5 mejores resultados.
- Ordena
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# title_text_tbl, afinn_sentiments_tbl have been pre-defined
title_text_tbl
afinn_sentiments_tbl
sentimental_artists <- title_text_tbl %>%
# Inner join with sentiments on word field
___ %>%
# Group by artist
___ %>%
# Summarize to get positivity
___
sentimental_artists %>%
# Arrange by ascending positivity
___ %>%
# Get top 5
___
sentimental_artists %>%
# Arrange by descending positivity
___ %>%
# Get top 5
___