Al Linux Day 2014, nell'evento organizzato a Magione (Pg) dall'Associazione Gnu/Lug Perugia, Tommaso Vicarelli e Cristiano Donato (Agenda digitale dell'Umbria) hanno parlato del portale http://dati.umbria.it/ - uso di software open source, lavorazione dei dati e sviluppo di app.
La digital trasformation nel mondo dei servizi, turismo e commercio
Linux Day 2014: open data in Umbria - dai dataset alle app
1. Open data in Umbria
Questo lavoro è pubblicato sotto licenza
Creative Commons “Attribuzione 3.0 Italia” (CC BY).
Per visualizzare una copia della licenza visitare il sito:
http://creative commons.org/licenses/by/3.0/it/
#AdUmbria #regioni4digitale
presentazione per ForumPA
28/06/2014 v1.0
dai dataset alle app
Cristiano Donato
Tommaso Vicarelli
Università degli Studi di Perugia
Presentazione per Linux Day
Perugia 25/10/2014
2. Sommario
1. Gli Open data
2. Il percorso compiuto da AdUmbria
3. Sviluppi futuri
4. CKAN
5. Utilizzo programmatico dei dati
6. InUmbria Android APP
7. Download automatico: CKAN API
8. Parser JSON e CSV
9. Conclusioni
#AdUmbria www.agendadigitale.regione.umbria.it 2
3. Gli Open Data
Dato: (dal latino datum che significa letteralmente fatto) è una
descrizione elementare, spesso codificata, di una cosa, di una
transazione, di un avvenimento o di altro. [Wikipedia]
Elaborare i dati porta a conoscere informazioni
www.svegliamuseo.com
#AdUmbria www.agendadigitale.regione.umbria.it 3
4. Gli Open Data
Dati caratterizzati da alcune proprietà
• Sono disponibili per l’utilizzo (preferibilmente tramite
internet)
• Sono Machine readable
• Sono riutilizzabili e redistribuibili da tutti
(partecipazione universale e interoperabilità)
www.michelecamp.it
#AdUmbria www.agendadigitale.regione.umbria.it 4
5. Gli Open Data
Classificazione di Tim Berners-Lee:
(★) Una Stella: livello base, dati statici e non
strutturati
(★★) Due Stelle. Questo livello indica dati strutturati
e codificati in un formato proprietario
(★★★) Tre Stelle. Questo livello indica dati strutturati
e codificati in un formato aperto.
(★★★★) Quattro Stelle. Questo livello indica dati
strutturati in un formato aperto e dotati di un URI che
li rende indirizzabili sulla rete.
(★★★★★) Cinque Stelle. Questo livello indica quelli
che vengono definiti come Linked Open Data
(LOD).
http://michellethorne.cc
#AdUmbria www.agendadigitale.regione.umbria.it 5
6. Case study 1 - Open Bilanci
#AdUmbria www.agendadigitale.regione.umbria.it 6
Gli Open Data
http://www.openbilanci.it/
9. Il percorso compiuto da AdUmbria
Data Hunting
Individuazione settori d'interesse
Colloqui con dirigenti dei settori
Ricerca possibili dati da estrarre
Analisi della tecnologia alla base
delle “banche dati”
#AdUmbria www.agendadigitale.regione.umbria.it 9
10. Il percorso compiuto da AdUmbria
Il catalogo dei dataset
Compilazione scheda informativa da parte
dei referenti tecnici
Inserimento schede informative nella
catena di lavorazione o “Dataset Pipeline”
Creazione di un catalogo dei metadati
http://icongal.com
#AdUmbria www.agendadigitale.regione.umbria.it 10
11. Il percorso compiuto da AdUmbria
Data scraping
Dati tabulari disponibili in formato PDF (“una stella”)
Disponibilità di tool per l'estrazione e la conversione in
formato “machine readable” di dati statici.
Tabula: la soluzione open source
tabula.nerdpower.org/
#AdUmbria www.agendadigitale.regione.umbria.it 11
12. Il percorso compiuto da AdUmbria
Validazione – Data cleansing
Passo antecedente la pubblicazione
Alcuni dati possono essere “sporchi”
Necessari tool di data cleansing
Strumento open source: Refine
https://code.google.com/p/google-refine/
#AdUmbria www.agendadigitale.regione.umbria.it 12
13. Quali dati ci sono oggi su dati.umbria.it?
• Agricoltura
• Amministrazione
• Attività produttive
• Cultura
• Istruzione
• Lavoro
• Opere pubbliche
• Territorio
• Turismo
#AdUmbria www.agendadigitale.regione.umbria.it 13
14. Extract
DB2 DW
#AdUmbria www.agendadigitale.regione.umbria.it 14
Sviluppi futuri
Extract Transform Load
Tecniche per il recupero e l’aggregazione di dati provenienti da sorgenti diverse
Utilizzata per la creazione di Datawarehouse
Interazione tra banche dati diverse
DB1
DB3
Load
15. #AdUmbria www.agendadigitale.regione.umbria.it 15
Sviluppi futuri
Linked Open Data
Collegare l’informazione la
rende più completa e
aumenta il suo valore
Ogni «oggetto» viene
identificato in rete tramite un
URI ed è sempre disponibile
Più oggetti possono essere
collegati tra loro, per
migliorare la ricerca di
informazioni.
"Ursa Major constellation detail map" di
http://en.wikipedia.org/wiki/User:B00P & me (SAE1962 10:04, 2 April
2008 (UTC)) - English Wikipedia, but modified it.. Con licenza Creative
Commons Attribution-Share Alike 3.0 tramite Wikimedia Commons
16. #AdUmbria www.agendadigitale.regione.umbria.it 16
Sviluppi futuri
Linked Open Data
"LOD Cloud Diagram as of September 2011" by Anja Jentzsch - Own work. Licensed under
Creative Commons Attribution-Share Alike 3.0 via Wikimedia Commons-
17. #AdUmbria www.agendadigitale.regione.umbria.it 17
Sviluppi futuri
Monitoraggio
Main goals
Necessario per il miglioramento continuo (modello PDCA)
Creazione community e divulgazione culturale
Main tools
Monitoraggio portale con Google Analytics
Monitoraggio richieste (Gestione della domanda)
18. http://ckan.org/
The Comprehensive Knowledge Archive Network
Hub open source per la raccolta e la gestione della conoscenza
Permette di immagazzinare e distribuire dati in vari formati
Gestisce anche la presentazione dei dati
#AdUmbria www.agendadigitale.regione.umbria.it 18
20. http://ckan.org/
Principali features (2/2)
• Possibilità di «agganciare» Google Analytics
• Disponibile anche strumento interno alla piattaforma
• «Social buttons» di ADU
• Feed RSS da blog #Umbriadigitale
#AdUmbria www.agendadigitale.regione.umbria.it 20
21. #AdUmbria www.agendadigitale.regione.umbria.it 21
Pubblicazione
Ogni dataset contiene:
• Risorse
• Metadati
Le info racchiuse nel
contenitore sono
accessibile anche tramite
chiamata alle API
http://ckan.org/
dati.umbria.it
22. http://ckan.org/
#AdUmbria www.agendadigitale.regione.umbria.it 22
API
CKAN mette a disposizione un set di API che consentono (ad esempio):
•Il recupero di tutte le info associate al dataset come:
• Metadati
• URL per download
•L’inserimento dei dati nel catalogo
ckan.org
23. L’accesso ai dati
• Gli open data sono machine readable
– Sono in un formato standard
– Sono in un formato open
– Possono essere letti e interpretati da una macchina
- Possono essere letti e interpretati da un essere umano
#AdUmbria www.agendadigitale.regione.umbria.it 23
24. MAN vs MACHINE
•Piccole quantità di dati
•Elaborazione preimpostate
•Un dataset alla volta
•Controllo di versione manuale (soggetta
a errore umano)
•Download manuale
•Il limite è dato dalle funzionalità di
CKAN
•Grandi quantità di dati
•Qualunque tipo di elaborazione
•Più dataset alla volta
•Controllo di versione automatico
•Download automatico
•Il limite è dato dalla fantasia e le capacità
dello sviluppatore!
#AdUmbria www.agendadigitale.regione.umbria.it 24
27. InUmbria Android APP
https://play.google.com/store/apps/details?id=it.pg.avolta.inumbria
• Ha avuto scopi didattici
(stage ITIS A VOLTA)
#AdUmbria www.agendadigitale.regione.umbria.it 27
28. InUmbria Android APP
https://play.google.com/store/apps/details?id=it.pg.avolta.inumbria
• Ha avuto scopi didattici
(stage ITIS A VOLTA)
• E’ il primo esempio di
utilizzo degli opendata della
Regione Umbria
#AdUmbria www.agendadigitale.regione.umbria.it 28
29. InUmbria Android APP
https://play.google.com/store/apps/details?id=it.pg.avolta.inumbria
• Ha avuto scopi didattici
(stage ITIS A VOLTA)
• E’ il primo esempio di
utilizzo degli opendata della
Regione Umbria
• Valorizza il territorio
(luoghi della cultura in
Umbria)
#AdUmbria www.agendadigitale.regione.umbria.it 29
30. InUmbria Android APP
• Download delle risorse da CKAN
• Parsing del dataset
• Visualizzazione su Android
http://json.org/
#AdUmbria www.agendadigitale.regione.umbria.it 30
http://ckan.org/
http://opencsv.sourceforge.net/
http://www.android.com/
CC BY 3.0
31. CKAN API
• CKAN offre delle API RESTful JSON
– Chiamate e risposte http
– Messaggi JSON
http://www.chemaxon.com/
#AdUmbria www.agendadigitale.regione.umbria.it 31
32. CKAN API
• Funzionalità delle API di CKAN:
http://ckan.org/
– Richiedere la lista di tutti i dataset, delle categorie o dei tag
– Richiedere la rappresentazione di un elemento
– Effettuare una ricerca
– Richiedere la lista delle ultime attività sui dataset
– Creare, aggiornare e eliminare dataset, risorse e altri elementi
– Interrogare un dataset (ricerche e filtri)
– Statistiche
– CSV e JSON dump
– Scrivere un dataset
#AdUmbria www.agendadigitale.regione.umbria.it 32
33. CKAN API - esempio
http://ckan.org/
http://dati.umbria.it/api/action/datastore_search?resource_id=ccdc8f3e-8b48-4072-adc4-#AdUmbria www.agendadigitale.regione.umbria.it 33
34. Effettuare una chiamata con Java
String urlToRead =
"http://dati.umbria.it/api/action/datastore_search?
resource_id=ccdc8f3e-8b48-4072-adc4-2e686bfe90e3";
URL url = new URL(urlToRead);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader rd = new BufferedReader(new
InputStreamReader(conn.getInputStream()));
String line;
String result = "";
while ((line = rd.readLine()) != null) {
result += line;
}
https://www.java.com
#AdUmbria www.agendadigitale.regione.umbria.it 34
35. Parsing del dataset csv (opencsv)
CSVReader reader = null;
List<Luogo> listaLuogo = new ArrayList<Luogo>();
try {
InputStream is =
activity.getResources().openRawResource(R.raw.opendata_musei);
InputStreamReader isr = new InputStreamReader(is);
reader = new CSVReader(isr, ';');
String[] nextLine = reader.readNext();
nextLine = reader.readNext();
while (nextLine != null) {
Luogo l = new Luogo();
l.setId(Integer.parseInt(nextLine[0]));
l.setComune(nextLine[1]);
//[…]
#AdUmbria www.agendadigitale.regione.umbria.it 35
36. Parsing del dataset csv (opencsv)
//[…]
Luogo l = new Luogo();
l.setId(Integer.parseInt(nextLine[0]));
l.setComune(nextLine[1]);
l.setProvincia(nextLine[2]);
l.setNomeMuseo(nextLine[3]);
l.setIndirizzo(nextLine[4]);
l.setNumeroCivico(nextLine[5]);
l.setCap(nextLine[6]);
l.setX(Double.parseDouble(nextLine[7]));
l.setY(Double.parseDouble(nextLine[8]));
l.setProprieta(nextLine[9]);
l.setSitoWeb(nextLine[10]);
l.setEmail(nextLine[11]);
l.setNumeroTelefono(nextLine[12]);
l.setNumeroFax(nextLine[13]);
l.setTelefonoPrenotazione(nextLine[
14]);
l.setEmailPrenotazione(nextLine[15]
);
listaLuogo.add(l);
nextLine = reader.readNext();
}//end while
return listaLuogo;
} finally {
if (reader != null)
reader.close();
}
#AdUmbria www.agendadigitale.regione.umbria.it 36
37. Parsing del dataset (json)
String in;
JSONObject reader = new JSONObject(dataset);
JSONArray records =
reader.getJSONObject("result").getJSONArray("records");
List<Luogo> listaLuogo = new ArrayList<Luogo>();
for(int i=0; i < records.length(); i++) {
Luogo l = new Luogo();
JSONObject record = records.getJSONObject(i);
l.setComune(record.getString(0));
//[…]
l.setTelefonoPrenotazione(record.getString(14));
listaLuogo.add(l);
• } }
#AdUmbria www.agendadigitale.regione.umbria.it 37
39. Conclusioni
• Il rilascio di opendata aiuta ad avere una PA
trasparente (veramente) e focalizzata sul
cittadino
• Le licenze open consentono qualsiasi
elaborazione (anche a scopi commerciali)
• Le tecnologie open e gli standard
permettono di accedere rapidamente ai
dati e elaborarli secondo le necessità
#AdUmbria www.agendadigitale.regione.umbria.it 39
40. E se non ci sono i dati che mi
interessano?
Si possono richiedere a
opendata@regione.umbria.it
o
su twitter @ADUmbria
#AdUmbria www.agendadigitale.regione.umbria.it 40