R - Einführung in Datenverarbeitung (Teil 2) mit Analyse (Stefan Bosse) [5.2025] |
Wir verwenden hier Pakete math
, plot
, pca
. Ggfs. in einem Snippet mittels use
einbinden. Rechts unten gibt es den ChatBot für eine R+ Hilfe.
Daten werden häufig in Datentabellen organisiert und gespeichert. Eine Datentabelle besteht aus Zeilen und Spalten.
Spalten einer Datentabelle repräsentieren Variablen, Zeilen repräsentieren Instanzen (Experimente, Beispiele).
Dabei unterteilen sich bei ML Problemen häufig die Spalten in Eingabeattribute (X) und Ausgabeattribute (Y).
In R werden Datentabellen i.A. durch einen data.frame
Datentyp (Datenrahmen) abgebildet.
▸
[] |
✗
≡
|
Datentabellen sind wie 2-dim Matrizen, und Zeilen und Spalten können über eine numerische Indizierung ausgewählt werden. Die Auswahl einer Spalte oder Zeile liefert einen Vektor, die Auswahl mehrerer Spalten und/oder Zeilen liefert wieder eine Datentabelle.
Auswahl von Feldern einer Datentabelle über den Bracketoperator D[rows,columns]
. Auswahl aller Spalten oder Zeilen durch Auslassung eines Wertes, z.B. alle Zeilen der zweiten Spalte wäre D[,2]
, einige Spalten der dritten Zeile wäre D[3,1:2]
, selektiert über den Bereichsausdruck start:end
. Einzelne Spalten können über den namentlichen Selektor $
ausgewählt werden, z.B. D$x
.
Aufgabe 1. Wähle aus obigen Datenrahmen jeweils x und y aus, benutze sowohl den numerischen als auch den namentlichen Selektor. Welchen Datentyp erhält man (nutze die typeof(x)
Funktion) jeweils. Wähle dann die Zeilen 2-5 aus. Wende die Summationsfunktion auf die Spalten an.
▸
[] |
✗
≡
|
Zusammenfassend gibt es fünf wichtige Datentypen und Datenformaten, die wie folgt erzeugt werden können (ε: Wert oder Ausdruck)
data.frame(x=ε,y=ε,..)
, mit x,y, usw. als Spaltennamen;matrix(x,nrows,ncols,mode?)
wobei x=ε ein konstanter Wert, eine Matrix oder ein vektor sein kann, und mittels mode kann man typisierte Matrizen erzeugen (z.B. float32
);vector(x,n,mode?)
oder c(ε,ε,ε,..)
bzw. [ε,ε,ε..]
array(x,[dim1,dim2,..],mode?)
list(x=ε,y=ε,..)
oder {x=ε,y=ε,..}
Häufig ist im Datenmanagement und der Datenanalyse sowie Modellierung eine Umwandlung zwischen diesen Formaten. Dazu gibt es zumeist universelle Umwandlungsfunktionen:
as.vector(x,mode?)
as.matrix(x,nrow?=N,ncol?=N,mode?)
as.data.frame(x)
as.list(x)
Feldsnamen können Vektoren und Listen nachträglich mittels der names
Funktion hinzugefügt werden, mei Matrizen und Datenrahmen gibt es die colnames
und rownames
Funktionen:
names(x)={'x','y',..}
colnames(m)={'x','y',..}
Aufgabe 2. Wandle nachfolgenden Vektor (randomisiert erzeugt) in eine Matrix mit 4 Zeilen und 3 Spalten um, schließlich in einen Datenrahmen mit den Spalten a, b und c. Wie sieht die Elemente des linearen Vektors nun in der Matrix und im Datenrahmen angeordnet?
▸
[] |
✗
≡
|
DATA: Variable dataIRIS Type: { length : number, width : number, petal.length : number, petal.width : number, species : string } [151]
Im folgenden wird ein Datensatz aus der Botanik verwendet:
Der Datensatz ist bereits im Notebook enthalten und wird als Datenrahmen (data.frame) data.iris
zur Verfügung gestellt!
Der Datensatz ist ein "Goldstandard" um ML Verfahren zu testen. Der Datensatz enthält Beispiele für drei verschiedene kategorische Zielwerte (Pflanzenklassen). Dabei sind zwei Klassen linear separierbar, aber die dritte benötigt eine nichtlineare Trennung!
▸
[] |
✗
≡
|
Man kann direkt einzelne Spalten evaluieren, z.B. bei numerischen Variablen mittels der Funktionen mean
, sum
, sd
, und table
bei kategorischen Variablen. Man kann auch eine Datentabelle als ganzes analysieren. So kann man die sapply
Funktion verwenden um eine Funktion auf alle Spalten anzuwenden, und man erhält einen Vektor der Aggregatwert (z.B. mean
).
▸
[] |
✗
≡
|
▸
[] |
✗
≡
|
Die Zielvariable y liegt als kategorische Variable vor. Eine Kodierung in eine numerische kann wie folgt durchgeführt werden:
▸
[] |
✗
≡
|
Frage 3. Was enthält y.code
? Was bewirkt factor
(verwende logg/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 4. 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 aktiviert 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. Das darstellungsformat kann mittels des type='l'
Argumentes eingestellt werden(p
:Punkt, l
: Linie, b
: Beides).
▸
[] |
✗
≡
|
Aufgabe 5. Benutzte die plot(x,y)
Funktion um Zusammenhänge zwischen den einzelnen 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?
Hinweis: Man kann die x Attribute miteinander vergleichen um Abhängigkeiten zu finden, oder eine x Variable mit y. Für y dann as.numeric(factor(y))
für die numerische Kodierung verwenden.
▸
[] |
✗
≡
|
Grafisch konnten bereits Eingabevariablen mit der (numerisch 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 6. Analysiere die Partitionen. Lassen sich geeignete Teilungspunkte für wenigstens einer Zweiklassenseparation mit einer der Attribute erreichen?
▸
[] |
✗
≡
|
Wir haben eine Datentabelle mit vier Eingabe- und einem Ausgabeattribut. Eine wichtige Frage in der Vorverarbeitung ist das Vorhandensein von linearen Abhängigkeiten zwischen Variablen (X). Im Grund auch nicht-lineare Zusammenhänge, diese sind aber ohne Kenntnis des polynomiellen Zusammenhangs nicht einfach nachweisebar.
Die Hauptkomponentenanlayse berechnet mittels linearer Matrixalgebra und Lösung eines Gleichungssystems die Hauptkomponentenvektorn PC (Principle Components) einer Datentabelle.
Jede Spalte der Datentabelle erzeugt einen PC Vektor (auch Eigenvektor genannt, da PCA ein Eigenwertproblem ist), mit der Dimension der Anzahl de Spalten. Weiterhin gibt es eine Länge (Eigenwert) des Vektors, d.h. der vektorielle Betrag |PC|.
Es steht uns das Paket pca
für die Berechnung der PCA zur Verfügung. Die Funktion prcomp
berechnet aus einem Datenrahmen bzw. einer Matrix die PC Vektoren.
Die Funktion prcomp
gibt ein abstraktes Objekt zurück. Dieses kann mit der summary
Funktion interpretierbar und mittels predict
zur Transformation der Datentabelle verwendet werden. Die prcomp
Funktion verwendet entweder alle Spalten der Datentabelle (und einer Matrix), oder nur eine Auswahl die mittels einer Formel ~x+y+z
ausgewählt werden. predict
benötigt dann eine Matrix oder Datenrahmen mit der gleichen Anzahl von Spalten wie Hauptkomponenten.
▸
[] |
✗
≡
|
Aufgabe 7. Untersuche die transformierte Datentabelle unter Verwendung der Scatterplot Funktion. Würde schon eine Hauptkomponente reichen um alle drei Klassen gut zu separieren? Welche Komponente ist es, und warum diese?
▸
[] |
✗
≡
|
Die trabsformierte Tabelle kann unter Verwendung der ersten degeree PC Vektoren wieder mittels der reverse
Funktion in die ursprüngliche Datentabelle zurück transformiert werden. Die Transformation bezeichnet man auch als Kompression (wenn weniger PC Vektoren verwendet werden als ursprüngliche Spalten), die Rücktransformation als Dekompression.
▸
[] |
✗
≡
|
Aufgabe 8. Untersuche die transformierte Datentabelle unter Verwendung der Rücktransformation. Wie hoch ist der RMSE unter Verwendung der ersten degree PC Vektoren?