Avui comparteixo una de les coses que faig quan la vida em deixa: editar OpenStreetMap. Si coneixeu aquest projecte, consisteix en una gran base de dades geolocalitzada que editem persones de tot arreu utilitzant fonts de coneixement lliures. Bàsicament ho faig per activisme: OpenStreetMap pot ser una alternativa a Google Maps i altres projectes que donen beneficis a les grans tecnològiques. No corre el risc que ho compri l’Elon Musk de torn ni de patir censures arbitràries. Més important, qualsevol persona el pot editar, i el criteri de què és important el marquem les persones que hi participem. D’altra banda, els editors i editores catalans som una colla de gent bastant simpàtica i ens toca més l’aire que si editéssim la Viquipèdia. D’altra banda, també fem molta cosa amb ordinadors per tenir el màxim de dades possibles amb el mínim esforç.
Fa no massa, vam obtenir permís per fer servir el Directori de Centres Educatius del Departament d’Educació. En aquest post, explicaré com agafem les dades i les preparem per a pujar-les a OpenStreetMap. Per exemple, amb el cas de Palafrugell. Així, el que farem serà el següent.
Baixar totes les dades de centres educatius de Palafrugell que tenen un número de referència del departament d’Educació utilitzant l’API Overpass.
Baixar les dades del Directori de Centres correspondent als centres que volem completar.
Tractar les dades i afegir les que falten a la taula d’OpenStreetMap.
Comprovar que tot estigui bé i pujar les dades fent servir l’editor JOSM.
Codi R
library(sf) # tractar shapefileslibrary(osmdata) # baixar data d'OSMlibrary(tmap) # fer mapeslibrary(tmaptools) # baixar mapa baselibrary(tidyverse) # tractar tauleslibrary(httr) # baixar dades d'internetlibrary(jsonlite) # convertir JSONs a tauleslibrary(rvest) # llegir webs
Comencem per baixar les dades d’OpenStreetMap i representar-les en un mapa.
Codi R
escoles <-opq("Palafrugell") |>add_osm_features("[\"amenity\"=\"school\"][\"ref\"]") |># this is a lot more cumbersome but allows to filter for missing tagsosmdata_sf()escoles_punts <- escoles$osm_pointsescoles_pol <- escoles$osm_polygonsescoles_mpol <- escoles$osm_multipolygonsescoles_osm <- escoles_pol |>st_drop_geometry() |>bind_rows(st_drop_geometry(escoles_mpol))knitr::kable(escoles_osm, style ="pipe")
Veiem que ens surten alguns objectes sense codi de referència, però no ens hauria de preocupar massa. Són objectes com patis o pistes poliesportives que formen part de les relacions (és a dir, col·leccions d’objectes) de les escoles. Ara toca baixar-nos les dades del Departament d’Educació. Ho fem amb les llibreries httr i jsonlite que ens permeten crear una URL on hi hagi les dades de tots els centres que ens interessen, baixar-nos la informació i organitzar-la en forma de taula.
Codi R
# crear vector de codis únicsrefs <-unique(c(escoles_pol$ref, escoles_mpol$ref))refs <- refs[!is.na(refs)]# crear una variable character amb tots els codis separats per codisreftext <-sapply(refs, \(x) paste0("'",str_pad(x, width=8, pad =0),"'")) |>paste(collapse =", ")# generar una url de l'API de dades obertes de la Generalitat que ensbaseurl <-"https://analisi.transparenciacatalunya.cat/resource/kvmv-ahh4.json?$query="query =paste0("SELECT * WHERE codi_centre IN (", reftext, ") AND curs='2022/2023'")query <-str_replace_all(query," ","%20")# descarregar les dades i passar-les a format taulaescoles_gene <-GET(paste0(baseurl,query)) |>content(as ="text") |>fromJSON()knitr::kable(escoles_gene, style ="pipe")
curs
any
codi_centre
denominaci_completa
codi_naturalesa
nom_naturalesa
codi_titularitat
nom_titularitat
adre_a
codi_postal
tel_fon
fax
codi_delegaci
nom_delegaci
codi_comarca
nom_comarca
codi_municipi
codi_municipi_6
nom_municipi
codi_districte_municipal
codi_localitat
nom_localitat
zona_educativa
coordenades_utm_x
coordenades_utm_y
coordenades_geo_x
coordenades_geo_y
e_mail_centre
url
einf2c
epri
einf1c
eso
batx
cfpm
aa03
cfps
pfi
2022/2023
2022
17002481
Escola Torres Jonama
1
Públic
01
Departament d’Ensenyament
c. Escoles, 10
17200
972610882
972610652
0117
Girona
10
Baix Empordà
17117
171175
Palafrugell
00
06
Palafrugell
Baix Empordà
513844
4640216
3.166934
41.913774
b7002481@xtec.cat
http://www.xtec.cat/ceiptorresjonama-palafrugell/
EINF2C
EPRI
NA
NA
NA
NA
NA
NA
NA
2022/2023
2022
17002491
Escola Josep Barceló i Matas
1
Públic
01
Departament d’Ensenyament
c. Pals, 75
17200
972300924
972300924
0117
Girona
10
Baix Empordà
17117
171175
Palafrugell
00
06
Palafrugell
Baix Empordà
513374
4640994
3.16129
41.920784
b7002491@xtec.cat
http://agora.xtec.cat/ceipbarceloimatas/
EINF2C
EPRI
NA
NA
NA
NA
NA
NA
NA
2022/2023
2022
17002511
Vedruna Palafrugell
2
Privat
22
Fundacions
c. Sant Sebastià, 85
17200
972300739
972300303
0117
Girona
10
Baix Empordà
17117
171175
Palafrugell
00
06
Palafrugell
Baix Empordà
514063
4640552
3.169588
41.916794
b7002511@xtec.cat
http://WWW.vedrunapalafrugell.org
EINF2C
EPRI
EINF1C
NA
NA
NA
NA
NA
NA
2022/2023
2022
17002521
Sant Jordi
2
Privat
26
Societats Mercantils
c. Tarongeta, 65
17200
972302898
972304238
0117
Girona
10
Baix Empordà
17117
171175
Palafrugell
00
06
Palafrugell
Baix Empordà
513935
4640611
3.168046
41.91733
b7002521@xtec.cat
http://www.escolasantjordi.cat
EINF2C
EPRI
NA
ESO
NA
NA
NA
NA
NA
2022/2023
2022
17002545
Institut Frederic Martí i Carreras
1
Públic
01
Departament d’Ensenyament
c. Frederic Martí Carreras, 13
17200
972301079
972611336
0117
Girona
10
Baix Empordà
17117
171175
Palafrugell
00
06
Palafrugell
Baix Empordà
513680
4639998
3.164958
41.911812
b7002545@xtec.cat
http://agora.xtec.cat/iesfredericmarti/
NA
NA
NA
ESO
BATX
NA
NA
NA
NA
2022/2023
2022
17002557
Institut Baix Empordà
1
Públic
01
Departament d’Ensenyament
av. de les Corts Catalanes, s/n
17200
972300323
972611874
0117
Girona
10
Baix Empordà
17117
171175
Palafrugell
00
06
Palafrugell
Baix Empordà
513786
4639842
3.166224
41.910404
b7002557@xtec.cat
http://www.insbaixemporda.cat
NA
NA
NA
ESO
BATX
CFPM
AA03
CFPS
PFI
2022/2023
2022
17004876
Escola l’Olivar Vell
1
Públic
01
Departament d’Ensenyament
Veïnat Colomina, s/n
17255
972611990
972611990
0117
Girona
10
Baix Empordà
17013
170139
Begur
00
02
Esclanyà
Baix Empordà
514364
4642168
3.173253
41.931346
b7004876@xtec.cat
https://agora.xtec.cat/ceipolivarvell/
EINF2C
EPRI
NA
NA
NA
NA
NA
NA
NA
2022/2023
2022
17006782
Escola Carrilet
1
Públic
01
Departament d’Ensenyament
pl. Narcisa Oliver i Deulofeu, s/n
17200
972306765
972306770
0117
Girona
10
Baix Empordà
17117
171175
Palafrugell
00
06
Palafrugell
Baix Empordà
512884
4639998
3.155351
41.911822
b7006782@xtec.cat
http://agora.xtec.cat/escolacarrilet/
EINF2C
EPRI
NA
NA
NA
NA
NA
NA
NA
2022/2023
2022
17008523
Escola Pi Verd
1
Públic
01
Departament d’Ensenyament
c. Vicenç Roure i Armadà, 12
17200
972610457
NA
0117
Girona
10
Baix Empordà
17117
171175
Palafrugell
00
06
Palafrugell
Baix Empordà
514349
4640814
3.173042
41.919148
b7008523@xtec.cat
http://agora.xtec.cat/escpiverd/
EINF2C
EPRI
NA
NA
NA
NA
NA
NA
NA
Tenim un munt de variables, moltes de les quals ens interessen. Algunes les podem incorporar tal i com van i d’altres voldran una mica de feina. Comencem per l’adreça. Veiem que hi ha quatre camps vinculats amb l’adreça: addr.city, addr.housenumber (número d’edifici), addr.postcode (codi postal) i addr.street (carrer). D’altra banda, podem agafar directament la web, el correu electrònic i com el nom del titular. La titularitat també es pot agafar directament, però cal traduir-ho a l’anglès. També cal afegir els prefixos internacionals als camps de telèfon i fax.
Codi R
escoles_gene_osm <- escoles_gene |>select(-c(curs, codi_titularitat, codi_naturalesa, codi_delegaci, nom_delegaci, codi_comarca, codi_municipi, codi_municipi_6, codi_localitat, codi_districte_municipal, nom_comarca, zona_educativa, coordenades_utm_x, coordenades_utm_y, coordenades_geo_x, coordenades_geo_y)) |># eliminar columnes que no calenrename("operator"="nom_titularitat","name"="denominaci_completa","ref"="codi_centre","contact:phone"="tel_fon","contact:fax"="fax","contact:email"="e_mail_centre","website"="url","addr:city"="nom_municipi","addr:place"="nom_localitat","addr:postcode"="codi_postal","source:date"="any") |># canviar noms de columnes que podem adaptar "tal qual"mutate("contact:fax"=paste0("+34",`contact:fax`),"contact:phone"=paste0("+34", `contact:phone`),"addr:street"=str_extract(adre_a, "^[^\\,]+"),"addr:housenumber"=str_extract(adre_a, "[^\\, ]+$"),"operator:type"=ifelse(nom_naturalesa =="Públic", "public", "private"))knitr::kable(escoles_gene_osm, style ="pipe")
source:date
ref
name
nom_naturalesa
operator
adre_a
addr:postcode
contact:phone
contact:fax
addr:city
addr:place
contact:email
website
einf2c
epri
einf1c
eso
batx
cfpm
aa03
cfps
pfi
addr:street
addr:housenumber
operator:type
2022
17002481
Escola Torres Jonama
Públic
Departament d’Ensenyament
c. Escoles, 10
17200
+34972610882
+34972610652
Palafrugell
Palafrugell
b7002481@xtec.cat
http://www.xtec.cat/ceiptorresjonama-palafrugell/
EINF2C
EPRI
NA
NA
NA
NA
NA
NA
NA
c. Escoles
10
public
2022
17002491
Escola Josep Barceló i Matas
Públic
Departament d’Ensenyament
c. Pals, 75
17200
+34972300924
+34972300924
Palafrugell
Palafrugell
b7002491@xtec.cat
http://agora.xtec.cat/ceipbarceloimatas/
EINF2C
EPRI
NA
NA
NA
NA
NA
NA
NA
c. Pals
75
public
2022
17002511
Vedruna Palafrugell
Privat
Fundacions
c. Sant Sebastià, 85
17200
+34972300739
+34972300303
Palafrugell
Palafrugell
b7002511@xtec.cat
http://WWW.vedrunapalafrugell.org
EINF2C
EPRI
EINF1C
NA
NA
NA
NA
NA
NA
c. Sant Sebastià
85
private
2022
17002521
Sant Jordi
Privat
Societats Mercantils
c. Tarongeta, 65
17200
+34972302898
+34972304238
Palafrugell
Palafrugell
b7002521@xtec.cat
http://www.escolasantjordi.cat
EINF2C
EPRI
NA
ESO
NA
NA
NA
NA
NA
c. Tarongeta
65
private
2022
17002545
Institut Frederic Martí i Carreras
Públic
Departament d’Ensenyament
c. Frederic Martí Carreras, 13
17200
+34972301079
+34972611336
Palafrugell
Palafrugell
b7002545@xtec.cat
http://agora.xtec.cat/iesfredericmarti/
NA
NA
NA
ESO
BATX
NA
NA
NA
NA
c. Frederic Martí Carreras
13
public
2022
17002557
Institut Baix Empordà
Públic
Departament d’Ensenyament
av. de les Corts Catalanes, s/n
17200
+34972300323
+34972611874
Palafrugell
Palafrugell
b7002557@xtec.cat
http://www.insbaixemporda.cat
NA
NA
NA
ESO
BATX
CFPM
AA03
CFPS
PFI
av. de les Corts Catalanes
s/n
public
2022
17004876
Escola l’Olivar Vell
Públic
Departament d’Ensenyament
Veïnat Colomina, s/n
17255
+34972611990
+34972611990
Begur
Esclanyà
b7004876@xtec.cat
https://agora.xtec.cat/ceipolivarvell/
EINF2C
EPRI
NA
NA
NA
NA
NA
NA
NA
Veïnat Colomina
s/n
public
2022
17006782
Escola Carrilet
Públic
Departament d’Ensenyament
pl. Narcisa Oliver i Deulofeu, s/n
17200
+34972306765
+34972306770
Palafrugell
Palafrugell
b7006782@xtec.cat
http://agora.xtec.cat/escolacarrilet/
EINF2C
EPRI
NA
NA
NA
NA
NA
NA
NA
pl. Narcisa Oliver i Deulofeu
s/n
public
2022
17008523
Escola Pi Verd
Públic
Departament d’Ensenyament
c. Vicenç Roure i Armadà, 12
17200
+34972610457
+34NA
Palafrugell
Palafrugell
b7008523@xtec.cat
http://agora.xtec.cat/escpiverd/
EINF2C
EPRI
NA
NA
NA
NA
NA
NA
NA
c. Vicenç Roure i Armadà
12
public
Veureu per això, que he deixat unes quantes columnes sense tractar, que tenen a veure amb quins cicles imparteixen. A partir d’això, cal generar tres variables més. isced:level, que estandarditza els nivells d’educació a nivell mundial (podeu veure’n totes les equivalències aquí), min_age (edat mínima), max_age (edat màxima), school el tipus d’escola i amenity on distingim entre escoles bressol, escoles de música elementals, d’idiomes o escoles de qualsevol altre tipus. Primer de tot, copiem la taula d’equivalències de la wiki d’OpenStreetMap.