Open Data
Matteo Fortini|Milano|2018-05-28

Open Data

  • Perché parliamo di dati?
  • Perché parliamo di "open"?

Una volta i dati erano

  • Elenchi:
    • Liste
    • Vocabolari
    • Enciclopedie
  • Numeri
  • Mappe
Da una lapide in S. Pietro a Roma

Dopo l'avvento del digitale tutto è un dato

  • Elenchi
  • Numeri
  • Testi (la Bibbia è un libro o un testo?)
  • Musica
  • Immagini
  • Telefonate
  • ...

Se è un dato, lo possiamo

  • Memorizzare
  • Analizzare
  • Confrontare
  • Utilizzare

Fonte: Ericcson

Dati testuali

  • Contengono testi, normalmente in "linguaggio naturale".
  • Se non sono direttamente narrazioni o descrizioni, sono complicati da gestire automaticamente
  • Per questo normalmente vengono aumentati con l'introduzione di markup o tag (il più famoso è l'hashtag)

Dati numerici

  • Contengono numeri, interi o con la virgola
  • Di solito descrivono una grandezza
  • Unità di misura?
  • Base?
  • Importante sapere quali separatori per i decimali e le migliaia
  • Sono "facili" da gestire automaticamente
  • Per questo spesso si cerca di ridurre tutto a un numero

Dati tabulari

  • Composti da tabelle di righe e colonne
  • Le colonne identificano gli attributi
  • Le righe identificano entità
  • Per identificare relazioni:
    • sono necessarie più tabelle
    • O più ripetizioni
  • Sono "facili" da gestire automaticamente
  • I DataBase storicamente sono formati da tabelle (Entity-Relationship)
  • Le colonne sono un primo livello informativo
  • Tutte le entità devono avere lo stesso numero di attributi

Dati a oggetti gerarchici

  • Composti da oggetti o liste di oggetti che contengono ciascuno
    • attributi
    • altri oggetti o liste di oggetti
  • Permettono di gestire relazioni (es. appartenenza) in modo più evidente
  • Sono gestibili automaticamente
  • La loro gestione è meno efficiente dal punto di vista computazionale
  • Ogni entità può avere un numero di attributi diverso

Dati geografici

Un tool: QGIS https://www.qgis.org

Open data

  • Cos'è il copyright?
    • Quali sono le norme nel nostro paese?
    • Cosa coprono?
  • Come si applica il copyright quando il bene è duplicabile senza danno?

Partiamo dal software

  • Inizialmente il software era tutto libero
  • Uno dei primi a farne un problema è stato Henry William "Bill" Gates
  • Uno dei primi a contestare questa cosa è stato RMS o Richard Matthew Stallman

The feedback we have gotten from the hundreds of people who say they are using BASIC has all been positive. Two surprising things are apparent, however, 1) Most of these "users" never bought BASIC (less than 10% of all Altair owners have bought BASIC), and 2) The amount of royalties we have received from sales to hobbyists makes the time spent on Altair BASIC worth less than $2 an hour.

Why is this? As the majority of hobbyists must be aware, most of you steal your software. Hardware must be paid >for, but software is something to share. Who cares if the people who worked on it get paid?

Is this fair? One thing you don't do by stealing software is get back at MITS for some problem you may have had.

Bill Gates
General Partner, Micro-Soft

Questione di licenze

  • Un bene immateriale non lo possiedi, ti viene dato in licenza
  • La licenza indica quello che ti è permesso e quello che ti è vietato
  • In particolare, tutte le licenze ti vietano di
    • Duplicare (tranne che per conservazione)
    • Prestare
    • ...

Le licenze Open Source

  • La GPL

Ma anche...

  • La MIT
  • La Apache
  • La freemium
  • La shareware
  • La freeware
  • La public domain
  • La WTFPL

Quali licenze sono considerate Open Source?

Cos'è una licenza virale?

Come si applica tutto questo ai dati?

  • I dati sono software, ma di un tipo particolare
  • Oppure potremmo dire che il software è un dato di tipo particolare

The Open Definition states: "A piece of content or data is open if anyone is free to use, reuse, and redistribute it — subject only, at most, to the requirement to attribute and share-alike."

Esistono licenze per i dati

La qualità dei dati

Tim Berners-Lee, l'inventore del World Wide Web, ha definito una classifica dei tipi di Open Data https://www.w3.org/DesignIssues/LinkedData.html basandosi su 5 criteri:

  1. OL Open License
  2. RE machine REadable
  3. OF Open Format
  4. URI Uniform Resource Identifier
  5. LD Linked Data

Formati e metadati

Un formato è un contratto

  • Comunicazione: trasmittente, ricevente, messaggio
  • Perché la comunicazione avvenga correttamente, il messaggio dev'essere compreso
  • Il formato definisce che aspetto avrà il messaggio, in modo da poterlo decodificare
    • Nella lingua parlata la Lingua è un formato
    • Nella lingua scritta l'alfabeto è un formato
    • I formati digitali puntano alla non ambiguità

I metadati sono dati ulteriori che "aumentano" i dati

  • Non sono parte del messaggio in sé
  • Ma ne aiutano:
    • La comprensione
    • La catalogazione
    • I collegamenti
  • Le note di un libro sono metadati
  • NB anche i metadati sono dati. E hanno un formato...

I formati non readable

  • Raster
  • PDF (soprattutto raster)
  • In generale i formati proprietari

In [59]:
fig
Out[59]:

PDF non è un formato readable

I formati readable

Più o meno strutturati...

  • TXT
  • Formati binari
    • hanno più problemi dovuti per esempio all'endianness
    • sono molto più compatti
    • richiedono una macchina per essere interpretati da un umano
  • Formati human readable
    • possono essere interpretati (con diversa difficoltà) da un umano
    • sono meno compatti
    • nella pratica, con la compressione il problema dello spazio è molto gestibile

Esempi di formati human readable

  • CSV
  • XML
  • JSON e GeoJSON
  • Frictionless datapackage di OKFN
  • LOD:
    • JSON-LD
    • RDG
  • PDF e OCR e Tabula

TXT

CSV (Comma) Separated Values

  • Formato testuale
  • Formato tabulare
  • Il separatore può essere la virgola, ma spesso è usato il punto e virgola, la barra verticale, ...
  • Alcuni problemi del TXT restano
  • Il separatore può confondersi con il separatore dei decimali
  • Non è indicato il tipo delle colonne
  • Non si possono gestire gerarchie

  • Parametri importanti:

    • Separatore
    • Carattere che circonda le celle di testo (potrebbero contenere il separatore)
    • (eventuali) linee di Header
In [83]:
coopSocialiF=open('download/Albo_Cooperative_Sociali_al_31.12.2015.csv','r')

for i in range(4):
    print (coopSocialiF.readline())
DENOMINAZIONE,COMUNE,PROVINCIA,TELEFONO,EMAIL,AREA,SERVIZI,ATTIVITA,TIPOLOGIE PERSONE SVANTAGGIATE,WGS84_Y,WGS84_X,location

ZEROGRAFICA SOCIETA' COOPERATIVA SOCIALE,Milano,MI,3387621099,,,,Tipografia e stampa,Detenuti,45.5253903,9.0936669,"(45.5253903, 9.0936669)"

STELLA MARIS - SOCIETA' COOPERATIVA SOCIALE ONLUS,Mantova,MN,0376151018,info@coopstellamaris.it,"Anziani, Disabili/Handicappati, Famiglia, Psichiatria","Altro, Assistenza Domiciliare integrata Anziani, Assistenza Domiciliare integrata Disabili, Assistenza domiciliare pazienti psichiatrici",,,45.1518998,10.7822165,"(45.1518998, 10.7822165)"

L'AQUILONE SOCIETA' COOPERATIVA SOCIALE,Sesto Calende,VA,03311830570,laquilonescs@laquilonescs.it,"Disabili/Handicappati, Disagio Giovanile, Educativa, Famiglia, Minori, Prevenzione del disagio, Stranieri","Animazione culturale  e territoriale, Assistenza Pre e Post Scolastica, Assistenza domiciliare minori, Assistenza scolastica ""ad personam"", Attività Extra scolastiche a minori, Centro di Aggregazione Giovanile, Educatori di Strada, Formazione - Consulenza - Progettazione, Informagiovani - Spazio giovani, Progettazione servizi sperimentali",,,45.7249613,8.6322301,"(45.7249613, 8.6322301)"

In [85]:
coopSociali.head()
Out[85]:
DENOMINAZIONE COMUNE PROVINCIA TELEFONO EMAIL AREA SERVIZI ATTIVITA TIPOLOGIE PERSONE SVANTAGGIATE WGS84_Y WGS84_X location
0 ZEROGRAFICA SOCIETA' COOPERATIVA SOCIALE Milano MI 3387621099 NaN NaN NaN Tipografia e stampa Detenuti 45.525390 9.093667 (45.5253903, 9.0936669)
1 STELLA MARIS - SOCIETA' COOPERATIVA SOCIALE ONLUS Mantova MN 0376151018 info@coopstellamaris.it Anziani, Disabili/Handicappati, Famiglia, Psic... Altro, Assistenza Domiciliare integrata Anzian... NaN NaN 45.151900 10.782216 (45.1518998, 10.7822165)
2 L'AQUILONE SOCIETA' COOPERATIVA SOCIALE Sesto Calende VA 03311830570 laquilonescs@laquilonescs.it Disabili/Handicappati, Disagio Giovanile, Educ... Animazione culturale e territoriale, Assisten... NaN NaN 45.724961 8.632230 (45.7249613, 8.6322301)
3 IL BUON PASTORE SOCIETA' COOPERATIVA SOCIALE -... Milano MI 3391607328 vincenzotufano@live.it Altro Altro NaN NaN 45.425210 9.175097 (45.4252103, 9.1750972)
4 PROGETTO E LAVORO - SOCIETA' COOPERATIVA SOCIALE Brescia BS 0302524763 NaN NaN NaN Altro, Progettazione e istallazione impianti f... NaN 45.534553 10.219526 (45.53455319, 10.21952553)
  • Proviamo ad aprire il file su Google Drive. Usiamo ad esempio
    IMPORTDATA("https://www.dati.lombardia.it/api/views/tuar-wxya/rows.csv?accessType=DOWNLOAD")

XML (eXtensible Markup Language)

  • Linguaggio di markup: testo + tag
    • Es <persona><nome>Matteo</nome><cognome>Fortini</cognome></persona>
  • Gerarchico
  • Può rappresentare qualunque tipo di dato
  • Spesso associato a una DTD Document Type Definition
  • Linguaggio XQuery per l'analisi
  • Molti formati di file sono basati su XML, es ODS/ODT,DOCX/XLSX, ...
  • Formato molto importante: RSS
In [125]:
coopSocialiFXML=open('download/Albo_Cooperative_Sociali_al_31.12.2015.xml','r')

coopSocialiFXMLTree=etree.parse(coopSocialiFXML)

print(etree.tostring(coopSocialiFXMLTree,pretty_print=True)[:1000].decode("ascii"))
<response>
  <row>
    <row _id="3010" _uuid="556A6125-B90E-45D3-8FAE-7A6D88D53E0A" _position="3010" _address="https://www.dati.lombardia.it/resource/tuar-wxya/3010">
      <denominazione>ZEROGRAFICA SOCIETA' COOPERATIVA SOCIALE</denominazione>
      <comune>Milano</comune>
      <provincia>MI</provincia>
      <telefono>3387621099</telefono>
      <attivita_>Tipografia e stampa</attivita_>
      <tipologie_persone_svantaggiate>Detenuti</tipologie_persone_svantaggiate>
      <wgs84_y>45.5253903</wgs84_y>
      <wgs84_x>9.0936669</wgs84_x>
      <location human_address="{&quot;address&quot;:&quot;&quot;,&quot;city&quot;:&quot;&quot;,&quot;state&quot;:&quot;&quot;,&quot;zip&quot;:&quot;&quot;}" latitude="45.5253903" longitude="9.0936669" needs_recoding="false"/>
    </row>
    <row _id="3011" _uuid="2899B26F-8A5B-47AD-9412-55A68C108590" _position="3011" _address="https://www.dati.lombardia.it/resource/tuar-wxya/3011">
      <denominazione>STELLA MARIS - SOCIETA' COOPERATIVA SOCIALE ONLUS
  • Anche questo può essere aperto in Google Drive con
    IMPORTXML("https://www.dati.lombardia.it/api/views/tuar-wxya/rows.xml?accessType=DOWNLOAD";"/response/row/row")
  • NB Notare che abbiamo dovuto aggiungere una query xpath
    • Il pregio è che cambiando la query possiamo selezionare solo una parte, esempio
      /response/row/row/denominazione

RSS

  • RSS è un dialetto di XML
  • permette di distribuire aggiornamenti in modo semplice
  • è pensato per facilitare la gestione automatizzata

https://validator.w3.org/feed/docs/rss2.html

Esempi:

In [130]:
podcastTree=etree.parse("http://www.radio.rai.it/rss/podcast/rssradio.jsp?channel=RF2&n=&id=16269")
print(etree.tostring(podcastTree,pretty_print=True)[:1000].decode("utf-8"))
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
  <channel>
    <title>pascal</title>
    <link>http://www.radio2.rai.it/dl/portaleRadio/Programmi/Page-0e06ff4d-fb20-4ef1-a675-0be791150831.html?set=ContentSet-c49babfb-8ac7-44b3-b461-9166ef14e18c&amp;type=Main</link>
    <itunes:subtitle>Pascal &#232; il programma di Matteo Caccia in onda su Radio2 dal luned&#236; al venerd&#236; alle 22.30 che racconta storie di vita.</itunes:subtitle>
    <description>Pascal &#232; il programma di Matteo Caccia in onda su Radio2 dal luned&#236; al venerd&#236; alle 22.30 che racconta storie di vita.
Episodi grandi o piccoli, stravolgenti o minuti, momenti che hanno modificato per sempre la nostra vita o che, anche se di poco, l&#146;hanno indirizzata. Storie che sono il termometro della temperatura di ognuno di noi e che in parte raccontano chi siamo. 
Quando eravamo bambini e scoprimmo un enorme segreto, quando quella notte in viaggio ci perdemmo, quando la incontrammo e

Con i feed RSS possiamo collegare servizi usando ad esempio

JSON (JavaScript Object Notation)

https://www.json.org/json-it.html

  • Nasce per essere più sintetico di XML
  • Rimane gerarchico
In [131]:
coopSocialiFJSON=open('download/Albo_Cooperative_Sociali_al_31.12.2015.json','r')

coopSocialiFJSONtree=json.load(coopSocialiFJSON)

print(json.dumps({"data":coopSocialiFJSONtree["data"][0:2]},indent=4, sort_keys=True))
{
    "data": [
        [
            3010,
            "556A6125-B90E-45D3-8FAE-7A6D88D53E0A",
            3010,
            1456838409,
            "52",
            1456838409,
            "52",
            null,
            "ZEROGRAFICA SOCIETA' COOPERATIVA SOCIALE",
            "Milano",
            "MI",
            "3387621099",
            null,
            null,
            null,
            "Tipografia e stampa",
            "Detenuti",
            "45.5253903",
            "9.0936669",
            [
                "{\"address\":\"\",\"city\":\"\",\"state\":\"\",\"zip\":\"\"}",
                "45.5253903",
                "9.0936669",
                null,
                false
            ]
        ],
        [
            3011,
            "2899B26F-8A5B-47AD-9412-55A68C108590",
            3011,
            1456838409,
            "52",
            1456838409,
            "52",
            null,
            "STELLA MARIS - SOCIETA' COOPERATIVA SOCIALE ONLUS",
            "Mantova",
            "MN",
            "0376151018",
            "info@coopstellamaris.it",
            "Anziani, Disabili/Handicappati, Famiglia, Psichiatria",
            "Altro, Assistenza Domiciliare integrata Anziani, Assistenza Domiciliare integrata Disabili, Assistenza domiciliare pazienti psichiatrici",
            null,
            null,
            "45.1518998",
            "10.7822165",
            [
                "{\"address\":\"\",\"city\":\"\",\"state\":\"\",\"zip\":\"\"}",
                "45.1518998",
                "10.7822165",
                null,
                false
            ]
        ]
    ]
}

GeoJSON

http://geojson.org/

  • È un'estensione di JSON creata per contenere dati geografici, ovvero

    • Punti
    • Linee
    • Poligoni

    che abbiano delle coordinate geografiche

The coordinate reference system for all GeoJSON coordinates is a geographic coordinate reference system, using the World Geodetic System 1984 (WGS 84) [WGS84] datum, with longitude and latitude units of decimal degrees.

(Tabular) Data Package

Formati per LD (Linked Data)

  • Basati su triple soggetto,predicato,oggetto
  • Vengono create dell ontologie che definiscono relazioni e attributi in domini particolari
  • Vengono utilizzate degli URI univoci che permettono di collegare basi dati fra di loro

Dove troviamo open data?

  • Pubblici
  • Volontari
  • Privati

Dati Pubblici

  • I dati pubblici hanno due motivazioni fondamentali:
    • La trasparenza
    • La restituzione (nel senso che sono dati finanziati da denaro pubblico)

Trasparenza e open government

La trasparenza

Need to know
diventa
Right to know

Ho diritto di sapere, non ti devo dimostrare la mia necessità.

The Three Laws of Open Government Data:

  • If it can’t be spidered or indexed, it doesn’t exist
  • If it isn’t available in open and machine readable format, it can’t engage
  • If a legal framework doesn’t allow it to be repurposed, it doesn’t empower

David Eaves

Trasparenza in Italia

Trasparenza in Italia

Open by default

Art. 52 del CAD - Codice Amministrazione Digitale

  1. I dati e i documenti che i soggetti di cui all'articolo 2, comma 2, pubblicano, con qualsiasi modalità, senza l'espressa adozione di una licenza di cui all'articolo 2, comma 1, lettera h), del decreto legislativo 24 gennaio 2006, n. 36, si intendono rilasciati come dati di tipo aperto ai sensi all'articolo 1, comma 1, lettere l-bis) e l-ter), del presente Codice, ad eccezione dei casi in cui la pubblicazione riguardi dati personali.

Quali esempi di Open data pubblici italiani?

Dati pubblici per trasparenza

Quali esempi di Open data pubblici italiani?

Dati pubblici per trasparenza

Quali esempi di Open data pubblici italiani?

Dati pubblici per trasparenza

Quali esempi di Open data pubblici italiani?

Dati pubblici perché finanziati con denaro pubblico

Portali di dati pubblici nazionali

Basi dati di interesse nazionale

Detto questo, come siamo messi?

Dati "volontari"

Molti progetti producono dati in modo collaborativo e volontario.

Wikipedia

OpenStreetMap

Analisi dei dati

Media, moda, mediana, varianza

  • Media: $\mu_X=\frac{\sum_{i=1}^N {x_i}}{N}$
  • Deviazione standard: $\sigma_X=\sqrt{\frac{\sum_i(x_i-\mu_X)^2}{n}}$
  • Moda: valore più frequente
  • Mediana: valore che ha il 50% di probabilità

Correlazione

$-1\le\rho_{xy}=\frac{\sigma_{xy}}{\sigma_x\sigma_y}=\frac{\sum_{i=1}^n(x_i-\mu_x)(y_i-\mu_y)}{\sqrt{\sum_{i=1}^n(x_i-\mu_x)^2}\sqrt{\sum_{i=1}^n(y_i-\mu_y)^2}}\le+1$

Correlation_examples.png

Correlation is not causation

correlation.png

(XKCD)