Pubblicato il

Combinare due CSV

Nei post precedenti abbiamo fatto esperienza sul formato CSV e sull’esplorazione dei suoi contenuti. Passiamo ora alla pratica più avanzata della combinazione tra due dataset. Il codice python pandas si trova alla fine dell’articolo.

Introduzione

Le ragioni per cui si può aver bisogno di combinare due dataset possono essere varie, in generale è utile per incrociare i dati e condurre un’analisi altrimenti impossibile. Abbiamo finora tentato un’interpretazione geografica di dati sanitari e realizzato la necessità di informazioni demografiche a complemento dell’analisi. Uno dei risultati raggiunti finora è il grafico del numero di posti letto negli ospedali in base alla regione d’Italia:

biggest_hospitals

Avendo l’impressione di un forte disequilibrio tra le regioni, abbiamo deciso di approfondire tenendo conto del numero di abitanti presenti nelle regioni stesse. Per calcolare i Letti per Cittadino dobbiamo quindi ottenere i dati sul numero di abitanti nelle regioni, che vanno presi da un altro dataset perchè queste informazioni non sono disponibili nel dataset originario.

Il secondo dataset

Il numero dei cittadini presenti nelle municipalità italiane è disponibile in questo dataset scaricabile da dati.gov.it. Il processo per caricarlo in memoria è simile a quello seguito per il primo dataset, con la differenza che in questo caso specifichiamo per il comando read_csv quale carattere usiamo per le migliaia. Numeri come “10.345” potrebbero altrimenti essere interpretati come 10 con qualche cifra decimale invece di 10345. E’ a mio avviso una cattivissima idea utilizzare punti o virgole per indicare le migliaia in dataset fatti per essere letti da algoritmi, ma sappiamo che la pulizia dei dati è una pratica inevitabile nella Data Science.
Dopo aver caricato i dati, lanciamo groupby per raggruppare i cittadini dei comuni per regione e sum per sommarli. Il risultato è la lista delle regioni con associato il numero di abitanti.

Integrazione dei dataset

Il primo passaggio da seguire è l’identificazione di una variabile presente in entrambi i dataset (chiamata key) per poterli unificare (operazione di join). Pandas mette a disposizione la funzione join per incrociare due dataframe, alla condizione che contengano entrambi una variabile chiamata allo stesso modo (nel nostro caso  Codice Regione). Ci sono diversi tipi di join e molte opzioni, per cui vale la pena di leggere la documentazione. L’operazione nel complesso può essere schematizzata così:

JOIN

Analisi

Adesso che tutti i dati sono al loro posto, aggiungiamo una colonna Letti per Cittadino dividendo il numero di letti in ogni regione per il numero di abitanti della regione. Vediamo le statistiche descrittive e il grafico aggiornato:

count 21.000000
mean 0.003663
std 0.000365
min 0.002924
25% 0.003359
50% 0.003716
75% 0.004008
max 0.004245
Name: Letti per Cittadino, dtype: float64

beds_per_citizen

Come ci aspettavamo, correggendo in numeri con le informazioni demografiche rivela una storia differente. La Lombardia, che sembrava possedere un numero spropositato di posti letto rispetto alle altre regioni, non è più neanche al primo posto. Le differenze tra le varie regioni sono attenuate, con la regione peggiore (Calabria: 0.002924) al ~68% della migliore (Emilia: 0.004245).

Il Molise sembra essere l’unica regione del sud Italia a posizionarsi in alto nel grafico, mentre in basso troviamo solo regioni del sud (Sicilia, Puglia, Campania, Clabria). Per visualizzare meglio le differenze nord-sud sarebbe utile una mappa con le varie regioni colorate in proporzione ai dati. Il nome tecnico di tale procedimento è choropleth ed è piuttosto difficile da realizzare in python, linguaggio fantastico per l’analisi e l’esplorazione dei dati ma non versatile abbastanza per le visualizzazioni interattive. In uno dei prossimi post realizzeremo un choropleth da far girare direttamente nel browser, utilizzando librerie Javascript come D3Leaflet.

Conclusioni

Il percorso del post conferma ancora una volta l’importanza di dare un contesto ai dati, per calibrare le interpretazioni e prendere decisioni più sagge. Gli Open Data sono uno strumento potente, a patto che padroneggiamo un insieme di capacità (data literacy) per pulirli, combinarli, analizzarli, visualizzarli ed interpretarli.
Nell’ultimo decennio la necessità di un ecosistema dei dati più integrato ha dato vita ad un dibattito interessante tra scienziati, politici, imprenditori e attivisti di tutto il mondo. Tecnologie potenti come i database a grafo e i linked data stanno conoscendo una diffusione sempre maggiore e meritano di essere trattate nei prossimi post.

Codice

Un pensiero su “Combinare due CSV

  1. […] omogenea. Tratteremo entrambe le questioni in post futuri, perchè richiedono l’integrazione di questo dataset con risorse esterne (“incrociare i […]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *