Datos sobre Mc Donald’s

Autor/a
Afiliación

Alejandro Moreno Sapena

Universidad de Valencia

Fecha de publicación

29 de marzo de 2025

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:

McDonalds_sf %>%
  leaflet::leaflet() %>%
  leaflet::addTiles() %>%
  leaflet::addCircles(color = "yellow")

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

def_mac %>%
  leaflet::leaflet() %>%
  leaflet::addTiles() %>%
  leaflet::addCircles(color = "yellow")

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