if (!require("pacman")) install.packages("pacman")
::p_load(
pacman# file management
here, qs, # data wrangling
magrittr, janitor, # data analysis
easystats, sjmisc, # table visualization
gt, gtExtras, # visualization
ggpubr, ggwordcloud, # text analysis
tidytext, widyr,
openalexR, # load last to avoid masking issues
tidyverse )
Text processing with R
Session 08 - Exercise
Ziel der Anwendung: Textanalyse in R kennenlernen
- Auffrischung der Grundkenntnisse im Umgang mit R, tidyverse und ggplot2
- Typische Schritte der Textanalyse mit
tidytext
kennenlernen, von der Tokenisierung bis zur Visualisierung.
Background
Todays’s data basis: OpenAlex
Via API bzw. openalexR (Aria et al. 2024) gesammelte “works” der Datenbank OpenAlex mit Bezug zu Literaturriews in den Sozialwissenschaften zwischen 2013 und 2023
Detaillierte Informationen und Ergebnisse zur Suchquery finden Sie hier.
Preparation
Wichtige Information
- Bitte stellen Sie sicher, dass Sie das jeweilige R-Studio Projekt zur Übung geöffnet haben. Nur so funktionieren alle Dependencies korrekt.
- Um den einwandfreien Ablauf der Übung zu gewährleisten, wird für die Aufgaben auf eine eigenständige Datenerhebung verzichtet und ein Übungsdatensatz zu verfügung gestelt.
Packages
Import und Vorverarbeitung der Daten
# Import from local
<- qs::qread(here("data/session-07/openalex-review_works-2013_2023.qs"))
review_works
# Create correct data
<- review_works %>%
review_works_correct mutate(
# Create additional factor variables
publication_year_fct = as.factor(publication_year),
type_fct = as.factor(type)
)
🛠️ Praktische Anwendung
Achtung, bitte lesen!
- Bevor Sie mit der Arbeit an den folgenden 📋 Exercises beginnen, stellen Sie bitte sicher, dass Sie alle Chunks des Abschnitts Preparation gerendert haben. Das können Sie tun, indem Sie den “Run all chunks above”-Knopf
des nächsten Chunks benutzen.
- Bei Fragen zum Code lohnt sich ein Blick in den Showcase (.qmd oder .html). Beim Showcase handelt es sich um eine kompakte Darstellung des in der Präsentation verwenden R-Codes. Sie können das Showcase also nutzen, um sich die Code-Bausteine anzusehen, die für die R-Outputs auf den Slides benutzt wurden.
📋 Exercise 1: Neues Subsample
Ziel der Aufgabe
- Erstellung eines neuen Datensatzes
review_subsample_new
, der sich auf englischsprachig Bücher bzw. Buchrartikel beschränkt.
- Erstellen Sie einen neuen Datensatz
review_subsample_new
- Basierend auf dem Datensatzes
review_works_correct
:- Nutzen Sie die
filter()
-Funktion, um- nur englischsprachige (
language
), - Bücher und Buchkapitel (
type
) herauszufiltern.
- nur englischsprachige (
- Speichern Sie diese Umwandlung in einem neuen Datensatz mit dem Namen
review_subsample_new
- Nutzen Sie die
- Basierend auf dem Datensatzes
- Überprüfen Sie die Transformation mit Hilfe der
glimpse()
-Funktion. - ✍️ Notieren Sie, wie viele Artikel im neuen Subsample enthalten sind.
# Erstellung Subsample
# Überprüfung
# Notiz:
# Subsample enthält ... Einträge
📋 Exercise 2: Umwandlung zu ‘tidy text’
- Erstellen Sie einen neuen Datensatz
subsample_new_tidy
,- Basierend auf dem Datensatz
review_subsample_new
, mit folgenden Schritten:- Tokenisierung der Abstracts (
ab
) mit der Funktionunnest_tokens
. - Ausschluss von Stoppwörter mit
filter
undstopwords$words
heraus. - Speichern Sie diese Umwandlung, indem Sie einen neuen Datensatz mit dem Namen
subsample_new_tidy
erstellen.
- Tokenisierung der Abstracts (
- Basierend auf dem Datensatz
- Prüfen Sie, ob die Umwandlung erfolgreich war (z.B. mit der Funktion
glimpse()
) - ✍️ Notieren Sie, wie viele Token im neuen Datensatz
subsample_new_tidy
enthalten sind.
# Erstellung des neuen Datensatzes `subsample_new_tidy`
# Überprüfung
# Notiz:
# Der neue Datensatz enthält ... Token.
📋 Exercise 3: Auswertung der Token
- Erstellen Sie einen neuen Datensatz
subsample_new_summarized
,- Fassen Sie auf der Grundlage des Datensatzes
subsample_new_tidy
die Häufigkeit der einzelnen Token zusammen, indem Sie die Funktioncount()
auf die Variabletext
anwenden. Verwenden Sie das Argumentsort = TRUE
, um den Datensatz nach absteigender Häufigkeit der Token zu sortieren. - Speichern Sie diese Transformation, indem Sie einen neuen Datensatz mit dem Namen
subsample_new_summarized
erstellen.
- Fassen Sie auf der Grundlage des Datensatzes
- Prüfen Sie, ob die Umwandlung erfolgreich war, indem Sie die Funktion
print()
verwenden.- Verwenden Sie das Argument
n = 50
, um die 50 wichtigsten Token anzuzeigen (nur möglich, wenn das Argumentsort = TRUE
bei der Ausführung der Funktioncount()
verwendet wurde)
- Verwenden Sie das Argument
- Verteilung der Token prüfen
- Verwenden Sie die Funktion
datawizard::describe_distribution()
, um verschiedene Verteilungsparameter des neuen Datensatzes zu überprüfen - ✍️ Notieren Sie, wie viele Token ein Abstract durchschnittlich enthält.
- Verwenden Sie die Funktion
- Optional: Ergebnisse mit einer Wortwolke überprüfen
- Basierend auf dem sortierten Datensatz
subsample_new_summarized
- Auswahl der 50 häufigsten Token mit Hilfe der Funktion
top_n()
- Erstellen Sie eine
ggplot()
-Basis mitlabel = text
undsize = n
alsaes()
und - Benutze ggwordcloud::geom_text_wordclout() um die Wortwolke zu erstellen.
- Verwenden Sie scale_size_are(), um die Skalierung der Wortwolke zu übernehmen.
- Verwenden Sie
theme_minimal()
für eine saubere Visualisierung.
- Auswahl der 50 häufigsten Token mit Hilfe der Funktion
- Basierend auf dem sortierten Datensatz
# Erstellung des neuen Datensatzes `subsample_new_summmarized`
# Preview Top 50 token
# Check distribution parameters
# Notiz:
# Ein Absatz enthält durchschnittlich ... Token.
# Optional: Check results with a wordcloud
📋 Exercise 4: Wortbeziehungen im Fokus
4.1 Couting word pairs
- Zählen von häufigen Wortpaaren
- Zählen Sie auf der Grundlage des Datensatzes
subsample_new_tidy
Wortpaare mitwidyr::pairwise_count()
, mit den Argumentenitem = text
,feature = id
undsort = TRUE.
- Speichern Sie diese Transformation, indem Sie einen neuen Datensatz mit dem Namen
subsample_new_word_pairs
erstellen.
- Zählen Sie auf der Grundlage des Datensatzes
- Prüfen Sie, ob die Umwandlung erfolgreich war, indem Sie die Funktion
print()
verwenden.- Verwenden Sie das Argument
n = 50
, um die 50 wichtigsten Token anzuzeigen (nur möglich, wenn bei der Ausführung der Funktioncount()
das Argumentsort = TRUE
verwendet wurde)
- Verwenden Sie das Argument
# Couting word pairs among sections
# Überprüfung
4.2 Pairwise correlation
- Ermittlung der paarweisen Korrelation
- Basierend auf dem Datensatz
subsample_new_tidy
, - gruppieren Sie die Daten mit der Funktion
group_by()
nach der Variabletext
und - verwenden Sie
filter(n() >= X)
, um nur Token zu verwenden, die mindestens in einer bestimmte Anzahl (X
) vorkommen; Sie können fürX
einen Wert Ihrer Wahl wählen, ich würde jedoch dringend empfehlen, einX > 100
zu wählen, da die folgende Funktion sonst möglicherweise nicht in der Lage ist, die Berechnung durchzuführen. - Erstellen Sie Wortkorrelationen mit
widyr::pairwise_cor()
, mit den Argumentenitem = text
,feature = id
undsort = TRUE
. - Speichern Sie diese Transformation, indem Sie einen neuen Datensatz mit dem Namen
subsample_new_corr
erstellen.
- Basierend auf dem Datensatz
- Prüfen Sie die Paare mit der höchsten Korrelation mit der Funktion
print().
.
# Getting pairwise correlation
# Check pairs with highest correlation
📋 Exercise 5: Inhaltlicher Vergleich
- Vergleichen Sie die Ergebnisse der Übung mit den Auswertungen der Folien:
- Wie unterscheiden sich die Ergebnisse?
- Würden Sie die Bücher bzw. Buchabschnitte mit in die Untersuchung integrieren?
References
Aria, Massimo, Trang Le, Corrado Cuccurullo, Alessandra Belfiore, and June Choe. 2024. “openalexR: An R-Tool for Collecting Bibliometric Data from OpenAlex.” The R Journal 15 (4): 167–80. https://doi.org/10.32614/rj-2023-089.