Analisi e automazione dati Excel in Pyton con la libreria Pandas
Indice dell'articolo
Pandas è una libreria per il linguaggio Python onnipresente in ogni contesto di lavoro dedito a produzione e sperimentazione in tema di Machine Learning e Data Science in generale. È una libreria con la quale il modus operandi ruota attorno a una struttura dati nota come DataFrame, che possiamo immaginare come una sorta di tabella in cui i dati vengono incastonati e che dispone di moltissime funzionalità integrate per la loro analisi in maniera flessibile e ottimizzata. Può trovare spazio in qualsiasi processo di lavoro che rientri nell’ambito della Data Science con il linguaggio Python tanto da essere uno dei framework più scaricati e studiati in questo settore.
Pandas e i formati dei dataset: il valore del DataFrame
In particolare, Pandas vanta una grande capacità di acquisizione dati in quanto integra moduli che le permettono di interagire con la maggior parte dei formati di file esistenti. Altro aspetto estremamente importante è che da qualsiasi dataset attinga, una volta averlo importato lo converte sempre in un DataFrame (la struttura a tabella cui accennavamo poco fa) e ciò rende assolutamente uniforme il lavoro del data scientist che, dopo l’importazione, provi ad accedere a tali dati.
Ad esempio, immaginiamo di avere due file contenenti dati che dobbiamo mettere in relazione tra loro. Un file è nel formato A e l’altro nel formato B (non citiamo formati realmente esistenti proprio per sostenere l’assoluta validità generale di questo meccanismo). Pandas importerà entrambi i file leggendone uno secondo il formato A e l’altro secondo il formato B, e il risultato consisterà in due DataFrame.
Tali DataFrame potranno essere messi in relazione indipendentemente dal formato di partenza e questo è un grandissimo vantaggio in quanto tale struttura dati è concepita per annullare totalmente le diversità che i formati di dati possono presentare tra loro e che normalmente costituirebbero un ostacolo per procedere ad un’analisi uniforme.
Tra i vari formati di dati che Pandas è in grado di trattare ne esiste uno che vanta una posizione dominante negli ambienti aziendali: Excel.
I DataFrame “capiscono” Excel
Excel, lo strumento per fogli di calcolo di Microsoft, gode di una posizione assolutamente centrale nella vita produttiva delle aziende. Quando negli uffici di qualsiasi settore si ha bisogno di analizzare dei dati, visualizzarli in grafici o svolgere calcoli ed analisi su di essi, tipicamente ci si rivolge ad Excel, che presenta diversi vantaggi:
- è molto diffuso in quanto parte della suite Office che Microsoft ha appositamente creato decenni fa per il mondo dell’ufficio;
- per usi comuni è assolutamente abbordabile e intuitivo, anche per chi non abbia esperienza di Informatica;
- permette, in maniera molto comoda, la formattazione dei dati per una creazione di report che siano non solo completi da un punto di vista informativo, ma anche gradevoli alla lettura e particolarmente comunicativi;
- permette di realizzare in maniera estremamente veloce dei grafici;
- per usi non banali, offre utilissimi e potentissimi strumenti di analisi nonché la possibilità di automatizzare il lavoro sfruttando le macro (procedure memorizzate nei fogli di calcolo) e la programmazione in linguaggio VBA (Visual Basic for Applications).
La sua grande diffusione ha portato negli anni alla creazione di un grande patrimonio informativo aziendale raccolto in fogli di calcolo e cartelle di lavoro Excel. Questo enorme successo ha moltiplicato le modalità con cui strumenti più tipici del mondo informatico hanno dato la possibilità ai programmatori di acquisire dati e scriverli da e verso i fogli di calcolo Excel. Pandas non fa eccezione e questo proprio perché, come detto in precedenza, la possibilità di acquisire dati da qualsiasi formato per dirottarli in DataFrame è uno dei pilastri della filosofia che ne è alla base.
Da qui vediamo che Pandas con tutte le altre librerie Python per Data Science e Machine Learning, interagendo perfettamente con il formato Excel, ha la possibilità di accedere al grandissimo bacino di informazioni rappresentate in formato Excel proponendosi come soluzione fondamentale anche per l’automazione all’interno di qualsiasi tipo di ufficio.
Mettiamolo subito alla prova vedendo come acquisire dati da fogli Excel e scoprendo come si possono superare agilmente alcune difficoltà che ci si potrebbero porre dinanzi.
Esempio 1: un dataset elementare
In questo primo esempio, vediamo come si possano facilmente importare dati da Excel in Pandas esportando risultati di analisi di nuovo in questo stesso formato.
Per prima cosa, abbiamo bisogno della libreria Pandas (supporremo di avere già installato il linguaggio Python con tanto di package manager pip) e di un altro strumento, openpyxl, per la lettura di fogli Excel.
Li mettiamo a disposizione del nostro ambiente di lavoro così:
pip install pandas openpyxl
Al termine dell’operazione potremo iniziare ad utilizzarlo per l’interazione con un semplice foglio di calcolo Excel che contiene dati relativi a ipotetici ordini come si può vedere in figura:
I campi della tabella rappresentano degli ordini commerciali dove:
- Ordine rappresenta un identificativo di un ordine inviato da un cliente. Se più righe contengono lo stesso numero d’ordine le considereremo facenti tutte parte del medesimo ordine;
- Prodotto include una descrizione del bene acquistato (tutti prodotti di fantasia);
- Prezzo indica il prezzo unitario, supponiamo in euro, del bene;
- Quantità indica la quantità acquistata nell’ordine di quel bene specifico;
- Importo non è altro che il risultato, per ogni riga, delle due colonne descritte ai punti precedenti ovvero il prezzo e la quantità. Nel foglio di calcolo è ottenuto come risultato di una formula.
Dicevamo trattarsi di un caso semplice ma questo non per la natura dei dati o per la loro quantità ma perché li vediamo organizzati come un normale dataset, niente di più: tutti i dati sono nell’unico foglio di calcolo della cartella, non sono formattati, non hanno celle aggregate, iniziano nella cella di coordinate A1 quindi senza lasciare righe e colonne vuote prima dei dati. Insomma, un foglio che rappresenta un dataset puro e semplice. Tutti i dati sono contenuti all’interno del file Ordini.xlsx.
Creiamo un semplice script Python – di nome pandas-excel.py – che si occupi di leggere tale foglio di calcolo in un DataFrame Pandas ed eseguire un raggruppamento per numero d’ordine in modo da calcolare il controvalore totale per ogni ordine (cosa che nel foglio di calcolo originale manca).
Alla fine, tutto il risultato ottenuto verrà salvato in un nuovo file Excel di nome Totale_ordini.xlsx.
Ecco il codice:
# importiamo Pandas
import pandas as pd
# leggiamo il foglio di calcolo Excel
df=pd.read_excel("Ordini.xlsx")
# calcoliamo i dati aggregati e salviamo di nuovo in Excel
df.groupby("Ordine")["Importo"].sum().to_excel("Totale_ordini.xlsx")
Eseguiamo pandas-excel.py da riga di comando con:
python pandas-excel.py
Per fare tutto ciò ed ottenere un qualcosa che nei nostri dati originali non c’era sono state sufficienti solo tre righe di Python (quelle che iniziano con # non contano in quanto sono commenti esplicativi).
All’interno del file prodotto, Totale_ordini.xlsx, troviamo quello che vediamo nella figura seguente:
ovvero una colonna che mostra il numero progressivo ed in corrispondenza di ognuno di questi l’importo totale dell’ordine.
Passiamo all’esempio n. 2 e poi traiamo delle conclusioni da entrambi.
Esempio 2: un foglio di calcolo formattato
Aggiungiamo qualche ostacolo in più a Pandas mostrando alcune caratteristiche possono sempre apparire in un foglio di calcolo creato nei nostri uffici non solo per contenere dati ma anche per renderli più leggibili ed organizzati.
Come si vede nella figura che segue abbiamo un foglio di calcolo che non è più l’unico della cartella né il primo in quanto appare in seconda posizione.
Inoltre, la tabella non è più posta nell’angolo in alto a sinistra ma ci sono celle vuote sia sopra di essa sia alla sua sinistra (i dati sono gli stessi del primo esempio).
Vediamo ora come adattare il nostro script di prima per superare questi ostacoli:
# importiamo Pandas
import pandas as pd
# leggiamo il foglio di calcolo Excel Ordini-formattato.xlsx
df=pd.read_excel("Ordini-formattato.xlsx", sheet_name="Ordini", usecols="C:G",skiprows=4)
# calcoliamo i dati aggregati dal foglio Ordini e salviamo di nuovo in Excel
df.groupby("Ordine")["Importo"].sum().to_excel("Totale_ordini_formattato.xlsx")
Il nostro script si chiama pandas-excel-formattato.py e lo possiamo eseguire da riga di comando con:
python pandas-excel-formattato.py
Le righe sono sempre tre e vediamo che gli ostacoli di cui sopra sono stati superati in maniera molto agile utilizzando nel metodo read_excel i seguenti argomenti:
- sheet_name=”Ordini” per indicare quale foglio di calcolo contiene i dati che ci interessano;
- usecols=”C:G” per indicare quali colonne contengono i dati che dobbiamo analizzare;
- skiprows=4 per segnalare che prima della tabella ci sono quattro righe vuote che pertanto andranno saltate.
Pandas porta i fogli Excel nel dominio del data scientist
I casi analizzati non sono troppo complessi infatti ci sono serviti per lo più a dimostrare l’utilizzo di Pandas in rapporto a cartelle Excel. Ancora non abbiamo visto quanto questa libreria ci possa aiutare nell’elaborazione di dati più complessi ma intanto ci siamo accorti di come tutto ciò che in Pandas serve a interagire con file Excel è già predisposto per affrontare quello che potremmo trovare nei nostri fogli di calcolo.
Ora, proviamo ad immaginare che tutto ciò, con la stessa semplicità, possa essere applicato a molti più file contemporaneamente, magari con dati più numerosi e articolati prodotti in azienda dal nostro business. Pandas permetterebbe di acquisire tutte queste preziose informazioni e coinvolgerle in procedimenti di analisi molto veloci, automatizzabili e aperti a ogni scenario di Data Science, uno tra tutti l’Intelligenza Artificiale (Machine Learning, Deep Learning, etc.).
Avete mai pensato che tutti i dati presenti in azienda potrebbero permettere con Pandas e altre librerie Python di fare previsioni sugli andamenti futuri o di ottimizzare i processi produttivi? Questa è solo una delle tante possibilità.