Datos de Bodegas e Industrias Agroalimentarias pertenecientes a DOP o IGP
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:
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
.
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)