Bivariate Analyse und Korrelationsanalyse
Untersuchen Sie Beziehungen zwischen Spaltenpaaren mit Streudiagrammen, Boxplots und einer Korrelations-Heatmap.
Bivariate Analyse und Korrelationsanalyse ist eine kostenlose Pandas & NumPy Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Pandas & NumPy Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.
Von einer Variablen zu zwei
Die bivariate Analyse untersucht jeweils die Beziehung zwischen genau zwei Spalten. Nachdem Sie jede Spalte einzeln profiliert haben (univariate Analyse), fragen Sie: Wie stehen diese beiden Variablen zueinander? Die Analysemethode hängt von der Kombination der Variablentypen ab: numerisch im Vergleich zu numerisch (Streudiagramm + Korrelation), kategorial im Vergleich zu numerisch (Boxplot/Violinplot) oder kategorial im Vergleich zu kategorial (Kreuztabelle + Chi-Quadrat-Test). Jede Kombination erfordert eine andere Technik.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
# Relationship types present in the dataset
print('Numeric columns:', df.select_dtypes('number').columns.tolist())
print('Categorical columns:', df.select_dtypes('object').columns.tolist())
print('Boolean columns:', df.select_dtypes('bool').columns.tolist())Numerisch im Vergleich zu numerisch: Streudiagramm
Für zwei numerische Variablen ist ein Streudiagramm das wichtigste bivariate Hilfsmittel. Es stellt jede Beobachtung als Punkt an den Koordinaten (x, y) dar und macht Richtung, Stärke und Form der Beziehung sichtbar. Sehen Sie sich das Diagramm immer an, bevor Sie einen Korrelationskoeffizienten berechnen – eine Korrelation von 0 kann dennoch eine starke nichtlineare (gekrümmte) Beziehung anzeigen, die der Koeffizient nicht erfasst.
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('titanic')
sns.scatterplot(data=df, x='age', y='fare', alpha=0.4)
plt.title('Age vs. Fare — Is There a Linear Relationship?')
plt.xlabel('Age')
plt.ylabel('Fare ($)')
plt.show()Pearson-Korrelationskoeffizient
Der Pearson-r-Koeffizient quantifiziert die Stärke und Richtung des linearen Zusammenhangs zwischen zwei numerischen Variablen. Berechnen Sie ihn mit df[['col1', 'col2']].corr() oder scipy.stats.pearsonr(x, y), das zusätzlich einen p-Wert für die Signifikanzprüfung zurückgibt. Kombinieren Sie r immer mit einem Streudiagramm – ein hoher r-Wert kann durch wenige Ausreißer verursacht werden, und derselbe r-Wert kann sehr unterschiedliche Punktwolken beschreiben (Anscombes Quartett veranschaulicht dies eindrucksvoll).
import pandas as pd
import seaborn as sns
from scipy import stats
df = sns.load_dataset('titanic').dropna(subset=['age', 'fare'])
# Pearson correlation
r, p = stats.pearsonr(df['age'], df['fare'])
print(f'Pearson r = {r:.3f}, p-value = {p:.4f}')
# Spearman for robustness check
rho, p_sp = stats.spearmanr(df['age'], df['fare'])
print(f'Spearman rho = {rho:.3f}, p-value = {p_sp:.4f}')Kategorial im Vergleich zu numerisch: Box- und Violinplots
Wenn eine Variable kategorial und die andere numerisch ist, lautet die Frage: Unterscheidet sich die numerische Verteilung zwischen den Kategorien? Verwenden Sie zum Vergleich einen Boxplot oder Violinplot. Beeinflusst beispielsweise der Überlebensstatus den bezahlten Fahrpreis? Wirkt sich die Passagierklasse auf das Alter aus? Diese Diagramme zeigen unmittelbar, ob die Zugehörigkeit zu einer Kategorie mit höheren oder niedrigeren Werten der numerischen Variablen verbunden ist.
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('titanic')
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
sns.boxplot(data=df, x='class', y='fare',
order=['First', 'Second', 'Third'], ax=axes[0])
axes[0].set_title('Fare by Passenger Class')
sns.violinplot(data=df, x='survived', y='age',
inner='quartile', ax=axes[1])
axes[1].set_title('Age Distribution by Survival')
plt.tight_layout()
plt.show()GroupBy-Statistiken für kategoriale und numerische Variablen
Ergänzen Sie den visuellen Vergleich durch numerische Gruppenstatistiken mit groupby. Berechnen Sie für jede Kategorie Mittelwert, Median und Anzahl, um die in den Diagrammen erkennbaren Unterschiede zu quantifizieren. Achten Sie auf Kategorien, bei denen Mittelwert und Median auseinanderliegen (ein Hinweis auf Ausreißer innerhalb einer Gruppe), und prüfen Sie, ob die Gruppengrößen ausgewogen sind – sehr kleine Gruppen (<5 Beobachtungen) machen Vergleiche unzuverlässig.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
stats = df.groupby('class')['fare'].agg(['mean', 'median', 'std', 'count'])
stats.columns = ['Mean Fare', 'Median Fare', 'Std Fare', 'Count']
print(stats.round(2))
print('\nSurvival rate by class:')
print(df.groupby('class')['survived'].mean().round(3))Kategorial im Vergleich zu kategorial: Kreuztabellen
Verwenden Sie bei zwei kategorialen Variablen pd.crosstab(df['var1'], df['var2']), um eine Häufigkeitstabelle zu erstellen, die zeigt, wie viele Beobachtungen in jede Kombination von Kategorien fallen. Normalisieren Sie nach Zeile oder Spalte mit normalize='index' oder normalize='columns', um statt Anzahlen Anteile zu erhalten. Dies bildet die Grundlage für die Untersuchung, ob zwei kategoriale Variablen unabhängig oder assoziiert sind.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
# Frequency table
counts = pd.crosstab(df['class'], df['survived'])
counts.columns = ['Died', 'Survived']
print('Counts:')
print(counts)
# Row-normalised proportions (survival rate per class)
props = pd.crosstab(df['class'], df['survived'], normalize='index')
props.columns = ['Died', 'Survived']
print('\nSurvival Rate per Class:')
print(props.round(3))Kreuztabellen als Heatmaps visualisieren
Wandeln Sie eine Kreuztabelle in eine Heatmap um, damit sich die Häufigkeiten der Zellen sofort visuell vergleichen lassen. Bei vielen Kombinationen von Kategorien ist dies übersichtlicher als eine ausgegebene Tabelle. Beschriften Sie jede Zelle mit ihrem Wert, indem Sie annot=True verwenden, und wählen Sie eine sequenzielle Farbkarte (z. B. 'YlOrRd'), da alle Werte nichtnegativ sind. Heatmaps mit nach Zeilen normalisierten Anteilen zeigen effektiv die bedingte Verteilung einer Kategorie gegeben eine andere.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('titanic')
props = pd.crosstab(df['class'], df['sex'], normalize='index')
sns.heatmap(props, annot=True, fmt='.2f', cmap='YlOrRd')
plt.title('Gender Mix by Passenger Class (Row %)')
plt.xlabel('Sex')
plt.ylabel('Class')
plt.show()Chi-Quadrat-Test auf Unabhängigkeit
Der Chi-Quadrat-Test auf Unabhängigkeit prüft, ob zwei kategoriale Variablen statistisch unabhängig sind. scipy.stats.chi2_contingency(crosstab) gibt die Chi-Quadrat-Statistik, den p-Wert, die Freiheitsgrade und die erwarteten Häufigkeiten zurück. Ein kleiner p-Wert (typischerweise < 0,05) bedeutet, dass zwischen den beiden Variablen ein statistisch signifikanter Zusammenhang besteht – die Verteilung der einen variiert systematisch mit der anderen.
import pandas as pd
import seaborn as sns
from scipy.stats import chi2_contingency
df = sns.load_dataset('titanic')
# Test if passenger class and survival are independent
crosstab = pd.crosstab(df['class'], df['survived'])
chi2, p, dof, expected = chi2_contingency(crosstab)
print(f'Chi-squared: {chi2:.2f}')
print(f'P-value: {p:.6f}')
print(f'Degrees of freedom: {dof}')
print(f'\nConclusion: {"Significant association" if p < 0.05 else "No significant association"}')Vollständige Korrelationsmatrix für numerische Spalten
Statt Paare einzeln zu untersuchen, berechnen Sie die vollständige Korrelationsmatrix für alle numerischen Spalten und visualisieren Sie sie als Heatmap. So erkennen Sie auf einen Blick, welche Variablenpaare stark korreliert sind. Hohe Korrelationen zwischen unabhängigen Merkmalen (Multikollinearität) können bei Regressionsmodellen Probleme verursachen – wenn Sie frühzeitig davon wissen, können Sie redundante Merkmale vor dem Modellieren entfernen oder zusammenfassen.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
df = sns.load_dataset('titanic')
corr = df.select_dtypes('number').corr()
mask = np.triu(np.ones_like(corr, dtype=bool))
sns.heatmap(corr, mask=mask, annot=True, fmt='.2f',
cmap='coolwarm', vmin=-1, vmax=1,
linewidths=0.5, square=True)
plt.title('Correlation Matrix — Titanic Numeric Columns')
plt.tight_layout()
plt.show()Interaktionen zwischen Untergruppen
Manchmal unterscheidet sich der Zusammenhang zwischen zwei Variablen in verschiedenen Untergruppen erheblich – ein Phänomen, das als Simpsons Paradoxon bekannt ist. Beispielsweise kann die Korrelation zwischen Alter und Fahrpreis für Passagiere der ersten Klasse positiv, für Passagiere der dritten Klasse jedoch negativ sein. Segmentieren Sie Ihre bivariate Analyse stets nach wichtigen kategorialen Variablen (mit hue in Seaborn oder durch separate groupby-Aggregationen), um zu prüfen, ob der Zusammenhang in den Untergruppen konsistent ist oder sich umkehrt.
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('titanic')
# Scatter coloured by passenger class
sns.scatterplot(
data=df.dropna(subset=['age', 'fare']),
x='age',
y='fare',
hue='class',
alpha=0.5,
palette='deep'
)
plt.title('Age vs Fare — Does Class Change the Relationship?')
plt.legend(title='Class')
plt.yscale('log') # log scale due to fare skewness
plt.show()Bivariate Ergebnisse dokumentieren
Dokumentieren Sie nach Abschluss der bivariaten Analyse die wichtigsten Ergebnisse: welche Merkmalspaare korreliert sind (und wie stark), ob kategoriale Variablen bedeutsame Gruppenunterschiede bei numerischen Ergebnissen zeigen und welche Interaktionen oder Paradoxa zwischen Untergruppen gefunden wurden. Diese Erkenntnisse sollten Entscheidungen bei der Merkmalsauswahl bestimmen – stark korrelierte Merkmalspaare erfordern möglicherweise das Entfernen eines Merkmals, und starke kategoriale Prädiktoren der Zielvariable sollten als Eingaben mit hoher Priorität für die Modellierung gekennzeichnet werden.
Kurze Überprüfung
Testen Sie Ihr Verständnis der bivariaten Analyse und der Korrelationsanalyse aus dieser Lektion.
Zusammenfassung der Lektion
In dieser Lektion haben Sie gelernt: Streudiagramme und Pearson-r analysieren Beziehungen zwischen numerischen Variablen, Boxplots/Violinplots und groupby vergleichen numerische Variablen über Kategorien hinweg, und Kreuztabellen mit Chi-Quadrat-Tests messen den Zusammenhang zwischen kategorialen Variablen. Als Nächstes behandeln wir, wie sich EDA-Ergebnisse in einem strukturierten Zusammenfassungsbericht zusammenfassen lassen.
Häufig gestellte Fragen
Ist die Lektion „Bivariate Analyse und Korrelationsanalyse“ kostenlos?
Ja — der vollständige Text von „Bivariate Analyse und Korrelationsanalyse“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Pandas & NumPy Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Bivariate Analyse und Korrelationsanalyse“?
Untersuchen Sie Beziehungen zwischen Spaltenpaaren mit Streudiagrammen, Boxplots und einer Korrelations-Heatmap. Du übst Pandas & NumPy Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Pandas & NumPy Academy zu starten?
Keine Vorkenntnisse erforderlich. Pandas & NumPy Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Bivariate Analyse und Korrelationsanalyse“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Pandas & NumPy Academy-Lektion Code schreiben und ausführen?
Ja. Jede Pandas & NumPy Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Checkliste zur Datensatzanalyse
- Univariate Analyse
- Bivariate Analyse und Korrelationsanalyse
- Ergebnisse in einem Bericht zusammenfassen