Análisis sectorial agrícola en España
Intro
El sector agrícola es una pieza clave en la economía y el desarrollo social de España. Este análisis tiene como objetivo estudiar las principales tendencias y características de este sector, utilizando un enfoque basado en datos para identificar patrones en la producción agrícola, distribución de cultivos y rendimiento por región.
España, con su diversidad climática y geográfica, ofrece una gran variedad de cultivos que reflejan la riqueza y complejidad del sector. Sin embargo, también enfrenta desafíos relacionados con el cambio climático, la sostenibilidad y la optimización de recursos.
En este trabajo, se presentan los datos procesados y analizados desde una perspectiva multidimensional para proporcionar una visión integral de la agricultura en España.
Metodología y fuentes de datos
El análisis se basa en datos obtenidos de fuentes oficiales como el Ministerio de Agricultura, Pesca y Alimentación (MAPA), así como bases de datos abiertas relacionadas con el sector agrícola. Los datos han sido procesados para garantizar su limpieza y consistencia, y posteriormente se han explorado utilizando herramientas estadísticas y visualizaciones gráficas. Hemos importado los datos usando el comando import del paquete rio tal que así:
Luego, para crear cada gráfico hemos agrupado los datos de distintas maneras con el paquete “dplyr”. Así se agrupan por sexo, tipo de titular y grupo de edad:
Código
#install.packages("dplyr")
library(dplyr)
# Dividir los datos por sexo
hombres <- datos %>% filter(Sexo == "Hombres")
mujeres <- datos %>% filter(Sexo == "Mujeres")
ambos_sexos <- datos %>% filter(Sexo == "Ambos sexos")
#También separamos por tipo de titulares
titulares <- datos %>% filter(`Clase de titular` == "Titulares")
titulares_jefes <- datos %>% filter(`Clase de titular` == "Titulares jefes de explotación")
#Ahora vamos a crear unas nuevas variables en porcentajes, que luego compararemos
datos$Total <- as.numeric(gsub("[^0-9.]", "", datos$Total))
# Paso 1: Agrupar los datos por Grupos de edad
datos_agrupados <- datos %>%
group_by(`Grupos de edad`, Sexo) %>% # Agrupar por Grupos de edad y Sexo
summarise(Total_Grupo = sum(Total, na.rm = TRUE), .groups = "drop") # Calcular total por grupo
# Paso 2: Calcular el total por sexo en cada grupo de edad
datos_agrupados <- datos_agrupados %>%
group_by(`Grupos de edad`) %>%
mutate(Total_Sexo = sum(Total_Grupo, na.rm = TRUE),
Porcentaje_Sexo = (Total_Grupo / Total_Sexo) * 100) %>%
ungroup()
#Ahora mostramos los resultados con un gáfico
# Filtrar los datos para "Todas las edades" y solo Hombres/Mujeres
datos_filtrados <- datos %>%
filter(Sexo %in% c("Hombres", "Mujeres") & `Grupos de edad` == "Todas las edades") %>%
group_by(Sexo) %>% # Agrupar solo por Sexo
summarise(Total_Grupo = sum(Total, na.rm = TRUE), # Sumar totales para Hombres y Mujeres
.groups = "drop") # Eliminar agrupaciones
total_todas_edades <- sum(datos_filtrados$Total_Grupo, na.rm = TRUE)
Resultados preliminares
Ahora vamos a ver algunos resultados que hemos conseguido con nuestra investigación reflejados a través de algunos gráficos. Primero cargar paquetes que vayamos a necesitar para crear los gráficos:
Seguidamente, arreglar un poco los datos para que quede todo correctamente:
Y ya empezamos con los gráficos:
Código
ggplot(datos_filtrados, aes(x = "", y = Porcentaje_Sexo, fill = Sexo)) +
geom_bar(stat = "identity", width = 1, color = "white") + # Crear barras apiladas
coord_polar(theta = "y") + # Convertir a gráfico circular
labs(title = "Distribución por Sexo (Todas las edades)", y = NULL, x = NULL) +
theme_void() + # Eliminar ejes innecesarios
scale_fill_manual(values = c("#1f77b4", "#ff7f0e")) + # Colores personalizados
geom_text(aes(label = paste0(round(Porcentaje_Sexo, 1), "%")),
position = position_stack(vjust = 0.5), size = 5) # Añadir etiquetas porcentuales
En este gráfico podemos ver como la diferencia de sexo entre los titulares de los campos de cultivo en España ya es significativa. Los hombres son los titulares de más del 70% de estas tierras, dejando tan solo el 30% restante a las mujeres.
Ahora vamos a ver la distribución por edades y así ver qué franja de edad tiene más porcentaje de tierras cultivables:
Código
# Filtrar los datos para excluir "Todas las edades"
datos_por_edad <- datos %>%
filter(`Grupos de edad` != "Todas las edades") %>% # Excluir el grupo "Todas las edades"
group_by(`Grupos de edad`) %>% # Agrupar por Grupos de edad
summarise(Total_Grupo = sum(Total, na.rm = TRUE), # Sumar el total por grupo de edad
.groups = "drop") # Eliminar agrupaciones
# Calcular el total general y los porcentajes
total_general <- sum(datos_por_edad$Total_Grupo, na.rm = TRUE)
datos_por_edad <- datos_por_edad %>%
mutate(Porcentaje_Grupo = (Total_Grupo / total_general) * 100) # Calcular el porcentaje
# Crear el gráfico circular con ggplot2
ggplot(datos_por_edad, aes(x = "", y = Porcentaje_Grupo, fill = `Grupos de edad`)) +
geom_bar(stat = "identity", width = 1, color = "white") + # Crear barras apiladas
coord_polar(theta = "y") + # Convertir a gráfico circular
labs(title = "Distribución por Grupos de Edad (sin 'Todas las edades')",
y = NULL, x = NULL) +
theme_void() + # Eliminar ejes innecesarios
scale_fill_brewer(palette = "Set3") + # Paleta de colores
geom_text(aes(label = paste0(round(Porcentaje_Grupo, 1), "%")),
position = position_stack(vjust = 0.5), size = 5) # Añadir etiquetas porcentuales
Como podemos observar, como va aumentando la franja de edad, es más la cantidad de tierras que se obtiene. Esto es debido tanto a que al largo de la vida de uno tiene más tiempo a heredar y a comprar tierras, así como a que el trabajo del agricultor está cada vez más envejecido.
También haremos un gráfico de barras con el número de personas en cada grupo de edad:
Código
# Filtrar y agrupar los datos para obtener el total por grupo de edad
datos_por_edad <- datos %>%
filter(`Grupos de edad` != "Todas las edades") %>% # Excluir "Todas las edades" si es necesario
group_by(`Grupos de edad`) %>%
summarise(Total_Grupo = sum(Total, na.rm = TRUE), .groups = "drop") # Calcular total por grupo
# Abreviar nombres largos
datos_por_edad <- datos_por_edad %>%
mutate(`Grupos de edad` = case_when(
`Grupos de edad` == "Menores de 25 años" ~ "Menores 25",
`Grupos de edad` == "De 25 a 34 años" ~ "25-34",
`Grupos de edad` == "De 35 a 44 años" ~ "35-44",
`Grupos de edad` == "De 45 a 54 años" ~ "45-54",
TRUE ~ `Grupos de edad`
))
# Crear gráfico
ggplot(datos_por_edad, aes(x = reorder(`Grupos de edad`, -Total_Grupo), y = Total_Grupo / 1000, fill = `Grupos de edad`)) +
geom_bar(stat = "identity", color = "white") + # Gráfico de barras
labs(title = "Distribución por Grupos de Edad",
x = "Grupos de Edad",
y = "Total (en miles)") +
theme_minimal() + # Tema limpio
scale_y_continuous(labels = scales::comma) + # Formatear eje Y
scale_fill_brewer(palette = "Set3", guide = "none") + # Colores y sin leyenda
theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 10)) + # Rotación y tamaño
geom_text(aes(label = paste0(round(Total_Grupo / 1000, 1), "k")), # Etiquetas dentro de las barras
vjust = -0.5, size = 5)
Ahora haremos un gráfico para ver en qué proporción los titulares son solo titulares o también trabajan en sus tierras:
Código
# Agrupar por Clase de titular
proporciones_titulares <- datos %>%
group_by(`Clase de titular`) %>%
summarise(Total_Clase = sum(Total, na.rm = TRUE), .groups = "drop") # Sumar totales por clase
# Calcular el total general
total_titulares <- sum(proporciones_titulares$Total_Clase, na.rm = TRUE)
# Añadir la proporción a cada categoría
proporciones_titulares <- proporciones_titulares %>%
mutate(Proporción = (Total_Clase / total_titulares) * 100)
# Crear un gráfico circular para visualizar las proporciones
ggplot(proporciones_titulares, aes(x = "", y = Proporción, fill = `Clase de titular`)) +
geom_bar(stat = "identity", width = 1, color = "white") + # Crear barras apiladas
coord_polar(theta = "y") + # Convertir a gráfico circular
labs(title = "Proporción de Titulares y Titulares jefes de explotación",
y = NULL, x = NULL) +
theme_void() + # Eliminar ejes innecesarios
scale_fill_brewer(palette = "Set3") + # Paleta de colores
geom_text(aes(label = paste0(round(Proporción, 1), "%")),
position = position_stack(vjust = 0.5), size = 5) # Añadir etiquetas porcentuales
Ahora vamos a trabajar con los segundos datos que hemos importado. Haremos primero un gráfico de barras con la producción por países el año 2023:
Código
# Filtrar datos para el año 2023
# Filtrar datos para el año 2023
data_filtered <- datos_prod %>%
filter(!grepl(" ", geo)) # Eliminar filas donde 'Geo' tiene un espacio
data_2023 <- data_filtered %>%
filter(TIME_PERIOD == max(TIME_PERIOD, na.rm = TRUE)) %>% # Filtrar datos para 2023
group_by(geo) %>% # Agrupar por países
summarise(Total_Production = sum(OBS_VALUE, na.rm = TRUE)) %>% # Sumar producción
arrange(Total_Production) # Ordenar por producción
# Verificar los datos procesados
print(data_2023)
#> # A tibble: 30 × 2
#> geo Total_Production
#> <chr> <dbl>
#> 1 Malta 139.
#> 2 Luxembourg 602.
#> 3 Iceland 604.
#> 4 Cyprus 887.
#> 5 Estonia 1313.
#> 6 Slovenia 1581.
#> 7 Latvia 1866.
#> 8 Croatia 2840.
#> 9 Slovakia 2914.
#> 10 Lithuania 4379.
#> # ℹ 20 more rows
# Crear el gráfico de barras horizontal
ggplot(data_2023, aes(x = reorder(geo, Total_Production), y = Total_Production)) +
geom_bar(stat = "identity", fill = "skyblue", color = "black") +
coord_flip() + # Invertir el gráfico para barras horizontales
labs(title = "Producción Agrícola por País (2023)",
x = "País",
y = "Producción (Millones de Euros)") +
theme_minimal()
Como vemos, Francia fue el país con más producción agrícola en 2023. Vamos a ver su evolución a lo largo de los años:
Código
# Filtrar los datos para Francia
data_france <- datos_prod %>%
filter(geo == "France") %>% # Filtrar solo para Francia
group_by(TIME_PERIOD) %>% # Agrupar por año
summarise(Total_Production = sum(OBS_VALUE, na.rm = TRUE)) # Sumar la producción por año
# Crear el gráfico de barras
ggplot(data_france, aes(x = TIME_PERIOD, y = Total_Production)) +
geom_bar(stat = "identity", fill = "skyblue", color = "black") +
labs(title = "Evolución de la Producción Agrícola en Francia",
x = "Año",
y = "Producción Agrícola (Millones de Euros)") +
theme_minimal()
Obviamente, nos interesa más España, así que veamos también su evolución a lo largo de los años:
Código
library(ggplot2)
data_spain <- datos_prod %>%
filter(geo == "Spain") %>% # Filtrar solo para España
group_by(TIME_PERIOD) %>% # Agrupar por año
summarise(Total_Production = sum(OBS_VALUE, na.rm = TRUE)) # Sumar la producción por año
# Crear el gráfico de barras
ggplot(data_spain, aes(x = TIME_PERIOD, y = Total_Production)) +
geom_bar(stat = "identity", fill = "skyblue", color = "black") +
labs(title = "Evolución de la Producción Agrícola en España",
x = "Año",
y = "Producción Agrícola (Millones de Euros)") +
theme_minimal()
Tal y como podemos observar, tanto España como Francia han seguido un crecimiento similar los últimos años, ascendiente pero moderado.
Ahora observemos un gráfico que muestra el porcentaje de producción agrícola de los tres países con mayor producción en comparación con el resto de Europa:
Código
# Filtrar datos para el año 2023 y excluir agrupaciones no deseadas
data_2023 <- datos_prod %>%
filter(TIME_PERIOD == 2023) %>%
filter(!grepl("European|Euro area", geo)) # Excluir filas con "European" o "Euro area"
# Calcular la producción total por país y seleccionar los 3 principales
top_countries <- data_2023 %>%
group_by(geo) %>%
summarise(Total_Production = sum(OBS_VALUE, na.rm = TRUE)) %>%
arrange(desc(Total_Production)) %>%
slice_head(n = 3) # Seleccionar los 3 países con mayor producción
# Identificar los tres principales y el resto de Europa
summary_data <- data_2023 %>%
group_by(geo) %>%
summarise(Total_Production = sum(OBS_VALUE, na.rm = TRUE)) %>%
mutate(Category = ifelse(geo %in% top_countries$geo, geo, "Resto de Europa")) %>%
group_by(Category) %>%
summarise(Total_Production = sum(Total_Production, na.rm = TRUE))
# Validar los datos finales antes del gráfico
print("Summary data for the chart:")
#> [1] "Summary data for the chart:"
print(summary_data)
#> # A tibble: 4 × 2
#> Category Total_Production
#> <chr> <dbl>
#> 1 France 95776.
#> 2 Germany 76147.
#> 3 Italy 72965.
#> 4 Resto de Europa 310399.
# Crear el gráfico circular
ggplot(summary_data, aes(x = "", y = Total_Production, fill = Category)) +
geom_bar(stat = "identity", width = 1, color = "white") +
coord_polar(theta = "y") +
scale_fill_brewer(palette = "Set3", name = "Categoría") +
labs(title = "Comparación de los 3 países con mayor producción agrícola vs Resto de Europa (2023)") +
theme_void() +
geom_text(aes(label = paste0(Category, ": ", round(Total_Production / sum(Total_Production) * 100, 1), "%")),
position = position_stack(vjust = 0.5), size = 4)
Como vemos, los tres países con mayor producción agraria suman casi el 45% de la producción total europea, veamos qué pasa si añadimos España que era el cuarto:
Código
data_2023 <- datos_prod %>%
filter(TIME_PERIOD == 2023) %>%
filter(!grepl("European|Euro area", geo)) # Excluir filas con "European" o "Euro area"
# Calcular la producción total por país y seleccionar los 3 principales
top_countries <- data_2023 %>%
group_by(geo) %>%
summarise(Total_Production = sum(OBS_VALUE, na.rm = TRUE)) %>%
arrange(desc(Total_Production)) %>%
slice_head(n = 4) # Seleccionar los 4 países con mayor producción
# Identificar los tres principales y el resto de Europa
summary_data <- data_2023 %>%
group_by(geo) %>%
summarise(Total_Production = sum(OBS_VALUE, na.rm = TRUE)) %>%
mutate(Category = ifelse(geo %in% top_countries$geo, geo, "Resto de Europa")) %>%
group_by(Category) %>%
summarise(Total_Production = sum(Total_Production, na.rm = TRUE))
# Crear el gráfico circular
ggplot(summary_data, aes(x = "", y = Total_Production, fill = Category)) +
geom_bar(stat = "identity", width = 1, color = "white") +
coord_polar(theta = "y") +
scale_fill_brewer(palette = "Set3", name = "Categoría") +
labs(title = "Comparación de los 3 países con mayor producción agrícola vs Resto de Europa (2023)") +
theme_void() +
geom_text(aes(label = paste0(Category, ": ", round(Total_Production / sum(Total_Production) * 100, 1), "%")),
position = position_stack(vjust = 0.5), size = 4)
De esta manera ya vemos que tan solo 4 países producen más de la mitad de la producción agricula en Europa, lo que es un claro indicador de que la distribución es muy desigual, concentrandose la mayoria en estos países.
Otro grafico con la comparativa por países:
Código
# Filtrar datos para eliminar países con más de una palabra en el nombre
data_filtered_cleaned <- data_filtered %>%
filter(!grepl(" ", geo)) # Excluir países con más de una palabra en 'geo'
# Crear el gráfico de barras
ggplot(data_filtered_cleaned, aes(x = TIME_PERIOD, y = OBS_VALUE, fill = geo)) +
geom_bar(stat = "identity") +
labs(title = "Contribución de cada país a la producción total por año",
x = "Año", y = "Producción (Millones de Euros)") +
scale_y_continuous(labels = scales::comma) + # Formatear el eje Y
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1), # Rotar etiquetas de años para mayor claridad
plot.title = element_text(size = 16, face = "bold")
)
Finalmente, vamos a trabajar con los últimos datos para ver un poco la evolución de precios y algunos índices:
Código
#Vamos a arreglarlos un poco para no tener que estar haciéndolo en cada apartado:
# Filtrar el dataset eliminando países con nombres de más de una palabra
data_cleaned <- datos_precios %>%
filter(!grepl(" ", geo)) # Excluir filas donde 'geo' contiene un espacio
#Ahora trabajaremos con el dataset data_cleaned
#Cogeremos el maíz como el principal cereal representante de la actividad agrícola, para medir la evolución de precios
# Filtrar para un producto específico
data_germany <- data_cleaned %>%
filter(geo == "Germany")
data_filtered <- data_cleaned %>%
filter(prod_veg == "Soft wheat - prices per 100 kg")
ggplot(data_germany, aes(x = TIME_PERIOD, y = OBS_VALUE, color = geo)) +
geom_line() +
labs(title = "Tendencia del Precio de Maíz en Alemania",
x = "Año", y = "Precio por 100kgs (Euros/Moneda local)",
color = "País") +
theme_minimal()
Veamos ahora los precios en España:
Código
data_spain <- data_cleaned %>%
filter(geo == "Spain")
data_filtered <- data_cleaned %>%
filter(prod_veg == "Soft wheat - prices per 100 kg")
ggplot(data_spain, aes(x = TIME_PERIOD, y = OBS_VALUE, color = geo)) +
geom_line() +
labs(title = "Tendencia del Precio de Maíz en Alemania",
x = "Año", y = "Precio por 100kgs (Euros/Moneda local)",
color = "País") +
theme_minimal()
Ahora haremos la media de todos los países:
Código
# Calcular la media global por año
global_mean <- data_cleaned %>%
group_by(TIME_PERIOD) %>%
summarise(Global_Mean = mean(OBS_VALUE, na.rm = TRUE)) # Media de producción global
# Filtrar los datos de Alemania
data_spain <- data_spain %>%
filter(geo == "Spain") %>%
select(TIME_PERIOD, OBS_VALUE) %>%
rename(Spain = OBS_VALUE) # Renombrar la columna para distinguirla
# Combinar las dos series
combined_data <- global_mean %>%
left_join(data_spain, by = "TIME_PERIOD")
# Crear el gráfico
ggplot(combined_data, aes(x = TIME_PERIOD)) +
geom_line(aes(y = Global_Mean, color = "Media Global"), size = 1) +
geom_line(aes(y = Spain, color = "España"), size = 1) +
labs(title = "Producción Agrícola: España vs Media Global",
x = "Año",
y = "Producción (Euros/Moneda local)",
color = "Leyenda") +
theme_minimal() +
scale_color_manual(values = c("Media Global" = "blue", "España" = "red")) +
theme(
plot.title = element_text(size = 16, face = "bold"),
axis.text.x = element_text(angle = 45, hjust = 1)
)
Se aprecia que España sigue una tendencia muy similar a la media global europea. Eso sí, Alemania vemos como en 2018 y 2019 subió de más el precio debido a una intensa sequía que redujo significativamente las cosechas de maíz y otros cultivos en Alemania y países vecinos, lo que llevó a una disminución de la oferta y, consecuentemente, al alza de los precios.
Conclusiones
- Demografía agrícola
Predomina la participación masculina en el sector agrícola, con una notable brecha de género. Además, se refleja un envejecimiento de la fuerza laboral.
- Producción agrícola
España contribuye con el 11,8% a la producción agrícola europea, superada tan solo por Francia, Alemania y Italia. España en parte no tiene un mayor porcentaje debido a que aquí todo y que las explotaciones más grandes aportan mayor producción, las predominantes son las pequeñas, sobre todo los minifundios.
- Retos y oportunidades
La modernización y sostenibilidad son clave para enfrentar el cambio climático. Es crucial atraer a jóvenes y mujeres al sector mediante formación e incentivos.