if (!require("pacman")) install.packages("pacman")
pacman::p_load(
  here, qs, # file management
  magrittr, janitor, # data wrangling
  easystats, sjmisc, # data analysis
  ggpubr, # visualization
  openalexR, 
  tidyverse # load last to avoid masking issues
  )API mining and data wrangling with R
Session 07 - Exercise
In folgenden Übungsaufgaben dienen dazu, die Datengrundlage für die in den nächsten Sitzungen anstehende(n) Textanalyse(n) weiter inhaltlich plausibel einzugrenzen bzw. zu präzisieren.
Finales Ziel ist die Erstellung eines Code-Chunks, mit dessen Hilfe der Datensatz review_subsample erstellt werden soll. Bitte arbeitet die Übung durch, wir besprechen zu Anfang der nächsten Sitzung dann eure Vorschläge.
Background
OpenAlex is a free and open catalog of the global research system. It’s named after the ancient Library of Alexandria and made by the nonprofit OurResearch.

At the heart of OpenAlex is our dataset—a catalog of works. A work is any sort of scholarly output. A research article is one kind of work, but there are others such as datasets, books, and dissertations. We keep track of these works—their titles (and abstracts and full text in many cases), when they were created, etc. But that’s not all we do. We also keep track of the connections between these works, finding associations through things like journals, authors, institutional affiliations, citations, topics, and funders. There are hundreds of millions of works out there, and tens of thousands more being created every day, so it’s important that we have these relationships to help us make sense of research at a large scale.
Preparation
- 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
Zum Laden der Pakete wird das Paket
pacman::pload()genutzt, dass gegenüber der herkömmlichen Methode mitlibrary()eine Reihe an Vorteile hat:- Prägnante Syntax
 - Automatische Installation (wenn Paket noch nicht vorhanden)
 - Laden mehrerer Pakete auf einmal
 - Automatische Suche nach 
dependencies 
Import und Vorverarbeitung der Daten
# Import from local
review_works <- qs::qread(here("data/session-07/openalex-review_works-2013_2023.qs"))
# Create correct data
review_works_correct <- review_works %>% 
    mutate(
        # Create additional factor variables
        publication_year_fct = as.factor(publication_year), 
        type_fct = as.factor(type)
        )🛠️ Praktische Anwendung
- 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: Sprache der Publikationen
- Identifizieren Sie die für die Untersuchung relevanten Artikel auf Basis von deren Sprache (
language) - Hintergrundinformation zur Variable 
languagefinden Sie in der API-Dokumentation von OpenAlex. 
- Nutzen Sie die Funktion 
sjmisc::frq()und schauen Sie sich im Datensatzreview_works_correctdie Variablenlanguagean. Verwenden Sie das Argumentsort.frq = "desc", um die Häufigkeit der Sprachen absteigend zu sortieren. - Notieren Sie sich den jeweilgen ISO 639-1 language code, um Ihn später bei 📋 Exercise 4: Erstellung Subsample als Filter zu nutzen.
 
Lösung anzeigen
review_works_correct %>% 
    sjmisc::frq("language", sort.frq = "desc")language <character> 
# total N=93655 valid N=93476 mean=10.33 sd=2.27
Value |     N | Raw % | Valid % | Cum. %
----------------------------------------
en    | 90653 | 96.79 |   96.98 |  96.98
id    |  1118 |  1.19 |    1.20 |  98.18
pt    |   521 |  0.56 |    0.56 |  98.73
es    |   309 |  0.33 |    0.33 |  99.06
tr    |   182 |  0.19 |    0.19 |  99.26
ko    |   130 |  0.14 |    0.14 |  99.40
fr    |   127 |  0.14 |    0.14 |  99.53
ru    |    72 |  0.08 |    0.08 |  99.61
de    |    59 |  0.06 |    0.06 |  99.67
it    |    43 |  0.05 |    0.05 |  99.72
pl    |    36 |  0.04 |    0.04 |  99.76
fa    |    20 |  0.02 |    0.02 |  99.78
ro    |    20 |  0.02 |    0.02 |  99.80
ja    |    19 |  0.02 |    0.02 |  99.82
ca    |    16 |  0.02 |    0.02 |  99.84
uk    |    16 |  0.02 |    0.02 |  99.86
ar    |    15 |  0.02 |    0.02 |  99.87
th    |    14 |  0.01 |    0.01 |  99.89
nl    |    13 |  0.01 |    0.01 |  99.90
sv    |    13 |  0.01 |    0.01 |  99.91
hr    |    11 |  0.01 |    0.01 |  99.93
hu    |    11 |  0.01 |    0.01 |  99.94
sl    |    10 |  0.01 |    0.01 |  99.95
af    |     8 |  0.01 |    0.01 |  99.96
cs    |     6 |  0.01 |    0.01 |  99.96
da    |     5 |  0.01 |    0.01 |  99.97
el    |     5 |  0.01 |    0.01 |  99.97
bg    |     4 |  0.00 |    0.00 |  99.98
zh-cn |     4 |  0.00 |    0.00 |  99.98
et    |     3 |  0.00 |    0.00 |  99.99
lt    |     3 |  0.00 |    0.00 |  99.99
fi    |     2 |  0.00 |    0.00 |  99.99
mk    |     2 |  0.00 |    0.00 |  99.99
no    |     2 |  0.00 |    0.00 | 100.00
ta    |     2 |  0.00 |    0.00 | 100.00
cy    |     1 |  0.00 |    0.00 | 100.00
hi    |     1 |  0.00 |    0.00 | 100.00
<NA>  |   179 |  0.19 |    <NA> |   <NA>
Lösung anzeigen
# Notiz(en)
# - Überwiegende Anzahl der heruntergeladenen Datenbankbeiträge ist in englischer Sprache (en) verfasst.
# -Die Sprache en wird als Filterkriterium für die Erstellung des Subsamples genutzt, auch um spätere Probleme bei der Analyse durch multi-linguale Texte zu vermeiden.📋 Exercise 2: Typ der Publikationen
- Identifizieren Sie die für die Untersuchung relevanten Artikel auf Basis deres Typen (
type). - Hintergrundinformation zur Variable 
typefinden Sie in der API-Dokumentation von OpenAlex. 
- Nutzen Sie die Funktion 
sjmisc::frq()und schauen Sie sich im Datensatzreview_works_correctdie Variablentypean. Verwenden Sie das Argumentsort.frq = "desc", um die Typen in Abhängigkeit Ihrer Häufigkeit absteigend zu sortieren. - Notieren Sie sich die Ausprägungen der Variable type, die aus Ihrer Sicht später bei 📋 Exercise 4: Erstellung Subsample als Filter genutzt werden soll.
 
Lösung anzeigen
review_works_correct %>% 
    sjmisc::frq("type", sort.frq = "desc")type <character> 
# total N=93655 valid N=93655 mean=3.09 sd=4.64
Value                   |     N | Raw % | Valid % | Cum. %
----------------------------------------------------------
article                 | 73716 | 78.71 |   78.71 |  78.71
review                  |  6437 |  6.87 |    6.87 |  85.58
preprint                |  3570 |  3.81 |    3.81 |  89.40
book-chapter            |  2860 |  3.05 |    3.05 |  92.45
libguides               |  2414 |  2.58 |    2.58 |  95.03
dataset                 |  1471 |  1.57 |    1.57 |  96.60
peer-review             |  1400 |  1.49 |    1.49 |  98.09
dissertation            |   975 |  1.04 |    1.04 |  99.13
report                  |   422 |  0.45 |    0.45 |  99.58
book                    |   167 |  0.18 |    0.18 |  99.76
other                   |    64 |  0.07 |    0.07 |  99.83
paratext                |    57 |  0.06 |    0.06 |  99.89
erratum                 |    47 |  0.05 |    0.05 |  99.94
letter                  |    25 |  0.03 |    0.03 |  99.97
editorial               |    17 |  0.02 |    0.02 |  99.99
supplementary-materials |     7 |  0.01 |    0.01 |  99.99
reference-entry         |     6 |  0.01 |    0.01 | 100.00
<NA>                    |     0 |  0.00 |    <NA> |   <NA>
Lösung anzeigen
# Notiz(en)
# - Überwiegende Anzahl der heruntergeladenen Datenbankbeiträge sind `article.`
# - Die folgenden Auswertungen beziehen sich auf die Publikationen des Typs article, da uns besonders die praktische Anwendung/Umsetzung der Methode in verschiedenen Kontexten interessiert. Läge der Fokus auf (die Entwicklung) der Methode selbst, wäre vermutlich eher die Typen book oder book-chapter relevant.📋 Exercise 3: Forschungsfeld der Publikationen
Identifizieren Sie die für die Untersuchung relevanten Artikel auf Basis des von OpenAlex dem Artikel zugeordnenten Foschungsfeldes (
field))Hintergrundinformation zur Variable
fieldfinden Sie in der API-Dokumentation von OpenAlex.
- Basierend auf dem Datensatz 
review_works_correct- nutzen Sie die Funktion 
unnest()um die Variablen dertopics-Liste zu extrahieren. Verwenden Sie dabei das Argumentnames_sep = "_". um doppelte Variablennamen durch Hinzufügen des Prefixestopics_zu verhindern. - filtern Sie anschließen mit Hilfe der Funktion 
filterund der Variable bzw. dem Argumenttopics_name == "field"nur die Informationen zum Forschungsfeld, sowie mit der Variable bzw. dem Argumenttopics_i == "1"nur die erste Zuordnung. - Nutzen Sie die Funktion 
sjmisc::frq()und schauen Sie sich die Variablentopics_display_namean. Verwenden Sie das Argumentsort.frq = "desc", um die Forschungsfelder in Abhängigkeit Ihrer Häufigkeit absteigend zu sortieren. 
 - nutzen Sie die Funktion 
 - Notieren Sie sich die Ausprägungen der Variable topics_display_name, die aus Ihrer Sicht später bei 📋 Exercise 4: Erstellung Subsample als Filter genutzt werden soll.
 
Lösung anzeigen
review_works_correct %>% 
    unnest(topics, names_sep = "_") %>%
    filter(topics_name == "field") %>% 
    filter(topics_i == "1") %>% 
    sjmisc::frq("topics_display_name", sort.frq = "desc")topics_display_name <character> 
# total N=93655 valid N=93655 mean=4.41 sd=1.62
Value                               |     N | Raw % | Valid % | Cum. %
----------------------------------------------------------------------
Social Sciences                     | 30580 | 32.65 |   32.65 |  32.65
Psychology                          | 29054 | 31.02 |   31.02 |  63.67
Business, Management and Accounting | 15558 | 16.61 |   16.61 |  80.29
Decision Sciences                   |  7261 |  7.75 |    7.75 |  88.04
Economics, Econometrics and Finance |  6796 |  7.26 |    7.26 |  95.30
Arts and Humanities                 |  4406 |  4.70 |    4.70 | 100.00
<NA>                                |     0 |  0.00 |    <NA> |   <NA>
Lösung anzeigen
# Notiz(en)
# - Focus auf "primäre" Forschungsfelder `Social Sciences` & `Psychology`📋 Exercise 4: Erstellung Subsample
- Erstellung sie den Datensatz 
review_subsample, in dem Sie mit Hilfe der Funktionenselect()und/oderfilter()das Datenmaterial weiter eingrenzen. Sie können sich sowohl auf die Variablen aus der Übung, als auch auf die aus der Sitzung (bzw. den Slides) beziehen. - Der Code dieses Chunks wird in der nächsten Sitzung benötigt bzw. besprochen, halten Sie diesen deshalb bitte bereit.
 
Lösung anzeigen
review_subsample <- review_works_correct %>% 
  filter(language == "en") %>% # nur englischsprachige Einträge
  filter(type == "article") %>% # nur Artikel
  # Datentranformation
  unnest(topics, names_sep = "_") %>%
  filter(topics_name == "field") %>% 
  filter(topics_i == "1") %>% 
  filter(
    topics_display_name == "Social Sciences"|
    topics_display_name == "Psychology"
    ) %>%
  glimpse()Rows: 45,221
Columns: 45
$ id                          <chr> "https://openalex.org/W4293003987", "https…
$ title                       <chr> "The WHO-5 Well-Being Index: A Systematic …
$ display_name                <chr> "The WHO-5 Well-Being Index: A Systematic …
$ author                      <list> [<data.frame[4 x 12]>], [<data.frame[2 x …
$ ab                          <chr> "The 5-item World Health Organization Well…
$ publication_date            <chr> "2015-01-01", "2017-08-28", "2014-01-01", …
$ relevance_score             <dbl> 938.7603, 752.3500, 591.2553, 576.1210, 56…
$ so                          <chr> "Psychotherapy and psychosomatics", "Journ…
$ so_id                       <chr> "https://openalex.org/S184803288", "https:…
$ host_organization           <chr> "Karger Publishers", "SAGE Publishing", NA…
$ issn_l                      <chr> "0033-3190", "0739-456X", NA, "2214-7829",…
$ url                         <chr> "https://doi.org/10.1159/000376585", "http…
$ pdf_url                     <chr> "https://www.karger.com/Article/Pdf/376585…
$ license                     <chr> "cc-by-nc", NA, NA, "cc-by", NA, NA, "cc-b…
$ version                     <chr> "publishedVersion", NA, "publishedVersion"…
$ first_page                  <chr> "167", "93", NA, "89", "55", "2150", "e356…
$ last_page                   <chr> "176", "112", NA, "106", "64", "2159", "e3…
$ volume                      <chr> "84", "39", NA, "6", "277", "32", "2", "24…
$ issue                       <chr> "3", "1", NA, NA, NA, "19", "8", NA, "9", …
$ is_oa                       <lgl> TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE…
$ is_oa_anywhere              <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE,…
$ oa_status                   <chr> "hybrid", "green", "bronze", "gold", "bron…
$ oa_url                      <chr> "https://www.karger.com/Article/Pdf/376585…
$ any_repository_has_fulltext <lgl> FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE…
$ language                    <chr> "en", "en", "en", "en", "en", "en", "en", …
$ grants                      <list> NA, NA, NA, <"https://openalex.org/F43203…
$ cited_by_count              <int> 2657, 1375, 2568, 803, 3664, 1553, 2895, 9…
$ counts_by_year              <list> [<data.frame[11 x 2]>], [<data.frame[7 x …
$ publication_year            <int> 2015, 2017, 2014, 2016, 2020, 2014, 2017, …
$ cited_by_api_url            <chr> "https://api.openalex.org/works?filter=cit…
$ ids                         <list> <"https://openalex.org/W4293003987", "htt…
$ doi                         <chr> "https://doi.org/10.1159/000376585", "http…
$ type                        <chr> "article", "article", "article", "article"…
$ referenced_works            <list> <"https://openalex.org/W1492518593", "htt…
$ related_works               <list> <"https://openalex.org/W3020194755", "htt…
$ is_paratext                 <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, …
$ is_retracted                <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, …
$ concepts                    <list> [<data.frame[7 x 5]>], [<data.frame[18 x …
$ topics_i                    <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ topics_score                <dbl> 0.9926, 0.9050, 0.9995, 0.9987, 0.9999, 1.…
$ topics_name                 <chr> "field", "field", "field", "field", "field…
$ topics_id                   <chr> "https://openalex.org/fields/32", "https:/…
$ topics_display_name         <chr> "Psychology", "Social Sciences", "Psycholo…
$ publication_year_fct        <fct> 2015, 2017, 2014, 2016, 2020, 2014, 2017, …
$ type_fct                    <fct> article, article, article, article, articl…