# KnitR
## Einleitung

KnitR ist ein Paket für RStudio, das
* Textverarbeitung und
* Ausführung von eingebettetem Programmcode (Code Chunks)
unterstützt.

### Ausgabeformate

Die Erstellung von Textverarbeitungsdokumenten ODT, DOCX, ... , PDF, Präsentationen in LaTeX, RevealJS, DZSlides, ... mit Echtzeit-Einbettung von Daten und Diagrammen auf Basis von statistischen und numerischen Analysen wird mit KnitR in unterschiedlichen Ausgabeformaten ermöglicht. Die interne Verwendung von PanDoc erlaubt viele weitere Ausgabeformate.

### Anwendungsgebiete

* Berichtsgenerierung auf Basis von Echtzeitdaten,
* Dynamische Publikation, die wie bei einer "statische" wissenschaftlichen Veröffentlichung eine Datenanalyse durchführt und dann die Analyseergebnisse in dem Dokument interpretiert.
* Nutzung von Monitoringdaten in den Umweltwissenschaften (Gewässerbelastung) und die Erstellung eines dynamischen Reports, der zu jeder Zeit die aktuellen Daten mit einbezieht.

### Beispiel - Börsenkurse dynamisch auswerten

So können z.B. aktuelle Börsenkurse abgerufen, innerhalb von R analysiert und abhängig von der Analyse Phrasen und Ergebnisse z.B. in den Text implementiert werden. Das Paket KnitR wird oft innerhalb RStudio als grafische Benutzeroberfläche zum Aufruf von Befehlen und Skripten für die zugrundeliegende Statistik-Software R verwendet (siehe KnitR für Details).
Von der Befehlszeile aus können durch die Verarbeitung eines R-Markdown-Dokuments automatisch aktuelle Berichte generiert und in in der laufenden Bearbeitung die aktuellen Datenquellen (z.B. Überwachungsdaten) in der statistischen oder numerischen Analyse ausgewertet werden.
Wenn die Lernenden den R-Code im Lerndokument einsehen können, können sie in der Statistiksoftware selbstständig aktiv werden. Darüber hinaus können Leser für die Veröffentlichung von Forschungsinhalten in Wikiversity
* die Ergebnisse reproduzieren,
* von der Methodik lernen,
* den R-Code auf ihre eigenen Daten anwenden,
* prüfen, ob die Algorithmen für den Versuchsplan geeignet sind.

## Aufgabe für die Lernenden

* Installieren Sie RStudio und das Paket KnitR, erstellen und bearbeiten Sie Ihr erstes KnitR-Dokument.
* Erkunden Sie das Konzept des Scientific Hackathon und erklären Sie, warum KnitR als Entwicklungsumgebung für entscheidungsunterstützende Produkte verwendet werden kann!
* Analysieren Sie den COVID-19 Ausbruch und die Anforderungen an dynamische Aktualisierungen im Jahr 2020. Was sind die Anforderungen und Einschränkungen zur Schaffung eines dynamischen Berichtsmechanismus auf der Grundlage von KnitR und R für die COVID-19-Epidemien?

## Lernmodule

* Den grundlegenden Arbeitsablauf von KnitR verstehen
* Installation von KnitR
* Standard-Fallen und deren Lösungen
* Pfade - Übersicht bei den Dateien
* Hello World Beispiel
* Allgemeine Information zur Verwendung von KnitR
* (Vorlagen) Vorlagen aus Textdateien können verwendet werden, um diese für Übungsblätter mit maßgeschneiderten Aufgaben zu nutzen.
* (Erstes KnitR-Dokument) erstes KnitR-Dokument erzeugen in R/RStudio.
* (Laden und Speichern) Laden und Speichern von Daten. Dies ist für die Erstellung maßgeschneiderten Aufgabenblätter relevant.
* (Computer Algebra in R) für den Einsatz bei der dynamischen Erzeugung von Übungsblättern ist es in Kontext der Mathematik hilfreich, ein Computer-Algebra-System zur Verfügung zu haben. Diese Lerneinheit zeigt, wie eine solche Integration in R möglich ist.
* (Punktesummen) Schüler:innendaten zu einem Test oder Klassenarbeit mit Punkte für 3 Aufgaben werden geladen und die Punktesumme berechnet (z.B. für eine Klausurergebnis).
* (Automatische Notenberechnung) Eine automatische Notenberechnung berechnet in Abhängigkeit von einer Bestehensgrenze die Note auf der Basis von Klausurergebnissen in einer CSV-Datei.
* (Aufgaben und Aufgabenbeziehungen) Darstellung von Aufgabenbeziehungen und deren Nutzung für individualisierte Aufgabenblätter.
* (Einzelaufgaben als Dateien) Einzelaufgaben als Dateien sind sinnvoll und beim Aufgabenaustausch lediglich die Dateien tauschen muss, aber die R-Markdown-Datei nicht mehr verändern muss.
* (Bedingte Ausgabe von Texten) Bedingte Ausgabe von Texten behandelt die Grundelemente von dynamisch erstellten Dokumenten, die von logischen Variablen abhängen. Damit ist z.B. das Hinzufügen von schwierigeren Aufgaben oder das Ergänzen von Hilfen für das Aufgabenblatt gemeint.
* (Iteration für die Aufgabenblatterstellung) Eine Iteration wird bei der Erstellung von individualisierten Aufgabenblättern verwendet, um bei wiederholter Durchführung der Aufgabenblatterzeugung für jede Schüler:in eine eigenes Aufgabenblatt zu erzeugen (d.h. in einem KnitR-Prozess z.B. 32 unterschiedliche Aufgabenblätter auf der Basis von 32 Schülerdatensätzen erzeugt.

## Kompilierung einer knitR-Quelldatei

Eine knitR-Datei kann in die angegebenen Ausgabeformate kompiliert werden, indem Sie rmarkdown::render(<FILENAME>) über die R-Konsole ausführen.

## Einige externe KnitR Tutorials

* Rstudio, eine IDE zur Erstellung von KnitR-Dokumenten, enthält auch einfache Beispiele
* Karl Broman's minimal tutorial diskutiert die Grundlagen des KnitRns, ein sehr guter Einstieg
* Die knitR-Homepage enthält nicht nur die Quelle, sondern auch einige Links und Beispiele
* An introductional video auf YouTube, das die Erstellung eines KnitR-Dokuments mit RStudio veranschaulicht
* Ein kurzes Videotutorial liefert Ihnen in fünf Minuten eine kurzen Einstieg in KnitR.

## Wiki zu Abschriftenkonvertierung mit PanDoc

Das OpenSource-Tool PanDoc wird als das "Schweizer Taschenmesser" der Dokumentenkonvertierung bezeichnet. Nehmen wir an, wir haben ein KnitR-Dokument einer wissenschaftlichen Arbeit, das die KnitR-Codeschnipsel zur Verarbeitung der analysierten Daten enthält.
* Konvertieren Sie das Markdown-Dokument der Arbeit mit PanDoc-Online Converter in ein MediaWiki-Dokument.
** Erstellen Sie ein Beispieldokument mit dem Knitr-Paket in RStudio und speichern Sie die R-Markdown-Datei mit der Erweiterung Rmd auf Ihrer Festplatte.
** Kopieren Sie den Inhalt Ihres R-Markdown-Dokuments nach PanDoc-Online Converter,
** wählen Sie Markdown (pandoc) als Eingabeformat,
** wählen Sie MediaWiki als Ausgabeformat,
** drücken Sie den Konvertierungs-Knopf und analysieren Sie die generierte MediaWiki-Syntax des Textes.
* Die R-Code-Chunks für die Analyse der Daten (z.B. aus der CSV-Datei eines Tabellenkalkulationsdokuments geladen) werden in eine <code>--Umgebung konvertiert.
* Dieses konvertierte KnitR-Dokument wird zusammen mit den wissenschaftlichen Arbeiten im WikiJournal (z.B. WikiJournal of Medicine) gespeichert. Wurde die Datenabfrage auf die gleiche Weise durchgeführt, wird die Anwendung des KnitR-Dokuments mit den neuen Daten auf die gleiche algorithmische Weise durchgeführt. Dieser KnitR-Ansatz trägt zu einem Workflow für eine reproduzierbare Wissenschaft bei.

## Workflow für KnitR-Backend in Verbindung mit Wikiversity/Wikipedia

Der folgende Arbeitsablauf ist in Wikiversity derzeit nicht implementiert. Mit dieser Wiki-Ressource lernen Sie die Workflow-Analogie zwischen KnitR und den zukünftigen Vorteilen einer KnitR-ähnlichen Implementierung für die wissenschaftliche Veröffentlichung von dynamisch generierten Lernressourcen in Wikiversity kennen:
Nach der Verarbeitung des Wikiversity-Dokuments mit der Angabe des src-Attributs im R-Backend könnte das Ergebnis sein:
Die empfohlene Umgebung für dynamische Berechnungen wird in einer Tag-Umgebung platziert, genau wie der Mathe-Tag für mathematische Ausdrücke.
* Der eingekapselte Inhalt im math-Tag wird für die Ausgabe gerendert.
* Der eingekapselte Inhalt im dyncal-Tag wird zur Berechnung oder zur Erstellung eines Streudiagramms an ein Backend übergeben.
Der eingekapselte Code ist der echte R-Code, der in R oder RStudio funktioniert. Der Arbeitsablauf für R/KnitR kann im R-Tutorial von K. Broman gefunden werden. Der R-Code erzeugt Vektoren mit Zufallszahlen und berechnet die Kovarianz. Der R-Code sollte für Wikiversity-Seiten nach einer Codeänderung standardmäßig verarbeitet werden (Serverlast für das R-Backend). Als weitere Option kann der Lernende die Quelle über eine API downloaden und das KnitR offline auf dem mobilen Gerät erstellen. Die Wikiversity-Community wird entscheiden, ob dies eine mögliche Option ist, die in eine Lernumgebung aufgenommen werden kann, um die Analyse von Daten und deren Interpretation zu untersuchen.
* Die Dokumentsprache wird das Standard Wiki Markup sein, auch bekannt als Wikitext oder Wikicode. Er besteht aus der Syntax und den Schlüsselwörtern, die von der MediaWiki-Software zur Formatierung einer Seite verwendet werden (z.B. verwendet in Wikipedia, Wikiversity, OLAT,...).
* R-Code-Blöcke werden von einem R-Backend erkannt und interpretiert oder ein Verweis auf ein versioniertes R-Skript wurde in ein Wiki-Dokument/einen Wiki-Artikel eingefügt, und jeder gefundene Verweis führt zu einem Lesen-Update des Wiki-Artikels, wenn Daten, Skript oder Dokument aktualisiert werden. Diagramme sind z.B. immer noch PNG-Dateien in Wikimedia, die auf eine Art und Weise importiert werden, die den meisten Autoren der Wiki-Community bekannt ist. Der Unterschied zwischen einem Standard-Wiki-Dokument und einem Wiki-Dokument mit R-Code-Bausteinen besteht darin, dass bei jeder Aktualisierung von Daten oder Aktualisierung des Skripts das R-Skript erneut aufgerufen wird und eine neue Version der Ausgabe (Diagramme als PNG-Dateien, Anzahl, dynamische Textelemente) erstellt wird. Dieses Konzept wird im Wesentlichen für mathematische Formeln in MediaWiki von TexVC bzw. die Math Extension for MediaWiki ebenfalls. Die LaTeX Quellen werden analysiert und in Bilder, MathML, umgewandelt, die in einem Browser angezeigt werden können.
* SageMath ist ein weiterer potenzieller Kandidat als Backend, der die numerische und statistische Analyse "on the fly" in einer Lernressource durchführt. Die Vorteile sind enorm, insbesondere wenn auch Lernende und Autoren beteiligt sind, da eine Lernaufgabe in SageMath vom Lernenden selbst durchgeführt werden kann und die Diagramme und Karten für die jüngsten Ereignisse im Dokument sichtbar sind, ohne dass die Diagramme/statistischen Ergebnisse immer wieder mit den neuesten Daten aktualisiert werden müssen. Das verfügbare Software-Paket innerhalb von SageMath ist riesig und R ist ein Paket in der SageMath-Paketliste.
* PanDoc könnte verwendet werden, um Wiki-Code in Markdown für die Verarbeitung mit dem KnitR-Paket zu konvertieren.

## Aufgaben

Im vorherigen Abschnitt wurde der Arbeitsablauf eines integrierten Ansatzes von KnitR ausgearbeitet. Da dieses Konzept noch nicht als Erweiterung im MediaWiki implementiert ist, kann der Workflow nicht direkt mit Code Chunk für mathematische Berechnungen im MediaWiki der Wikiversity durchgeführt werden. Es ist aber möglich, den Workflow im Allgemeinen kennen zu lernen:
* Installieren Sie R-Studio und R auf Ihrem Rechner.
* Installieren Sie das KnitR-Paket in R-Studio.
* Lernen Sie KnitR mit Screencasts (Youtube) kennen und führen Sie ein grundlegendes KnitR-Tutorial durch, damit Sie den ersten dynamischen Bericht erhalten.
** Video - Learn Knitr in 5min (Youtube) von Ram Narasimhan - abgerufen am 11.10.2006
** Video - Professional Report Writing with Sweave, LaTeX, and R (Youtube) von Nicolas Yager - abgerufen am 11.10.2006
** knitr: Automatically embedding R output in documents (Youtube)' von Joshua Wiley 14.10.03
* Fortgeschrittene Lerner/Spatiale Analyse: Wenden Sie ein Szenario im Risikomanagement an Modul zur Erstellung von Risikokarten. Was sind zusätzliche Anforderungen an die räumliche Analyse?
** Lernen Sie über die Gestaltung von Geographische Informationssysteme (GIS) (Klassifikationsressource von Dave Braunschweig),
** Installieren Sie Open Source Quantum GIS und erkunden Sie die 14/de/docs/training_manual/ QGIS manual und versuchen Sie, die Möglichkeiten, die geographisches Informationssystem - GIS bieten (siehe z.B. QGIS manual) in die dynamische Dokumentengenerierung in KnitR und R zu integrieren (betrachten Sie außerdem QGIS ScreenCasts auf Youtube je nach dem Grad der Fachkenntnis im GIS).
** Daten aus der GIS-Datenbank extrahieren und mit R-Skript verarbeiten,
** Generierte Karten und berechnete R-Ergebnisse in das KnitR-Dokument integrieren (Spatial Analysis with R Youtube veröffentlicht von Domino Data Lab 2016/02).
* (Jupyter) Analysieren Sie das Open-Source-Framework Jupyter und analysieren Sie die Unterschiede und Gemeinsamkeiten zwischen KnitR und Jupyter. In welchen Bereichen würden Sie KnitR und wann würden Sie Jupyter verwenden?