Voer Geavanceerde Data-Exploratie uit met Matplotlib
description
Met deze prompt kun je diepere inzichten uit je dataset halen door geavanceerde visualisatietechnieken toe te passen die verder gaan dan standaard grafieken. Dit helpt patronen en relaties duidelijk te maken die anders verborgen blijven, en de geautomatiseerde Python-code bespaart tijd en moeite.
prompt
Help me een Matplotlib-visualisatie te maken die uitgebreide data-exploratie ondersteunt voor mijn dataset: <beschrijving van je dataset>. Ik wil functies zoals meerdere subplots, aangepaste assen ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hieronder vind je een voorbeeld van Python-code die een uitgebreide data-exploratie visualiseert voor jouw dataset met maandelijkse omzet en aantal orders per regio voor 2023. De visualisatie bevat meerdere subplots, aangepaste assen, annotaties, kleuren, labels, en een titel bovenaan met legenda rechts.
```python
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# Voorbeeldgegevens maken (vervang dit met je eigen dataset)
# Data voorbeeld: 2 regio's, maandelijkse data
data = {
'Maand': pd.date_range(start='2023-01-01', periods=12, freq='MS'),
'Regio A Omzet': np.random.randint(2000, 5000, size=12),
'Regio B Omzet': np.random.randint(1500, 4500, size=12),
'Regio A Orders': np.random.randint(50, 150, size=12),
'Regio B Orders': np.random.randint(40, 130, size=12),
}
df = pd.DataFrame(data)
# Een figure maken met meerdere subplots
fig, axes = plt.subplots(nrows=3, ncols=1, figsize=(14, 10), sharex=True)
# 1. Maandelijkse omzet per regio (lijnplot)
axes[0].plot(df['Maand'], df['Regio A Omzet'], label='Regio A', color='red', marker='o')
axes[0].plot(df['Maand'], df['Regio B Omzet'], label='Regio B', color='green', marker='s')
axes[0].set_title('Maandelijkse Omzet in 2023', fontsize=14, fontweight='bold')
axes[0].set_ylabel('Omzet (€)')
axes[0].legend(loc='center right') # Rechtse positie voor legenda
axes[0].grid(True)
# 2. Maandelijkse aantal orders per regio (balkendiagram)
width = 15 # breedte van de balken in dagen
ax2 = axes[1]
ax2.bar(df['Maand'] - pd.Timedelta(days=width/2), df['Regio A Orders'], width=width, label='Regio A', color='red', align='edge')
ax2.bar(df['Maand'] + pd.Timedelta(days=width/2), df['Regio B Orders'], width=width, label='Regio B', color='green', align='edge')
ax2.set_ylabel('Aantal Orders')
ax2.set_title('Maandelijkse Aantal Orders in 2023')
ax2.legend(loc='center right')
ax2.grid(axis='y')
# 3. Combinatie van omzet en orders voor inzicht
# Bijvoorbeeld: omzet en orders in één plot met verschillende y-as
ax3 = axes[2]
ax3.bar(df['Maand'], df['Regio A Omzet'], color='red', alpha=0.6, label='Regio A Omzet')
ax3.set_ylabel('Regio A Omzet (€)', color='red')
ax3.tick_params(axis='y', labelcolor='red')
ax3_twin = ax3.twinx()
ax3_twin.plot(df['Maand'], df['Regio A Orders'], color='blue', marker='x', label='Regio A Orders')
ax3_twin.set_ylabel('Regio A Orders', color='blue')
ax3_twin.tick_params(axis='y', labelcolor='blue')
# Annotaties toevoegen voor belangrijke punten
for i, (omzet, orders) in enumerate(zip(df['Regio A Omzet'], df['Regio A Orders'])):
if omzet > 4500:
ax3.annotate('Top omzet', (df['Maand'][i], omzet), textcoords="offset points", xytext=(0,10), ha='center', color='red')
if orders > 140:
ax3_twin.annotate('Veel orders', (df['Maand'][i], orders), textcoords="offset points", xytext=(0,10), ha='center', color='blue')
# Titel bovenaan
plt.suptitle('Data-analyse van Maandelijkse Omzet en Orders in 2023', fontsize=16, fontweight='bold')
# Layout aanpassen voor duidelijkheid
plt.tight_layout(rect=[0, 0.03, 1, 0.95])
plt.show()
```
**Wat doet deze code?**
- Maakt voorbeeldgegevens; vervang deze door je eigen dataset.
- Plot 1: Lijnplot van maandelijkse omzet per regio met gekleurde lijnen en markers.
- Plot 2: Gestapelde balken voor aantal orders per regio per maand.
- Plot 3: Combinatie van omzet en orders voor een regio met verschillende y-assen, inclusief annotaties voor belangrijke punten.
- Legenda's rechts geplaatst, titels bovenaan, en een overzichtelijke layout.
Pas de kleuren, labels en annotaties aan op basis van je specifieke data en inzichten.
provider: deepseek
model: deepseek-chat
Hier is een complete Python-code voor uw data-exploratie visualisatie:
```python
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from datetime import datetime
# Voorbeeld dataset (vervang dit met uw eigen data)
data = {
'maand': ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun',
'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'],
'noord_omzet': [12000, 14500, 13200, 15800, 16700, 18200,
19500, 21000, 19800, 17600, 16300, 18900],
'noord_orders': [45, 52, 48, 56, 61, 67, 72, 78, 74, 65, 59, 68],
'zuid_omzet': [9800, 11200, 10500, 12400, 13800, 15200,
16500, 17800, 16200, 14700, 13400, 15600],
'zuid_orders': [38, 43, 41, 48, 53, 59, 64, 70, 63, 56, 51, 61],
'oost_omzet': [8500, 9200, 8800, 10200, 11500, 12800,
14200, 15300, 13900, 12500, 11200, 13200],
'oost_orders': [32, 36, 34, 40, 45, 50, 55, 60, 54, 47, 42, 52],
'west_omzet': [10500, 11800, 11200, 13200, 14500, 15800,
17200, 18500, 17000, 15400, 14200, 16300],
'west_orders': [41, 46, 44, 51, 56, 62, 67, 73, 66, 58, 53, 63]
}
df = pd.DataFrame(data)
# Stel matplotlib stijl in
plt.style.use('default')
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(15, 10))
fig.suptitle('Maandelijkse Prestaties per Regio - 2023\nOmzet en Aantal Orders',
fontsize=16, fontweight='bold', y=0.98)
# Kleuren instellen
kleuren_omzet = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#F9A826'] # Rood, groen, blauw, oranje
kleuren_orders = ['#FF9999', '#88D8C0', '#7BC8F6', '#FBC02D'] # Lichtere varianten
# Regio's
regios = ['Noord', 'Zuid', 'Oost', 'West']
axes = [ax1, ax2, ax3, ax4]
for i, (regio, ax) in enumerate(zip(regios, axes)):
# Omzet data
omzet_data = df[f'{regio.lower()}_omzet']
# Orders data
orders_data = df[f'{regio.lower()}_orders']
# Primaire Y-as voor omzet
bars = ax.bar(range(len(df['maand'])), omzet_data,
color=kleuren_omzet[i], alpha=0.7, label='Omzet (€)')
# Secundaire Y-as voor orders
ax2_orders = ax.twinx()
line = ax2_orders.plot(range(len(df['maand'])), orders_data,
color=kleuren_orders[i], marker='o',
linewidth=2, markersize=6, label='Aantal Orders')
# Titel en labels
ax.set_title(f'Regio {regio}', fontweight='bold')
ax.set_xlabel('Maand')
ax.set_ylabel('Omzet (€)', color=kleuren_omzet[i])
ax2_orders.set_ylabel('Aantal Orders', color=kleuren_orders[i])
# X-as instellen
ax.set_xticks(range(len(df['maand'])))
ax.set_xticklabels(df['maand'], rotation=45)
# Grid toevoegen
ax.grid(True, alpha=0.3)
# Annotaties toevoegen voor hoogste en laagste waarden
max_omzet_idx = omzet_data.idxmax()
min_omzet_idx = omzet_data.idxmin()
# Hoogste omzet annotatie
ax.annotate(f'Hoogste: €{omzet_data[max_omzet_idx]:,.0f}',
xy=(max_omzet_idx, omzet_data[max_omzet_idx]),
xytext=(max_omzet_idx, omzet_data[max_omzet_idx] + 1000),
arrowprops=dict(arrowstyle='->', color='red'),
fontweight='bold', color='red')
# Laagste omzet annotatie (alleen als niet te dicht bij 0)
if omzet_data[min_omzet_idx] > min(omzet_data) * 1.1:
ax.annotate(f'Laagste: €{omzet_data[min_omzet_idx]:,.0f}',
xy=(min_omzet_idx, omzet_data[min_omzet_idx]),
xytext=(min_omzet_idx, omzet_data[min_omzet_idx] - 1500),
arrowprops=dict(arrowstyle='->', color='blue'),
fontweight='bold', color='blue')
# Legenda toevoegen
handles1, labels1 = ax1.get_legend_handles_labels()
handles2, labels2 = ax2_orders.get_legend_handles_labels()
fig.legend(handles1 + handles2, labels1 + labels2,
loc='right', bbox_to_anchor=(0.98, 0.5),
fontsize=10, frameon=True, shadow=True)
# Layout optimaliseren
plt.tight_layout()
plt.subplots_adjust(top=0.92, right=0.85)
# Toon de plot
plt.show()
# Optioneel: Totale statistieken weergeven
print("\nTotale Statistieken 2023:")
print("=" * 40)
for regio in regios:
totaal_omzet = df[f'{regio.lower()}_omzet'].sum()
totaal_orders = df[f'{regio.lower()}_orders'].sum()
gem_waarde = totaal_omzet / totaal_orders
print(f"{regio}: €{totaal_omzet:,.0f} omzet, {totaal_orders} orders")
print(f" Gemiddelde orderwaarde: €{gem_waarde:,.0f}")
```
Deze code bevat:
1. **Meerdere subplots** - 2x2 grid voor elke regio
2. **Dual Y-assen** - Omzet (bars) en orders (lijn) op aparte assen
3. **Rood/groen kleurenschema** met verschillende tinten
4. **Annotaties** voor hoogste/laagste waarden
5. **Professionele opmaak** met grid, legenda en titels
6. **Titel bovenaan** en **legenda rechts**
7. **Complete labels** en aanpassingen
**Om uw eigen data te gebruiken:**
- Vervang de `data` dictionary met uw werkelijke data
- Pas de regio-namen aan in de `regios` lijst
- Zorg dat de kolomnamen overeenkomen met de regio's
De visualisatie toont maandelijkse trends, pieken/dalen en maakt vergelijking tussen regio's eenvoudig!