Ein Blog zu Wirkungsorientierung, Wirkungsanalyse, Evaluation, Datenanalyse und Datenkompetenz in der Sozialen Arbeit

Reproduzierbares Reporting mit R und Word

Die Daten sind erhoben und die Auswertung steht an. In einem ersten Schritt wird meistens ein Ergebnisreport mit den deskriptiven Ergebnissen erstellt. Oft werden solche Reports oder Berichte in Word (oder entsprechenden Open-Source-Alternativen) erstellt. Meistens bedeutet dies aber auch, dass fleißig Tabellen und Grafiken von Auswertungsprogrammen nach Word kopiert werden. Das muss nicht sein, denn die Statistiksoftware R und Word können eine wunderbare Verbindung eingehen.

Ein weiterer Vorteil, der hier vorgetellten Lösung ist auch, dass diese automatisiert werden kann. Dadurch ist es ohne Probleme möglich den gleichen Report auch nur für einen Teildatensatz (z. B. eine Gruppe von Befragten) ausgeben zu lassen. Und mit der Erstellung des Ergebnisreports bzw. Berichtes in R ist dieser auch jederzeit reproduzierbar und man kann gut nachvollziehen welche Analysen und Auswertungen berücksichtigt werden. Doch beginnen wir mit dem Anfang.

Die Grundlage: rmarkdown und knitr

Um Reports und Bericht in R erstellen zu können gibt es das Paket knitr und rmarkdown. Markdown ist eine vereinfachte Auszeichnungssprache und macht Formatierungen in einem Fließtext möglich. Nachfolgend ein Beispiel:

# Das ist eine Überschrift auf Ebene 1

## Das ist eine Überschrift auf Ebene 2

**Das ist ein Text der fett gedruckt ist**Code language: PHP (php)

Die Besonderheit von rmarkdown und knitr ist, dass in ein Markdown-Dokument auch Auswertungsblöcke integriert werden können. Eine Markdown-Datei kann z. B. einfach in R-Studio erstellt werden. Wichtig ist, dass diese die Dateiendung .rmd hat und nicht nur .r wie ein R-Skript. Diese Ausswertungsblöcke sind sog. Chunks und sehen so aus:

# Das ist eine Auswertung

Hier kommt eine einfache Auswertung:

```{r}
# Hier beginnt der Chunk und das # leitet einen Kommentar ein.
var1 <- c(1,1,1,2,2,1,2,3,3,4,4,5,5,5,6,5,4,3)

table(var1)
```Code language: PHP (php)

Innerhalb eines Chunks kann dann R-Code eingefügt werden. Mit dem Paket knitr kann nun das Markdown-Dokument in verschiedene Format umgewandelt werden. Neben HTML und PDF steht hier auch das Word-Format zur Verfügung (mit der Hilfe des kleinen Programms Pandoc). Um einen Output in Word zu erzeugen, muss das entsprechende Output-Format in der R-Markdown-Datei hinterlegt werden. Dies geschieht immer am Anfang des Dokumentes:

---
title: "Ein einfaches Beispiel"
author: "Sebastian Ottmann"
output: word_document
---

## R Markdown

Die ist ein einfaches Word-Beispiel mit Markdown und knitr:

```{r cars}
summary(cars)
```Code language: PHP (php)

Dies ist ein Auszug aus einer Beispieldatei. Der Word-Output kann hier heruntergeladen und eingesehen werden:

Durch dieses Vorgehen ist schon mal sichergestellt, dass kein Copy und Paste stattfinden muss, da man eine Word-Datei erhält, die neben dem Fließtext auch gleich die Ergebnisse und Grafiken der Datenanalyse erhalten.

Für eine Automatisierung und einer Professionalisierung wäre es aber natürlich gut, wenn der Output gleich an das Corporate Design der Organisation angepasst ist. Dies ist auch möglich, man kann in den Header der Markdown-Datei ein Referenz-Dokument integrieren, das bei der Erstellung des Word-Dokumentes herangezogen wird. Dieses Referenzdokument ist eine leere Word-Seite in der man beispielsweise Formatvorlagen und Kopf- und Fußzeilen definieren kann.

---
title: "Ein Beispiel mit Erweiterungen"
author: "Sebastian Ottmann"
date: "21 10 2020"
output:
  word_document:
    reference_docx: 'ressourcen/rmarkdown_reference.docx'
---Code language: JavaScript (javascript)

Um noch weitere Formatierungsmöglichkeiten zu haben, lohnt sich ein Blick ins “officeverse”.

officeverse – weiterführende Funktionen fürs Reporting

Unter officeverse hat David Gohel verschiedene R-Pakete entwickelt, die die Zusammenarbeit mit Word und Powerpoint erleichtern. Mit dem Paket officedown stellt er weitere Funktionen für Markdown-Dokumente mit der Möglichkeit eines Word-Outputs zur Verfügung. So gibt es unter anderen Funktionen ein Deckblatt in die Word-Datei hinzuzufügen, ein Inhaltsverzeichnis einzufügen oder auch das Seitenformat zu ändern.

Um officedown verwenden zu können, muss das Output-Format von word_document auf officedown::rdocx_document geändert werden. Hier kann man genauso eine Vorlage hinterlegen.

---
output: 
  officedown::rdocx_document:
    reference_docx: 'ressourcen/rmarkdown_reference_erste_seite_ohne.docx'
---Code language: PHP (php)

Allerdings ist es nun möglich im Dokument weitere Ergänzungen vorzunehmen. So kann man z. B. Word-Dokumente miteinbinden (z. B. ein Deckblatt oder mehrere Seiten Fließtext die man nicht in der Markdown-Datei schreiben möchte):

<!---BLOCK_POUR_DOCX{file: 'ressourcen/bericht_deckblatt.docx'}--->Code language: HTML, XML (xml)

Ein Inhaltsverzeichnis kann mit folgenden Kommando eingefügt werden, dadurch wird ein Inhaltsverzeichnis in das Word-Dokument eingefügt, das ganz normal in Word bearbeitet werden kann.

<!---BLOCK_TOC--->Code language: HTML, XML (xml)

Ein ausführliches R-Markdown-Skript mit officedown mit weiteren Beispielen und Funktionen kann in meinem Git-Repository abgerufen werden. Die fertige Word-Datei ist hier zu finden:

In diesem Beispieldokument werden auch formatierte Tabellen sowie Literaturverweise ausgegeben. Nachfolgend möchte ich daher noch kurz darstellen, wie diese beiden Funktionen in ein R-Markdown-Dokument integriert werden können.

flextable – Tabellen formatieren und in Word ausgeben

David Gohel hat auch das Paket flextable entwickelt. Mit diesem Paket ist es möglich, Tabellen in R zu formatieren und u. a. auch in Word auszugeben. Dieses bietet vielfältige Formatierungsmöglichkeiten, angefangen von der Veränderung von Schriftart und Schriftfarbe, aber auch die Möglichkeit Grafiken in die Tabelle einzufügen, wenn die dargestellten Werte eine bestimmte Größe aufweisen bzw. diese farbig zu markieren. Um mit Flextable arbeiten zu können, muss beispielsweise ein Dataframe in R als Flextable-Objekt umgewandelt werden. Danach können verschiedene Formatierungen auf dieses Objekt angewendet werden. Ein kleines Beispiel nachfolgend (ein ausführlicheres Beispiel ist in o.g. R-Markdown-Datei zum officeverse enthalten):

# Umwandlung eines Dataframe in ein Flextable-Objekt
ft <- flextable(head(mtcars, n = 10))

# Formatierung der Schriftgröße und Schriftart
ft <- fontsize(ft, size = 11, part="all")
ft <- font(ft, fontname="Arial", part = "all")

# Farbige Markierung von Werten in der Spalte hp
ft <- color(ft, i = ~ hp > 100, j = ~ hp, color="orange")
ft <- color(ft, i = ~ hp > 150, j = ~ hp, color="red")
ft <- color(ft, i = ~ hp <= 100, j = ~hp, color="#00b050")

# Hintergrundfarbe der ersten Zeile anpassen
ft <- bg(ft, bg = "#bd0026", part="header") # Hintergrundfarbe
ft <- color(ft, color="white", part="header") # Schriftfarbe
ft <- bold(ft, part="header") # Text in fett

# Tabelle auf Inhalt anpassen (Breite der Spalten)
ft <- autofit(ft)

# Flextable-Objekt muss ausgegeben werden, damit es später
# im Output erscheint
ftCode language: PHP (php)

Die Tabellen die erstellt werden, können später im Word-Dokument ganz normal weiterbearbeitet werden. Alle Einstellungen und Formatierungsmöglichkeiten für Tabellen werden angeboten, wenn man in die entsprechende Tabelle klickt.

Literaturverweise mit Zotero

Gerade im wissenschaftlichen Bereich kommt es bei der Erstellung von Berichten vor, das auch Verweise auf Literaturquellen eingefügt werden müssen. Auch diese können direkt in die R-Markdown-Datei integriert werden. Mit der neuen Version 1.4 von R-Studio besteht auch eine direkte Anbindung von R-Studio an das Literaturverwaltungsprogramm Zotero. Verwaltet man seine Literatur mit einem anderen Programm, muss die Literatur, die zitiert werden soll, als Bibtex-Datei exportiert werden. Dies ist in den meisten gängigen Literaturverwaltungsprogramme ohne Probleme möglich.

Im Header der Markdown-Datei muss dann die Bibtex-Datei hinterlegt werden (sofern nicht mit R-Studio auf Zotero zugegriffen wird, unter bibliography). Weiterhin ist es möglich einen Zitationsstil zu hinterlegen (unter csl). Dieser muss mit einer .csl-Datei hinterlegt werden. Diese können u. a. im Zotero Style Repository heruntergeladen werden.

---
output: 
  officedown::rdocx_document:
    reference_docx: 'ressourcen/rmarkdown_reference_erste_seite_ohne.docx'
bibliography: ressourcen/literatur.bib
csl: ressourcen/deutsche-gesellschaft-fur-psychologie.csl
---Code language: PHP (php)

Im R-Markdown-Dokument selbst muss dann ein Literaturverweis angegeben werden. Dies geschieht mit dem Bibtex-Code der jeweiligen Quelle. Eingefügt wird die Quelle mit dem @-Zeichen. Arbeitet man mit R-Studio erfolgt dies automatisch wenn man die entsprechende Quelle ausgewählt hat. Hier ein Beispiel:

## Literaturverweise

In Markdown kann man auch Literaturverweise einfügen.
Hier ein Beispiel @eidStatistikUndForschungsmethoden2015 und
noch ein Beispiel vgl.  @arzheimerStrukturgleichungsmodelleAnwendungsorientierteEinfuhrung2016, S. 10.
Code language: CSS (css)

Das Literaturverzeichnis mit allen verwendeten Quellen wird am Ende des Dokumentes eingefügt. Insofern empfiehlt es sich, am Ende des jeweiligen Dokumentes eine Überschrift “Literaturverzeichnis” einzufügen.

Fazit

Mit dem Beitrag soll ein kleiner Einblick gegeben werden, wie man Reports in R und Word erstellen kann. Der Vorteil des dargestellten Vorgehens, liegt aus meiner Sicht vor allem im Bereich der Reproduzierbarkeit und der Erstellung von Reports für Untergruppen. Den einmal erstellten Report kann man beliebig auf Teildatensätze anwenden.

Mit den Paketen aus dem officeverse stehten vielfältige Möglichekeiten zur Verfügung um bereits in R den Word-Output zu formatieren. Durch die Integration von Literaturquellen ist es auch möglich komplette Berichte mit R-Markdown zu schreiben und die Auswertungen direkt zu integrieren. Gerade diese Integration ist ein sehr großer Vorteil, da dadurch Copy und Paste-Fehler vermieden werden können.

Haben Sie auch schon Erfahrung mit R-Markdown und den officeverse-Paket gemacht? Bzw. noch Fragen zur Umsetzung? Gerne können Sie diese in den Kommentaren hinterlassen. Ich freue mich auf den Austausch!

2 Kommentare

  1. Joachim K. Rennstich

    Sehr hilfreicher Beitrag, Danke! Die Verbindung mit MS Office wird hier wirklich sehr erleichtert. Ein weiteres sehr hilfreiches Tool – eher in der Verwendung mit wissenschaftlichen Arbeiten – ist das Paket [`papaja`](https://github.com/crsh/papaja). Hier können auch Analysen etc direkt in einem reproduzierbaren, APA-konformen Stil auf Markdown Basis und mit Zotero erstellt und als PDF oder Word Dokument ausgegeben werden. Einige Sachen funktionieren dann in Word nicht ganz so schön wie mit `flextable` aber dafür ist der Analyseumfang erstaunlich gut.

    • Sebastian Ottmann

      Danke für den Hinweis. Das Paket werde ich mir auch mal genauer anschauen!

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Auf dem Laufenden bleiben!

Jetzt zum Newsletter anmelden und aktuelle Infos zu den Themen Wirkungsorientierung, Wirkungsanalyse, Evaluation, Datenanalyse und Datenkompetenz erhalten.

Hier gehts zur Anmeldeseite!