Data Analy)cs (Master Wirtscha3swissenscha3en LUH -> Chapter 2 – „Der Data Minig Prozess“)
Quelle für das gesamte Dokument sind Vorlesung und Übung der Veranstaltung „Data Analy:cs“ im SoSe 26
Ins:tut für Arbeitsökonomik
(Python-Codes wurden durch den Verfasser via Erklärungen von ChatGPT erläutert.)
Begriffsdefini+on „Data Mining“
- Ziel: Muster in großen Datenbeständen erkennen bzw. entdecken
- Informa+onen aus diesen Mustern werden für weitere Analysen verwendet
- (bspw. Vorhersagen oder Klassifika+onen)
- Beispiel: Lineare Regression:
o Annahme: Datensatz über Pizzapreise versch. Restaurants in einer Stadt
(bspw. Daten über Pizzapreis, Größe, Standort des Restaurants (-> EnU. Zum Stadt-
zentrum), Zutatenqualität
o Frage: Wie verändert sich der Pizzapreis bei Änderungen der Größe, des Standorts &
der Qualität? -> Lineare Regression
o Ergebnisse können jetzt genutzt werden, um Pizzapreise in anderen Städten vorher-
zusagen
Variablentypen
Numerische Variablen:
- Kon+nuierlich: d.h. unendlich viele Werte (z.B. Größe, Alter, Zeit)
- Integer (ganze Zahlen): 0,1,2,3 (z.B. Anzahl an Autos, Anzahl an Städten)
Kategoriale Variablen:
- Geordnet (ordinal): d.h. Werte können logisch geordnet werden (z.B gut > ok > schlecht;
groß > micel > klein)
- Ungeordnet (nominal): d.h. Werte können nicht logisch geordnet werden (z.B blau, gelb, rot)
Kernidee im Data Mining
- Datenanalyse: Daten kennenlernen, ungewöhnliche Werte erkennen
- Visualisierung
- Vorhersage: Aufgabe ist Vorhersage eines numerischen Werts, z.B wie viel wird ein Kunde bei
einem Verkauf ausgeben?
- Klassifizierung: Aufgabe ist, zu iden+fizieren, zu welcher Kategorie eine Beobachtung gehört,
z.B. Empfänger eines Angebots kann reagieren/nicht reagieren; Antragsteller eines Kredits
kann pümktlich/ zu spät zurückzahlen
- Datenreduk)on: z.B Produkcypen gruppieren / Dimensionsreduk+on: Reduzierung der An-
zahl von Variablen
- Assozia)onsregeln: „Was passt zu was?“ – allg. Assozia+onsmuster Beispiel: Produktplatzie-
rung in Lebensmicelläden
- Empfehlungssysteme: „Was passt zu was?“ – auf individueller Ebene Beispiel: NeUlix, Ama-
zon
1
Der Data Mining Prozess
1. Zweck der Analyse definieren/verstehen
Was ist die Fragestellung? Wie werden Ergebnisse verwendet? Wer ist betroffen?
2. Beschaffung von Daten
(evtl. inkl. S+chprobenziehung)
3. Datenanalyse, -bereinigung, -vorbereitung
Gibt es fehlende Werte oder Ausreißer? Werden neue Variablen benö+gt?
4. Reduzieren der Daten(-dimension) (bei Supervised Data Mining: Par))onieren)
Eliminieren nicht benö+gter Variablen
5. Spezifizieren des Analyseziels
(Klassifizierung, Vorhersage, etc.)
6. Auswahl der Techniken
(z.B. Regression, Logit)
7. Itera)ve Implemen)erung und „Tuning“
z.B. Durchführung von Regressionen mit verschiedenen Kontrollvariablen
8. Evalua)on der Ergebnisse
Vergleich der Modelle
9. Roll-out und breiter Einsatz des besten Modells
Varia+onen: Paradigmen für das Data Mining
- Branchenübergreifende (vordefinierte) Standardprozesse für Data Mining
- Auch wenn Prozess und Schrice unterschiedliche Namen haben, gibt es eine gewisse Paralle-
len: Das bedeutet: Es gibt mehrere standardisierte Prozessmodelle, die alle denselben grund-
legenden Data-Mining-Workflow beschreiben, aber unterschiedlich organisiert und benannt
sind.
- Beispiele:
o SEMMA (SAS): Sample, Explore, Modify Assess
o CRISP-DM (SPSS): (Cross-Industry Standard Process for Data Mining)
Business Understanding, Data Understanding, Data Prepara+on, Modeling, Evalua-
+on, Deployment
2
Supervised vs. Unsupervised Learning
- Supervised Learning
o Ziel: Die Ergebnisvariable vorhersagen
o Zielwert in den Traningsdaten (also den Daten an denen der Algorithmus trainiert
wird) ist bekannt
o Anwendung erfolgt dann auf neue Daten, deren Zielwert nicht bekannt ist
o Methoden: Klassifizierung, Vorhersage
§ Vorhersage: Ziel ist Vorhersage (Predic+on) einer numerischen Outcome Vari-
able (OV)
§ Klassifizierung: Ziel ist die Vorhersage einer kategorialen Variable
- Unsupervised Learning
o Ziel: Muster erkennen, Daten in aussagekräoige Muster unterteilen, Strukturen ent-
decken, Zusammenhänge iden+fizieren
o Keine Zielvariable zur Vorhersage oder Klassifizierung vorhanden
o Methoden: Assozia+onsregeln, Datenreduk+on, Datenexplora+on, Visualisierung
Step 2 im Data Mining Prozess: Beschaffung von Daten (inkl. S)chprobenziehung)
S+chprobenziehung: Im Data Mining wird typischerweise mit großen Datenbanken bzw. Datensätzen
gearbeitet -> Algorithmen oder Modelle werden auf eine S)chprobe aus diesen angewendet
- Hierbei kann es Einschränkungen in Bezug auf die Rechenleistung geben
- Bei kleineren S+chproben werden Algorithmen schneller ausgeführt
Sobald das endgül+ge Modell entwickelt und ausgewählt ist, kann man dieses auf die gesamte bzw.
volle Datenbank/Datensatz anwenden
Oversampling bei seltenen Ereignissen
- Wenn das interessierende Ereignis selten ist, ist es möglich, dass eine Zufallss+chprobe zu
(zu) wenigen Fällen führt, an denen man interessiert ist
- Lösung: Das sog. Oversampling seltener Fälle, um ausgewogene Trainingsdaten zu erhalten
- Dieses Oversampling muss allerdings zu einem späteren Zeitpunkt korrigiert werden
- Erläuterung durch ChatGPT: Seltene Ereignisse werden im Trainingsdatensatz künstlich häufi-
ger gemacht, um das Modell besser trainieren zu können -> dadurch wird die Klassenvertei-
lung verzerrt! -> Wahrscheinlichkeiten bzw. Verteilungsregeln müssen später an die reale Ver-
teilung angepasst bzw. auf unverzerrte Daten evaluiert werden
3
S)chprobenziehung in Python
- „housing_df“ -> ist eine Dataframe, also Datensatz (bspw. aus der Library Pandas)
- „.sample(5)“ -> Methode zum Ziehen der Zufallss+chprobe (-> es werden zufällig 5 Zeilen
ausgewählt), Standard: ohne Zurücklegen, jede Beobachtung wird nur 1x ausgewählt!
- „random_state=1“ -> fixiert den Startwert (Seed) des pseudozufälligen Generators -> die-
selbe zufällige S+chprobe wird bei jeder Ausführung iden+sch reproduziert
Ziel: Häuser mit mehr als 10 Räumen sollen mit höherer W`keit in der S+chprobe vorkommen
- „0.9 if rooms > 10 else 0.01“ -> Bedingte Gewichtung: große Häuser (>10 Räume) erhalten
hohes Gewicht, alle anderen ein sehr niedriges
- „for rooms in housing_df.ROOMS“ -> Itera+on über alle Beobachtungen der Variable
„ROOMS“ (Anzahl Räume pro Haus)
- „[… for rooms in housing_df.ROOMS] -> List Comprehension: erzeugt eine Gewichtsliste mit
genau einem Gewicht pro Beobachtung
- „weights“ -> speichert die berechneten Gewichte als Variable ab
- „housing_df.sample(5)“ -> S+chprobenziehung aus dem Datensatz mit 5 Beobachtungen
- „weights=weights“ -> ak+viert gewichtetes Sampling, Auswahlw`keit ist propor+onal zu Ge-
wichten
4
Step 3 im Data Mining Prozess: „Datenanalyse, -bereinigung, -vorbereitung“
(Erste Analyseschrice in Python)
import pandas as pd
- → Impor+ert die Bibliothek pandas und vergibt den Alias pd, um Datenanalysefunk+onen
(insb. DataFrames) effizient nutzen zu können
housing_df = pd.read_csv('[Link]')
- → Lädt die CSV-Datei in einen DataFrame; die Daten werden strukturiert als Tabelle (Zeilen =
Beobachtungen, Spalten = Variablen) eingelesen
housing_df.shape
- → Gibt die Dimension des DataFrames zurück als (Anzahl Zeilen, Anzahl Spalten); dient zur
schnellen Übersicht über Datensatzgröße und Struktur
Deskrip)ve Sta)s)k
housing_df.describe()
- → Erstellt eine deskrip+ve Sta+s+k für alle numerischen Variablen im DataFrame (pandas);
liefert zentrale Kennwerte wie Anzahl der Beobachtungen (count), Micelwert (mean), Stan-
dardabweichung (std), Minimum, Quar+le (25%, 50%, 75%) und Maximum und dient zur
schnellen inhaltlichen Übersicht über Verteilungen und Streuungen im Datensatz
5
Erstellen von binären Dummyvariablen
- Behandlung von kategorialen Variablen: Bei den meisten Algorithmen müssen binäre
Dummy-Variablen für jede Kategorie der Variable erstellt werden (sofern die Algorithmen
dies nicht bereits eingebaut haben
- Anzahl der Dummies = Anzahl der Kategorien -1 -> redundante Infos führen zum Scheitern
der Algo+thmen
- Beispiel: Kategoriale Variable „Farbe“ mit Kat.: „rot, gelb, grün, blau“
Erstellen von drei Dummy-Variablen für:
- rot: 0 (nein), 1 (ja)
- gelb: 0 (nein), 1 (ja)
- grün: 0 (nein), 1 (ja)
-> Wenn es nun nicht rot, gelb oder grün ist, ist es blau
housing_df
- → Gibt den aktuellen DataFrame aus und dient zur Kontrolle des momentanen Datenzu-
stands vor der Transforma+on (pandas)
housing_df = pd.get_dummies(housing_df, ...)
- → Erzeugt Dummyvariablen (One-Hot-Encoding) für kategoriale Variablen im DataFrame und
überschreibt anschließend den ursprünglichen DataFrame mit der erweiterten Version
prefix_sep='_'
- → Legt fest, dass beim Namen der neuen Dummy-Variablen ein Unterstrich als Trennzeichen
zwischen Variablenname und Kategorie verwendet wird (z. B. Type_House)
drop_first=True
- → EnUernt eine Dummy-Kategorie pro kategorialer Variable (Referenzkategorie), um Mul+ko-
llinearität (Dummy-Falle) in Regressionsmodellen zu vermeiden
housing_df
- → Gibt den aktualisierten DataFrame aus, jetzt inklusive der erzeugten Dummy-Variablen
6
Behandlung von Ausreißern
Defini+on: Beobachtung, die im Vergleich zu den restlichen Daten extrem ist (bzw. weit enUernt ist)
- Diese Beobachtungen können einen unverhältnismäßig großen Einfluss auf das Modell haben
- Ausreißer erkennen ist sehr wich+g, ABER: Bei Entdeckung wird Fachwissen über die Daten
benö+gt, um zu bes+mmen, ob es sich um einen Fehler oder echtes Extrem handelt!
- Erkennung von Anomalien: Die Ausreißererkennung kann das Analyseziel sein
o Evtl. möglich, einen Fehler zu korrigieren (bspw. falsch gesetzte Dezimalstelle)
o Wenn die Anzahl der Ausreißer gering ist und wir Sie als Fehler erkennen -> als feh-
lenden Wert behandeln
- Erkennung über: Grafisch, Ordnen der Variablen, anhand Min-,Maxwerte
housing_df["YR_BUILT"].describe()
- → Liefert eine deskrip+ve Sta+s+k für die Variable YR_BUILT (Baujahr); zeigt zentrale Kenn-
werte wie Anzahl (count), Micelwert, Standardabweichung, Minimum, Quar+le und Maxi-
mum und dient zur ersten Iden+fika+on möglicher Ausreißer (pandas)
housing_df["YR_BUILT"].sort_values()
- → Sor+ert die Werte der Variable YR_BUILT in aufsteigender Reihenfolge; ermöglicht die ex-
plizite Sichtprüfung von Extremwerten (sehr alte oder sehr neue Baujahre) zur Iden+fika+on
potenzieller Ausreißer
7
Fehlende Werte
Wenn für eine Variable kein Datenwert für eine Beobachtung gespeichert ist
(Python via Numpy: als „NaN“ bezeichnet)
- Bei den meisten Algorithmen werden diese Beobachtungen (also Zeilen!) standardmäßig ver-
worfen -> Verwerfen würde Beobachtungsanzahl reduzieren
- Lösung 1: Verwerfen -> nur prak+kabel, wenn Anzahl fehlender Datensätze gering ist
- Lösung 2: Imputa)on -> Ersetzen fehlender Werte durch sinnvolle Ersatzwerte (z.B. Micel-
wert, Median, Mul+ple Imputa+on,…)
Vorteil: Datensatz und nicht fehlende Informa+onen können behalten werden
Einfache Imputa)on fehlender Werte
len(housing_df.dropna())
- → Gibt die Anzahl der Beobachtungen (Zeilen) zurück, nachdem alle Zeilen mit mindestens
einem fehlenden Wert enUernt wurden; dient zur Bes+mmung des Umfangs vollständiger Da-
tensätze (pandas)
housing_df["BEDROOMS"].mean()
- → Berechnet den arithme+schen Micelwert der Variable BEDROOMS unter Ignorierung feh-
lender Werte (NaN); dient als Kennzahl zur zentralen Lage der Verteilung
medianBedrooms = housing_df['BEDROOMS'].median()
- → Berechnet den Median der Variable BEDROOMS und speichert ihn in einer Variable zur
späteren Verwendung als robustes Imputa+onsmaß (weniger anfällig für Ausreißer als der
Micelwert)
housing_df.BEDROOMS = housing_df.BEDROOMS.fillna(value=medianBedrooms)
- → Ersetzt alle fehlenden Werte (NaN) in der Variable BEDROOMS durch den zuvor berechne-
ten Median (Imputa+on fehlender Werte)
len(housing_df.dropna())
- → Gibt erneut die Anzahl vollständiger Beobachtungen zurück, um zu überprüfen, ob feh-
lende Werte durch die Imputa+on effek+v reduziert wurden
housing_df["BEDROOMS"].mean()
- → Berechnet erneut den Micelwert nach der Imputa+on, um zu analysieren, wie sich die
zentrale Lage der Verteilung durch das Ersetzen fehlender Werte verändert hat
8
Standardisieren
Für einige Algorithmen müssen Daten standardisiert werden -> alle Variablen werden auf die gleiche
Skala gebracht.
Bsp.: Verschiedene Einheiten (Tage, Dollar, Anzahl) -> es soll eine Clusterbildung durchgeführt werden
(-> dazu muss ein Absatndsmaß berechnet werden). Wenn Dollar in 1000ern, alles andere allerdings
in 10ern ist, könnte der Dollar das Abstandsmaß beim Clustering domienieren
Das arithme)sche Mirel wird von Beobachtungswert abgezogen und durch die Standardabw. Divi-
diert:
Alterna)ve: Umsaklieren auf 0-1
(Abziehen des Minimalwerts und Division durch Spannweite)
Normalisieren
norm_df = (housing_df - housing_df.mean()) / housing_df.std()
- → Führt eine Z-Standardisierung (Normalisierung) aller numerischen Variablen im DataFrame
durch; jede Variable wird so transformiert, dass sie einen Micelwert von 0 und eine Stan-
dardabweichung von 1 hat (pandas)
housing_df.describe()
- → Liefert die deskrip+ven Kennwerte der Originaldaten (z. B. Micelwert, Standardabwei-
chung, Min, Max, Quar+le) zur Ausgangskontrolle vor der Transforma+on
norm_df.describe()
- → Liefert die deskrip+ven Kennwerte der normalisierten Daten; zur Überprüfung, dass Mit-
telwerte ≈ 0 und Standardabweichungen ≈ 1 sind
9
Umskalieren
res_bed = (housing_df["BEDROOMS"] - housing_df["BEDROOMS"].min()) / (housing_df["BE-
DROOMS"].max() - housing_df["BEDROOMS"].min())
- → Führt ein Min-Max-Rescaling der Variable BEDROOMS durch; die Werte werden linear auf
den Bereich [0, 1] transformiert, indem der kleinste Wert auf 0 und der größte auf 1 gesetzt
wird (alle anderen propor+onal dazwischen)
10
Par++onieren der Daten und Overfi€ng
Ziel: Modell finden, dass über den vorliegenden Datensatz hinaus verallgemeinert
- Wenn einfach die vorhandenen Daten verwendet werden, um das Modell zu finden, besteht
die Gefahr des „Overfi€ngs“ ->. Ein komplexes Modell könnte sich den vorhandenen Daten
perfekt anpassen, bei neuen Daten allerdings schlechter abschneiden
Ursachen bei Overfisng:
- zu viele Prädiktoren
- zu viele Modellparameter (Modell zu komplex bei zu geringer Beobachtungsanzahl)
- zu viele versch. Modelle ausprobiert
Ziel: Modell finden, das bei der Klassifizierung oder Vorhersage am besten abschneidet.
(Werden dieselben Daten für Entwicklung und Bewertung der Modellleistung verwendet, könnte dies
zu op+mis+sch sein -> Lösung: PARTITIONIERUNG der Daten in:
- Trainingsdaten (Modellentw. Und „Modelltraining“; Probieren versch. Modelle -> typischer-
weise größter Teil der Daten)
- Validierungsdaten (Performanceevaluierung des Modells -> wenn mehrere Modelle mit den
Validierungsdaten verglichen werden, könnte es zu Overfi€ng kommen, deswegen:
- Testdaten (manchmal) (werden verwendet, um weiteren Valisierungsschric durchführen zu
können)
Oben
from sklearn.model_selec)on import train_test_split
- → Impor+ert die Funk+on zur Auoeilung eines Datensatzes in Trainings- und Test-/Validie-
rungsdaten aus scikit-learn; standard Werkzeug für Datenpar++onierung im Machine Learn-
ing
trainData, validData = train_test_split(housing_df, test_size=0.4, random_state=1)
- → Teilt den DataFrame in zwei disjunkte Teilmengen auf: Trainingsdaten (60%) und Validie-
rungsdaten (40%)
housing_df → Gesamtdatensatz als Input
test_size=0.4 → 40 % der Daten gehen in die Validierung (Rest = Training)
trainData → Trainingss+chprobe für Modellschätzung
validData → Validierungss+chprobe zur Modellbewertung
random_state=1 → sorgt für reproduzierbare zufällige Auoeilung (fixer Seed)
11
print("Training :", [Link])
- → Gibt die Dimension des Trainingsdatensatzes aus (Anzahl Zeilen und Spalten), zur Kontrolle
der korrekten Auoeilung
print("Validierung :", [Link])
- → Gibt die Dimension des Validierungsdatensatzes aus, um die korrekte 60/40-Auoeilung zu
überprüfen
Merksatz:
Beim Par++onieren wird der Datensatz zufällig in Trainings- und Validierungsdaten aufgeteilt; der Trai-
ningssatz dient zur Modellschätzung, der Validierungssatz zur unabhängigen Modellbewertung.
Unten
trainData, temp = train_test_split(housing_df, test_size=0.5, random_state=1)
- → Teilt den Gesamtdatensatz in Trainingsdaten (50%) und eine Zwischendatei (temp = 50%)
auf; dient als erster Schric einer mehrstufigen Datenpar++onierung (scikit-learn)
validData, testData = train_test_split(temp, test_size=0.4, random_state=1)
- → Teilt die Zwischendaten (temp) erneut auf in Validierungsdaten (60% von temp = 30% ge-
samt) und Testdaten (40% von temp = 20% gesamt)
print("Training :", [Link])
- → Gibt die Dimension des Trainingsdatensatzes aus (Anzahl Beobachtungen und Variablen)
zur Kontrolle der Par++onierung
print("Valida)on :", [Link])
- → Gibt die Dimension des Validierungsdatensatzes aus zur Überprüfung der korrekten Auoei-
lung
print("Test :", [Link])
- → Gibt die Dimension des Testdatensatzes aus; der Testdatensatz dient der finalen, unabhän-
gigen Modellbewertung nach dem Training und Tuning
Merksatz:
Durch sequen+elles train_test_split wird der Datensatz in Trainings-, Validierungs- und Testdaten auf-
geteilt, wobei jede Teilmenge für einen spezifischen Schric im Modellierungsprozess (Schätzung, Tu-
ning, finale Evalua+on) verwendet wird.
12
Übung Chapter 2
import pandas as pd
- → Bibliothek zur Verarbeitung und Analyse tabellarischer Daten (z. B. Einlesen und Bearbeiten von CSV-Dateien in
DataFrames)
import seaborn as sns
- → Bibliothek für sta:s:sche Visualisierungen (z. B. Verteilungen, Zusammenhänge), basiert auf matplotlib
import numpy as np
- → Bibliothek für numerische Berechnungen und effiziente Arbeit mit Arrays (Grundlage vieler Data-Science-Tools)
from sklearn.model_selec6on import train_test_split
- → Funk:on aus scikit-learn zur AuWeilung eines Datensatzes in Trainings- und Testdaten (wich:g für die Modellbe-
wertung)
pd.read_csv("[Link]", keep_default_na=False)
- → Lädt eine CSV-Datei in ein pandas DataFrame (housing_df)
- → keep_default_na=False verhindert, dass bes:mmte Werte automa:sch als NaN (fehlende Werte) interpre:ert
werden
housing_df.head()
- → Gibt die ersten 5 Zeilen des Datensatzes aus
- → Wird genutzt, um einen schnellen Überblick über die Datenstruktur zu bekommen
housing_df.columns = [...]
→ Überschreibt alle Spaltennamen gleichzei:g
[[Link]().replace(" ", "_") for s in housing_df.columns]
→ sogenannte List Comprehension (kompakte Schleife)
Bedeutung Schri] für Schri]:
s → jeder einzelne Spaltenname
strip() → en`ernt Leerzeichen am Anfang/Ende
replace(" ", "_") → ersetzt Leerzeichen durch _
→ Ergebnis: saubere, codefreundliche Spaltennamen
housing_df.head()
→ zeigt die ersten 5 Zeilen zur Kontrolle der Änderungen
13
housing_df.ROOMS
- → Zugriff auf die Spalte ROOMS im DataFrame
- → enthält Anzahl der Zimmer pro Haus
[0.9 if rooms > 12 else 0.01 for rooms in housing_df.ROOMS]
→ List Comprehension zur Gewichtung
Bedeutung:
für jedes Haus wird ein Gewicht berechnet
rooms > 12 → Gewicht 0.9 (hohe Wahrscheinlichkeit)
sonst → Gewicht 0.01 (sehr geringe Wahrscheinlichkeit)
è Ziel: Häuser mit vielen Zimmern werden überpropor:onal oW ausgewählt (Oversampling)
housing_df.sample(10, weights=weights, random_state=1)
→ zieht eine Zufallss:chprobe von 10 Zeilen
Parameter:
weights=weights → beeinflusst Ziehwahrscheinlichkeit pro Zeile
random_state=1 → sorgt für reproduzierbare Ergebnisse
Sample_2
- → speichert das Ergebnis als neues DataFrame
Sample_2 (letzte Zeile)
- → gibt das Ergebnis im Notebook aus
[Link]({...})
- → erstellt eine Tabelle (DataFrame) aus einem Python-Dic:onary (Python-Datenstruktur)
- → zentrale Datenstruktur in pandas
"Age": [...]
- → Spalte Age mit Alterswerten
- → jede Liste entspricht einer Spalte im DataFrame
"Income": [...]
- → zweite Spalte mit Einkommenwerten
- → gleiche Zeilenanzahl wie Age erforderlich (sonst Fehler)
Data_a = ...
- → speichert den erzeugten DataFrame in der Variable Data_a
Data_a (letzte Zeile)
- → gibt den DataFrame im Notebook aus
14
Data_a.mean()
- → berechnet den Mi]elwert jeder Spalte (Age, Income separat)
Data_a.std()
- → berechnet die Standardabweichung jeder Spalte
(Data_a – Data_a.mean())
- → zentriert die Daten:
- jeder Wert wird um den Mi]elwert reduziert
- Ergebnis: Mi]elwert wird 0
/ Data_a.std()
- → skaliert die Werte durch Division durch die Standardabweichung
- sorgt dafür, dass die Streuung vergleichbar wird
Data_a.min()
- → berechnet den kleinsten Wert jeder Spalte
Data_a.max()
- → berechnet den größten Wert jeder Spalte
(Data_a - Data_a.min())
- → verschiebt alle Werte so, dass der kleinste Wert bei 0 startet
(Data_a.max() - Data_a.min())
- → berechnet die Spannweite (Range) jeder Spalte
pd.read_csv(...)
- → lädt eine CSV-Datei in ein pandas DataFrame (Toyota_df)
encoding="la6n1"
- → legt die Zeichenkodierung fest
- → notwendig, wenn Sonderzeichen (z. B. Umlaute, €-Zeichen) korrekt gelesen werden sollen
- → verhindert typische Impor`ehler wie „UnicodeDecodeError“
15
Toyota_df.columns = [...]
→ überschreibt alle Spaltennamen im DataFrame
[[Link]().replace(" ", "_") for s in Toyota_df.columns]
→ List Comprehension über alle Spaltennamen
Schri]weise:
s → einzelner Spaltenname
strip() → en`ernt Leerzeichen am Anfang/Ende
replace(" ", "_") → ersetzt Leerzeichen durch _
- Ergebnis: saubere, Python-kompa:ble Spaltennamen
Toyota_df.head()
- → zeigt die ersten 5 Zeilen zur Kontrolle der Änderungen
pd.get_dummies(...)
- → wandelt kategoriale Variablen (Textwerte) in numerische Variablen um
- → notwendig, da ML-Modelle nur mit Zahlen arbeiten können
columns=["Fuel_Type", "Color"]
- → nur diese Spalten werden umgewandelt
- → jede Kategorie wird in neue Dummy-Spalten aufgeteilt
prefix_sep="_"
- → trennt neuen Spaltennamen sauber
- → z. B. Fuel_Type_Diesel
drop_first=True
- → en`ernt eine Dummy-Spalte pro Kategorie
- → verhindert Mul:kollinearität (Dummy Trap)
- → eine Kategorie dient als Referenz
Toyota_df = ...
- → überschreibt den DataFrame mit den neuen numerischen Spalten
print(list(Toyota_df.columns))
- → gibt alle Spaltennamen als Liste aus
- → dient zur Kontrolle der Transforma:on
16
train_test_split(Toyota_df, test_size = 0.5)
- Teilt den gesamten Datensatz:
- 50 % Training (trainData)
- 50 % Zwischenmenge (temp)
temp
- Restdatensatz, der erneut aufgeteilt wird
train_test_split(temp, test_size = 0.4)
- Teilt die restlichen 50 % auf:
- 40 % von temp -> Tesdaten
- 60 % von temp -> Validierungsdaten
Dadurch entsteht insgesamt:
- 50 % Training
- 30 % Valida:on
- 20 % Test
random_state = 1
- Sorgt für reproduzierbare (iden:sche) Splits
shape
- Gibt Dimension des DataFrames zurück (Zeilen, Spalten)
print
- Kontrolliert die tatsächliche AuWeilung der Daten
17