Palermo, popolazione residente per cittadinanza, UPL , Quartiere e Circoscrizione – 2018

Grazie al Dr Girolamo D’Anneo, Responsabile Studi e Ricerche Statistiche e Ciro Spataro  dell’Area Servizi alla città Servizio Innovazione  U.O. Transizione al Digitale, entrambi funzionari del Comune di Palermo, sono stati pubblicati i dataset relativi alla popolazione residente, italiana e straniera.

I nuovi dataset mi hanno permesso di replicare e migliorare il lavoro fatto nel post Milano e Palermo: le mappe della distribuzione della popolazione straniera residente nel 2018, dove  il dataset su Palermo non era esattamente ideale, in quell’esercizio i dati sono stati estratti da una tabella pdf, GLI STRANIERI A PALERMO NEL 2018pagina 21, Tavola 6: Cittadini al 31/12/2018 per cittadinanza a circoscrizione.

I dati

Per realizzare i grafici e le mappe abbiamo scelto 2 dei 12 dataset pubblicati in opendata dal Comune di Palermo, e sono: Stranieri residenti a Palermo al 31/12/2018 per Unità di primo livello e cittadinanza e Popolazione residente a Palermo al 31/12/2018 per Unità di primo livello e cittadinanza, scelti perché contengono l’informazione sulla cittadinanza distribuita nella UPL (Unità di primo livello), avere come identificatore geografico la sezione censuaria dell’ISTAT sarebbe stato l’ideale, più accurata è la distribuzione geografica dei residenti, più sarà realistica la mappa a densità di punti.

Come prima cosa abbiamo unito i due dataset, notiamo che manca il dato sul “genere” (maschio/femmina), per le mappe è ininfluente, ma nei grafici potrebbe essere utile per ulteriori analisi.

La tabella dei dati di base è composta da 56 righe e N colonne, una per ogni Nazionalità presente a Palermo. Per il nostro progetto questo tipo di ordine è poco utile, per noi è importante conoscere quanti residenti di ogni singola Nazionalità abitavano in una UPL, ovvero tutte le colonne delle Nazionalità dovevano essere trasposte da colonne in righe, mantenendo le colonne con le info sul territorio, UPL, quartiere e circoscrizione.

Tutto questo lavoro è stato fatto come per magia da @aborruso con VisiData e Miller

Ecco la nuova tabella dati, le colonne Cittadinanza e Residenti sono il frutto della magia di Andrea, in seguito sono state aggiunte le colonne del Continente e Sub-Regione di provenienza per avere ulteriori livelli di analisi sulla popolazione. Questa nuova tabella è stata la nostra base dati, con un dataset ripulito e ordinato si lavora meglio 🙂

Tutti i dati rielaborati da @opendatasicilia e usati per il progetto sono disponibili in unico dataset su – data.world – Popolazione residente a Palermo – 2018 – UPL

Residenti stranieri a Palermo

Gli stranieri residenti a Palermo nel 2018  sono 25.735 e rappresentano 130 Nazionalità, oggi sono il 3,83% della popolazione totale (670.954). Chi sono questi stranieri? Da dove vengono? Quanti sono? Dove vivono? Qual’è il rapporto stranieri/italiani nel territorio? Tutti i dettagli delle statistiche più recenti nei grafici e nelle mappe.

Il Viz sottostante presenta le Nazionalità di tutti gli stranieri che vivono a Palermo. Il 46,75% proviene da Paesi asiatici, il 31,60% da Paesi africani, il 18,61 proviene da Paesi europei,  il 3,03% sono di provenienza americana,  e solo 0,02% provengono dall’Oceania.

I cittadini Bangladesi, Singalesi, Ghanesi e Romeni da soli costituiscono più della  metà (57,41%) di tutti gli stranieri residenti a Palermo.

Dalle mappe e dai grafici emerge che nel centro stroico (quartieri Palazzo Reale – Monte di Pietà e Tribunali) c’è la maggior presenza di residenti stranieri con 5.183 residenti pari al 20,14%  , seguono i quartieri di:

  • Politeama 3.710 residenti – 14,42%;
  • Libertà  1.444 residenti – 5,61%;
  • Zisa 2.531 residenti – 9.83%;
  • Noce  2.248 residenti – 8,74%;
  • Oreto Stazione 4.230 residenti – 16,44%

che da soli ospitano 19.346 residenti, pari al 75,17% del totale dei residenti.

La presenza straniera si è quasi triplicata negli anni duemila raggiungendo a Dicembre 2018 il livello di 25.735 cittadini (il 3,83% dei residenti, è l’8,5% a livello nazionale) con un rapporto di genere abbastanza equilibrato.

In basso il Viz realizzato con Tableau PubblicPalermo, popolazione residente per cittadinanza, UPL , Quartiere e Circoscrizione – 2018


Palermo, popolazione residente per cittadinanza, UPL , Quartiere e Circoscrizione – 2018


Mappa One-person-one-dot

La mappa a densità di punti è un’istantanea su Palermo, fornisce una chiara una visualizzazione della distribuzione geografica, della densità di popolazione e delle diversa nazionalità
di residenti stranieri a Palermo in ogni UPL (unità di primo livello), quartiere e circoscrizione della Città. La mappa mostra 25.735 punti, uno per ogni persona che risiede a Palermo. Per semplificare la visualizzazione, ogni punto è codificato per colore dalla Sub-Regione di provenienza della persona.

Le posizioni dei punti non rappresentano gli indirizzi reali. L’identificatore geografico più dettagliato nei dati è il blocco (poligono) delle UPL, non sono diponibbili ad oggi i dati dei residenti stranieri per le zone censuarie dell’ISTAT.
I singoli punti sono posizionati casualmente  all’interno del blocco delle UPL per associare i totali di popolazione aggregata per quel blocco.
Di conseguenza, i punti in alcuni blocchi potrebbero trovarsi in mezzo a parchi, cimiteri, o altre aree chiaramente non residenziali all’interno di quel blocco UPL.
Una rappresentazione più accurata della distribuzione geografica dei residenti è possibile solo se i dati disponibili tengono conto di parchi, edifici e/o indirizzi fisici. Pertanto, la posizione dei singoli punti potrebbe essere condizionata da dati più dettagliati.

Come realizzare la mappa a densità di punti…?

Ecco un interessante post One-person-one-dot maps and how to make them che ci spiega in modo efficace cosa sono le mappe a densità di punti e come realizzarle con QGIS.

In sintesi, sono necessari due file: uno del territorio che si vuol mappare e i dati statitici che vogliamo rappresentare di quel territorio. Nel post precedente è spiegato in dettaglio il procedimento.


Mappa densità di punti elaborata con QGIS


Mappa densità di punti elaborata con QGIS e Leaflet

Mappa a densità di punti (One-person-one-dot) Palermo, popolazione residente per cittadinanza, UPL , Quartiere e Circoscrizione – 2018

Ciascuno dei 27.735 di punti è più piccolo di un pixel sullo schermo del computer nella maggior parte dei livelli di zoom. Pertanto, le “macchie di colore” che si vedono a livello comunale sono in realtà aggregazioni di molti punti individuali. Lo zoom è stato bloccato a 14 per facilitare la lettura d’insime.
Ogni punto sulla mappa è anche codificato per colore in base alla Sub-Regione di provenienza:

  • giallo, Asia del sud;
  • blu, Sud-est asiatico;
  • rosso, Nord Africani;
  • fuscia, Asia orientale;
  • verde, Africa sub-sahariana;
  • ceruleo, europeri appertaneti alla EU
  • arancio, europei fuori dall’UE
  • rosa, Sud America;
  • marrone, tutti gli altri.

Mappa densità di punti elaborata con Mapbox e Carto

Calcolati i punti utilizzando  la funzione ‘Random points in polygons’  di QGIS, come descritto nel post precedente, possiamo realizzare una mappa a densità di punti direttamente con mapbox o con cartodb, utilizzando un file .geojosn o un semplice file .csv con le coordinate dei punti (lat. long)  esportsati da QGIS, entrambe le piattaforme portano allo stesso risultato (tiles) utilizzando tecniche diverse. Stessa cosa si può realizzare con D3.js una libreria JavaScript per manipolare documenti basati su dati.

La mappa realizzata com mapbox è stata utilizzata come mappa di base per il Viz realizzato con Tableau Pubblic, disattivando tutti gli strati informativi della mappa di base è lasciando attivo solo il layer dei punti che rappresentano gli stranieri residenti a Palermo.


Fonte dati: Comune di PalermoDati sul territorio –  Stranieri residenti a Palermo al 31/12/2018 per Unità di primo livello e cittadinanza e Popolazione residente a Palermo al 31/12/2018 per Unità di primo livello e cittadinanza – distribuiti con Licenza CC BY 4.0 IT

Dataset rielaborato da @opendatasiciliadata.world – Popolazione residente a Palermo – 2018 – UPL


Riferimenti:

Brussels. A lovely Melting-Pot.
One Dot Per Person for the Entire United States
Miller
VisiData
QGIS
Leaflet
Mapbox
Cartodb
Datawrapper
Tableau Public


Ringrazziamenti

Generare Open Data con un FOIA? Quasi, l’esempio della Fiera del Mediterraneo.

La “Fiera del Mediterraneo” è lo storico “quartiere fieristico” di Palermo.

Il “quartiere” occupa un’area di circa 83 mila m² ed il suo ingresso principale è in Piazzetta Nelson Mandela.

Dal 1946 al 2012 il quartiere fieristico è stato gestito dall’Ente Autonomo Fiera del Mediterraneo, ente che è stato liquidato nel 2019 dopo undici anni di inattività fieristica.

L’08 Agosto del 2012 il Comune di Palermo prende in gestione il quartiere fieristico.

Tre anni più tardi, dal 23 Maggio al 7 Giugno del 2015 ritorna la Fiera Campionaria del Mediterraneo, organizzata dall’impresa Medifiere, che dal 2015 ha poi organizzato la Fiera Campionaria con cadenza annuale.

L’11 Dicembre 2018 all’interno del quartiere fieristico è stato inaugurato lo Scalo 5B, un coworking ed officina che rappresenta il primo padiglione della fiera aperto in via continuativa tutto l’anno, con un suo calendario di eventi.

Nonostante l’attività all’interno della Fiera sia ripresa nel 2015, il quartiere non ha mai beneficiato di un sito internet dedicato, contenente informazioni logistiche e infrastrutturali del quartiere, e neanche un calendario di eventi.

Nel 2017 e nel 2018 vengono pubblicati sul sito del Comune di Palermo, in maniera del tutto sporadica, due Pdf contenenti le richieste di svolgimento degli eventi all’interno della Fiera.

I problemi sono due:

  • la pubblicazione è fatta in Pdf, un formato che non è “Machine Readable”.
  • la pubblicazione non ha una periodicità definita.

Per questo motivo, l’01 Marzo 2019 scrivo all’U.R.P. del Comune, chiedendo il rilascio di un dataset in open data contenente l’”ELENCO RICHIESTE SVOLGIMENTO EVENTI FIERA DEL MEDITERRANEO ANNO 2019” nel formato CSV, come da “Linee guida per le attività sugli open data della città di Palermo” – Deliberazione di Giunta Municipale n. 97 del 4.05.2017.

Lo stesso giorno l’U.R.P. gira la richiesta via mail all’ufficio competente, il settore servizi alle imprese, ma non ricevo risposta.

Qualche giorno dopo  ho l’idea di provare a richiedere i dati con lo strumento dell’accesso civico generalizzato , cosiddetto “FOIA”.

L’accesso civico generalizzato permette a chiunque di richiedere dati e documenti posseduti dalle pubbliche amministrazioni, con il limite degli interessi pubblici o privati indicati dalla legge, senza dover motivare le ragioni della richiesta.

Tra me e me penso che su un calendario di attività fieristiche non ci siano interessi privati da proteggere, visto anche il precedente della pubblicazione dei calendari in Pdf.

Cerco quindi “Accesso civico Comune Palermo” su un motore di ricerca ed arrivo a questa pagina contenente il Modulo di Richiesta  Accesso Civico Generalizzato e le sue istruzioni.

La buona notizia: il modulo previsto dal Comune prevede espressamente la voce “dati”.

Cancello quindi la parola “documenti” dal modulo ed inserisco come oggetto della richiesta un “un dataset nel formato comma separated values con elenco richieste svolgimento eventi Fiera del Mediterraneo anno 2019, contenente società / associazione richiedente, oggetto iniziativa, area richiesta, periodo richiesta.”

In pratica, sono gli stessi dati contenuti nei Pdf precedentemente pubblicati dal Comune, ma aggiornati al 2019 ed espressamente richiesti nel formato di file “Comma-separated values”.

Il modulo da compilare richiede veramente poco altro, tra cui i miei dati anagrafici e la copia del documento d’identità.

Notare la cosa più importante, come da normativa il modulo NON richiede di esplicitare la motivazione per cui si richiede un dataset.

Il 29 Marzo del 2019 spedisco l’accesso civico all’U.R.P. del Comune, dopo un giro di mail interne il 04 Aprile 2019 arriva al Vice Segretario Generale del Comune ed al settore servizi alle imprese del Comune.

Attendo i trenta giorni previsti dalla normativa per una risposta, ed il 21 Maggio 2019 decido di riscrivere all’U.R.P. chiedendo il numero di protocollo che era stato assegnato all’accesso civico.

Questa richiesta è propedeutica ad una eventuale richiesta di riesame dell’accesso civico, la cui modulistica non è presente sulla pagina del Comune ma su quella del dipartimento della Funzione Pubblica.

Il giorno dopo aver richiesto il numero di protocollo assegnato alla richiesta di accesso civico generalizzato dall’U.R.P., il 22 Maggio 2019 ottengo via mail dal settore servizi alle imprese del Comune il dataset in CSV che avevo richiesto.

Il 28 Maggio 2019 ho sollecitato il settore servizi alle imprese alla pubblicazione sul Portale Open Data del Comune del Dataset che mi è stato inviato, visto che al momento non risulta ancora reperibile sul Portale Open Data.

Conclusioni:

  • L’accesso civico generalizzato si è rivelato uno strumento giuridico idoneo a richiedere un dataset, potrebbe quindi essere utilizzato dalla comunità open data per richiedere esplicitamente dataset e non documenti.

A questo proposito, sarebbe necessaria l’introduzione di un automatismo per la pubblicazione sui portali open data dei dataset richiesti con accesso civico.

  • Dalla prima richiesta originale all’U.R.P. del calendario di eventi alla ricezione effettiva del dataset sono trascorsi più di due mesi.

Il dataset contiene un elenco di 43 eventi organizzati presso la Fiera del Mediterraneo.

 

Milano e Palermo: le mappe della distribuzione della popolazione straniera residente nel 2018

1-2 giugno si svolgerà a Milano il raduno di Spaghetti Open Data del 2019 (in breve SOD19) presso la Fabbrica del Vapore, il programma e le proposte per l’hackathon del raduno si discutono nella Mailing-list di Spaghetti Open Data, tra tutte le proposte la mia attenzione è stata attirata dal post di Alberto Cottica, ovvero provare a fare una versione milanese della visualizzazione di Bruxelles Melting Pot.
In breve, è una mappa one person one dot dove ogni pixel rappresenta un abitante non nato in Italia. Il colore del pixel rappresenta la nazionalità: europea, nord-africana, asiatica etc. La mappa serve a capire se c’è segregazione spaziale. A Bruxelles c’è, con gli europei che abitano più a sud e est, i nord africani a nord e ovest, i turchi a nordest etc. (cit)L’idea mi affascina e visto che non potrò andare al raduno, penso… Se sul portale open data del Comune di Palermo ci sono i dati statistici sulla popolazione residente al 2018, perché non farne anche una versione palermitana…e dare il mio piccolo contributo al raduno ?

Per realizzare una buona mappa occorre un dataset come quello pubblicato dal Comune di Milano, con i dati anagrafici della popolazione residente distinta per anno, età, sesso, cittadinanza e quartiere, cosa che non sono riuscito a trovare per Palermo.
Sulla popolazione residente straniera ho trovato solo una pubblicazione in pdf  GLI STRANIERI A PALERMO NEL 2018 sul sito tematico Pubblicazioni Statistiche.

Sfogliando la pubblicazione pdf, a pagina 21 noto una tabella, Tavola 6: Cittadini al 31/12/2018 per cittadinanza a circoscrizione; non era esattamente quello che cercavo, ma pazienza, con un po di lavoro in più si possono tirar fuori i dati anche pdf 🙂

Come replicare la mappa di Bruxelles Melting Pot

Studiando gli esempi  suggeriti da Alberto Cottica, (Mailing-list di Spaghetti Open Data)  Bruxelles Melting Pot e One-person-one-dot maps and how to make them replicare la mappa non è impossibile.

Gli ingredienti di base sono:

  • Dataset ben strutturato di dati statistici;
  • Dataset dei poligoni del territorio da analizzare;
  • Semplici conoscenze del software QGIS o altri software GIS

Visto che il Comune di Milano rende disponibile in opendata entrambi i dataset, ho preferito iniziare  da Milano l’analisi della popolazione residente; capito il metodo, lo si può replicare in tanti altri casi.

Grazie a Tommaso Dardi per aver indicato dove trovare i dataset di Milano  – Popolazione: residenti per cittadinanza e quartiereTerritorio: localizzazione dei quartieri della città (Nuclei d’Identità Locale – NIL)

Il dataset sulla popolazione residente di Milano è un ricchissimo file con le serie storiche dal 1999 a 2018: contiene 2.136.906 di righe, indigeste ai normali fogli di calcolo, proprio per questo motivo sul portale è consigliato l’uso di pacchetti statistici o software per la gestione di database (DataBase Management System), in quanto i file possono superare il numero massimo di record supportato dai normali fogli elettronici.Per il mio test ero interessato soltanto ai dati relativi all’anno 2018. Per estrarli ho usato QGIS, ma si può fare in altri modi, come importando il file in data.world ed eseguendo una query per anno, oppure utilizzando VisiData come il maestro @aborruso.Con una semplicissima selezione “Anno” = ‘2018’ otteniamo i dati di nostro interesse.Non ci resta che salvare la selezione, adesso con 131.162 elementi è più semplice lavorare.

Esempio di estrazione dei dati dell’anno 2018  con data.world e queryCon data.world è sufficiente importare il file .csv scaricato dal portale opendata del Comune di Milano Popolazione: residenti per cittadinanza e quartiere e scrivere una nuova query:

select * from ds27_pop_sto_quartiere where ds27_pop_sto_quartiere.anno like "2018"

cliccare su Run query e  dopo qualche secondo di attesa otteniamo i dati relativi all’anno 2018.

Estratti i dati del 2018 possiamo iniziare a giocare 🙂

Come strutturare i dati

Il nostro obbiettivo è quello mappare i residenti di ogni quartiere, aggregati per Paese, Continente o Sub-Regione di provenienza. Come prima cosa dobbiamo conoscere il numero totale dei residenti aggregati per Paese, Continente e Sub-Regione di provenienza.

L’aggregazione, può essere fatta velocemente con le Tabelle-Pivot (grazie Andrea Borruso), per comodità ho usato Google sheets,  la stessa procedura può essere fatta con Libreoffice ed Excel e con QGIS usando il plugin Group Stats (grazie a Salvatore Fiandaca per le info QGIS).

Ad un primo confronto con i dati di Bruxelles mi rendo conto che nei dati di Milano mancano le informazioni sul Continente e la Sub-Regione di provenienza, per cui è necessario aggiungere due colonne ed aggiungere le relative  informazioni.Con l’aiuto di wikipedia.org ho trovato le Sub-Regioni:

Dal sito Eurostat Statistics Explained:

Aggiunte le nuove info, possiamo costruire tutte le tabelle-pivot necessarie per la nostra analisi.La tabella in alto rappresenta l’aggregazione della popolazione residente per quartiere e sub-regione di provenienza, visto che vogliamo fare anche un confronto residenti stranieri e italiani, quest’ultimi non sono stati inseriti nella sub-regione, (EU-15).

Il campo dell’anno si poteva omettere visto che sono tutti dati dello stesso anno, il campo IdNil, ci tornerà utile nelle operazioni da fare con QGIS

Mappa One-person-one-dot

Come realizzare la mappa a densità di punti una persona un punto…?  Ecco un interessante post One-person-one-dot maps and how to make them che ci spiega cosa sono le mappe a densità di punti e come realizzarla QGIS.

In sintesi, sono necessari due file: uno del territorio che si vuol mappare e i dati statitici che vogliamo rappresentare di quel territorio.

Carichiamo i file in QGIS, per comodità mi sono creato un Geopackage, dove ho caricato i file necessari al test. Eseguiamo una Join tra i poligoni (nilzome) e le tabelle che abbiamo estratto in precedenza, usando come campo unione ID_NIL, selezioniamo solo le colonne utili e lasciamo vuoto il campo del prefisso da utilizzare per le nuove colonne.Ecco la nuova tabella, con il totale dei residenti vari quartieri, aggregati per sub-regioni.

Adesso non ci rimane che creare un nuovo layer di punti casuali, utilizzando i poligoni dei quartieri, uno per ogni subregione.Aprire il pannello Strumenti Processing, dal menù ‘Processing’ –> ‘Strumenti’,  scrivere nel cerca il nome del comando da eseguire, ‘Punti casuali dentro poligoni’, in inglese ‘Random points in polygons’ e:

  1. Selezionare il vettore d’ingresso, potrebbero esserci più layer di poligoni;
  2. selezionare il campo/espressione che si desidera mappare
  3. Dare un nome al file e specificare il percorso di salvataggio, se lasciato vuoto verrà creato un file temporaneo;

cliccare su esegui, nel giro di pochi secondi il nuovo layer sarà generato.Se dobbiamo ottenere ‘N’ layer, uno per ogni sub-regione possiamo eseguire un processo in serie.Prima di selezionare la colonna dati da mappare, clicchiamo su ‘Esegui come processo in serie‘ e configuriamo i parametri nella nuova finestra.Questa volta il processo sarà più lungo e dobbiamo attendere qualche minuto. Andrea Borruso e Salvatore Fiandaca sono a lavoro per uno script #arigadicomando, che velocizzi e automatizzi tutto il processo. La mappa inizia a prendere vita, diminuendo la dimensione dei punti la mappa sarà più leggibile.Per fare un confronto con mappa di Bruxelles Melting Pot non ci resta che adottare gli stessi colori.

Ecco le mappe a densità di punti della popolazione residente di Milano 🙂

Qui il dataset costruito con tutte le tabelle-pivot ricavate dal google-sheets e rielaborato con Andrea Borruso e Salvatore Fiandaca, usato per il test, della popolazione residente a Milano nel 2018; il dataset contiene i dati anagrafici della popolazione residente distinta per età, sesso, cittadinanza e quartiere e il geojson dei quartieri di Milano (Nil – Nuclei d’Identità Locale), per poter replicare il test e miglioralo, e per  realizzare altri elaborati. Licenza CC0

Grafico realizzato con Tableau Public che mette a confronto la popolazione residente, italiani e stranieri nei quartieri, aggregati per genere.


Il caso Palermo

Capito il metodo, torno a lavorare sulla mappa di Palermo, sicuro di dover faticare un pò di più 🙂

Come già detto i dati di base non sono ideali, li devo ricavare da una tabella in un file pdf, GLI STRANIERI A PALERMO NEL 2018, pagina 21, Tavola 6: Cittadini al 31/12/2018 per cittadinanza a circoscrizione.

A questo punto la domanda mi sorge spontanea… chiudo tutto e vado a fare una passeggiata a Mondello o mi armo di pazienza e vado avanti…?

Dopo qualche minuto di perplessità ha prevalso  l’amore per Palermo…si va avanti 🙂

La prima cosa da fare e convertire la taballa pdf human learning in una tabella machine learning, fortunatamente è un file pdf a è posso copiare direttamente la tabella nello sheet. Prossimo passo organizzare un dataset simile a quello di Milano e Bruxelles per poter replicare l’esperienza.Contestualmente alla riorganizzazione dei dati, aggiungiamo le colonne, Continents e Subregions, perché a me interessa l’aggregazione per Sub-Regione. Con i dati in possesso non è stato possibile suddividere i cittadini Europei in EU-N13, EU-15, EU28 e Europeans out of EU. Sempre con Tabella-Pivot ho estratto i dati della popolazione residente a Palermo nel 2018, aggregata per Circoscrizione e Sub-Regione di provenienza.

Per replicare la mappa è necessario il file con i poligoni del territorio, in questo caso i le aree delle circoscrizioni sono state estratte dal dataset ISTAT Basi territoriali e variabili censuarie – Censimento 2011.


Mappa One-person-one-dot – Palermo

La procedura per ottenere i layer puntuali con QGIS è la stessa vista in precedenza, è cambiata la finalità, oltre alle immagini statiche, desidero ottenere una webmap, utilizzando QGIS e LeafletDopo aver ottenuto i singoli file di punti per ogni Sub-Regione ho usato la funzione ‘MergeFondi vettori, per ottenere un solo file di punti, più semplice da tematizzare.Caricato e tematizzato il nuovo layer, tutto è pronto per realizzare la webmap. Con il plugin QTiles vengono create le piastrelle ‘Tiles‘  del layer di punti, con il plugin qgis2web, viene creato tutto il pacchetto base delle webmab, usando il layer delle Circoscrizioni. Con Dreamweaver o con qualsiasi altro software che lavori con file html, si assemblano tutte le parti.

palermohub.opendatasicilia.it/stranieri_residenti_suregions

Per il grafico all’interno del tooltip è stata usata la webapp datawrapper (grazie Andrea Borruso)Sempre nella mappa non manca un Viz realizzato con Tableau Public e con i pochi dati disponibili.

Qui il dataset costruito con tutte le tabelle-pivot ricavate dal google-sheets e rielaborato con Andrea Borruso e Salvatore Fiandaca, usato per il test, della popolazione residente a Palermo nel 2018, disponibile su data.world.

L’insufficienza dei dati disponibili, per quartieri o zone censuarie, rende la mappa a densità di punti per popolazione la straniera residente a Palermo, è un mero esercizio di stile, non paragonabile alle mappe di Milano e Brussels. Se in futuro ci saranno dati più dettagliati si potrebbe rieseguire l’analisi.


Riferimenti:

Brussels. A lovely Melting-Pot.
One-person-one-dot maps and how to make them
QGIS
Datawrapper
Tableau Public


Ringraziamenti:

Palermo: un meraviglioso viaggio nel tempo grazie alla Biblioteca Comunale di Palermo

La Biblioteca Comunale di Palermo dal 26 ottobre del 2017 ha iniziato a pubblicare su Flickr alcune foto della Collezione fotografica di Enrico Di Benedetto, scattate a Palermo tra il XIX ed il XX secolo, tutte pubblicate con una licenza aperta che ne consente il riuso.

Da quel giorno ne sono state pubblicate poco più di 800 e questa collezione oggi è un archivio a suo modo unico, dal grande valore simbolico e culturale.

A me lascia senza fiato vedere ad esempio la galleria dedicata alla “Cala”, l’attuale porto turistico della città, nonché il più antico porto di Palermo. E questa foto denominata “Imbarco-Emigranti“, di circa 100 anni fa, merita di essere guardata e riguardata.

Note sull’archivio

L’archivio è composto da queste 20 gallerie:

Ogni foto è associata a un “corredo informativo” costituito da: titolo, posizione geografica, gallerie di appartenenza, tag, licenza e metadati (non sono dati presenti in tutte le foto, ma nella grandissima parte).

La posizione geografica viene inserita sfruttando una delle caratteristiche native di Flickr che consente di associare una foto a una posizione su mappa. Una volta fatto, all’elemento viene associata una struttura dati di questo tipo, in cui oltre alla coppia di coordinate è presente un’informazione geografica gerarchica (Italia > Sicilia > Palermo).

Per i metadati lo staff della Biblioteca ha accettato una nostra proposta (vedi paragrafo successivo). Flickr infatti non consente di metadatare in modo strutturato una foto, associargli un identificativo, un autore, un editore, la pagina, ecc. e l’unica possibilità per inserire informazioni di questo tipo è quella di sfruttare lo spazio per le note testuali.
E questo è il modo scelto (immagine di sotto) per il meraviglioso archivio della British Library.

Abbiamo aggiunto un elemento: inserire il testo della nota in una modalità che fosse nativamente non soltanto da leggere a video, ma anche un testo strutturato machine readable, trasformabile in una banca dati da interrogare, analizzare e trasformare.
E allora le note sono in YAML, un formato che è sia human che machine readable.

Ad ogni foto sono quindi associate informazioni con questa struttura tipo:

È leggibile chiaramente da un essere umano e contemporaneamente si può trasformare in dati “leggibili da una macchina”, sfruttando una qualsiasi libreria/modulo in grado di interpretare un testo YAML. Con yq ad esempio trasformo la stringa di input di sopra con <input.yaml yq '.|add', per avere indietro un “classica” rappresentazione JSON:

Nella struttura YAML c’è un errore (a causa di un mio suggerimento errato) – non ci dovrebbero essere i “trattini” che fanno da punto elenco – che per fortuna però non ha conseguenze sulla lettura dei dati.
Flickr inoltre fa un encoding dei caratteri inseriti nel campo note (gli “a capo” diventano \n, le virgolette &quot;, ecc.), ma basta saperlo e prendere le “contromisure” via script, per riportare il testo a una struttura YAML corretta.

Come nasce

Qui in OpenDataSicilia diverse persone hanno mostrato nel tempo interesse verso il riuso del patrimonio fotografico della Biblioteca Comunale di Palermo. Tra i primi Giulio Di Chiara e Ciro Spataro, che nel tempo hanno fatto diversi tentativi per porre in essere la cosa.

Quello riuscito, che ha portato a quanto descritto sopra, parte proprio da un’email di Ciro di settembre del 2017, che scrive a me e al Prof. Taibi queste parole:

[…] poniamo che l’Archivio Storico comunale e la Biblioteca comunale si convinca a creare un profilo FLICKR per postare migliaia di immagini frutto di scansioni di carte e manufatti storici e artistici su Palermo e la Sicilia custodite dentro le due strutture. Per valorizzare pubblicamente il patrimonio custodito, insomma open data. Così come fanno a Londra, a New York le Biblioteche pubbliche […]

Da lì parte uno scambio ricco tra Ciro, Davide, me e la Biblioteca, che ha portato in pochi giorni all’inizio della pubblicazione delle foto su Flickr.

Dati

Flickr consente l’accesso ai suoi dati tramite delle ricche API. Per usarle è necessario usare una API key, ottenuta la quale è possibile interrogarle con semplicità.

Un esempio è questo script bash – “bruttino”, perché molto ottimizzabile – che interroga le API per restituire:

Nota bene: da circa 10 foto non è stato possibile estrarre i metadati, perché ci sono dei piccoli errori nel testo sorgente.

Note conclusive

Quanto fatto dalla Biblioteca Comunale di Palermo è un esempio di valore: è facilmente replicabile, non costringe a rivoluzionare procedure interne, ha dei costi sostenibilirestituisce un bene comune digitale prezioso ed è pronto al riuso di persone e “macchine”.

Non è perfetto e si può fare (come sempre) di più e meglio, ma il progetto merita un plauso e un passaparola.

Nei prossimi giorni ci saranno delle sorprese 🎉🎉, degli esempi di riutilizzo di questi dati.

Casi di riuso

Dopo la pubblicazione di questo articolo i dati sono stati (evviva) riutilizzati. Ecco gli esempi:

Rendere pubblico il database delle infrastrutture del Comune di Palermo

Il recente crollo del ponte Morandi di Genova ha evidenziato l’importanza di conoscere lo stato di salute delle infrastrutture di un territorio e quello delle opere di manutenzione correlate. È importante per chi nella Pubblica Amministrazione –  a vario titolo – prende decisioni e fa scelte, così come per i cittadini che volessero poter conoscere queste informazioni, monitorarle e attivare eventuali azioni e scelte conseguenti.

Si tratta di dati che, per tutto il territorio nazionale, non sono però quasi mai disponibili pubblicamente.

Il Comune di Palermo il 24 agosto del 2018 ha dato notizia di svolgere da tempo un “Monitoraggio costante di tutti i 25 ponti che servono la viabilità cittadina” e che in particolare la “Prima attività che ha condotto l’ufficio infrastrutture (oggi infrastrutture e servizi a rete) dell’area tecnica della Riqualificazione Urbana ed infrastrutture (oggi rigenerazione urbana, opere pubbliche ed attuazione delle politiche di coesione) è stata la creazione di un catasto informatizzato, un vero data base delle infrastrutture e delle condizioni d’uso e di conservazione.
L’attività ha permesso il censimento di 25 fra infrastrutture di viabilità a ponte, viadotti o cavalcavia. Nell’ambito di tale procedimento sono state avviate verifiche speditive sullo stato delle infrastrutture viarie nel territorio comunale”.

Chiediamo all’“Area tecnica della riqualificazione urbana e della pianificazione urbanistica”, al Capo Area Nicola Di Bartolomeo e all’assessore alla “Rigenerazione Urbanistica e Urbana” Emilio Arcuri, di rendere pubblico il catasto informatizzato delle condizioni d’uso e di conservazione (citato nella relazione del 24 agosto).

Farlo sarebbe un atto (concreto e di valore) di trasparenza, apertura e efficienza nei confronti della cittadinanza e soprattutto farebbe da esempio e creerebbe emulazione (che su questi temi è proprio necessaria).
Questa richiesta viene pubblicata qui e inviata anche per email ai dott. Di Bartolomeo e Arcuri.

In attesa, alla luce dell’elenco dei ponti citati nella relazione, Gianni Vitrano (grazie) ha creato e pubblicato la mappa “Localizzazione dei ponti di Palermo” usando i dati di OpenStreetMap (utilizzando overpass-turbo.eu) e mettendoli ove possibile in relazione con i dati della suddetta relazione. Purtroppo al momento è poco più di un elenco e fornisce ben poche informazioni ma proviamo ad immaginarla completa di tutte le informazioni disponibili nel catasto informatizzato predisposto dal Comune, la mappa diventerebbe un valido strumento a disposizione della Pubblica Amministrazione e dei cittadini all’insegna della trasparenza ma anche creando opportunità di un utilizzo efficiente dei dati disponibili.

PalermoHub

bit.ly/PalermoHub

L’idea

Da qualche anno ho attivato un sito web amatoriale dove carico tutte le mie rielaborazioni opendata (prevalentemente sono mappe su Palermo), un repository GitHub ed un clone anche su SicilaHub, nonostante questo, spesso amici e colleghi mi contattano per avere i link delle mie mappe.
L’Atlante delle Carte Tecniche storiche di Palermo, la Variante Generale vigente di Palermo, la Cartografia e Ortofoto di base e Piano Stralcio di Bacino per l’Assetto Idrogeologico (P.A.I.) Regione Sicilia, sempre di Palermo, sono tra le mappe più richieste.
Da qui l’idea di PalermoHub, perché non mettere tutte le mappe in uno stesso contenitore, cosi da rendere più facile la loro fruizione?

Confrontandomi con @aborruso e @cirospat di opendatasicilia, la mia idea si è evoluta, perché limitarci alle mie mappe quando per esempio anche il buon Ciro ha una vastissima produzione di mappe su Umap?
A questo punto ci sembrato normale estendere l’idea a tutte quelle persone che pubblicano mappe opendata su Palermo.

Cosa è

PalermoHub di opendatasicilia.it è un contenitore di mappe realizzate/rielaborate da liberi cittadini o da civic hackers prevalentemente sul territorio comunale di Palermo, non ha alcun intento commerciale, l’unica finalità è mostrare le possibilità di rielaborazione e comunicazione offerte dagli open data o dati pubblici comunali, regionali, nazionali. Tutti possono contribuire alla crescita e alla divulgazione.

Il cuore di PalermoHub è il catalogo di ricerca Simile exhibit rielaborato in sitle Petrusino di opendatasicilia.it, un catalogo multitematico di siti web, applicazioni per dispositivi mobili, mappe online, servizi web e infografiche, con un’attenzione particolare alla Sicilia. Realizzato per permetterne una più facile individuazione ai più diversi tipi di utenza.
Viene spontaneo chiedersi…”ma se già c’è un catalogo come Petrusino, perchè duplicarlo…?”

In buona sostanza PalermoHub è un Petrusino specifico, oltre ad essere un catalogo monotematico su Palermo, è anche il contenitore delle mappe, un unico luogo fisico con funzionalità avanzate di ricerca e filtraggio per rendere facile ed intuitiva la ricerca delle mappe sul terriritorio Palermitano agli utenti.

Navigare tra le mappe di PalermoHub è semplicissimo, si può usare il menù posizionato sull’header di tutte le pagine, oppure utilizzando le funzionalità avanzate di ricerca disponibili direttamente nella homepage.

Tramite il pulsante “Categoria” del menù,  si accede alla lista delle mappe suddivise per categorie/tematismi. Basta selezionare e cliccare la categoria e il relativo tema per visualizzare la mappa.

 PalermoHub di opendatasicilia.it

Invece tramite le funzionalità avanzate di ricerca e filtraggio situate direttamente nella homepage si può affinare la ricerca usando i Tag, l’Autore, la data o la fonte dei dati.
Possono essere utilizzati simultaneamente più filtri per una ricerca avanzata.

PalermoHub di opendatasicilia.it

Anche il testo nella colonna “Titolo“o la clip nella colonna “Immagine” riportati in tabella nella home page, portano agevolmente alla mappa

PalermoHub di opendatasicilia.it


Contribuire

Far parte di PalermoHub è semplicissimo ed è gratis, basta inviare una richiesta di Pull Requests al repositoty Github includendo e documentando tutti i file necessari oppure inviando una richiesta alla mailing list OpenDataSicilia.it allegando i link o file della Vostra mappa, sarà nostra cura attivare le nuove pagine html per includere la nuova mappa.

Si può contribuire anche condividendo sui vari social il progetto PalermoHub e inserendo gli hastag: #PalermoHub @opendatasicilia

 PalermoHub di opendatasicilia.it - Pulsanti socialbit.ly/PalermoHub

(ATTENZIONE! se hai attivo un ad blocker, i tasti di condivisione non verranno visualizzati)

bit.ly/PalermoHub

Attualmente sono disponibili più di 80 risorse con diversi tematismi, oltre alle mappe realizzate dai menbri di opendatasicilia.it è presente la mappa dei monumenti abbandonati e dimenticati di Palermo, a cura di Giuseppe Mazzola per l’associazione Palermo Indignata, la mappa monumentale di Palermo e dell’Agro Palermitano, a cura di Marcello Petrucci e le meravigliose mappe di Guenter Richter realizzate con iXMaps

PalermoHub è fruibile sia da desktop che da mobile, si adatta facilmete a quasi tutti dispositivi mobile di ultima generazione, anche se il modello di riferimento nel segmento mobile è stato il vecchio Samsung Galaxy S3, con una rioluzione di 360 x 640.
Per una lettura ottimale delle mappe in mobile si consiglia l’uso di tablet di dimesioni minime 7 pollici ed una risoluzione di 960 x 600 px

Tutto il materiale rielaborato per Palermo Hub di OpenDataSicilia.it è distribuito con licenza Creative Commons Attribuzione – Condividi allo stesso modo 4.0 Internazionale (CC BY-SA 4.0) tranne diversa indicazione.
Licenza Creative Commons

Comune di Palermo: arrivano i dati in real time per alcuni degli autobus pubblici di AMAT

AMAT, la municipalizzata del Comune di Palermo, collabora da tempo con Moovit per i dati i real time di alcuni degli autobus della rete della città, visibili nella app dell’azienda.

Da oggi, tramite API e per 20 linee, sarà possibile in tempo reale accedere ai dati relativi agli arrivi di una linea del Trasporto Pubblico Locale ad una fermata.

Le linee sono: 100, 101, 102, 106, 108, 109, 124, 226, 246, 304, 307, 309, 327, 422, 619, 603, 704, 731, Navette Arancione centro storico ed Express.

Sarà possibile rispondere in modo programmatico a una domanda di questo tipo: “Mostrami i prossimi arrivi della linea 101 alla fermata Cavour“.

Sarà necessario di base fornire la API KEY del servizio, una coppia di coordinate dell’area del comune (per individuare il comune di Palermo), il numero della linea da monitorare e la fermata per cui si vuole il tempo di attesa (qui la documentazione ufficiale).

Ecco un esempio di query con cURL:

Che darà come risultato qualcosa con questa struttura:

La notizia è appena arrivata (la trovate in basso, nella descrizione di questo dataset) e non abbiamo fatto ancora nessun test serio, ma è un’ottima notizia. Perché avere in modo programmatico i tempi di attesa a una fermata per una linea, può generare servizi di gran comodità per i cittadini e per tutto l’indotto legato ai trasporti.
Almeno per quella parte di città coperta dalle linee per cui il servizio è attivo (chiederemo ad AMAT quali saranno le evoluzioni del servizio).

Creare un’app per smartphone per fotografare dei QR code da mettere in ogni fermata, che fatta la foto restituisca quando passeranno le linee servite, o un’app per Google assistant a cui chiedere “Ok google, quando passa da qui il 101?”, o un bot per Telegram o Facebook Messenger, è a questo punto cosa abbastanza semplice.

Una nota a caldo: chiediamo ad AMAT e al comune di pubblicare via API anche l’elenco delle linee per cui è abilitato questo servizio. Nel tempo cambieranno e sarà essenziale per gli sviluppatori avere un modo per essere avvisati automaticamente di queste variazioni.

A partire dal giugno del 2019 ci sarà il progetto City Compass (grazie Marco Lombardo per la segnalazione) – Piattaforma di gestione e tracciamento in tempo reale flotta autobus e Sistema integrato a servizio del cittadino per la previsione di arrivo dei mezzi di trasporto pubblico –  ma questa è un’altra storia.

Palermo Capitale italiana della Cultura 2018: rendere accessibili e riutilizzabili i dati sugli eventi

Sindaco di Palermo Leoluca Orlando
Assessore alle “Attività e Beni Culturali” del Comune di Palermo, Andrea Cusimano
Capo Area Cultura del Comune di Palermo, Sergio Forcieri
Assessora all’Innovazione del Comune di Palermo, Iolanda Riolo
Responsabile open data comunale Gabriele Marchese
Comunicazione Palermo capitale italiana della cultura 2018
Per conoscenza alla Presidenza del Consiglio Comunale

Egregi Signore e Signori,

Palermo è la Capitale italiana della Cultura 2018 e il 29 gennaio è stato il giorno della partenza, con l’evento del Teatro Massimo e il lancio del sito web ufficiale http://www.palermocapitalecultura.it/.

Si può fare cultura con la tecnologia e per questo vi chiediamo – persone, associazioni, aziende, ricercatori, liberi professionisti – di farlo proprio a partire dal sito web ufficiale.

Vi chiediamo di pubblicare in modalità “leggibili da una macchina” (machine readable) i dati sulle centinaia di eventi di “Palermo, Capitale italiana della Cultura 2018”.

In questo modo i principali motori di ricerca, le aziende di sviluppo software, chi usa i dati per promuovere il territorio e vendere servizi correlati (albergatori, aziende di noleggio auto, società di turismo, compagnie aeree, ecc.), potrà riutilizzare queste informazioni, e metterle a servizio di tutti in tutti gli spazi più comuni: in primis i principali motori di ricerca, i principali siti con mappe e ricerca di luoghi, i principali siti di prenotazione alberghi, B&B, affitto case, ecc., i principali siti che raccolgono e categorizzano eventi.

Se questi dati saranno pubblicati in modalità “machine readable”, tutto questo avverrà in modo automatico e probabilmente anche sorprendente e “Palermo, Capitale italiana della Cultura 2018” entrerà in modo spontaneo nelle tasche – negli smartphonedi tutti noi.

Il sito ufficiale è predisposto, perché espone già i dati sugli eventi tramite API (application programming interface), ovvero delle interfacce e delle procedure che rendono semplice e diretta la lettura dei dati su questi eventi da parte di un personal computer.

Un PC può infatti chiedere al sito dell’evento “mi dai per favore tutti i dettagli sugli eventi del 15 febbraio” in questo modo: http://www.palermocapitalecultura.it/api/eventi?data=2018-02-15

Vi chiediamo quindi di:

  • Aprire una nuova pagina dedicata all’accesso ai dati nel sito ufficiale;
  • documentare in questa le varie modalità di accesso in lettura, via API;
  • integrare, se possibile, ai dati già esposti anche le informazioni sui luoghi in cui si svolgono gli eventi (esporre quindi ad esempio le coordinate geografiche), dati che sembrano già essere disponibili sul sito;
  • associare ai dati esposti in queste modalità una licenza aperta che ne consenta il riuso e l’adattamento anche a scopo commerciale, con il solo obbligo di attribuzione della fonte (come ad esempio la CC BY 4.0).

Un’annotazione: le informazioni su un singolo evento sono fornite (sia sul sito, che via API) soltanto in italiano (in questo evento ad esempio la descrizione è in italiano e la tipologia è “cinema e spettacolo”). Sarebbe bene che fossero esposte anche (almeno) in lingua inglese.

Tutto questo potrà essere sfruttato anche dalle tante attività “locali” che erogano servizi territoriali basati su dati e informazione, e l’impatto di questa manifestazione sarà più forte e più orizzontale in termini culturali, di business, di tecnologia e di ricerca.

Il Comune di Palermo ha da anni investito “culturalmente” sui processi volti alla valorizzazione dei dati e in particolar modo dei dati aperti. Accettare la nostra richiesta confermerebbe l’impegno del Comune in questo ambito.

Certi di una vostra sensibilità, porgiamo cordiali saluti.

Firmatari

Associazione onData
Daniele Mondello, SunzeLab
Marcello Vetro, Olomedia
Marco Lombardo
Andrea Borruso
Davide Taibi, ricercatore CNR
Mario Grimaldi
Giovanni Pirrotta
Joska Arena
Nino Galante
Community OpenDataSicilia
Francesco Landini, Associazione Stand Up Sicilia
Lorenzo Perone
Giuseppe Pizzimenti
Fabio Maria Montagnino, Consorzio ARCA
Roberto Ragonese, PMO Coworking
Giuseppe La Mensa
Stefano La Barbera
Francesco Cimò, TalentPLAYERS
Eliana Messineo
FabLab Palermo APS
Giuseppe Ragusa
Giovan Battista Vitrano
Domenico Schillaci, PUSH
Maurizio Napolitano, OKFN Italy
Marco Alfano, Comitato Bene Collettivo
Francesca De Chiara, Fondazione Bruno Kessler
Leva Digitale APS
OpenPatti
Parliament Watch Italia
Jesse Marsh, Atelier Studio Associato
Ciro Spataro
Francesco Bianco, Arancia ICT
Isabel Matranga
Antonino Lo Bue, Sky UK
Francesco Passantino


Foto di © Marie-Lan Nguyen / Wikimedia Commons.

Leggere, interrogare e trasformare file XML da riga di comando

Intro

Il comune di Palermo ha pubblicato i dati pubblici e aperti sulle elezioni comunali dell’11 giugno 2017 in formato XML, con uno schema descritto in questo file.

Qui sotto ad esempio la struttura di uno degli oltre 200 file pubblicati.

L’XML è uno dei formati classici di pubblicazione di dati aperti, ma non è un formato per tutti. Molti utenti infatti non sono in grado di esaminarli.
Per la sua natura è facilmente leggibile da un calcolatore e ci sono varie modalità per farlo.

E con un’utility specializzata (XMLStarlet) e con un piccolo comando come questo di sotto, è possibile trasformare questo file XML in una “piatta” tabella con tutti i dati sui voti dei candidati di una lista al consiglio comunale, per ogni sezione elettorale (40 candidati per 600 sezioni, quindi 24000 record).

xmlstarlet sel –net -t -m //SV/V0/V1 -v @NUMERO -o , \
-v @VOTIVALIDI_C1 -o ,  -v ../@NUMERO -o , \
-v ../../@NUMERO -n \
http://comunali2017.comune.palermo.it/SEZ_3_82053_L12.xml

 

Qui sotto lo vedete in azione:

I dati sui risultati delle liste elettorali hanno questa struttura:

<SV NUMERO=1 NOME=SEZIONE 1 NOMEBREVE=SEZ. 1 UBICAZIONE= NUM_ZONA= NUM_ZONA2= TOTVOT=540 TOTVOTM=255 TOTVOTF=285 FLZEROVOT=N ELETTORI=1112 ELETTORIM=556 ELETTORIF=556 CONFERMATO=S VOTIVALIDI_C0=54 VOTIVALIDI_C1=37 VCAS_C1=0″ VCNAS_C1=”0″ VOTI_SOLO_C1=”0″ VOTIVALIDI_C2=”0″ VCAS_C2=”0″ VCNAS_C2=”0″ VCNAS_TOT=”0″ VOTI_SOLO_C2=”0″ VOTI_NULLI_SOLO_C2=”0″ VOTI_NULLI=”0″ NULLE=”21″ BIANCHE=”8″ CONFCONS=”S” MAXVOTVAL=”9″>
        <V0 NUMERO=12 VOTIVALIDI_C0=54 TOT_VOTIVALIDI_C1=37 TOT_VOTISOLO_C1=0>
            <V1 NUMERO=1 VOTIVALIDI_C1=5 VOTISOLO_C1=0 VOTCONASS_C1=0 VOTCONNONASS_C1=0 CIFRAIND=59 TOT_VOTIVALIDI_C2=0 TOT_VOTISOLO_C2=0/>
            <V1 NUMERO=2 …/>
            <V1 NUMERO=3 …/>        
        </V0>
</SV>

 

SV è la sezione elettorale con il suo numero identificativo (e altri attributi), che contiene al suo interno i dati su V0 che rappresenta la lista (in questo caso la 12, quella del “Movimento 5 stelle”), che contiene al suo interno V1, ovvero i dati sui candidati al consiglio comunale. Con questa struttura gerarchica SV>V0>V1.

Il comando di sopra nel dettaglio:

  • sel --net -t -m, abilito la selezione (sel) su un file remoto (--net), impostando un template (-t) per “mappare” gli elementi che corrispondono (“matchano” -m) alla seguente query XPATH;
  • "//SV/V0/V1", i candidati al consiglio;
  • "@NUMERO", l’attributo con il numero identificativo del candidato;
  • -o ",", per inserire un separatore di testo;
  • -v "@VOTIVALIDI_C1", l’attributo con i voti validi del candidato;
  • -o ",", per inserire un separatore di testo;
  • -v "../@NUMERO", mi muovo verso l’alto nella gerarchia dell’XML di un gradino con .., quindi vado in V0 (la lista) e recupero l’identificativo numerico della lista;
  • -o ",", per inserire un separatore di testo;
  • -v "../../@NUMERO", mi muovo verso l’alto nella gerarchia dell’XML di due gradini con ../.., quindi vado in SV (il seggio) e recupero l’identificativo numerico del seggio;
  • -n, per inserire un’andata a capo per ogni risultato ottenuto;
  • http://…/SEZ_3_82053_L12.xml è l’URL del file XML.

In output nella shell avrò:

1,5,12,1
2,9,12,1
3,2,12,1
…,…,…,…

Ovvero

numeroCandidato voti numeroLista sezione
1 5 12 1
2 9 12 1
3 2 12 1

Creare dei file CSV con i dati per tutte le liste

Ho pensato che possa essere molto interessante fare un esempio più ricco e completo e creare uno script bash per:

  • scaricare tutti i file XML delle 18 liste;
  • estrarre da ognuno l’anagrafica dei candidati consiglieri;
  • estrarre da ognuno il numero di voti, per ogni sezione, di ogni candidato al consiglio;
  • fare il join – unire – le info sul numero di voti, con l’anagrafica dei candidati consiglieri, e creare un file CSV per ogni lista;
  • unire tutti i file CSV e produrre anche un unico file con il numero di voti di ogni candidato, per ogni lista, per ogni sezione.

Requisiti

Il prodotto finale è uno script BASH, quindi bisogna avere a disposizione un sistema compatibile con questo linguaggio (lo sono essenzialmente tutti).

Richiede tre utility:

  • l’immancabile cURL, per scaricare i file;
  • XMLStarlet per interrogare i file XML e trasformarli in file CSV;
  • csvkit per fare il join e il merge dei CSV scaricati.

Richiede una conoscenza di base (e/o la volontà/possibità di farserla) su:

  • XPATH, per estrarre i dati (per interrogare) i file XML;
  • la linea di comando, perché è un po’ il campo di gioco di queste modalità di accesso e modifica di file;
  • BASH, che è il linguaggio dello script finale;
  • aprire i file XML del comune con un buon editor di testo, guardarli un po’ e comprenderne la struttura.

Lo script

Lo script per intero è più in basso. A seguire un esploso delle varie parti che lo compongono.

La prima cosa che viene eseguita nello script è il download dei file delle liste. Queste sono 18 ed è comodo scaricarle con un ciclo for ... loop che lo fa 18 volte per noi.

for i in {1..18};
  do curl -s http://comunali2017.comune.palermo.it/SEZ_3_82053_L$i.xml > $i.xml;
done

 

Poi da ognuno dei 18 file XML vengono estratti i dati anagrafici e i dati per sezione, sempre con un ciclo for.
A ogni file viene aggiunta anche un’intestazione di colonne.

# scarico l’anagrafica di ogni candidato di ogni lista
for i in {1..18}; do xmlstarlet sel -t -m //C0/C1 -v @NUMERO -o , -v @NOME -o , -v ../@NUMERO -o , -v ../@NOME -n $i.xml > anagraficaLista_$i.txt; sed -i 1s/^/numeroCandidato,nomeCandidato,numeroLista,nomeLista\n/ anagraficaLista_$i.txt & done
 
# scarico i voti di ogni candidato di ogni lista per ogni sezione
for i in {1..18}; do xmlstarlet sel -t -m //SV/V0/V1 -v @NUMERO -o , -v @VOTIVALIDI_C1 -o ,  -v ../@NUMERO -o , -v ../../@NUMERO -n $i.xml > listaSezioni_$i.txt ; sed  -i 1s/^/numeroCandidato,voti,numeroLista,sezione\n/ listaSezioni_$i.txt & done

 

I file di anagrafica hanno questa struttura:

numeroCandidato nomeCandidato numeroLista nomeLista
1 GELARDA IGOR DETTO GERARDA DETTO GERALDA 12 MOVIMENTO 5 STELLE
2 ARGIROFFI GIULIA 12 MOVIMENTO 5 STELLE
3 CAPARROTTA GIANCARLO DETTO CAPAROTTA 12 MOVIMENTO 5 STELLE

Mentre quelli con i dati per sezione:

numeroCandidato voti numeroLista sezione
1 5 12 1
2 9 12 1
3 2 12 1

Poi viene fatto il join tra anagrafica e dati per sezione:

for i in {1..18}; do csvsql –query select * from  listaSezioni_$i LEFT JOIN anagraficaLista_$i ON listaSezioni_$i.numeroCandidato=anagraficaLista_$i.numeroCandidato listaSezioni_$i.txt anagraficaLista_$i.txt > lista_$i.csv; done

Per ogni lista viene prodotto un file con nome lista_NumeroLista.csv, con questa struttura (ci sono delle colonne duplicate, che potrei rimuovere in fase di join):

numeroCandidato voti numeroLista sezione numeroCandidato nomeCandidato numeroLista nomeLista
1 5 12 1 1 GELARDA IGOR DETTO GERARDA DETTO GERALDA 12 MOVIMENTO 5 STELLE
2 9 12 1 2 ARGIROFFI GIULIA 12 MOVIMENTO 5 STELLE
3 2 12 1 3 CAPARROTTA GIANCARLO DETTO CAPAROTTA 12 MOVIMENTO 5 STELLE

E infine viene creato anche un unico file CSV di insieme (scaricabile da qui), con i dati per tutti i consiglieri di tutte le liste, per ogni sezione (senza le colonne duplicate). Sono 638 candidati per 600 sezioni per un totale di 382800 record.

csvstack *.csv | csvcut -c 1,2,3,4,6,8 > liste.csv

Quindi avrò in output 1 file CSV con i dati per ogni lista e quello soprastante, per totale di 19 file CSV (encoding UTF-8 e come separatore la ,).

Lo script di poche righe (al netto dei commenti) è quello di sotto, tutto realizzato con oggetti free e open-source.

#!/bin/bash
 
# Requisiti #
# – avere un sistema in cui è possibile eseguire uno script bash;
# – l’utility XMLStarlet http://xmlstar.sourceforge.net/download.php
# – l’utility csvkit http://csvkit.readthedocs.io/
 
# attivo la modalità di debug
set -x
 
# cancello file csv e xml pre esistenti nella cartella in cui lancio lo script
rm -R *.csv
 
# scarico tutti i dati delle 18 liste
for i in {1..18}; do curl -s http://comunali2017.comune.palermo.it/SEZ_3_82053_L$i.xml > $i.xml;done
 
# scarico l’anagrafica di ogni candidato di ogni lista
for i in {1..18}; do xmlstarlet sel -t -m //C0/C1 -v @NUMERO -o , -v @NOME -o , -v ../@NUMERO -o , -v ../@NOME -n $i.xml > anagraficaLista_$i.txt; sed -i 1s/^/numeroCandidato,nomeCandidato,numeroLista,nomeLista\n/ anagraficaLista_$i.txt & done
 
# scarico i voti di ogni candidato di ogni lista per ogni sezione
for i in {1..18}; do xmlstarlet sel -t -m //SV/V0/V1 -v @NUMERO -o , -v @VOTIVALIDI_C1 -o ,  -v ../@NUMERO -o , -v ../../@NUMERO -n $i.xml > listaSezioni_$i.txt ; sed  -i 1s/^/numeroCandidato,voti,numeroLista,sezione\n/ listaSezioni_$i.txt & done
 
# faccio il join tra i dati per sezione e l’anagrafica dei candidati
# l’output è un file di dettaglio in formato CSV per ogni lista
for i in {1..18}; do csvsql –query select * from  listaSezioni_$i LEFT JOIN anagraficaLista_$i ON listaSezioni_$i.numeroCandidato=anagraficaLista_$i.numeroCandidato listaSezioni_$i.txt anagraficaLista_$i.txt > lista_$i.csv; done
 
# faccio il merge di tutti i CSV e produco un unico file
# con tutti i voti per candidato per sezione di ogni lista
csvstack *.csv | csvcut -c 1,2,3,4,6,8 > liste.csv
 
# cancello file che non mi sono più utili
rm -R *.txt
rm -R *.xml

Libro consigliato

Per entrare nel mondo divertentissimo ed efficiente della “riga di comando” mi sento di consigliare il bel “Data Science at the Command Line” . È un libro per tutti, di facile lettura e pieno di esempi utili.

Incidenti stradali


Visualizzazioni di dati aperti del Comune di Palermo sui sinistri stradali nell’anno 2016

Il Comune di Palermo ha pubblicato vari dati aperti sui sinistri stradali avvenuti nel territorio comunale e rilevato dalla Polizia Municipale. Uno di questi dati è dell’anno 2016 e contiene ogni sinistro con qualifica del danno, data, ora e posizione in geo coordinati.

Ho realizzato una visualizzazione di questi dati con una mappa interattiva che offre vari temi per esplorare i vari aspetti spazio temporali dei dati.

La mappa è realizzato con iXMaps, un framework in HTML5 per creare mappe interattive in grafica vettoriale e configurabili con un semplice linguaggio descrittivo.

In seguito descrivo alcuni elementi e passi della realizzazione. Il codice intero è consultabile su GitHub.

I dati

Il portale ‘Open Data’ del comune di Palermo offre l’accesso ai dati sui sinistri stradali attraverso vari link nei formato Shape, CSV e KML con licenza CC BY 4.0 IT e fornisce i metadati in una nota:

IL DATASET VIENE FORNITO ANCHE IN FORMATO KLM E CSV. IL DATASET E’ STATO GEOREFERENZIATO DALL’ISP. SALVATORE PULLARA LEGENDA CODICI: M = MORTALE – SINISTRO CON ALMENO UN DECEDUTO; R = RISERVA – SINISTRO CON ALMENO UNA PERSONA IN PROGNOSI RISERVATA SULLA VITA (CHE SE SCIOLTA SI TRASFORMA IN UN NORMALE INCIDENTE CON FERITI F SE AVVIENE IL DECESSO IN UN MORTALE M); F = FERITI – SINISTRO CON LESIONI A PERSONE; C = COSE – SINISTRO CON SOLO DANNI A COSE.

Per la visualizzazione ho scaricato il formato CSV, che contiene tutte le informazioni sui incidenti incluso le posizioni in geo coordinati. Aprendo il CSV con LibreOffice si presenta cosi:

Le colonne inquadrate contengono le informazioni utilizzati per la visualizzazione.

Definire il 1. tema

iXMaps definisce una grammatica per mappe tematiche che consiste in una sintassi per oggetti Javascript (JSON) che configurano visualizzazioni creati direttamente dai dati.

Il primo tema della mappa interattiva visualizza ogni incidente con un punto con il colore del danno.

  • type“, “colorscheme” e “values” definiscono la rappresentazione come punti semplici con colore definito dalla colonna ‘Incidenti’ che può contenere i valori C,F,M o R per qualificare il danno.
  • lookupfield” definisce le colonne per la posizione (latitudine e longitudine) del punto.
  • dbtable” definisce un nome interno al dataset. Ci servirà in seguito per una procedure che elabora i dati e crea colonne aggiuntive per i temi con analisi temporali.
  • dbtableUrl‘ punta al dataset e ‘dbtableType‘ dice che e di tipo CSV
  • dbtableExt” definisce un file Javascript che contiene questa procedura.

 Ecco, il 1° tema della mappa

Leggenda e navigatore tematico

A destra, sovrapposto alla mappa, si trova la leggenda della mappa con elementi per navigare nelle varie tematiche della mappa interattiva, adattare la rappresentazione ed altri elementi della interfaccia utente.

  • mostra la leggenda degli elementi tematici della mappa
  • contiene una grafica riassuntiva degli valori respettiva alla posizione della mappa
  • offre strumenti per individualizzare il tema
  • gestisce la navigazione tra i temi

Elementi della leggenda

  1. Strumenti vari, da sinistra a destra: creare segnalibri, condividere la mappa,  definire filtri,  cambiare mappa di fondo informazioni, indice temi
  2. La leggenda del tema: mostra le somme attuali del tema clicca su un colore per vedere solo
    • il valore associato
  3. Strumenti per modificare la rappresentazione del tema
  4. Navigatore veloce pagine
  5. Navigatore temi

Come accedere ai vari temi della mappa

I temi della mappa sono divisi in aree tematiche e variazioni. La navigazione tra i temi avviene simile ad una presentazione:

  • per le variazioni di una tematica si scorre a sinistra o a destra
  • per cambiare la tematica in alto o in basso

si può usare sia le frecce visibili in basso o la rotellina della mouse, o un movimento sul touch screen

  • In cima a destra si accede a un indice dei temi. Un altra possibilità di arrivare direttamente a un tema.

Note tecniche sulla legenda

La leggenda è una pagina HTML fondata su Bootstrap e jQuery che viene caricata in un iframe è interagisce con mappa attraverso Javascript.

Il navigatore tra i temi, che segue la logica di una presentazione, con movimento orizontale e verticale da un tema all’altro, è realizzato grazie a fullpage.js  un jQuery plugin
di Alvaro Trigo.

Realizzare temi

Per realizzare un tema definito con oggetto JSON, come descritto sopra, ci serve una funzione.

dell’API di iXMaps. La chiamata viene codificato in <a> tag nascosto della pagina HTML e l’attivazione avviene quando l’utente cambia la pagina a sinistra/destra o in alto/basso.

Il <a> tag ci serve per la posizione alla quale viene inserito la leggenda del tema.

Tutto il codice della ‘storia’ della mappa, cioè la pagina HTML che gestisce i temi e la leggenda si trova su GitHub: index.html

I temi della mappa

Tutti i temi della mappa sono definiti nel file themes.js

1° tema – incidenti e danno

Il primo tema visualizza ogni incidente con un punto con un colore in relazione al danno.
Il trema ha alcune variazioni, che possono essere attivati con il scorrere a destra o sinistra.
I variazioni declinano l’applicazione di aggregazioni e varianti grafici con l’intenzione di aumentare la visibilità di zone con caratteristiche simili. Alla fine è una sequenza di sperimenti fatto con i strumenti analitici e grafici di iXMaps con la speranza che tutti variazioni possono aiutare per capire i dati.

  • la 1° variante aggiunge un effetto ‘incandescenza’ intorno ai singoli punti. Questo porta ad una maggiore visibilità delle ‘zone calde’ dove il punti si sovrappongono.
  • la 2° applica un’aggregazione per griglia
  • la 3° variante aumenta il rapporto tra numero di eventi e grandezza degli cerchi e riposiziona i punti aggregati per griglia nel centro del valore dell’aggregazione: in effetti, i punti tornano sulle strade!

Aggregazioni dinamiche

Tutti temi, tranne i primi due, implementano un’aggregazione degli singoli eventi per una griglia rettangolare definita in pixel dello schermo.

Cosi, in relazione allo zoom della mappa, il numero degli eventi che cadono in un rettangolo cambia, è in conseguenza il livello di aggregazione fino a mostrare i singoli eventi.

La leggenda del tema mostra sempre il conteggio degli elementi attualmente visibile nella mappa, si aggiorna spostando o zoomando la mappa.

2. area tematica: Analisi temporali

Nella 2° parte, la visualizzazione propone delle analisi temporali degli sinistri per:

  • giorno della settimana
  • fascia oraria
  • mese del anno

Per poter configurare questi temi dobbiamo prima creare nuove colonne nei dati con valori espliciti respetto ai analisi temporali, come per esempio il giorno della settimana (da 0 a 7). Per questo ci serve una procedura definita in ‘preprocess.js‘:

che crea le seguente nuove colonne

per poter definire il seguente tema che visualizza il numero di incidenti per giorno della settimana.

Quasi tutto viene descritto con la variable ‘type’

  • CHART | SYMBOL | EXACT| FIXSIZE | SEQUENCE | PLOT | LINES | AREA
    forse è un po’ strano, ma definisce una curva come sequenza di simboli per ogni valore esatto (EXACT) della colonna di valori ‘GiornoDellaSettimana’; i valori ammessi sono definiti nal array “values”
  • BOX | GRID
    fa che la curva a un fondo
  • ZEROISVALUE
    ammette zero come valore
  • AGGREGATE | RECT | SUM
    definisce l’aggregazione dei valori per una griglia rettangolare la quale dimensione viene definito con la variable “gridwidth” in 100 pixel (dello schermo);
    qui vengono creati i valori delle curve; per ogni rettangolo della griglia si crea le somme degli incidenti per giorno della settimana; importante: “field” è “GiornoDellaSettimana” il “type” contiene ‘EXACT’ e i valori sono definiti in “values”
  • GRIDSIZE
    definisce la dimensione dei grafici come la griglia

3. area tematica: Analisi di pericolosità

La 3° parte è un tentativo di creare un indice sintetico della pericolosità calcolando la somma degli incidenti con feriti o morti diviso per il numero di incidenti per una griglia esagonale. I risultante frazione viene normalizzato tra 0 e 1 e visualizzato con crescente opacità di colore e numero testuale.

Creare mappe individualizzati e condividerle

Per ultimo vorrei promuovere la possibilità di creare mappe individualizzate da partire dei temi definiti e creare o un segnalibro o ottenere un codice per includere il tema personalizzato in una pagina HTML o in fine anche una URL unica per riprodurre la mappa creata in qualsiasi browser con capacità HTML5.

Qui, per esempio, ho creato una visualizzazione ‘nuova’ cambiando la mappa del fondo e selezionando solo una parte del tema nella leggenda. 

Utilizzando l’icona ‘share’ nel menu, si apre una finestrina con i codici per inserire la mappa e l’URL che contiene tutto il tema. L’URL viene anche offerta in formato corto usando il servizio WEB tinyurl.com:
http://tinyurl.com/kayylhp – Usando questo link si riproduce questa mappa.

Alcuni link

La mappa interattiva
Il codice su Github
fullpage.js di Alvaro Trigo
bootstrap HTML, CSS, and JS framework
icomoon free Icon Pack