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 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.
- https://datalab.updog.co/2018/06/09/2018-06-09-leggere-la-statistica-pubblica-con-r/ [return]
- https://it.wikipedia.org/wiki/SDMX [return]
- http://ec.europa.eu/eurostat/web/sdmx-web-services/sdmx [return]
- http://ec.europa.eu/eurostat/web/sdmx-infospace/trainings-tutorials/trainings [return]
- https://cran.r-project.org/web/checks/check_results_rsdmx.html [return]
- https://github.com/opensdmx/rsdmx [return]
- http://dati.istat.it/ [return]