In questo articolo vi descrivo un progetto di Data Management che ho realizzato insieme ai miei studenti, con l’obiettivo di supportarli nella creazione di un portfolio da Data Analyst. In questo modo hanno costruito delle prove tangibile delle skill acquisite durante le lezioni.
Progetto di Data Management con Python, Sql Server e Excel
Un processo completo di trasformazione di dati grezzi in informazioni con valore decisionale è un percorso abbastanza lungo che richiede una serie di skill variegate: occorre essere in grado di acquisire i dati nei più svariati formati, analizzarli tramite un approccio dichiarativo o predittivo, presentare i risultati in una dashboard fruibile e accattivante, automatizzare e orchestrare l’intero processo. Vediamo insieme un esempio di progetto che racchiude tutte queste attività.
Partiamo da un file sorgente di Microsoft Excel contenente un elenco di esperimenti eseguiti in un laboratorio chimico. Le dimensioni di analisi del foglio sono la data dell’esperimento, l’operatore che lo ha condotto e la molecola soggetto dell’attività. Ogni esperimento ha un certo valore associato (la colonna da misurare) che è un indice di quanto l’esperimento abbia dato risultati interessanti.

Supponiamo che a partire da una certa data (ad esempio il 1 maggio 2020) gli esperimenti relativi a delle particolari molecole (ad esempio quelle che iniziano con AB) sono state effettuate con un nuovo strumento. Scopo dell’analisi è misurare quanto l’introduzione di questo strumento abbia impattato i valori degli esperimenti. Nelle prossime sezioni descriverò come abbiamo gestito tutti i singoli step di analisi.
Acquisizione dei dati con Python
Tramite la libreria Pandas di Python è possibile acquisire l’Excel all’interno di un dataframe con pochissime righe di codice:
import pandas as pd
df = pd.read_excel(io = "ExcelSorgente.xlsx",
sheet_name = "Input")
L’analisi richiesta dal progetto si presta facilmente a essere implementata con il linguaggio SQL. Per questo nella prossima sezione vedremo come trasferire i dati dal dataframe di Pandas a una tabella del database relazionale SQL Server.
Salvataggio dei dati in un database relazionale
Tramite la libreria pyodbc possiamo connetterci con Python a un database SQL Server. In questo articolo pyodbc è indicato come driver di riferimento per la connessione con Python https://docs.microsoft.com/it-it/sql/connect/python/python-driver-for-sql-server?view=sql-server-ver15.
Il codice dovrà eseguire queste attività:
- importare la libreria pyodbc;
- creare la connessione tramite il metodo connect;
- creare un cursore a partire dalla connessione precedente;
- inserire tramite il cursore i dati all’interno di una tabella di SQL Server;
- eseguire il commit dell’istruzione;
- chiudere il cursore.
All’interno dello step 4 possiamo valutare se eliminare le righe già presenti nella tabella, relative a una precedente esecuzione. Per popolare la tabella di SQL Server scriveremo quindi un ciclo for che itera le righe e l’indice del dataframe creato in fase di acquisizione. Tale codice avrà questa struttura:
for index, row in df.iterrows():
cursor.execute("INSERT INTO \
CorsoSQL.dbo.Staging \
(Giorno, Valore, Data) \
VALUES(?,?,?)",
row.Giorno,
row.Valore,
row.Data)
Creazione di una vista su Sql Server
Una volta che i dati sono stati importati all’interno di una tabella, dobbiamo interrogarli tramite il linguaggio SQL. Possiamo filtrare gli esperimenti di interesse (le molecole che iniziano con AB) tramite una condizione WHERE che utilizzi l’operatore LIKE. In seguito creeremo due subquery che calcolano, rispettivamente, i dati prima e dopo la data indicata nel progetto. In questa fase i dati devono essere raggruppati tramite una GROUP BY e aggregati calcolando la media della colonna di interesse. Le informazioni restituite della due subquery saranno infine confrontate e combinate tramite una JOIN.
Nonostante non sia particolarmente difficile scrivere questa query, essa dimostrerà che si è in grado di eseguire le operazioni più frequenti di analisi dei dati, vale a dire il filtro (WHERE), l’aggregazione (GROUP BY e AVG), la combinazione (JOIN) e le trasformazioni (ad esempio per calcolare la differenza percentuale tra i valori precedenti e successivi la data di analisi). In questo articolo ho approfondito come imparare a scrivere una query.
Uno sviluppatore SQL più esperto potrebbe implementare il codice in maniera più compatta utilizzando in modo furbo la funzione CASE WHEN:
SELECT
Operatore,
AVG(CASE WHEN Data < '20190501'
THEN Valore
ELSE NULL
END) AS ValorePre,
AVG(CASE WHEN Data >= '20190501'
THEN Valore
ELSE NULL
END) AS ValorePost
FROM Esperimenti
WHERE Molecola LIKE 'AB%'
GROUP BY Operatore;
Inoltre si potrebbe arricchire il progetto aggiungendo dei controlli di data quality propedeutici all’attività di analisi.
Il codice SQL sarà salvato in una Vista del database, utilizzata nel passo successivo su Microsoft Excel.
Data Visualization su Excel
I dati calcolati nello step precedente devono essere resi chiari e fruibili per essere comunicati e compresi da chiunque è interessato ai risultati. SQL Server Management Studio non permette operazioni di formattazione dell’output come la creazione di grafici. Creiamo allora all’interno di una cartella di lavoro Excel un collegamento al database SQL Server utilizzato precedentemente, come mostrato nella figura in basso.

A questo punto sceglieremo di collegare su Excel la Vista creata nel punto precedente e aggiungere tutti gli strumenti di Data Visualization più idonei alla comunicazione dei risultati:
- formattazioni e stile del testo;
- grafici;
- pulsantiere per interagire con i dati;
- bottoni collegati a macro per eseguire attività come l’export in formato PDF.
Senza molto sforzo, il risultato finale potrebbe essere simile a questo:

Orchestrazione e automatizzazione con Python
L’ultima attività da svolgere è l’automatizzazione in un unico script Python di tutte le attività descritte finora. Tale script conterrà:
- il codice visto nella prima sezione per acquisire i dati di input;
- l’interazione con il file Excel contenente la dashboard tramite la libreria win32com.client.
Poiché la Vista creata sul database contiene soltanto il codice SQL e non i dati, la sua interrogazione restituirà ogni volta i risultati ottenuti a partire dall’ultimo file importato. Occorrerà solamente aggiornare l’Excel per caricare i nuovi dati restituiti dalla vista e salvare il file di output in formato pdf.
Pubblicazione su Github
Tutto il codice scritto, i file di input e di output possono essere salvati all’interno di un repository di Github o magari descritti all’interno di un sito web, il cui link verrà poi condiviso nel curriculum o con chi di interesse. Ecco ad esempio come appare il mio repository contenente il progetto descritto in questo articolo https://github.com/iantomasinicola/PortfolioDataAnalyst
Continua a imparare
Nel mio corso completo di Analysis troverai 50+ ore di formazione, cinque guide step by step per costruire il tuo portfolio con SQL, Python, MongoDB, Excel e Power BI e svariati progetti da risolvere in autonomia e su cui ricevere feedback personalizzati.