Zum Inhalt springen

Explorative Datenanalyse (EDA)

1. Einführung in die Explorative Datenanalyse

Die explorative Datenanalyse (EDA) ist ein Ansatz zur Analyse von Datenmengen, um Muster, Anomalien, Hypothesen und Überlegungen zu identifizieren. EDA hilft dabei, ein tiefes Verständnis der Daten zu entwickeln und wichtige Erkenntnisse zu gewinnen, bevor formale Modellierungs- oder Hypothesentests durchgeführt werden.

2. Ziele der EDA

  • Verständnis der Datenstruktur: Identifizierung der Variablentypen und deren Beziehungen.
  • Erkennung von Mustern und Trends: Visualisierung und statistische Zusammenfassungen, um Muster und Trends zu erkennen.
  • Identifikation von Anomalien und Ausreißern: Erkennung ungewöhnlicher Datenpunkte, die weiter untersucht werden müssen.
  • Hypothesengenerierung: Formulierung von Hypothesen basierend auf den gewonnenen Erkenntnissen.
  • Datenbereinigung: Identifikation und Behandlung fehlender Werte und inkonsistenter Daten.

3. Wichtige Schritte der EDA

3.1 Datenüberblick

  • Daten laden und anzeigen: Verwenden Sie Bibliotheken wie Pandas in Python, um die Daten zu laden und die ersten Zeilen anzuzeigen.
  import pandas as pd
  df = pd.read_csv('data.csv')
  print(df.head())
  • Datentypen und Struktur: Überprüfen Sie die Datentypen der Spalten und die allgemeine Struktur des Datensatzes.
  print(df.info())
  print(df.dtypes)

3.2 Typen von Variablen

3.2.1 Numerische Variablen

  • Definition: Variablen, die quantitative Werte annehmen.
  • Typen:
  • Kontinuierlich: Kann jeden Wert in einem bestimmten Bereich annehmen (z.B. Temperatur, Gewicht).
  • Diskret: Kann nur bestimmte, abzählbare Werte annehmen (z.B. Anzahl der Kinder, Anzahl der Autos).

3.2.2 Kategorische Variablen

  • Definition: Variablen, die qualitative Werte annehmen.
  • Typen:
  • Nominale Variablen: Kategorien ohne Rangordnung (z.B. Farben, Geschlecht).
  • Ordinale Variablen: Kategorien mit Rangordnung, aber ohne festen Abstand zwischen den Kategorien (z.B. Bildungsniveau, Zufriedenheitsgrade).

3.2.3 Zeitliche Variablen

  • Definition: Variablen, die Zeitpunkte oder Zeitintervalle darstellen.
  • Typen:
  • Datum und Uhrzeit: Spezifische Zeitpunkte (z.B. Geburtsdatum, Transaktionszeitpunkt).
  • Zeitintervalle: Dauer zwischen zwei Zeitpunkten (z.B. Lebensdauer, Verweildauer auf einer Website).

3.3 Deskriptive Statistik

  • Zusammenfassende Statistiken: Berechnen Sie Mittelwerte, Mediane, Standardabweichungen, Minima und Maxima für numerische Variablen.
  print(df.describe())
  • Häufigkeitsverteilungen: Erstellen Sie Häufigkeitstabellen für kategorische Variablen.
  print(df['category_column'].value_counts())

3.4 Wichtige Metriken

3.4.1 Mittelwert (Mean)

  • Definition: Der Durchschnitt aller Werte in einem Datensatz.
  • Anwendung: Gibt den zentralen Trend der Daten an.
  mean_value = df['numeric_column'].mean()
  print(mean_value)

3.4.2 Median

  • Definition: Der Wert, der einen Datensatz in zwei gleiche Hälften teilt.
  • Anwendung: Robust gegenüber Ausreißern, gibt den zentralen Wert an.
  median_value = df['numeric_column'].median()
  print(median_value)

3.4.3 Modus

  • Definition: Der am häufigsten vorkommende Wert in einem Datensatz.
  • Anwendung: Identifiziert den häufigsten Wert, nützlich für kategorische Daten.
  mode_value = df['numeric_column'].mode()[0]
  print(mode_value)

3.4.4 Varianz

  • Definition: Maß für die Streuung der Daten um den Mittelwert.
  • Anwendung: Gibt an, wie stark die Daten um den Mittelwert variieren.
  variance_value = df['numeric_column'].var()
  print(variance_value)

3.4.5 Standardabweichung

  • Definition: Die Quadratwurzel der Varianz.
  • Anwendung: Gibt die durchschnittliche Abweichung der Daten vom Mittelwert an, in den gleichen Einheiten wie die Daten.
  std_dev_value = df['numeric_column'].std()
  print(std_dev_value)

3.4.6 Quantile

  • Definition: Werte, die einen Datensatz in gleiche Teile unterteilen.
  • Anwendung: Quartile (25%, 50%, 75%) geben Aufschluss über die Verteilung der Daten.
  quantiles = df['numeric_column'].quantile([0.25, 0.5, 0.75])
  print(quantiles)

3.4.7 Interquartilsabstand (IQR)

  • Definition: Differenz zwischen dem 75%-Quantil (Q3) und dem 25%-Quantil (Q1).
  • Anwendung: Maß für die Streuung der mittleren 50% der Daten, robust gegenüber Ausreißern.
  Q1 = df['numeric_column'].quantile(0.25)
  Q3 = df['numeric_column'].quantile(0.75)
  IQR = Q3 - Q1
  print(IQR)

3.4.8 Schiefe (Skewness)

  • Definition: Maß für die Asymmetrie der Verteilung.
  • Anwendung: Positive Schiefe bedeutet einen langen rechten Schwanz, negative Schiefe einen langen linken Schwanz.
  skewness_value = df['numeric_column'].skew()
  print(skewness_value)

3.4.9 Wölbung (Kurtosis)

  • Definition: Maß für die „Spitzheit“ der Verteilung.
  • Anwendung: Gibt an, ob die Verteilung flacher oder spitzer ist als eine Normalverteilung.
  kurtosis_value = df['numeric_column'].kurt()
  print(kurtosis_value)

3.5 Datenvisualisierung

  • Histogramme und Dichteplots: Visualisieren Sie die Verteilung numerischer Variablen.
  import matplotlib.pyplot as plt
  df['numeric_column'].hist()
  plt.show()

  df['numeric_column'].plot(kind='density')
  plt.show()
  • Boxplots: Identifizieren Sie Ausreißer und die Verteilung numerischer Variablen.
  df['numeric_column'].plot(kind='box')
  plt.show()
  • Streudiagramme: Untersuchen Sie die Beziehungen zwischen zwei numerischen Variablen.
  df.plot(kind='scatter', x='numeric_column1', y='numeric_column2')
  plt.show()
  • Balkendiagramme: Visualisieren Sie die Häufigkeiten kategorischer Variablen.
  df['category_column'].value_counts().plot(kind='bar')
  plt.show()
  • Korrelationsmatrix: Visualisieren Sie die Korrelationen zwischen numerischen Variablen.
  import seaborn as sns
  corr_matrix = df.corr()
  sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
  plt.show()

3.6 Behandlung fehlender Werte

  • Identifikation fehlender Werte: Überprüfen Sie, welche Spalten fehlende Werte enthalten und wie viele.
  print(df.isnull().sum())
  • Strategien zur Behandlung fehlender Werte: Entscheiden Sie, ob fehlende Werte entfernt, durch Mittelwerte ersetzt oder durch andere Imputationsmethoden behandelt werden sollen.
  # Entfernen von Zeilen mit fehlenden Werten
  df_cleaned = df.dropna()

  # Ersetzen fehlender Werte durch den Mittelwert
  df['numeric_column'].fillna(df['numeric_column'].mean(), inplace=True)

  # Ersetzen fehlender Werte durch den häufigsten Wert
  df['category_column'].fillna(df['category_column'].mode()[0], inplace=True)

3.7 Erkennung und Behandlung von Ausreißern

  • Identifikation von Ausreißern: Verwenden Sie Boxplots und Z-Scores, um Ausreißer zu identifizieren.
  # Boxplot zur Identifikation von Ausreißern
  df['numeric_column'].plot(kind='box')
  plt.show()

  # Z-Scores zur Identifikation von Ausreißern
  from scipy import stats
  z_scores = stats.zscore(df['numeric_column'])
  outliers = df[(z_scores > 3) | (z_scores < -3)]
  print(outliers)
  • Behandlung von Ausreißern: Entscheiden Sie, ob Ausreißer entfernt oder transformiert werden sollen.
  # Entfernen von Ausreißern
  df_cleaned = df[(z_scores <= 3) & (z_scores >= -3)]

  # Transformation von Ausreißern (z.B. durch Capping)
  df['numeric_column'] = df['numeric_column'].apply(lambda x: min(x, df['numeric_column'].quantile(0.95)))

3.8 Analyse von Beziehungen

  • Korrelation und Kovarianz: Berechnen Sie Korrelations- und Kovarianzmatrizen, um lineare Beziehungen zwischen numerischen Variablen zu untersuchen.
  corr_matrix = df.corr()
  print(corr_matrix)

  cov_matrix = df.cov()
  print(cov_matrix)
  • Kreuztabellen: Untersuchen Sie die Beziehungen zwischen kategorischen Variablen.
  cross_tab = pd.crosstab(df['category_column1'], df['category_column2'])
  print(cross_tab)

4. Werkzeuge und Bibliotheken

  • Python: Pandas, NumPy, Matplotlib, Seaborn, Scikit-learn
  • R: dplyr, ggplot2, tidyr, caret
  • Excel: Für einfache Datenvisualisierungen und deskriptive Statistiken

5. Best Practices

  • Dokumentation: Dokumentieren Sie jeden Schritt der EDA, um die Reproduzierbarkeit zu gewährleisten.
  • Iterativer Prozess: EDA ist ein iterativer Prozess. Analysieren Sie die Daten schrittweise und passen Sie Ihre Ansätze basierend auf neuen Erkenntnissen an.
  • Kritisches Denken: Hinterfragen Sie die Ergebnisse und überprüfen Sie, ob sie plausibel sind.

6. Fazit

Die explorative Datenanalyse ist ein entscheidender Schritt im Datenanalyseprozess. Sie hilft dabei, ein tiefes Verständnis der Daten zu entwickeln, Muster und Anomalien zu erkennen und fundierte Hypothesen zu formulieren. Durch die Anwendung der oben genannten Schritte, Metriken und Werkzeuge können Sie wertvolle Erkenntnisse gewinnen, die Ihre nachfolgenden Analysen und Modellierungen unterstützen.