slogan3

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

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.