Ontwikkel een Geautomatiseerde EDA Workflow voor Mijn Dataset
description
Met deze prompt ontwikkel je een geautomatiseerde en herhaalbare EDA workflow die je helpt snel en efficiënt inzicht te krijgen in je dataset. Het bespaart tijd door handmatige analyses te verminderen, verbetert de consistentie van je analyses en helpt bij het vroegtijdig detecteren van data problemen. Dit is ideaal voor gebruikers die regelmatig datasets analyseren en een gestandaardiseerde aanpak willen.
prompt
Help me een geautomatiseerde workflow voor Exploratory Data Analysis te ontwikkelen voor mijn dataset.
Dataset Beschrijving: <beschrijf de inhoud en het doel van je dataset>
Data Formaat: <specificeer het bestandstype of dataformaat>
Belangrijke Analyse Stappen: <geef aan welke specifieke EDA stappen j ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hieronder vind je een gestructureerde en herhaalbare workflow voor geautomatiseerde Exploratory Data Analysis (EDA) van jouw klantenbestand. De workflow gebruikt Python en enkele populaire libraries en genereert een samenvattend PDF-rapport.
Stap 1: Vereisten Installeren
Zorg dat je de volgende libraries hebt geïnstalleerd:
```bash
pip install pandas matplotlib seaborn pandas-profiling reportlab
```
Stap 2: Python Script voor Geautomatiseerde EDA
```python
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from pandas_profiling import ProfileReport
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
import io
# 1. Data inladen
def load_data(file_path):
df = pd.read_csv(file_path)
return df
# 2. Data inspectie en samenvatting
def data_overview(df):
overview = {
'Shape': df.shape,
'Kolommen': df.columns.tolist(),
'Datatypes': df.dtypes.tolist(),
'Null waarden': df.isnull().sum().to_dict(),
'Unieke waarden': df.nunique().to_dict(),
'Statistische samenvatting': df.describe(include='all')
}
return overview
# 3. Data kwaliteit en problemen detecteren
def datakwaliteit(df):
issues = {}
for col in df.columns:
null_count = df[col].isnull().sum()
if null_count > 0:
issues[col] = f"{null_count} null waarden"
if df[col].dtype == 'object':
if df[col].nunique() == 1:
issues[col] = "Alle waarden hetzelfde"
return issues
# 4. Visualisaties genereren
def genereer_visualisaties(df, output_dir):
# Histogrammen voor numerieke kolommen
for col in df.select_dtypes(include='number').columns:
plt.figure()
sns.histplot(df[col].dropna(), kde=True)
plt.title(f'Distributie van {col}')
plt.savefig(f'{output_dir}/{col}_histogram.png')
plt.close()
# Boxplots voor numerieke kolommen
for col in df.select_dtypes(include='number').columns:
plt.figure()
sns.boxplot(x=df[col])
plt.title(f'Boxplot van {col}')
plt.savefig(f'{output_dir}/{col}_boxplot.png')
plt.close()
# Barplots voor categorische kolommen
for col in df.select_dtypes(include='object').columns:
plt.figure(figsize=(8,4))
df[col].value_counts().plot(kind='bar')
plt.title(f'Distributie van {col}')
plt.savefig(f'{output_dir}/{col}_bar.png')
plt.close()
# 5. Automatisch rapport genereren
def genereer_pdf(overview, issues, visualisatie_files, output_pdf):
c = canvas.Canvas(output_pdf, pagesize=letter)
width, height = letter
y = height - 50
c.setFont("Helvetica-Bold", 16)
c.drawString(50, y, "Exploratory Data Analysis Rapport")
y -= 30
c.setFont("Helvetica", 12)
c.drawString(50, y, "Data Overzicht:")
y -= 20
for key, value in overview.items():
c.drawString(60, y, f"{key}: {value}")
y -= 20
y -= 10
c.setFont("Helvetica-Bold", 14)
c.drawString(50, y, "Datakwaliteitsproblemen:")
y -= 20
c.setFont("Helvetica", 12)
if issues:
for col, probleem in issues.items():
c.drawString(60, y, f"{col}: {probleem}")
y -= 20
else:
c.drawString(60, y, "Geen problemen gedetecteerd.")
y -= 20
y -= 10
c.setFont("Helvetica-Bold", 14)
c.drawString(50, y, "Visualisaties:")
y -= 20
for img_file in visualisatie_files:
# Voeg afbeelding toe
c.drawImage(img_file, 50, y - 150, width=500, height=150)
y -= 170
if y < 100:
c.showPage()
y = height - 50
c.save()
# Main Workflow
def main():
data_path = 'klantenbestand.csv' # Pas dit aan naar jouw bestand
output_dir = 'output_visualisaties'
import os
os.makedirs(output_dir, exist_ok=True)
df = load_data(data_path)
overview = data_overview(df)
issues = datakwaliteit(df)
genereer_visualisaties(df, output_dir)
visualisatie_files = [
f'{output_dir}/{col}_histogram.png' for col in df.select_dtypes(include='number').columns
] + [
f'{output_dir}/{col}_boxplot.png' for col in df.select_dtypes(include='number').columns
] + [
f'{output_dir}/{col}_bar.png' for col in df.select_dtypes(include='object').columns
]
output_pdf = 'EDA_Rapport.pdf'
genereer_pdf(overview, issues, visualisatie_files, output_pdf)
print("Rapport gegenereerd:", output_pdf)
if __name__ == '__main__':
main()
```
Gebruik dit script door je CSV-bestand te plaatsen en de paden aan te passen indien nodig. Dit automatiseert de data-inspectie, detecteert datakwaliteitsproblemen, genereert visualisaties, en compileert alles tot een overzichtelijk PDF-rapport.
Veel succes met je analyse!
provider: deepseek
model: deepseek-chat
Absoluut. Hier is een gestructureerde, efficiënte en volledig geautomatiseerde workflow voor Exploratory Data Analysis (EDA) voor uw klantdataset, geschreven in Python. De workflow is opgebouwd uit een script en een configuratiebestand voor maximale herbruikbaarheid.
### De Workflow: Een Overzicht
De workflow bestaat uit twee hoofdonderdelen:
1. **Een Python Script (`automated_eda.py`)**: Dit doet het zware werk: lezen, analyseren, visualiseren en exporteren.
2. **Een Configuratiebestand (`config.yaml`)**: Hier definieert u eenmalig de specifics van uw dataset (bestandspaden, variabelen). Dit maakt het script herbruikbaar voor toekomstige datasets.
---
### Stap 1: Installeer de Benodigde Packages
Open uw terminal of command prompt en voer uit:
```bash
pip install pandas numpy matplotlib seaborn ydata-profiling jinja2 PyYAML
```
---
### Stap 2: Maak het Configuratiebestand (`config.yaml`)
Dit bestand houdt variabele informatie buiten het script. Sla dit op als `config.yaml`.
```yaml
# config.yaml
data:
file_path: "uw_dataset.csv" # Vervang door uw bestandsnaam
delimiter: "," # Scheidingsteken (bijv. ";" voor Europese CSV's)
columns:
categorical: ["Geslacht", "Stad", "Lidmaatschapstype"] # Lijst van categorische variabelen
numerical: ["Leeftijd", "Jaarinkomen", "Aankoopfrequentie"] # Lijst van numerieke variabelen
date: ["Aankoopdatum"] # Optioneel: Lijst van datumvariabelen
target: "TotaalUitgegeven" # Optioneel: Uw doelvariabele (voor correlatie)
output:
report_path: "eda_rapport.pdf"
figure_directory: "plots/" # Map waar tijdelijke plots worden opgeslagen
```
---
### Stap 3: Het Geautomatiseerde EDA Script (`automated_eda.py`)
Kopieer en plak de onderstaande code naar een bestand genaamd `automated_eda.py`.
```python
# automated_eda.py
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import ydata_profiling
from ydata_profiling import ProfileReport
import yaml
import os
from datetime import datetime
# --- CONFIGURATIE LADEN ---
with open('config.yaml', 'r') as file:
config = yaml.safe_load(file)
# Maak de output map voor plots aan
os.makedirs(config['output']['figure_directory'], exist_ok=True)
# --- DATA INLADEN ---
print("1. Data inladen...")
df = pd.read_csv(config['data']['file_path'], delimiter=config['data']['delimiter'])
# --- DATA INSPECTIE & KERNSTATISTIEKEN ---
print("2. Uitvoeren van data inspectie...")
# Genereer automatisch een uitgebreid profiel met ydata-profiling
profile = ProfileReport(df,
title="Profiler Report: Klantdataset",
explorative=True,
correlations={"auto": {"calculate": True}},
missing_diagrams={'heatmap': True, 'dendrogram': True})
profile.to_file("data_profiling_report.html") # Sla een interactieve HTML versie op
# --- VISUALISATIES MAKEN ---
print("3. Genereren van visualisaties...")
plt.style.use('seaborn-v0_8') # Kies een schone stijl
# 1. Distributie van Numerieke Variabelen
print(" > Distributies van numerieke variabelen...")
for col in config['columns']['numerical']:
if col in df.columns:
fig, ax = plt.subplots(1, 2, figsize=(12, 4))
fig.suptitle(f'Distributie van {col}')
# Histogram
df[col].hist(bins=30, ax=ax[0])
ax[0].set_title('Histogram')
ax[0].set_ylabel('Frequentie')
# Boxplot om uitschieters te zien
df.boxplot(column=col, ax=ax[1])
ax[1].set_title('Boxplot')
plt.savefig(f"{config['output']['figure_directory']}dist_{col}.png")
plt.close()
# 2. Telling van Categorische Variabelen (Staafdiagrammen)
print(" > Staafdiagrammen voor categorische variabelen...")
for col in config['columns']['categorical']:
if col in df.columns:
plt.figure(figsize=(10, 5))
df[col].value_counts().plot(kind='bar')
plt.title(f'Verdeling van {col}')
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig(f"{config['output']['figure_directory']}count_{col}.png")
plt.close()
# 3. Correlatiematrix (alleen als er een target is gedefinieerd)
if config['columns'].get('target') and config['columns']['target'] in df.columns:
print(" > Correlatiematrix...")
# Selecteer alleen numerieke kolommen voor correlatie
num_df = df[config['columns']['numerical'] + [config['columns']['target']]]
plt.figure(figsize=(12, 8))
sns.heatmap(num_df.corr(), annot=True, cmap='coolwarm', center=0)
plt.title('Correlatiematrix van Numerieke Variabelen')
plt.tight_layout()
plt.savefig(f"{config['output']['figure_directory']}correlation_matrix.png")
plt.close()
print("4. Alle analyses voltooid. Controleer de map 'plots/' en het bestand 'data_profiling_report.html'.")
# --- OPTIONEEL: GENEREER EEN EENVOUDIG PDF-RAPPORT ---
# Deze stap combineert de belangrijkste bevindingen en plots in één PDF.
from fpdf import FPDF
import glob
class PDF(FPDF):
def header(self):
self.set_font('Arial', 'B', 16)
self.cell(0, 10, 'EDA Rapport - Klantdataset', 0, 1, 'C')
self.ln(5)
def chapter_title(self, title):
self.set_font('Arial', 'B', 14)
self.cell(0, 10, title, 0, 1, 'L')
self.ln(2)
def chapter_body(self, body):
self.set_font('Arial', '', 12)
self.multi_cell(0, 8, body)
self.ln()
print("5. Genereren van samenvattend PDF rapport...")
pdf = PDF()
pdf.add_page()
# Samenvatting sectie
pdf.chapter_title('Samenvatting van de Analyse')
summary_text = f"""
Dit rapport is automatisch gegenereerd op {datetime.now().strftime("%Y-%m-%d %H:%M")}.
Geanalyseerd bestand: {config['data']['file_path']}
Belangrijkste bevindingen:
- Dataset vorm: {df.shape[0]} rijen en {df.shape[1]} kolommen.
- Totaal missing values: {df.isnull().sum().sum()}
- Bekijk de bijgevoegde grafieken voor distributies, uitschieters en relaties tussen variabelen.
"""
pdf.chapter_body(summary_text)
# Voeg alle gemaakte plots toe aan de PDF
plot_files = glob.glob(f"{config['output']['figure_directory']}*.png")
for plot_file in plot_files:
pdf.add_page()
pdf.chapter_title(plot_file.split('/')[-1].replace('_', ' ').replace('.png', '').title())
pdf.image(plot_file, x=10, w=190)
# Sla de PDF op
pdf.output(config['output']['report_path'])
print(f"Klaar! Het rapport is opgeslagen als: {config['output']['report_path']}")
```
---
### Hoe Gebruikt U Deze Workflow:
1. **Plaats uw CSV-bestand** in dezelfde map als de scripts.
2. **Bewerk het `config.yaml`-bestand**:
* Zet de juiste `file_path`.
* Pas de lijsten `categorical` en `numerical` aan naar de exacte namen van de kolommen in uw dataset.
* Definieer een `target` variabele als u die heeft (bijv. "TotaalBesteding").
3. **Voer het script uit** in uw terminal:
```bash
python automated_eda.py
```
4. **Bekijk de output**:
* **`data_profiling_report.html`**: Een **interactief, diepgaand rapport** van ydata-profiling met alle details over missende waarden, correlaties, distributies en interactieve plots. Dit is uw belangrijkste tool voor het detecteren van datakwaliteitsproblemen.
* **`eda_rapport.pdf`**: Een net, samengevat PDF-rapport met alle zelfgemaakte visualisaties voor presentatiedoeleinden.
* **Map `plots/`**: Bevat alle afzonderlijke afbeeldingen.
### Belangrijke Sterktepunten van deze Workflow:
* **Herhaalbaar**: Verander simpelweg het configuratiebestand voor een nieuwe dataset en voer het script opnieuw uit.
* **Diepgaande Analyse**: `ydata-profiling` doet het meeste werk en detecteert automatisch problemen zoals skewness, uitschieters, hooggecorreleerde variabelen en missende waardenpatronen.
* **Duidelijke Output**: Levert zowel een interactief HTML-dashboard als een net PDF-rapport op.
* **Schaalbaar**: U kunt eenvoudig nieuwe soorten analyses of visualisaties toevoegen aan het script.
U bent nu klaar om met één commandoregel waardevolle inzichten uit uw klantdata te halen!
error: Generation failed [deepseek] prompt_id=2272 locale=de err=DeepSeek connection/timeout