slogan3

Help me met het genereren van aangepaste Pandas DataFrame-rapporten in Excel

description

Met deze prompt kun je professionele, op maat gemaakte Excel-rapporten genereren vanuit je Pandas DataFrame, inclusief geavanceerde opmaak en meerdere werkbladen. Dit bespaart tijd bij het maken van terugkerende rapporten en verbetert de presentatie van je data, wat beter is dan alleen ruwe data-export.

prompt

Ik heb een Pandas DataFrame met de volgende gegevens: <voer een beschrijving of voorbeeld van je DataFrame in>. Help me een Python-script te schrijven dat dit DataFrame exporteert naar een ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een Python-script dat je DataFrame exporteert naar een Excel-bestand met meerdere werkbladen, aangepaste opmaak, samenvattingen en grafieken. Het gebruikt de `pandas` en `openpyxl` bibliotheken, en voor geavanceerdere opmaak en grafieken kun je ook `xlsxwriter` gebruiken. ```python import pandas as pd from openpyxl import Workbook from openpyxl.utils.dataframe import dataframe_to_rows from openpyxl.styles import Font, Fill, PatternFill, Alignment from openpyxl.chart import BarChart, Reference # Stel je DataFrame voor # df = jouw DataFrame met de kolommen: Datum, Product, Aantal, Prijs, Regio # Voorbeeld: Laad je DataFrame # df = pd.read_csv('verkoopgegevens.csv') # of andere manier van inladen # Maak een ExcelWriter met xlsxwriter engine voor meer opmaakmogelijkheden with pd.ExcelWriter('Verkooprapport.xlsx', engine='xlsxwriter') as writer: workbook = writer.book # 1. Voeg een overzichtssheet toe met samenvatting # Bijvoorbeeld totaal aantal, omzet per regio overzicht = df.groupby('Regio').agg( Totaal_Aantal=('Aantal', 'sum'), Omzet=('Prijs', lambda x: (x * df.loc[x.index, 'Aantal']).sum()) ).reset_index() overzicht.to_excel(writer, sheet_name='Samenvatting', index=False) # Opmaak voor de samenvatting sheet_overzicht = writer.sheets['Samenvatting'] # Maak kopteksten vet for col_num, value in enumerate(overzicht.columns): cell = sheet_overzicht.cell(row=1, column=col_num+1) cell.font = cell.font.copy(bold=True) # 2. Voeg een detailwerkblad toe met alle transacties df.to_excel(writer, sheet_name='Transacties', index=False) sheet_transacties = writer.sheets['Transacties'] # Opmaak: kopteksten vet en achtergrondkleur header = sheet_transacties[1] for cell in header: cell.font = cell.font.copy(bold=True) cell.fill = PatternFill(start_color="FFCCFFCC", end_color="FFCCFFCC", fill_type="solid") cell.alignment = Alignment(horizontal='center') # 3. Voeg een grafiek toe (bijvoorbeeld omzet per regio) # Eerst maken we een draaitabel of samenvatting omzet_per_regio = df.groupby('Regio').apply( lambda x: (x['Prijs'] * x['Aantal']).sum() ).reset_index(name='Omzet') # Voeg deze data toe aan het werkblad sheet_overzicht.append(['']) sheet_overzicht.append(['Omzet per Regio']) for r in dataframe_to_rows(omzet_per_regio, index=False, header=True): sheet_overzicht.append(r) # Maak een grafiek voor omzet per regio chart = BarChart() data = Reference(sheet_overzicht, min_col=2, min_row=2, max_row=1+len(omzet_per_regio), max_col=2) categories = Reference(sheet_overzicht, min_col=1, min_row=2, max_row=1+len(omzet_per_regio)) chart.add_data(data, titles_from_data=True) chart.set_categories(categories) chart.title = "Omzet per Regio" chart.x_axis.title = "Regio" chart.y_axis.title = "Omzet" # Plaats de grafiek op een nieuw werkblad wb = writer.book ws_chart = wb.create_sheet(title='Grafieken') ws_chart.add_chart(chart, "A1") # 4. Automatisering voor regelmatige rapportages # - Plaats je script in een Python-bestand # - Plan het automatisch uit te voeren via een scheduler zoals cron (Linux) of Taakplanner (Windows) # - Laad de DataFrame automatisch uit je gegevensbron # - Pas het script aan om dynamisch datums of parameters te verwerken # - Sla de rapporten op met datumstempels voor versiebeheer # Het script sluit automatisch af en slaat het Excel-bestand op. ``` **Hoe je dit efficiënt kunt automatiseren:** - Plaats je script in een Python-bestand (.py). - Gebruik een scheduler zoals cron (Linux) of Windows Taakplanner om het script op regelmatige tijdstippen uit te voeren. - Zorg dat je script automatisch je gegevensbron laadt (bijvoorbeeld een database, CSV-bestand, API). - Voeg dynamische namen toe voor de rapporten (bijvoorbeeld met datums in de bestandsnaam). - Overweeg het gebruik van functies en parameters om rapporten aan te passen zonder veel code te dupliceren. - Bewaar templates en scripts op een centrale locatie zodat ze gemakkelijk te onderhouden zijn. Door dit proces te automatiseren, wordt het genereren van rapporten snel, consistent en foutvrij.
provider: deepseek
model: deepseek-chat
Ik help je graag een Python-script te schrijven voor het exporteren van je DataFrame naar Excel met meerdere werkbladen en opmaak. Hier is een complete oplossing: ```python import pandas as pd import numpy as np from openpyxl import Workbook from openpyxl.styles import Font, PatternFill, Alignment, Border, Side from openpyxl.chart import BarChart, Reference from openpyxl.utils.dataframe import dataframe_to_rows from datetime import datetime import os def export_naar_excel_met_opmaak(df, bestandsnaam): """ Exporteert DataFrame naar Excel met meerdere werkbladen en opmaak """ # Maak een nieuwe Excel workbook aan wb = Workbook() # Verwijder standaard sheet if 'Sheet' in wb.sheetnames: std_sheet = wb['Sheet'] wb.remove(std_sheet) # 1. HOOFDSHEET - Gedetailleerde gegevens ws_detailed = wb.create_sheet("Gedetailleerde Verkoop") # Voeg data toe aan sheet for r in dataframe_to_rows(df, index=False, header=True): ws_detailed.append(r) # Pas opmaak toe op hoofdsheet pas_detailed_opmaak_toe(ws_detailed, df) # 2. SAMENVATTINGSHEET - Totaaloverzicht ws_summary = wb.create_sheet("Samenvatting") # Maak samenvattingen maak_samenvattingen(df, ws_summary) # 3. REGIO-ANALYSE SHEET ws_regio = wb.create_sheet("Regio-Analyse") maak_regio_analyse(df, ws_regio, wb) # 4. PRODUCT-ANALYSE SHEET ws_product = wb.create_sheet("Product-Analyse") maak_product_analyse(df, ws_product, wb) # 5. MAANDELIJKSE TREND SHEET ws_trend = wb.create_sheet("Maandelijkse Trend") maak_maandelijkse_trend(df, ws_trend, wb) # Sla bestand op wb.save(bestandsnaam) print(f"Bestand opgeslagen als: {bestandsnaam}") def pas_detailed_opmaak_toe(ws, df): """Past opmaak toe op gedetailleerde sheet""" # Stel kolombreedtes in kolom_breedtes = {'A': 15, 'B': 20, 'C': 12, 'D': 12, 'E': 15} for kolom, breedte in kolom_breedtes.items(): ws.column_dimensions[kolom].width = breedte # Header opmaak header_fill = PatternFill(start_color="366092", end_color="366092", fill_type="solid") header_font = Font(color="FFFFFF", bold=True) header_border = Border(bottom=Side(style="medium")) for cell in ws[1]: cell.fill = header_fill cell.font = header_font cell.border = header_border # Getalopmaak voor bedragen for row in range(2, ws.max_row + 1): ws[f'D{row}'].number_format = '#,##0.00' ws[f'C{row}'].number_format = '#,##0' def maak_samenvattingen(df, ws): """Maakt samenvattingsoverzichten""" # Bereken totalen totaal_omzet = (df['Aantal'] * df['Prijs']).sum() totaal_transacties = len(df) gem_waarde = totaal_omzet / totaal_transacties # Schrijf samenvatting ws['A1'] = "Verkoopsamenvatting" ws['A1'].font = Font(size=16, bold=True) samenvatting_data = [ ["Totaal Omzet", f"€ {totaal_omzet:,.2f}"], ["Totaal Transacties", f"{totaal_transacties:,}"], ["Gemiddelde Transactiewaarde", f"€ {gem_waarde:,.2f}"], ["Aantal Producten", f"{df['Product'].nunique()}"], ["Aantal Regio's", f"{df['Regio'].nunique()}"], ["Rapportdatum", datetime.now().strftime("%d-%m-%Y %H:%M")] ] for i, (label, waarde) in enumerate(samenvatting_data, start=3): ws[f'A{i}'] = label ws[f'B{i}'] = waarde ws[f'A{i}'].font = Font(bold=True) def maak_regio_analyse(df, ws, wb): """Analyse per regio""" regio_omzet = df.groupby('Regio').apply( lambda x: (x['Aantal'] * x['Prijs']).sum() ).reset_index(name='Omzet') for r in dataframe_to_rows(regio_omzet, index=False, header=True): ws.append(r) # Maak staafdiagram chart = BarChart() chart.type = "col" chart.title = "Omzet per Regio" chart.style = 10 data = Reference(ws, min_col=2, min_row=2, max_row=len(regio_omzet)+1, max_col=2) categories = Reference(ws, min_col=1, min_row=2, max_row=len(regio_omzet)+1) chart.add_data(data, titles_from_data=True) chart.set_categories(categories) ws.add_chart(chart, "D2") def maak_product_analyse(df, ws, wb): """Analyse per product""" product_omzet = df.groupby('Product').apply( lambda x: (x['Aantal'] * x['Prijs']).sum() ).reset_index(name='Omzet').sort_values('Omzet', ascending=False) for r in dataframe_to_rows(product_omzet, index=False, header=True): ws.append(r) def maak_maandelijkse_trend(df, ws, wb): """Maandelijkse trendanalyse""" df['Datum'] = pd.to_datetime(df['Datum']) df['Maand'] = df['Datum'].dt.to_period('M') maand_omzet = df.groupby('Maand').apply( lambda x: (x['Aantal'] * x['Prijs']).sum() ).reset_index(name='Omzet') maand_omzet['Maand'] = maand_omzet['Maand'].astype(str) for r in dataframe_to_rows(maand_omzet, index=False, header=True): ws.append(r) # AUTOMATISERING VOOR REGELMATIGE RAPPORTAGES def automatiseer_rapportages(df, output_map="rapporten/", planning="dagelijks"): """ Automatiseer regelmatige rapportages """ # Maak output map aan als deze niet bestaat os.makedirs(output_map, exist_ok=True) # Genereer bestandsnaam op basis van planning datum = datetime.now().strftime("%Y%m%d") if planning == "dagelijks": bestandsnaam = f"{output_map}verkoop_rapport_{datum}.xlsx" elif planning == "wekelijks": week_nummer = datetime.now().strftime("%V") bestandsnaam = f"{output_map}verkoop_rapport_week_{week_nummer}_{datetime.now().year}.xlsx" elif planning == "maandelijks": maand = datetime.now().strftime("%Y%m") bestandsnaam = f"{output_map}verkoop_rapport_{maand}.xlsx" else: bestandsnaam = f"{output_map}verkoop_rapport_{datum}.xlsx" # Exporteer naar Excel export_naar_excel_met_opmaak(df, bestandsnaam) return bestandsnaam # GEBRUIK VAN HET SCRIPT if __name__ == "__main__": # Voorbeeld: Laad je DataFrame (vervang dit met je eigen data) # df = pd.read_csv('jouw_bestand.csv') # Of gebruik bestaand DataFrame # export_naar_excel_met_opmaak(your_dataframe, "verkoop_rapport.xlsx") # Voor automatische planning: # automatiseer_rapportages(your_dataframe, planning="wekelijks") print("Script gereed voor gebruik. Pas de dataframe loading aan naar jouw data.") ``` ## 📋 Installatievereisten: ```bash pip install pandas openpyxl numpy ``` ## 🚀 Automatiseringstips: ### 1. **Windows Taakplanner** (voor dagelijkse/weekelijkse rapportages): - Maak een batch-bestand (.bat) dat je Python-script uitvoert - Plan deze in via Taakplanner ### 2. **Linux Cron Job**: ```bash # Voeg toe aan crontab (crontab -e) 0 8 * * 1 /usr/bin/python3 /pad/naar/script.py >> /var/log/verkoop_rapport.log ``` ### 3. **Python Scheduler** (voor real-time automatisering): ```python from apscheduler.schedulers.background import BackgroundScheduler def geplande_export(): df = laad_verkoop_data() # Je data laadfunctie automatiseer_rapportages(df, planning="dagelijks") scheduler = BackgroundScheduler() scheduler.add_job(geplande_export, 'cron', hour=8, minute=0) # Dagelijks om 8:00 scheduler.start() ``` ## 💡 Optimalisatietips voor grote datasets: 1. **Chunk processing** voor zeer grote bestanden 2. **Memory management** met `df = df.astype({'kolom': 'categorie'})` 3. **Multiprocessing** voor complexe berekeningen 4. **Incrementele updates** i.p.v. volledige herberekening Wil je dat ik specifieke onderdelen aanpas of uitbreid voor jouw use case?
error: Generation failed [deepseek] prompt_id=3422 locale=fr err=DeepSeek connection/timeout