ComenzarEmpieza gratis

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.

An inner join, explained using table of colors.

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

Ver curso

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_artists a partir de title_text_tbl.
    • Usa inner_join() para unir afinn_sentiments_tbl con title_text_tbl por "word".
    • Agrupa por artist_name.
    • Resume para definir una variable positivity, igual a la suma del campo score.
  • Encuentra los 5 artistas con los títulos de canciones más negativos.
    • Ordena sentimental_artists por positividad ascendente.
    • Usa slice_max para obtener los 5 mejores resultados.
  • Encuentra los 5 artistas con los títulos de canciones más positivos.
    • Ordena sentimental_artists por positividad descendente.
    • Obtén los 5 mejores resultados.

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
  ___
Editar y ejecutar código