Portfolio data analyst

Portfolio Data Analyst

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.

Dati input da Excel

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

data_frame = pd.read_excel(io = “ExcelSorgente.xlsx”, sheet_name = “Input”)

L’analisi richiesta dal progetto si presta facilmente ad essere implementata con il linguaggio SQL. Per questo nella prossima sezione vedremo come trasferire i dati dal dataframe di Pandas ad una tabella del database relazionale SQL Server.

 

Salvataggio dei dati in un database relazionale

Tramite la libreria pyodbc possiamo connetterci con Python ad 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à:

  1. importare la libreria pyodbc;
  2. creare la connessione tramite il metodo connect;
  3. creare un cursore a partire dalla connessione precedente;
  4. inserire tramite il cursore i dati all’interno di una tabella di SQL Server;
  5. eseguire il commit dell’istruzione;
  6. chiudere il cursore.

All’interno dello step 4 possiamo valutare se eliminare le righe già presenti nella tabella, relative ad 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 data_frame.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 < ‘2019-05-01’ THEN Valore ELSE NULL END) AS ValorePre,
AVG(CASE WHEN Data >= ‘2019-05-01’ 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.

Import dei dati in Excel

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:  

Dashboard Excel

 

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

Torna su