Maak een Robuust Data Validatie Framework
description
Helpt ervoor te zorgen dat je dataset schoon en betrouwbaar is vóór analyse of modellering door systematisch ongeldige data te identificeren en te beheren. Deze aanpak vermindert fouten later in het proces, verbetert de nauwkeurigheid van modellen en maakt transparante rapportage van datakwaliteit mogelijk, wat beter is dan ad-hoc of handmatige validatie.
prompt
Help me een robuust data validatie framework te creëren voor mijn dataset om ongeldige, inconsistente of onverwachte data te detecteren en af te handelen vóór verdere verwerking. Dataset Beschrijving: <voer een korte beschrijving van je dataset in> Validatieregels: <specificeer de typen validatie die je wilt toepassen, zoals bere ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een stappenplan om een robuust data validatie framework te creëren voor jouw dataset met aankooprecords en browsegedrag van klanten, inclusief implementaties in bijvoorbeeld Python met Pandas:
1. Data Inladen
import pandas as pd
df = pd.read_csv('jouw_dataset.csv') # Pas de bestandsnaam aan
2. Validatieregels Implementeren
a. Salaris moet positief zijn
positieve_salaris_mask = df['salaris'] > 0
b. Telefoonnummers volgens internationaal formaat
# Bijvoorbeeld: +<landcode><nummer>, zoals +31 612345678
import re
def is_internationaal_telefoonnummer(nummer):
patroon = r'^\+\d{1,3}\s?\d{4,14}$' # Pas regex aan op je formaat
return bool(re.match(patroon, str(nummer)))
telefoon_mask = df['telefoon'].apply(is_internationaal_telefoonnummer)
c. Data met ongeldige datums verwijderen
# Bijvoorbeeld: datums in een kolom 'aankoopdatum'
ongeldige_datum_mask = pd.to_datetime(df['aankoopdatum'], errors='coerce').isna()
3. Ongeldige Data Detecteren en Afhandelen
a. Records met ongeldige datums verwijderen
df_valid = df[~ongeldige_datum_mask]
b. Markeer inconsistente invoer
# Voeg kolommen toe die aangeven of een record geldig is
df['salaris_valid'] = salaris_mask
df['telefoon_valid'] = telefoon_mask
df['aankoopdatum_valid'] = ~ongeldige_datum_mask
c. Rapportage van ongeldige invoeren
aantal_ongeldige_salaris = (~salaris_mask).sum()
aantal_ongeldige_telefoon = (~telefoon_mask).sum()
aantal_ongeldige_datum = ongeldige_datum_mask.sum()
print(f"Ongeldige salarissen: {aantal_ongeldige_salaris}")
print(f"Ongeldige telefoonnummers: {aantal_ongeldige_telefoon}")
print(f"Ongeldige datums: {aantal_ongeldige_datum}")
4. Samenvatting en Terugkoppeling
- Log alle ongeldige records voor review.
- Verwijder of corrigeer ongeldige data afhankelijk van je beleid.
- Implementeer automatische validatie bij binnenkomst van nieuwe data.
Voor een meer geavanceerd framework kun je gebruik maken van:
- Validatiebibliotheken zoals pydantic of cerberus.
- Data pipeline tools zoals Apache Airflow of Prefect voor geautomatiseerde workflows.
- Logging en reporting tools voor beter inzicht.
Door deze stappen te volgen, zorg je voor een consistente en betrouwbare dataset voordat je verder gaat met analyse of verwerking.
provider: deepseek
model: deepseek-chat
Hier is een robuust data validatieframework voor uw dataset in Python met pandas:
```python
import pandas as pd
import re
import numpy as np
class DataValidator:
def __init__(self):
self.validation_errors = {}
def valideer_salaris(self, df, kolom_naam='salaris'):
"""Valideert dat salaris positief is"""
fouten_mask = df[kolom_naam] <= 0
fouten_count = fouten_mask.sum()
if fouten_count > 0:
self.validation_errors[kolom_naam] = {
'type': 'salaris_niet_positief',
'aantal': fouten_count,
'indices': df[fouten_mask].index.tolist()
}
return ~fouten_mask
def valideer_telefoonnummer(self, df, kolom_naam='telefoon'):
"""Valideert internationaal telefoonnummer formaat"""
# Regex voor internationaal formaat (+31 6 12345678 of +31612345678)
telefoon_regex = r'^\+[1-9]\d{0,3}\s?\d{1,14}(\s?\d{1,13})?$'
fouten_mask = ~df[kolom_naam].astype(str).str.match(telefoon_regex, na=False)
fouten_count = fouten_mask.sum()
if fouten_count > 0:
self.validation_errors[kolom_naam] = {
'type': 'ongeldig_telefoonnummer',
'aantal': fouten_count,
'indices': df[fouten_mask].index.tolist()
}
return ~fouten_mask
def valideer_datum(self, df, kolom_naam='datum'):
"""Valideert datumformaat en verwijdert ongeldige datums"""
# Converteer naar datetime en identificeer ongeldige waarden
df[kolom_naam] = pd.to_datetime(df[kolom_naam], errors='coerce')
fouten_mask = df[kolom_naam].isna()
fouten_count = fouten_mask.sum()
if fouten_count > 0:
self.validation_errors[kolom_naam] = {
'type': 'ongeldige_datum',
'aantal': fouten_count,
'indices': df[fouten_mask].index.tolist()
}
return ~fouten_mask
def markeer_inconsistente_invoer(self, df, kolommen):
"""Markeert rijen met inconsistente invoer"""
# Voorbeeld: markeer rijen waar bepaalde combinaties niet kloppen
inconsistent_mask = df.duplicated(subset=kolommen, keep=False)
df['inconsistent'] = inconsistent_mask
return df
def genereer_rapport(self):
"""Genereert validatierapport"""
rapport = {
'totaal_fouten': sum(error['aantal'] for error in self.validation_errors.values()),
'fouten_per_kolom': {kolom: info['aantal'] for kolom, info in self.validation_errors.items()},
'details': self.validation_errors
}
print("=== VALIDATIERAPPORT ===")
print(f"Totaal aantal fouten: {rapport['totaal_fouten']}")
print("\nFouten per kolom:")
for kolom, aantal in rapport['fouten_per_kolom'].items():
print(f" {kolom}: {aantal} fouten")
return rapport
# Gebruiksvoorbeeld
def main():
# Laad dataset
df = pd.read_csv('jouw_dataset.csv')
# Initialiseer validator
validator = DataValidator()
# Voer validaties uit
geldige_salaris = validator.valideer_salaris(df)
geldige_telefoon = validator.valideer_telefoonnummer(df)
geldige_datum = validator.valideer_datum(df)
# Verwijder records met ongeldige datums
df_clean = df[geldige_datum].copy()
# Markeer inconsistente invoer
df_clean = validator.markeer_inconsistente_invoer(df_clean, ['klant_id', 'transactie_id'])
# Genereer rapport
rapport = validator.genereer_rapport()
# Bewaar resultaten
df_clean.to_csv('gevalideerde_dataset.csv', index=False)
return df_clean, rapport
if __name__ == "__main__":
schone_data, validatie_rapport = main()
```
**Aanvullende aanbevelingen:**
1. **Uitbreidingsmogelijkheden**:
```python
def valideer_email(self, df, kolom_naam='email'):
email_regex = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
# Vergelijkbare implementatie als telefoonnummer
```
2. **Configuratiebestand**:
Maak een JSON/YAML-bestand voor validatieregels:
```json
{
"salaris": {"min": 0, "max": 1000000},
"telefoon": {"formaat": "internationaal"},
"datum": {"formaat": "YYYY-MM-DD"}
}
```
3. **Logging**:
Voeg gedetailleerde logging toe voor audit trails:
```python
import logging
logging.basicConfig(filename='validatie.log', level=logging.INFO)
```
Dit framework biedt een schaalbare oplossing met duidelijke rapportage en flexibele afhandeling van ongeldige data.