R - Einführung in Datenverarbeitung (Stefan Bosse) [11.2023] |
Bitte folgenden Code ausführen um notwendige Bibliotheken zu laden. Nicht erforderlich bei nativer R Software.
▸
[] |
✗
≡
|
Es wird in diesem Kurs der R-Dialekt r+ verwendet. R+ ist eine Reimplementierung von R in JavaScript und läuft direkt in Web Browsern und node webkit Applikationsprogrammen. Es ist keinee Softwareinstallation erforderlich.
R+ ist nahezu R Syntax mit einigen Ergänzungen die die Programmierung und lesbarkeit von Programmen erleichtern.
Nicht alle R Packages sind in R+ enthalten, und es kann Abweichungen geben.
Dennoch lassen sich die meisten öffentlich verfügbaren algorithmischen Lösungen und Hilfestellungen mit R+ umsetzen.
Eine Variable ist in R eine Referenz auf Werte. Werte können sein:
numeric
logical
character
list
function
Variablen kann ein neuer Wert (also eine Referenz) zugewiesen werden mit den <-
und =
Operationen. Der Pfeiloperator kann bevorzugt verwendet werden, der Unterschied zwischen beiden ist marginal, wobei =
noch für benannte Funktionsparameter verwendet wird. Ausdrücke können beliebibig komplex sein, teils aus Operanden mit unterschiedlichen Datentypen bestehen. Es kann aber auch zu typsisierten Fehlermeldungen kommen. So können in R Zeichenketten nicht mittels +
verknüpft werden (es ist die Funktion paste
zu verwenden).
▸
[] |
✗
≡
|
Variablenamen können aus den Zeichen a
-z
, A
-Z
, den Zahlen 0
-9
(außer an erster Stelle) und einem Punkt .
bestehn.
Aufgabe. Zerlege folgenden komplexen Ausdruck in eine Sequenz von einfachen (max. eine Operation) unter Zuhilfename von weiteren Variablen.
▸
[] |
✗
≡
|
Alle Variablen werden in einem globalen Arbeitsbereich (Kontext) angelegt, der bereits vordefinierte Werte enthält. Innerhalb von Funktionen existiert ein lokaler Kontext und Arbeitsbereicj, und Variablenzuweisungen finden in diesem statt. Funkctionsparameter sind immer lokal.
▸
[] |
✗
≡
|
Frage. Welche Sichtbarkeit haben die beiden Variablen x und x2 in der Funktion foo?
Konstante Zeichenketten werden mit der "ABC"
Syntax eingeführt. Zeichenketten können mit der paste
Funktion zusammengefhrt werden (jeweils mit Trennzeichen):
Folgende Basisoperationen existieren:
abbreviate
liefert eine Abkürzung einer Zeichenkettechartr(old,new,x)
ersetzt einen oder mehrere Zeichen in einer Zeichenkette (Ergebnis wird in einer Liste zurückgegeben)strsplit(x,split)
zerlegt eine Zeichenkette in eine Liste von Tokenssubstr(x,start,stop)
liefert eine Teilzeichenkette beginnend bei start und bis stop (Zeichenposition)tolower
wandelt alle Zeichen auf Kleinschreibung umtoupper
wandelt alle Zeichen auf Großschreibung umFunktionen erwarten Argumente in der Reihenfolge der Parameterdefinition, z.B. foo(a,b,c) erwartet als erstes Argument a, dann b, d.h., foo(1,2,3). Alternativ können die Argumente auch den Parameternamen zugewiesen werden, wo die Reihenfolge dann keine Rolle mehr spielt, also z.B. foo(c=3,a=1,b=2)
▸
[] |
✗
≡
|
Aufgabe. Zerlege die Zeichenkette "A-1 B-2 C-1" in 1. Token die durch ein Leerzeichen getrennt sind, und dann 2. diese Token zerlegen mittels des Bindestrichs. Hinweis: Die Stringoperationnen können auch auf Listen angewendet werden!
▸
[] |
✗
≡
|
Listen sind geordnete Werte die entweder über einen numerischen Index oder über einen Elementnamen referenziert werden können. Listen werden mit der list
Funktion erzeugt. Ein numerischer Selektor wird durch den [i]
Operator eingeleitet.
Achtung: Liefert hier wieder eine Liste mit einem Element! Will man das Listenelement direkt lesen verwendet man den [[i]]` Operator!
Benannte Listenelemente könne bei der Erzeugung mittels name=val
erstellt werden, oder später durch die names
Funktion. Listen könen mehrsortig sein (d..h., Elemente von verschiedenen Datentyp). Neue Elemnte können an einer bestimmten Position mittels append` hinzugefügt werden.
▸
[] |
✗
≡
|
In R+ gibt es die Kurzschreibweise {a=1,b=2,..}
für list(a=1,b)2,..)
! Es können auch numerisch indizierte Listen mittels der Syntax {1,2,3,..}
(oder mit list) erzeugt werden. Hier ist nur eine numerische Referernzierung der Element möglich, also z.B. v[1]
.
Aufgabe. Zerlege die Zeichenkette "A-1 B-2 C-1" in Tokens durch Leerzeichen getrennt, verändere die Reihenfolge der Listenelement deart dass C B A als Reihenfolge entsteht, und füge die Listenelement wieder zu einer Textzeichenkette zusammen.
▸
[] |
✗
≡
|
Vektoren sind ähnlich Listen. Vektoren bieten anders als Listen die Möglichkeit Werte in kompakten (linearen) Arrays zu speichern. Daher kann ein bestimmter Datentype (mode) angegeben werden. Ein von einer Argumetenliste initialisierter Vektor wird mit c
, ein konstant initialisierter mit vector
erzeugt. Vektoren sind immer eindimensional. Mehrdimensionale "Vektoren" sind Arrays und Matrizen (zweidimensional), Teilbereiche eines Vektors können durch den Bracketoperator ausgewählt werden.
Folgende Vektorfunktionen sind wichtig:
min
, max
, range
, mean
, sum
fivenum
; liefert {min, quantile1, median, mean, qunatile3, max} bei numerischen Vektorentable
bei kategorischen Vektoren
▸
[] |
✗
≡
|
In R+ gibt es die Kurzschreibweise [v1,v2,..]
für c(v1,v2,..)
um initialisierte vektoren zu erzeugen!
In R+ werden Matrizen spaltenweise organisiert (in R zeilenweise), d.h., eine Initialisierung mit einem Vektor [1,2,3,4]
und zwei Spalten führt zu den Werten 1 und 2 in der ersten Zeile!
Aufgabe. Analysiere die folgenden Vektoren klassengerecht, notiere die Ergebnisse. Was bedeuten die statistischen Werte? Führe eine Recherche durch.
▸
[] |
✗
≡
|
Eine Matrix (ähnlich einem Datenrahmen, folgendes gilt i.A. auch für Datenrahmen) ist eine zweidimensionale Tabelle und wird mit der matrix(init,nrow,ncol)
Funktion erzeugt. Der Datentyp muss skalar bzw. atomar sein (numeric
, logical
, `character').
Folgende Matrixfunktionen sind wichtig:
col(m)
liefert eine Matrix von m mit Spaltenindexwertendiag(m)
liefert die Diagonalelemente einer Matrixdim(m)
liefert die Dimensionen einer Matrixrow(m)
liefert eine Matrix von m mit Zeilenindexwertennrow
, ncol
, colnames
um einzelne Informationen über die Matrix zu erhaltenmin
, max
, minMax
, range
, mean
, sum
und fivenum
(Vorsicht beu fivenum: Median und Quantile Berechnung kann sehr rechenintensitiv sein)%*%
▸
[] |
✗
≡
|
In R+ gibt es die Kurzschreibweise [|v11,v12,..,c1n;c21,c22,..|]
anstelle für matrix(c(v11,...),...)
um initialisierte Matrizen zu erzeugen!
Frage. Was ist der Unterschied bei der Initialisierung von data1 und data2? Was passiert wenn anstelle 1:15
der Bereichsvektor 1:3
verwendet wird?
Relationale Ausdrück angewendet auf Matrizen (oder natürlich auch Vektoren) liefern eine Boolesche Matrix oder einen Vektor (entweder mit Booleschen Werten FALSE oder TRUE, oder numerisch mit 0 und 1 Werten gefüllt)!
Will man die Positionen (row,col) haben kann man die which
Funktion verwenden, die entweder den linearen Index (spaltenorientiert) oder mit der arr.ind=TRUE
Option auch als Matrix liefert.
▸
[] |
✗
≡
|
Frage. Wenn ein Bild durch eine Matrix repärsentiert wird, wie kann eine Binärisierung des Bildes erreicht werden? Wählen sie im folgenden Beispiel den Schwellwert mit t=0.5. Alle Matrixelemente mit x < t sollen zu Null, und alle mit x ≥ t zu 1 werden.
data3<-matrix(runif(9),nrow=3,ncol=3)
# data3.bin[]=....
print(data3.bin)
v[i]
sowohl lesend als auch schreibend ausgewählt werden.l[[i]]
verwendet werden um an das Listenelement zu gelangenv$x
refernziert werden[a:b]
Operator mit index={a,a+1,..,b} ausgewählt werden[row,col,..]
referenziert werden
▸
[] |
✗
≡
|
Arithemtische (+
, -
, *
, /
, %
, %%
), relationale (<
, >
, >=
, <=
, ==
, !=
) und logische (&
, |
) Operationen können auf einer Vielzahl von Datentypen inklusive Aggregationen wie Listen und Vektoren direkt angewendet werden. Bei Listen und Vektoren werden diese Operationen elementweise angewendet und erzeugen einen neuen Vektor.
▸
[] |
✗
≡
|
Aufgabe. Zerlege und analysiere den primes[primes>5]
Ausdruck. Was liefert primes>5
und wie funktioniert die Reduktion (Filterung) des Vektors? Erstelle einen Teilvektor aus primes der nur Werte < 5 und Werte > 10 enthält.
▸
[] |
✗
≡
|
R bietet Schleifen für die wiederholte Ausführung von Anweisungen und bedingte Anweisungen (if-else). Schleifen sind Iteratoren über Bereiche, Vektoren, oder Listen, und für wiederholte arithmetische Berechnungen hilfreich.
▸
[] |
✗
≡
|
Aufgabe. Berechne die Summe eines Vektors
▸
[] |
✗
≡
|
Eine Datentabelle besteht auf Spalten und Zeilen. Eine Zeile kann man als Liste auffassen, i.A. mit benannten Spaltennamen (oder numerisch indiziert). Die Zeilen können auch mit Namen versehen sein, i.A. werden Zeilen aber numerisch indiziert (erste Zeile nesitzt den Index 1).
Datentabellen werden in R als data.frame mit der Funktion data.frame()
erzeugt.
Es gibt auch Funktionen, wie z.B. das Lesen und Parsen einer CSV Datei, die Daten in Form eines data.frame objects erzeugen.
Häufig werden Datentabelle aus Spaltenvektoren oder Spaltenlisten erzeugt.
▸
[] |
✗
≡
|
Es gibt eine Vielzahl von Operationen und Funktionen die man auf Datentabellen anwenden kann:
nrow
, ncol
, colnames
und rownames
liefern Informationen über die Tabelle;
colSums
und rowSums
liefern numerische Aggregate der Zeilen und Spalten
Die Selektion einer Zeile mittels df[row,]
liefert eine Liste
Der Selektor df[row,]
kann auch auf der linken Seite einer Zuweisung verwendet werden um eine bestehende Zeile zu ändern oder eine Zeile hinzuzufügren
Spalten können anhand der Spaltennamen ausgewählt werden (lesend und verändernd) via df$col
oder df['colname']
, ebenso können neue Spalten hinzugefügt werden
Aufgabe. Erzeuge eine Datentabelle mit den Spalten x,sin,cos,tan
für die Werte x im bereich 0 bis 6 in den Abständen 0.5. Die Spalten sin,cos,tan
sollen mit den mathematischen Funktionen programmatisch berechnet werden.
▸
[] |
✗
≡
|
DATA: Variable dataIRIS Type: { length : number, width : number, petal.length : number, petal.width : number, species : string } [151]
Der Datensatz ist bereits im Notebook enthalten und wird als Datenrahmen (data.frame) data.iris
zur Verfügung gestellt!
▸
[] |
✗
≡
|
▸
[] |
✗
≡
|
Die Zielvariable y liegt als kategorische Variable vor. Eine Kodierung in eine numerische kann wie folgt mit der factor Funktion durchgeführt werden:
▸
[] |
✗
≡
|
Frage. Was enthält y.code
? Was bewirkt factor
(verwende print) und was enthält y.levels
?
Die universellste Analysefunktion ist summary
, gefolgt von fivenum
für numerische und table
für kategorische Variablen.
Aufgabe. Analysiere den Datensatz mit 1. summary
, 2. Einzelne Spalten mit fivenum
und table
. Welche Eigenschaften haben die einzelnen Variablen (Attribute)?
R summary liefert bei kategorischen Variablen keine Verteilungsanalyse. Mit dem Argument extended=TRUE
kann diese hier aktivuiert werden.
▸
[] |
✗
≡
|
Die plot(x,y)
Funktion ist universell und kann verschiedene Datenformate darstellen. Am häuigsten wird man sie für Punkt- und Linienverläufe verwenden. Die Breite (oder Höhe) des Plotfensters kann mit dev.new(width=300)
gesetzt werden.
▸
[] |
✗
≡
|
Aufgabe. Benutzte die plot(x,y)
Funktion um Zusammenhänge zwischen den einzlenen Variablen x1 bis x4 und mit der Zielvariablen y.code herzustellen. Findet man Strukturen, können schon geeignete Kandidaten für die Klassifikation gefunden werden?
▸
[] |
✗
≡
|
Grafisch konnten bereits Eingabevariablen mit der (nuemrisch kodierten) Ausgabevariable in einen Zusammenhang gesetzt werden. Analytisch kann man neben dem Informationsgewinn eine einfache Partitionierung der numerischen Eingabevariablen nach der Zielvariable vornehmen. Das ist im nächsten Beispiel gezeigt.
▸
[] |
✗
≡
|
Aufgabe. Analysiere die Partitionen. Lassen sich geeignete Teilungspunkte für wenigstens einer Zweiklassenseparation mit einer der Attribute erreichen?
▸
[] |
✗
≡
|