Datos de Bodegas e Industrias Agroalimentarias pertenecientes a DOP o IGP

INDUSTRIA AGROALIMENTARIA
BODEGAS
GPKG
ESPAÑA
Autor/a
Afiliación

Universitat de València

Fecha de publicación

10 de mayo de 2024

Input

En el catálogo de descargas del Ministerio de Agricultura, Pesca y Alimentación, se proporcionan datos geográficos relacionados con Agricultura, Alimentación, Desarrollo Rural, Ganadería y Pesca. En el apartado dedicado a Alimentación, los usuarios pueden acceder a información detallada sobre las zonas de Denominaciones de Origen (DOP) e Indicaciones Geográficas Protegidas (IGP) de diversas familias de productos alimentarios. Además, se ofrece un listado completo de las Bodegas e Industrias Agroalimentarias asociadas a alguna Denominación de Origen o Indicación Geográfica Protegida. Este listado incluye detalles sobre la ubicación, la familia de productos elaborados, la DOP o IGP correspondiente, así como otros datos relevantes sobre la empresa.

  • Ámbito: Nacional

  • Escala: 1:50.000

  • Actualización: octubre de 2014

  • Acceso al servicio:

    URL: https://wms.mapama.gob.es/sig/Alimentacion/IndustriasAgroalimentarias/wms.aspx

  • Condiciones: Esta información se puede usar de modo libre y gratuito siempre que se utilice con fines divulgativos, informativos o de promoción de productos agroalimentarios, que no tengan como finalidad la promoción comercial/venta de alimentos y que no incluya información que vincule el consumo de los alimentos con la salud. Será necesario que se mencione al Ministerio de Agricultura, Pesca y Alimentación (MAPA) como autor y propietario de la información de la siguiente manera: «© Ministerio de Agricultura, Pesca y Alimentación (MAPA)».

Estos datos están disponibles para descargar como archivo .shp y .lyr. También es posible visualizar los datos en visor SIG del MAPAMA.

En este caso hemos utilizado el archivo Shapefile.

Descripción

Cargamos las librerías necesarias:

Leemos el conjunto de datos:

ind_agro <- sf::st_read("Bodegas-industrias-agroalimentarias.shp")

Se trata de un objeto sf con 6372 observaciones y 13 variables:

class(ind_agro)
[1] "sf"         "data.frame"
dim(ind_agro)
[1] 6372   13

Lo visualizamos gráficamente con ggplot2:

# Paleta de colores
colores_palette <- c("#33a02c", "#ffffb3", "#bebada", "#fb8072", "#1c9099", "#fdb462",
                     "#b3de69", "#f781bf", "#a6cee3", "#984ea3", "#ccebc5", "#ffed6f",
                     "#1f78b4", "#fec44f", "#d12d33", "#ff7f00", "#fed9a6", "#8A0886")

 ggplot() +  
  geom_sf(data = spain_prov, fill = "white", color= "grey") +
  geom_sf(data = ind_agro, aes(color = FAM_DS_NOM)) +
  scale_color_manual(values = colores_palette, name = "Familia de productos") +
  guides(color = guide_legend(override.aes = list(size = 5))) +
  theme_minimal() +
  theme(panel.background = element_rect(fill = "lightblue", color = "lightblue")) +
  theme(text = element_text(size = 25), legend.text = element_text(size = 10), legend.title = element_text(size = 15), legend.position = c(0.25,0.65))
Warning: A numeric `legend.position` argument in `theme()` was deprecated in ggplot2
3.5.0.
ℹ Please use the `legend.position.inside` argument of `theme()` instead.

En principio, la representación gráfica de los datos no presenta ningún valor anómalo ni punto fuera del área de España. A continuación, visualizaremos un fragmento de los municipios únicos que contiene la base de datos original, junto con la cantidad de industrias en la localidad.

df <- as.data.frame(table(ind_agro$MUNICIPIO))

parte1 <- df[1:(nrow(df) / 4), ]
parte2 <- df[((nrow(df) / 4) + 1):(nrow(df) / 2), ]
parte3 <- df[(((nrow(df) / 2) + 1):(3 * nrow(df) / 4)), ]
parte4 <- df[((3 * nrow(df) / 4) + 1):nrow(df), ]

df_final <- cbind(parte1, parte2, parte3, parte4)

colnames(df_final) <- c("Var1_1", "Freq_1", "Var1_2", "Freq_2", "Var1_3", "Freq_3", "Var1_4", "Freq_4")

# Visualizar el dataframe de municipios únicos
knitr::kable(head(df_final,20), format = "html")
Var1_1 Freq_1 Var1_2 Freq_2 Var1_3 Freq_3 Var1_4 Freq_4
A Cañiza 3 Centelles 1 Leioa 1 Rubiá 5
A Coruña 5 Cerceda 1 Leiro 13 Rubielos De Mora 4
A Estrada 1 Cercedilla 1 Leitza 1 Rueda 17
A Pastoriza 1 Cervera De La Cañada 1 Leiva 2 Rugat 2
A Peroxa 3 Cervià De Les Garrigues 1 Lekeitio 1 S. Cugat Sesgarrigues 1
A Pobra do Caramiñal 1 Chantada 5 LENTEGÍ 1 S. Esteve Sesrovires 1
A Rúa de Valdeorras 15 Chelva 1 Leön 1 S. Llorenç D'hortons 2
A Salgueira 1 Cheste 1 Lerin 1 S. Martí Sarroca 1
A Teixeira 7 Chiclana 6 Lerma 1 S. Pau D'ordal 1
Abadín 1 Chiclana de la Frontera 1 Les Borges Del Camp 1 S. Pere De Riudebitlles 1
Abadiño 4 Chiclana De La Frontera 8 Les Cabanyes 2 S. Sadurní D'anoia 1
Abaran 4 Chiclana De Segura 2 Les Gunyoles- Avinyonet Del Penedès 1 S.esteve Sesrovires 1
Abarzuza 2 Chilluevar 1 Lezama 10 S.marti Sarroca 1
Abárzuza 1 Chinchon 1 Lezaun 1 S.martí Sarroca 3
Aberín 1 Chinchón 3 Librilla 1 S.pere De Riudebitlles 1
Ablitas 2 Chipiona 7 Liedena 1 S.quintí De Mediona 2
Abornicano 1 Chiprana 1 Lillo 3 S.sadurní D'anoia 70
Aceuchal 1 Chiva 2 Lincora 5 S.sadurní Danoia 1
Adahuesca 1 Chozas de canales 1 Llamas De La Ribera 1 Sa Pobla 1
Adamuz 4 Chucena 1 Llanera 2 Sabadell 1
nrow(df)
[1] 2266

Después de analizar la tabla con el número de industrias en cada localidad, se identifican varios casos en los que un mismo municipio aparece escrito de diferentes formas, lo que provoca que sean reconocidos como municipios distintos pese a ser uno solo.

Tratamiento

Se han observado numerosas localidades que presentan diversos errores relacionados con tildes, comas, espacios, mayúsculas o minúsculas, así como erratas de escritura o abreviaciones en alguna de sus formas. En general, son diversas las variaciones de escritura que pueden llevar a que un municipio, siendo el mismo, no sea identificado como tal.

Obtenemos un objeto sf con los datos geográficos de todos los municipios de España mediante la función esp_get_munic_siane() del paquete mapSpain:

spain_mun <- mapSpain::esp_get_munic_siane(moveCAN = FALSE)

A continuación, se realiza una unión espacial entre el conjunto de datos de las industrias agroalimentarias y el obtenido de los municipios de España. La opción join = st_intersects indica que se realizará una unión espacial basada en la intersección de las geometrías, es decir, se asociarán las filas de ind_agro con los municipios de spain_mun que intersectan con ellas.

ind_agro_mun <- st_join(ind_agro, spain_mun, join = st_intersects)

Finalmente, para evitar posibles confusiones y, dado que spain_mun ya contiene información sobre las provincias y municipios, se utilizará la función subset para eliminar las primeras dos columnas del objeto ind_agro_mun.

ind_agro_mun <- subset(ind_agro_mun, select = -c(MUNICIPIO, PROVINCIA))

Output

Hemos obtenido un nuevo objeto sf con 6372 observaciones y 18 variables.

class(ind_agro_mun)
[1] "sf"         "data.frame"
nrow(ind_agro_mun)
[1] 6372
length(ind_agro_mun)
[1] 18
df2 <- as.data.frame(table(ind_agro_mun$name))
names(df2) <- c("municipio", "cantidad")

# Municipios únicos en la base de datos original 
nrow(df)
[1] 2266
# Municipios únicos en la base de datos transformada 
nrow(df2)
[1] 1884

Podemos observar que el número de municipios únicos con industrias agroalimentarias se ha reducido considerablemente, pasando de 2266 a 1884. Tener el nombre correcto de los municipios nos permite agrupar correctamente las industrias por localidad y trabajar con datos regionales.

industr_por_mun <- inner_join(spain_mun, df2, by = c("name"="municipio")) %>% st_as_sf()

ggplot() +  
  geom_sf(data = spain_prov, fill = "white", color= "grey") +
  geom_sf(data = industr_por_mun, aes(fill = cantidad, color = cantidad), color = "grey")+
  scale_fill_gradient2(low = "lightyellow1",mid = "yellow",high="darkorange",midpoint = 70 ,name = "Nº de industrias") +
  theme_minimal() +  
  theme(panel.background = element_rect(fill = "lightblue", color = "lightblue")) +
  theme(text = element_text(size = 25), legend.title = element_text(size=20), legend.position = c(0.85, 0.15))

Para llevara a cabo este ejemplo con el número de industrias agroalimentarias por municipio primero hemos tenido que agrupar las industrias por municipio. A continuación, hemos hecho la unión interna entre el dataframe resultante y el objeto sf con las coordenadas de cada municipio. Finalmente, representamos los datos gráficamente con ggplot2 con una escala gradiente según la cantidad de industrias por municipio.

sf::st_write(ind_agro_mun, "induatrias_agroalimentarias_DOP_IGP.gpkg")

El fichero generado con el procedimiento descrito anteriormente se puede descargar, en formato GeoPackage (gpkg), aquí.



Proyecto de Innovación Educativa Emergente (PIEE-2737007)