Visualiseer en Vergelijk Mijn Dataset met Dynamische EDA Dashboards
description
Met deze prompt kan ik een gebruiksvriendelijk en interactief dashboard laten maken dat mijn dataset inzichtelijk maakt en me helpt om snel en gemakkelijk variabelen te vergelijken en patronen te ontdekken. Dit lost het probleem op van statische EDA rapporten die niet flexibel zijn en biedt een efficiënte manier om data te verkennen zonder steeds nieuwe analyses te hoeven uitvoeren.
prompt
Maak een dynamisch en interactief EDA-dashboard voor mijn dataset.
Dataset Beschrijving: <beschrijf de inhoud en het doel van je dataset>
Belangrijke Variabelen: <specificeer de variabelen die je wilt kunnen vergelijken en visualiseren>
Data Formaat: <geef het type of formaat van het databest ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Voor het ontwikkelen van een dynamisch en interactief EDA-dashboard voor jouw verkoopgegevens, raad ik aan gebruik te maken van Python in combinatie met de bibliotheek Streamlit, die geschikt is voor het bouwen van gebruiksvriendelijke interactieve dashboards. Hier is een stapsgewijze handleiding en voorbeeldcode om je op weg te helpen:
1. Installeer de benodigde libraries:
```bash
pip install streamlit pandas matplotlib seaborn
```
2. Maak een Python-script, bijvoorbeeld `dashboard.py`, met de volgende inhoud:
```python
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# Titel van het dashboard
st.title("EDA Dashboard Verkoopgegevens E-commerce Winkel")
# Data laden
@st.cache
def load_data():
data = pd.read_csv('jouw_data.csv', parse_dates=['Datum'])
return data
data = load_data()
# Sidebar filters
st.sidebar.header("Filters")
# Filter op productcategorie
productcategorieen = data['Productcategorie'].unique()
selected_categorie = st.sidebar.multiselect(
'Selecteer Productcategorie(n):',
options=productcategorieen,
default=productcategorieen
)
# Filter op tijdsperiode
min_date = data['Datum'].min()
max_date = data['Datum'].max()
start_date, end_date = st.sidebar.date_input(
'Selecteer Tijdsperiode:',
[min_date, max_date],
min_value=min_date,
max_value=max_date
)
# Data filteren op selectie
filtered_data = data[
(data['Productcategorie'].isin(selected_categorie)) &
(data['Datum'] >= pd.to_datetime(start_date)) &
(data['Datum'] <= pd.to_datetime(end_date))
]
# Statistieken overzicht
st.header("Samenvatting van de gegevens")
total_verkoop = filtered_data['Verkoopvolume'].sum()
totaal_omzet = filtered_data['Omzet'].sum()
st.metric("Totaal Verkoopvolume", total_verkoop)
st.metric("Totaal Omzet", totaal_omzet)
# Grafiek 1: Omzet over tijd
st.subheader("Omzet over tijd")
omzet_tijd = filtered_data.groupby('Datum')['Omzet'].sum().reset_index()
fig1, ax1 = plt.subplots()
sns.lineplot(data=omzet_tijd, x='Datum', y='Omzet', ax=ax1)
ax1.set_xlabel('Datum')
ax1.set_ylabel('Omzet')
plt.xticks(rotation=45)
st.pyplot(fig1)
# Grafiek 2: Verkoopvolume per productcategorie
st.subheader("Verkoopvolume per productcategorie")
verkoop_categorie = filtered_data.groupby('Productcategorie')['Verkoopvolume'].sum().reset_index()
fig2, ax2 = plt.subplots()
sns.barplot(data=verkoop_categorie, x='Productcategorie', y='Verkoopvolume', ax=ax2)
ax2.set_xlabel('Productcategorie')
ax2.set_ylabel('Verkoopvolume')
plt.xticks(rotation=45)
st.pyplot(fig2)
# Extra: Verkoop per maand
st.subheader("Maandelijkse omzet")
filtered_data['Maand'] = filtered_data['Datum'].dt.to_period('M').astype(str)
omzet_maand = filtered_data.groupby('Maand')['Omzet'].sum().reset_index()
fig3, ax3 = plt.subplots()
sns.lineplot(data=omzet_maand, x='Maand', y='Omzet', marker='o', ax=ax3)
ax3.set_xlabel('Maand')
ax3.set_ylabel('Omzet')
plt.xticks(rotation=45)
st.pyplot(fig3)
```
3. Voer het dashboard uit via de commandolijn:
```bash
streamlit run dashboard.py
```
Wat deze setup doet:
- Laadt je dataset en cachet de data voor betere prestaties.
- Biedt filters aan de linkerkant voor productcategorieën en tijdsperiode.
- Toont kernstatistieken zoals totaal verkoopvolume en omzet.
- Visualiseert omzet over tijd, verkoopvolume per categorie en omzet per maand met interactieve grafieken.
- Je kunt gemakkelijk nieuwe grafieken of analyses toevoegen door de code uit te breiden.
Wil je nog meer functionaliteiten, zoals exportmogelijkheden, meer grafiektypen of diepere analyses? Laat het gerust weten!
provider: deepseek
model: deepseek-chat
Zeker! Hier is een volledig dynamisch en interactief EDA-dashboard voor jouw e-commerce verkoopdata, ontwikkeld met Python (Plotly Dash). Dit dashboard biedt de gewenste functionaliteiten en meer.
---
### **E-commerce Verkoopdashboard - Code Implementatie**
```python
# Importeer benodigde libraries
import dash
from dash import dcc, html, Input, Output, callback
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
# Laad je dataset (vervang 'jouw_bestand.csv' met het daadwerkelijke pad)
df = pd.read_csv('jouw_bestand.csv')
# Data preprocessing
df['Datum'] = pd.to_datetime(df['Datum']) # Zet om naar datetime
df['Jaar'] = df['Datum'].dt.year
df['Maand'] = df['Datum'].dt.month_name()
df['Kwartaal'] = df['Datum'].dt.quarter
df['Weekdag'] = df['Datum'].dt.day_name()
# Maand en weekdag sorteren voor logische volgorde
maand_volgorde = ['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December']
weekdag_volgorde = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
df['Maand'] = pd.Categorical(df['Maand'], categories=maand_volgorde, ordered=True)
df['Weekdag'] = pd.Categorical(df['Weekdag'], categories=weekdag_volgorde, ordered=True)
# Initialiseer de Dash app
app = dash.Dash(__name__)
app.title = "E-commerce Verkoopdashboard"
# Definieer layout
app.layout = html.Div([
# Header
html.Div([
html.H1("E-commerce Verkoopanalyse Dashboard",
style={'textAlign': 'center', 'color': '#2c3e50'})
]),
# Filters
html.Div([
html.Div([
html.Label("Selecteer Productcategorie(ën):"),
dcc.Dropdown(
id='categorie-filter',
options=[{'label': cat, 'value': cat} for cat in df['Productcategorie'].unique()],
value=list(df['Productcategorie'].unique()),
multi=True,
placeholder="Selecteer categorieën..."
)
], style={'width': '48%', 'display': 'inline-block'}),
html.Div([
html.Label("Selecteer Datumbereik:"),
dcc.DatePickerRange(
id='datum-filter',
min_date_allowed=df['Datum'].min(),
max_date_allowed=df['Datum'].max(),
start_date=df['Datum'].min(),
end_date=df['Datum'].max(),
display_format='YYYY-MM-DD'
)
], style={'width': '48%', 'float': 'right', 'display': 'inline-block'})
], style={'padding': '20px', 'backgroundColor': '#f8f9fa'}),
# KPI's
html.Div([
html.Div([
html.H3("Totale Omzet", style={'textAlign': 'center'}),
html.H2(id='kpi-omzet', style={'textAlign': 'center', 'color': '#27ae60'})
], className='three columns', style={'padding': '15px'}),
html.Div([
html.H3("Totaal Verkoopvolume", style={'textAlign': 'center'}),
html.H2(id='kpi-volume', style={'textAlign': 'center', 'color': '#2980b9'})
], className='three columns', style={'padding': '15px'}),
html.Div([
html.H3("Gem. Omzet per Order", style={'textAlign': 'center'}),
html.H2(id='kpi-avg-order', style={'textAlign': 'center', 'color': '#e74c3c'})
], className='three columns', style={'padding': '15px'}),
html.Div([
html.H3("Aantal Categorieën", style={'textAlign': 'center'}),
html.H2(id='kpi-categories', style={'textAlign': 'center', 'color': '#8e44ad'})
], className='three columns', style={'padding': '15px'})
], className='row', style={'backgroundColor': '#ecf0f1', 'padding': '10px'}),
# Grafieken
html.Div([
# Tijdsreeks en categorie vergelijking
html.Div([
dcc.Graph(id='tijdreeks-omzet')
], style={'width': '100%', 'padding': '10px'}),
html.Div([
html.Div([
dcc.Graph(id='categorie-vergelijking')
], style={'width': '48%', 'display': 'inline-block'}),
html.Div([
dcc.Graph(id='maandelijkse-trend')
], style={'width': '48%', 'float': 'right', 'display': 'inline-block'})
]),
# Verdeling en correlatie
html.Div([
html.Div([
dcc.Graph(id='weekdag-analyse')
], style={'width': '48%', 'display': 'inline-block'}),
html.Div([
dcc.Graph(id='omzet-volume-scatter')
], style={'width': '48%', 'float': 'right', 'display': 'inline-block'})
])
])
])
# Callbacks voor interactiviteit
@app.callback(
[Output('tijdreeks-omzet', 'figure'),
Output('categorie-vergelijking', 'figure'),
Output('maandelijkse-trend', 'figure'),
Output('weekdag-analyse', 'figure'),
Output('omzet-volume-scatter', 'figure'),
Output('kpi-omzet', 'children'),
Output('kpi-volume', 'children'),
Output('kpi-avg-order', 'children'),
Output('kpi-categories', 'children')],
[Input('categorie-filter', 'value'),
Input('datum-filter', 'start_date'),
Input('datum-filter', 'end_date')]
)
def update_dashboard(selected_categories, start_date, end_date):
# Filter data based on selections
filtered_df = df[
(df['Productcategorie'].isin(selected_categories)) &
(df['Datum'] >= start_date) &
(df['Datum'] <= end_date)
]
# KPI calculations
totale_omzet = f"€{filtered_df['Omzet'].sum():,.0f}"
totaal_volume = f"{filtered_df['Verkoopvolume'].sum():,.0f}"
avg_order = f"€{filtered_df['Omzet'].sum()/filtered_df['Verkoopvolume'].sum():.2f}" if filtered_df['Verkoopvolume'].sum() > 0 else "€0.00"
aantal_categories = f"{len(filtered_df['Productcategorie'].unique())}"
# 1. Tijdsreeks van omzet
tijdreeks_fig = px.line(
filtered_df.groupby('Datum')['Omzet'].sum().reset_index(),
x='Datum', y='Omzet',
title='Dagelijkse Omzet Trend',
labels={'Omzet': 'Omzet (€)', 'Datum': 'Datum'}
)
tijdreeks_fig.update_traces(line=dict(width=2.5))
tijdreeks_fig.update_layout(hovermode='x unified')
# 2. Categorie vergelijking
categorie_fig = px.bar(
filtered_df.groupby('Productcategorie')['Omzet'].sum().reset_index().sort_values('Omzet', ascending=False),
x='Productcategorie', y='Omzet',
title='Omzet per Productcategorie',
color='Productcategorie',
labels={'Omzet': 'Totale Omzet (€)', 'Productcategorie': 'Categorie'}
)
categorie_fig.update_layout(showlegend=False)
# 3. Maandelijkse trend
maand_trend = filtered_df.groupby(['Jaar', 'Maand'])['Omzet'].sum().reset_index()
maand_fig = px.line(
maand_trend, x='Maand', y='Omzet', color='Jaar',
title='Maandelijkse Omzet Trend per Jaar',
labels={'Omzet': 'Omzet (€)', 'Maand': 'Maand'}
)
# 4. Weekdag analyse
weekdag_fig = px.box(
filtered_df, x='Weekdag', y='Omzet',
title='Omzetverdeling per Weekdag',
labels={'Omzet': 'Omzet (€)', 'Weekdag': 'Dag van de week'}
)
# 5. Omzet vs Volume scatter
scatter_df = filtered_df.groupby('Productcategorie').agg({'Omzet': 'sum', 'Verkoopvolume': 'sum'}).reset_index()
scatter_fig = px.scatter(
scatter_df, x='Verkoopvolume', y='Omzet', size='Omzet',
color='Productcategorie', hover_name='Productcategorie',
title='Omzet vs Verkoopvolume per Categorie',
labels={'Omzet': 'Totale Omzet (€)', 'Verkoopvolume': 'Totaal Verkoopvolume'}
)
return (tijdreeks_fig, categorie_fig, maand_fig, weekdag_fig, scatter_fig,
totale_omzet, totaal_volume, avg_order, aantal_categories)
# Run the app
if __name__ == '__main__':
app.run_server(debug=True)
```
---
### **Dashboard Functionaliteiten:**
1. **Interactieve Filters:**
- Multi-select dropdown voor productcategorieën
- Datumbereik selector voor tijdsperiode
2. **Real-time KPI's:**
- Totale omzet
- Totaal verkoopvolume
- Gemiddelde omzet per order
- Aantal weergegeven categorieën
3. **Interactieve Visualisaties:**
- **Tijdsreeksgrafiek**: Dagelijkse omzet trend
- **Staafdiagram**: Omzet per productcategorie
- **Lijngrafiek**: Maandelijkse trends per jaar
- **Boxplot**: Omzetverdeling per weekdag
- **Spreidingsdiagram**: Relatie omzet vs verkoopvolume
4. **Gebruikersvriendelijke Features:**
- Hover informatie voor gedetailleerde inzichten
- Responsief design
- Automatische update bij filterwijzigingen
- Duidelijke labels en titels in het Nederlands
---
### **Installatie-instructies:**
1. **Installeer benodigde packages:**
```bash
pip install dash plotly pandas numpy
```
2. **Sla je CSV-bestand op** in dezelfde map als het script
3. **Pas de bestandsnaam aan** in de code (`'jouw_bestand.csv'` → jouw daadwerkelijke bestandsnaam)
4. **Run het dashboard:**
```bash
python jouw_script_naam.py
```
5. **Open je browser** en ga naar: `http://127.0.0.1:8050/`
---
### **Aanbevolen Verbeteringen voor Productie:**
1. **Data caching** voor grote datasets
2. **Error handling** voor ontbrekende data
3. **Export functionaliteit** voor grafieken
4. **Thema-opties** (light/dark mode)
5. **Database integratie** voor live data
Dit dashboard geeft je een complete en professionele oplossing voor visuele data-exploratie van je e-commerce verkoopgegevens!