Questo articolo.

E’il secondo di una serie sulla lettura dei dati ISTAT con R. Per facilitare la lettura tutti gli indirizzi dei siti citati sono riportati nelle note in fondo1.

Lo standard SDMX.

Lo standard SDMX (Statistical Data and Metadata eXchange) è un linguaggio XML per lo scambio di dati e metadati statistici. L’iniziativa è promossa e incoraggiata da istituzioni internazionali tra le quali la Bank for International Settlements, la Banca centrale europea, l’Ufficio statistico della comunità europea (Eurostat), il Fondo monetario internazionale, l’OCSE, le Nazioni Unite (Statistics Division) e la Banca Mondiale.2

Ci sono molte fonti disponibili per capire meglio lo standard ed imparare ad usarlo anche per distribuire dati propri. Consiglio la lettura delle fonti ufficiali. In particolare Eurostat ha delle ottime pagine sull’argomento3 e rende anche disponibili tutorial e un corso vero e proprio4.

Leggere i dati in R: rsdmx.

Rsdmx è una libreria sviluppata e attivamente mantenuta da Emanuel Blondel. Colgo l’occasione per ringraziarlo pubblicamente, e come lui richiede, pubblico il suo badge DOI e le sue citazioni ufficiali:

citation(package = "rsdmx")
## 
## To cite package 'rsdmx' in publications use:
## 
##   Emmanuel Blondel (2018). rsdmx: Tools for Reading SDMX Data and
##   Metadata. https://github.com/opensdmx/rsdmx,
##   http://www.sdmx.org.
## 
## A BibTeX entry for LaTeX users is
## 
##   @Manual{,
##     title = {rsdmx: Tools for Reading SDMX Data and Metadata},
##     author = {Emmanuel Blondel},
##     year = {2018},
##     note = {https://github.com/opensdmx/rsdmx, http://www.sdmx.org},
##   }

Installare rsdmx.

la libreria si può installare dal CRAN5:

install.packages("rsdmx")

oppure installare la versione più recente dalla pagina github6 del progetto:

require("devtools")
install_github("rsdmx", "opensdmx")

I principi di funzionamento

Rsdmx si incarica di scaricare un dataset in formato sdmx e di trasformarlo in un oggetto R elaborabile (ad esempio un dataframe).

Per scaricare un dataset si può invocare il comando readSDMX() inserendo direttamente un URL sdmx propriamente costruito come in questo esempio:

readSDMX("http://data.fao.org/sdmx/repository/data/CROP_PRODUCTION/.156.5312../FAO?startPeriod=2008&endPeriod=2008")

Visto che la sintassi degli URL sdmx non è sempre facile da ricostruire, rsdmx funziona anche in helper mode, vale a dire che per alcuni provider di informazioni statistiche (ISTAT compresa) che utilizzano lo standard è possibile costruire una query più facilmente.

As esempio queste istruzioni consentono di ricevere il catalogo completo dei flussi dati resi disponibili da ISTAT e di trasformarlo in un data frame:

dataflows <- readSDMX(providerId = "ISTAT", resource = "dataflow")
istatFlows <- as.data.frame(dataflows)

Leggiamo le prime righe e le prime quattro colonne:

knitr::kable(head(istatFlows[1:5,1:4]))
id agencyID Name.en Name.it
12_60 ESTAT Public water supply use Distribuzione di acqua potabile
149_327 ESTAT Annual gross, net hours, holiday pay and other hours reduction according to collective labour agreements Orario contrattuale annuo lordo, netto, ferie e altre ore di riduzione
22_315 ESTAT Resident population - balance Popolazione residente - bilancio
97_366 ESTAT Social protection accounts (millions of euro) Conti della Protezione sociale (milioni di euro)
101_22 IT1 Plant protection products Fitosanitari

La colonna id ci da l’identificativo del flusso dati dovremo usare per interrogare il data base, la colonna Name.it riporta la descrizione in italiano del flusso. Ricordiamoci sempre che sono gli stessi dati riportati da Istat nel suo servizio di statistiche on-line7.

Guardiamo alcune righe del catalogo che riguardano le retribuzioni:

istatFlows[grepl("retribuzion", istatFlows$Name.it, ignore.case = T),1:4]
id agencyID Name.en Name.it
88 155_274 IT1 Cash and accrual wages according to collective labour agreements per public administration employee per agreement - annual data - euros Retribuzione contrattuale di cassa e di competenza per dipendente della pubblica amministrazione per contratto - dati annuali - euro
89 155_318 IT1 Wages according to collective labour agreements by agreement - monthly and annual data . Retribuzioni contrattuali per contratto - dati mensili e annuali .
90 155_358 IT1 Wages according to collective labour agreements by Nace rev.2 Retribuzioni contrattuali per Ateco 2007
91 155_374 IT1 Gross earnings - Enterprises with employees Retribuzioni lorde - Imprese con dipendenti
259 392_585 IT1 Wage and hours worked Retribuzione e orario di lavoro
302 535_194 IT1 Gross earnings - Enterprises with more than 500 employees Retribuzioni lorde - Imprese con almeno 500 dipendenti
314 612_939 IT1 Employement and wage Occupazione e retribuzione
316 613_935 IT1 Employment, wage and hours worked Occupazione, retribuzione e orario di lavoro

L’ultima riga contiene un data flow (id 613_935) con informazioni su retribuzioni e orario di lavoro che provengono dall’indagine 2014 sui salari (uso questo esempio perchè è di dimensioni ridotte).

Possiamo scaricarlo così:

sdmx.data <- readSDMX(providerId = "ISTAT", resource = "data", flowRef  = "613_935", dsd = T)

Leggiamo assieme l’istruzione readSDMX:

  • providerId = "ISTAT" indica il provider già codificato nel package;
  • resource = "data" indica che vogliamo scaricared un flusso dati;
  • flowRef = "613_935" individua quale flusso scaricare;
  • dsd = T associa i metadati al dataset, rendendo leggibili i codici contenuti attraverso le label.

L’istruzione:

salari <- as.data.frame(sdmx.data, labels = T)

trasforma il flusso dati in un dataframe. Ne guardiamo qualche riga e qualche colonna:

ITTER107_label.it TIPO_DATO_label.it CONDIZIONE_DICH3_OCC_label.it obsValue
88 Lombardia diplomati lavorano 31527
87 Lombardia diplomati cercano lavoro 8240
86 Lombardia diplomati studiano 21815
85 Lombardia diplomati altra condizione 2087
92 Lombardia diplomati totale 63670

Bene, per oggi basta. Nella prossima puntata esploreremo altre basi dati.