R-Tutorial: Teil 3: Grafiken und Zufallszahlen
Nachdem in Teil 1 der R-Tutorial-Reihe eine erste Einführung in das
Basiswissen der Programmiersprache R bzgl. der Syntax, Variablen,
Matrizen, regelmäßigen Folgen und dem Umgang mit Datensätzen erfolgt ist und in
Teil 2 der R-Tutorial-Reihe
eine Vertiefung in Richtung Ablaufsteuerung und dem Einsatz von Funktionen erfolgte,
bietet der dritte Teil der R-Tutorial-Reihe einen Einstieg in die Syntax
zur Erzeugung von Grafiken und von Zufallszahlen und -stichproben
in der Programmiersprache R .
Motivation
R ist eine freie Programmiersprache für statistische Berechnungen und Grafiken. Sie wurde 1992 von den Statistikern Ross Ihaka und Robert Gentleman an der Universität Auckland für Anwender mit statistischen Aufgaben neu entwickelt und ist auf UNIX-Plattformen, Windows and MacOS lauffähig. Die R-Umgebung wird ausdrücklich ebenfalls als R bezeichnet und ist Teil des GNU-Projekts.
Warum R?
R gilt als eine Standardsprache für statistische Problemstellungen sowohl in der Wirtschaft als auch in der Wissenschaft.
Da der Quellcode öffentlich ist, bietet R die Möglichkeit, schnell neue Pakete zu entwickeln und zur Verfügung zu stellen.
Die kostenlosen und online verfügbaren Pakete erweitern das Anwendungsfeld von R auf viele
Fachbereiche. Die interne Dokumentationen und auch die Foren, die sich mit der Anwendung von R befassen, bieten dem Benutzer die Möglichkeit die
Funktionalität von R leicht zu erfassen und anzuwenden.
Warum RStudio?
RStudio ist eine kostenlose und integrierte Entwicklungsumgebung für die Progammiersprache R, durch RStudio wird die Benutzerfreundlichkeit von R erhöht. Der Aufbau der Entwicklungsumgebung ist einfach und sehr übersichtlich.
R vs. MATLAB und Python
R wird, wie MATLAB und Python, insbesondere für die Entwicklung von Anwendungen im Bereich des Maschinellen Lernens verwendet, um z.B. im Rahmen der Vorausschauenden Wartung Prognosen oder Clusteranalysen zu erstellen. Die drei Sprachen bieten zum Teil ähnliche Funktionalität (Bibliotheken für statistische Probleme, ausgefeilte Grafik- und Visualisierungsmodule), wobei jede ihre Stärken und Schwächen hat. Während R auf statistische Programmierung spezialisiert ist, ist MATLAB allgemeiner auf mathematische Problemstellungen ausgelegt. Python hingegen ist eine Programmiersprache, die um statistische Programmbibliotheken erweitert wurde. Die Gemeinsamkeiten und Unterschiede in der Syntax und Verwendung werden hervorgehoben, um Wechslern den Einstieg in R zu erleichtern.
Übersicht
Das Tutorial ist in drei Abschnitte gegliedert, die die R-Syntax an einfachen Beispielen erklären und aufeinander aufbauen:
1 Grafiken erzeugen
Die Datenvisualisierung ist ein wichtiger Schritt der Datenanalyse und R ist eine Sprache, die speziell für statistische Aufgaben entwickelt wurde und eine starke Unterstützung für die Datenvisualisierung bietet. Grafiken können in R entweder durch die Funktionen des R-Pakets graphics oder durch die Funktionen des Pakets ggplot realisiert werden. Das R-Grafik-Paket graphics enthält alle zur Erzeugung und Formatierung von Grafiken benötigten Befehle. Man unterscheidet zwischen high-level befehlen, die eine komplette Grafik erzeugen, und low-level Befehlen, die eine zuvor erstellte Grafik ergänzen.
1-1High-level Grafikbefehle
Die high-level Optionen sind Befehle aus dem graphics-Paket, die ein Grafikfenster erstellen,
Die wichtigsten Befehle zum Plotten, also dem Erzeugen einer Grafik,
sind plot, curve, hist, boxplot.
Der plot-Befehl erhält als Parameter die x- und y-Koordinaten der darzustellenden Daten, und
optional eine Auflistung von weiteren Grafikargumenten. Dem curve-Befehl wird eine Funktion (z.B. sin(x)) und Werte für die
Parameter/Argumente from und to übergeben, die den Bereich angeben, über den die Funktion geplottet wird.
Neben dem automatischen Öffnen eines Grafikfensters kann mit dem Befehl dev.new() ein neues Grafikfenster geöffnet werden.
Dies ist bei der Handhabung mehrerer Grafiken nützlich.
Hinweis: In Python wird mit der Matplotlib-Bibliothek und deren Befehl pyplot zunächst ein Figure-Objekt erstellt (pyplot.figure),
in das mit dem plot-Befehl aus der pyplot-Bibliothek Grafiken eingefügt werden.
In MATLAB erfolgt auch erst die Öffnung eines Grafikfensters mit
figure und dem anschließenden Einfügen einer Grafik mit dem plot-Befehl.
Beispiel: Vektor plotten
Im folgenden Beispiel wird der Vektor x gegen den Index seiner Einträge geplottet, dies geschieht, indem nur die x-Koordinate, also der
Vektor x als Parameter an den plot-Befehl übergeben wird.
Der Vektor x wird mit Hilfe der Funktion rep erzeugt, indem jeder der Werte des ersten Arguments so oft
wiederholt wird, wie das zweite Argument es angibt.
R-Skript | Output |
---|---|
|
|
Beispiel: nx2-Matrix plotten
Im folgenden Beispiel wird die 3x2-Matrix X an den plot-Befehl übergeben, dabei wird zur Erzeugung der Grafik die erste Spalte
gegen die zweite Spalte der Matrix geplottet, die Datenpunkte werden zeilenweise erkannt. Die Grafik wird in dem vorher mit
dev.new() geöffneten Grafikfenster eingebettet.
R-Skript | Output |
---|---|
|
|
Beispiel: Datenpunkte plotten
Im Folgenden werden die Werte des Vektors a gegen die Werte des Vektors b geplottet.
Die Grafik wird in dem vorher mit dev.new() geöffneten Grafikfenster eingebettet.
R-Skript | Output |
---|---|
|
|
Beispiel: Funktionen plotten
Im folgenden Beispiel wird die Sinus-Funktion im Bereich 0 bis 2π mit einer Schrittweite der x-Werte von 0.2 in
ein neues Grafikfenster geplottet.
R-Skript | Output |
---|---|
|
|
Beispiel: Funktionen mit curve-Befehl plotten
Wie im vorherigen Beispiel wird die Sinus-Funktion im Bereich 0 bis 2π in
ein neues Grafikfenster geplottet, diesmal aber mit dem curve-Befehl, dieser erzeugt default einen Linienplot.
R-Skript | Output |
---|---|
|
|
Bei Verwendung von RStudio muss nicht unbedingt immer ein neues Grafikfenster geöffnet werden, da unter dem Tab Plots über die Pfeile
auf alle in der R-Session erstellten Plots zugegriffen werden kann.
Variablen visualisieren mit hist und boxplot
Zur Analyse von Variablen aus Datensätzen stellt R viele nützliche Befehle zur Verfügung, diese sind in den Paketen stats und graphics enthalten. Eine Übersicht der Befehle zur Erzeugung eines Histogrammes, eines Quantil-Quantil-Plots oder eines Boxplots wird im folgenden Beispiel gezeigt.
Beispiel: hist und boxplot
Der Datensatz cars aus dem datasets-Paket wird als Bezugsdatensatz festgelegt (attach-Befehl), somit kann ohne den $-Operator
auf dessen Variablen/Spalten zugegriffen werden. Für die speed-Variable wird ein Normal-QQ-Plot, ein Histogramm und ein Boxplot
erzeugt. Danach wird der Bezug auf den Datensatz wieder gelöst (detach-Befehl).
R-Skript | Output 1 |
---|---|
|
|
Output 2 | Output 3 |
---|---|
|
Bei der Verwendung von plot und curve findet eine automatische Beschriftung der Achsen und das Festlegen der Grenzen für die x- und y-Achse statt. Um diese Ausgabe passender zu gestalten werden den High-level Grafikoptionen weitere Grafikargumente/ -parameter übergeben.
Formatierung über Grafiken
Typ der Grafik festlegen
Um den Typ, d.h. Punkte, Kurve/Linien oder Beides, einer Grafik festzulegen, kann dem plot-Befehl das type-Argument übergeben werden. Mit type="p" wird ein Punkteplot erstellt, mit type="l" ein Linienplot (siehe auch curve()) und mit type="b" wird eine Linie von Punkten unterbrochen erstellt. Dazu folgendes Beispiel:
R-Skript | Output 1 |
---|---|
|
|
Output 2 | Output 3 |
---|---|
|
Achsenbeschriftung und Wertebereiche
Die x-Achsenbeschriftung erfolgt mit dem Grafikargument xlab="..." (d.h. x-Label) und der für die x-Werte angezeigte Wertebereich in der Grafik wird mit xlim=c(untereGrenze, obereGrenze) (d.h. x-Limes/Grenze) angepasst. Dementsprechend werden die Argumente ylab und ylim verwendet um die y-Achsenbeschriftung bzw. den Wertebereich der y-Achse anzupassen. Siehe dazu den folgenden Quellcode:
R-Skript | Output |
---|---|
|
|
Hinweis: In Python kann bei der Verwendung der pandas-Bibliothek der plot-Befehl direkt auf ein DataFrame angewandt werden, die Formatierung der Grafik erfolgt dabei mit .set_title('...'), .set_xlabel('...'), set_ylabel('...') und .set_ylim(untereGrenze, obereGrenze) bzw. .set_ylim(untereGrenze, obereGrenze). In MATLAB stehen dafür title('...'), xlabel('...') bzw. ylabel('...') und axis([x_untereGrenze x_obereGrenze y_untereGrenze y_obereGrenze]) zur Verfügung.
1-2 Low-level Grafikbefehle
Low-level Grafikbefehle ergänzen bestehende Grafiken, d.h. diese Optionen können erst nach Aufruf einer High-level Grafikoption
angewandt werden. Die wichtigsten Optionen sind points, diese ergänzt Punkte in einer bestehenden Grafik, und lines, diese
ergänzt Linien in einer bestehenden Grafik. Alternativ zu lines() kann auch die High-level Grafikoption curve mit dem Argument
add=T, also curve(..., add=T), aufgerufen werden um Linien zu ergänzen.
Weitere Low-level Grafikoptionen sind title, diese ergänzt einen Titel in der Grafik, und legend, diese ergänzt eine Legende. Alternativ
zu title kann der High-level Grafikoption auch das Argument main="..." übergeben werden, also plot(x,y,main="Titel der Grafik"). An den folgenden
Beispielen wird die Verwendung der Grafikoptionen erläutert.
Beispiel: Verwenden von points() und lines()
Es wird eine Grafik erzeugt, die die Sinus- und Cosinus-Funktion im Bereich 0 bis 2π zeigt. Der Cosinus wird in die Grafik mit dem
Sinus mittels points und lines ergänzt, d.h. der Cosinus wird als Punkteplot kombiniert mit einer Linien dargestellt. Mit dem pch-
Argument können verschiedene Symbole für die Punkte gewählt werden:
Mit dem sub-Argument beim plot-Aufruf (Zeile 5) wird eine Unterschrift ergänzt, anstelle von main= und sub= kann auch
title(main="...", sub="...") (Zeile 8 und 9) verwendet werden.
R-Skript | Output |
---|---|
|
|
Beispiel: High- und Low-level Grafikoptionen
Es wird eine Grafik erzeugt, die die Sinus- und Cosinus-Funktion im Bereich 0 bis 2π zeigt. Der Cosinus wird in die Grafik mit dem
Sinus mittels lines ergänzt. Mit dem lty- Argument können verschiedene Linientypen gewählt werden:
Beim plot-Aufruf wird das Argument type="l" verwendet, um einen Linenplot zu erzeugen, das Argument col="red" um die Linie rot zu zeichnen und
xaxt="n" um die x-Achsenwerte zu unterdrücken. Diese werden mit axis(side=1, at=seq(0,2*pi,length=5)) manuell eingefügt, indem an der Position
1=below (alternativ: 2=left, 3=above and 4=right) im Bereich 0 bis 2π fünf Werte (length=5) eingetragen werden.
Weiterhin zeichnet abline(h=0) eine horizontale Linie bei Null ein (Syntax: abline(a,b): zeichnet Gerade a+bx) und es wird
Text mittels der Low-level Grafikoption text (Syntax: text(x-Koord, y-Koord, labels= "enthält Text", weitere Argumente)) eingefügt. Und mit der
Grafikoption legend wird die Legende in das Grafikfenster eingefügt
(Syntax: legend(x-Koordinate,y-Koord.,legend=c("Sinus", "Cosinus"), lty=c(1,3), col=c("red", "blue"))).
R-Skript | Output |
---|---|
|
|
Durch Eingabe von colors() in die Konsole werden alle 657 Farben, die in R zur Verfügung stehen, aufgelistet:
Hinweis: In Python wird die Funktion legend() der Pandas-Bibliothek direkt auf die Grafik angewandt, d.h. plotName.legend(), um eine
Legende automatisch zu erzeugen. In MATLAB wird nach Erzeugung einer Grafik, z.B. mittels plot(), mit dem anschließenden Befehl "hold on" das
aktuelle Grafikfenster für alle weiteren Plots verwendet, mit legend('Text1','Text2', ...) wird die Legende eingefügt und mit "hold off" wird die
Fixierung des Grafikfensters wieder aufgelöst.
2 Zufallszahlen erzeugen
Da R auf statistische Programmierung spezialisiert ist, bietet es für alle bekannten Verteilungen der Wahrscheinlichkeitstheorie vier Funktionen an: die Dichte, die Verteilungsfunktion, die Quantilfunktion und den Zufallszahlengenerator. Die Funktionsnamen bestehen aus: d/p/q/r + Verteilungstyp. Die Argumente der Funktionen hängen vom Verteilungstyp ab. Die wichtigen Funktionen zur statistischen Analyse sind im Paket stats enthalten. In folgenden Beispielen werden die Gleichverteilung und die Normalverteilung genauer betrachtet.
Beispiel: Gleichverteilte Zufallszahlen und deren Histogramm
Um n gleichverteilte Zufallszahlen zwischen a und b zu erzeugen, wird die Funktion runif(n, min=a, max=b) aufgerufen, default
sind die Werte a=0 und b=1. Das Histogramm über diese Werte wird mit hist() erzeugt.
R-Skript | Output |
---|---|
|
|
Beispiel: Normalverteilte Zufallszahlen und deren Reproduzierbarkeit
Um n normalverteile Zufallszahlen mit Erwartungswert a und Standardabweichung b zu erzeugen, wird die Funktion
rnorm(n, mean = a, sd = b) aufgerufen, default
sind die Werte mean=0 und sd=1, beschreiben also eine Standardnormalverteilung.
Um die Zufallszahlen zu reproduzieren, d.h. immer
dieselben Zahlen zu ziehen, wird mit set.seed(Wert) ein Seed festgelegt, dieser dient dem Zufallsgenerator als Startwert. Wenn kein Seed
gesetzt wird dient die Systemzeit als Startwert.
Das Histogramm über die Zufallswerte wird mit hist() erzeugt.
R-Skript | Output |
---|---|
|
|
3 Zufallsstichproben erzeugen
Um aus gegebenen Daten eine Zufallsstichprobe zu ziehen, wie es z.B. bei der Zerlegung eines Datensatzes in Trainings- und Testdaten erforderlich ist, wird die Funktion sample aus dem base-Paket verwendet.
Beispiel: Ziehen mit und ohne Zurücklegen der Daten
Aus den Datenwerte 1 bis 12 wird mit sample eine Zufallsstichprobe der Größe size gezogen. Wenn das Argument
replace auf TRUE gesetzt wird, dann wird mit Zurücklegen gezogen, damit sind Wiederholungen der Werte möglich.
Default wird die Stichprobe ohne Zurücklegen, also mit replace=FALSE, erzeugt.
R-Skript | Output |
---|---|
|
|
YouTube-Video
Der Einstieg in R mit RStudio wird durch YouTube-Videos (Screencast mit zusätzlichen Erläuterungen) veranschaulicht.
Fazit & Ausblick
Dieser letzte Teil der R-Tutorial-Reihe Teil 3: Grafiken und Zufallszahlen zeigte einen Einstieg in die Syntax zur Erzeugung von Grafiken und von Zufallszahlen und -stichproben in der Programmiersprache R und bildet den Abschluss des Einsteiger-Tutorials mit den vorherigen Teilen Teil 1: Variablen, Vektoren, Matrizen, regelmäßigen Folgen und Teil 2: Kontrollstrukturen und Funktionen.
Der interaktive RVisLearner [5] ist eine Lern-App, die zeigt, wie man Datenvisualisierungen einerseits mit den R-Funktionen hist und plot aus dem R-Paket graphics und andererseits mit den entsprechenden Funktionen des Tidyverse-Pakets ggplot2 erstellt. Sowohl die R-Grafiken als auch das ggplot2-Paket können verwendet werden, um Daten als Histogramm, Streudiagramm, Boxplot usw. darzustellen, und die resultierenden Diagramme sind ähnlich ansprechend. Sie unterscheiden sich darin, wie die Argumente den Funktionen zugeführt werden, und in Bezug auf die Lernkurve.
Autoren, Tools und Quellen
Autoren:
M.Sc. Anke Welz
Prof. Dr. Eva Maria Kiss
Tools:
elab2go Links:
- Demo-R1: R-Tutorial Teil 1: Variablen, Vektoren, Matrizen, regelmäßigen Folgen und Datensätze
- Demo-R1: R-Tutorial Teil 2: Kontrollstrukturen und Funktionen
Nützliche Links zu R:
- 1. R-Dokumentation im Comprehensive R Archive Network (CRAN)
- 2. Comprehensive R Archive Network (CRAN): An Introduction to R
- 3. RStudio Support: Quick list of useful R packages
- 4. EBook: Hadley Wickham, Garrett Grolemund: R for Data Science. O'Reilly, Januar 2017.
- 5. RVisLearner: Eine Shiny-App für die Datenvisualisierung mit R Graphics und Tidyverse ggplot2.