Quando il dittatore conviene – the making of

di Davide Mancino – datajournalism.it

Qualche giorno fa è uscita su Wired la mia inchiesta in due parti sulla vendita di armi in Siria e, più in generale, sull’export italiano di equipaggiamenti militari. Se n’è parlato un po’ anche sul gruppo di discussione dedicato al data journalism, dove c’era qualche curioso del dietro le quinte del lavoro. A grandi linee è andata così.

Il punto di partenza è stato il lavoro del CAAT, dove si sono presi la briga di fare scraping dei documenti ufficiali europei sul traffico di armi e infilare tutto in un bel database. “Ah beh, allora era già tutto pronto”, direte voi. Ecco, no. Questo è il file come appare appena aperto in Calc:

Come vedete ci sono diversi problemi:

1) Manca l’intestazione delle colonne;

2) La colonna G, che intuitivamente sembra indicare i totali, contiene dei numeri che non hanno molto senso (13 euro? Cosa hanno venduto, uno stuzzicadenti?).

Bisogna capire che stiamo guardando. Alcune cose sono chiare da subito:

1) Ogni riga rappresenta una transazione di qualche tipo;

2) La colonna A indica l’anno della transazione;

Scorrendo in basso capiamo che la colonna C rappresenta il paese di origine, quella D di destinazione. Ne mancano altre 4.

Un po’ di spiegazioni sono sullo stesso sito del CAAT, altre su Github:

1) La colonna B indica se la nazione oggetto della transazione era sotto embargo (valore “1”) o meno (valore “0”);

2) La colonna E indica il “cosa”: di che equipaggiamento si parla in ogni riga? Al CAAT hanno usato le convenzioni dell’UE contenute in questo documento. Troviamo 22 diverse categorie (da ML 1 a ML 22, ovvero “armi leggere”, “aerei e droni”, “veicoli” eccetera);

3) La colonna F specifica invece il tipo di transazione: può essere la quantità di licenze approvate, il valore delle stesse, il valore dei beni esportati, o la ragione per cui una licenza è stata rifiutata (in base ai criteri definiti in un altro documento UE).

Per semplificarmi la vita ho preso queste informazioni e le ho usate per fare una serie di sostituzioni nel foglio di calcolo. Ho anche fatto un po’ di pulizia generale togliendo doppi spazi e altri orrori simili, salvando man mano le tabelle:

Abbiamo così un foglio che comincia ad avere un po’ di senso:

Allo stesso tempo, però, esso mischia ancora mele e pere: non ha senso tenere insieme numero di licenze rifiutate e approvate, valore dei prodotti venduti in licenza (cioè autorizzazioni) e valore dei prodotti effettivamente esportati. Sono tutte cose diverse, per ciascuna delle quali ho fatto dei filtri e costruito quattro diverse tabelle.

Mi interessavano i numeri delle autorizzazioni alla vendita in licenza, perché sono gli unici disponibili per tutte le nazioni europee e che consentono di fare confronti sensati. Germania e Gran Bretagna, per esempio, non sempre forniscono dati sulle esportazioni effettive.

A questo punto, qualche settimana fa, la Siria era appena tornata sui media di tutto il mondo, così ho pensato di dare un’occhiata per vedere chi esportava lì e quanto tramite delle pivot. Visto che c’ero ho anche aggiunto un altro po’ di nazioni potenzialmente interessanti:

(immagine a risoluzione maggiore qui)

Già qui di storie da raccontare ce ne sarebbero parecchie. Intanto però si vede subito che su un totale di 27,7 milioni diretti in Siria quasi 17 arrivano dall’Italia. Ecco la notizia.

Ora fidarsi è bene, non fidarsi è meglio: e se al CAAT avessero commesso un errore? Automatizzando l’estrazione di dati da grandi file di testo è sempre possibile che scappi qualcosa. Sarebbe davvero poco simpatico sparare il titolaccio in homepage per poi essere smentiti il secondo dopo.

Con un po’ di ricerche e domande in giro sono arrivato ad altre due fonti: Giorgio Beretta di unimondo.org, esperto di affari militari, e in secondo luogo alla bibbia dell’export della difesa italiana: la relazione annuale del Governo.

In teoria sarebbe bastato cercare i totali nei documenti per vedere se combaciano, una roba da poco. Ancora una volta: no. Mai sottovalutare la capacità dei ministeriali italiani di complicare le cose. Infatti i documenti non sono veri e propri file di testo, ma immagini scannerizzate da documenti stampati, perdipiù a una risoluzione tale da renderli enormi e ingestibili.

(Per dare un’idea: cercando i dati italiani 2012 l’ufficio stampa della Camera mi comunica che il file è troppo grande e non può mandarlo per mail perché i servizi pubblici di posta non ce la fanno. Soluzione proposta: spedire i volumi tramite posta fisica.)

Tocca dunque infilare i file in un OCR, unire i diversi tomi in un documento unico per ogni anno, e lavorare con quello. Se volete dare un’occhiata alla differenza, i documenti “ripuliti” sono qui (notate come quasi solo in questi ultimi sia possibile fare ricerche di parole chiave nel testo). D’altra parte si trattava di migliaia e migliaia di pagine, se avessi voluto leggerli ci sarebbe voluta un’infinità di tempo (e probabilmente avrei sbagliato qualcosa). Per sicurezza controllo i dati anche nei documenti europei, e i totali combaciano.

Un dettaglio importante: per motivi che mi sfuggono le relazioni ufficiali italiane indicano o l’importo della transazione o il tipo di equipaggiamento. Spesso a una prima occhiata è impossibile capire esattamente cosa abbiamo venduto a chi, e infatti i dati del CAAT non indicano informazioni sulla Siria. Come ho scritto nella visualizzazione alla fine del primo articolo, bisogna incrociare i totali fra vari documenti.

Nel frattempo Giorgio Beretta mi segnala alcuni dei suoi ottimi articoli sul tema Siria (fra cui questo e questo), che mi consentono di ricostruire in dettaglio la storia degli equipaggiamenti dal 1998 a oggi.

Infine con Guido Romeo decidiamo di dividere l’inchiesta in due parti: nella prima si parla soltanto di Siria, mentre nella seconda ampliamo un po’ il punto di vista e mostriamo – tramite una mappa interattiva che ho costruito in base agli stessi dati – quali equipaggiamenti militari ha venduto l’Italia dal 2001 al 2011.

In origine il primo pezzo avrebbe dovuto includere una timeline, poi in corso d’opera ho preferito usare Prezi, un semplice ma potente strumento per realizzare presentazioni. In base ai risultati sembra che non sia così male per lo storytelling: è forse la cosa più vicina a un video che si possa fare senza ricorrere a un video vero e proprio.

Il budget segreto al Washington Post

Il Washington Post ha pubblicato, in esclusiva, un’analisi data-driven del budget “nero” delle agenzie di intelligence americane. Al di là del valore dell’inchiesta, interessante di per sé, è un bell’esempio di lavoro che mescola in modo efficace forma e contenuto.

Uscito l’altro ieri, oggi appare così:1

 

Ovvero diviso in due parti: articolo “classico” (titolo) e visualizzazione dei dati (occhiello).

 

 

 

Il pezzo è invece questo:

2

L’immagine iniziale (animata, nell’originale) rimanda alla visualizzazione. Il testo fa esattamente quello che un testo deve fare: raccontare la storia. Come mi è stato detto una volta: “I dati possono dirti come, ma non perché“. Questo sta a noi scoprirlo (e, se vogliamo, è anche la cosa più divertente).

È interessante anche il modo in cui la visualizzazione viene presentata:

3

Lo stile è, se possibile, il contrario esatto di quello usato dai giornali italiani. Semplice, minimale, in bianco e nero, senza banner né altri elementi a interferire con la lettura. Una delle difficoltà di questo tipo di lavori è che richiedono spazio: moltissimo spazio.

Spesso – a volte lo faccio anch’io, per necessità – si crea un’immagine che rimanda alla visualizzazione a tutto schermo. Tutto sommato non è male come soluzione, ma al Post (e anche al Times, da quel che vedo) tendono a essere molto più radicali. Le immagini funzionano molto meglio quando sono grandi, e mappe o infografiche non fanno eccezione. Dunque la soluzione diventa uno stile (si parva licet) alla Apple: via gli orpelli e tutto quello che non serve.

Ovviamente questo si applica soltanto alle visualizzazioni, non a tutti i contenuti (altrimenti i pubblicitari s’arrabbiano e i conti esplodono). Eppure non mi sembra una cattiva idea: vale sempre la pena sperimentare.

Data Journalism: avanti piano

Due o tre cose a proposito del lavoro di data journalism di Raphael Zanotti, su La Stampa, relativo al femminicidio).

Il buono:

– È data journalism, non c’è dubbio. Il che è già un gran miglioramento rispetto a certe altre robacce. La parola “data” può essere complicata, mi rendo conto, ma tutto sommato non è così difficile: il data journalism si fa con i dati. Ficcare il testo dentro Illustrator e mixarlo con qualche clipart carina non fa neppure un’infografica decente, figurarsi data journalism. Nel lavoro di Zanotti invece i dati ci sono. Sembra un’ovvietà, e invece…
– È la prima volta che vedo Tableau Public su una testata italiana (a parte un lavoro in corso che ancora non avete visto, ma pazientate, ormai manca poco!). Che dire: finalmente. Lo strumento è molto potente, e tutto sommato anche piuttosto facile da usare. Sono sicuro che diventerà presto uno dei più comuni;

Il brutto:

– Zanotti sceglie di riportare i dati in una mappa. Eccola qui:

Mappa

In blu sono segnate le vittime del 2012, in arancione del 2013. Ora, al volo, provate a rispondere a una domanda: in quale anno ce ne sono state di più? A occhio si direbbe il 2012. Ma quanto arancione è nascosto al di sotto? Non c’è modo di saperlo.
Qui salta fuori una delle cose che le mappe fanno peggio: i confronti temporali fra fenomeni. Non che siano impossibili, s’intende, ma richiedono una ulteriore dimensione di variabilità che può consistere, per esempio, in mappe multiple; o come in questo caso nell’uso di colori diversi. L’occhio umano però non è tanto in grado di fare confronti sensati fra colori o aree. E con questa arriviamo al prossimo punto.

– Il grafico più grande, in basso, riporta la correlazione fra età e numero delle vittime in questo modo:

Grafico

Ora: sarò lento io, ma prima di capire esattamente cosa volevano dirmi esattamente queste barre ci ho messo un po’. Come mai vanno dall’azzurro al blu, e una sola è in rosso? Dopo un po’ si capisce, ma perché far fare al lettore un ulteriore lavoro d’interpretazione? Questo grafico dovrebbe semplificargli la vita; fargli dire all’istante: “Ah, le trentenni sono le più a rischio”, ma non è così.
Per rimediare sarebbe sufficiente aggiungere l’indicatore della variabile anche sull’asse delle Y, e poi (volendo) aggiungere qualche dettaglio per evidenziare ancora di più gli outlier. Questo è uno dei casi in cui applicare il Data-Ink ratio per chiederci: “Ma serve davvero colorare le barre?”

Il cattivo:

– L’ultima volta che ho controllato Tableau indicava che questo lavoro è stato visualizzato meno di 2000 volte. Certo, è appena uscito. Ma come mi raccontava tempo fa un esperto, di solito il 90% delle condivisioni/visualizzazioni avviene nei primi due giorni. Sono tante o poche? Poche, purtroppo; pochissime, per il terzo quotidiano nazionale. Il mio ultimo lavoro su Linkiesta, per esempio, è stato letto quasi 40mila volte (sorry, è l’unico di cui conosco i dati certi), e Linkiesta non ha certo il seguito de La Stampa.
Perché questa differenza? A me l’idea di fondo sembra molto buona (anzi, mi dispiace non averci pensato!). Diamo però un’occhiata a questo:
Pagina

Sono di buon umore, perciò faccio il bravo e i commenti su “La mappa dell’orrore” li lascio a chi legge. La cosa che si vede subito però è la funzione ancillare del pezzo interattivo rispetto all’articolo di cronaca. Si parla di “speciale”, d’accordo. Ma la notizia qual è? Manca anche solo una riga per spiegare il fenomeno o le tendenze mostrate dall’infografica; non c’è nessuna analisi dei dati. Lo vedo spesso anche sul Corriere: succede qualcosa, c’è il pezzo classico e poi, in un angolino, la “mappa”, il “grafico” e così via.

Ma questo non rende giustizia alle potenzialità del data journalism. I testi non sono intrinsecamente superiori alle visualizzazioni (e viceversa). Sono entrambi strumenti per comunicare un’idea, e in un lavoro che si basa sui dati devono essere studiati per lavorare insieme. Le visualizzazioni sono ottime per sintetizzare tante informazioni, ma è molto difficile renderle emotivamente significative come un testo. Gli articoli, per loro natura, sono qualitativi. Quando contengono troppe informazioni si trasformano in (noiosissimi) elenchi.

È un lavoro di sinergia fra le parti, come un orchestra. Se l’armonia è imperfetta il lettore se ne accorge, d’istinto, e reagisce di conseguenza.

chiazzenere – the making of

Pochi giorni fa su datajournalism.it è stato pubblicato un articolo (più mappa interattiva) intitolato chiazzenere – la mappa dell’inquinamento industriale in Italia, che ho realizzato in base ai dati pubblicati nella ricerca Sentieri. Si tratta di uno studio epidemiologico molto vasto che ha analizzato gli effetti sulla popolazione dell’inquinamento industriale in 44 siti diversi, sparsi in tutta Italia.
Se siete curiosi dei dettagli tecnici, ecco come ho realizzato la mappa:

INGREDIENTI

Software
Quantum Gis
Libre Office
Un account su CartoDB
7-zip

Dati geografici
Regioni italiane (fonte: ISTAT)
Comuni italiani (fonte: ISTAT)

Studi scientifici
P. Comba et. al., Ambiente e salute a Taranto: evidenze disponibili e indicazioni di sanità pubblica; Epidemiologia & Prevenzione 2012
R. Pirastu et. al., SENTIERI – Studio epidemiologico nazionale dei territori e degli insediamenti esposti al rischio da inquinamento: risultati; Epidemiologia & Prevenzione 2011
Dati grezzi e disaggregati dello studio

RICETTA

Molte delle mappe più semplici sono basate su singoli punti o su aree geografiche ben note come nazioni, regioni o comuni. Per esempio in un altro lavoro fatto qualche tempo fa avevo bisogno di un file che indicasse alla mappa dove tracciare i confini delle nazioni. Fare questo è piuttosto semplice, perché file di questo tipo sono già preparati e basta importarli dentro cartodb (o fusion tables, o qualsiasi altra piattaforma simile) per avere i nostri bei confini sulla mappa.
Ogni nazione rappresenta una riga in un foglio di calcolo, come su Excel, e intervenendo sulle colonne si può assegnare a ciascuna tutte le informazioni da rappresentare sulla mappa.
La cosa che mi ha preso più tempo, appena ho iniziato a lavorare sul data journalism, è stata capire dove trovare le informazioni geografiche di cui avevo bisogno. Una volta scoperti quei due o tre siti utili, però, è andata subito molto meglio.
Il caso di chiazzenere è stato diverso. La stessa idea di fare una mappa sullo studio Sentieri mi è venuta guardando come gli autori dello studio hanno rappresentato il loro lavoro, ovvero così:

Mappa originale dello studio Sentier

I confini dei diversi siti, così come rappresentati in quest’immagine, non sono disponibili già fatti: bisogna costruirli. Qui entra in gioco Quantum Gis. Apriamo il file dei comuni in questo programma (non serve aprire l’archivio zip, basta trascinarcelo dentro), e comparirà una mappa di tutti i comuni italiani con i relativi territori.

A noi però interessano solo alcune aree specifiche, composte da uno o più comuni. I siti variano dal singolo comune di Broni, in Lombardia, fino all’area dell’Agro Aversano, composta invece da decine e decine di comuni diversi. Per farlo andiamo nella colonna di sinistra, clicchiamo col tasto destro su “Com2008_s” e scegliamo “Interrogazione”.
Comparirà una finestra per fare una query in SQL (il linguaggio per parlare ai database). Da qui dovremo dire a Quantum GIS quali comuni scegliere, fra tutti quelli disponibili. Nel caso della zona di Broni basterà scegliere solo quel valore.

Clicchiamo sull’icona “Zoom Completo” per centrare l’immagine sulla nostra selezione…

e vedremo così il solo territorio del comune di Broni.

Se invece vogliamo selezionare una zona composta da più comuni andiamo a cercare nello studio quali comuni compongono l’area che ci interessa. Per esempio a pagina 10 troviamo quella di Cengio e Saliceto:

Riportiamo tutti i nomi dei comuni. La sintassi è questa:

Completata l’operazione, se tutto è andato nel verso giusto, Quantum GIS avrà selezionato le aree che ci interessano escludendo tutto il resto.
Una volta fatto questo dovremo salvare ciascuna zona cliccando ancora su “Com2008_s” con il tasto destro e scegliendo “Salva con nome”. Come formato del file indichiamo “ESRI shapefile”, diamogli un nome (facendo caso alla cartella in cui verrà salvato il file!) e clicchiamo su OK. Accertiamoci anche il sistema di riferimento scelto sia “WGS 84”, altrimenti CartoDB potrebbe fare i capricci. Ripetiamo il processo per tutti i siti, e alla fine ci troveremo con le 44 aree che ci interessano.

Andiamo ora su CartoDB. Una volta nel nostro account, trasciniamo nella finestra il file con il confine delle regioni. Non sono indispensabili alla visualizzazione, ma aiutano il lettore a navigare nella mappa e cercare i luoghi che gli interessano. Andando su “Map View” e cliccando su “Wizards” possiamo impostare le proprietà grafiche. Se invece siamo più esperti possiamo lavorare direttamente sul CSS, cioè il foglio di stile che stabilisce come deve apparire la mappa, e che ci permette di controllarne molti più aspetti.
Il codice che ho utilizzato per i confini delle regioni era questo (attenzione ai punti e virgola: imparerete a odiarli, ma servono altrimenti il codice non funziona!):


#regioni {
polygon-fill:#800000;
polygon-opacity: 0.4;
polygon-comp-op: src-over;
line-opacity: 0.6;
line-color: #800000;
}

Ognuno di questi attributi controlla una proprietà nel disegno della mappa: riempimento e opacità dell’interno dei poligoni, colore e opacità delle linee esterne a essi e così via. Molte delle possibili proprietà che si possono modificare nel foglio di stile CSS sono descritte qui.
Applichiamolo, e da arancione la mappa diventerà rossa e più trasparente, con i confini più scuri. Se la mappa base non ci piace possiamo cambiarla cliccando sul pulsante indicato nel cerchio rosso.

Torniamo su Table e creiamo una nuova colonna. Chiamiamola “layer”. A ciascuna delle 20 aree, in questa colonna, dovrà essere assegnato il valore “regione” per identificarle. Possiamo inserirli a mano, oppure usare un altro comando SQL per fare tutto insieme, come nell’immagine. Cancelliamo tutte le altre colonne che non ci interessano (“cod_reg”, “shape_area” e così via): il primo layer della mappa – appunto quello delle regioni – è così completato.

Ora tocca ai siti inquinanti veri e propri. Abbiamo 44 zone diverse (in altrettanti shapefile) e due alternative: inserirle una alla volta, oppure mescolare tutto (comprese le regioni) in un solo file. Quantum GIS dispone di una funzione che fa proprio questo: unifica diversi shapefile. Si trova nel menu “Vettore”, andando su “Strumenti di gestione dati” e poi su “Unisci shapefiles”.
Confesso però che non sono riuscito a farla funzionare a dovere, e così ho dovuto arrangiarmi in modo un po’ più noioso. CartoDB accetta gli shapefile senza problemi, basta trascinarli nella schermata principale come abbiamo fatto con il file delle regioni (che erano shapefile anch’essi). L’unica accortezza è che i 5-6 file che formano ogni sito devono essere compressi in un unico file zip. Per farlo usate l’apposito 7-zip.

Se trasciniamo il nostro Saliceto.zip in CartoDB otterremo una nuova tabella con diverse informazioni. L’unica che ci interessa è quella della colonna “the_geom”, che contiene la struttura dei poligoni utile a disegnare la geografia che ci interessa. Facciamo doppio clic su “Polygon” e copiamo il contenuto. Apriamo la tabella delle regioni e incolliamone il contenuto in una nuova riga. Creiamo anche una nuova colonna (“sin”) e diamo il nome giusto alla nostra zona – “Saliceto”, appunto – per poi passare alla prossima.
Fatto questo per tutti i 44 siti, assegniamo anche ad essi un valore per la colonna “layer”: chiamiamola “area”.
Ognuna di queste righe conterrà anche i rispettivi dati epidemiologici, per cui saranno necessarie diverse altre colonne a seconda delle informazioni che vogliamo comunicare. Qui ne troviamo alcune.

Ora possiamo dare un nome decente al nostro lavoro. Clicchiamo su “regioni”, in alto a sinistra, e rinominiamo l’intero lavoro chiamandolo “chiazzenere” Possiamo poi tornare sulla mappa, nella sezione CSS, per dire a CartoDB in che modo colorare i due diversi layer. Ogni parte di codice andrà a riferirsi in modo specifico a uno di essi:


#chiazzenere [layer='regione']{
polygon-fill:#800000;
polygon-opacity: 0.4;
polygon-comp-op: src-over;
line-opacity: 0.6;
line-color: #800000;
}


#chiazzenere [layer='area']{
polygon-fill:#000000;
polygon-opacity: 0.8;
polygon-gamma: 1;
polygon-comp-op: src-over;
line-width:1;
line-opacity:0.4;
line-color: #FF0000;
}

Un’altra cosa importante sono le etichette di ogni zona, di cui andremo a stabilire tutti gli attributi:


#chiazzenere::labels {
text-name: [sin];
text-face-name: 'DejaVu Sans Book';
text-size: 15;
text-fill: #FFFFFF;
text-allow-overlap: false;
text-halo-fill: #000;
text-halo-radius: 0.2;
text-wrap-width: 30;
text-opacity: 1;
text-line-spacing: -3;
text-dy: -10;
text-align: center;
}

Qui in realtà il codice della mappa vera e propria è molto più complicato. Per facilitare la leggibilità la dimensione delle etichette ho fatto in modo che gli attributi delle etichette variassero a seconda del livello di zoom, ma per ora ignoriamo pure questo dettaglio.
Ci sono poi le icone che identificano gli inquinanti di ciascun’area. Dopo averle create in Photoshop (attenzione ai diritti, non copiate!) e caricate su un servizio di hosting di immagini gratuito (come http://postimg.org/) bisognerà associarle alle rispettive aree sulla mappa. Per esempio così.


#chiazzenere [sin='Saliceto'] {
marker-file: url('http://s20.postimg.org/jzrs638vx/industrie_discariche.png');
marker-allow-overlap: true;
marker-ignore-placement: true;
marker-placement: interior;
marker-opacity: 0.2;
marker-line-color: #FF0000;
marker-line-width: 2;
marker-clip: false;
}

Anche qui il codice è più complesso e l’immagine varia con lo zoom, ma l’idea di base funziona così. E questo è il risultato finale.

C’è anche altro da aggiustare come le infowindows (cioè le finestre informative che si aprono quando clicchiamo su un oggetto), che si possono modificare dal menu apposito. CartoDB però non ne permette una gran personalizzazione, quindi dovremo accontentarci.

Ci sono poi tanti altri piccoli dettagli da sistemare, ma per ora meglio fermarci qui.
L’unico vero modo per imparare, come al solito, è metterci le mani sopra.