R - Einführung in Datenverarbeitung (Stefan Bosse) [11.2023]

Einführung in die Datenverarbeitung mit R (Teil 1)

Einführung in die Datenverarbeitung mit R (Teil 1)
Vorwort
Literatur
Variablen und Ausdrücke
Kontext und Workspace
Zeichenketten
Listen
Vektoren
Matrizen
Indizierung von Aggregationen
Arithmetik
Schleifen und Bedingte Anweisungen
Datentabellen (Data Frames)
Analyse eines Beispieldatensatzes
Daten
Zerlgeung der Tabelle
Analysefunktionen
Grafische Analyse
X-Y Partitionierung

Vorwort

Bitte folgenden Code ausführen um notwendige Bibliotheken zu laden. Nicht erforderlich bei nativer R Software.


R Set-up

 ▸ 
[]
 ✗ 
 ≡ 

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.

Literatur

Variablen und Ausdrücke

Eine Variable ist in R eine Referenz auf Werte. Werte können sein:

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).


Variablen und Ausdrücke

 ▸ 
[]
 ✗ 
 ≡ 

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.


Zerlegung eines kompelxen Ausdrucks

 ▸ 
[]
 ✗ 
 ≡ 

Kontext und Workspace

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.


Unterschiedliche Sichtbarkeit von Variablen

 ▸ 
[]
 ✗ 
 ≡ 

Frage. Welche Sichtbarkeit haben die beiden Variablen x und x2 in der Funktion foo?

Zeichenketten

Konstante Zeichenketten werden mit der "ABC"Syntax eingeführt. Zeichenketten können mit der paste Funktion zusammengefhrt werden (jeweils mit Trennzeichen):

Folgende Basisoperationen existieren:

Funktionen 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)


Zeichenketten

 ▸ 
[]
 ✗ 
 ≡ 

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!


Zerlegung einer Zeichenkette

 ▸ 
[]
 ✗ 
 ≡ 

Listen

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.


Listen

 ▸ 
[]
 ✗ 
 ≡ 

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.


Zerlegung einer Zeichenkette

 ▸ 
[]
 ✗ 
 ≡ 

Vektoren

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:


Datenvektoren

 ▸ 
[]
 ✗ 
 ≡ 

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.


Statistische Analyse von Vektoren

 ▸ 
[]
 ✗ 
 ≡ 

Matrizen

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:


Matrixerzeugung und Operationen

 ▸ 
[]
 ✗ 
 ≡ 

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.


Relationale Operationen auf Matrizen

 ▸ 
[]
 ✗ 
 ≡ 

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 xt zu 1 werden.

data3<-matrix(runif(9),nrow=3,ncol=3)
# data3.bin[]=....
print(data3.bin)

Indizierung von Aggregationen


Elementauswahl von Matrizen

 ▸ 
[]
 ✗ 
 ≡ 

Arithmetik

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.


Arithmetik auf Datenvektoren

 ▸ 
[]
 ✗ 
 ≡ 

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.


Bereichsselektion eines Datenvektors

 ▸ 
[]
 ✗ 
 ≡ 

Schleifen und Bedingte Anweisungen

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.


Schleifen und bedingte Anweisungen

 ▸ 
[]
 ✗ 
 ≡ 

Aufgabe. Berechne die Summe eines Vektors


 ▸ 
[]
 ✗ 
 ≡ 

Datentabellen (Data Frames)

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).


Erzeugung von Datentabellen (data.frame)

 ▸ 
[]
 ✗ 
 ≡ 

Es gibt eine Vielzahl von Operationen und Funktionen die man auf Datentabellen anwenden kann:

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.


 ▸ 
[]
 ✗ 
 ≡ 

Analyse eines Beispieldatensatzes

Daten

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!


Arithmetik auf Datenvektoren

 ▸ 
[]
 ✗ 
 ≡ 

Zerlgeung der Tabelle


Zerlegung in Spalten

 ▸ 
[]
 ✗ 
 ≡ 

Die Zielvariable y liegt als kategorische Variable vor. Eine Kodierung in eine numerische kann wie folgt mit der factor Funktion durchgeführt werden:


Kodierung

 ▸ 
[]
 ✗ 
 ≡ 

Frage. Was enthält y.code? Was bewirkt factor (verwende print) und was enthält y.levels?

Analysefunktionen

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.


Arithmetik auf Datenvektoren

 ▸ 
[]
 ✗ 
 ≡ 

Grafische Analyse

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.


Beispiele für die Plot Funktion

 ▸ 
[]
 ✗ 
 ≡ 

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?


Grafische Analyse von Attributen

 ▸ 
[]
 ✗ 
 ≡ 

X-Y Partitionierung

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.


Partitionierung der x-Werte nach (kategorischen) y-Werten

 ▸ 
[]
 ✗ 
 ≡ 

Aufgabe. Analysiere die Partitionen. Lassen sich geeignete Teilungspunkte für wenigstens einer Zweiklassenseparation mit einer der Attribute erreichen?


Analyse der Partitionen

 ▸ 
[]
 ✗ 
 ≡ 



Hilfe



Einreichung (Assignment #01-46158 )



Prüfen



Bewerten (Lehrer)




Created by the NoteBook Compiler Ver. 1.25.0 (c) Dr. Stefan Bosse (Fri Dec 08 2023 17:25:09 GMT+0100 (Central European Standard Time))