Help me met het automatiseren van data transformatieworkflows met Pandas
description
Deze prompt helpt gebruikers repetitieve data voorbereidingsstappen te automatiseren, wat handmatige inspanning en fouten vermindert. Het maakt het mogelijk efficiënte, herbruikbare scripts te bouwen die passen in bredere datapijplijnen, wat productiviteit en dataconsistentie verbetert vergeleken met handmatige of ad-hoc verwerking.
prompt
Ik heb hulp nodig bij het automatiseren van een data transformatieworkflow in Pandas. Mijn invoergegevens zien er als volgt uit: <voer een beschrijving of voorbeeld van je invoer DataFrame in>. Ik wil een reeks transformaties toepassen zoals filteren, ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een overzichtelijk en herbruikbaar Python-script dat je kunt gebruiken om je data-transformatieworkflow in Pandas te automatiseren. Het script bevat functies voor filtering, groeperen, aggregatie en het maken van nieuwe kolommen op basis van voorwaarden. Daarnaast geef ik tips over het plannen en integreren van deze workflow in je datapijplijn.
**Python-script:**
```python
import pandas as pd
def laad_data(bestandspad):
"""Laad de data in een DataFrame."""
df = pd.read_csv(bestandspad, parse_dates=['datum'])
return df
def filter_data(df, regio=None, product=None, start_datum=None, eind_datum=None):
"""Filter de data op regio, product en datumbereik."""
if regio:
df = df[df['regio'] == regio]
if product:
df = df[df['product'] == product]
if start_datum:
df = df[df['datum'] >= start_datum]
if eind_datum:
df = df[df['datum'] <= eind_datum]
return df
def groepeer_en_aggereer(df, groepeer_columns, aggregaties):
"""
Groepeer en aggregeer.
:param df: DataFrame
:param groepeer_columns: lijst van kolommen om op te groeperen
:param aggregaties: dict van kolom: aggregatiefunctie
:return: geaggregeerd DataFrame
"""
gegroepeerd_df = df.groupby(groepeer_columns).agg(aggregaties).reset_index()
return gegroepeerd_df
def voeg_nieuwe_kolommen_toe(df):
"""
Voeg nieuwe kolommen toe op basis van voorwaarden.
Bijvoorbeeld, markeer sales boven een bepaalde drempel.
"""
# Voorbeeld: markeer grote sales
drempel = 1000
df['grote_sales'] = df['sales'] > drempel
return df
def transformatie_workflow(bestandspad):
"""
Voer de volledige workflow uit.
"""
df = laad_data(bestandspad)
df = filter_data(df, regio='Noord', start_datum='2023-01-01', eind_datum='2023-12-31')
df = voeg_nieuwe_kolommen_toe(df)
gegroepeerd_df = groepeer_en_aggereer(
df,
groepeer_columns=['regio', 'product'],
aggregaties={'sales': 'sum'}
)
return gegroepeerd_df
# Voorbeeld van uitvoering
if __name__ == "__main__":
resultaat = transformatie_workflow('pad/naar/je/data.csv')
print(resultaat)
```
---
### Hoe plan je deze workflow?
1. **Automatisering via scheduling:**
- Gebruik tools zoals `cron` (Linux), Windows Taakplanner, of schedulers zoals Apache Airflow of Prefect om je script op vaste tijden te laten draaien.
2. **Integratie in datapijplijn:**
- Verpak je workflow in functies zoals hierboven.
- Laat je script automatisch data inladen, verwerken en exporteren (bijvoorbeeld naar CSV, database, etc.).
- Voeg logging en foutafhandeling toe voor betrouwbaarheid.
3. **Gebruik van configuratiebestanden:**
- Maak een YAML of JSON bestand waarin je filter- en aggregatieparameters definieert, zodat je dezelfde code voor verschillende scenario's kunt hergebruiken zonder aanpassingen in de code zelf.
4. **Versiebeheer en automatiseringstools:**
- Beheer je scripts in Git.
- Gebruik CI/CD-pijplijnen indien nodig voor automatische updates en testing.
---
Wil je dat ik het script verder aanpas met specifieke voorbeelden of dat je hulp nodig hebt bij het opzetten van de scheduler?
provider: deepseek
model: deepseek-chat
Absoluut! Hier is een gestructureerd, herbruikbaar Python-script dat de gewenste transformaties uitvoert, gevolgd door uitleg over integratie in een datapijplijn.
### Python Script: Data Transformatie Workflow
```python
import pandas as pd
from datetime import datetime
def transformeer_data(df, start_datum=None, eind_datum=None, doel_omzet=10000):
"""
Voert een reeks data transformaties uit op een Pandas DataFrame.
Parameters:
df (pd.DataFrame): Input DataFrame met kolommen: regio, sales, datum, product
start_datum (str): Optionele startdatum voor filtering (format: 'YYYY-MM-DD')
eind_datum (str): Optionele einddatum voor filtering (format: 'YYYY-MM-DD')
doel_omzet (int): Drempelwaarde voor hoog-omzet producten
Returns:
pd.DataFrame: Getransformeerde DataFrame
"""
# Maak een kopie om het origineel niet te wijzigen
df_clean = df.copy()
# 1. DATUMFILTER (OPTIONEEL)
if start_datum and eind_datum:
mask = (df_clean['datum'] >= start_datum) & (df_clean['datum'] <= eind_datum)
df_clean = df_clean.loc[mask]
# 2. BASISFILTERS
# Verwijder rijen met ontbrekende waarden in kritieke kolommen
df_clean = df_clean.dropna(subset=['regio', 'sales', 'datum', 'product'])
# Filter op positieve sales waarden
df_clean = df_clean[df_clean['sales'] > 0]
# 3. NIEUWE KOLOMMEN MAKEN
# Maand en kwartaal extractie
df_clean['maand'] = df_clean['datum'].dt.month
df_clean['kwartaal'] = df_clean['datum'].dt.quarter
df_clean['jaar'] = df_clean['datum'].dt.year
# Voorwaardelijke kolom: hoog-omzet product
df_clean['hoog_omzet_product'] = df_clean['sales'] > doel_omzet
# 4. GROEPERING EN AGGREGATIE
# Groepeer per regio en product, aggregeer sales
grouped = df_clean.groupby(['regio', 'product']).agg(
totale_omzet=('sales', 'sum'),
gemiddelde_omzet=('sales', 'mean'),
aantal_transacties=('sales', 'count')
).reset_index()
# 5. BEREKEN PERCENTAGES
# Totale omzet per regio
regio_totaal = grouped.groupby('regio')['totale_omzet'].transform('sum')
# Percentage bijdrage per product binnen regio
grouped['percentage_van_regio'] = (grouped['totale_omzet'] / regio_totaal) * 100
return grouped
# VOORBEELDGEBRUIK
if __name__ == "__main__":
# Laad je data (vervang met je eigen data bron)
# df = pd.read_csv('jouw_data.csv', parse_dates=['datum'])
# Voorbeeld data (verwijderen in productie)
data = {
'regio': ['Noord', 'Zuid', 'Noord', 'Oost', 'Zuid'],
'sales': [15000, 8000, 12000, 5000, 9500],
'datum': pd.date_range('2024-01-01', periods=5),
'product': ['A', 'B', 'A', 'C', 'B']
}
df = pd.DataFrame(data)
# Voer transformatie uit
resultaat = transformeer_data(
df=df,
start_datum='2024-01-01',
eind_datum='2024-12-31',
doel_omzet=10000
)
print("Getransformeerde Data:")
print(resultaat)
```
### Workflow Planning en Integratie Tips
**1. Modularisatie:**
- Bewaar de transformatiefunctie in een apart modulebestand (bijv. `data_transformaties.py`)
- Importeer en hergebruik in verschillende scripts
**2. Configuratiebeheer:**
```python
# config.py
TRANSFORMATIE_CONFIG = {
'doel_omzet': 10000,
'standaard_periode': {'start': '2024-01-01', 'eind': '2024-12-31'}
}
```
**3. Pijplijn Integratie:**
```python
# main_pipeline.py
from data_transformaties import transformeer_data
import pandas as pd
def volledige_pijplijn(input_bestand, output_bestand):
# 1. Data extractie
df = pd.read_csv(input_bestand, parse_dates=['datum'])
# 2. Data transformatie
df_getransformeerd = transformeer_data(df)
# 3. Data laden
df_getransformeerd.to_csv(output_bestand, index=False)
print(f"Transformatie voltooid. Output opgeslagen in {output_bestand}")
# Gebruik
volledige_pijplijn('input_data.csv', 'output_data.csv')
```
**4. Uitbreidingsmogelijkheden:**
- Voeg logging toe voor tracking
- Implementeer error handling met try-except blocks
- Voeg unit tests toe voor elke transformatiestap
- Overweeg Apache Airflow voor complexe scheduling
**5. Performance Optimalisatie:**
- Gebruik `pd.to_datetime()` voor grote datasets
- Overweeg `dtype` specificatie bij het inlezen
- Gebruik `inplace=True` waar mogelijk (met zorg)
Deze aanpak zorgt voor herbruikbare, onderhoudbare code die eenvoudig is aan te passen voor toekomstige vereisten.