TEIL EINFÜHRUNG
TEIL MARKDOWN
TEIL GIT
"Habe den Mut, dich deines eigenen Verstandes zu bedienen".
Das Ein Wesensmerkmal der Wissenschaft ist Transparenz.
Wissenschaft heißt zeigen, nicht glauben.
reproducibility refers to the ability of a researcher to duplicate the results of a prior study using the same materials as were used by the original investigator. [GFI16].
Ein Forschungsbericht sollte wie ein Kochrezept sein: Alle Informationen sind enthalten, um das Gericht jeweils (ausreichend) gleich nachzukochen.
⚡ Ist ein Forschungsergebnis nicht reproduzierbar, sind wir zum (Nicht-)Glauben gezwungen. Das ist keine Wissenschaft.
Open Science: Open data, open materials, open code, literate programming ...
Project TIER (Teaching Integrity in Empirical Research) promotes the integration of principles and practices related to transparency and replicability in the research training of social scientists.
Our goal is to reach a day in which training in research transparency becomes standard and ubiquitous in the education of social scientists.
[Bak16]
Ja.
[The command line] also saves you time and fulfills ethical obligations. With command scripts, each analysis documents itself, so that years from now you can come back to your analysis ans replicate it exactly. You can re-use your old files and send them to colleagues. Pointing and clicking, however, leaves no trail of breadcrumps. [...] Once you get in the habit of planning, running and preserving your statistical analysis in this way, it pays for itself many times over. With point-and-click, you pay down the road, rather than only up front. [McE16]
Bla bla bla ...
x1 = rechne(Input_Data)x2 = rechne_mehr(x1)x3 = irgendwas(x2)x4 = wildes_zeugs(x3)
Die mittlere Reaktionszeit betrug x4
Sekunden.
Bla bla bla ...
Bla bla bla ...
Die mittlere Reaktionszeit betrug 3.141 Sekunden.
Bla bla bla ...
# Ich bin ein Titel.Ich bin ein Satz.Eine Liste beginnt.- ja- nein- vielleichtEine nummerierte Liste:1. 3.41452. 2.71823. 42
Ich bin ein Satz.
Eine Liste beginnt.
Eine nummerierte Liste:
__fett__, _kursiv_, ~~durchgestrichen~~
fett,
kursiv,
durchgestrichen
# Title level 1## Title level 2Link: [my blog](https://data-se.netlify.com/)Citation: [@Xie2018]Image: 
.pull_right[
Link: my blog.
Citation: (Xie & Allaire, 2018)
Image:
via Markdown:

via HTML:
<img src="http://bit.ly/wiki-toddy" width="15%" align="right" />
knitr::include_images("path_to_image")
Tipp: RStudio-Snippets anlegen für häufige Idiome.
Markup-Sprachen nutzen Auszeichungen zur Formatierung von Text. Sie basieren auf Textdateien.
Bekannte Beispiele:
Markdown ist eine sehr einfache Markup-Sprache (daher "Mark-Down").
\makeatletter\newenvironment{kframe}{%\medskip{}\setlength{\fboxsep}{.8em} \def\at@end@of@kframe{}% \ifinner\ifhmode% \def\at@end@of@kframe{\end{minipage}}% \begin{minipage}{\columnwidth}% \fi\fi% \def\FrameCommand##1{\hskip\@totalleftmargin \hskip-\fboxsep \colorbox{shadecolor}{##1}\hskip-\fboxsep % There is no \\@totalrightmargin, so: \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}% {\par\unskip\endMakeFramed% \at@end@of@kframe}\makeatother
Zum Glück.
Mit dem Programm Pandoc lassen sich Markup-Sprachen ineinander übersetzen.
# Überschrift Ebene 1Bla bla bla.__Fettdruck, weil dicke Hose__```{r}x <- 2^10``` Die Lösung ist `r x`.
Auf dem üblichen Weg:
gf_point(mpg ~ hp, data = mtcars) %>% gf_lm()
Sie können mit diesem Code beginnen und dann nach eigenem Belieben anpassen:
# Überschrift Ebene 1Bla bla bla.__Fettdruck, weil dicke Hose__```{r}x <- 2^10``` Die Lösung ist `r x`.
Metadaten sind Daten über Daten (hier: über ein Dokument), z.B.
Metadaten sind Daten über Daten (hier: über ein Dokument), z.B.
Titel
Autor
Papiergröße
...
Metadaten werden in RMarkdown in einem Bereich, der mit ---
vorne und hinten abgegrenzt ist, definiert:
--- title: "Das ist der Titel des Dokuments"author: "Hier steht der Name des Authors"date: 2019-09-16 # Man kann auch R-Inline-Befehle einflechten---
Das Format ist i.d.R. Variable = Wert
.
Genauer gesagt wird das (YAML-)Format verwendet.
Meist steht dieser Bereich zu Beginn des Dokuments (daher "YAML-Header").
---title: "Das ist der Titel des Dokuments"author: "Hier steht der Name des Authors"date: `r Sys.Date()`---# Überschrift Ebene 1Bla bla bla.__Fettdruck, weil dicke Hose__```{r}x <- 2^10```Die Lösung ist `r x`.
Eine Seite mit Word, noch ein paar Seiten, und irgendwann ...
Markdown verkraftet auch große Dokumente.
Relativ großes Doukument.
Keine Schnapp-Atmung beim Bearbeiten/Erstellen, aber relativ lange Kompilationsdauer (ca. 2 Minuten).
rmd_files: [ "index.Rmd", "01_Statistik_heute.Rmd", "02_Hallo_R.Rmd", "03_R_starten.Rmd", "04_Erstkontakt.Rmd", # "05_Datenstrukturen.Rmd", "06_Datenimport_und_export.Rmd", ...]
title: "Moderne Datenanalyse mit R"subtitle: "Entwurf"author: "Sebastian Sauer"lang: de-Dedocumentclass: bookclassoption: a4paperfontsize: 11ptfontfamily: mathpazo...
Vorab sind 13 HTML-Formatvorlagen (Stylesheets, Themes) installiert: “cerulean”, “cosmo”, “flatly”, “journal”, “lumen”, “paper”, “readable”, “sandstone”, “simplex”, “spacelab”, “united”, und “yeti”. Hier einige Beispiele.
Probieren Sie verschiedene aus!
---title: "test"output: html_document: theme: united---
Es gibt auch verschiedene Syntax-Highlight-Stile:
highlight specifies the syntax highlighting style. Supported styles include default, tango, pygments, kate, monochrome, espresso, zenburn, haddock, and textmate. Pass null to prevent syntax highlighting.
Passen Sie Ihren YAML-Header entsprechend an:
---title: "test"output: html_document: # theme: united highlight: tango---
prettydoc
mit install.packages("prettydoc")
.prettydoc
-VorlageR-Chunks kann man mit Optionen versehen, um die Ausgabe zu steuern.
Entschlüsseln Sie die Bedeutung der Chunk-Optionen!
```{r demo-plot, out.width="70%", fig.align = "center", echo = FALSE, eval = FALSE}knitr::include_graphics("imgs/modar-sample1.png")```
Lesen Sie hier mehr über Chunk-Optionen!
Ich glaube, dass man beim Schreiben ...
nur schreiben soll, sich nicht schon mit der Formatierung beschäftigen soll.
immer nur eine Sache zu einer Zeit tun soll. Man beginne mit der Gliederung, es folgen stichpunktartige Notizen , schließlich formuliere man Sätze , danach erst beginne man mit Formatierung.
reichlich von Metatext Gebrauch machen soll, in Sinne von Kommentaren über seinen Text (als Gedankenstütze).
zum Schluss auf anspruchsvolle Typografie achten soll (Ästhetik und Lesbarkeit). Allerdings verzichte man auf Schnörkel.
nicht einen 500-Seiten-Haufen schreiben soll, sondern intensiv und auf mehreren Ebenen gliedern soll (Ordner, Dateien, Dateien für Bilder oder Daten, Kapitel, Absätze, ...).
[@ID]
zitiert werden, z.B. [@baker_1500_2016]
@article{baker_1500_2016, title = {1,500 Scientists Lift ...}, volume = {533}, issn = {0028-0836, 1476-4687}, language = {en}, number = {7604}, journal = {Nature}, doi = {10.1038/533452a}, author = {Baker, Monya}, month = may, year = {2016}, pages = {452-454}}
Literatur.bib
im Verzeichnis Ihrer Rmd-Datei.bibliography: <name.bib>
.Wenn Sie keinen Pfad (zu Ihrer Literaturdatei) angeben, so muss diese im gleichen Verzeichnis wie die Rmd-Datei liegen.
---blablablabibliography: Literatur.bibblablabla---
Hier finden Sie einen Lösungsvorschlag.
Böse Zungen behaupten, es gäbe mehr Zitationsstile als Journals ...
Eine gängige Variante zur Definition von Zitationsstilen ist das CSL-Format.
Um einen Zitationsstil zur Formatierung Ihrer Zitationen anzuwenden, müssen Sie:
csl: <csl-datei.csl>
auf die Datei verweisen.Es gibt viele Optionen für Tabellen in Markdown via R, z.B. knitr::kable()
knitr::kable(head(iris), format = "html")
Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
---|---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 | setosa |
4.9 | 3.0 | 1.4 | 0.2 | setosa |
4.7 | 3.2 | 1.3 | 0.2 | setosa |
4.6 | 3.1 | 1.5 | 0.2 | setosa |
5.0 | 3.6 | 1.4 | 0.2 | setosa |
5.4 | 3.9 | 1.7 | 0.4 | setosa |
# Wichtiges Kapitel {#wichtig}blablabla# Unwichtiges KapitelMan lese im Kapitel \@ref(wichtig).
Das Referenzieren von Kapiteln ist hier nachzulesen.
Um Referenzier-Funktionen der Art @ref(id)
nutzen zu können, passen Sie bitte Ihren YAML-Header wie folgt an:
blablablaoutput: bookdown::pdf_document2 <weitere-output-angaben>blablabla
Ein Beispiel
Wie in Abbildung \@ref(fig:demo-plot) ersichtlich ...
mtcars %>% head(3) %>% knitr::kable(caption = "Tabellen-Beschriftung", format = "html")
mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | |
---|---|---|---|---|---|---|---|---|---|---|---|
Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 | 16.46 | 0 | 1 | 4 | 4 |
Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 | 17.02 | 0 | 1 | 4 | 4 |
Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 | 18.61 | 1 | 1 | 4 | 1 |
Wie in Tabelle \@ref(tab:demo-tab) ersichtlich ...
Erstellen Sie eine Dokument, in dem Sie (Kapitel, Abbildungen und/oder Tabellen) referenzieren!
Anstelle von pdf_document2
ist auch html_document2
möglich.
Hier finden Sie einen Lösungsvorschlag.
Im Buch RMarkdown - The Definitive Guide finden sich (in Kapitel 3.1) weitere Hinweise zum Formatieren von HTML-Dokumenten mit RMarkdown.
Dieses Cheatsheet "Rmarkdown 2.0" gibt einen guten Überblick über Optionen mit RMarkdown.
🤓
Jung- Forscher Sebastian S.
Unser Jungwissenschaftler schreibt als brave Fleißbiene 🐝 einen Entwurf für einen Fachartikel 📜.
Den Text (als Word) schickt er an seine Betreuer 👩🔬 👨🔬 (und weitere wichtige Menschen 🧝♀️ 🦸♂️ 👩💻, die auf dem Paper als Coautoren erscheinen möchten). Insgesamt an fünf Menschen.
🤓
Jung- Forscher Sebastian S.
Die wichtigen Menschen tun, was Sie immer tun, und manche schicken irgendwann irgendetwas an den Jungwissenschaftler zurück.
Der Jungwissenschaftler versucht, die fünf Beiträge mit seinem Entwurf zusammenzufassen.
🧟♂️
Jung- Forscher Sebastian S.
läuft AMOK
Desiderata der Änderungsnachverfolgung beim Texte schreiben
Nr | Desideratum | Word | Git |
---|---|---|---|
1 | Übersichtlichkeit | Nein | Ja |
2 | Exakte Kontrolle | Nein | Ja |
3 | Schutz vor versehentlichem Überschreiben | Nein | Ja |
4 | Mehrpersonentoleranz (Kollaboration) | Nein | Ja |
5 | Varianten | Nein | Ja |
6 | Robustheit bei großen Dokumenten | Nein | Ja |
7 | Technische Ausfallsicherheit | Nein | Ja |
8 | Produktunabhängigkeit | Nein | Ja |
9 | Flache Lernkurve | Ja | Nein |
Wenn man Änderungen am Text in zusammengehörigen Bündeln schön übersichtlich sehen könnte?
Betrachten Sie dieses Beispiel-Repo:
https://github.com/sebastiansauer/test_ses
Wenn man dann für jedes "Änderungsbündel" die Änderungen schön übersichtlich sehen könnte?
Natürlich sollte Autor und Zeitpunkt der Änderung auch dokumentiert sein.
... desto wichtiger ist ein gutes Werkzeug zur Änderungskontrolle
Ein "Änderungsbündel" wird in Git als Commit bezeichnet. Ein Git-Ordner mit allem Drum und Dran wird als Repo(sitorium) bezeichnet.
196 Dokumente in 63 Ordnern, 825 Mb
Dafür ist Word nicht gemacht.
Vorlesungen
Repository: Der Container, der alle Dateien und alle Änderungen eines Projekt enthält.
Working Tree: Dateisystem der Repos in aktueller (oder frühere) Version
Staging Area (Index): Dokumentiert Dateien mit Änderungen, die noch nicht eingestellt sind.
Head: Aktuellste Version des Projekts (neuester Commit) im aktuellen Branch
Branch: Variante des Projekts
A solo data analyst, working on a single computer, will benefit from adopting version control. But not nearly enough to justify the pain of installation and workflow upheaval. There are much easier ways to get versioned back ups of your files, if that’s all you’re worried about.
In my opinion, for new users, the pros of Git only outweigh the cons when you factor in the overhead of communicating and collaborating with other people.
https://happygitwithr.com/big-picture.html
Hosting-Anbieter für Git-Repos
2018 von Microsoft gekauft (7.5 Mrd. USD)
Neben reinem Git werden noch ergänzende Funktionen wie Issues (Art Ticketsystem) etc. angeboten
Größte Sammlung von Source Code in der Welt
https://en.wikipedia.org/wiki/GitHub
Jetzt haben Sie Ihr Repo in RStudio verfügbar.
Vertiefung: Passwörter-Cache mit Git/Github
Das Buch von Jenny Bryant Happy Git with R gibt eine gute Einführung in das Thema.
Dort finden Sich auch Hinweise bei Problemen.
git init
: Legt in einem Ordner die Git-Infrastruktur an.git status
: Gibt einen Überblick über den Status eines Repos.git add .
: Fügt alle Dateien dem Index zu (staged die Dateien).git commit -m "meine nachricht"
. Committed die gestageden Dateien und fügt eine (hoffentlich aussagekräftige) Nachricht hinzugit pull
: Zieht das Repo vom zentralen Server und mergt es in das lokale Repo.git push
: Lädt das lokale Repo zum zentraler Server hoch.git stash
: Speichert die aktuellen Änderungen (sofern noch nicht committed) temporär.git blame
: Zeigt, wer als letztes eine bestimmte Zeile einer Datei verändert hat.git checkout <id>
Mit
git checkout a1e8fb5
versetzt man den Working Tree in dem Zustand des Commits mit der ID a1e8fb5.
Man kann jetzt keine Änderungen vornehmen (detached head), sondern nur alte Zustände betrachten1.
Mit git checkout master
kommt man wieder zum aktuellen Stand auf dem Branch master.
1: Aber man kann von diesem Zustand aus einen neuen Branch öffnen mit z.B git checkout -b my_new_branch
.
git checkout <commit-hash> <file>
git checkout git checkout bdcd88fdf18bce554046b4188e0a8aee0b5f1b0a Tweets-Data/party_tweets.Rda
Damit wird eine Datei/ein Ordner aus dem Commit <commit-hash>
im Working Directory wiederhergestellt.
Mit
git reset HEAD~2 foo.R
Wird die Datei foo.R
aus dem 2. letzten Commit wiederhergestellt.
https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting
git revert
Einen früheren Commit wiederherstellen:
git revert HEAD
Damit wird der Zustand
Anstelle von HEAD
kann man auch eine Commit-ID angeben.
https://www.atlassian.com/git/tutorials/undoing-changes/git-revert
git reset
So widerrufen Sie Änderungen unwiderruflich:
git reset --hard HEAD~
Working Tree und HEAD werden auf den Vorfahren des Heads zurückgesetzt. Der Index ist leer (keine Dateien auf der Staging Area).
So löscht man Änderungen im Working Directory (d.h. nicht committed)
git reset --hard
git reset
zum Unstaggen aller Dateien
Sebastian Sauer
ssauer@posteo.de
Get slides here:
http://data-se.netlify.com/slides/WS-MD-Git-2019/WS-MD-Git-2019.html
Get source code here:
http://data-se.netlify.com/slides/WS-MD-Git-2019/WS-MD-Git-2019.Rmd
CC-BY
Baker, M. (2016). "1,500 Scientists Lift the Lid on Reproducibility". En. In: Nature 533.7604, pp. 452-454. ISSN: 0028-0836, 1476-4687. DOI: 10.1038/533452a.
Goodman, S. N, D. Fanelli, and J. P. A. Ioannidis (2016). "What Does Research Reproducibility Mean?" In: Science Translational Medicine 8.341, pp. 341ps12-341ps12. ISSN: 1946-6234, 1946-6242. DOI: 10.1126/scitranslmed.aaf5027.
McElreath, R. (2016). Statistical Rethinking. New York City, NY: Apple Academic Press Inc.. ISBN: 1-4822-5344-5.
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |