Datos sobre Mc Donald’s
Input
Se ha recopilado un conjunto de datos procedente de OpenStreetMaps (OSM) que incluye la localización de todos los restaurantes McDonald’s presentes en España.
Descripción
En lugar de obtener los datos directamente desde el sitio web, los extraeremos en R utilizando una serie de comandos específicos. Para simplificar el proceso, aplicaremos filtros a los datos de OSM mediante el uso de etiquetas. Cada una de estas etiquetas corresponde a una categoría diferente. Podemos consultar la lista completa de etiquetas en la wiki de OSM, disponible en: https://wiki.openstreetmap.org/wiki/Map_features.
Procedemos a cargar las librerías requeridas en R:
En primer lugar, definimos la“caja” con las coordenadas de España, siguiendo el orden: Oeste, Sur, Este, Norte, para posteriormente generar un objeto mediante “osmdata” que extrae la información de cada restaurante. Para conseguir los datos, usaremos dosetiquetas: “amenity” y “fast_food”, disponibles en la wiki de OSM. Para obtener los datos, también será importante buscar el nombre del restaurante, lo cual no es tan sencillo, ya que la forma de escribir el restaurante puede variar, para asegurarnos mejor emplear el símbolo de ‘*’ que permite mostrar todas las variantes posibles del nombre. Una vez creado este objeto, lo convertimos en un objeto sf.
bbox_spain <- c(-10, 30, 5, 46)
q1 <- bbox_spain %>%
osmdata::opq(timeout = 2500) %>%
osmdata::add_osm_feature("name", "McDonald's") %>%
osmdata::add_osm_feature("amenity", "fast_food")
McDonalds <- osmdata_sf(q1)
McDonalds_sf <- McDonalds$osm_points
dim(McDonalds_sf)
[1] 5713 140
El objeto sf tiene 5724 observaciones y 140 variables. Veámos una representación inicial de los datos:
Tratamiento
Debemos tratar los datos, ya que en el mapa aparecen puntos fuera de la región de España, en este caso las coordenadas que hemos establecido incluyen a países como Portugal y Francia. Lo que podemos hacer para resolver este problema es crear un nuevo objeto con datos más concretos, en este caso, de las coordenadas de cada comunidad autónoma de España, para posteriormente realizar una intersección entre el nuevo objeto y el anterior.
spain_ccaa <- mapSpain::esp_get_ccaa(epsg="4326")
spain_ccaa <- spain_ccaa %>% filter(!codauto %in% c("04", "05", "18", "19"))
spain2 <- spain_ccaa %>% group_by(codauto) %>% summarise()
def_mac <- st_intersection(McDonalds_sf,spain2)
Warning: attribute variables are assumed to be spatially constant throughout
all geometries
dim(def_mac)
[1] 2050 141
El número de observaciones ha bajado como era de esperar, ya que los restaurantes fuera de España se han eliminado. De todas formas, cuántos rstaurantes dice la página oficial de Mc Donald’s que tiene activos en España?
Tras realizar una búsqueda, podemos confirmar un nuevo problema en nuestros datos, ya que según nuestro resultado existem 2066 restaurantes, mientras que en realidad solo existen unos 557. ¿A qué se puede deber esto? ¿Tenemos ubicaciones repetidas? Este problema es muy común, para solventarlo realizaremos un análisis de clusters para detectar las observaciones que estén más juntas entre si. Emplearemos un valor épsilon pequeño, de 0.001 para asegurarnos, ya que no es probable que hayan dos Mc Donald’s a pocos metros de distancia. Observemos los datos duplicados en el mapa
Solución mediante cluster:
coords <- sf::st_coordinates(def_mac)
cluster <- dbscan(coords, eps = 0.001, minPts = 1)
clusters <- cluster$cluster
etiquetas <- as.factor(clusters)
def_mac$cluster <- etiquetas
datos_sin_dup <- def_mac[!duplicated(def_mac$cluster), ]
dim(datos_sin_dup)
[1] 501 142
Ahora el número de observaciones (500) tiene más sentido.
Output
Veámos la representación gráfica finañl:
datos_sin_dup %>%
leaflet::leaflet() %>%
leaflet::addTiles() %>%
leaflet::addCircles(color = "yellow")
Todo parece estar correcto, los problemas parecen estar resueltos.
sf::st_write(datos_sin_dup, "McDonalds_spain.gpkg")
Guaradamos los datos en un fichero tipo “GPKG”, quedando disponible aquí.
Proyectos de Innovación Educativa Emergente PIEE-2737007 y PIEE-3325394