Aan de slagBegin gratis

Meer dan woorden: tokenization (2)

Met het tidytext-pakket kun je tekstdata analyseren met "tidyverse"-pakketten zoals dplyr en sparklyr. Hoe je precies sentimentanalyse doet valt buiten de scope van deze cursus; meer daarover vind je in de Sentiment Analysis. Deze oefening geeft je een kort voorproefje van hoe je dit in Spark kunt doen.

Sentimentanalyse laat je in essentie een score of emotie aan elk woord toekennen. In het AFINN-lexicon heeft het woord "outstanding" bijvoorbeeld een score van +5, omdat het bijna altijd in een positieve context wordt gebruikt. "grace" is licht positief en heeft een score van +1. "fraud" wordt meestal negatief gebruikt en heeft een score van -4. De AFINN-scoreset wordt geretourneerd door get_sentiments("afinn"). Voor het gemak zijn de uit-geunneste woorddata en het sentimentlexicon naar Spark gekopieerd.

Doorgaans wil je het sentiment van meerdere groepen gegevens vergelijken. De code ziet er dan als volgt uit.

text_data %>%
  inner_join(sentiments, by = "word") %>%
  group_by(some_group) %>%
  summarize(positivity = sum(score))

Een inner join neemt alle waarden uit de eerste tabel en zoekt naar overeenkomsten in de tweede tabel. Als er een match is, worden de gegevens uit de tweede tabel toegevoegd. In tegenstelling tot een left join worden rijen zonder match weggelaten. Dit principe zie je in dit diagram.

An inner join, explained using table of colors.

Net als left joins zijn inner joins een type mutating join, omdat ze kolommen aan de eerste tabel toevoegen. Kun jij raden welke functie je gebruikt voor inner joins en hoe je die toepast? (Hint: het gebruik lijkt sterk op left_join(), anti_join() en semi_join()!)

Deze oefening maakt deel uit van de cursus

Introductie tot Spark met sparklyr in R

Bekijk cursus

Oefeninstructies

Er is al een Spark-verbinding voor je aangemaakt als spark_conn. Tibbles met de titelwoorden en het sentimentlexicon die in Spark zijn opgeslagen, zijn respectievelijk vooraf gedefinieerd als title_text_tbl en afinn_sentiments_tbl.

  • Maak een variabele sentimental_artists op basis van title_text_tbl.
    • Gebruik inner_join() om afinn_sentiments_tbl te joinen met title_text_tbl op "word".
    • Groepeer op artist_name.
    • Vat samen in een variabele positivity, gelijk aan de som van het veld score.
  • Vind de top 5 artiesten met de meest negatieve songtitels.
    • Sorteer sentimental_artists op oplopende positiviteit.
    • Gebruik slice_max om de top 5 resultaten te krijgen.
  • Vind de top 5 artiesten met de meest positieve songtitels.
    • Sorteer sentimental_artists op aflopende positiviteit.
    • Haal de top 5 resultaten op.

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan te vullen.

# 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
  ___
Code bewerken en uitvoeren