- Lernen
- Informatik & Informationswissenschaften
- Data Science & KI
- Datenanalyse mit Python – NumPy, pandas und Matplotlib
- Explorative Datenanalyse mit Python
Explorative Datenanalyse mit Python
MittelEinheit 8 von 8 in Kurs: Datenanalyse mit Python – NumPy, pandas und Matplotlib
Was du lernst
- Erkläre den Zweck der explorativen Datenanalyse, leite aus einer allgemeinen Anfrage konkrete Fragen ab und richte ein Notebook ein, das sich von anderen von oben bis unten erneut ausführen lässt.
- Ziel und Fragestellungen einer explorativen Analyse festlegenBeschreibe, was die explorative Datenanalyse leistet, verfolge ihren Ablauf von den Fragen bis zu den Befunden und formuliere konkrete Fragen, die sich mit den Daten beantworten lassen.
- Ein Notebook so strukturieren, dass es sich von anderen erneut ausführen lässtStrukturiere ein Jupyter-Notebook so, dass es von oben bis unten mit denselben Ergebnissen läuft. Nutze klare Abschnitte, relative Pfade, dokumentierte Versionen, feste Startwerte für Zufallszahlen und eingebaute Prüfungen.
- Ziel und Fragestellungen einer explorativen Analyse festlegen
- Untersuche Umfang, Struktur und Variablentypen eines neuen Datensatzes, quantifiziere fehlende und doppelte Daten und prüfe Werte auf Gültigkeit und Konsistenz, bevor du einem Muster vertraust.
- Struktur, Umfang und Variablentypen untersuchenNutze Untersuchungsmethoden von pandas, um Form, Spalten, Typen und Schlüssel eines Datensatzes kennenzulernen, jede Variable für die Analyse einzuordnen und Werte mit falsch gespeichertem Typ zu erkennen.
- Fehlende Werte und Dubletten quantifizierenZähle fehlende Werte und ihren Anteil pro Spalte, finde versteckte Fehlwertcodes, prüfe fehlende Werte auf Muster und erkenne vollständig doppelte Zeilen und doppelte Schlüssel.
- Werte auf Gültigkeit und Konsistenz prüfenPrüfe Wertebereiche, Kategorien, Übereinstimmung zwischen Spalten, Einheiten und zeitliche Abdeckung und dokumentiere jedes Datenqualitätsproblem und jede Entscheidung.
- Struktur, Umfang und Variablentypen untersuchen
- Fasse einzelne numerische und kategoriale Variablen zusammen und stelle sie grafisch dar, erkenne Verteilungsformen, finde Ausreißer und entscheide über ihre Behandlung.
- Eine numerische Variable anhand von Lage und Streuung zusammenfassenBerechne und interpretiere Lage-, Streuungs- und Positionsmaße in pandas und wähle robuste Kennwerte, wenn Verteilungen schief sind oder extreme Werte enthalten.
- Verteilungsformen grafisch darstellen und beschreibenErstelle Histogramme, Dichtekurven, Boxplots und empirische Verteilungsfunktionen mit pandas und seaborn, wähle Klassen und Skalen, die die tatsächliche Form zeigen, und beschreibe eine Verteilung mit Worten und Zahlen.
- Kategoriale Variablen zusammenfassenErstelle Häufigkeitstabellen und Balkendiagramme für kategoriale Variablen, behalte die Reihenfolge ordinaler Kategorien bei, behandle seltene Kategorien und fehlende Bezeichnungen und nenne die Bezugsgröße jeder Prozentangabe.
- Ausreißer erkennen und über ihre Behandlung entscheidenMarkiere ungewöhnliche Werte mit der IQR-Regel, z-Werten und robusten Kennwerten, untersuche ihre Ursache und wähle und dokumentiere eine begründete Behandlung.
- Eine numerische Variable anhand von Lage und Streuung zusammenfassen
- Stelle Zusammenhänge zwischen numerischen Variablen mit Streudiagrammen dar, miss ihre Stärke mit Korrelationskoeffizienten und interpretiere, was ein Zusammenhang zeigen kann und was nicht.
- Zusammenhänge zwischen zwei numerischen Variablen darstellen und beschreibenErstelle Streudiagramme und Streudiagrammmatrizen, die auch bei vielen Punkten lesbar bleiben, ergänze eine dritte Variable durch Farben oder Teilgrafiken und beschreibe Richtung, Form, Stärke und ungewöhnliche Punkte.
- Zusammenhänge mit Korrelationskoeffizienten messenBerechne und interpretiere Korrelationen nach Pearson, Spearman und Kendall in pandas, lies eine Korrelationsmatrix und Heatmap und erkenne, was ein Koeffizient nicht erfasst.
- Zusammenhänge interpretieren, ohne die Aussagekraft der Ergebnisse zu überschätzenErkläre, warum ein Zusammenhang keine Ursache belegt, erkenne Konfundierung, das Simpson-Paradoxon, Zeittrends, eingeschränkte Wertebereiche, Aggregation und Zufallsbefunde und formuliere Schlussfolgerungen entsprechend.
- Zusammenhänge zwischen zwei numerischen Variablen darstellen und beschreiben
- Vergleiche Verteilungen, Anteile und Raten zwischen Gruppen und Zeiträumen mit Blick auf die Gruppengrößen und die passenden Bezugsgrößen und erkenne, wann ein Unterschied auf zu wenigen Daten beruht.
- Eine numerische Variable zwischen Gruppen vergleichenFasse eine numerische Variable gruppenweise anhand von Anzahlen, Lagemaßen und Streuungsmaßen zusammen, stelle die Gruppenverteilungen nebeneinander dar und gib Unterschiede absolut und relativ an.
- Kategorieanteile und Raten zwischen Teilgruppen vergleichenErstelle Kreuztabellen mit Zeilen- oder Spaltenprozenten, vergleiche Raten mit der passenden Bezugsgröße und unterscheide Prozentpunkte von prozentualen Änderungen.
- Teilgruppen im Zeitverlauf vergleichenAggregiere Daten nach Periode und Teilgruppe, vermeide Fallen wie unvollständige und unterschiedlich lange Perioden, trenne saisonale Muster von Trends und hinterfrage Lücken und plötzliche Veränderungen.
- Eine numerische Variable zwischen Gruppen vergleichen
- Arbeite explorative Ergebnisse zu klaren, belegten Befunden mit ehrlichen Einschränkungen aus und stelle die Analyse als übersichtliches Notebook oder Bericht bereit, den andere erneut ausführen und prüfen können.
- Beobachtungen zu klaren, belegten Befunden ausarbeitenFormuliere Befunde, die die Fragen mit Belegen, Größenordnung und Geltungsbereich beantworten, wähle und beschrifte Diagramme, die jeden Befund sichtbar machen, und nenne Einschränkungen und nächste Schritte.
- Eine reproduzierbare Analyse bereitstellenBereite ein übersichtliches, erneut ausführbares Notebook vor, berechne jede berichtete Zahl im Code, exportiere es als Bericht, speichere Abbildungen und Tabellen, dokumentiere die Datenprovenienz und schütze personenbezogene Daten.
- Beobachtungen zu klaren, belegten Befunden ausarbeiten
Explorative Datenanalyse mit Python einfach erklärt
1Eine explorative Analyse in einem Notebook planen
Klare Fragen machen eine explorative Analyse nützlich, und ein zuverlässiges Notebook macht ihre Ergebnisse überprüfbar. Verknüpfe zunächst die Anfrage mit einer Entscheidung, bestimme die Grundgesamtheit und kläre, was eine Zeile bedeutet. Ordne dann Code, Einstellungen und Prüfungen so, dass eine neue Sitzung die Arbeit reproduzieren kann. Diese Vorgehensweisen geben späteren Diagrammen und Vergleichen ein Ziel und einen verlässlichen Ausgangspunkt.
1.1 Fragen, die der Exploration ein Ziel geben
Die explorative Datenanalyse, kurz EDA, nutzt Kennwerte und Diagramme, um zu erfahren, was ein Datensatz enthält. Du suchst nach Qualitätsproblemen, Mustern und Überraschungen und leitest daraus bessere Fragen ab. John Tukey entwickelte und verbreitete diesen Ansatz, insbesondere in seinem Buch Exploratory Data Analysis von 1977.
Beginne mit einer Entscheidung
Eine Anfrage wie „Wie laufen unsere Lieferungen?“ ist zu allgemein, um die erste Berechnung anzuleiten. Frag, welche Entscheidung die Analyse unterstützen soll, und benenne dann die wichtigen Variablen und Vergleiche. Nützliche Fragen sind etwa: „Wie lang ist die typische Lieferzeit und wie stark schwankt sie?“, „Welcher Anteil der Bestellungen dauert länger als 45 Minuten?“, „Unterscheiden sich die Zeiten nach Stadt oder Stunde?“ und „Hat sich der monatliche Median seit Januar verändert?“ Jede Frage weist auf einen Kennwert, ein Diagramm oder einen Vergleich hin.
Kläre vor dem Rechnen, woher die Daten stammen, wie sie erhoben wurden, welchen Zeitraum und welche Grundgesamtheit sie abdecken und was jede Spalte bedeutet und in welcher Einheit sie vorliegt. Ein sprunghafter Anstieg ausgefüllter Felder kann auf eine Formularänderung zurückgehen, durch die ein Feld zum Pflichtfeld wurde. Dieser Kontext verändert die Erklärung des Musters.
Kläre, was eine Zeile bedeutet
Die Beobachtungseinheit, auch Granularität genannt, ist das, wofür eine Zeile steht. Das kann eine Bestellung, ein Artikel innerhalb einer Bestellung, ein Kunde oder ein Geschäft an einem bestimmten Tag sein. Eine Tabelle mit 12.000 Zeilen für Bestellpositionen und 4.000 unterschiedlichen Bestell-IDs enthält durchschnittlich 3 Zeilen pro Bestellung. Ihre Zeilenanzahl beschreibt Artikel, sodass eine Frage zu Bestellungen eine Zählung auf Bestellungsebene braucht. Wiederholte Bestell-IDs sind in dieser Tabelle zu erwarten; in einer Tabelle, die eine Zeile pro Bestellung enthalten soll, wären sie ein Qualitätsproblem.
Arbeite in einem Kreislauf
Ein nützlicher Ablauf ist:
- Formuliere die Fragen und die Entscheidung, die sie unterstützen.
- Lade die Daten und kläre die Bedeutung einer Zeile.
- Untersuche Struktur, Typen und Qualität.
- Betrachte wichtige Variablen einzeln.
- Untersuche Zusammenhänge zwischen Variablen.
- Vergleiche Teilgruppen und Zeiträume.
- Halte Befunde, Einschränkungen und nächste Fragen fest.
Diese Schritte bilden einen Kreislauf. Ein überraschender Zusammenhang kann dich zur Quelle zurückführen, um Einheiten oder fehlende Werte zu prüfen. Neue Daten können das Datenprofil verändern und frühere Fragen erneut aufwerfen. Fragen zu Beginn halten die Analyse auf das Ziel ausgerichtet; Offenheit für Überraschungen erhält ihren explorativen Charakter. Jedes mögliche Paar ohne Ziel grafisch darzustellen, erzeugt gewöhnlich eine lange Sammlung von Diagrammen mit wenig Aussagekraft.
Unterscheide einen Anhaltspunkt von einer Bestätigung
Exploration erzeugt Hypothesen. Die konfirmatorische Analyse prüft eine vorab formulierte Hypothese, idealerweise anhand von Daten, die das Muster nicht aufgedeckt haben. Die Betrachtung vieler Diagramme macht zufällige Muster wahrscheinlicher. Ein auffälliges exploratives Ergebnis muss daher weiter untersucht werden, bevor es eine allgemeine Aussage stützt. Die EDA hilft bei der Vorbereitung, indem sie nutzbare Variablen, schiefe Verteilungen und vielversprechende Zusammenhänge zeigt.
Auch die Abdeckung der Daten legt den Geltungsbereich eines Befunds fest. Produktbewertungen stammen von Menschen, die sich für eine Bewertung entschieden haben. Ihre Bewertungen beschreiben diese Personen; um das Ergebnis auf alle Kunden zu übertragen, braucht man Belege dafür, wie sich die Bewertenden von allen anderen unterscheiden.
Wichtige Erkenntnisse
- Beginne mit einer Entscheidung und konkreten Fragen zu Variablen, Grundgesamtheiten und Vergleichen.
- Kläre, wofür eine Zeile steht, bevor du Anzahlen oder wiederholte Schlüssel interpretierst.
- Nutze den Ablauf als Kreislauf: Überraschungen können Qualitätsprobleme oder neue Fragen aufdecken.
- Exploration erzeugt Hypothesen; die konfirmatorische Analyse prüft vorab formulierte Hypothesen.
- Der Erhebungsprozess und die Grundgesamtheit begrenzen, wie weit Befunde gelten.
1.2 Ein Notebook, das von oben bis unten läuft
Ein Jupyter-Notebook verbindet Code, Ausgaben und Markdown-Erklärungen. Sein Kernel ist der Python-Prozess, der Variablen im Speicher hält. Der Kernel merkt sich die Reihenfolge, in der Zellen ausgeführt wurden; sie kann von der sichtbaren Reihenfolge auf der Seite abweichen.
Verborgenen Zustand beseitigen
Angenommen, du führst eine Zelle aus, die clean erstellt, löschst diese Zelle und verwendest clean darunter weiter. Die aktuelle Sitzung funktioniert weiterhin, weil die Variable im Speicher bleibt. Eine neue Sitzung schlägt fehl, weil das Notebook ihre Definition nicht mehr enthält. Auch wenn du eine frühe Zelle änderst, nachdem spätere Berechnungen ausgeführt wurden, können alte Ausgaben neben neuem Code stehen bleiben.
Ausführungsnummern wie [7] helfen, eine abweichende Ausführungsreihenfolge zu erkennen. Die praktische Prüfung ist aussagekräftiger: Wähle in JupyterLab Kernel → Restart Kernel and Run All Cells. Prüfe, ob das gesamte Notebook durchläuft und seine Zahlen mit den Ausgaben übereinstimmen, die du weitergeben möchtest.
Abhängigkeiten klar ordnen
Beginne mit Titel, Ziel und Fragen. Es folgen Imports und eine Einstellungszelle, dann Abschnitte für das Laden, Qualitätsprüfungen, Verteilungen, Zusammenhänge, Vergleiche und Befunde. Zum Beispiel:
from pathlib import Path
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
DATA = Path("data/raw/orders.csv")
LATE_MINUTES = 45
SEED = 42
df = pd.read_csv(DATA)
Ein relativer Pfad funktioniert innerhalb der gemeinsam genutzten Projektstruktur. Ein Pfad, der an den Desktop einer Person gebunden ist, funktioniert nicht mehr, wenn das Projekt verschoben wird. Gib das Arbeitsverzeichnis an, von dem aus das Notebook ausgeführt wird, damit der relative Pfad korrekt aufgelöst wird. Bewahre Rohdateien auf und speichere verarbeitete Daten separat. Nimm Änderungen im Code vor: Eine manuelle Änderung in einer Tabellenkalkulation ist beim nächsten Durchlauf unsichtbar.
Umgebung und Zufallsentscheidungen dokumentieren
Speichere Paketversionen in einer Umgebungsdatei, etwa als Ausgabe von pip freeze > requirements.txt, und gib wichtige Versionen mit print(pd.__version__) im Notebook aus. Das Verhalten ändert sich zwischen Versionen: pandas 3 gibt Text den eigenen Datentyp str, und ein DataFrame mit Text benötigt für die Korrelation eine ausdrückliche Auswahl numerischer Spalten.
Ein Diagramm einer Stichprobe sollte bei jedem erneuten Durchlauf dieselben Beobachtungen zeigen. Verwende df.sample(n=1000, random_state=42), wenn mindestens 1.000 Zeilen verfügbar sind, oder erstelle einen NumPy-Generator mit rng = np.random.default_rng(42). Halte den Startwert mit den anderen Einstellungen fest. Ein Startwert steuert Zufallsentscheidungen; um die vollständige Ausgabe zu reproduzieren, sind außerdem dieselben Eingaben und dieselbe Software nötig.
Annahmen ausführbar machen
Formuliere wichtige Erwartungen als Prüfungen:
assert df["order_id"].is_unique
assert df["minutes"].ge(0).all()
Die erste verlangt eine eindeutige Bestell-ID pro Zeile. Die zweite verlangt bei gewöhnlichen Gleitkommadaten, dass jede Zeitdauer nichtnegativ und vorhanden ist. Sind fehlende Zeiten erlaubt, definiere eine separate Prüfung auf fehlende Werte und wende die Bereichsregel nur auf erfasste Zeiten an. Eine fehlgeschlagene Zusicherung stoppt den Durchlauf dort, wo die Eingabe die erwarteten Anforderungen erstmals verletzt.
Fasse wiederkehrende Abläufe in Funktionen zusammen, damit eine Korrektur jede Verwendung aktualisiert. Verwalte Code und Notebooks mit einer Versionsverwaltung. Notebook-Ausgaben werden in ihrem JSON gespeichert, was den Vergleich von Änderungen erschweren kann; es kann helfen, Ausgaben vor einem Commit zu entfernen oder das Notebook mithilfe von Jupytext mit einem Textskript zu verknüpfen.
Wichtige Erkenntnisse
- Der Kernel speichert Variablen aus dem Ausführungsverlauf, auch aus nicht mehr sichtbaren Zellen.
- Starte den Kernel neu und führe jede Zelle aus, um verborgene Abhängigkeiten und veraltete Ausgaben aufzudecken.
- Halte Imports und Einstellungen zusammen, verwende relative Pfade und bewahre Roheingaben auf.
- Dokumentiere Paketversionen und lege den Startwert jedes Zufallsschritts fest.
- Prüfe mit Zusicherungen die Annahmen, die eine neue Eingabedatei erfüllen muss.
- Nimm jede Datenänderung im Code vor, damit ein weiterer Durchlauf sie wiederholen kann.
2Ein Datenprofil erstellen und die Datenqualität beurteilen
Ein Datensatz kann ordentlich aussehen und dennoch wiederholte Datensätze, Fehlwertcodes oder unvereinbare Einheiten verbergen. Erstelle ein Profil seiner Struktur und Bedeutungen, quantifiziere Lücken und Dubletten und wende Regeln an, die die Datenerhebung berücksichtigen. Ziel ist zu verstehen, welche Beobachtungen jedes Ergebnis stützen, und Entscheidungen, die die analysierten Daten verändern, sichtbar zu dokumentieren.
2.1 Die erste Untersuchung eines Datensatzes
Eine erste Untersuchung klärt die Größe der Tabelle, wofür ihre Spalten stehen und ob ihre gespeicherten Typen zu diesen Bedeutungen passen. Dieses Profil hilft dir, sinnvolle Kennwerte auszuwählen, bevor du der Ausgabe eines praktischen Befehls vertraust.
Struktur aus mehreren Blickwinkeln untersuchen
Verwende df.shape für die Zeilen- und Spaltenanzahl, df.head() und df.tail() für die Anfänge und Enden der Datei und df.sample(5, random_state=0) für eine reproduzierbare Stichprobe, wenn mindestens fünf Zeilen vorhanden sind. Die ersten Zeilen können alle zum frühesten Datum oder zum selben Geschäft gehören. Führe df.info() aus, um Spaltennamen, Anzahlen nicht fehlender Werte, Datentypen und Speicherbedarf zu untersuchen. Mit df.nunique() zählst du die unterschiedlichen erfassten Werte in jeder Spalte.
Bedeutung und Speicherung unterscheiden
| Analysetyp | Beispiel | Sinnvolle Behandlung |
|---|---|---|
| Numerisch stetig | Entfernung in km | Lage, Streuung und Verteilung |
| Numerisch diskret | Artikel pro Bestellung | Anzahlen und auf Ganzzahlen zentrierte Klassen |
| Nominale Kategorie | Stadt | Häufigkeiten und Anteile |
| Ordinale Kategorie | Niedrig, mittel, hoch | Häufigkeiten in sinnvoller Reihenfolge |
| Datum und Zeit | Bestellzeitstempel | Abdeckung und Periodenvergleiche |
| Kennung | Kunden-ID | Eindeutigkeit und Verknüpfungen zwischen Datensätzen |
| Freitext | Ein geschriebener Kommentar | Text und seine Qualität untersuchen |
Ein Ganzzahldatentyp macht nicht jede Spalte zu einer mengenmäßigen Größe. Regionscodes und Kunden-IDs werden numerisch gespeichert, haben aber kein aussagekräftiges arithmetisches Mittel. Eine Bewertung von 1 bis 5 hat eine kleine Auswahl geordneter Antworten und lässt sich oft gut kategorial darstellen.
pandas verwendet häufig int64, float64, bool, datetime64, category und ab pandas 3 str. Frühere pandas-Versionen verwendeten für Text oft object. Gewöhnliche Ganzzahldaten können bei fehlenden Werten zu float64 werden, weil NaN ein Gleitkomma-Fehlwertkennzeichen ist; Int64 mit Fehlwertunterstützung erlaubt Ganzzahlen mit fehlenden Werten.
Umwandlungen und Schlüssel prüfen
Eine numerisch aussehende Zeichenkette kann Trennzeichen, Einheiten oder Fehlwertcodes verbergen. Für eine Series mit „1,234“, „950“, „n/a“ und „1,010“:
parsed = pd.to_numeric(
s.str.replace(",", ""), errors="coerce"
)
Die Werte werden zu 1234.0, 950.0, NaN und 1010.0. Vergleiche die Anzahl fehlender Werte vor und nach der Umwandlung und untersuche neu fehlende Einträge. Die Typumwandlung mit Fehlerersetzung wandelt auch einen nicht behandelten Wert wie „12 kg“ in NaN um. Eine erfolgreiche Ausführung allein zeigt daher nicht, dass die Umwandlung die Daten erhalten hat.
Lies Codes mit bedeutungsvollen führenden Nullen als Text ein, zum Beispiel mit pd.read_csv(path, dtype={"postal_code": "str"}). Eine verlorene Null später wiederherzustellen, setzt Wissen voraus, das die Ganzzahldarstellung verworfen hat.
Bestimme den erwarteten Zeilenschlüssel. df["order_id"].is_unique prüft einen Schlüssel aus einer Spalte; df.duplicated(subset=["store_id", "date"]).sum() prüft wiederholte Kombinationen aus Geschäft und Datum. Setze die Anzahl der Schlüssel zur Bedeutung der Zeilen in Beziehung. Eine Spalte mit nur einem Wert kann Unterschiede innerhalb dieses Datensatzes nicht erklären; Tausende vermeintliche Stadtkategorien können auf uneinheitliche Bezeichnungen hinweisen.
Ergänze während der Untersuchung ein Datenwörterbuch: Halte Bedeutung, Analysetyp, Einheit, zulässige Werte und bekannte Probleme jeder Spalte fest. Diese Einträge liefern die Regeln für die nächsten Qualitätsprüfungen.
Wichtige Erkenntnisse
- Untersuche Größe, Beispielzeilen, Anzahlen nicht fehlender Werte, Datentypen und Anzahlen unterschiedlicher Werte.
- Wähle Analysemethoden anhand der Bedeutung einer Variablen, einschließlich Reihenfolge und Einheiten.
- Prüfe neu fehlende Einträge nach jeder Umwandlung, bei der nicht einlesbare Werte ersetzt werden.
- Prüfe den erwarteten Schlüssel anhand der Beobachtungseinheit der Tabelle.
2.2 Fehlende Werte und wiederholte Datensätze
Fehlende Werte verändern, welche Beobachtungen zu einem Ergebnis beitragen. Doppelte Datensätze können einzelnen Beobachtungen zusätzliches Gewicht geben. Quantifiziere beides, bevor du eine Behandlung wählst, und dokumentiere die Entscheidung sichtbar in der Analyse.
Fehlende Werte und ihre Muster quantifizieren
pandas verwendet NaN, NaT für fehlende Datums- und Zeitwerte und <NA> für Datentypen mit Fehlwertunterstützung. Zähle fehlende Werte und bringe sie in eine Rangfolge:
missing_count = df.isna().sum()
missing_share = df.isna().mean().sort_values(ascending=False)
rows_with_gaps = df.isna().any(axis=1).sum()
Das arithmetische Mittel boolescher Werte ergibt einen Anteil, weil True als 1 und False als 0 zählt. Bei 96 fehlenden Altersangaben unter 1.200 Zeilen beträgt der fehlende Anteil 8 %. Es kann viel mehr Zeilen mit irgendeiner Lücke geben als fehlende Einträge in einer Spalte; so viele Zeilen würden durch ein pauschales df.dropna() verloren gehen.
Manche Lücken verbergen sich hinter gewöhnlichen Werten. Das standardmäßige Einlesen von CSV-Dateien erkennt viele leere Felder und Fehlwertkennzeichen aus Text, aber Codes wie -999, „unknown“ und „?“ können erhalten bleiben. Untersuche Häufigkeiten und Extremwerte, prüfe das Datenwörterbuch und lege mit na_values zusätzliche Kennzeichen fest. Bei null ist Kontext nötig: Der Wert kann bedeuten, dass es keine Rückgaben gab, oder ein undokumentierter Platzhalter sein.
Prüfe, ob sich Lücken in einer Teilgruppe häufen:
age_gaps = df["customer_age"].isna()
age_gaps.groupby(df["city"]).mean()
Fehlen in einer Stadt 40 % der Altersangaben und in den anderen etwa 2 %, wird eine Analyse vollständiger Zeilen diese Stadt unterrepräsentieren. Die Begriffe MCAR, MAR und MNAR beschreiben unterschiedliche Mechanismen: Das Fehlen hängt weder von beobachteten noch von fehlenden Werten ab; es hängt nur von beobachteten Variablen ab; und es hängt vom fehlenden Wert selbst ab. Ein Beispiel für MNAR sind Befragte mit hohem Einkommen, die eine Frage zum Einkommen auslassen. Die EDA kann Zusammenhänge mit erfassten Variablen erkennen; um den vollständigen Mechanismus zu bestimmen, braucht man weitere Belege zur Erhebung.
Bezugsgröße nennen
Bei 6 Kartenzahlungen, 2 Barzahlungen und 2 Lücken meldet value_counts(normalize=True) 75 % Karte und 25 % Barzahlung unter den 8 erfassten Zahlungen. Mit dropna=False sind es 60 % Karte, 20 % Barzahlung und 20 % fehlende Werte unter allen 10 Zeilen. Keine der beiden Tabellen beantwortet die Frage der anderen. Benenne die Grundgesamtheit hinter jedem Anteil.
Vollständig doppelte Zeilen und doppelte Schlüssel untersuchen
df.duplicated().sum() zählt Kopien nach dem ersten Auftreten jeder vollständigen Zeile. Eine schlüsselbasierte Prüfung kann widersprüchliche Datensätze finden, die nicht identisch sind:
repeated = df["order_id"].duplicated(keep=False)
df.loc[repeated].sort_values("order_id")
Betrachte die IDs 101, 102, 102, 103, 104, 104 mit den Beträgen 20, 35, 35, 12, 50, 55. Es gibt 1 vollständig doppelte Zeile, 2 wiederholte Schlüsselvorkommen nach dem ersten und 4 Zeilen mit wiederholten Schlüsseln. Die beiden Datensätze zu 104 unterscheiden sich im Betrag. Eine Kopie ohne Untersuchung zu löschen, könnte den richtigen Wert verwerfen.
Halte für jedes Problem Anzahl, wahrscheinliche Ursache, Behandlung und betroffene Zeilen fest. Das Entfernen aller Lücken kann eine verzerrte Teilmenge entfernen; das Auffüllen mit dem arithmetischen Mittel verdeckt ihr Muster und verringert die sichtbare Streuung. Wähle eine zur Frage und zum Erhebungsprozess passende Behandlung und halte das ursprüngliche Ausmaß fehlender Werte messbar.
Wichtige Erkenntnisse
- Zähle Lücken pro Spalte und Zeilen mit irgendeiner Lücke, bevor du eine Behandlung wählst.
- Prüfe Sentinelwerte und vergleiche fehlende Werte zwischen sinnvollen Teilgruppen.
- Fehlwertmechanismen beschreiben, warum Lücken entstehen; beobachtete Muster allein können den vollständigen Mechanismus nicht bestimmen.
- Standardmäßig schließen Häufigkeitsanteile fehlende Werte aus; nenne daher die Bezugsgröße.
- Vollständig doppelte Zeilen und widersprüchliche wiederholte Schlüssel erfordern unterschiedliche Untersuchungen.
- Dokumentiere Behandlungen, weil das Entfernen oder Auffüllen von Werten die analysierten Daten verändert.
2.3 Regeln zum Erkennen ungültiger oder inkonsistenter Daten
Ein Wert ist gültig, wenn er im zulässigen Wertebereich oder in der zulässigen Wertemenge seiner Spalte liegt. Datensätze sind konsistent, wenn ihre Werte über Spalten, Zeilen und Quellen hinweg übereinstimmen. Leite Prüfungen aus dem Datenwörterbuch und dem Wissen über den Prozess ab, der die Daten erzeugt hat.
Wertebereiche prüfen, ohne Lücken einzubeziehen
Beginne mit Minima und Maxima und prüfe dann ausdrückliche Schranken. So zählst du erfasste Altersangaben außerhalb von 0 bis 120:
invalid_age = df["age"].notna() & ~df["age"].between(0, 120)
invalid_age.sum()
between gibt für fehlende Werte False zurück. Eine alleinige Negation würde fehlende Altersangaben als ungültig zählen; die Prüfung auf vorhandene Werte trennt die Probleme. Andere Regeln können nichtnegative Mengen, Prozentangaben von höchstens 100 oder Extraktionsdaten verlangen, die nicht vor den enthaltenen Ereignissen liegen. Der zulässige Bereich ergibt sich aus der Bedeutung der Spalte.
Bezeichnungen und Spalten abgleichen
„Lyon“, „lyon“ und „ Lyon“ sind drei Zeichenketten, auch wenn sie dieselbe Stadt bezeichnen. Aus den Anzahlen 410, 22 und 5 werden nach einem begründeten Entfernen von Leerzeichen und einer Umwandlung in Kleinbuchstaben 437 für „lyon“:
city_clean = df["city"].str.strip().str.lower()
Vergleiche die Kategorieanzahlen vorher und nachher. Schreibvarianten und Synonyme benötigen eine ausdrückliche Zuordnung; die Änderung der Groß- und Kleinschreibung allein kann „UK“ und „United Kingdom“ nicht zusammenführen. Halte die verwendete Regel fest, damit ein erneuter Durchlauf dieselbe Entscheidung trifft.
Spaltenübergreifende Prüfungen suchen nach Widersprüchen. df.query("delivered_at < ordered_at") findet Lieferungen, deren Zeitstempel vor denen ihrer Bestellungen liegen. Andere Prüfungen fragen, ob sich Artikelbeträge zur Gesamtsumme addieren, das Alter zum Geburtsdatum passt oder eine stornierte Bestellung unerwartet eine Lieferzeit hat. Diese Regeln setzen über Spalten hinweg dieselben Einheiten, Zeitkonventionen und Definitionen voraus.
Änderungen von Skala und Abdeckung suchen
Gemischte Kilogramm- und Grammangaben können Häufungen erzeugen, deren Werte sich ungefähr um den Faktor 1.000 unterscheiden. Auch ein Anteil, der teils auf einer Skala von 0 bis 1 und teils auf einer Skala von 0 bis 100 erfasst wurde, erzeugt eine irreführende Verteilung. Prüfe vor dem Umrechnen die Quelle: Zwei Häufungen können auch zwei echte Grundgesamtheiten darstellen. Ein Diagramm zeigt, wo eine Untersuchung nötig ist; die Quelle klärt, welche Einheiten gelten.
Untersuche das früheste und das späteste Datum sowie die Anzahlen pro Monat. Ein fehlender Monat kann eine Lücke bei der Extraktion sein, während ein unvollständiger letzter Monat naturgemäß weniger Datensätze enthält. Ein plötzlicher Anstieg kann auf ein neues Erfassungssystem zurückgehen. Halte die tatsächlich vorhandene Abdeckung fest, bevor du ein zeitliches Muster berichtest.
Qualitätsprotokoll führen
Verwende eine kleine Tabelle mit Problem, Prüfung, Anzahl betroffener Zeilen, Beleg und Maßnahme. Eine negative Zeitdauer kann beispielsweise durch eine Regel für nichtnegative Zeiten markiert, anhand von Zeitstempeln untersucht und nur dann korrigiert werden, wenn die Quelle ihren wahren Wert belegt. Wichtige Erwartungen können zu Zusicherungen werden, die einen zukünftigen Durchlauf stoppen.
Eine Lieferung von 120 Minuten ist ungewöhnlich, aber möglich. Eine Zeitdauer von −5 Minuten ist nach derselben Definition der Zeitdauer unmöglich. Die erste muss als Ausreißer, die zweite als Fehler untersucht werden.
Wichtige Erkenntnisse
- Prüfe mit fachlichen Regeln gültige Wertebereiche, zulässige Kategorien und die Übereinstimmung zwischen Spalten.
- Zähle fehlende Werte getrennt von erfassten Werten außerhalb eines zulässigen Bereichs.
- Prüfe Varianten von Bezeichnungen, gemischte Einheiten und die zeitliche Abdeckung, bevor du Muster interpretierst.
- Führe ein Qualitätsprotokoll und formuliere wichtige Erwartungen an Eingaben als Zusicherungen.
- Untersuche ungewöhnliche Werte und unterscheide einen möglichen Extremwert von einem unmöglichen Wert.
3Die Verteilung jeder Variablen beschreiben
Ein einzelner Durchschnitt kann einen langen Ausläufer, zwei verschiedene Gruppen oder eine Erfassungsgrenze verbergen. Beschreibe jede wichtige Variable mit Kennwerten und Diagrammen, die zu ihrer Bedeutung passen. Bei numerischen Variablen sind Lage, Streuung, Form und Prüfungen auf ungewöhnliche Werte nötig; bei kategorialen Variablen klare Bezeichnungen, eine klare Reihenfolge und Bezugsgrößen. Ausreißerregeln helfen, untersuchenswerte Datensätze zu finden, während der Kontext ihre Behandlung bestimmt.
3.1 Lage, Streuung und die Wirkung extremer Werte
Eine numerische Verteilung beschreibt, welche Werte wie häufig vorkommen. Ihre Lage gibt einen typischen Bereich an, ihre Streuung zeigt die Schwankung und ihre Form verrät, was diese Kennwerte auslassen. Nutze neben den Zahlen ein Diagramm.
Zur Verteilung passende Kennwerte wählen
Das arithmetische Mittel ist die Summe geteilt durch die Anzahl. Der Median ist der mittlere sortierte Wert oder bei gerader Anzahl das arithmetische Mittel der beiden mittleren Werte. Die Spannweite ist das Maximum minus das Minimum. Der Interquartilsabstand, kurz IQR, ist Q3 minus Q1: der Abstand zwischen dem 75. und dem 25. Perzentil. Die Standardabweichung misst die Streuung um das arithmetische Mittel in den Einheiten der Variablen.
s.std() in pandas berechnet die Stichprobenstandardabweichung mit ddof=1 und dividiert die Summe der quadrierten Abweichungen durch die um eins verringerte Anzahl. np.std(a) in NumPy verwendet standardmäßig ddof=0 und dividiert durch die Anzahl. Das ist besonders bei kleinen Stichproben relevant; verwende daher beim Vergleich von Ergebnissen übereinstimmende Einstellungen.
Zusammenfassung vor der Interpretation lesen
s = df["minutes"]
s.describe(percentiles=[0.1, 0.5, 0.9])
Das Ergebnis enthält die Anzahl nicht fehlender Werte, das arithmetische Mittel, die Standardabweichung, das Minimum, die angeforderten Perzentile und das Maximum. Der Eintrag 50% ist der Median. Bei einem DataFrame berücksichtigt describe() standardmäßig numerische Spalten und Spalten mit Datums- und Zeitwerten; die Zusammenfassung der Letzteren enthält ihr arithmetisches Mittel und ihre Perzentile. describe(include="all") fasst auch andere Spalten zusammen. Textspalten und kategoriale Spalten erhalten count, unique, top und freq, wobei top ein häufigster Wert und freq dessen Anzahl ist. Schließe numerische Kennungen aus arithmetischen Zusammenfassungen aus.
Einen langen rechten Ausläufer untersuchen
Betrachte Lieferzeiten von 18, 22, 25, 25, 27, 29, 31, 34, 38, 41 und 95 Minuten. Ihre Summe beträgt 385 und ihre Anzahl 11, sodass das arithmetische Mittel 35,0 Minuten beträgt. Der sechste sortierte Wert ist 29 und ergibt den Median. pandas liefert Q1 = 25, Q3 = 36, IQR = 11 und eine Stichprobenstandardabweichung von etwa 21,02 Minuten.
Ohne die Lieferung mit 95 Minuten beträgt das arithmetische Mittel 29,0, der Median 28 und die Standardabweichung etwa 7,15. Ein Wert verschiebt das arithmetische Mittel um 6 Minuten und verdreifacht ungefähr die Standardabweichung; der Median verschiebt sich um 1 Minute. Deshalb sind Median und IQR nützliche robuste Kennwerte für Daten mit extremen Werten. Eine annähernd symmetrische Verteilung ohne Extremwerte wird oft gut durch ihr arithmetisches Mittel und ihre Standardabweichung beschrieben.
Ausläufer und nützliche Positionen beschreiben
Rechtsschiefe hat einen langen Ausläufer zu hohen Werten hin, Linksschiefe einen langen Ausläufer zu niedrigen Werten hin. Das arithmetische Mittel liegt gegenüber dem Median gewöhnlich zum langen Ausläufer hin, aber prüfe die Form, denn diese Faustregel hat Ausnahmen. s.skew() ist bei einem rechten Ausläufer positiv und bei einem linken negativ; für diese Lieferzeiten beträgt der Wert etwa 2,71.
s.quantile(0.9) liefert hier 41 Minuten, eine nützliche Beschreibung des oberen Teils der Verteilung. Eine der 11 Lieferungen überschreitet 45 Minuten, also etwa 9,1 %. Berechne bei Lücken Schwellenwertanteile anhand der erfassten Werte. Quartile kleiner Stichproben können sich zwischen Programmen unterscheiden: pandas verwendet standardmäßig lineare Interpolation. Halte das Verfahren fest, wenn genaue Quartile wichtig sind.
Wichtige Erkenntnisse
- Beschreibe eine numerische Verteilung anhand von Lage, Streuung und einem Diagramm.
- Median und IQR sind robust gegenüber Extremwerten; arithmetisches Mittel und Standardabweichung reagieren stark darauf.
- Prüfe die Anzahlen nicht fehlender Werte und übereinstimmende Einstellungen für die Standardabweichung.
- Perzentile und Anteile oberhalb eines Schwellenwerts können praktische Fragen direkt beantworten.
- Die Richtung der Schiefe beschreibt den langen Ausläufer und nicht die Seite mit den meisten Beobachtungen.
3.2 Diagramme, die die Form einer Verteilung zeigen
Ein Verteilungsdiagramm zeigt Ausläufer, Gipfel, Lücken und Schranken, die ein Lagemaß allein verbirgt. Jedes Diagramm betont andere Merkmale. Wähle es daher passend zur Frage und prüfe, wie Darstellungsentscheidungen das Bild beeinflussen.
Sinnvolle Histogrammklassen wählen
Ein Histogramm teilt eine numerische Skala in Intervalle und zählt die Beobachtungen in jedem Intervall. sns.histplot(data=df, x="minutes", binwidth=5) verwendet Klassen von fünf Minuten. seaborn wählt standardmäßig automatische Klassen; Histogramme von pandas und Matplotlib verwenden standardmäßig 10. Probiere mehrere sinnvolle Klasseneinstellungen. Eine sehr breite Klasse kann zwei Gipfel zusammenfassen, während sehr schmale Klassen zufällige Stichprobenschwankungen wie eine Struktur aussehen lassen können. Bei ganzzahligen Anzahlen zentriert discrete=True einen Balken auf jeder Ganzzahl.
Beschreibe die Form als symmetrisch, rechts- oder linksschief, gleichverteilt oder mit einem, zwei oder mehreren Gipfeln. Suche nach Lücken sowie oberen und unteren Schranken. Spitzen bei runden Werten wie 30 und 60 Minuten können eine Wertehäufung durch gerundete Selbstangaben widerspiegeln. Zwei Gipfel nahe 25 und 50 Minuten könnten auf Fahrrad- und Autolieferungen zurückgehen. Mit hue="vehicle" prüfst du, ob diese Gruppen die Aufteilung erklären.
Die wichtigsten Diagrammarten vergleichen
| Diagramm | Was es sichtbar macht | Was zu prüfen ist |
|---|---|---|
| Histogramm | Anzahlen innerhalb von Intervallen, Gipfel und Lücken | Klassenbreite und -ausrichtung |
| KDE | Eine glatte Schätzung der Verteilungsform | Bandbreite und unmögliche Ausläufer |
| Boxplot | Median, mittlere Hälfte und markierte Extremwerte | Verborgene Gipfel und Stichprobenumfang |
| ECDF | Den Anteil bis einschließlich jedes Werts | Achseneinheiten und Grundgesamtheit |
Eine Kerndichteschätzung, kurz KDE, glättet Beobachtungen zu einer Kurve. sns.kdeplot(data=df, x="minutes") kann hilfreich sein, aber die Bandbreite verändert ihre Form. Die Glättung kann Schranken verbergen oder unter null reichen, obwohl Zeitdauern nichtnegativ sind. Lies diese Ausdehnung als Merkmal der Schätzung und nicht als beobachtete negative Zeitdauern.
Ein Boxplot zeichnet den Median innerhalb einer Box von Q1 bis Q3. Die standardmäßigen Whisker reichen bis zu den äußersten beobachteten Werten, die noch innerhalb des 1,5-Fachen des IQR von der Box liegen; weiter entfernte Punkte erscheinen einzeln. Ein Whisker ist daher nicht unbedingt das Minimum oder Maximum und sein Ende ist ein beobachteter Wert, nicht die berechnete Ausreißergrenze.
Kumulative Anteile und multiplikative Skalen ablesen
sns.ecdfplot(data=df, x="minutes")
Eine empirische Verteilungsfunktion zeigt den Anteil, der kleiner oder gleich jedem Wert ist. Lies von einem Anteil wie 0,9 waagerecht ab, um ein Perzentil zu bestimmen. Sie vermeidet die Klassenwahl eines Histogramms und ist nützlich, um zu vergleichen, wie häufig Werte unter einem Schwellenwert bleiben.
Eine logarithmische Skala hilft bei positiven Daten mit großen Verhältnissen. Auf einer Skala zur Basis 10 liegen 10, 100 und 1.000 gleich weit auseinander, weil jeder Schritt mit 10 multipliziert. Gewöhnliche reelle Logarithmen setzen positive Werte voraus; np.log1p(x) berechnet den natürlichen Logarithmus von eins plus dem Wert und verarbeitet null in nichtnegativen Daten.
Normiere beim Vergleich unterschiedlich großer Gruppen innerhalb jeder Gruppe mit stat="percent", common_norm=False oder verwende Teilgrafiken mit gemeinsamen Achsen. Schließe mit einer Beschreibung in Zahlen, etwa: „Die Lieferzeiten sind rechtsschief verteilt. Der Median liegt bei 29 Minuten und die Hälfte der Bestellungen zwischen 25 und 36 Minuten; eine Bestellung dauerte 95 Minuten.“
Wichtige Erkenntnisse
- Probiere sinnvolle Klasseneinstellungen, bevor du einen Gipfel oder eine Lücke als real einstufst.
- Prüfe, ob Mischungen von Gruppen mehrere Gipfel erklären.
- Die Glättung einer KDE kann Merkmale verbergen oder über mögliche Beobachtungswerte hinausreichen.
- Ein Boxplot fasst Lage und Streuung zusammen, verbirgt aber die Anzahl der Gipfel und den Stichprobenumfang.
- Eine empirische Verteilungsfunktion liefert kumulative Anteile ohne Klassen.
- Logarithmische Skalen zeigen Verhältnisse; getrennt normierte Diagramme helfen beim Vergleich von Gruppenformen.
3.3 Kategorieanzahlen, Reihenfolge und Bezugsgrößen
Kategoriale Zusammenfassungen zählen Beobachtungen in benannten Gruppen. Ihre Bedeutung hängt von den Bezeichnungen, ihrer Reihenfolge und der Grundgesamtheit für jede Prozentangabe ab. Auch ein numerischer Kategoriecode benötigt eine kategoriale Zusammenfassung.
Eine Häufigkeitstabelle erstellen
s.value_counts() listet Kategorien von der häufigsten zur seltensten auf. Verwende normalize=True für Anteile und dropna=False, um eine Zeile für fehlende Werte einzuschließen. Für Text meldet describe() die Anzahl erfasster Werte, die Anzahl unterschiedlicher Werte, einen häufigsten Wert und dessen Anzahl.
Unter 200 Antworten auf eine Umfrage lauten 30 Bewertungen „niedrig“, 50 „mittel“ und 120 „hoch“. Dividiert man jede Anzahl durch 200, ergeben sich 15 %, 25 % und 60 %. Sind dies die 200 Personen, die eine Frage in einer größeren Umfrage beantwortet haben, beschreiben die Prozentangaben die Antwortenden auf diese Frage. Fehlende Antworten verändern die Bezugsgröße, wenn sie einbezogen werden.
Eine sinnvolle Reihenfolge beibehalten
Nominale Kategorien wie Städte haben keine inhärente Rangfolge; eine Sortierung nach Häufigkeit kann Vergleiche erleichtern. Ordinale Kategorien haben eine natürliche Reihenfolge, die sichtbar bleiben sollte:
order = ["low", "medium", "high"]
counts = s.value_counts().reindex(order, fill_value=0)
Geordnete kategoriale Daten speichern die Reihenfolge für Sortierung, Vergleiche und Diagramme. Ihr value_counts() sortiert weiterhin standardmäßig nach Häufigkeit; verwende sort=False oder ordne die Häufigkeiten ausdrücklich mit reindex neu. Ein nach Häufigkeit als „hoch“, „mittel“, „niedrig“ geordnetes Diagramm kann die Skala schwerer erkennbar machen.
Seltene Bezeichnungen und Lücken getrennt halten
Wenn viele Kategorien ein Diagramm unleserlich machen, behalte die häufigsten Bezeichnungen und fasse den Rest als „Other“ zusammen:
top = s.value_counts().nlargest(5).index
grouped = s.where(s.isna() | s.isin(top), "Other")
Durch s.isna() bleiben Lücken fehlend. Ohne diesen Teil würden fehlende Einträge ebenfalls zu „Other“ und fehlende Antworten mit echten seltenen Antworten vermischt. Gib an, wie viele Bezeichnungen und Beobachtungen zusammengefasst wurden. Prüfe, ob eine für die Frage wichtige seltene Kategorie in der zusammengefassten Gruppe verschwunden ist.
Waagerechte Balkendiagramme eignen sich für lange Beschriftungen. Zum Beispiel sortiert sns.countplot(data=df, y="city", order=df["city"].value_counts().index) die Anzahlen nach Stadt. Beginne die Anzahlachse bei null, weil die Balkenlänge die Anzahl der Beobachtungen darstellt. Ein Kreisdiagramm wird bei vielen Segmenten schwer vergleichbar.
Numerische Bereiche in beschriftete Kategorien umwandeln
bands = pd.cut(
df["minutes"], bins=[0, 30, 45, np.inf],
labels=["up to 30", "over 30 to 45", "over 45"],
include_lowest=True
)
Die standardmäßig rechts abgeschlossenen Intervalle ordnen 30 dem ersten und 45 dem zweiten Bereich zu. include_lowest=True schließt auch 0 in den ersten Bereich ein. Werte außerhalb dieser Bereiche werden im klassierten Ergebnis fehlend; prüfe daher negative Zeitdauern auf Gültigkeit, bevor du die Anzahl fehlender Werte interpretierst. Halte die Grenzen fest, denn eine Bezeichnung wie „30–45“ allein lässt offen, wie 30 behandelt wird.
Ordne bei nominalen Codes 1 und 2 vor der Darstellung ihre Regionsbezeichnungen zu. Ein arithmetisches Mittel der Regionscodes würde ihre willkürliche Nummerierung beschreiben und nicht die Verteilung der Regionen.
Wichtige Erkenntnisse
- Häufigkeitstabellen zeigen Kategorieanzahlen oder -anteile; nenne die Bezugsgröße.
- Halte ordinale Werte in ihrer natürlichen Reihenfolge, auch wenn sich ihre Häufigkeiten unterscheiden.
- Halte fehlende Antworten getrennt, wenn du seltene Bezeichnungen unter „Other“ zusammenfasst.
- Beginne Anzahlachsen von Balkendiagrammen bei null und gestalte lange Beschriftungen lesbar.
- Gib numerischen Bereichen eindeutige Grenzen und prüfe ihre Endpunkte.
3.4 Ausreißermarkierungen und Entscheidungen über die Behandlung
Ein Ausreißer liegt nach einer festgelegten Regel und im jeweiligen Kontext weit vom Großteil der Daten entfernt. Er kann ein Erfassungsfehler, ein echtes seltenes Ereignis oder Teil einer eigenen Gruppe sein. Eine Markierung ist der Beginn einer Untersuchung.
IQR-Ausreißergrenzen berechnen
Die IQR-Regel markiert Werte unterhalb oder oberhalb dieser Grenzen als Ausreißer:
Für die Lieferzeiten 18, 22, 25, 25, 27, 29, 31, 34, 38, 41 und 95 beträgt Q1 25 und Q3 36. Der IQR beträgt 11, sodass die untere Ausreißergrenze bei 8,5 und die obere bei 52,5 liegt. Die Bestellung mit 95 Minuten wird als Ausreißer markiert.
q1, q3 = s.quantile([0.25, 0.75])
iqr = q3 - q1
flag = (s < q1 - 1.5 * iqr) | (s > q3 + 1.5 * iqr)
Diese Ausreißergrenzen liegen standardmäßig den Ausreißerpunkten im Boxplot zugrunde. Ein Wert genau auf einer Ausreißergrenze liegt innerhalb der Grenzen. Bei einem langen rechten Ausläufer kann die Regel viele echte hohe Werte als Ausreißer markieren.
Maskierungseffekt und robuste Kennwerte verstehen
Ein z-Wert misst den Abstand vom arithmetischen Mittel in Einheiten der Standardabweichung:
Eine verbreitete Regel markiert Werte mit einem absoluten z-Wert größer als 3. Hier beträgt das arithmetische Mittel 35 und die Stichprobenstandardabweichung etwa 21,02, sodass 95 einen z-Wert von etwa 2,85 ergibt. Der extreme Wert hat gerade das Lagemaß und das Streuungsmaß erhöht, mit denen er beurteilt wird. Dieser Maskierungseffekt kann dazu führen, dass die Regel einen ungewöhnlichen Wert übersieht. Die Regel passt außerdem besser zu annähernd symmetrischen als zu schiefen Verteilungen.
Die mediane absolute Abweichung, kurz MAD, ist der Median der absoluten Abstände vom Median. Sie beruht auf robusten Größen. Ein modifizierter z-Wert lautet:
Hier beträgt der Median 29 und die MAD 5. Für 95 Minuten beträgt der modifizierte Wert etwa 8,90 und überschreitet den verbreiteten absoluten Schwellenwert von 3,5. Ist die MAD null, ist diese Division nicht definiert; untersuche die wiederholten Werte und verwende eine andere begründete Prüfung, statt einen unendlichen Wert als gemessenes Ergebnis zu berichten.
Vor Änderungen an den Daten untersuchen
Fachliche Regeln gehen vor. Eine negative verstrichene Zeitdauer ist nach dieser Definition unabhängig von ihrem statistischen Kennwert ein Fehler. Untersuche bei einem möglichen Extremwert die vollständige Zeile, ihre Zeitstempel, Entfernung, Gruppe und Quelle. Ein Sturm oder eine lange Strecke kann eine langsame Lieferung erklären.
| Beleg | Mögliche Maßnahme |
|---|---|
| Die Quelle belegt den richtigen Wert | Im Code korrigieren und die Änderung protokollieren |
| Ein Datensatz ist nachweislich fehlerhaft und der Wert nicht wiederherstellbar | Entfernen oder als fehlend markieren und die Wirkung dokumentieren |
| Der Wert ist echt | Behalten; robuste Kennwerte oder eine geeignete Skala verwenden |
| Die Schlussfolgerung hängt stark vom Wert ab | Ergebnisse mit und ohne den Wert vergleichen |
Der Vergleich der Ergebnisse mit und ohne die Beobachtung ist eine Sensitivitätsanalyse. Die Begrenzung von Extremwerten auf ein ausgewähltes Perzentil, Winsorisierung genannt, ist eine weitere bewusste Transformation; berichte die Grenze und dass Werte verändert wurden. Untersuche auch ungewöhnliche Kombinationen: Zwei einzeln plausible Messwerte können einen seltenen Punkt in einem Streudiagramm bilden.
Wichtige Erkenntnisse
- IQR-Ausreißergrenzen markieren Werte außerhalb von Q1 − 1,5 IQR und Q3 + 1,5 IQR als Ausreißer.
- Extreme Werte können das arithmetische Mittel und die Standardabweichung erhöhen und sich dadurch bei z-Werten selbst maskieren.
- Modifizierte z-Werte beruhen auf Median und MAD; bei einer MAD von null ist ein anderer Ansatz nötig.
- Fachliche Regeln unterscheiden unmögliche Werte von möglichen Extremwerten.
- Untersuche den vollständigen Datensatz und dokumentiere jede Behandlung.
- Zeige mit Sensitivitätsanalysen, wann Extremwerte eine Schlussfolgerung verändern.
- Suche neben Extremwerten einzelner Variablen auch nach ungewöhnlichen Kombinationen.
4Zusammenhänge zwischen Variablen untersuchen
Zwei Variablen können sich entlang einer Geraden oder einer Kurve gemeinsam verändern oder nur deshalb, weil unterschiedliche Gruppen zusammengefasst wurden. Nutze Streudiagramme, um die Form zu erkennen, Korrelationskoeffizienten, um bestimmte Aspekte des Zusammenhangs zusammenzufassen, und Untergruppenprüfungen, um seinen Ursprung zu untersuchen. Für die Interpretation sind neben der sichtbaren Stärke des Musters auch die Grundgesamtheit, der nutzbare Stichprobenumfang und der Erhebungsprozess nötig.
4.1 Streudiagramme, die den Zusammenhang zeigen
Ein Streudiagramm setzt für jede Beobachtung einen Punkt an das zugehörige Paar numerischer Werte. Trage eine mögliche erklärende Variable auf der waagerechten Achse und die Zielvariable auf der senkrechten Achse auf. Das Diagramm hilft dir, die Form eines Zusammenhangs zu erkennen, bevor du ihn in einem Koeffizienten zusammenfasst.
Vier Merkmale beschreiben
Verwende Richtung, Form, Stärke und ungewöhnliche Punkte. Eine positive Richtung bedeutet, dass die Zielvariable mit steigender waagerechter Variable tendenziell steigt; eine negative, dass sie tendenziell fällt. Die Form kann geradlinig, gekrümmt oder in Häufungen aufgeteilt sein. Die Stärke beschreibt, wie eng die Punkte dieser Form folgen; sie kann auch bei einer gekrümmten Form stark sein.
Bei Temperaturen von 8, 12, 15, 18, 21, 24, 27 und 30 °C beträgt die tägliche Anzahl der Fahrradverleihungen 310, 420, 515, 600, 690, 760, 800 und 780. Der Zusammenhang ist insgesamt stark und positiv. Bis etwa 27 °C ist er nahezu linear, danach flacht er ab und fällt leicht. Ihn nur als „positiv“ zu beschreiben, übersieht die Veränderung bei hohen Temperaturen.
sns.scatterplot(data=df, x="temp_c", y="rentals")
Dicht besetzte Diagramme lesbar machen
Bei vielen Zeilen verdecken sich Punkte gegenseitig: Die Überlagerung von Datenpunkten verbirgt, wo sich Beobachtungen häufen. Kleinere Marker und alpha=0.2 machen durch Transparenz einen Teil der Dichte sichtbar. Ein Hexbin-Diagramm fasst Beobachtungen in Sechsecken zusammen:
df.plot.hexbin(x="distance_km", y="minutes", gridsize=30)
Ein zweidimensionales sns.histplot bietet eine ähnliche Ansicht mit rechteckigen Klassen. Eine Zufallsstichprobe kann die Darstellung übersichtlicher machen; lege ihren Startwert fest, damit erneute Durchläufe dieselbe Teilmenge zeigen. Wenn eine Achse nur wenige Werte annimmt, verteilt Jitter übereinanderliegende Punkte für eine bessere Sichtbarkeit. Jitter verschiebt Punkte in der Darstellung und bedeutet keine zusätzliche Messgenauigkeit.
Gruppen ergänzen und eine angepasste Linie prüfen
Verwende hue="season" für Farbe oder sns.relplot(..., col="season") für getrennte Teilgrafiken. Eine zusammengefasste Punktwolke kann unterschiedliche saisonale Häufungen enthalten. Die Markergröße kann eine weitere Größe darstellen, wenn ihre Bedeutung klar bleibt.
sns.regplot(data=df, x="temp_c", y="rentals") ergänzt eine Gerade nach der Methode der kleinsten Quadrate und ein schattiertes Unsicherheitsband. Eine Linie unterstützt die visuelle Beurteilung, kann aber eine Krümmung übersehen. lowess=True zeichnet eine glatte Kurve, wenn die benötigte Bibliothek statsmodels installiert ist. Untersuche die Beobachtungen, bevor du eine der beiden Darstellungen wählst.
Für eine kleine Auswahl von Variablen zeichnet ein Pairplot ihre paarweisen Streudiagramme und einzelnen Verteilungen. Verwende zum Beispiel Schnabellänge in mm, Flossenlänge in mm, Körpermasse in g und die Art als Farbgruppe. Etwa drei bis sechs numerische Variablen bleiben lesbar; bei vielen weiteren entsteht eine Wand kleiner Teilgrafiken.
Verdichtung und gemeinsame Zeittrends untersuchen
Logarithmische Achsen können positive Werte mit großen Verhältnissen auseinanderziehen, etwa Bevölkerungszahl und gesamten Energieverbrauch. Halte die Skala in den Beschriftungen sichtbar. Wenn ein extremer Punkt einen riesigen Achsenbereich bestimmt, untersuche ihn und ergänze eine klar beschriftete Ansicht des Großteils, damit das übrige Muster sichtbar wird.
Zwei Variablen können auch deshalb ein Muster bilden, weil beide im Zeitverlauf wachsen. Färbe Punkte nach Datum oder stelle jede Zeitreihe gegen die Zeit dar. Diese Prüfung kann zeigen, ob der scheinbare Zusammenhang überwiegend ein gemeinsamer Trend ist.
Wichtige Erkenntnisse
- Beschreibe Richtung, Form, Stärke und ungewöhnliche Beobachtungen.
- Nutze Transparenz, kleinere Punkte, Klasseneinteilung oder Stichproben mit festem Startwert, um Dichte sichtbar zu machen.
- Untersuche mit Farben oder Teilgrafiken Gruppen innerhalb eines zusammengefassten Musters.
- Prüfe auf Krümmung, bevor du dich auf eine angepasste Gerade verlässt.
- Prüfe Skalen, extreme Punkte und Zeittrends, die die Darstellung dominieren können.
4.2 Was ein Korrelationskoeffizient misst
Ein Korrelationskoeffizient fasst einen Aspekt eines Zusammenhangs zusammen. Wähle den Koeffizienten passend zum Zusammenhang, den du beschreiben möchtest, und betrachte ihn zusammen mit einem Diagramm und der Anzahl nutzbarer Beobachtungen.
Pearson misst einen geradlinigen Zusammenhang
Der Pearson-Koeffizient ist die Summe der Produkte zentrierter Werte geteilt durch das Produkt der zentrierten Längen:
Sein Wertebereich reicht von −1 bis 1. Das Vorzeichen gibt die Richtung und der Betrag die Stärke des linearen Zusammenhangs an. Perfekte positive oder negative Werte bedeuten, dass alle nutzbaren Punkte auf einer Geraden liegen und beide Variablen variieren. Der Koeffizient hat keine Einheit, bleibt beim Vertauschen der Achsen gleich und ändert sich bei einer positiven Umrechnung zwischen Maßeinheiten nicht.
Ein Koeffizient nahe null bedeutet einen geringen linearen Zusammenhang. Für die Eingaben −3, −2, −1, 0, 1, 2, 3 und Ausgaben, die ihren Quadraten entsprechen, ist die Pearson-Korrelation trotz eines perfekten U-förmigen Zusammenhangs genau null. Korrelation unterscheidet sich auch von Steigung: Eine flache Gerade kann eine hohe Korrelation haben.
Rangverfahren beschreiben die Anordnung
Die Spearman-Rangkorrelation berechnet die Pearson-Korrelation der Ränge und beschreibt einen monotonen Zusammenhang: Werte bewegen sich tendenziell durchgehend nach oben oder unten, auch entlang einer Kurve. Kendalls Tau vergleicht konkordante Beobachtungspaare, die bei beiden Variablen gleich angeordnet sind, mit diskordanten Paaren, die entgegengesetzt angeordnet sind. Rangverfahren reagieren weniger empfindlich auf extreme Größenordnungen als Pearson.
Für das Beispiel mit Temperatur und Verleihungen beträgt Pearson 0,974, Spearman 0,976 und Kendall 0,929. Das Streudiagramm zeigt dennoch das Abflachen oberhalb von etwa 27 °C. Ein hoher Koeffizient kann mit einer bedeutsamen Krümmung einhergehen.
Eine Matrix sorgfältig berechnen
cols = ["temp_c", "rentals", "distance_km"]
corr = df[cols].corr(method="spearman")
sns.heatmap(corr, annot=True, fmt=".2f",
vmin=-1, vmax=1, center=0, cmap="vlag")
Bei einem DataFrame mit gemischten Typen wählt df.corr(numeric_only=True) numerische Spalten aus; schließe außerdem Kennungen und Kategoriecodes aus, die keinen sinnvollen numerischen Zusammenhang haben. Fehlende Werte werden paarweise ausgeschlossen, sodass Matrixzellen unterschiedliche Teilmengen beschreiben können. Prüfe die nutzbare Anzahl für jedes Paar. Die Matrix ist symmetrisch. Die Korrelation einer Spalte mit sich selbst ist 1, sofern sie definiert ist; eine konstante Spalte hat eine nicht definierte Korrelation und fehlende Werte in der zugehörigen Zeile, Spalte und auf der Diagonale.
Empfindlichkeit gegenüber der Anordnung der Daten prüfen
Für Eingaben von 1 bis 10 und Ausgaben von 3, 1, 4, 2, 5, 3, 4, 2, 5, 3 beträgt Pearson etwa 0,307. Der zusätzliche einzelne Punkt (30|30) erhöht den Wert auf 0,938; Spearman wird etwa 0,462. Ein Punkt kann Pearson dominieren, während der Großteil weiterhin ein schwaches Muster zeigt.
Anscombes Quartett macht dieselbe Lehre sichtbar: Vier Datensätze haben ein arithmetisches Mittel der Eingaben von 9, ein arithmetisches Mittel der Ausgaben von 7,50, eine Varianz der Eingaben von 11, eine Korrelation nahe 0,816 und die angepasste Gerade gemeinsam. Ihre Diagramme zeigen dennoch eine Punktwolke, eine Kurve und unterschiedliche einflussreiche Punkte. Gib Wert und Anzahl zusammen mit jeder verbalen Stärkebezeichnung an; Fachgebiete haben unterschiedliche Konventionen für Bezeichnungen wie „stark“.
Wichtige Erkenntnisse
- Pearson beschreibt den linearen Zusammenhang ohne Einheit und mit Werten zwischen −1 und 1.
- Eine Pearson-Korrelation von null kann einen starken gekrümmten Zusammenhang verbergen.
- Spearman und Kendall beschreiben die Anordnung und verringern die Empfindlichkeit gegenüber extremen Größenordnungen.
- Der paarweise Ausschluss fehlender Werte kann dazu führen, dass Matrixzellen auf unterschiedlichen Stichproben beruhen.
- Eine konstante Variable hat keine definierte Korrelation.
- Diagramme und Sensitivitätsanalysen zeigen Merkmale, die gleiche Koeffizienten verbergen können.
4.3 Zusammenhänge, Ursachen und irreführende Vergleiche
Ein Zusammenhang beschreibt, wie Variablen in den beobachteten Daten gemeinsam auftreten. Seine Ursache braucht eine separate Erklärung. Mögliche Quellen sind eine kausale Wirkung, umgekehrte Kausalität, eine dritte Variable, Selektion und Zufall.
Frag, was den Zusammenhang erklären könnte
Eine konfundierende Variable beeinflusst beide Variablen und erzeugt oder verzerrt ihren Zusammenhang. Heißes Wetter erhöht Eisverkäufe und Badeunfälle. Weniger Eisverkäufe würden das wetterbedingte Risiko bestehen lassen. Eine Mediatorvariable ist anders: Sie liegt auf dem kausalen Weg zwischen den Variablen.
Umgekehrte Kausalität kehrt die vorgeschlagene Richtung um. Kunden, die häufiger Hilfeseiten besuchen, haben möglicherweise mehr fehlgeschlagene Bestellungen, weil Fehlschläge sie auf diese Seiten führen. Der beobachtete Zusammenhang gibt keinen Anlass zu erwarten, dass weniger Bestellungen fehlschlagen, wenn Hilfeseiten verborgen werden.
Untergruppenmuster vom zusammengefassten Ergebnis trennen
Das Simpson-Paradoxon tritt auf, wenn der zusammengefasste Vergleich die Richtung umkehrt, die in jeder Untergruppe zu sehen ist. Die Daten zu Nierensteinbehandlungen aus einer Studie von 1986 veranschaulichen die Rechnung:
| Gruppe | Behandlung A | Behandlung B |
|---|---|---|
| Kleine Steine | 81/87 = 93,1 % | 234/270 = 86,7 % |
| Große Steine | 192/263 = 73,0 % | 55/80 = 68,8 % |
| Zusammen | 273/350 = 78,0 % | 289/350 = 82,6 % |
A hat in beiden Steingrößengruppen den höheren Erfolgsanteil. B hat den höheren zusammengefassten Anteil, weil A überwiegend bei den schwierigeren Fällen mit großen Steinen eingesetzt wurde. Zusammengefasste Raten gewichten Untergruppenraten nach ihren Anzahlen. Untersuche die Zusammensetzung und vergleiche sinnvolle Untergruppen, bevor du ein zusammengefasstes Ergebnis interpretierst.
Zeit, Auswahl und Aggregation prüfen
Zwei nicht zusammenhängende Zeitreihen können beide über die Jahre steigen und stark korreliert erscheinen. Stelle sie im Zeitverlauf dar und untersuche Änderungen von Periode zu Periode oder Zusammenhänge innerhalb von Perioden. Der Zusammenhang zwischen den Niveaus kann überwiegend ihren gemeinsamen Zeittrend widerspiegeln.
Auch ein ausgewählter Wertebereich verändert, was sichtbar ist. Unter Studierenden, die aufgrund hoher Aufnahmeergebnisse ausgewählt wurden, ist der Ergebnisbereich eng und die Korrelation zwischen Ergebnis und Note kann viel schwächer sein als unter allen Bewerbern. Beschreibe die ausgewählte Grundgesamtheit; ihr Koeffizient beantwortet eine andere Frage als der Koeffizient für alle Bewerber.
Eine Korrelation zwischen Städtedurchschnitten bezieht sich auf Städte. Sie auf einzelne Einwohner zu übertragen, ist der ökologische Fehlschluss. Aggregation kann einen Zusammenhang verstärken, abschwächen oder umkehren, weil das Muster innerhalb der Gruppen und die Zusammensetzung zwischen Gruppen nicht übereinstimmen müssen.
Eine breite Suche als Quelle für Hypothesen behandeln
Bei 20 numerischen Variablen gibt es 190 unterschiedliche Paare. Die Suche in diesen Paaren und vielen Teilgruppen bietet Zufallsmustern viele Gelegenheiten aufzutreten. Berichte, wie breit du gesucht hast, und benenne ein überraschendes Muster als Hypothese für neue Daten oder eine geplante konfirmatorische Analyse.
Formuliere mit Bezug auf die Beobachtungen: „Bei Regen aufgegebene Bestellungen waren in diesem Zeitraum mit längeren Lieferzeiten verbunden.“ Diese Aussage hält einen Zusammenhang fest. Die Behauptung, Regen habe den Unterschied verursacht, bräuchte zusätzlich Belege, die konkurrierende Erklärungen ausschließen, etwa eine andere Zusammensetzung der Strecken oder Zeiten.
Wichtige Erkenntnisse
- Berücksichtige umgekehrte Kausalität, Konfundierung, Selektion und Zufall, wenn du einen Zusammenhang erklärst.
- Konfundierende Variablen beeinflussen beide Variablen; Mediatorvariablen liegen auf einem kausalen Weg.
- Zusammengefasste Vergleiche können Vergleiche innerhalb von Untergruppen umkehren, wenn sich die Zusammensetzung der Gruppen unterscheidet.
- Zeittrends, ausgewählte Wertebereiche und Aggregation verändern den gemessenen Zusammenhang.
- Zusammenhänge auf Gruppenebene müssen auf Gruppenebene interpretiert werden.
- Nutze explorative Muster, um Hypothesen zu bilden, und berichte den Umfang der Suche.
5Teilgruppen der Daten vergleichen
Eine zusammengefasste Darstellung kann Unterschiede zwischen Städten, Kanälen oder Zeiträumen verbergen. Vergleiche Gruppenverteilungen, Kategorieanteile und Ereignisraten mit sichtbaren Bezugsgrößen und Stichprobenumfängen. Prüfe dann, ob Gruppenzusammensetzung, fehlende Ergebnisse oder ungleiche zeitliche Abdeckung den scheinbaren Unterschied erklären. Ein nützlicher Vergleich wählt das Maß passend zur Frage und macht die Grundlage jeder Zahl deutlich.
5.1 Lagemaße, Streuungen und Ausläufer zwischen Gruppen vergleichen
Eine Teilgruppe ist ein durch eine Kategorie, einen numerischen Bereich oder einen Zeitraum definierter Ausschnitt. Ein nützlicher Vergleich zeigt, wie sich die vollständige Verteilung unterscheidet, und macht sichtbar, wie viele Daten jedem Kennwert zugrunde liegen.
Gruppengrößen neben Kennwerte setzen
by_city = df.groupby("city")["minutes"].agg(
["count", "mean", "median", "std"]
)
Die Anzahl ist hier die Anzahl erfasster Zeitdauern. Fehlen einige Zeitdauern, gib auch die Anzahl der Bestellungen und den fehlenden Anteil an, damit die Grundlage der Tabelle klar ist. Benannte Aggregationen können Spalten nützliche Bezeichnungen geben, etwa orders=("order_id", "count") und median_min=("minutes", "median").
Betrachte diese Lieferzeiten:
| Stadt | Zeiten in Minuten | Arithmetisches Mittel | Median | Stichprobenstandardabweichung |
|---|---|---|---|---|
| Lyon | 24, 30, 27, 33, 29, 31 | 29,0 | 29,5 | 3,2 |
| Porto | 22, 25, 21, 40, 24 | 26,4 | 24,0 | 7,8 |
| Tartu | 19, 55 | 37,0 | 37,0 | 25,5 |
Tartu hat den höchsten Durchschnitt, aber nur zwei Beobachtungen. Eine lange Lieferung dominiert das Ergebnis. Kleine Gruppen erscheinen oft an beiden Enden einer Rangfolge, weil ihre Kennwerte durch einzelne Beobachtungen stärker schwanken. Lege vor der Rangvergabe eine Mindestanzahl fest und halte kleine Gruppen als unvollständige Beleglage sichtbar.
Eine Darstellung für die Verteilung wählen
Ein Boxplot auf einer gemeinsamen numerischen Achse vergleicht Mediane, die mittleren Hälften und markierte Extremwerte. Ein Violinplot ergänzt die geschätzte Form. Bei kleinen Gruppen zeigen Streifen- oder Schwarmdiagramme jede Beobachtung und machen den Stichprobenumfang leichter erkennbar.
Verwende für Histogramme Teilgrafiken mit denselben Achsen oder normierte Überlagerungen wie stat="density", common_norm=False. Überlagerte Diagramme absoluter Häufigkeiten zeigen hauptsächlich, welche Gruppe mehr Datensätze enthält. Eine Überlagerung von Dichten erlaubt den Vergleich der Form jeder Gruppe auf derselben Grundlage.
Zwei Gruppen mit demselben arithmetischen Mittel können sehr unterschiedliche Ausläufer haben. Eine Stadt mit überwiegend schnellen und wenigen sehr langen Lieferungen kann dasselbe arithmetische Mittel haben wie eine Stadt mit durchweg mäßigen Zeiten. Vergleiche neben dem Lagemaß auch Streuung, Perzentile und den relevanten Anteil oberhalb eines Schwellenwerts.
Den Bezugswert eines Unterschieds nennen
Der Unterschied der arithmetischen Mittel von Tartu und Lyon in dieser Stichprobe beträgt 8 Minuten. Relativ zu Lyon sind es etwa 27,6 %:
Der Bezugswert sind die 29 Minuten von Lyon. Ein Wechsel des Bezugswerts verändert den relativen Prozentsatz, obwohl der absolute Abstand 8 Minuten bleibt. Gib bei dieser deskriptiven Berechnung die geringen Gruppengrößen an; die Rechnung allein kann keinen stabilen Unterschied zwischen den Städten belegen.
Zusammensetzung innerhalb von Gruppen prüfen
df.groupby(["city", "vehicle"])["minutes"].median().unstack()
Diese Tabelle nach Stadt und Fahrzeug kann zeigen, ob ein Unterschied zwischen Städten aus der Zusammensetzung der Fahrzeuge entsteht. Eine Pivot-Tabelle mit derselben Gruppierung und demselben Median ergibt denselben Vergleich. Untersuche auch die Anzahlen für diese kleineren Zellen: Die Aufteilung einer Gruppe kann die Beleglage dünner machen, auch wenn sie das Muster verdeutlicht.
Wichtige Erkenntnisse
- Berichte Gruppengrößen zusammen mit Lage und Streuung und gib die Grundlage jeder Anzahl an.
- Vergleiche Verteilungen mit gemeinsamen Skalen und Normierung innerhalb der Gruppen.
- Untersuche neben Lagemaßen auch Ausläufer und Anteile oberhalb von Schwellenwerten.
- Nenne den Bezugswert, wenn du eine relative Differenz berichtest.
- Prüfe die Zusammensetzung der Untergruppen und Anzahlen in kleinen Zellen, bevor du Gruppen in eine Rangfolge bringst.
5.2 Anteile, Raten und die passende Bezugsgröße
Anzahlen beantworten, wie viele Ereignisse aufgetreten sind. Raten beantworten, wie häufig Ereignisse im Verhältnis zu den Gelegenheiten aufgetreten sind. Wenn Gruppen unterschiedlich groß sind, kann die Wahl der Bezugsgröße den sichtbaren Vergleich verändern.
Eine Kreuztabelle in der beabsichtigten Richtung lesen
Eine Kreuztabelle zählt Kombinationen zweier Kategorien:
pd.crosstab(df["region"], df["channel"], margins=True)
Im Norden gibt es 30 App-Bestellungen und 20 Webbestellungen; im Süden 60 App-Bestellungen und 90 Webbestellungen. Der Süden hat mehr App-Bestellungen, aber seine größere Gesamtzahl an Bestellungen verändert den Vergleich der Anteile.
| Frage | Bezugsgröße | Ergebnis |
|---|---|---|
| Welcher Anteil im Norden nutzt die App? | Alle 50 Bestellungen im Norden | 60 % |
| Welcher Anteil im Süden nutzt die App? | Alle 150 Bestellungen im Süden | 40 % |
| Welcher Anteil aller App-Bestellungen stammt aus dem Norden? | Alle 90 App-Bestellungen | 33,3 % |
normalize="index" dividiert durch die Zeilensummen; normalize="columns" dividiert durch die Spaltensummen. normalize="all" verwendet die Gesamtsumme. Lies die Frage laut vor, bevor du die Normierung wählst. Bei Zeilennormierung ergibt jede Zeile die Summe 1, bei Spaltennormierung jede Spalte.
Unbekannte Ergebnisse erhalten
Das arithmetische Mittel boolescher Werte ergibt den Anteil der True-Werte. Für eine Kennzeichnung verspäteter Lieferungen müssen fehlende Zeiten besonders behandelt werden:
df["late"] = df["minutes"].astype("Float64") > 45
rates = df.groupby("city")["late"].mean()
known = df.groupby("city")["late"].count()
Float64 mit Fehlwertunterstützung erhält fehlende Zeiten als fehlende Kennzeichnungen. Das gruppierte arithmetische Mittel schätzt dann den verspäteten Anteil unter den erfassten Zeiten. Bei gewöhnlichen Gleitkommazahlen ist NaN > 45 False. Dadurch würden unbekannte Zeiten als pünktlich gezählt und die Rate würde sinken. Nenne die Anzahl bekannter Ergebnisse als Bezugsgröße und berichte neben der Rate auch die fehlenden Werte.
Zwei Arten prozentualer Änderung unterscheiden
Eine Verspätungsrate, die von 4 % auf 5 % steigt, steigt um 1 Prozentpunkt. Der relative Anstieg verwendet die ursprüngliche Rate als Bezugswert:
Schreibe „stieg um 1 Prozentpunkt, ein relativer Anstieg von 25 %“. Die alleinige Aussage „stieg um 1 %“ lässt die Bedeutung offen. Zeige bei einer Rate aus einer kleinen Zelle auch ihre Anzahl: 1 verspätete Bestellung von 2 ergibt 50 %, aber eine einzige zusätzliche pünktliche Bestellung verändert den Anteil auf ein Drittel.
Ergebnisanteile mit der Gruppengröße vergleichen
Entfallen 25 % aller Bestellungen, aber 40 % der Beschwerden auf den Norden, ist er unter den Beschwerden überrepräsentiert. Dabei wird sein Anteil an den Beschwerden mit seinem Anteil an den Bestellungen verglichen. Das ist eine andere Frage als die nach der Beschwerderate innerhalb des Nordens, für die die Anzahl seiner Beschwerden durch die Anzahl seiner Bestellungen geteilt werden muss.
Verwende gruppierte Balken, auf 100 % gestapelte Balken oder eine beschriftete Heatmap, um Anteile zu zeigen. Eine zeilennormierte Tabelle nach Region und Kanal als gestapeltes Balkendiagramm vergleicht die Kanalzusammensetzung innerhalb der Regionen. Nenne die Bezugsgröße im Titel oder in der Achsenbeschriftung, damit Leser diese Zusammensetzung von der regionalen Zusammensetzung jedes Kanals unterscheiden können.
Wichtige Erkenntnisse
- Zeilenanteile, Spaltenanteile und Anteile an der Gesamtsumme beantworten unterschiedliche Fragen.
- Vergleiche Ereignisraten anhand der Gelegenheiten in derselben Teilgruppe.
- Erhalte unbekannte Ergebnisse als fehlend, wenn du boolesche Indikatoren für Raten erstellst.
- Differenzen in Prozentpunkten ergeben sich durch Subtraktion der Raten; relative Änderungen durch Division durch die Ausgangsrate.
- Zeige Anzahlen neben Raten, besonders bei kleinen Zellen.
- Vergleiche den Ergebnisanteil einer Gruppe mit ihrem Anteil an der Gesamtheit, um Überrepräsentation zu beurteilen.
5.3 Zeitvergleiche mit vergleichbaren Perioden
Periodensummen hängen sowohl von der Aktivität als auch von der abgedeckten Zeit ab. Prüfe Periodengrenzen, fehlende Datumswerte und das normale saisonale Muster, bevor du einen Anstieg oder Rückgang beschreibst. Vergleiche Teilgruppen anhand eines Maßes, das zu ihrer Größe passt.
Nach Kalenderperiode aggregieren
Mit eingelesenen Bestellzeitstempeln lassen sich monatliche Anzahlen wie folgt erstellen:
monthly = (
df.set_index("order_date")
.resample("MS")["order_id"].count()
)
"MS" bezeichnet jeden Kalendermonat mit seinem ersten Tag. Verwende im aktuellen pandas "ME" für Monatsendbezeichnungen. Kombiniere für eine monatliche Stadttabelle pd.Grouper(key="order_date", freq="MS") mit der Gruppierung nach Stadt und verwende .size().unstack(). Die Methode zählt Zeilen; kläre daher zuerst, ob eine Zeile für eine Bestellung steht.
Beobachtungszeit vor dem Vergleich von Summen prüfen
Angenommen, vom 1. August bis einschließlich 12. Oktober gibt es täglich 100 Bestellungen. Die Monatssummen betragen 3.100 im August, 3.000 im September und 1.200 im erfassten Teil des Oktobers. Die Oktobersumme sieht viel niedriger aus, obwohl die Aktivität an jedem beobachteten Tag gleich ist.
Dividiere jede Summe durch ihre beobachteten Tage: 31, 30 und 12. Alle drei Tagesdurchschnitte betragen 100. Vergleiche solche Raten oder lasse unvollständige Perioden weg. Die Bezugsgröße muss die tatsächliche Abdeckung darstellen: Ein nicht erfasster Tag kann nicht ohne Weiteres als Tag ohne Aktivität gelten.
Auch vollständige Monate sind unterschiedlich lang. Sie können außerdem unterschiedlich viele geschäftige Wochentage enthalten. Ist die Aktivität samstags hoch, vergleiche entsprechende Wochentage oder Raten, die die Zusammensetzung nach Wochentagen berücksichtigen, bevor du einen monatlichen Unterschied interpretierst.
Einen Zyklus von einer dauerhaften Veränderung unterscheiden
Saisonalität ist ein wiederkehrendes Muster, etwa ein wöchentlicher oder jährlicher Zyklus. daily.rolling(7).mean() glättet ein Fenster von sieben Tagen in einer regelmäßig erfassten täglichen Zeitreihe. Dadurch tritt ein wöchentlicher Zyklus weniger hervor, während langsamere Veränderungen erhalten bleiben. Vergleiche Dezember mit dem vorherigen Dezember, wenn die Frage eine Veränderung gegenüber dem Vorjahr bei saisonaler Aktivität betrifft.
Einige wenige ungewöhnlich hohe Tageswerte können in einem kurzen Fenster wie ein Trend aussehen. Zeige einen ausreichend langen Verlauf, um den normalen Schwankungsbereich zu verstehen, und behalte ungeglättete Werte bei, wenn sie ein wichtiges Ereignis erklären helfen.
Lücken prüfen und Verläufe von Teilgruppen vergleichen
Eine durch Resampling ermittelte Anzahl von null kann bedeuten, dass keine Ereignisse erfasst wurden oder die Erfassung ausgefallen ist. Eine plötzliche Niveauänderung kann auf eine neue App-Version oder eine geänderte Definition zurückgehen. Bestätige Abdeckung und Erfassungsgeschichte anhand der Datenquelle, bevor du diese Punkte als Verhaltensänderungen behandelst.
Stelle jede Teilgruppe als Linie auf gemeinsamen Achsen dar, mit Einheiten und einer einheitlichen Farbe pro Gruppe. Große Gruppen können Diagramme absoluter Häufigkeiten dominieren. Anteile, Raten oder ein Index relativ zum Anfangswert jeder Gruppe können Veränderungen kleinerer Gruppen sichtbar machen; beschrifte, welches Maß gezeigt wird.
Eine Kohorte gruppiert Kunden nach ihrem Beginn. Verfolgst du Personen mit Beginn im März und im April nach der seit ihrer ersten Bestellung vergangenen Zeit, kannst du Änderungen innerhalb der Kundenverläufe von Änderungen in der Zusammensetzung der gesamten Kundschaft unterscheiden.
Wichtige Erkenntnisse
- Prüfe, ob die Abdeckung vollständig ist, und verwende aktuelle Frequenzkürzel für Kalenderperioden.
- Vergleiche Summen nur unter Berücksichtigung der Periodenlänge und der Zusammensetzung nach Wochentagen.
- Verwende für Raten die beobachtete Zeit und untersuche Lücken, bevor du sie als Nullen behandelst.
- Vergleiche saisonal entsprechende Perioden und betrachte einen ausreichend langen Verlauf, um Veränderungen zu interpretieren.
- Verwende bei unterschiedlichen Gruppengrößen Raten oder indexierte Verläufe der Teilgruppen.
- Kohorten trennen die Zeit seit dem Beginn von Änderungen in der Zusammensetzung der gesamten Kundschaft.
6Explorative Befunde reproduzierbar dokumentieren
Exploration wird für andere nützlich, wenn ihre Befunde klare Fragen beantworten und ihre Belege überprüfbar sind. Wähle Diagramme und Zahlen aus, die die Ergebnisse erklären, unterscheide Beobachtungen von vorgeschlagenen Ursachen und Maßnahmen und nenne die Einschränkungen, die die Interpretation beeinflussen. Bereite ein übersichtliches Notebook, aktuelle Exporte und ausreichende Angaben zur Datenprovenienz vor, damit berechtigte Leser die Arbeit wiederholen können.
6.1 Befunde, die die Frage beantworten
Ein nützlicher Befund verbindet eine Frage mit einem Beleg. Er gibt die Größenordnung eines Musters, die beschriebene Grundgesamtheit und den Zeitraum sowie die Einschränkungen an, die seine Interpretation beeinflussen. Baue den Bericht um Fragen herum auf statt nach der Reihenfolge, in der Diagramme erstellt wurden.
Einen Befund belegen
Zum Beispiel: „Von Januar bis September 2026 betrug die mediane Lieferzeit 29 Minuten; 8 % der 48.200 Bestellungen dauerten länger als 45 Minuten. Der verspätete Anteil war an Freitag- und Samstagabenden am höchsten: 14 % gegenüber 6 % an anderen Abenden.“
Diese Aussage nennt Zeitraum, Lagemaß, Schwellenwert, Bezugsgröße und Vergleich. Verwende eine für die Entscheidung ausreichende Genauigkeit. „29 Minuten“ lässt sich leichter nutzen als „29,4545 Minuten“, wenn die zusätzlichen Ziffern keine praktische Information liefern. Bei einer schief verteilten Zeitdauer erklären ein Median und ein oberes Perzentil das Erleben oft besser als ein arithmetisches Mittel allein.
Geschehen, Ursache und Handlung unterscheiden
| Art der Aussage | Beispiel | Rolle |
|---|---|---|
| Beobachtung | „Verspätete Lieferungen waren an verregneten Abenden häufiger.“ | Beschreibt einen beobachteten Zusammenhang |
| Interpretation | „Regen verlangsamt Lieferkräfte.“ | Schlägt eine kausale Erklärung vor |
| Handlungsempfehlung | „Plane an verregneten Abenden zusätzliche Lieferkräfte ein.“ | Schlägt eine auf dieser Erklärung beruhende Maßnahme vor |
Eine Handlungsempfehlung hängt von Annahmen über die Ursache und die Wirkung der Maßnahme ab. Halte diese Annahmen sichtbar und nenne die nötigen weiteren Belege. Eine Beobachtung kann nützlich sein, auch wenn ihre Erklärung eine Hypothese bleibt.
Mit einem Diagramm einen Befund erklären
Wähle die wenigen Diagramme aus, die die Fragen beantworten, sowie wichtige Überraschungen. Bewahre andere nützliche explorative Ansichten in einem Anhang oder Notebook auf. Gib einem Berichtsdiagramm einen Titel, der seinen Befund nennt, etwa „Verspätete Lieferungen sind an Freitag- und Samstagabenden am häufigsten“. Beschrifte Achsen mit Einheiten, sortiere Kategorien, wo es passt, und halte die Farbe jeder Teilgruppe über Diagramme hinweg einheitlich. Nenne Datenquelle und Zeitraum.
Berichte auch widersprechende Belege. Wenn ein zusammengefasstes Diagramm eine Verbesserung nahelegt, sich aber eine große Teilgruppe verschlechtert hat, ist das Ergebnis dieser Teilgruppe für die Interpretation wichtig. Nur Diagramme auszuwählen, die zu einer erwarteten Darstellung passen, würde Informationen verbergen, die Leser benötigen.
Einen knappen Bericht strukturieren
Eine klare Reihenfolge ist: Frage und Kontext; Datenquelle, Zeitraum, Zeilenanzahl und Bedeutung der Zeilen; Qualitätsprobleme und Bereinigungsentscheidungen; drei bis fünf zentrale Befunde mit Belegen; Einschränkungen; nächste Schritte. Jeder Befund sollte eine Frage beantworten oder eine wichtige Überraschung erklären.
Einschränkungen benennen, was die Daten abdecken, was ausgeschlossen wurde und warum, wie viel fehlt und dass die Muster Zusammenhänge beschreiben. Lege zum Beispiel offen, dass 37 stornierte Bestellungen aus einem Vergleich abgeschlossener Lieferungen entfernt wurden. Nächste Schritte können sein, eine Hypothese an neuen Daten zu prüfen, eine fehlende Variable zu erheben, ein Problem im Quellsystem zu beheben oder eine Frage für eine spätere Modellierung zu untersuchen.
Wichtige Erkenntnisse
- Gib für jeden Befund Beleg, Größenordnung, Grundgesamtheit und Zeitraum an.
- Trenne Beobachtungen, Interpretationen und Handlungsempfehlungen.
- Wähle und beschrifte Diagramme anhand der Befunde und halte widersprechende Belege sichtbar.
- Berichte mit sinnvoller Genauigkeit und nenne Bezugsgrößen, fehlende Werte und Ausschlüsse.
- Schließe mit konkreten nächsten Fragen oder Maßnahmen, die die Analyse stützt.
6.2 Ergebnisse bereitstellen, die andere erneut berechnen können
Eine bereitgestellte Analyse braucht sowohl lesbare Ergebnisse als auch einen Zugang zu Code und Eingaben, die sie erzeugt haben. Bereite ein endgültiges Notebook vor, dessen Reihenfolge, Ausgaben und ergänzende Dateien übereinstimmen.
Das endgültige Notebook bereinigen und ausführen
Entferne ungenutzte und doppelte Zellen, halte Abhängigkeiten in Ausführungsreihenfolge und ergänze zwischen Codeabschnitten Markdown, das Entscheidungen erklärt. Bewahre die stärker experimentelle Arbeit separat auf, wenn sie nützlich ist. Starte vor jedem Export den Kernel neu und führe alle Zellen aus. Untersuche sowohl Fehler als auch geänderte Ausgaben: Ein erfolgreicher Durchlauf kann dennoch zeigen, dass eine früher geschriebene Zahl veraltet ist.
Erzeuge berichtete Zahlen aus dem Code:
s = df["minutes"]
print(f"Median delivery time: {s.median():.0f} minutes")
Eine von Hand in einen Absatz eingetragene Zahl kann nach der Aktualisierung der Daten unverändert bleiben. Halte die angezeigte Aussage mit der Berechnung verbunden, damit der nächste Durchlauf sie aktualisiert.
Berichte, Abbildungen und Tabellen exportieren
Ein HTML-Export lässt sich ohne Python-Umgebung in einem Browser lesen:
jupyter nbconvert --to html --execute report.ipynb
Die Option zum Ausführen startet das Notebook vor der Umwandlung. Prüfe sowohl den entstandenen Bericht als auch das Notebook. Veröffentlichungswerkzeuge wie Quarto bieten einen weiteren Weg zu einem lesbaren Bericht.
Speichere Abbildungen und Tabellen aus dem Code, damit erneute Durchläufe die Dateien aktualisieren:
fig.savefig("figures/late_by_hour.png", dpi=200,
bbox_inches="tight")
summary.to_csv("output/city_summary.csv")
Erstelle die Zielordner bei der Einrichtung des Projekts. Ein Screenshot bewahrt die Ausgabe eines Augenblicks, hat aber keine automatische Verbindung zur nächsten Berechnung.
Datenprovenienz und Ausführungsanleitung ergänzen
Halte Datenquelle, Extraktionsdatum, Eingabedatei oder Version, Zeilenanzahl, Filter, Softwareversionen und Startwerte für Zufallszahlen fest. Diese Angaben erklären, welche Eingaben und Einstellungen einen Befund erzeugt haben. Sammle veränderliche Einstellungen nahe dem Anfang des Notebooks, damit eine monatliche Aktualisierung einen eindeutigen Einstiegspunkt hat.
Ein Projekt kann Rohdaten und verarbeitete Daten, Notebooks, Abbildungen und exportierte Tabellen trennen. Ergänze eine README mit Ziel, erwartetem Arbeitsverzeichnis und Ausführungsschritten sowie eine Paketumgebungsdatei. Halte Notebook, Anleitung und Umgebung zusammen, wenn du die erneut ausführbare Analyse bereitstellst. Wenn der Zugriff auf Eingaben kontrolliert werden muss, gib an, wie berechtigte Leser die passende Datenversion erhalten.
Prüfen, was die Ausgaben offenlegen
Untersuche vor der Weitergabe jede Ausgabezelle und jeden Export auf personenbezogene Daten. Vorschautabellen können Namen, E-Mail-Adressen und genaue Standorte offenlegen, selbst wenn das endgültige Diagramm aggregiert ist. Entferne, maskiere oder aggregiere identifizierende Spalten je nach Bedarf und befolge die für den Datensatz geltenden Vereinbarungen und Datenschutzregeln.
Wichtige Erkenntnisse
- Bereinige das endgültige Notebook und prüfe es durch einen Neustart mit anschließendem vollständigem Durchlauf.
- Berechne berichtete Zahlen im Code und speichere Abbildungen und Tabellen programmgesteuert.
- Führe das Notebook vor dem Export aus, damit der Bericht aktuelle Ausgaben enthält.
- Ergänze Datenprovenienz, Einstellungen, Umgebung und eine klare Ausführungsanleitung.
- Untersuche alle weitergegebenen Ausgaben auf personenbezogene Daten.
Explorative Datenanalyse mit Python: Beispiele
1Aus einer allgemeinen Anfrage eine erneut ausführbare Analyse machen
12 Schritte
- 1EinführungDer Analyse einen klaren Ausgangspunkt geben
Ein Team fragt: „Wie zuverlässig ist unser Reparaturservice?“ Du hast eine Tabelle mit Reparaturaufgaben und ein Notebook. Entscheide vor dem Erstellen eines Diagramms, was das Team wissen muss und was dir jede Zeile sagen kann. Du wirst die Anfrage in konkrete Fragen umwandeln, den Detaillierungsgrad bestimmen und die Arbeit so ordnen, dass eine neue Notebook-Sitzung sie wiederholen kann.
- 2ErklärungFragen stellen, die einen Vergleich nahelegen
Beginne mit der Entscheidung: Vielleicht muss das Team erkennen, wo lange Wartezeiten auftreten. Nützliche Fragen sind: „Wie lang ist die typische Reparaturzeit?“, „Welcher Anteil überschreitet unseren Serviceschwellenwert?“ und „Wie unterscheiden sich die Zeiten nach Gerätemodell?“ Jede Frage benennt eine Größe oder einen Vergleich. Halte Platz für neue Fragen frei, wenn ein Diagramm eine unerwartete Gruppe oder ein Qualitätsproblem zeigt.
- 3BeispielKlären, wofür die Zeilen stehen
Die Datei enthält 900 Aufgabenzeilen und 300 unterschiedliche Auftrags-IDs. Ein Auftrag kann mehrere Aufgaben umfassen. Das Verhältnis beträgt durchschnittlich 3 Aufgaben pro Auftrag, aber einzelne Aufträge können unterschiedlich viele Aufgaben haben. Das Zählen von Zeilen beantwortet eine Frage zu Aufgaben. Eine Frage zur Anzahl der Aufträge benötigt unterschiedliche Auftrags-IDs oder eine Tabelle auf Auftragsebene mit einer begründeten Regel zum Zusammenfassen der Aufgabeninformationen.
- 4HerausforderungDie zur Frage passende Zählung wählen
Das Team möchte den Anteil verspäteter Aufträge wissen. Die Tabelle enthält mehrere Aufgabenzeilen pro Auftrag. Würde das arithmetische Mittel einer Verspätungskennzeichnung auf Aufgabenebene diese Frage beantworten?
---reveal---
Es ergibt den Anteil verspäteter Aufgaben und gewichtet Aufträge mit mehreren Aufgaben stärker. Definiere zuerst, wann ein Auftrag als verspätet gilt, fasse Aufgabeninformationen auf Auftragsebene zusammen und dividiere die verspäteten Aufträge durch die berücksichtigungsfähigen Aufträge.
- 5VerbindungBei einem überraschenden Muster zu Qualitätsprüfungen zurückkehren
Exploration verläuft in einem Kreislauf: Fragen, Laden, Profilerstellung, Verteilungen, Zusammenhänge, Vergleiche und Befunde. Angenommen, ein Gerätemodell scheint 1.000-mal länger zu brauchen. Kehre zu den Spaltendefinitionen und Quelleinheiten zurück, bevor du einen Leistungsunterschied erklärst. Die Überraschung hat eine Qualitätsfrage erzeugt, die den nächsten Analyseschritt verändern kann.
- 6KernaussageEntdeckung und geplante Prüfung unterscheiden
Ein Muster, das nach der Suche in vielen Diagrammen gefunden wird, ist ein Anhaltspunkt für weitere Arbeit. Die konfirmatorische Analyse prüft eine vorab formulierte Hypothese, idealerweise an neuen Beobachtungen. Prüfe auch, wer vertreten ist: Bewertungen von Kunden, die freiwillig Rückmeldung gegeben haben, beschreiben diese Antwortenden. Der Erhebungsprozess bestimmt, welche Belege nötig sind, um den Befund auf alle bedienten Kunden zu übertragen.
- 7ErklärungSehen, was sich der Kernel merkt
Ein Notebook-Kernel behält Variablen zwischen Zellenausführungen. Wenn du eine gefilterte Tabelle erstellst, ihre definierende Zelle löschst und sie weiter grafisch darstellst, kann die aktuelle Sitzung weiterhin funktionieren. Ein neuer Kernel hat keine Möglichkeit, diese Tabelle erneut zu erstellen. Ausführungsnummern zeigen die Ausführungsreihenfolge, aber die entscheidende Prüfung ist ein Neustart mit anschließendem Ausführen jeder Zelle von oben bis unten.
- 8BeispielAbhängigkeiten sichtbar machen
Ordne das Notebook nach Ziel und Fragen, Imports, Einstellungen und anschließend Analyseabschnitten. Fasse veränderliche Pfade, Schwellenwerte und Startwerte in der Einstellungszelle zusammen. Verwende einen relativen Projektpfad wie
Path("data/raw/repairs.csv")und dokumentiere das Arbeitsverzeichnis. Lass Rohdateien unverändert und formuliere Korrekturen im Code, damit derselbe Ablauf für den nächsten Datensatz gilt. - 9TippVeränderliche Teile zwischen Durchläufen steuern
Dokumentiere Paketversionen und speichere eine Umgebungsdatei. Lege für jeden Zufallsschritt den Startwert fest; bei einer Tabelle mit mindestens 200 Zeilen wiederholt
df.sample(n=200, random_state=17)die Stichprobe, wenn Eingaben und Software übereinstimmen. Ein fester Startwert kann eine überschriebene Eingabedatei nicht wiederherstellen. Dokumentiere deshalb auch die Datenversion und Einzelheiten zur Extraktion. - 10HerausforderungEine unsichtbare Abhängigkeit finden
Eine Zelle mit einer Zusammenfassung läuft jetzt erfolgreich. Nach einem Neustart und der Ausführung aller Zellen schlägt sie fehl, weil
job_totalsnicht definiert ist. Was sagt dir das und was solltest du korrigieren?---reveal---
Der alte Kernel hielt eine Variable, die die sichtbare Abfolge nicht erstellt. Stelle den definierenden Code wieder her oder verschiebe ihn vor die Zusammenfassung und führe dann das gesamte Notebook erneut aus. Die alte Ausgabe zu speichern, würde das Ergebnis erhalten, ohne seine Abhängigkeit zu korrigieren.
- 11HerausforderungEine neue Datei prüfen, bevor dieselbe Frage beantwortet wird
Die Datei des nächsten Monats trifft ein. Deine Frage zählt Aufträge und die vorbereitete Tabelle auf Auftragsebene soll eindeutige Auftrags-IDs enthalten. Wie kannst du die Prüfung der Zeilenbedeutung mit einer zuverlässigen erneuten Ausführung verbinden?
---reveal---
Lade die neue Version über die Einstellungszelle und prüfe mit einer Zusicherung, dass der vorbereitete Auftragsschlüssel eindeutig ist. Starte neu und führe alle Zellen aus. Eine fehlgeschlagene Prüfung deckt ein Eingabe- oder Vorbereitungsproblem auf, bevor wiederholte Aufträge den berichteten Anteil verzerren.
- 12ZusammenfassungFrage und Berechnung zusammenführen
Du hast nun eine mit einer Entscheidung verknüpfte Frage, eine Zeilenbedeutung, die Zählungen bestimmt, und ein Notebook mit sichtbaren Abhängigkeiten. Nutze dieselben Vorgehensweisen für das erste Datenprofil: Dokumentiere die Eingabeversion, untersuche ihre Struktur und lass Prüfungen den Durchlauf stoppen, wenn Annahmen verletzt werden. Entscheide bei einem neuen Muster, ob es eine weitere Qualitätsprüfung, einen neuen Vergleich oder eine weiterzuverfolgende Hypothese braucht.
2Eine neue Datei untersuchen, bevor du ihren Mustern vertraust
13 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungEin belegtes Datenprofil erstellen
- 2ErklärungMehr als die ersten Zeilen untersuchen
- 3BeispielAnalysetypen anhand der Spaltenbedeutungen wählen
- 4HerausforderungPrüfen, was bei einer Umwandlung verloren ging
- 5ErklärungLücken vor der Wahl einer Behandlung quantifizieren
- 6BeispielSehen, wie das Entfernen die Zusammensetzung verändert
- 7KernaussageDie Aussage über fehlende Werte auf die Belege beschränken
- 8HerausforderungDublettenanzahlen interpretieren
- 9BeispielFehlende Werte von ungültigen erfassten Werten trennen
- 10ErklärungÜbereinstimmung zwischen Feldern prüfen
- 11HerausforderungEine begründete Maßnahme wählen
- 12HerausforderungDas Datenprofil mit dem nächsten Vergleich verbinden
- 13ZusammenfassungDas Datenprofil zusammen mit den Befunden aufbewahren
3Ein vollständiges Bild jeder Variablen erstellen
17 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungÜber einen einzelnen Durchschnitt hinausblicken
- 2ErklärungLage und Streuung vergleichen
- 3BeispielDie Lagemaße berechnen
- 4BeispielEin Streuungsmaß für die mittlere Hälfte ergänzen
- 5HerausforderungDie Wirkung eines Extremwerts vorhersagen
- 6ErklärungMit Klassen Struktur aufdecken
- 7BeispielAblesen, was ein kumulatives Diagramm beantwortet
- 8HerausforderungEinen auffälligen zweiten Gipfel untersuchen
- 9TippGlatte Kurven und Skalen sorgfältig lesen
- 10BeispielKategorien mit klarer Grundlage zusammenfassen
- 11Erklärung„Other“ von fehlenden Werten getrennt halten
- 12HerausforderungEine Intervallgrenze prüfen
- 13BeispielAusreißergrenzen berechnen
- 14KernaussageSehen, wie sich ein Wert selbst maskieren kann
- 15HerausforderungEine Behandlungsentscheidung anhand von Belegen treffen
- 16HerausforderungDas Bild zu einem Befund zusammenführen
- 17ZusammenfassungEine zur Frage passende Ansicht wählen
4Einen Zusammenhang lesen, bevor du ihn erklärst
15 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungDie Beobachtungen im Blick behalten
- 2BeispielMehr als die Richtung beschreiben
- 3TippDichte und Gruppen sichtbar machen
- 4HerausforderungEine Diagrammanpassung mit klarem Zweck wählen
- 5ErklärungDen Gegenstand der Pearson-Korrelation bestimmen
- 6BeispielDie Bedeutung an einem gekrümmten Beispiel prüfen
- 7ErklärungRänge für eine gleichgerichtete Anordnung nutzen
- 8HerausforderungEinen von einem Punkt dominierten Koeffizienten untersuchen
- 9TippDie Stichprobe hinter einer Heatmap-Zelle lesen
- 10ErklärungPlausible Richtungen und gemeinsame Ursachen auflisten
- 11BeispielInnerhalb von Schwierigkeitsgruppen vergleichen
- 12BeispielDie Umkehr im zusammengefassten Ergebnis erkennen
- 13HerausforderungDie Interpretationsebene wählen
- 14HerausforderungWeitere Belege für ein überraschendes Ergebnis auswählen
- 15ZusammenfassungDas Muster und die offene Frage berichten
5Gruppen auf derselben Grundlage vergleichen
15 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungDie Grundlage des Vergleichs sichtbar machen
- 2BeispielAusreichend Informationen zur Beurteilung eines arithmetischen Mittels einbeziehen
- 3BeispielEinen Unterschied mit seinem Bezugswert angeben
- 4HerausforderungEinen verborgenen Verteilungsunterschied suchen
- 5BeispielDie Richtung einer Prozentangabe wählen
- 6TippFehlende Ergebnisse aus der False-Gruppe heraushalten
- 7HerausforderungDen Unterschied von der relativen Änderung unterscheiden
- 8HerausforderungPrüfen, ob Anzahlen die Frage nach der Rate beantworten
- 9ErklärungDie zu vergleichende Periode aggregieren
- 10BeispielAktivität unter Berücksichtigung der Beobachtungszeit berechnen
- 11VerbindungEinen wiederkehrenden Zyklus von einer Veränderung trennen
- 12HerausforderungEine null vor der Interpretation untersuchen
- 13KernaussageKundenverläufe zeitlich aufeinander abstimmen
- 14HerausforderungRaten und Abdeckung gemeinsam prüfen
- 15ZusammenfassungJeden Vergleich mit seiner Bezugsgröße verbinden
6Exploration in einen überprüfbaren Bericht überführen
11 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungLesern helfen, das Ergebnis zu beurteilen
- 2BeispielEinen Befund mit Größenordnung und Geltungsbereich formulieren
- 3ErklärungDie Ebenen einer Aussage trennen
- 4TippDiagramme anhand der Frage auswählen
- 5HerausforderungEinen zu weit gefassten Befund korrigieren
- 6ErklärungDen endgültigen Durchlauf zur Grundlage des Berichts machen
- 7BeispielAktuelle Ergebnisse exportieren
- 8ErklärungFesthalten, was ein späterer Analyst abgleichen muss
- 9HerausforderungAlle Inhalte für die Weitergabe prüfen
- 10HerausforderungEine veränderte Ausgabe vor der Veröffentlichung klären
- 11ZusammenfassungBelege mit einem Weg zurück zu ihrer Berechnung bereitstellen
Explorative Datenanalyse mit Python: Übungsaufgaben
Set 1: Mit vertrauenswürdigen Daten beginnen10 Übungsfragen
Frage 1 von 10
len(df)?Antwort zeigenAntwort ausblenden
Frage 2 von 10
Antwort zeigenAntwort ausblenden
Frage 3 von 10
Antwort zeigenAntwort ausblenden
Frage 4 von 10
clean erfolgreich, aber nach einem Neustart mit vollständigem Durchlauf tritt in dieser Zelle ein NameError auf. Was solltest du zuerst untersuchen?Antwort zeigenAntwort ausblenden
Frage 5 von 10
pd.to_numeric(s, errors="coerce") untersucht werden?Antwort zeigenAntwort ausblenden
Frage 6 von 10
s.duplicated(keep=False).sum() zurück?Antwort zeigenAntwort ausblenden
keep=False schließt diese ersten Vorkommen ein, damit du die vollständigen Konflikte untersuchen kannst.Frage 7 von 10
Antwort zeigenAntwort ausblenden
between für sie False zurückgibt, und damit zwei verschiedene Qualitätsprobleme vermischen.Frage 8 von 10
Antwort zeigenAntwort ausblenden
Frage 9 von 10
Antwort zeigenAntwort ausblenden
Frage 10 von 10
Antwort zeigenAntwort ausblenden
Set 2: Verteilungen lesen und Extremwerte untersuchen10 Übungsfragen
Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.
Frage 1 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 2 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 3 von 10
value_counts(normalize=True)?Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 4 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 5 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 6 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 7 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 8 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 9 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 10 von 10
bins=[0, 20, 50, np.inf], include_lowest=True und dem standardmäßigen Intervallabschluss klassiert. Wohin fallen 0, 20 und 50?Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Set 3: Zusammenhänge und Gruppenunterschiede interpretieren10 Übungsfragen
Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.
Frage 1 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 2 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 3 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 4 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 5 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 6 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 7 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 8 von 10
min_periods=400. Kann ihre x–y-Zelle gültig den Wert 0,82 enthalten?Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 9 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 10 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Set 4: Bezugsgrößen und vergleichbare Perioden wählen10 Übungsfragen
Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.
Frage 1 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 2 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 3 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 4 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 5 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 6 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 7 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 8 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 9 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 10 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Set 5: Begründbare Befunde erstellen und bereitstellen10 Übungsfragen
Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.
Frage 1 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 2 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 3 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 4 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 5 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 6 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 7 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 8 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 9 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 10 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Hängst du bei deiner eigenen Aufgabe fest? Hausaufgabenhilfe
Schlüsselbegriffe
A
Arithmetisches Mittel
Ausreißer
B
Basisrate
Befund
Beobachtung
Beobachtungseinheit
Bezugswert
D
Datenprovenienz
Datenqualitätsprotokoll
Datentyp
Datenwörterbuch
Dublette
E
Einschränkung
Empirische Verteilungsfunktion
Explorative Datenanalyse
F
Fachliche Regel
Fehlende Werte
G
Gleitender Mittelwert
Gruppengröße
Gültigkeit
H
Handlungsempfehlung
Häufigkeitstabelle
Histogramm
Hypothese
I
Interpretation
Interquartilsabstand
J
Jitter
K
Kardinalität
Kategorie „Sonstiges“
Kendalls Tau
Kerndichteschätzung
Kernel
Klasse
Kohorte
Konfirmatorische Analyse
Konfundierende Variable
Konsistenz
Korrelationsmatrix
Kreuztabelle
L
Logarithmische Skala
M
MAR
Maskierungseffekt
MCAR
Median
Mediane absolute Abweichung
Mediatorvariable
MNAR
Modifizierter z-Wert
Monotoner Zusammenhang
N
Nominalskalierte Variable
Notebook
O
Ordinalskalierte Variable
Ö
Ökologischer Fehlschluss
P
Pairplot
Pearson-Korrelation
Perzentil
Programmgesteuerter Export
Prozentpunkt
R
Rate
Relative Differenz
Reproduzierbarkeit
Resampling
S
Saisonalität
Schiefe
Schlüssel
Sensitivitätsanalyse
Simpson-Paradoxon
Spaltennormierung
Spearman-Rangkorrelation
Standardabweichung
Startwert (Seed)
Statischer Bericht
Streudiagramm
T
Teilgruppe
Tukey-Ausreißergrenzen
Ü
Überlagerung von Datenpunkten (Overplotting)
U
Umgebungsdatei
Umgekehrte Kausalität
Unvollständige Periode
V
Verborgener Zustand
W
Wertehäufung (Heaping)
Winsorisierung
Z
z-Wert
Zeilennormierung
Zusicherung (Assertion)
Über diese Einheit
Erstelle deine eigenen Lernmaterialien
Mach aus deinen Notizen, Folien und Dokumenten Lernleitfäden, Übungsfragen, Karteikarten und 6 weitere Tools.