Maak een aangepaste workflow voor gegevensomvorming
description
Door deze prompt te gebruiken, creëer je een gestructureerde aanpak voor gegevensomvorming die je analyseproces verbetert en de gegevenskwaliteit waarborgt.
prompt
try_prompt
Help me bij het ontwerpen van een aangepaste workflow voor het transformeren van mijn dataset, met de focus op de taak: {{transformation_task}}. Ik wil stappen opnemen voor gegevensopschoning, kenmerkextractie en opmaak ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een voorbeeld van een aangepaste workflow voor het normaliseren van je verkoopgegevens in een CSV-bestand, inclusief stappen voor gegevensopschoning, kenmerkextractie en opmaak, met verwachte resultaten:
Stap 1: Gegevensopschoning
- Doel: Verwijder onvolledige, inconsistente of ongeldige gegevens.
- Acties:
- Lees de CSV in met bijvoorbeeld pandas:
```python
import pandas as pd
df = pd.read_csv('verkoopgegevens.csv')
```
- Verwijder duplicaten:
```python
df = df.drop_duplicates()
```
- Vul ontbrekende waarden in (bijvoorbeeld met mediane of meest frequente waarde):
```python
df['Prijs'].fillna(df['Prijs'].median(), inplace=True)
df['Aantal'].fillna(df['Aantal'].mode()[0], inplace=True)
```
- Corrigeer inconsistenties (zoals verschillende datumnotaties):
```python
df['Datum'] = pd.to_datetime(df['Datum'], errors='coerce')
df = df.dropna(subset=['Datum'])
```
- Verwachte resultaat:
- Een schone dataset zonder duplicaten en met volledige, consistente gegevens.
Stap 2: Kenmerkextractie
- Doel: Creëer nieuwe, nuttige features voor analyse.
- Acties:
- Extract jaar en maand uit de datums:
```python
df['Jaar'] = df['Datum'].dt.year
df['Maand'] = df['Datum'].dt.month
```
- Bereken omzet per transactie:
```python
df['Omzet'] = df['Prijs'] * df['Aantal']
```
- Groepeer gegevens (bijvoorbeeld totalen per product of maand):
```python
omzet_per_product = df.groupby('Product')['Omzet'].sum().reset_index()
```
- Verwachte resultaat:
- Nieuwe kolommen zoals 'Jaar', 'Maand', 'Omzet' en samenvattende gegevens.
Stap 3: Opmaak en normalisatie
- Doel: Schaal de data zodat alle features vergelijkbaar zijn.
- Acties:
- Normaliseer numerieke kolommen (bijvoorbeeld Min-Max normalisatie):
```python
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df[['Prijs_norm', 'Aantal_norm', 'Omzet_norm']] = scaler.fit_transform(df[['Prijs', 'Aantal', 'Omzet']])
```
- Converteer categorische gegevens naar dummy-variabelen:
```python
df = pd.get_dummies(df, columns=['Product'])
```
- Verwachte resultaat:
- Genormaliseerde, gestandaardiseerde numerieke features en gecodeerde categorische variabelen, klaar voor analyse of modellering.
Samenvatting:
Deze workflow zorgt voor een gestructureerde voorbereiding van je verkoopdataset door opschoning, het extraheren van relevante kenmerken en het normaliseren van data. Hierdoor wordt je dataset optimaal voorbereid voor verdere analyses, zoals trendonderzoek, voorspellende modellen of rapportages.
provider: deepseek
model: deepseek-chat
Zeker! Ik help je bij het ontwerpen van een aangepaste workflow voor datasetnormalisatie. Hier is een gestructureerd plan met voorbeeldimplementatie:
## Aangepaste Normalisatieworkflow voor Verkoopgegevens
### Workflow Stappen:
1. **Gegevensopschoning**
2. **Kenmerkextractie**
3. **Gegevensnormalisatie**
4. **Opmaak en Validatie**
---
## Voorbeeldimplementatie met Verkoopgegevens CSV
### Voorbeeld Dataset (raw_sales.csv):
```csv
OrderID,Datum,Product,Verkoopprijs,Aantal,Regio,Verkoper
001,15-01-2023,Laptop,€1.200,1,Noord,Jansen
002,20/01/2023,muis,25.50,2,ZUID, Pietersen
003,2023-01-25,Toetsenbord,"75,00",1,oost,de Vries
004,30-01-2023,Monitor, 300 ,1,West, Bakker
005,02-02-2023,Laptop,1200,2,noord,Jansen
```
### Stap 1: Gegevensopschoning
**Doel**: Inconsistente gegevens standaardiseren
```python
import pandas as pd
import numpy as np
# Data inladen
df = pd.read_csv('raw_sales.csv')
# Opschoningstaken:
# 1. Datumformaat standaardiseren
df['Datum'] = pd.to_datetime(df['Datum'], dayfirst=True, errors='coerce')
# 2. Prijzen opschonen en converteren naar float
df['Verkoopprijs'] = df['Verkoopprijs'].str.replace('€', '').str.replace(',', '.').str.replace(' ', '').astype(float)
# 3. Tekstvelden standaardiseren (hoofdletters)
df['Product'] = df['Product'].str.title().str.strip()
df['Regio'] = df['Regio'].str.title().str.strip()
df['Verkoper'] = df['Verkoper'].str.title().str.strip()
# 4. Ontbrekende waarden controleren
print("Ontbrekende waarden per kolom:")
print(df.isnull().sum())
```
**Verwachte Resultaat Stap 1**:
```
OrderID Datum Product Verkoopprijs Aantal Regio Verkoper
001 2023-01-15 Laptop 1200.0 1 Noord Jansen
002 2023-01-20 Muis 25.5 2 Zuid Pietersen
003 2023-01-25 Toetsenbord 75.0 1 Oost De Vries
004 2023-01-30 Monitor 300.0 1 West Bakker
005 2023-02-02 Laptop 1200.0 2 Noord Jansen
```
### Stap 2: Kenmerkextractie
**Doel**: Nieuwe betekenisvolle kenmerken creëren
```python
# Nieuwe kenmerken toevoegen
df['Totale_Omzet'] = df['Verkoopprijs'] * df['Aantal']
df['Maand'] = df['Datum'].dt.month
df['Weekdag'] = df['Datum'].dt.day_name()
df['Kwartaal'] = df['Datum'].dt.quarter
# Productcategorie toevoegen op basis van prijs
def categoriseer_product(prijs):
if prijs < 50:
return 'Accessoire'
elif prijs < 500:
return 'Middenklasse'
else:
return 'Hoogwaardig'
df['Product_Categorie'] = df['Verkoopprijs'].apply(categoriseer_product)
```
**Verwachte Resultaat Stap 2**:
```
OrderID Totale_Omzet Maand Weekdag Kwartaal Product_Categorie
001 1200.0 1 Sunday 1 Hoogwaardig
002 51.0 1 Friday 1 Middenklasse
003 75.0 1 Wednesday 1 Middenklasse
004 300.0 1 Monday 1 Middenklasse
005 2400.0 2 Thursday 1 Hoogwaardig
```
### Stap 3: Gegevensnormalisatie
**Doel**: Numerieke gegevens schalen naar vergelijkbare bereiken
```python
from sklearn.preprocessing import MinMaxScaler, StandardScaler
# Min-Max normalisatie (0-1 bereik)
scaler_minmax = MinMaxScaler()
df['Verkoopprijs_Norm'] = scaler_minmax.fit_transform(df[['Verkoopprijs']])
# Z-score normalisatie (standaardisatie)
scaler_standard = StandardScaler()
df['Totale_Omzet_Std'] = scaler_standard.fit_transform(df[['Totale_Omzet']])
# Categorische variabelen coderen
df_encoded = pd.get_dummies(df, columns=['Regio', 'Product_Categorie'], prefix=['Regio', 'Cat'])
print("Normalisatie resultaten:")
print(f"Originele prijzen: {df['Verkoopprijs'].min()} - {df['Verkoopprijs'].max()}")
print(f"Genormaliseerde prijzen: {df['Verkoopprijs_Norm'].min():.3f} - {df['Verkoopprijs_Norm'].max():.3f}")
```
**Verwachte Resultaat Stap 3**:
```
Normalisatie resultaten:
Originele prijzen: 25.5 - 1200.0
Genormaliseerde prijzen: 0.000 - 1.000
Voorbeeld genormaliseerde waarden:
OrderID Verkoopprijs_Norm Totale_Omzet_Std
001 1.000 0.235
002 0.000 -0.789
003 0.042 -0.745
004 0.234 -0.656
005 1.000 1.955
```
### Stap 4: Opmaak en Validatie
**Doel**: Dataset optimaliseren voor analyse
```python
# Kolomvolgorde optimaliseren
kolom_volgorde = ['OrderID', 'Datum', 'Maand', 'Kwartaal', 'Weekdag',
'Product', 'Product_Categorie', 'Aantal',
'Verkoopprijs', 'Verkoopprijs_Norm',
'Totale_Omzet', 'Totale_Omzet_Std',
'Regio', 'Verkoper']
df_final = df_encoded.reindex(columns=kolom_volgorde)
# Datatypes controleren
print("\nDatatypes na verwerking:")
print(df_final.dtypes)
# Samenvatting statistieken
print("\nSamenvatting statistieken:")
print(df_final[['Verkoopprijs', 'Totale_Omzet', 'Aantal']].describe())
# Opslaan genormaliseerde dataset
df_final.to_csv('genormaliseerde_verkoopdata.csv', index=False)
```
**Verwachte Resultaat Stap 4**:
```
Datatypes na verwerking:
OrderID object
Datum datetime64[ns]
Maand int64
... ...
Samenvatting statistieken:
Verkoopprijs Totale_Omzet Aantal
count 5.000000 5.000000 5.000000
mean 360.100000 805.200000 1.400000
std 526.678246 975.312738 0.547723
min 25.500000 51.000000 1.000000
max 1200.000000 2400.000000 2.000000
```
## Workflow Voordelen:
1. **Reproduceerbaarheid**: Elke stap is geautomatiseerd
2. **Consistentie**: Gestandaardiseerde datatypes en formaten
3. **Schaalbaarheid**: Eenvoudig toe te passen op grotere datasets
4. **Analyse-gereed**: Genormaliseerde data klaar voor machine learning
Deze workflow garandeert dat je dataset optimaal is voorbereid voor verdere analyse en modeltraining!

