Evolución del IPC en España

El Índice de precios de consumo (IPC) es una medida estadística de la evolución de los precios de los bienes y servicios que consume la población residente en viviendas familiares en España. El conjunto de bienes y servicios, que conforman la cesta de la compra, se obtiene básicamente del consumo de las familias y la importancia de cada uno de ellos en el cálculo del IPC está determinada por dicho consumo. Por lo tanto, en este trabajo analizaremos la evolución del IPC tanto en España como en cada comunidad autónoma.

trabajo BigData
Authors

Emma Roselló Ortiz (emror@alumni.uv.es)

Laura Martí Molins (marmola2@alumni.uv.es)

Published

December 30, 2024

#Introducción

La primera sección consiste en mostrar la evolución del IPC en España y relacionar los cambios de este con distintos eventos.

La segunda sección se basa en un análisis de la inflación a nivel nacional. Dentro de este apartado, abordamos los siguientes aspectos:

Evolución del IPC por Comunidades Autónomas

Impacto del coste de vida: Renta disponible: Relacionar el IPC con la renta media en cada región para analizar el impacto en el poder adquisitivo. Desigualdad regional: Explorar cómo las diferencias en el coste de vida afectan a la igualdad económica.

Tercera sección donde analizaremos el impacto de sectores específicos

#Paquetes


Attaching package: 'dplyr'
The following object is masked from 'package:kableExtra':

    group_rows
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
Linking to GEOS 3.11.0, GDAL 3.5.3, PROJ 9.1.0; sf_use_s2() is TRUE
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ forcats   1.0.0     ✔ readr     2.1.5
✔ lubridate 1.9.3     ✔ stringr   1.5.1
✔ purrr     1.0.2     ✔ tibble    3.2.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter()     masks stats::filter()
✖ dplyr::group_rows() masks kableExtra::group_rows()
✖ dplyr::lag()        masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

Attaching package: 'vroom'

The following objects are masked from 'package:readr':

    as.col_spec, col_character, col_date, col_datetime, col_double,
    col_factor, col_guess, col_integer, col_logical, col_number,
    col_skip, col_time, cols, cols_condense, cols_only, date_names,
    date_names_lang, date_names_langs, default_locale, fwf_cols,
    fwf_empty, fwf_positions, fwf_widths, locale, output_column,
    problems, spec

#Evolución Nacional del IPC (2002-2023)

#- Datos (IPC)

ruta <- "./datos/series.csv"

df_ipc <- rio::import(ruta)

df_ipc <- df_ipc %>%
  select (-c(1,2))

df_ipc_m12 <- df_ipc %>%
  filter (grepl("M12", Periodo))

df_ipc_m12 <- df_ipc_m12 %>%
  mutate(
    Año = substr(Periodo, 1, 4),  
    Mes = substr(Periodo, 5, 6)   
  )


df_ipc_m12 <- df_ipc_m12 %>%
  filter(Año >= 2002 & Año <= 2024)

df_ipc_m12 <- df_ipc_m12 %>%
  mutate(
    Total = gsub(",", ".", Total),  
    Total = as.numeric(Total)       
  )
df_ipc_m12 <- df_ipc_m12 %>%
  mutate(Año = as.numeric(Año))

df_ipc_m12 <- df_ipc_m12 %>%
  select(-Periodo, -1)



p <-ggplot(df_ipc_m12, aes(x = Año, y = Total)) +
  geom_line(linewidth = 1, color = "blue") +  # Línea azul
  geom_hline(yintercept = 0, color = "black", linewidth = 0.8) +  # Línea negra en Y = 0
  labs(
    title = "Evolución del IPC Nacional",
    x = "Año",
    y = "Variación del Índice Nacional"
  ) +
  scale_x_continuous(breaks = seq(min(df_ipc_m12$Año), max(df_ipc_m12$Año), by = 1)) + 
  scale_y_continuous(expand = c(0, 0)) +
  theme_minimal() +
 theme(plot.title = element_text(hjust = 0.5),
        axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
axis.text.y = element_text(size = 8))



p

La evolución del Índice de Precios al Consumo (IPC) en España entre 2002 y 2023 ha estado marcada por diversos factores económicos, tanto nacionales como internacionales, que han influido en los cambios de precios y en el comportamiento de la inflación. A lo largo de este período, se pueden identificar varios ciclos de alta inflación, estabilidad y crisis económicas, lo que refleja la interacción de elementos internos como la política económica, el consumo, y factores externos, como la crisis global o las fluctuaciones de los precios del petróleo.

Factores Clave que Impactan el IPC en España

Crisis Económicas:

La crisis financiera global de 2008 afectó de forma significativa a la economía española. Este periodo se vio reflejado en una caída del IPC, llegando incluso a presentar una deflación en 2009, es decir, una disminución generalizada de los precios. La contracción de la demanda y el enfriamiento de la actividad económica fueron determinantes en esta disminución.

Posteriormente, la recuperación de la economía española fue gradual. A lo largo de la siguiente década, el IPC se mantuvo a niveles moderados, con algunas fluctuaciones, reflejando el proceso de consolidación económica del país.

Años de Alta Inflación (2007, 2011, 2017):

En 2007, el IPC experimentó un aumento significativo debido al auge del mercado inmobiliario y a los altos precios del petróleo, lo que generó presiones inflacionistas, especialmente en productos energéticos y transportes.

2011 fue otro año de alta inflación, impulsada principalmente por el aumento de los precios de los alimentos y la energía. Durante este periodo, las tensiones económicas y la inestabilidad política en Europa también contribuyeron a la subida de los precios.

En 2017, aunque España comenzó a salir de la crisis económica, los precios de la energía y ciertos productos básicos, como los alimentos, continuaron empujando al alza el IPC. La recuperación económica no se tradujo inmediatamente en una reducción de la inflación, ya que los precios internacionales de la energía seguían afectando a la economía española.

Recuperación y Estabilidad (2015-2020):

Tras la crisis de 2008, España vivió un periodo de recuperación económica moderada entre 2015 y 2020, lo que se reflejó en un IPC relativamente bajo y estable. La economía creció a un ritmo moderado, pero con una inflación controlada, especialmente en comparación con las décadas anteriores.

Sin embargo, factores como los precios de los alimentos, los combustibles y las tarifas de servicios públicos (electricidad, gas) contribuyeron a cierta variabilidad en la inflación durante este periodo. A pesar de ello, no se registraron aumentos sustanciales en los precios generales.

Pandemia de COVID-19 (2020-2021):

La pandemia del COVID-19 afectó a la economía mundial, lo que provocó una deflación temporal en muchos países, incluida España. La recesión económica derivada del confinamiento y la disminución de la demanda de bienes y servicios redujo la presión sobre los precios en 2020.

Sin embargo, hacia finales de 2021, el IPC comenzó a subir nuevamente. El aumento en los precios de la energía, los alimentos y otros productos básicos, junto con los efectos de la recuperación económica, impulsaron la inflación en este periodo.

Crisis Energética Global (2022-2023):

El conflicto entre Rusia y Ucrania en 2022 desencadenó una crisis energética global que afectó a los precios de la energía en Europa, provocando un fuerte aumento del IPC en España. Los precios de los combustibles, la electricidad y el gas experimentaron un incremento significativo, lo que contribuyó a una inflación superior al 10% en algunos momentos de 2022 y principios de 2023.

La crisis energética y la escasez de suministros, junto con las políticas de recuperación post-pandemia, provocaron una inflación persistente en los primeros meses de 2023, lo que afectó considerablemente al coste de vida en el país.

#Desglose regional

##IPC 1999-2008

ruta <- "./datos/ccaa1.csv"

      
        df_ccaa_orig <- rio::import(ruta)

       
        df <- janitor::clean_names(df_ccaa_orig)
Warning in grepl(x = string, pattern = current_unicode, fixed = TRUE): input
string 1 is invalid UTF-8
Warning in grepl(x = string, pattern = current_unicode, fixed = TRUE): input
string 1 is invalid UTF-8
Warning in grepl(x = string, pattern = current_unicode, fixed = TRUE): input
string 1 is invalid UTF-8
Warning in grepl(x = string, pattern = current_unicode, fixed = TRUE): input
string 1 is invalid UTF-8
Warning in grepl(x = string, pattern = current_unicode, fixed = TRUE): input
string 1 is invalid UTF-8
Warning in grepl(x = string, pattern = current_unicode, fixed = TRUE): input
string 1 is invalid UTF-8
Warning in grepl(x = string, pattern = current_unicode, fixed = TRUE): input
string 1 is invalid UTF-8
Warning in grepl(x = string, pattern = current_unicode, fixed = TRUE): input
string 1 is invalid UTF-8
Warning in grepl(x = string, pattern = current_unicode, fixed = TRUE): input
string 1 is invalid UTF-8
Warning in grepl(x = string, pattern = current_unicode, fixed = TRUE): input
string 1 is invalid UTF-8
        df <- df %>% rename(año = periodo)

       
        df <- df %>% mutate(total = stringr::str_replace(total, ",", "."))

        df <- df %>%
          select(-c(2)) %>%  
          filter(grepl("M12", año)) %>%  
          mutate(
            año = substr(año, 1, 4),  
            mes = substr(año, 5, 6)   
          )

        
        df <- df %>%
          filter(año >= 1999 & año <= 2008) %>%  
          mutate(
            total = gsub(",", ".", total),  
            total = as.numeric(total),      
            año = as.numeric(año)          
          ) 
              

        df <- df %>%
          rename(CCAA = comunidades_y_ciudades_aut_nomas)

        df <- data.frame(lapply(df, function(x) iconv(x, from = "latin1", to = "UTF-8", sub = "byte")), stringsAsFactors = FALSE)

        write.csv(df, file = "ccaa1.csv", fileEncoding = "UTF-8", row.names = FALSE)





  
        df <- df %>%
          mutate(total = gsub(",", ".", total)) %>%   
          mutate(total = as.numeric(total))  

        
        tabla_resumen <- df %>%
          group_by(CCAA, año) %>%
          summarise(Total = sum(total, na.rm = TRUE)) %>%
          pivot_wider(
            names_from = año,
            values_from = Total
          )
`summarise()` has grouped output by 'CCAA'. You can override using the
`.groups` argument.
        kable(tabla_resumen, caption = "Resumen de IPC 1999-2008")
Resumen de IPC 1999-2008
CCAA 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008
01 Andalucía 2.4 3.8 2.8 3.9 2.6 3.1 3.6 2.9 4.2 1.3
02 Aragón 3.2 3.7 2.5 4.1 2.4 3.2 3.8 2.9 4.4 1.6
03 Asturias, Principado de 2.6 4.3 2.4 3.8 2.4 3.1 3.5 2.4 4.1 1.6
04 Balears, Illes 3.0 3.8 3.7 4.5 2.3 3.0 3.5 2.8 3.9 1.3
05 Canarias 2.4 3.5 2.4 3.2 1.9 2.5 2.8 2.0 4.3 1.6
06 Cantabria 2.9 3.5 3.0 3.7 2.6 2.8 3.6 2.7 4.4 1.3
07 Castilla y León 3.1 4.1 2.5 3.6 2.1 3.1 3.7 2.7 4.5 1.1
08 Castilla - La Mancha 3.0 4.1 2.3 3.8 2.6 3.4 3.8 2.6 4.5 0.9
09 Cataluña 3.5 4.2 2.8 4.3 3.1 3.6 4.3 2.8 4.3 1.6
10 Comunitat Valenciana 2.6 4.0 2.7 4.1 2.4 3.4 3.5 2.6 4.3 1.5
11 Extremadura 1.8 3.6 2.9 3.5 2.1 2.8 3.1 2.4 4.2 1.3
12 Galicia 3.2 3.7 2.6 4.3 2.3 3.3 3.7 2.6 4.1 1.2
13 Madrid, Comunidad de 2.8 3.9 2.5 3.9 2.6 3.1 3.7 2.7 4.0 1.6
14 Murcia, Región de 3.2 4.8 2.6 4.4 3.2 3.3 4.1 2.5 4.7 1.1
15 Navarra, Comunidad Foral de 3.3 4.1 2.7 4.0 2.8 3.3 3.7 2.1 4.2 1.2
16 País Vasco 3.0 3.8 3.4 3.9 2.6 3.2 3.7 2.6 4.2 1.9
17 Rioja, La 3.6 4.5 3.6 3.8 2.4 3.3 4.4 3.1 3.9 1.6
18 Ceuta 1.6 3.4 3.2 3.8 3.8 2.7 3.2 2.4 3.0 2.1
19 Melilla 2.9 4.2 2.5 4.2 3.4 4.2 4.3 2.9 3.8 1.8

Analizando la tabla de “Resumen de IPC 1999-2008”, podemos destacar las siguientes observaciones:

  1. Comunidades con mayores variaciones:
  1. Evolución general:
  1. Comportamiento por comunidades:

##IPC 2009-2019

ruta <- "./datos/ccaa2.csv"



df_ccaa_orig2 <- rio::import(ruta)



df_ccaa2 <- df_ccaa_orig2 %>%
  select (-c(2,3))
Warning in grep("^[.][.](?:[.]|[1-9][0-9]*)$", names): unable to translate
'Comunidades y Ciudades Aut<f3>nomas' to a wide string
Warning in grep("^[.][.](?:[.]|[1-9][0-9]*)$", names): input string 1 is
invalid
df_ccaa2 <- df_ccaa2 %>%
  filter (grepl("M12", Periodo))

df_ccaa2 <- df_ccaa2 %>%
  mutate(
    Año = substr(Periodo, 1, 4), 
    Mes = substr(Periodo, 5, 6)   
  )


df_ccaa2 <- df_ccaa2 %>%
  filter(Año >= 2009 & Año <= 2019)
# Limpiar la columna Valor
df_ccaa2 <- df_ccaa2%>%
  mutate(
    Total = gsub(",", ".", Total),  
    Total = as.numeric(Total)       
  )
df_ccaa2 <- df_ccaa2 %>%
  mutate(Año = as.numeric(Año))



df_ccaa2 <- df_ccaa2 %>%
  select(-Periodo)
Warning in grep("^[.][.](?:[.]|[1-9][0-9]*)$", names): unable to translate
'Comunidades y Ciudades Aut<f3>nomas' to a wide string
Warning in grep("^[.][.](?:[.]|[1-9][0-9]*)$", names): input string 1 is
invalid
colnames(df_ccaa2)[1] <- make.names("CCAA", unique = TRUE)

df_ccaa2 <- data.frame(lapply(df_ccaa2, function(x) iconv(x, from = "latin1", to = "UTF-8", sub = "byte")), stringsAsFactors = FALSE)



write.csv(df_ccaa2, file = "ccaa2.csv", fileEncoding = "UTF-8", row.names = FALSE)

library(knitr)


df_ccaa2 <- df_ccaa2 %>%
  mutate(
    Total = gsub(",", ".", Total),  
    Total = as.numeric(Total)       
  )


df_ccaa2 <- df_ccaa2 %>%
  select(CCAA, Año, Total) %>%    
  filter(Año >= 2009 & Año <= 2019) %>%    
  group_by(CCAA, Año) %>%  
  summarise(Total = sum(Total, na.rm = TRUE)) %>%    
  pivot_wider(    
    names_from = Año, 
    values_from = Total
  )
`summarise()` has grouped output by 'CCAA'. You can override using the
`.groups` argument.
kable(df_ccaa2, caption = "Resumen de IPC por Comunidad Autónoma (2009-2019)")
Resumen de IPC por Comunidad Autónoma (2009-2019)
CCAA 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019
01 Andalucía 0.6 3.2 2.1 2.6 0.3 -1.2 0.0 1.6 1.1 1.0 0.5
02 Aragón 0.8 2.9 2.4 2.7 0.2 -1.2 -0.1 1.6 0.9 1.2 0.8
03 Asturias, Principado de 0.7 3.2 2.7 2.6 0.2 -1.1 -0.2 1.6 0.9 1.1 0.4
04 Balears, Illes 0.8 2.7 2.3 3.1 0.5 -0.8 0.3 1.6 1.3 0.7 1.0
05 Canarias -0.4 2.0 2.0 2.5 -0.4 -1.1 -0.4 1.3 1.1 1.4 0.4
06 Cantabria 1.0 3.1 2.3 3.6 0.6 -1.3 -0.4 1.5 1.2 1.0 0.9
07 Castilla y León 0.7 3.2 2.7 3.1 0.5 -1.2 -0.3 1.6 1.0 1.2 1.0
08 Castilla - La Mancha 0.5 3.4 2.6 2.7 0.2 -1.5 -0.3 1.6 1.1 1.2 0.9
09 Cataluña 1.2 3.0 2.5 3.6 0.2 -0.7 0.3 1.9 1.2 1.4 0.9
10 Comunitat Valenciana 0.8 2.9 2.1 3.0 0.2 -1.2 0.2 1.3 1.1 1.1 0.7
11 Extremadura 0.5 3.0 2.4 2.8 0.0 -1.2 -0.3 1.5 0.8 1.1 0.7
12 Galicia 0.9 3.1 2.5 2.6 0.5 -1.0 -0.2 1.6 1.2 1.0 0.7
13 Madrid, Comunidad de 0.9 3.0 2.5 2.5 0.2 -1.1 0.0 1.4 1.2 1.4 0.9
14 Murcia, Región de 0.6 3.0 2.2 2.9 0.4 -1.3 -0.1 1.6 0.6 0.9 0.7
15 Navarra, Comunidad Foral de 0.5 2.8 2.6 2.7 0.0 -1.2 -0.1 1.8 0.6 1.3 1.3
16 País Vasco 1.0 2.8 2.4 2.7 0.6 -0.7 0.3 1.5 1.1 1.0 1.2
17 Rioja, La 0.5 3.0 2.7 2.8 0.1 -0.9 0.1 1.5 0.6 1.2 1.0
18 Ceuta 1.4 1.9 2.0 2.2 -0.1 -0.5 -0.6 1.1 0.6 0.7 0.3
19 Melilla 1.3 2.4 1.5 1.6 -0.4 -0.6 -0.3 1.4 1.4 -0.3 0.5

Analizando la tabla, podemos observar las siguientes comunidades autónomas con las mayores variaciones del IPC durante el periodo 2009-2019:

Cataluña:

Presenta la mayor variación del IPC, con un pico de 3.6% en 2012.

Muestra una tendencia de crecimiento sostenido en la inflación, pasando de 1.2% en 2009 a 0.9% en 2019.

País Vasco:

Registra una de las variaciones más altas, llegando a 3.6% en 2012.

Después de una caída en 2013-2014, la variación se recupera y se mantiene en torno al 1% en los últimos años.

Navarra:

Experimenta una variación máxima del 2.8% en 2010, seguida de una tendencia a la baja.

En 2019, la variación se sitúa en 1.3%, una de las más altas del periodo.

Cantabria:

Presenta una variación elevada, alcanzando 3.6% en 2012.

Después de una caída en 2013-2014, la variación se recupera y se mantiene en torno al 1% en los últimos años.

En general, el periodo 2009-2019 se caracteriza por:

Una tendencia de crecimiento sostenido de la inflación en la mayoría de las comunidades autónomas, con picos máximos en 2012.

Después de la crisis económica de 2008-2009, se observa una recuperación gradual de la inflación.

En los últimos años, se aprecia una moderación de las variaciones del IPC, situándose en torno al 1% en la mayoría de las comunidades.

Algunas comunidades, como Cataluña y País Vasco, mantienen variaciones más elevadas a lo largo de todo el periodo.

Esta evolución refleja la recuperación de la actividad económica y el consumo tras la crisis, así como la estabilización de los precios en los últimos años.

##IPC 2020-2023

ruta <- "./datos/ccaa2.csv"

        df_ccaa_orig2 <- rio::import(ruta)

        df_ccaa3 <- df_ccaa_orig2 %>%
          select (-c(2,3))
Warning in grep("^[.][.](?:[.]|[1-9][0-9]*)$", names): unable to translate
'Comunidades y Ciudades Aut<f3>nomas' to a wide string
Warning in grep("^[.][.](?:[.]|[1-9][0-9]*)$", names): input string 1 is
invalid
        df_ccaa3 <- df_ccaa3 %>%
          filter (grepl("M12", Periodo))

        df_ccaa3 <- df_ccaa3 %>%
          mutate(
            Año = substr(Periodo, 1, 4),  
            Mes = substr(Periodo, 5, 6)   
          )

        df_ccaa3 <- df_ccaa3 %>%
          filter(Año >= 2019 & Año <= 2023)

        df_ccaa3 <- df_ccaa3 %>%
          mutate(
            Total = gsub(",", ".", Total),  
            Total = as.numeric(Total)       
          )
        df_ccaa3 <- df_ccaa3 %>%
          mutate(Año = as.numeric(Año))

        df_ccaa3 <- df_ccaa3 %>%
          select(-Periodo)
Warning in grep("^[.][.](?:[.]|[1-9][0-9]*)$", names): unable to translate
'Comunidades y Ciudades Aut<f3>nomas' to a wide string
Warning in grep("^[.][.](?:[.]|[1-9][0-9]*)$", names): input string 1 is
invalid
        colnames(df_ccaa3)[1] <- make.names("CCAA", unique = TRUE)

        df_ccaa3 <- data.frame(lapply(df_ccaa3, function(x) iconv(x, from = "latin1", to = "UTF-8", sub = "byte")), stringsAsFactors = FALSE)

        write.csv(df_ccaa3, file = "ccaa2.csv", fileEncoding = "UTF-8", row.names = FALSE)

        df_ccaa3 <- df_ccaa3 %>%
          mutate(
            Total = gsub(",", ".", Total),  
            Total = as.numeric(Total)       
          )

        df_ccaa3 <- df_ccaa3 %>%
          select(CCAA, Año, Total) %>%    
          group_by(CCAA, Año) %>%   
          summarise(Total = sum(Total, na.rm = TRUE)) %>%    
          pivot_wider(    
            names_from = Año, 
            values_from = Total
          )
`summarise()` has grouped output by 'CCAA'. You can override using the
`.groups` argument.
        kable(df_ccaa3, caption = "Resumen de IPC por Comunidad Autónoma (2019-2023)")
Resumen de IPC por Comunidad Autónoma (2019-2023)
CCAA 2019 2020 2021 2022 2023
01 Andalucía 0.5 -0.3 6.7 6.2 3.3
02 Aragón 0.8 -0.6 7.2 5.9 2.5
03 Asturias, Principado de 0.4 -0.6 6.2 5.8 2.9
04 Balears, Illes 1.0 -0.4 6.5 5.5 3.3
05 Canarias 0.4 -0.1 5.8 5.8 3.8
06 Cantabria 0.9 -0.5 6.8 5.3 3.3
07 Castilla y León 1.0 -0.7 7.3 6.5 2.8
08 Castilla - La Mancha 0.9 -0.9 7.6 6.8 3.4
09 Cataluña 0.9 -0.6 6.1 5.2 3.2
10 Comunitat Valenciana 0.7 -0.5 6.8 5.5 3.3
11 Extremadura 0.7 -0.5 7.1 6.5 2.4
12 Galicia 0.7 -0.4 6.7 6.4 3.2
13 Madrid, Comunidad de 0.9 -0.8 6.2 4.9 2.7
14 Murcia, Región de 0.7 -0.4 6.3 6.3 3.0
15 Navarra, Comunidad Foral de 1.3 -0.6 6.6 6.4 2.9
16 País Vasco 1.2 -0.3 6.4 5.4 3.1
17 Rioja, La 1.0 -0.8 7.0 5.8 3.1
18 Ceuta 0.3 -0.4 5.5 6.2 3.3
19 Melilla 0.5 0.1 6.9 6.6 3.4