Skip to content

Latest commit

 

History

History
299 lines (225 loc) · 17.2 KB

README.md

File metadata and controls

299 lines (225 loc) · 17.2 KB

COVID-19 Semantic Web - DPC RDF Data Cube Vocabulary Project

Il progetto intende modellare i dataset del monitoraggio sanitario COVID-19 in Italia, pubblicati dalla Protezione Civile quotidianamente, disponibili sul repository ufficiale GitHub, attraverso il modello RDF Data Cube Vocabulary.

Una sintesi del modello è rappresentata nella seguente figura:

RDF Data Cube Vocabulary

I dataset della protezione civile sono nella seguente forma:

data,stato,ricoverati_con_sintomi,terapia_intensiva,totale_ospedalizzati,isolamento_domiciliare,totale_positivi,variazione_totale_positivi,nuovi_positivi,dimessi_guariti,deceduti,totale_casi,tamponi,note_it,note_en
2020-02-24T18:00:00,ITA,101,26,127,94,221,0,221,1,7,229,4324,,
data,stato,codice_regione,denominazione_regione,lat,long,ricoverati_con_sintomi,terapia_intensiva,totale_ospedalizzati,isolamento_domiciliare,totale_positivi,variazione_totale_positivi,nuovi_positivi,dimessi_guariti,deceduti,totale_casi,tamponi,note_it,note_en
2020-02-24T18:00:00,ITA,03,Lombardia,45.46679409,9.190347404,76,19,95,71,166,0,166,0,6,172,1463,,
data,stato,codice_regione,denominazione_regione,codice_provincia,denominazione_provincia,sigla_provincia,lat,long,totale_casi,note_it,note_en
2020-03-30T17:00:00,ITA,03,Lombardia,016,Bergamo,BG,45.69441368,9.668424528,8664,,

Metodologia

Applicare il modello semantico RDF Data Cube Vocabulary ad un dataset significa definire per ciascuna osservazione i seguenti concetti:

  • Dimensioni
  • Misure
  • Attributi

E' possibile applicare diverse strategie sia per l'architettura delle URI sia per l'organizzazione delle osservazioni all'interno del dataset. Per maggiori dettagli implementativi si consiglia di consultare la raccomandazione W3C sopra citata.

Per motivi di semplicità e facilità delle interrogazioni l'approccio scelto è row-oriented e multiple measures (vedi raccomandazione).

Andamento Nazionale

Download dati

  • URI: Ciascuna riga viene identificata da una apposita URI secondo il seguente schema:

http://www.protezionecivile.gov.it/dataset/covid19/national-trend/observations/20200330

Dimensioni

Nome Property
Data http://purl.org/linked-data/sdmx/2009/dimension#refTime
Area geografica http://purl.org/linked-data/sdmx/2009/dimension#refArea

Misurazioni

Nome Property
Ricoverati con sintomi http://www.protezionecivile.gov.it/ns/hospitalizedWithSymptoms
Terapia intensiva http://www.protezionecivile.gov.it/ns/intensiveCare
Totale ospedalizzati http://www.protezionecivile.gov.it/ns/totalHospitalized
Isolamento domiciliare http://www.protezionecivile.gov.it/ns/homeIsolation
Totale positivi http://www.protezionecivile.gov.it/ns/totalPositive
Variazione totale positivi http://www.protezionecivile.gov.it/ns/totalPositiveVariation
Nuovi positivi http://www.protezionecivile.gov.it/ns/newPositive
Dimessi guariti http://www.protezionecivile.gov.it/ns/healed
Deceduti http://www.protezionecivile.gov.it/ns/deads
Tamponi http://www.protezionecivile.gov.it/ns/swabs
Totale casi http://www.protezionecivile.gov.it/ns/totalCases

L'istanza relativa alla dimensione dell'area geografica è stata presa dal progetto Ontopia, nella fattispecie dal vocabolario controllato della classificazione territoriale:

<https://w3id.org/italia/controlled-vocabulary/territorial-classifications/countries/italy/ITA>

Andamento Regionale

Download dati

  • URI: Ciascuna riga viene identificata da una apposita URI secondo il seguente schema:

http://www.protezionecivile.gov.it/dataset/covid19/regional-trend/observations/20200224/regions/01

Dimensioni

Nome Property
Data http://purl.org/linked-data/sdmx/2009/dimension#refTime
Area geografica http://purl.org/linked-data/sdmx/2009/dimension#refArea

Misurazioni

Nome Property
Ricoverati con sintomi http://www.protezionecivile.gov.it/ns/hospitalizedWithSymptoms
Terapia intensiva http://www.protezionecivile.gov.it/ns/intensiveCare
Totale ospedalizzati http://www.protezionecivile.gov.it/ns/totalHospitalized
Isolamento domiciliare http://www.protezionecivile.gov.it/ns/homeIsolation
Totale positivi http://www.protezionecivile.gov.it/ns/totalPositive
Variazione totale positivi http://www.protezionecivile.gov.it/ns/totalPositiveVariation
Nuovi positivi http://www.protezionecivile.gov.it/ns/newPositive
Dimessi guariti http://www.protezionecivile.gov.it/ns/healed
Deceduti http://www.protezionecivile.gov.it/ns/deads
Tamponi http://www.protezionecivile.gov.it/ns/swabs
Totale casi http://www.protezionecivile.gov.it/ns/totalCases

L'istanza relativa alla dimensione dell'area geografica (regioni) è stata presa dal progetto Ontopia, nella fattispecie dal vocabolario controllato della classificazione territoriale:

<https://w3id.org/italia/controlled-vocabulary/territorial-classifications/regions/02>

Andamento Provinciale

Download dati

  • URI: Ciascuna riga viene identificata da una apposita URI secondo il seguente schema:

http://www.protezionecivile.gov.it/dataset/covid19/provincial-trend/observations/20200224/regions/01/provinces/001

Dimensioni

Nome Property
Data http://purl.org/linked-data/sdmx/2009/dimension#refTime
Area geografica http://purl.org/linked-data/sdmx/2009/dimension#refArea

Misurazioni

Nome Property
Totale casi http://www.protezionecivile.gov.it/ns/totalCases

L'istanza relativa alla dimensione dell'area geografica (province) è stata presa dal progetto Ontopia, nella fattispecie dal vocabolario controllato della classificazione territoriale:

<https://w3id.org/italia/controlled-vocabulary/territorial-classifications/provinces/001>

Esecuzione

Scaricare il progetto, entrare nell'apposita directory ed eseguire da shell:

./run.sh

Lo script creerà l'ambiente necessario (se non già presente), effettuerà il download dei dataset di interesse del progetto e avvierà la generazione di triple RDF in formato turtle disponibili al fine del processo all'interno della directory output.

#!/bin/bash

folder="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

set -x

# Creazione ambiene
mkdir -p "$folder"/input
mkdir -p "$folder"/output
rm -r "$folder"/input/*.*
rm -r "$folder"/output/*.*

# Download file CSV dal repository github del Dipartimento Protezione Civile (https://github.com/pcm-dpc/COVID-19)
curl -sL "https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-andamento-nazionale/dpc-covid19-ita-andamento-nazionale.csv" > "$folder"/input/dpc-covid19-ita-andamento-nazionale.csv
curl -sL "https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-regioni/dpc-covid19-ita-regioni.csv" > "$folder"/input/dpc-covid19-ita-regioni.csv
curl -sL "https://raw.githubusercontent.com/pcm-dpc/COVID-19/master/dati-province/dpc-covid19-ita-province.csv" > "$folder"/input/dpc-covid19-ita-province.csv

# Generazione triple RDF
cd src
for i in "$folder"/src/*generator.py; do
  python $i
done

SPARQL Endpoint

I dati generati sono disponibili al seguente SPARQL Endpoint, aggiornato quotidianamente.

Query

  • Quali sono i dataset presenti nello store?

Demo

PREFIX qb: <http://purl.org/linked-data/cube#> 
PREFIX sdmx-dimension: <http://purl.org/linked-data/sdmx/2009/dimension#> 
PREFIX dpc: <http://www.protezionecivile.gov.it/ns/>
prefix l0: <https://w3id.org/italia/onto/l0/> 
SELECT ?dataset ?label
WHERE {
?dataset a qb:Dataset;
         rdfs:label ?label.
}
  • Quali sono i dati sanitari totali italiani del 25 marzo 2020?

Demo

PREFIX qb: <http://purl.org/linked-data/cube#> 
PREFIX sdmx-dimension: <http://purl.org/linked-data/sdmx/2009/dimension#> 
PREFIX dpc: <http://www.protezionecivile.gov.it/ns/>
prefix l0: <https://w3id.org/italia/onto/l0/> 

select ?area ?date ?hospitalizedWithSymptoms ?intensiveCare 
?totalHospitalized ?homeIsolation ?totalPositive 
?newPositive ?totalPositiveVariation ?healed ?deads ?totalCases ?swabs
WHERE
{
    ?obs a qb:Observation;
         qb:dataset <http://www.protezionecivile.gov.it/dataset/covid19/national-trend>;
         sdmx-dimension:refTime ?date;
         sdmx-dimension:refArea ?area;
         dpc:hospitalizedWithSymptoms ?hospitalizedWithSymptoms ;
         dpc:intensiveCare ?intensiveCare ;
         dpc:totalHospitalized ?totalHospitalized ;
         dpc:homeIsolation ?homeIsolation ;
         dpc:totalPositive ?totalPositive ;
         dpc:newPositive ?newPositive ;
         dpc:totalPositiveVariation ?totalPositiveVariation ;
         dpc:healed ?healed ;
         dpc:deads ?deads ;
         dpc:totalCases ?totalCases ;
         dpc:swabs ?swabs .
         FILTER(?date = "2020-03-25"^^xsd:date).
}
  • Quali sono i dati sanitari della regione Lombardia del 25 marzo 2020?

Per motivi di performance sono stati caricati nello store anche i vocabolari controllati di Ontopia.

Demo

PREFIX qb: <http://purl.org/linked-data/cube#> 
PREFIX sdmx-dimension: <http://purl.org/linked-data/sdmx/2009/dimension#> 
PREFIX dpc: <http://www.protezionecivile.gov.it/ns/>
prefix l0: <https://w3id.org/italia/onto/l0/> 

select ?obs ?areaName ?date ?intensiveCare 
       ?totalHospitalized ?totalPositive ?homeIsolation 
       ?newPositive ?totalPositiveVariation 
       ?healed ?deads ?totalCases ?swabs
WHERE
{
    ?obs a qb:Observation;
         qb:dataset <http://www.protezionecivile.gov.it/dataset/covid19/regional-trend>;
         sdmx-dimension:refTime ?date;
         sdmx-dimension:refArea ?area;
         dpc:totalHospitalized ?totalHospitalized ;
         dpc:intensiveCare ?intensiveCare ;
         dpc:homeIsolation ?homeIsolation ;
         dpc:totalPositive ?totalPositive ;
         dpc:newPositive ?newPositive ;
         dpc:totalCases ?totalCases ;
         dpc:totalPositiveVariation ?totalPositiveVariation ;
         dpc:deads ?deads ;
         dpc:healed ?healed ;
         dpc:swabs ?swabs .
         ?area l0:name ?areaName.
         FILTER regex(?areaName,"^Lombardia","i").
         FILTER(?date = "2020-03-25"^^xsd:date).
}
  • Quali sono i casi totali della provincia di Lodi?

Per motivi di performance sono stati caricati nello store anche i vocabolari controllati di Ontopia.

Demo

PREFIX qb: <http://purl.org/linked-data/cube#> 
PREFIX sdmx-dimension: <http://purl.org/linked-data/sdmx/2009/dimension#> 
PREFIX dpc: <http://www.protezionecivile.gov.it/ns/>
prefix l0: <https://w3id.org/italia/onto/l0/> 

select ?areaName ?date ?totalCases 
WHERE
{
    ?obs a qb:Observation;
         qb:dataset <http://www.protezionecivile.gov.it/dataset/covid19/provincial-trend>;
         sdmx-dimension:refTime ?date;
         sdmx-dimension:refArea ?area;
         dpc:totalCases ?totalCases .
         ?area l0:name ?areaName.
         FILTER regex(?areaName,"^Lodi","i").
}
ORDER BY DESC(?date)

Ulteriori sviluppi

  • Arricchire i dati RDF collegandoli con dataset esterni