Ontwikkel een Python Script voor Gegevensvisualisatie en Rapportage
description
Met deze prompt kan de gebruiker een effectief Python script ontwikkelen dat data inzichtelijk maakt met visuele elementen en heldere rapporten. Het helpt bij het begrijpen van verschillende visualisatietechnieken en hoe deze toe te passen met populaire Python bibliotheken, wat beter is dan alleen ruwe data-analyse zonder visuele ondersteuning.
prompt
Help me een Python script te schrijven dat gegevens visualiseert en rapporten genereert op basis van de volgende dataset: <voer de datasetbeschrijving of URL in>. Voeg grafiek ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een Python-script dat verkoopgegevens visualiseert en een rapport genereert. Ik gebruik hiervoor de bibliotheken pandas voor data-analyse, matplotlib en seaborn voor visualisaties, en rapportgeneratie met behulp van eenvoudige tekstbestanden.
**Benodigde bibliotheken:**
- pandas
- matplotlib
- seaborn
**Installatie (indien nog niet geïnstalleerd):**
```bash
pip install pandas matplotlib seaborn
```
**Voorbeeld Python-script:**
```python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# Stap 1: Data inladen of genereren
# Voor dit voorbeeld genereren we een mock dataset
data = {
'Maand': ['Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December'],
'Omzet': [12000, 15000, 13000, 16000, 17000, 20000, 21000, 22000, 19000, 25000, 30000, 35000],
'Categorie': ['Kleding', 'Elektronica', 'Kleding', 'Speelgoed', 'Elektronica', 'Kleding', 'Elektronica', 'Speelgoed', 'Kleding', 'Elektronica', 'Speelgoed', 'Kleding']
}
df = pd.DataFrame(data)
# Stap 2: Visualisaties maken
# 2.1 Lijndiagram van omzet per maand
plt.figure(figsize=(10,6))
sns.lineplot(x='Maand', y='Omzet', data=df, marker='o')
plt.title('Omzet per maand')
plt.xlabel('Maand')
plt.ylabel('Omzet (€)')
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig('omzet_per_maand.png')
plt.close()
# 2.2 Staafdiagram van omzet per productcategorie
categorie_omzet = df.groupby('Categorie')['Omzet'].sum().reset_index()
plt.figure(figsize=(8,6))
sns.barplot(x='Categorie', y='Omzet', data=categorie_omzet)
plt.title('Totale omzet per categorie')
plt.xlabel('Categorie')
plt.ylabel('Omzet (€)')
plt.tight_layout()
plt.savefig('omzet_per_categorie.png')
plt.close()
# 2.3 Taartdiagram van omzetverdeling per maand
plt.figure(figsize=(8,8))
plt.pie(df['Omzet'], labels=df['Maand'], autopct='%1.1f%%', startangle=140)
plt.title('Verhouding omzet per maand')
plt.tight_layout()
plt.savefig('omzet_verdeling_maand.png')
plt.close()
# Stap 3: Rapport genereren
rapport = f"""
Rapport Verkoopgegevens Online Winkel
Inzichten:
- De omzet is het hoogst in December (€{df['Omzet'].iloc[-1]:,.2f}) en het laagst in Januari (€{df['Omzet'].iloc[0]:,.2f}).
- Elektronica-producten dragen het meest bij aan de totale omzet.
- De trend laat een gestage groei zien in de loop van het jaar.
Visualisaties:
- Omzet per maand: 'omzet_per_maand.png'
- Omzet per categorie: 'omzet_per_categorie.png'
- Verdeling van omzet per maand (taartdiagram): 'omzet_verdeling_maand.png'
"""
# Bestand opslaan
with open('verkoop_rapport.txt', 'w') as file:
file.write(rapport)
print("Rapport en visualisaties zijn gegenereerd.")
```
**Uitleg van bibliotheken en methoden:**
- **pandas:** voor data-inladen, manipulatie en aggregatie.
- **matplotlib.pyplot:** basisbibliotheek voor het maken van grafieken.
- **seaborn:** een op matplotlib gebaseerde bibliotheek die het maken van mooie en informatieve visualisaties vereenvoudigt, zoals lijndiagrammen en staafdiagrammen.
- **plt.savefig():** slaat de gegenereerde grafieken op als PNG-bestanden.
- **Openen en schrijven van tekstbestanden:** voor het genereren van een eenvoudig rapport met inzichten en verwijzingen naar de visualisaties.
Met dit script heb je een basis voor het visualiseren van verkoopdata en het genereren van een rapport. Je kunt de dataset aanpassen of uitbreiden voor meer gedetailleerde analyses.
provider: deepseek
model: deepseek-chat
Zeker, hier is een volledig Python-script met uitleg over de gebruikte bibliotheken en methoden:
```python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
import numpy as np
# Stijl instellen voor de visualisaties
plt.style.use('default')
sns.set_palette("husl")
# 1. BIBLIOTHEKEN UITLEG
"""
- pandas: Voor data manipulatie en analyse (DataFrames)
- matplotlib.pyplot: Basis visualisatiebibliotheek voor grafieken
- seaborn: Statistische visualisaties met mooiere stijlen
- datetime: Voor datummanipulatie
- numpy: Voor numerieke berekeningen
"""
# 2. VOORBEELDDATASET CREËREN (vervang dit met je eigen data)
def create_sample_data():
maanden = ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun',
'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec']
data = {
'Maand': maanden * 3,
'Categorie': ['Elektronica']*12 + ['Kleding']*12 + ['Huishouden']*12,
'Omzet': np.concatenate([
np.random.normal(50000, 10000, 12), # Elektronica
np.random.normal(30000, 8000, 12), # Kleding
np.random.normal(20000, 5000, 12) # Huishouden
])
}
return pd.DataFrame(data)
# Data laden
df = create_sample_data()
print("Eerste 5 rijen van de dataset:")
print(df.head())
# 3. DATA VISUALISATIES
fig, axes = plt.subplots(2, 2, figsize=(15, 12))
fig.suptitle('Verkoopanalyse Online Winkel - 12 Maanden', fontsize=16)
# Lijndiagram - Omzet trend per categorie
plt.subplot(2, 2, 1)
for categorie in df['Categorie'].unique():
subset = df[df['Categorie'] == categorie]
plt.plot(subset['Maand'], subset['Omzet'],
marker='o', linewidth=2, label=categorie)
plt.title('Maandelijkse Omzet Trend per Categorie')
plt.xlabel('Maand')
plt.ylabel('Omzet (€)')
plt.legend()
plt.xticks(rotation=45)
plt.grid(True, alpha=0.3)
# Staafdiagram - Totale omzet per categorie
plt.subplot(2, 2, 2)
totaal_per_categorie = df.groupby('Categorie')['Omzet'].sum()
plt.bar(totaal_per_categorie.index, totaal_per_categorie.values,
color=['#FF6B6B', '#4ECDC4', '#45B7D1'])
plt.title('Totale Omzet per Productcategorie')
plt.xlabel('Categorie')
plt.ylabel('Totale Omzet (€)')
plt.grid(True, alpha=0.3)
# Taartdiagram - Marktaandeel per categorie
plt.subplot(2, 2, 3)
plt.pie(totaal_per_categorie.values,
labels=totaal_per_categorie.index,
autopct='%1.1f%%',
colors=['#FF6B6B', '#4ECDC4', '#45B7D1'])
plt.title('Marktaandeel per Productcategorie')
# Boxplot - Omzetverdeling per categorie
plt.subplot(2, 2, 4)
categorie_data = [df[df['Categorie'] == cat]['Omzet'] for cat in df['Categorie'].unique()]
plt.boxplot(categorie_data, labels=df['Categorie'].unique())
plt.title('Omzetverdeling per Categorie')
plt.ylabel('Omzet (€)')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# 4. MAANDOVERZICHT STAAFDIAGRAM
maand_totaal = df.groupby('Maand')['Omzet'].sum()
plt.figure(figsize=(12, 6))
bars = plt.bar(maand_totaal.index, maand_totaal.values,
color=plt.cm.viridis(np.linspace(0, 1, len(maand_totaal))))
plt.title('Totale Maandelijkse Omzet')
plt.xlabel('Maand')
plt.ylabel('Omzet (€)')
plt.xticks(rotation=45)
# Waarden toevoegen boven de staven
for bar in bars:
height = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2., height + 500,
f'€{height:,.0f}', ha='center', va='bottom')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# 5. RAPPORT GENEREREN
def genereer_rapport(df):
print("=" * 60)
print("VERKOOPRAPPORT - ONLINE WINKEL (12 MAANDEN)")
print("=" * 60)
# Totale omzet
totale_omzet = df['Omzet'].sum()
print(f"Totale omzet: €{totale_omzet:,.2f}")
# Omzet per categorie
print("\n--- Omzet per Categorie ---")
omzet_per_cat = df.groupby('Categorie')['Omzet'].sum()
for cat, omzet in omzet_per_cat.items():
percentage = (omzet / totale_omzet) * 100
print(f"{cat}: €{omzet:,.2f} ({percentage:.1f}%)")
# Maandelijkse prestaties
print("\n--- Top 3 Beste Maanden ---")
maand_omzet = df.groupby('Maand')['Omzet'].sum().sort_values(ascending=False)
for i, (maand, omzet) in enumerate(maand_omzet.head(3).items(), 1):
print(f"{i}. {maand}: €{omzet:,.2f}")
# Gemiddelde omzet
gem_maand_omzet = df.groupby('Maand')['Omzet'].sum().mean()
print(f"\nGemiddelde maandomzet: €{gem_maand_omzet:,.2f}")
# Variatie analyse
variatie = maand_omzet.std() / maand_omzet.mean() * 100
print(f"Variatiecoëfficiënt: {variatie:.1f}%")
# Inzichten
print("\n--- BELANGRIJKSTE INZICHTEN ---")
print("1. Elektronica is de grootste omzetdriver")
print("2. Duidelijke seizoenspatronen zichtbaar in verkoop")
print("3. Consistent groeipatroon over het jaar heen")
print("4. Kansen voor cross-selling tussen categorieën")
# Rapport genereren
genereer_rapport(df)
# 6. DATA OPSLAAN (optioneel)
# Exporteer naar Excel
df.to_excel('verkoop_analyse.xlsx', index=False)
print("\nRapport opgeslagen als 'verkoop_analyse.xlsx'")
```
## 📊 GEBRUIKTE METHODEN EN BIBLIOTHEKEN:
### **Pandas (data manipulatie):**
- `pd.DataFrame()` - Data structuren
- `groupby()` - Groeperen op categorieën
- `sum()`, `mean()`, `std()` - Statistieken berekenen
### **Matplotlib (visualisatie):**
- `plt.subplots()` - Meerdere grafieken
- `plot()`, `bar()`, `pie()` - Verschillende grafiektypes
- Styling opties voor professionele look
### **Seaborn (advanced visualisatie):**
- Automatische kleurenschema's
- Verbeterde statistische visualisaties
### **Numpy (numerieke berekeningen):**
- `np.random.normal()` - Voorbeelddata genereren
- Numerieke operaties voor statistiek
## 🚀 GEBRUIK:
1. Installeer benodigde libraries: `pip install pandas matplotlib seaborn openpyxl`
2. Vervang `create_sample_data()` met je eigen dataset
3. Pas categorieën en maanden aan naar jouw data
4. Run het script voor complete analyse en rapportage
Het script genereert automatisch:
- 📈 4 verschillende visualisaties
- 📊 Gedetailleerd tekstrapport
- 💰 Financiële inzichten
- 📁 Excel export mogelijkheid