vignettes/understanding-opendataes-a-case-study-approach.Rmd
understanding-opendataes-a-case-study-approach.Rmd
The idea behind opendataes
is to allow users to read datasets as easy as possible while providing a stable and predictable behaviour. This is a bit tricky given that https://datos.gob.es aggregates from many different API’s which don’t have a unified standardized behavior. That is, each entity does not conform to a centralized guideline to their data format. In this vignette we’ll explore how we can read data using openes_load
but diving into some of the pitfalls of having such an unstandardized API.
First, let’s read through a messy dataset, or in other words, a real-world dataset. An interesting data is one from the Ayuntamiento de Barcelona which details the causes of car accidents in the city. We could do this in two ways: either searching for the direct end path of the URL in https://datos.gob.es or we could search for the data interactively through keywords.
To search for keywords we need to know in advanced which publisher published the data that we’re looking for. Because only very few (as of October 2018) publishers have standardized datasets across their datasets, opendataes
will aggregate new publishers slowly as they can show to provide stableness. We can check out which publishers are available with publishers_available
.
library(opendataes)
#>
#> Please cite as:
#> Cimentada, J. and Jorge Lopez (2019). Interact with the datos.gob.es API to download public data from all of Spain R package version 0.0.1
publishers_available
#> publishers publisher_code
#> 1 Ayuntamiento de Barcelona L01080193
#> 2 Ayuntamiento de Madrid L01280796
#> 3 Ayuntamiento de Valencia L01462508
#> 4 Ayuntamiento de Las Palmas de Gran Canaria L01350167
#> 5 Ayuntamiento de Bilbao L01480209
#> 6 Ayuntamiento de Zaragoza L01502973
#> 7 Ayuntamiento de Malaga L01290672
#> 8 Ayuntamiento de Gijon L01330241
#> 9 Ayuntamiento de Santander L01390759
#> 10 Ayuntamiento de Alcobendas L01280066
#> 11 Junta de Castilla y Leon A07002862
Let’s subset the code of ‘Ayuntamiento de Barcelona’ and search for the keyword ‘accidentes’ which means accidents.
pub_code <- publishers_available$publisher_code[publishers_available$publishers == 'Ayuntamiento de Barcelona']
kw <- openes_keywords('accidentes', pub_code)
#> Error in openes_keywords("accidentes", pub_code): There are not datasets matching the keyword `accidentes` and publisher `L01080193`
Alright, so we need to be more creative
kw <- openes_keywords('causas accidentes', pub_code)
#> Error in openes_keywords("causas accidentes", pub_code): There are not datasets matching the keyword `causas accidentes` and publisher `L01080193`
When this happens, it’s just better to search on the website at https://datos.gob.es. Results there show that some of the keywords are ‘Accidentalidad’, ‘Guardia Urbana’ or ‘Causas’ ( see here). To showcase how the R-based search works, we’ll continue using the new key words.
Side note: Why should we do the keyword-based search if we can use the website directly? Because you can use more generic keywords to look for similar datasets. For example, if we searched for ‘elecciones’ (elections) we would get many different datasets related to elections which could be streamlined to openes_load
for easy reading. By doing it manually, you’d have to search each datasets separately and copy it’s end path.
Moving on to the keyword search, we type in the new keyword.
kw <- openes_keywords('Accidentalidad', pub_code)
kw
#> # A tibble: 5 x 5
#> description publisher is_readable path_id url
#> <chr> <chr> <lgl> <chr> <chr>
#> 1 Listado de los vehíc… Ayuntamient… TRUE l01080193-vehic… http://datos.…
#> 2 Personas involucrada… Ayuntamient… TRUE l01080193-perso… http://datos.…
#> 3 Listado de los accid… Ayuntamient… TRUE l01080193-accid… http://datos.…
#> 4 Listado de los tipos… Ayuntamient… TRUE l01080193-accid… http://datos.…
#> 5 Listado de de la ca… Ayuntamient… TRUE l01080193-descr… http://datos.…
Looking at the description column, we can see the dataset that we’re looking for which states ‘Listado de los tipos de accidentes gestionados por la Guardia Urbana en la ciudad de Barcelona’. Let’s filter down only to that dataset and pass it to openes_load
. Note that openes_load
will throw an error if you ever pass this dataset with more than one row. It will only read one dataset and that implies a dataset with only one row.
kw <- kw[grepl('Listado de los tipos de accidentes gestionados por la Guardia Urbana en la ciudad de Barcelona.', kw$description), ]
accidents <- openes_load(kw)
accidents
#> <datos.gob.es API>
#> Description: Listado de los tipos de accidentes gestionados por la Guardia ...
#> Publisher: Ayuntamiento de Barcelona
#> Languages: en, es, ca
#> Date of release: 2015-11-18 23:00:00
#> # of files read: 6 out of 11
The printed metadata from above is just a summary of the metadata slot:
accidents$metadata
#> # A tibble: 3 x 8
#> keywords language description url date_issued date_modified
#> <chr> <chr> <chr> <chr> <dttm> <chr>
#> 1 Accidental… en List of types… http://… 2015-11-18 23:00:00 No modificat…
#> 2 Accidental… es Listado de lo… http://… 2015-11-18 23:00:00 No modificat…
#> 3 Accidental… ca Llistat dels … http://… 2015-11-18 23:00:00 No modificat…
#> # … with 2 more variables: publisher <chr>, publisher_data_url <chr>
and the data slot:
accidents$data
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
#>
#> $`Distribucion sin nombre`
#> # A tibble: 10,536 x 22
#> Numero_expedient Codi_districte Nom_districte Codi_barri Nom_barri
#> <chr> <dbl> <chr> <dbl> <chr>
#> 1 2019S000253 10 Sant Martí 64 el Camp de l'Arpa d…
#> 2 2019S006454 10 Sant Martí 64 el Camp de l'Arpa d…
#> 3 2019S006494 10 Sant Martí 64 el Camp de l'Arpa d…
#> 4 2019S009443 10 Sant Martí 64 el Camp de l'Arpa d…
#> 5 2019S004807 10 Sant Martí 64 el Camp de l'Arpa d…
#> 6 2019S009715 10 Sant Martí 64 el Camp de l'Arpa d…
#> 7 2019S008122 10 Sant Martí 64 el Camp de l'Arpa d…
#> 8 2019S001387 10 Sant Martí 64 el Camp de l'Arpa d…
#> 9 2019S005614 10 Sant Martí 72 Sant Martí de Prove…
#> 10 2019S005960 10 Sant Martí 72 Sant Martí de Prove…
#> # … with 10,526 more rows, and 17 more variables: Codi_carrer <dbl>,
#> # Nom_carrer <chr>, Num_postal_caption <chr>, Descripcio_dia_setmana <chr>,
#> # Dia_setmana <chr>, Descripcio_tipus_dia <chr>, NK_Any <dbl>, Mes_any <dbl>,
#> # Nom_mes <chr>, Dia_mes <dbl>, Hora_dia <dbl>, Descripcio_torn <chr>,
#> # Descripcio_tipus_accident <chr>, Coordenada_UTM_X <dbl>,
#> # Coordenada_UTM_Y <dbl>, Longitud <dbl>, Latitud <dbl>
#>
#> $`Distribucion sin nombre`
#> # A tibble: 6,580 x 22
#> Numero_expedient Codi_districte Nom_districte Codi_barri Nom_barri
#> <chr> <dbl> <chr> <dbl> <chr>
#> 1 2020S000001 7 Horta-Guinardó 36 la Font d'en Far…
#> 2 2020S000002 3 Sants-Montjuïc 16 la Bordeta
#> 3 2020S000003 2 Eixample 8 l'Antiga Esquerr…
#> 4 2020S000004 4 Les Corts 19 les Corts
#> 5 2020S000005 2 Eixample 7 la Dreta de l'Ei…
#> 6 2020S000006 3 Sants-Montjuïc 17 Sants - Badal
#> 7 2020S000007 9 Sant Andreu 60 Sant Andreu
#> 8 2020S000008 5 Sarrià-Sant Ger… 23 Sarrià
#> 9 2020S000009 2 Eixample 7 la Dreta de l'Ei…
#> 10 2020S000010 10 Sant Martí 73 la Verneda i la …
#> # … with 6,570 more rows, and 17 more variables: Codi_carrer <dbl>,
#> # Nom_carrer <chr>, Num_postal_caption <chr>, Descripcio_dia_setmana <chr>,
#> # Dia_setmana <chr>, Descripcio_tipus_dia <chr>, NK_Any <dbl>, Mes_any <dbl>,
#> # Nom_mes <chr>, Dia_mes <dbl>, Hora_dia <chr>, Descripcio_torn <chr>,
#> # Descripcio_tipus_accident <chr>, Coordenada_UTM_X <dbl>,
#> # Coordenada_UTM_Y <dbl>, Longitud <dbl>, Latitud <dbl>
#>
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
#>
#> $`Distribucion sin nombre`
#> # A tibble: 10,551 x 22
#> Codi_expedient Codi_districte Nom_districte Codi_barri Nom_barri Codi_carrer
#> <chr> <dbl> <chr> <dbl> <chr> <dbl>
#> 1 2018S000001 3 Sants-Montjuïc 11 el Poble… 198804
#> 2 2018S000002 2 Eixample 9 la Nova … 361406
#> 3 2018S000003 10 Sant Martí 64 el Camp … 161407
#> 4 2018S000004 8 Nou Barris 44 Vilapici… 111704
#> 5 2018S000005 8 Nou Barris 56 Vallbona 330606
#> 6 2018S000006 4 Les Corts 19 les Corts 144601
#> 7 2018S000007 10 Sant Martí 73 la Verne… 60807
#> 8 2018S000008 3 Sants-Montjuïc 17 Sants - … 312400
#> 9 2018S000009 2 Eixample 10 Sant Ant… 323203
#> 10 2018S000010 8 Nou Barris 45 Porta 100209
#> # … with 10,541 more rows, and 16 more variables: Nom_carrer <chr>,
#> # Num_postal <chr>, Dia_setmana <chr>, ID_Dia_setmana <chr>, Tipus_dia <chr>,
#> # Any <dbl>, Mes <dbl>, Nom_mes <chr>, Dia_de_mes <dbl>, Hora_de_dia <chr>,
#> # Torn <chr>, Tipus_accident <chr>, Coordenada_UTM_X <dbl>,
#> # Coordenada_UTM_Y <dbl>, Longitud <dbl>, Latitud <dbl>
#>
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
#>
#> $`Distribucion sin nombre`
#> # A tibble: 10,521 x 20
#> `Número d'expedi… `Codi districte` `Nom districte` `Codi barri` `Nom barri`
#> <chr> <dbl> <chr> <dbl> <chr>
#> 1 2015S000215 10 Sant Martí 64 el Camp de l…
#> 2 2015S000787 10 Sant Martí 64 el Camp de l…
#> 3 2015S000390 10 Sant Martí 64 el Camp de l…
#> 4 2015S007294 10 Sant Martí 64 el Camp de l…
#> 5 2015S009836 10 Sant Martí 64 el Camp de l…
#> 6 2015S009453 10 Sant Martí 64 el Camp de l…
#> 7 2015S007312 10 Sant Martí 64 el Camp de l…
#> 8 2015S004660 10 Sant Martí 64 el Camp de l…
#> 9 2015S006407 10 Sant Martí 64 el Camp de l…
#> 10 2015S009834 10 Sant Martí 64 el Camp de l…
#> # … with 10,511 more rows, and 15 more variables: Codi carrer <dbl>,
#> # Nom carrer <chr>, Num postal caption <chr>, Descripció dia setmana <chr>,
#> # Dia setmana <chr>, Descripció tipus dia <chr>, NK Any <dbl>,
#> # Mes de any <dbl>, Nom mes <chr>, Dia de mes <dbl>, Hora de dia <chr>,
#> # Descripció torn <chr>, Descripció tipus accident <chr>,
#> # Coordenada UTM (Y) <dbl>, Coordenada UTM (X) <dbl>
#>
#> $`Distribucion sin nombre`
#> # A tibble: 11,009 x 22
#> Numero_expedient Codi_districte Nom_districte Codi_barri Nom_barri
#> <chr> <dbl> <chr> <dbl> <chr>
#> 1 2017S009418 -1 Desconegut -1 Desconegut
#> 2 2017S008852 -1 Desconegut -1 Desconegut
#> 3 2017S001023 10 Sant Martí 64 el Camp de l'Arpa d…
#> 4 2017S009198 10 Sant Martí 64 el Camp de l'Arpa d…
#> 5 2017S006546 10 Sant Martí 64 el Camp de l'Arpa d…
#> 6 2017S003698 10 Sant Martí 64 el Camp de l'Arpa d…
#> 7 2017S004977 10 Sant Martí 64 el Camp de l'Arpa d…
#> 8 2017S008080 10 Sant Martí 64 el Camp de l'Arpa d…
#> 9 2017S004521 10 Sant Martí 64 el Camp de l'Arpa d…
#> 10 2017S004180 10 Sant Martí 64 el Camp de l'Arpa d…
#> # … with 10,999 more rows, and 17 more variables: Codi_carrer <dbl>,
#> # Nom_carrer <chr>, Num_postal_caption <chr>, Descripcio_dia_setmana <chr>,
#> # Dia_setmana <chr>, Descripcio_tipus_dia <chr>, Any <dbl>, Mes_any <dbl>,
#> # Nom_mes <chr>, Dia_mes <dbl>, Hora_dia <dbl>, Descripcio_torn <chr>,
#> # Descripcio_tipus_accident <chr>, Coordenada_UTM_X <dbl>,
#> # Coordenada_UTM_Y <dbl>, Longitud <dbl>, Latitud <dbl>
#>
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
#>
#> $`Distribucion sin nombre`
#> # A tibble: 10,701 x 22
#> Numero_expedient Codi_districte Nom_districte Codi_barri Nom_barri
#> <chr> <dbl> <chr> <dbl> <chr>
#> 1 2016S002575 10 Sant Martí 64 el Camp de l'Arpa d…
#> 2 2016S001146 10 Sant Martí 64 el Camp de l'Arpa d…
#> 3 2016S009619 10 Sant Martí 64 el Camp de l'Arpa d…
#> 4 2016S003881 10 Sant Martí 64 el Camp de l'Arpa d…
#> 5 2016S004162 10 Sant Martí 64 el Camp de l'Arpa d…
#> 6 2016S009951 10 Sant Martí 64 el Camp de l'Arpa d…
#> 7 2016S004619 10 Sant Martí 64 el Camp de l'Arpa d…
#> 8 2016S009702 10 Sant Martí 64 el Camp de l'Arpa d…
#> 9 2016S003529 10 Sant Martí 64 el Camp de l'Arpa d…
#> 10 2016S008654 10 Sant Martí 64 el Camp de l'Arpa d…
#> # … with 10,691 more rows, and 17 more variables: Codi_carrer <dbl>,
#> # Nom_carrer <chr>, Num_postal_caption <chr>, Descripcio_dia_setmana <chr>,
#> # Dia_setmana <chr>, Descripcio_tipus_dia <chr>, Any <dbl>, Mes_any <dbl>,
#> # Nom_mes <chr>, Dia_mes <dbl>, Hora_dia <dbl>, Descripcio_torn <chr>,
#> # Descripcio_tipus_accident <chr>, Coordenada_UTM_X <dbl>,
#> # Coordenada_UTM_Y <dbl>, Longitud <dbl>, Latitud <dbl>
#>
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
Oopss, that’s a weird error. This is one problem that can happen quite often because Spain shares many languages inside it’s territory and some datasets might have different encodings. We can figure out the encoding with readr
and just pass it to openes_load
.
# Figure out the encoding using only the first dataset which suggests it's ASCII
readr::guess_encoding(accidents$data[[1]])
#> Warning in if (stringi::stri_enc_isascii(lines)) {: the condition has length > 1
#> and only the first element will be used
#> # A tibble: 1 x 2
#> encoding confidence
#> <chr> <dbl>
#> 1 ASCII 1
accidents <- openes_load(kw, encoding = 'ASCII')
The result in the data slot is always a list that will contain data frames either with the data (if it was successful in reading it) or with the URL to the dataset (if it failed reading it for some reason).
accidents$data
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
#>
#> $`Distribucion sin nombre`
#> # A tibble: 10,536 x 22
#> Numero_expedient Codi_districte Nom_districte Codi_barri Nom_barri
#> <chr> <dbl> <chr> <dbl> <chr>
#> 1 2019S000253 10 Sant Martí 64 el Camp de l'Arpa d…
#> 2 2019S006454 10 Sant Martí 64 el Camp de l'Arpa d…
#> 3 2019S006494 10 Sant Martí 64 el Camp de l'Arpa d…
#> 4 2019S009443 10 Sant Martí 64 el Camp de l'Arpa d…
#> 5 2019S004807 10 Sant Martí 64 el Camp de l'Arpa d…
#> 6 2019S009715 10 Sant Martí 64 el Camp de l'Arpa d…
#> 7 2019S008122 10 Sant Martí 64 el Camp de l'Arpa d…
#> 8 2019S001387 10 Sant Martí 64 el Camp de l'Arpa d…
#> 9 2019S005614 10 Sant Martí 72 Sant Martí de Prove…
#> 10 2019S005960 10 Sant Martí 72 Sant Martí de Prove…
#> # … with 10,526 more rows, and 17 more variables: Codi_carrer <dbl>,
#> # Nom_carrer <chr>, Num_postal_caption <chr>, Descripcio_dia_setmana <chr>,
#> # Dia_setmana <chr>, Descripcio_tipus_dia <chr>, NK_Any <dbl>, Mes_any <dbl>,
#> # Nom_mes <chr>, Dia_mes <dbl>, Hora_dia <dbl>, Descripcio_torn <chr>,
#> # Descripcio_tipus_accident <chr>, Coordenada_UTM_X <dbl>,
#> # Coordenada_UTM_Y <dbl>, Longitud <dbl>, Latitud <dbl>
#>
#> $`Distribucion sin nombre`
#> # A tibble: 6,580 x 22
#> Numero_expedient Codi_districte Nom_districte Codi_barri Nom_barri
#> <chr> <dbl> <chr> <dbl> <chr>
#> 1 2020S000001 7 Horta-Guinardó 36 la Font d'en Far…
#> 2 2020S000002 3 Sants-Montjuïc 16 la Bordeta
#> 3 2020S000003 2 Eixample 8 l'Antiga Esquerr…
#> 4 2020S000004 4 Les Corts 19 les Corts
#> 5 2020S000005 2 Eixample 7 la Dreta de l'Ei…
#> 6 2020S000006 3 Sants-Montjuïc 17 Sants - Badal
#> 7 2020S000007 9 Sant Andreu 60 Sant Andreu
#> 8 2020S000008 5 Sarrià-Sant Ger… 23 Sarrià
#> 9 2020S000009 2 Eixample 7 la Dreta de l'Ei…
#> 10 2020S000010 10 Sant Martí 73 la Verneda i la …
#> # … with 6,570 more rows, and 17 more variables: Codi_carrer <dbl>,
#> # Nom_carrer <chr>, Num_postal_caption <chr>, Descripcio_dia_setmana <chr>,
#> # Dia_setmana <chr>, Descripcio_tipus_dia <chr>, NK_Any <dbl>, Mes_any <dbl>,
#> # Nom_mes <chr>, Dia_mes <dbl>, Hora_dia <chr>, Descripcio_torn <chr>,
#> # Descripcio_tipus_accident <chr>, Coordenada_UTM_X <dbl>,
#> # Coordenada_UTM_Y <dbl>, Longitud <dbl>, Latitud <dbl>
#>
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
#>
#> $`Distribucion sin nombre`
#> # A tibble: 10,551 x 22
#> Codi_expedient Codi_districte Nom_districte Codi_barri Nom_barri Codi_carrer
#> <chr> <dbl> <chr> <dbl> <chr> <dbl>
#> 1 2018S000001 3 Sants-Montjuïc 11 el Poble… 198804
#> 2 2018S000002 2 Eixample 9 la Nova … 361406
#> 3 2018S000003 10 Sant Martí 64 el Camp … 161407
#> 4 2018S000004 8 Nou Barris 44 Vilapici… 111704
#> 5 2018S000005 8 Nou Barris 56 Vallbona 330606
#> 6 2018S000006 4 Les Corts 19 les Corts 144601
#> 7 2018S000007 10 Sant Martí 73 la Verne… 60807
#> 8 2018S000008 3 Sants-Montjuïc 17 Sants - … 312400
#> 9 2018S000009 2 Eixample 10 Sant Ant… 323203
#> 10 2018S000010 8 Nou Barris 45 Porta 100209
#> # … with 10,541 more rows, and 16 more variables: Nom_carrer <chr>,
#> # Num_postal <chr>, Dia_setmana <chr>, ID_Dia_setmana <chr>, Tipus_dia <chr>,
#> # Any <dbl>, Mes <dbl>, Nom_mes <chr>, Dia_de_mes <dbl>, Hora_de_dia <chr>,
#> # Torn <chr>, Tipus_accident <chr>, Coordenada_UTM_X <dbl>,
#> # Coordenada_UTM_Y <dbl>, Longitud <dbl>, Latitud <dbl>
#>
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
#>
#> $`Distribucion sin nombre`
#> # A tibble: 10,521 x 20
#> `Número d'expedi… `Codi districte` `Nom districte` `Codi barri` `Nom barri`
#> <chr> <dbl> <chr> <dbl> <chr>
#> 1 2015S000215 10 Sant Martí 64 el Camp de l…
#> 2 2015S000787 10 Sant Martí 64 el Camp de l…
#> 3 2015S000390 10 Sant Martí 64 el Camp de l…
#> 4 2015S007294 10 Sant Martí 64 el Camp de l…
#> 5 2015S009836 10 Sant Martí 64 el Camp de l…
#> 6 2015S009453 10 Sant Martí 64 el Camp de l…
#> 7 2015S007312 10 Sant Martí 64 el Camp de l…
#> 8 2015S004660 10 Sant Martí 64 el Camp de l…
#> 9 2015S006407 10 Sant Martí 64 el Camp de l…
#> 10 2015S009834 10 Sant Martí 64 el Camp de l…
#> # … with 10,511 more rows, and 15 more variables: Codi carrer <dbl>,
#> # Nom carrer <chr>, Num postal caption <chr>, Descripció dia setmana <chr>,
#> # Dia setmana <chr>, Descripció tipus dia <chr>, NK Any <dbl>,
#> # Mes de any <dbl>, Nom mes <chr>, Dia de mes <dbl>, Hora de dia <chr>,
#> # Descripció torn <chr>, Descripció tipus accident <chr>,
#> # Coordenada UTM (Y) <dbl>, Coordenada UTM (X) <dbl>
#>
#> $`Distribucion sin nombre`
#> # A tibble: 11,009 x 22
#> Numero_expedient Codi_districte Nom_districte Codi_barri Nom_barri
#> <chr> <dbl> <chr> <dbl> <chr>
#> 1 2017S009418 -1 Desconegut -1 Desconegut
#> 2 2017S008852 -1 Desconegut -1 Desconegut
#> 3 2017S001023 10 Sant Martí 64 el Camp de l'Arpa d…
#> 4 2017S009198 10 Sant Martí 64 el Camp de l'Arpa d…
#> 5 2017S006546 10 Sant Martí 64 el Camp de l'Arpa d…
#> 6 2017S003698 10 Sant Martí 64 el Camp de l'Arpa d…
#> 7 2017S004977 10 Sant Martí 64 el Camp de l'Arpa d…
#> 8 2017S008080 10 Sant Martí 64 el Camp de l'Arpa d…
#> 9 2017S004521 10 Sant Martí 64 el Camp de l'Arpa d…
#> 10 2017S004180 10 Sant Martí 64 el Camp de l'Arpa d…
#> # … with 10,999 more rows, and 17 more variables: Codi_carrer <dbl>,
#> # Nom_carrer <chr>, Num_postal_caption <chr>, Descripcio_dia_setmana <chr>,
#> # Dia_setmana <chr>, Descripcio_tipus_dia <chr>, Any <dbl>, Mes_any <dbl>,
#> # Nom_mes <chr>, Dia_mes <dbl>, Hora_dia <dbl>, Descripcio_torn <chr>,
#> # Descripcio_tipus_accident <chr>, Coordenada_UTM_X <dbl>,
#> # Coordenada_UTM_Y <dbl>, Longitud <dbl>, Latitud <dbl>
#>
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
#>
#> $`Distribucion sin nombre`
#> # A tibble: 10,701 x 22
#> Numero_expedient Codi_districte Nom_districte Codi_barri Nom_barri
#> <chr> <dbl> <chr> <dbl> <chr>
#> 1 2016S002575 10 Sant Martí 64 el Camp de l'Arpa d…
#> 2 2016S001146 10 Sant Martí 64 el Camp de l'Arpa d…
#> 3 2016S009619 10 Sant Martí 64 el Camp de l'Arpa d…
#> 4 2016S003881 10 Sant Martí 64 el Camp de l'Arpa d…
#> 5 2016S004162 10 Sant Martí 64 el Camp de l'Arpa d…
#> 6 2016S009951 10 Sant Martí 64 el Camp de l'Arpa d…
#> 7 2016S004619 10 Sant Martí 64 el Camp de l'Arpa d…
#> 8 2016S009702 10 Sant Martí 64 el Camp de l'Arpa d…
#> 9 2016S003529 10 Sant Martí 64 el Camp de l'Arpa d…
#> 10 2016S008654 10 Sant Martí 64 el Camp de l'Arpa d…
#> # … with 10,691 more rows, and 17 more variables: Codi_carrer <dbl>,
#> # Nom_carrer <chr>, Num_postal_caption <chr>, Descripcio_dia_setmana <chr>,
#> # Dia_setmana <chr>, Descripcio_tipus_dia <chr>, Any <dbl>, Mes_any <dbl>,
#> # Nom_mes <chr>, Dia_mes <dbl>, Hora_dia <dbl>, Descripcio_torn <chr>,
#> # Descripcio_tipus_accident <chr>, Coordenada_UTM_X <dbl>,
#> # Coordenada_UTM_Y <dbl>, Longitud <dbl>, Latitud <dbl>
#>
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
As we can see, the data slot from openes_load
read a list of data frames but why so many?
This becomes clear once we look at the website of the dataset we’re reading:
As you can see, there are datasets for years 2010, 2011, etc.. where each year is in three different formats (CSV, XLSX and XML as of October 2018).
How does openes_load
handle this? Well, to avoid problems between some datasets having slightly different structures between formats, it always aims for the simpler formats in an order of preference. You can check which formats are available with permitted_formats
although the user should never have to worry about this because the functions take care of this. However, if you try to read a dataset which only has formats that are not in permitted_formats
, openes_load
will return the same data structure as if there were a dataset, but the data
slot will contain a tibble
with the format URL’s of the non-available formats so that the user can read this directly (for example, try reading this openes_load('l01080193-carta-arqueologica-de-barcelona')
).
Coming back to the accidents data, this explains why many datasets were read. We can compare the name of each dataset to figure out what they mean.
names(accidents$data)
#> [1] "Distribucion sin nombre" "Distribucion sin nombre"
#> [3] "Distribucion sin nombre" "Distribucion sin nombre"
#> [5] "Distribucion sin nombre" "Distribucion sin nombre"
#> [7] "Distribucion sin nombre" "Distribucion sin nombre"
#> [9] "Distribucion sin nombre" "Distribucion sin nombre"
#> [11] "Distribucion sin nombre"
They’re the causes of accidents for different years. Let’s sort them according to the year and check whether all were read.
accidents$data <- accidents$data[sort(names(accidents$data))]
accidents$data
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
#>
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
#>
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
#>
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
#>
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
#>
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
#>
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
#>
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
#>
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
#>
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
#>
#> $`Distribucion sin nombre`
#> # A tibble: 1 x 2
#> format URL
#> <chr> <chr>
#> 1 csv https://opendata-ajuntament.barcelona.cat/data/dataset/834b8920-0685-4…
But if we look closer, we can see that the data for 2016 and 2017 were not read correctly (as of 2018/10/30). For that case, openes_load
returns the link it attempted to read together with the format. For now we’ll exclude these two but the user can read them manually with the provided link. For a simple check, printing the returned object of openes_load
will tell you how many files were read.
You can also access the metadata in the metadata slot which contains most of the metadata related to that given dataset. For example..
accidents$metadata
#> # A tibble: 3 x 8
#> keywords language description url date_issued date_modified
#> <chr> <chr> <chr> <chr> <dttm> <chr>
#> 1 Accidental… en List of types… http://… 2015-11-18 23:00:00 No modificat…
#> 2 Accidental… es Listado de lo… http://… 2015-11-18 23:00:00 No modificat…
#> 3 Accidental… ca Llistat dels … http://… 2015-11-18 23:00:00 No modificat…
#> # … with 2 more variables: publisher <chr>, publisher_data_url <chr>
For a detailed description of what each of these column mean, check the documentation of openes_load
with ?openes_load
.
Site built with pkgdown 1.6.1.
Template by Bootstrapious . Ported to pkgdown by dieghernan.