Erstellen Sie eine robuste Datenreinigung und Validierungspipeline in weniger als 50 Python -ZeilenErstellen Sie eine robuste Datenreinigung und Validierungspipeline in weniger als 50 Python -Zeilen
Bild von Autor | Ideogramm

Daten sind chaotisch. Wenn Sie additionally Informationen von APIs, analysieren, reale Datensätze analysieren und dergleichen, werden Sie zwangsläufig auf Duplikate, fehlende Werte und ungültige Einträge stoßen. Anstatt denselben Reinigungscode wiederholt zu schreiben, spart eine intestine gestaltete Pipeline Zeit und sorgt für die Konsistenz in Ihren Datenwissenschaftsprojekten.

In diesem Artikel werden wir eine wiederverwendbare Datenreinigung und Validierungspipeline für Daten erstellen, die häufig auf die Datenqualitätsprobleme geht und gleichzeitig ein detailliertes Suggestions darüber gibt, was festgelegt wurde. Am Ende haben Sie ein Software, das Datensätze reinigen und in nur wenigen Codezeilen gegen Geschäftsregeln validieren kann.

🔗 Hyperlink zum Code auf GitHub

Warum Datenreinigungspipelines?

Denken Sie an Datenpipelines wie Montage -Linien in der Herstellung. Jeder Schritt führt eine bestimmte Funktion aus, und die Ausgabe aus einem Schritt wird zum Eingang für den nächsten. Dieser Ansatz macht Ihren Code in verschiedenen Projekten aufrechterhalten, überprüfbarer und wiederverwendbarer.

Datenverrückungs-Validation-PipelineDatenverrückungs-Validation-Pipeline
Eine einfache Datenreinigungspipeline
Bild von Autor | Diagrams.internet (Draw.io)

Unsere Pipeline übernimmt drei Kernverantwortung:

  • Reinigung: Entfernen Sie Duplikate und verarbeiten Sie fehlende Werte (Verwenden Sie dies als Ausgangspunkt. Sie können nach Bedarf so viele Reinigungsschritte hinzufügen.)
  • Validierung: Stellen Sie sicher, dass Daten die Geschäftsregeln und -beschränkungen entsprechen
  • Berichterstattung: Verfolgen Sie, welche Änderungen während der Verarbeitung vorgenommen wurden

Einrichtung der Entwicklungsumgebung

Bitte stellen Sie sicher, dass Sie eine aktuelle Model von Python verwenden. Wenn Sie lokal verwenden, erstellen Sie eine virtuelle Umgebung und installieren Sie die erforderlichen Pakete:

Sie können auch Google Colab oder ähnliche Pocket book -Umgebungen verwenden, wenn Sie es vorziehen.

Definieren des Validierungsschemas

Bevor wir Daten validieren können, müssen wir definieren, wie „gültig“ aussieht. Wir werden Pydantic verwenden, eine Python -Bibliothek, die Typ -Hinweise verwendet, um Datentypen zu validieren.

class DataValidator(BaseModel):
    title: str
    age: Elective(int) = None
    e-mail: Elective(str) = None
    wage: Elective(float) = None
    
    @field_validator('age')
    @classmethod
    def validate_age(cls, v):
        if v is just not None and (v < 0 or v > 100):
            increase ValueError('Age have to be between 0 and 100')
        return v
    
    @field_validator('e-mail')
    @classmethod
    def validate_email(cls, v):
        if v and '@' not in v:
            increase ValueError('Invalid e-mail format')
        return v

Dieses Schema modelliert die erwarteten Daten mithilfe der Syntax von Pydantic. Um die zu verwenden @field_validator Dekorateur, du brauchst das @classmethod Dekorateur. Die Validierungslogik stellt sicher, dass das Alter innerhalb angemessener Grenzen fällt, und E -Mails enthalten das Image „@“.

Aufbau der Pipeline -Klasse

Unsere Hauptpipeline -Klasse umfasst alle Reinigungs- und Validierungslogik:

class DataPipeline:
    def __init__(self):
        self.cleaning_stats = {'duplicates_removed': 0, 'nulls_handled': 0, 'validation_errors': 0}

Der Konstruktor initialisiert ein Statistikwörterbuch, um Änderungen zu verfolgen, die während der Verarbeitung vorgenommen wurden. Dies trägt dazu bei, die Datenqualität genauer zu betrachten und die Reinigungsschritte im Laufe der Zeit zu verfolgen.

Schreiben der Datenreinigungslogik

Lassen Sie uns a hinzufügen clean_data Methode zur Behandlung gemeinsamer Datenqualitätsprobleme wie fehlenden Werten und doppelten Datensätzen:

def clean_data(self, df: pd.DataFrame) -> pd.DataFrame:
    initial_rows = len(df)
    
    # Take away duplicates
    df = df.drop_duplicates()
    self.cleaning_stats('duplicates_removed') = initial_rows - len(df)
    
    # Deal with lacking values
    numeric_columns = df.select_dtypes(embrace=(np.quantity)).columns
    df(numeric_columns) = df(numeric_columns).fillna(df(numeric_columns).median())
    
    string_columns = df.select_dtypes(embrace=('object')).columns
    df(string_columns) = df(string_columns).fillna('Unknown')

Dieser Ansatz ist clever bei der Behandlung verschiedener Datentypen. Numerische fehlende Werte werden mit dem Median gefüllt (robuster als Mittel gegen Ausreißer), während Textspalten einen Platzhalterwert erhalten. Die doppelte Entfernung erfolgt zunächst, um zu vermeiden, dass unsere medianen Berechnungen verzerrt werden.

Hinzufügen von Validierung mit Fehlerverfolgung

Der Validierungsschritt verarbeitet jede Zeile einzeln und sammelt sowohl gültige als auch detaillierte Fehlerinformationen:

def validate_data(self, df: pd.DataFrame) -> pd.DataFrame:
    valid_rows = ()
    errors = ()
    
    for idx, row in df.iterrows():
        strive:
            validated_row = DataValidator(**row.to_dict())
            valid_rows.append(validated_row.model_dump())
        besides ValidationError as e:
            errors.append({'row': idx, 'errors': str(e)})
    
    self.cleaning_stats('validation_errors') = len(errors)
    return pd.DataFrame(valid_rows), errors

Dieser Zeilen-für-Reihen-Ansatz stellt sicher, dass ein schlechter Rekord die gesamte Pipeline nicht zum Absturz bringt. Gültige Zeilen werden durch den Prozess fortgesetzt, während Fehler zur Überprüfung erfasst werden. Dies ist wichtig in Produktionsumgebungen, in denen Sie verarbeiten müssen, was Sie während der Markierung von Problemen können.

Orchestrieren die Pipeline

Der course of Methode verbindet alles zusammen:

def course of(self, df: pd.DataFrame) -> Dict(str, Any):
    cleaned_df = self.clean_data(df.copy())
    validated_df, validation_errors = self.validate_data(cleaned_df)
    
    return {
        'cleaned_data': validated_df,
        'validation_errors': validation_errors,
        'stats': self.cleaning_stats
    }

Der Rückgabewert ist ein umfassender Bericht, der die gereinigten Daten, alle Validierungsfehler und Verarbeitungsstatistiken enthält.

Alles zusammenstellen

So verwenden Sie die Pipeline in der Praxis:

# Create pattern messy information
sample_data = pd.DataFrame({
    'title': ('Tara Jamison', 'Jane Smith', 'Lucy Lee', None, 'Clara Clark','Jane Smith'),
    'age': (25, -5, 25, 35, 150,-5),
    'e-mail': ('taraj@e-mail.com', 'invalid-email', 'lucy@e-mail.com', 'jane@e-mail.com', 'clara@e-mail.com','invalid-email'),
    'wage': (50000, 60000, 50000, None, 75000,60000)
})

pipeline = DataPipeline()
outcome = pipeline.course of(sample_data)

Die Pipeline entfernt automatisch den doppelten Datensatz, verarbeitet den fehlenden Namen, indem er ihn mit „Unbekannter“ füllt, das fehlende Gehalt mit dem Medianwert füllt und Validierungsfehler für das damaging Alter und ungültige E -Mails fällt.

🔗 Sie können finden Das vollständige Skript auf GitHub.

Erweiterung der Pipeline

Diese Pipeline dient als Grundlage, auf die Sie aufbauen können. Betrachten Sie diese Verbesserungen für Ihre spezifischen Bedürfnisse:

Benutzerdefinierte Reinigungsregeln: Fügen Sie Methoden für die domänenspezifische Reinigung wie die Standardisierung von Telefonnummern oder Adressen hinzu.

Konfigurierbare Validierung: Machen Sie das pydantische Schema konfigurierbar, sodass dieselbe Pipeline unterschiedliche Datentypen verarbeiten kann.

Erweiterte Fehlerbehandlung: Implementieren Sie die Wiederholungslogik für vorübergehende Fehler oder automatische Korrektur für häufige Fehler.

Leistungsoptimierung: Für große Datensätze sollten Sie vektorisierte Operationen oder parallele Verarbeitung verwenden.

Einpacken

Bei Datenpipelines geht es nicht nur darum, einzelne Datensätze zu reinigen. Es geht darum, zuverlässige, wartbare Systeme aufzubauen.

Dieser Pipeline -Ansatz sorgt für die Konsistenz in Ihren Projekten und erleichtert die Anpassung der Geschäftsregeln, wenn sich die Anforderungen ändern. Beginnen Sie mit dieser grundlegenden Pipeline und passen Sie sie dann für Ihre spezifischen Anforderungen an.

Der Schlüssel ist ein zuverlässiges, wiederverwendbares System, das die alltäglichen Aufgaben erledigt, sodass Sie sich darauf konzentrieren können, Erkenntnisse aus sauberen Daten zu extrahieren. Glückliche Datenreinigung!

Bala Priya c ist ein Entwickler und technischer Schriftsteller aus Indien. Sie arbeitet gern an der Schnittstelle zwischen Mathematik, Programmierung, Datenwissenschaft und Inhaltserstellung. Ihre Interessensgebiete und Fachgebiete umfassen DevOps, Knowledge Science und natürliche Sprachverarbeitung. Sie liest gerne, schreibt, codieren und Kaffee! Derzeit arbeitet sie daran, ihr Wissen mit der Entwicklergemeinschaft zu lernen und zu teilen, indem sie Tutorials, Anleitungen, Meinungsstücke und vieles mehr autorisiert. Bala erstellt auch ansprechende Ressourcenübersichten und Codierungs -Tutorials.



Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert