Python e Excel: Come Automatizzare in 10 Minuti Analisi di Dati che Richiederebbero 4 Ore di Lavoro Manuale – Case Study su Report Vendite Multi-Store

Cerca:

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
Python e Excel metodi di automazione

Vediamo un esempio pratico che mostra come Python ed Excel possano lavorare insieme per automatizzare un’attività comune per un manager: l’analisi e il consolidamento dei report di vendita da diversi negozi.

SCENARIO INIZIALE: LA SFIDA DEL MANAGER

Immaginiamo un Retail Manager che supervisiona una catena di negozi in diverse città italiane. Ogni giorno, si ricevono report Excel separati da ciascun punto vendita contenenti dati cruciali:

  • Vendi giornaliere
  • Numero di clienti
  • Investimenti in marketing
  • Data delle transazioni

Il gestore deve:

  1. Consolidare questi dati per avere una visione d’insieme
  2. Calcolare i KPI significativi per valutare le prestazioni
  3. Identificare trend e prendere decisioni strategiche
  4. Preparare un report per il senior management

IL PROCESSO TRADIZIONALE

Senza automazione, il manager dovrebbe:

  • Aprire manualmente ogni file Excel
  • Copiare e incollare i dati in un foglio di consolidamento
  • Creare e aggiornare formule per i calcoli
  • Formattare il report finale
  • Ripetere questo processo ogni volta che arrivano nuovi dati

Questo approccio presenta diverse criticità:

  • Richiede  ore di lavoro manuale
  • È soggetto a errori umani dovuti copia-incolla
  • Limita il tempo disponibile per l’analisi strategica
  • Crea frustrazione e stress nel rispettare le cadenze

LA SOLUZIONE PYTHON-EXCEL

La nostra soluzione automatizzata trasforma radicalmente questo processo:

  1. Automazione Completa:
    • Il manager deve solo mettere i file nella cartella designata ed eseguire lo script
    • In pochi secondi ottieni un report completo e professionale
  2. Analisi Avanzata Automatica:
    • Calcolo immediato di KPI critici (ROI marketing, valore medio cliente)
    • Identificazione automatica dei trend di performance
    • Confronto sistematico tra i diversi punti vendita
  3. Report Professionali:
    • Formattazione coerente e professionale
    • Dati organizzati in modo logico e facilmente consultabile
    • Due viste separate: dettagliata e sintetica
Forse potrebbe interessarti anche:  Pandas oltre la teoria: 4 casi reali per passare da principiante a Data Analyst

 

IMPATTO SUL BUSINESS

L’implementazione di questa soluzione porta benefici tangibili:

  1. Finanziari:
    • Riduzione dei costi del personale dedicato al reporting
    • Migliore allocazione delle risorse umane
    • ROI positivo sull’investimento in automazione
  2. Operativi:
    • Maggiore velocità nel processo decisionale
    • Riduzione degli errori nei report
    • Standardizzazione dei processi
  3. Strategici:
    • Decisioni basate su dati più accurati e aggiornati
    • Maggiore tempo per analisi strategiche
    • Migliore comprensione delle performance dei negozi

Il codice Python

 

import pandas as pd
import numpy as np  # Aggiungiamo l'importazione di NumPy
from pathlib import Path
from datetime import datetime
import openpyxl
from openpyxl.styles import PatternFill, Font
import warnings
warnings.filterwarnings('ignore')

def analizza_vendite_negozi():
    """
    Automatizza l'analisi dei report di vendita giornalieri da più negozi.
    
    Flusso di lavoro:
    1. Genera dati di esempio per tre negozi (in un caso reale, questi sarebbero file Excel esistenti)
    2. Salva i dati in file Excel separati
    3. Legge e consolida tutti i report
    4. Calcola KPI importanti
    5. Genera un report Excel formattato
    
    Returns:
        tuple: (nome_file_report, dataframe_risultati)
    """
    
    # Crea la cartella per i report se non esiste
    Path('report_negozi').mkdir(exist_ok=True)
    
    # Definiamo i parametri per i dati di esempio
    negozi = ['Milano', 'Roma', 'Napoli']
    date_range = pd.date_range('2024-01-01', '2024-01-31')
    
    # Dizionario per memorizzare i DataFrame di ogni negozio
    dati_esempio = {}
    
    # Genera dati realistici per ogni negozio con valori diversi
    for negozio in negozi:
        # Usiamo seed diversi per ogni negozio per avere dati realisticamente differenti
        np.random.seed({'Milano': 42, 'Roma': 43, 'Napoli': 44}[negozio])
        
        # Genera dati con valori appropriati per ogni città
        if negozio == 'Milano':
            vendite = np.random.randint(1000, 5000, len(date_range))
            clienti = np.random.randint(50, 200, len(date_range))
            marketing = np.random.randint(100, 500, len(date_range))
        elif negozio == 'Roma':
            vendite = np.random.randint(800, 4000, len(date_range))
            clienti = np.random.randint(40, 180, len(date_range))
            marketing = np.random.randint(80, 400, len(date_range))
        else:  # Napoli
            vendite = np.random.randint(600, 3000, len(date_range))
            clienti = np.random.randint(30, 150, len(date_range))
            marketing = np.random.randint(60, 300, len(date_range))
        
        # Crea il DataFrame per il negozio
        dati_esempio[f'Negozio_{negozio}'] = pd.DataFrame({
            'Data': date_range,
            'Vendite': vendite,
            'Clienti': clienti,
            'Spesa_Marketing': marketing
        })
    
    
    # Salva i dati di esempio in file Excel separati
    for negozio, df in dati_esempio.items():
        df.to_excel(f'report_negozi/{negozio}.xlsx', index=False)
    
    # Legge e consolida tutti i report
    cartella_report = Path('report_negozi')
    dati_consolidati = pd.DataFrame()
    
    for file_excel in cartella_report.glob('*.xlsx'):
        df_temp = pd.read_excel(file_excel)
        df_temp['Negozio'] = file_excel.stem
        dati_consolidati = pd.concat([dati_consolidati, df_temp])
    
    # Calcola KPI importanti
    analisi = dati_consolidati.groupby('Negozio').agg({
        'Vendite': ['sum', 'mean'],
        'Clienti': ['sum', 'mean'],
        'Spesa_Marketing': 'sum'
    }).round(2)
    
    analisi.columns = ['Vendite_Totali', 'Vendite_Medie', 
                      'Clienti_Totali', 'Clienti_Medi', 
                      'Spesa_Marketing_Totale']
    
    # Calcola ROI del marketing
    analisi['ROI_Marketing'] = ((analisi['Vendite_Totali'] - 
                                analisi['Spesa_Marketing_Totale']) / 
                               analisi['Spesa_Marketing_Totale'] * 100).round(2)
    
    # Calcola valore medio per cliente
    analisi['Valore_Medio_Cliente'] = (analisi['Vendite_Totali'] / 
                                      analisi['Clienti_Totali']).round(2)
    
    # Crea un report Excel formattato
    nome_report = f'Report_Consolidato_{datetime.now().strftime("%Y%m%d")}.xlsx'
    
    with pd.ExcelWriter(nome_report, engine='openpyxl') as writer:
        # Foglio con dati consolidati
        dati_consolidati.to_excel(writer, sheet_name='Dati_Dettagliati', index=False)
        
        # Foglio con analisi
        analisi.to_excel(writer, sheet_name='Analisi')
        
        # Accedi al workbook per la formattazione
        wb = writer.book
        ws_analisi = wb['Analisi']
        
        # Applica formattazione
        header_fill = PatternFill(start_color='366092', 
                                end_color='366092',
                                fill_type='solid')
        
        # Formatta intestazioni
        for cell in ws_analisi[1]:
            cell.fill = header_fill
            cell.font = Font(color='FFFFFF', bold=True)
            
        # Aggiusta larghezza colonne
        for column in ws_analisi.columns:
            max_length = 0
            column = [cell for cell in column]
            for cell in column:
                try:
                    if len(str(cell.value)) > max_length:
                        max_length = len(cell.value)
                except:
                    pass
            adjusted_width = (max_length + 2)
            ws_analisi.column_dimensions[column[0].column_letter].width = adjusted_width
    
    return nome_report, analisi

# Esegui l'analisi e mostra i risultati
nome_file, risultati = analizza_vendite_negozi()
print(f"\nReport salvato come: {nome_file}")
print("\nRiepilogo dei risultati principali:")
print(risultati)

Ti guiderò attraverso una spiegazione dettagliata del codice e dei dati, partendo dalle basi e costruendo gradualmente la comprensione del sistema completo.

Forse potrebbe interessarti anche:  Python: esercizi svolti sulle matrici

Prima di tutto, esaminiamo le librerie che utilizziamo:

import pandas as pd # Per la manipolazione dei dati
from pathlib import Path # Per gestire i percorsi dei file
from datetime import datetime # Per lavorare con le date
import openpyxl # Per la formattazione avanzata di Excel
from openpyxl.styles import PatternFill, Font # Per lo stile del report

Per quanto riguarda i dati in input, il codice simula una situazione aziendale realistica dove abbiamo tre negozi (Milano, Roma e Napoli) che producono report giornalieri. Ogni rapporto contiene:

  • Data: il giorno del report
  • Vendite: l’importo delle vendite giornaliere
  • Clienti: il numero di clienti del giorno
  • Spesa_Marketing: quanto è stato speso in marketing quel giorno

Analizziamo ora il codice passo per passo:

Creazione dei dati di esempio:

dati_esempio = {
    'Negozio_Milano': pd.DataFrame({
        'Data': pd.date_range('2024-01-01', '2024-01-31'),  # Genera date per gennaio 2024
        'Vendite': np.random.randint(1000, 5000, 31),       # Vendite casuali tra 1000 e 5000€
        'Clienti': np.random.randint(50, 200, 31),          # Clienti casuali tra 50 e 200
        'Spesa_Marketing': np.random.randint(100, 500, 31)  # Spese marketing tra 100 e 500€
    })
    # [struttura simile per Roma e Napoli]
}


Questo codice simula un mese di dati per ogni negozio. In un caso reale, questi dati verrebbero invece dai veri report dei negozi.

Salvataggio dei dati in file Excel separati:

for negozio, df in dati_esempio.items():
    df.to_excel(f'report_negozi/{negozio}.xlsx', index=False)

Questo passaggio simula la situazione in cui ogni negozio invia il proprio report Excel. I file vengono salvati in una cartella chiamata ‘report_negozi’.

Consolidamento dei dati:

cartella_report = Path('report_negozi')
dati_consolidati = pd.DataFrame()
    
for file_excel in cartella_report.glob('*.xlsx'):
    df_temp = pd.read_excel(file_excel)
    df_temp['Negozio'] = file_excel.stem  # Aggiunge il nome del negozio
    dati_consolidati = pd.concat([dati_consolidati, df_temp])

Questo codice legge tutti i file Excel nella cartella, aggiunge una colonna per identificare il negozio, e combina tutti i dati in un unico DataFrame.

4.Calcolo dei KPI (Key Performance Indicators):

analisi = dati_consolidati.groupby('Negozio').agg({
    'Vendite': ['sum', 'mean'],
    'Clienti': ['sum', 'mean'],
    'Spesa_Marketing': 'sum'
})

Questo passaggio calcola, per ogni negozio:

  • Vendite totali e medie
  • Numero totale e medio di clienti
  • Spesa totale in marketing
Forse potrebbe interessarti anche:  Matrici Python per la Gestione Aziendale: Guida Completa con 8 Esercizi Pratici e Applicazioni Avanzate

Calcolo degli indicatori avanzati:

# ROI (Return on Investment) del marketing
analisi['ROI_Marketing'] = ((analisi['Vendite_Totali'] - 
                            analisi['Spesa_Marketing_Totale']) / 
                           analisi['Spesa_Marketing_Totale'] * 100)

# Valore medio per cliente
analisi['Valore_Medio_Cliente'] = (analisi['Vendite_Totali'] / 
                                  analisi['Clienti_Totali'])

Creazione del report Excel formattato:

nome_report = f'Report_Consolidato_{datetime.now().strftime("%Y%m%d")}.xlsx'


Il rapporto finale contiene due fogli:

  • “Dati_Dettagliati”: tutti i dati grezzi consolidati
  • “Analisi”: i KPI calcolati con formattazione professionale

La formattazione include:

  • Intestazioni in blu scuro con testo bianco in grassetto
  • Larghezza delle colonne adattata automaticamente al contenuto
  • Numeri arrotondati a due decimali

Il report finale avrà un nome che include la data di generazione, per esempio: “Report_Consolidato_20240331.xlsx”

In un contesto reale, un manager dovrebbe solo:

  1. Assicurarsi che tutti i report dei negozi siano nella cartella ‘report_negozi’
  2. Eseguire lo script
  3. Aprire il report consolidato generato automaticamente

Pubblicità