LoslegenKostenlos loslegen

Mehr als Worte: Tokenisierung (2)

Mit dem Paket tidytext kannst du Textdaten mit "tidyverse"-Paketen wie dplyr und sparklyr analysieren. Wie man Sentiment-Analyse im Detail durchführt, sprengt den Rahmen dieses Kurses; mehr dazu findest du im Kurs Sentiment Analysis. Diese Übung soll dir einen schnellen Eindruck vermitteln, wie das in Spark funktioniert.

Bei der Sentiment-Analyse weist du im Kern jedem Wort einen Wert oder eine Emotion zu. Im AFINN-Lexikon hat zum Beispiel das Wort "outstanding" einen Score von +5, weil es fast immer positiv verwendet wird. "grace" ist leicht positiv mit einem Score von +1. "fraud" wird meistens negativ genutzt und hat einen Score von -4. Der Datensatz mit den AFINN-Scores wird von get_sentiments("afinn") zurückgegeben. Der entnestete Wortdatensatz und das Sentiment-Lexikon wurden der Einfachheit halber bereits nach Spark kopiert.

Typischerweise möchtest du die Stimmung mehrerer Gruppen von Daten vergleichen. Das Muster sieht so aus:

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

Ein Inner Join nimmt alle Werte aus der ersten Tabelle und sucht Übereinstimmungen in der zweiten. Wenn eine Übereinstimmung gefunden wird, werden die Daten aus der zweiten Tabelle hinzugefügt. Anders als ein Left Join verwirft er Zeilen ohne Treffer. Das Prinzip zeigt diese Grafik.

An inner join, explained using table of colors.

Wie Left Joins zählen auch Inner Joins zu den mutierenden Joins, da sie Spalten zur ersten Tabelle hinzufügen. Überlege, welche Funktion du für Inner Joins verwendest und wie. (Hinweis: Die Verwendung ist der von left_join(), anti_join() und semi_join() sehr ähnlich!)

Diese Übung ist Teil des Kurses

Einführung in Spark mit sparklyr in R

Kurs anzeigen

Anleitung zur Übung

Eine Spark-Verbindung wurde als spark_conn für dich erstellt. Tibbles mit den Titelwörtern und dem in Spark gespeicherten Sentiment-Lexikon sind bereits als title_text_tbl bzw. afinn_sentiments_tbl definiert.

  • Erstelle eine Variable namens sentimental_artists aus title_text_tbl.
    • Verwende inner_join(), um afinn_sentiments_tbl über "word" mit title_text_tbl zu verknüpfen.
    • Gruppiere nach artist_name.
    • Fasse zusammen, um eine Variable positivity zu definieren, die der Summe des Felds score entspricht.
  • Finde die 5 Künstler mit den negativsten Songtiteln.
    • Sortiere sentimental_artists nach aufsteigender positivity.
    • Verwende slice_max, um die Top 5 Ergebnisse zu erhalten.
  • Finde die 5 Künstler mit den positivsten Songtiteln.
    • Sortiere sentimental_artists nach absteigender positivity.
    • Hole die Top 5 Ergebnisse.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

# 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 bearbeiten und ausführen