En primer lugar, vamos a crear la base de datos que utilizaremos a lo largo del objetivo, detallando los indicadores en los que se centrará el análisis, así como los años seleccionados para cada uno de ellos.
Una vez descargados los datos de las fuentes correspondientes, el primer paso consistirá en cargar los archivos y seleccionar las variables pertinentes. En cada caso, elegiremos únicamente dos variables: la que contiene los nombres de los países y la variable específica que se va a estudiar, que será el índice determinado en cada situación.
Para el coste de vida, que es el foco de nuestra investigación, hemos decidido coger un amplio rango de años, de forma que podamos poner más atención a su evolución.
costevida2011 = read_xlsx("D:/2º/2º CUATRIMESTRE/PROY II/OBJETIVO 4_EVOLUCIÓN/Coste de vida 2011.xlsx")
costevida2011 = costevida2011[,2:3]
colnames(costevida2011) = c('Paises', 'Índice.Costo.Vida.2011')
costevida2013 = read_xlsx("D:/2º/2º CUATRIMESTRE/PROY II/OBJETIVO 4_EVOLUCIÓN/Coste de vida 2013.xlsx")
costevida2013 = costevida2013[,2:3]
colnames(costevida2013) = c('Paises', 'Índice.Costo.Vida.2013')
costevida2015 = read_xlsx("D:/2º/2º CUATRIMESTRE/PROY II/OBJETIVO 4_EVOLUCIÓN/Coste de vida 2015.xlsx")
costevida2015 = costevida2015[,2:3]
colnames(costevida2015) = c('Paises', 'Índice.Costo.Vida.2015')
costevida2017 = read_xlsx("D:/2º/2º CUATRIMESTRE/PROY II/OBJETIVO 4_EVOLUCIÓN/Coste de vida 2017.xlsx")
costevida2017 = costevida2017[,2:3]
colnames(costevida2017) = c('Paises', 'Índice.Costo.Vida.2017')
costevida2019 = read_xlsx("D:/2º/2º CUATRIMESTRE/PROY II/OBJETIVO 4_EVOLUCIÓN/Coste de vida 2019.xlsx")
costevida2019 = costevida2019[,2:3]
colnames(costevida2019) = c('Paises', 'Índice.Costo.Vida.2019')
costevida2020 = read_xlsx("D:/2º/2º CUATRIMESTRE/PROY II/OBJETIVO 4_EVOLUCIÓN/Coste de vida 2020.xlsx")
costevida2020 = costevida2020[,2:3]
colnames(costevida2020) = c('Paises', 'Índice.Costo.Vida.2020')
costevida2021 = read_xlsx("D:/2º/2º CUATRIMESTRE/PROY II/OBJETIVO 4_EVOLUCIÓN/Coste de vida 2021.xlsx")
costevida2021 = costevida2021[,2:3]
colnames(costevida2021) = c('Paises', 'Índice.Costo.Vida.2021')
costevida2022 = read_xlsx("D:/2º/2º CUATRIMESTRE/PROY II/OBJETIVO 4_EVOLUCIÓN/Coste de vida 2022.xlsx")
costevida2022 = costevida2022[,2:3]
colnames(costevida2022) = c('Paises', 'Índice.Costo.Vida.2022')
costevida = left_join(costevida2011, costevida2013)
## Joining with `by = join_by(Paises)`
costevida = left_join(costevida, costevida2015)
## Joining with `by = join_by(Paises)`
costevida = left_join(costevida, costevida2017)
## Joining with `by = join_by(Paises)`
costevida = left_join(costevida, costevida2019)
## Joining with `by = join_by(Paises)`
costevida = left_join(costevida, costevida2020)
## Joining with `by = join_by(Paises)`
costevida = left_join(costevida, costevida2021)
## Joining with `by = join_by(Paises)`
costevida = left_join(costevida, costevida2022)
## Joining with `by = join_by(Paises)`
head(costevida)
## # A tibble: 6 × 9
## Paises Índice.Costo.Vida.2011 Índice.Costo.Vida.2013 Índice.Costo.Vida.2015
## <chr> <dbl> <dbl> <dbl>
## 1 Noruega 140. 174. 119.
## 2 Suiza 131. 152. 126.
## 3 Dinamarca 120. 120. 101.
## 4 Bélgica 109. 108. 87.2
## 5 Australia 108. 134. 99.3
## 6 Irlanda 107. 112. 92.1
## # ℹ 5 more variables: Índice.Costo.Vida.2017 <dbl>,
## # Índice.Costo.Vida.2019 <dbl>, Índice.Costo.Vida.2020 <dbl>,
## # Índice.Costo.Vida.2021 <dbl>, Índice.Costo.Vida.2022 <dbl>
En relación al PIB, hemos optado por escoger los años más recientes con el fin de analizar con mayor detalle los efectos de los recientes acontecimientos, tal como se explica en el informe.
PIBcapita2019 = read.csv('D:/2º/2º CUATRIMESTRE/PROY II/objetivo 4/pib_anual_per_capita2019.csv')
PIBcapita2019 = PIBcapita2019[,-1]
PIBcapita2020 = read.csv('D:/2º/2º CUATRIMESTRE/PROY II/objetivo 4/pib_anual_per_capita2020.csv')
PIBcapita2020 = PIBcapita2020[,-1]
PIBcapita2021 = read.csv('D:/2º/2º CUATRIMESTRE/PROY II/objetivo 4/pib_anual_per_capita2021.csv')
PIBcapita2021 = PIBcapita2021[,-1]
PIBcapita2022 = read.csv('D:/2º/2º CUATRIMESTRE/PROY II/objetivo 4/pib_anual_per_capita2022.csv')
PIBcapita2022 = PIBcapita2022[,-1]
PIB = left_join(PIBcapita2019, PIBcapita2020)
## Joining with `by = join_by(Paises)`
PIB = left_join(PIB, PIBcapita2021)
## Joining with `by = join_by(Paises)`
PIB = left_join(PIB, PIBcapita2022)
## Joining with `by = join_by(Paises)`
head(PIB)
## Paises PIB.per.cápita.2019 PIB.per.cápita.2020 PIB.per.cápita.2021
## 1 España 26440 23610 25500
## 2 Alemania 41510 40950 43290
## 3 Reino Unido 37830 35353 39339
## 4 Francia 35970 33980 36660
## 5 Italia 30080 27940 30230
## 6 Portugal 20840 19470 20870
## PIB.per.cápita.2022
## 1 27870
## 2 46180
## 3 43434
## 4 38590
## 5 32390
## 6 23290
Del índice de felicidad nos interesa estudiar dos periodos distintos, uno antes de la pandemia y otro durante/después de la pandemia. De ahí la elección de los años especificados.
felicidad2017 = read_xlsx('D:\\2º\\2º CUATRIMESTRE\\PROY II\\objetivo 4\\indice_felicidad_2017.xlsx')
felicidad2017 = felicidad2017[,c(1,3)]
colnames(felicidad2017) = c('Paises','Índice.Felicidad.2017')
felicidad2017$Paises = gsub(" \\[\\+\\]", "", felicidad2017$Paises)
felicidad2019 = read_xlsx("D:/2º/2º CUATRIMESTRE/PROY II/OBJETIVO 4_EVOLUCIÓN/Felicidad 2019.xlsx")
felicidad2019 = felicidad2019[,c(1,3)]
colnames(felicidad2019) = c('Paises','Índice.Felicidad.2019')
felicidad2019$Paises = gsub(" \\[\\+\\]", "", felicidad2019$Paises)
felicidad2020 = read_xlsx('D:\\2º\\2º CUATRIMESTRE\\PROY II\\objetivo 4\\indice_felicidad_2020.xlsx')
felicidad2020 = felicidad2020[,c(1,3)]
colnames(felicidad2020) = c('Paises','Índice.Felicidad.2020')
felicidad2020$Paises = gsub(" \\[\\+\\]", "", felicidad2020$Paises)
felicidad2022 = read_xlsx("D:/2º/2º CUATRIMESTRE/PROY II/OBJETIVO 4_EVOLUCIÓN/Felicidad 2022.xlsx")
felicidad2022 = felicidad2022[,c(1,3)]
colnames(felicidad2022) = c('Paises','Índice.Felicidad.2022')
felicidad2022$Paises = gsub(" \\[\\+\\]", "", felicidad2022$Paises)
felicidad = left_join(felicidad2017, felicidad2019)
## Joining with `by = join_by(Paises)`
felicidad = left_join(felicidad, felicidad2020)
## Joining with `by = join_by(Paises)`
felicidad = left_join(felicidad, felicidad2022)
## Joining with `by = join_by(Paises)`
head(felicidad)
## # A tibble: 6 × 5
## Paises Índice.Felicidad.2017 Índice.Felicidad.2019 Índice.Felicidad.2020
## <chr> <dbl> <dbl> <dbl>
## 1 España 6.40 6.35 6.40
## 2 Alemania 6.95 6.98 7.08
## 3 Reino Unido 6.71 7.05 7.16
## 4 Francia 6.44 6.59 6.66
## 5 Italia 5.96 6.22 6.39
## 6 Portugal 5.20 5.69 5.91
## # ℹ 1 more variable: Índice.Felicidad.2022 <dbl>
Para analizar la evolución del consumo de energía, también hemos dividido el estudio en dos periodos, pero en este caso son más extensos. Esto se debe a que buscamos identificar cambios a largo plazo en dicho consumo.
consumo2011 = read_xlsx("D:/2º/2º CUATRIMESTRE/PROY II/OBJETIVO 4_EVOLUCIÓN/Consumo Electricidad per Cápita 2011.xlsx")
consumo2011 = consumo2011[,c(1,4)]
colnames(consumo2011) = c('Paises','Consumo.capita.kWh.2011')
consumo2011$Paises = gsub(" \\[\\+\\]", "", consumo2011$Paises)
consumo2019 = read_xlsx("D:/2º/2º CUATRIMESTRE/PROY II/OBJETIVO 4_EVOLUCIÓN/Consumo Electricidad per Cápita 2019.xlsx")
consumo2019 = consumo2019[,c(1,4)]
colnames(consumo2019) = c('Paises','Consumo.capita.kWh.2019')
consumo2019$Paises = gsub(" \\[\\+\\]", "", consumo2019$Paises)
consumo2022 = read_xlsx("D:/2º/2º CUATRIMESTRE/PROY II/OBJETIVO 4_EVOLUCIÓN/Consumo Electricidad per Cápita 2022.xlsx")
consumo2022 = consumo2022[,c(1,5)]
colnames(consumo2022) = c('Paises','Consumo.capita.kWh.2022')
consumo2022$Paises = gsub(" \\[\\+\\]", "", consumo2022$Paises)
consumo = left_join(consumo2011, consumo2019)
## Joining with `by = join_by(Paises)`
consumo = left_join(consumo, consumo2022)
## Joining with `by = join_by(Paises)`
head(consumo)
## # A tibble: 6 × 4
## Paises Consumo.capita.kWh.2…¹ Consumo.capita.kWh.2…² Consumo.capita.kWh.2…³
## <chr> <dbl> <dbl> <dbl>
## 1 España 5768. 5592. 5259.
## 2 Alemania 6811 6222. 6147
## 3 Reino Un… 5170. 4614. 4283.
## 4 Francia 6892. 6639. 6595.
## 5 Italia 5318. 4762. 5085.
## 6 Portugal 4702. 4769. 4612.
## # ℹ abbreviated names: ¹Consumo.capita.kWh.2011, ²Consumo.capita.kWh.2019,
## # ³Consumo.capita.kWh.2022
En relación al gasto público en defensa, nos limitaremos a analizar únicamente dos años que consideramos representativos de los eventos que queremos estudiar. Además, en este caso, el indicador que utilizaremos en los cálculos y gráficos es el resultado de multiplicar el gasto público en millones de euros por el porcentaje destinado específicamente a defensa. Esto nos proporciona los millones de euros invertidos en defensa en cada país. La razón detrás de este enfoque se debe a que la cantidad total de gasto público puede haber experimentado una disminución o aumento, mientras que el porcentaje destinado a defensa puede haber experimentado cambios opuestos. Al utilizar este enfoque, evitamos obtener resultados erróneos sobre la variación del gasto en defensa.
gastodefensa2019 = read_xlsx("D:/2º/2º CUATRIMESTRE/PROY II/OBJETIVO 4_EVOLUCIÓN/Gasto Público 2019.xlsx")
gastodefensa2019 = gastodefensa2019
gastodefensa2019$Países = gsub(" \\[\\+\\]", "", gastodefensa2019$Países)
gastodefensa2019$Gasto.Defensa.2019 = (gastodefensa2019$`G. Público (M.€)` * gastodefensa2019$`Gasto Defensa (%Gto Pub)`)/100
gastodefensa2019 = gastodefensa2019[,c(1,9)]
colnames(gastodefensa2019)[1] = 'Paises'
gastodefensa2022 = read_xlsx("D:/2º/2º CUATRIMESTRE/PROY II/OBJETIVO 4_EVOLUCIÓN/Gasto Público 2022.xlsx")
gastodefensa2022 = gastodefensa2022
gastodefensa2022$Países = gsub(" \\[\\+\\]", "", gastodefensa2022$Países)
gastodefensa2022$Gasto.Defensa.2022 = (gastodefensa2022$`G. Público (M.€)` * gastodefensa2022$`Gasto Defensa (%Gto Pub)`) / 100
gastodefensa2022 = gastodefensa2022[,c(1,9)]
colnames(gastodefensa2022)[1] = 'Paises'
defensa = left_join(gastodefensa2019, gastodefensa2022)
## Joining with `by = join_by(Paises)`
head(defensa)
## # A tibble: 6 × 3
## Paises Gasto.Defensa.2019 Gasto.Defensa.2022
## <chr> <dbl> <dbl>
## 1 España 113. 171.
## 2 Alemania 467. 484.
## 3 Reino Unido 537. 569.
## 4 Francia 444. 493.
## 5 Italia 212. 286.
## 6 Portugal 30.4 43.2
Para finalizar, hemos cargado una base de datos que incluye los nombres de los países en inglés. Esta elección nos permitirá utilizar bibliotecas y herramientas que facilitan la creación de representaciones visuales geográficas, lo cual será de gran utilidad para nuestro análisis.
conversion = read.csv('D:/2º/2º CUATRIMESTRE/PROY II/OBJETIVO 4_EVOLUCIÓN/paises_conversion.csv')[,1:2]
colnames(conversion) = c('Paises','Country')
head(conversion)
## Paises Country
## 1 Afganistán Afghanistan
## 2 Albania Albania
## 3 Alemania Germany
## 4 Andorra Andorra
## 5 Angola Angola
## 6 Anguila Anguilla
El siguiente paso es concatenar todas las variables seleccionadas, excepto la de conversión, la cual uniremos con el resto de la base de datos tras el tratamiento de los valores faltantes.
bd = left_join(costevida, PIB)
## Joining with `by = join_by(Paises)`
bd = left_join(bd, felicidad)
## Joining with `by = join_by(Paises)`
bd = left_join(bd, consumo)
## Joining with `by = join_by(Paises)`
bd = left_join(bd, defensa)
## Joining with `by = join_by(Paises)`
bd
## # A tibble: 83 × 22
## Paises Índice.Costo.Vida.2011 Índice.Costo.Vida.2013 Índice.Costo.Vida.2015
## <chr> <dbl> <dbl> <dbl>
## 1 Noruega 140. 174. 119.
## 2 Suiza 131. 152. 126.
## 3 Dinamar… 120. 120. 101.
## 4 Bélgica 109. 108. 87.2
## 5 Austral… 108. 134. 99.3
## 6 Irlanda 107. 112. 92.1
## 7 Países … 106. 104. 86.0
## 8 Francia 101. 103. 88.4
## 9 Suecia 101. 114. 82.9
## 10 Finland… 98.6 107. 89.7
## # ℹ 73 more rows
## # ℹ 18 more variables: Índice.Costo.Vida.2017 <dbl>,
## # Índice.Costo.Vida.2019 <dbl>, Índice.Costo.Vida.2020 <dbl>,
## # Índice.Costo.Vida.2021 <dbl>, Índice.Costo.Vida.2022 <dbl>,
## # PIB.per.cápita.2019 <int>, PIB.per.cápita.2020 <int>,
## # PIB.per.cápita.2021 <int>, PIB.per.cápita.2022 <int>,
## # Índice.Felicidad.2017 <dbl>, Índice.Felicidad.2019 <dbl>, …
Para crear esta base de datos, es necesario contar con datos completos, ya que realizaremos operaciones matemáticas sobre ellos. Después de eliminar los valores faltantes, reducimos el número de países de 83 a 69, número que consideramos suficiente para realizar nuestro análisis con éxito.
plot_missing(bd)
bd = na.omit(bd)
El último paso para dejar la base de datos con la que vamos a trabajar a lo largo del objetivo finalizada, es unir la variable de conversión comentada anteriormente.
bd = left_join(bd, conversion)
## Joining with `by = join_by(Paises)`
Además, vamos a volver a ver si hay algún faltante y cuáles son, tras introducir la nueva variable por si fuera necesario escribir manualmente alguna conversión.
faltantes = rownames(bd)[apply(is.na(bd), 1, function(x) sum(x) / length(x) > 0)]
bd[faltantes, 1]
## # A tibble: 2 × 1
## Paises
## <chr>
## 1 Estados Unidos
## 2 Macedonia del Norte
Como vemos hay dos países que no se han traducido correctamente. Consecuentemente, buscamos la posición de ambos países y sustituimos en la variable Country el valor correspondiente.
bd[26,23] = 'USA'
bd[64,23] = 'Macedonia'
bd
## # A tibble: 69 × 23
## Paises Índice.Costo.Vida.2011 Índice.Costo.Vida.2013 Índice.Costo.Vida.2015
## <chr> <dbl> <dbl> <dbl>
## 1 Noruega 140. 174. 119.
## 2 Suiza 131. 152. 126.
## 3 Dinamar… 120. 120. 101.
## 4 Bélgica 109. 108. 87.2
## 5 Austral… 108. 134. 99.3
## 6 Irlanda 107. 112. 92.1
## 7 Países … 106. 104. 86.0
## 8 Francia 101. 103. 88.4
## 9 Suecia 101. 114. 82.9
## 10 Finland… 98.6 107. 89.7
## # ℹ 59 more rows
## # ℹ 19 more variables: Índice.Costo.Vida.2017 <dbl>,
## # Índice.Costo.Vida.2019 <dbl>, Índice.Costo.Vida.2020 <dbl>,
## # Índice.Costo.Vida.2021 <dbl>, Índice.Costo.Vida.2022 <dbl>,
## # PIB.per.cápita.2019 <int>, PIB.per.cápita.2020 <int>,
## # PIB.per.cápita.2021 <int>, PIB.per.cápita.2022 <int>,
## # Índice.Felicidad.2017 <dbl>, Índice.Felicidad.2019 <dbl>, …
En este apartado vamos a calcular las variaciones y vamos a mostrar las representaciones necesarias para dar respuesta a las preguntas de análisis.
En este caso, vamos a representar un gráfico de líneas que nos permita observar toda la evolución de este índice. Para ello, primero vamos a crear una nueva base de datos que tan solo incluya los años y las medias respectivas del indicador para cada año.
años = c('2011','2013', '2015', '2017','2019','2020','2021','2022')
medias = colMeans(bd[, 2:9])
datos = data.frame(años = años, medias = round(medias,2))
head(datos)
## años medias
## Índice.Costo.Vida.2011 2011 70.70
## Índice.Costo.Vida.2013 2013 75.98
## Índice.Costo.Vida.2015 2015 62.44
## Índice.Costo.Vida.2017 2017 54.55
## Índice.Costo.Vida.2019 2019 51.91
## Índice.Costo.Vida.2020 2020 52.50
A partir de estos resultados y haciendo uso de la librería highchart representamos el gráfico deseado.
highchart() %>%
hc_chart(type = 'line') %>%
hc_xAxis(categories = datos$años) %>%
hc_add_series(datos$medias, name = 'Índice de coste de vida', dataLabels = list(enabled = TRUE)) %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
También vamos a representar un mapa de la variación de 2019 a 2022 que son los años iniciales que queríamos estudiar.
bd$cv.variacion19a22 = ((bd$Índice.Costo.Vida.2022 - bd$Índice.Costo.Vida.2019) / bd$Índice.Costo.Vida.2019) * 100
summary(bd$cv.variacion19a22)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -22.3364 -3.2596 -0.4600 -0.2137 3.3669 20.3324
Apoyándonos de los resultados obtenidos a partir del resumen de la nueva variable, establecemos los límites para la clasificación según si han disminuido, si han disminuido mucho, si han incrementado o si han incrementado mucho. Cabe destacar que un cuartil puede incluir tanto valores positivos como negativos por lo que nos basaremos en los valores del primer y tercer cuartil separándolos por el valor 0. De esta forma, se representarán aquellos países cuya variación es positiva en verde y aquellos que muestren una variación negativa en rojo.
bd <- bd %>%
mutate(grupo = case_when(
cv.variacion19a22 < -3.2596 ~ "mucha disminución",
cv.variacion19a22 < 0 ~ "disminución",
cv.variacion19a22 > 3.3669 ~ "mucho incremento",
cv.variacion19a22 > 0 ~ "incremento",
TRUE ~ "sin cambio"
))
world_map <- map_data("world")
datos_mapa <- bd %>%
select(Country, grupo) %>%
distinct() %>%
full_join(world_map, by = c("Country" = "region"))
# Crear el gráfico de mapas utilizando ggplot2
ggplot(datos_mapa, aes(x = long, y = lat, group = group, fill = grupo)) +
geom_polygon(color = "black", size = 0.2) +
coord_equal() +
theme_void() +
scale_fill_manual(values = c(
"mucha disminución" = "#E74C3C",
"disminución" = "#F5B7B1",
"incremento" = "#ABEBC6",
"mucho incremento" = "#239B56",
"sin cambio" = "gray"
)) +
labs(title = "Variación coste de vida 2019-2022") +
guides(fill = guide_legend(title = "Grupos"))
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Como hemos podido observar antes en el gráfico de líneas, en realidad este mapa no nos es de mucha utilidad ya que no estamos teniendo en cuenta los cambios producidos entre estos años. Es decir, sabemos que en 2020 y 2021 se produce un incremento que el cálculo de la variación no ha tenido en cuenta. Es por ello que preferimos utilizar el primero de los gráficos.
De la misma forma que en el coste de vida, vamos a estudiar con detalle la evolución del PIB desde 2019 hasta 2022 año por año y, posteriormente, representaremos gráficamente la variación entre este rango.
años = c('2019','2020','2021','2022')
medias = colMeans(bd[, 10:13])
datos = data.frame(años = años, medias = round(medias,2))
head(datos)
## años medias
## PIB.per.cápita.2019 2019 21592.83
## PIB.per.cápita.2020 2020 20248.19
## PIB.per.cápita.2021 2021 22442.14
## PIB.per.cápita.2022 2022 25320.75
highchart() %>%
hc_chart(type = 'line') %>%
hc_xAxis(categories = datos$años) %>%
hc_add_series(datos$medias, name = 'PIB', dataLabels = list(enabled = TRUE)) %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
bd$pib.variacion19a22 = ((bd$PIB.per.cápita.2022 - bd$PIB.per.cápita.2019) / bd$PIB.per.cápita.2019) * 100
summary(bd$pib.variacion19a22)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -47.247 5.408 13.417 13.715 25.219 53.849
En este caso, tanto el primer como el tercer cuartil son positivos así que arbitrariamente elegiremos los valores -10 y 10 para establecer los límites de cambio de grupo de un país.
bd[26,23] = 'USA'
bd <- bd %>%
mutate(grupo = case_when(
pib.variacion19a22 < -10 ~ "mucha disminución",
pib.variacion19a22 < 0 ~ "disminución",
pib.variacion19a22 > 10 ~ "mucho incremento",
pib.variacion19a22 > 0 ~ "incremento",
TRUE ~ "sin cambio"
))
world_map <- map_data("world")
datos_mapa <- bd %>%
select(Country, grupo) %>%
distinct() %>%
full_join(world_map, by = c("Country" = "region"))
# Crear el gráfico de mapas utilizando ggplot2
ggplot(datos_mapa, aes(x = long, y = lat, group = group, fill = grupo)) +
geom_polygon(color = "black", size = 0.2) +
coord_equal() +
theme_void() +
scale_fill_manual(values = c(
"mucha disminución" = "#E74C3C",
"disminución" = "#F5B7B1",
"incremento" = "#ABEBC6",
"mucho incremento" = "#239B56",
"sin cambio" = "gray"
)) +
labs(title = "Variación PIB 2019-2022") +
guides(fill = guide_legend(title = "Grupos"))
También podríamos utilizar mapas dinámicos para su representación pero su visualización no es muy clara ya que no separa valores positivos y negativos, sino que utiliza su propia escala, por lo que nos ceñiremos a representar los mapas estáticos.
bd[26,23] = 'United States of America'
mapdata <- get_data_from_map(download_map_data("custom/world.js"))
glimpse(mapdata)
## Rows: 213
## Columns: 14
## $ `hc-group` <chr> "admin0", "admin0", "admin0", "admin0", "admin0", "ad…
## $ `hc-middle-x` <dbl> 0.48, 0.57, 0.68, 0.52, 0.58, 0.34, 0.28, 0.50, 0.41,…
## $ `hc-middle-y` <dbl> 0.54, 0.58, 0.68, 0.66, 0.41, 0.43, 0.04, 0.52, 0.56,…
## $ `hc-key` <chr> "fo", "um", "us", "jp", "sc", "in", "fr", "fm", "cn",…
## $ `hc-a2` <chr> "FO", "UM", "US", "JP", "SC", "IN", "FR", "FM", "CN",…
## $ name <chr> "Faroe Islands", "United States Minor Outlying Island…
## $ labelrank <chr> "6", "5", "2", "2", "6", "2", "2", "6", "2", "2", "5"…
## $ `country-abbrev` <chr> "Faeroe Is.", "U.S. MOI", "U.S.A.", "Japan", "Syc.", …
## $ subregion <chr> "Northern Europe", "Seven seas (open ocean)", "Northe…
## $ `region-wb` <chr> "Europe & Central Asia", "East Asia & Pacific", "Nort…
## $ `iso-a3` <chr> "FRO", "UMI", "USA", "JPN", "SYC", "IND", "FRA", "FSM…
## $ `iso-a2` <chr> "FO", "UM", "US", "JP", "SC", "IN", "FR", "FM", "CN",…
## $ `woe-id` <chr> "23424816", "28289407", "23424977", "23424856", "2342…
## $ continent <chr> "Europe", "North America", "North America", "Asia", "…
glimpse(bd)
## Rows: 69
## Columns: 26
## $ Paises <chr> "Noruega", "Suiza", "Dinamarca", "Bélgica", "A…
## $ Índice.Costo.Vida.2011 <dbl> 139.53, 130.98, 119.67, 109.39, 107.83, 107.11…
## $ Índice.Costo.Vida.2013 <dbl> 173.85, 151.77, 119.95, 108.04, 133.66, 112.33…
## $ Índice.Costo.Vida.2015 <dbl> 118.59, 126.03, 100.60, 87.22, 99.32, 92.09, 8…
## $ Índice.Costo.Vida.2017 <dbl> 106.31, 122.06, 83.02, 75.36, 80.66, 76.98, 72…
## $ Índice.Costo.Vida.2019 <dbl> 100.99, 121.16, 81.38, 72.97, 72.08, 75.35, 74…
## $ Índice.Costo.Vida.2020 <dbl> 101.43, 122.40, 83.00, 71.78, 73.54, 75.91, 73…
## $ Índice.Costo.Vida.2021 <dbl> 106.09, 131.75, 91.67, 78.52, 84.14, 83.11, 78…
## $ Índice.Costo.Vida.2022 <dbl> 100.90, 123.35, 84.12, 72.61, 77.75, 76.05, 75…
## $ PIB.per.cápita.2019 <int> 68270, 75150, 53210, 41660, 48470, 72400, 4688…
## $ PIB.per.cápita.2020 <int> 60020, 75120, 53480, 39830, 46502, 74860, 4567…
## $ PIB.per.cápita.2021 <int> 76630, 77750, 57520, 43350, 53988, 84940, 4879…
## $ PIB.per.cápita.2022 <int> 101050, 87410, 63680, 46990, 62673, 98260, 531…
## $ Índice.Felicidad.2017 <dbl> 7.537, 7.494, 7.522, 6.891, 7.284, 6.977, 7.37…
## $ Índice.Felicidad.2019 <dbl> 7.554, 7.480, 7.600, 6.923, 7.228, 7.021, 7.48…
## $ Índice.Felicidad.2020 <dbl> 7.488, 7.560, 7.646, 6.864, 7.223, 7.094, 7.44…
## $ Índice.Felicidad.2022 <dbl> 7.365, 7.512, 7.636, 6.805, 7.162, 7.041, 7.41…
## $ Consumo.capita.kWh.2011 <dbl> 23042.9, 7112.6, 6045.2, 7650.3, 10033.1, 5411…
## $ Consumo.capita.kWh.2019 <dbl> 23053.7, 6376.6, 5855.0, 7331.4, 9348.3, 5688.…
## $ Consumo.capita.kWh.2022 <dbl> 24117.4, 6604.2, 6500.9, 7171.6, 9216.7, 6451.…
## $ Gasto.Defensa.2019 <dbl> 68.6257440, 46.7233732, 40.7397485, 43.2282816…
## $ Gasto.Defensa.2022 <dbl> 78.1276726, 49.8533374, 43.6008960, 56.1956189…
## $ Country <chr> "Norway", "Switzerland", "Denmark", "Belgium",…
## $ cv.variacion19a22 <dbl> -0.08911773, 1.80752724, 3.36692062, -0.493353…
## $ grupo <chr> "mucho incremento", "mucho incremento", "mucho…
## $ pib.variacion19a22 <dbl> 48.015234, 16.314039, 19.676752, 12.794047, 29…
valor_min <- min(bd$pib.variacion19a22, na.rm = TRUE)
valor_max <- max(bd$pib.variacion19a22, na.rm = TRUE)
color_scale = colorRampPalette(c("#D4E6F1", "#154360"))
num_colors = 4
colors = color_scale(num_colors)
bd$rango = cut(bd$pib.variacion19a22, breaks = num_colors)
bd$color = colors[as.integer(bd$rango)]
hcmap("custom/world.js", data = bd, value = "pib.variacion19a22",
joinBy = c("name", "Country"), name = "PIB",
dataLabels = list(enabled = FALSE, format = '{point.name}'),
borderColor = "#AEB6BF", borderWidth = 0.1,
tooltip = list(valueDecimals = 2),
colorAxis = bd$color)
En este caso vamos a representar dos mapas, uno para cada periodo a estudiar (antes de la pandemia y durante/después de la pandemia). Por tanto, vamos a calcular las variaciones porcentuales entre 2017 y 2019 por una parte, y 2020 y 2022 por otra.
bd$fel.variacion17a19 = ((bd$Índice.Felicidad.2019 - bd$Índice.Felicidad.2017) / bd$Índice.Felicidad.2017) * 100
summary(bd$fel.variacion17a19)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -12.2452 -1.4443 0.4644 0.3637 3.4991 9.5861
bd[26,23] = 'USA'
bd <- bd %>%
mutate(grupo = case_when(
fel.variacion17a19 < -1.443 ~ "mucha disminución",
fel.variacion17a19 < 0 ~ "disminución",
fel.variacion17a19 > 3.4991 ~ "mucho incremento",
fel.variacion17a19 > 0 ~ "incremento",
TRUE ~ "sin cambio"
))
world_map <- map_data("world")
datos_mapa <- bd %>%
select(Country, grupo) %>%
distinct() %>%
full_join(world_map, by = c("Country" = "region"))
# Crear el gráfico de mapas utilizando ggplot2
ggplot(datos_mapa, aes(x = long, y = lat, group = group, fill = grupo)) +
geom_polygon(color = "black", size = 0.2) +
coord_equal() +
theme_void() +
scale_fill_manual(values = c(
"mucha disminución" = "#E74C3C",
"disminución" = "#F5B7B1",
"incremento" = "#ABEBC6",
"mucho incremento" = "#239B56",
"sin cambio" = "gray"
)) +
labs(title = "Variación felicidad 2017-2019") +
guides(fill = guide_legend(title = "Grupos"))
bd$fel.variacion20a22 = ((bd$Índice.Felicidad.2022 - bd$Índice.Felicidad.2020) / bd$Índice.Felicidad.2020) * 100
summary(bd$fel.variacion20a22)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -38.0763 -1.5687 0.1537 -0.1666 1.8264 11.4668
bd[26,23] = 'USA'
bd <- bd %>%
mutate(grupo = case_when(
fel.variacion20a22 < -1.5687 ~ "mucha disminución",
fel.variacion20a22 < 0 ~ "disminución",
fel.variacion20a22 > 1.8264 ~ "mucho incremento",
fel.variacion20a22 > 0 ~ "incremento",
TRUE ~ "sin cambio"
))
world_map <- map_data("world")
datos_mapa <- bd %>%
select(Country, grupo) %>%
distinct() %>%
full_join(world_map, by = c("Country" = "region"))
# Crear el gráfico de mapas utilizando ggplot2
ggplot(datos_mapa, aes(x = long, y = lat, group = group, fill = grupo)) +
geom_polygon(color = "black", size = 0.2) +
coord_equal() +
theme_void() +
scale_fill_manual(values = c(
"mucha disminución" = "#E74C3C",
"disminución" = "#F5B7B1",
"incremento" = "#ABEBC6",
"mucho incremento" = "#239B56",
"sin cambio" = "gray"
)) +
labs(title = "Variación felicidad 2020-2022") +
guides(fill = guide_legend(title = "Grupos"))
En cuanto al consumo de energía también vamos a diferenciar dos periodos, 2011-2019 y 2019-2022, siguiendo el mismo proceso que en el apartado anterior.
bd$ce.variacion11a19 = ((bd$Consumo.capita.kWh.2019 - bd$Consumo.capita.kWh.2011) / bd$Consumo.capita.kWh.2011) * 100
summary(bd$ce.variacion11a19)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -21.227 -3.146 5.469 9.045 20.082 55.402
bd[26,23] = 'USA'
bd <- bd %>%
mutate(grupo = case_when(
ce.variacion11a19 < -3.146 ~ "mucha disminución",
ce.variacion11a19 < 0 ~ "disminución",
ce.variacion11a19 > 20.082 ~ "mucho incremento",
ce.variacion11a19 > 0 ~ "incremento",
TRUE ~ "sin cambio"
))
world_map <- map_data("world")
datos_mapa <- bd %>%
select(Country, grupo) %>%
distinct() %>%
full_join(world_map, by = c("Country" = "region"))
# Crear el gráfico de mapas utilizando ggplot2
ggplot(datos_mapa, aes(x = long, y = lat, group = group, fill = grupo)) +
geom_polygon(color = "black", size = 0.2) +
coord_equal() +
theme_void() +
scale_fill_manual(values = c(
"mucha disminución" = "#E74C3C",
"disminución" = "#F5B7B1",
"incremento" = "#ABEBC6",
"mucho incremento" = "#239B56",
"sin cambio" = "gray"
)) +
labs(title = "Variación consumo energía 2011-2019") +
guides(fill = guide_legend(title = "Grupos"))
bd$ce.variacion19a22 = ((bd$Consumo.capita.kWh.2022 - bd$Consumo.capita.kWh.2019) / bd$Consumo.capita.kWh.2019) * 100
summary(bd$ce.variacion19a22)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -14.315 -1.207 2.183 3.370 6.267 26.802
bd[26,23] = 'USA'
bd <- bd %>%
mutate(grupo = case_when(
ce.variacion19a22 < -1.207 ~ "mucha disminución",
ce.variacion19a22 < 0 ~ "disminución",
ce.variacion19a22 > 6.267 ~ "mucho incremento",
ce.variacion19a22 > 0 ~ "incremento",
TRUE ~ "sin cambio"
))
world_map <- map_data("world")
datos_mapa <- bd %>%
select(Country, grupo) %>%
distinct() %>%
full_join(world_map, by = c("Country" = "region"))
# Crear el gráfico de mapas utilizando ggplot2
ggplot(datos_mapa, aes(x = long, y = lat, group = group, fill = grupo)) +
geom_polygon(color = "black", size = 0.2) +
coord_equal() +
theme_void() +
scale_fill_manual(values = c(
"mucha disminución" = "#E74C3C",
"disminución" = "#F5B7B1",
"incremento" = "#ABEBC6",
"mucho incremento" = "#239B56",
"sin cambio" = "gray"
)) +
labs(title = "Variación consumo energía 2019-2022") +
guides(fill = guide_legend(title = "Grupos"))
Para responder con mayor certeza a la pregunta planteada sobre si los países más ricos o desarrollados han disminuido su consumo de energía, vamos a apoyarnos de los resultados obtenidos en el objetivo 1 y 2, en el que se ha conseguido clasificar los países que mayor puntúan en la categoría económica.
paises_ranking_economico <- bd[bd$Paises %in% c("Italia", "Suiza", "Noruega", "Singapur", "Estados Unidos", "Islandia", "Irlanda", "Dinamarca", "Australia"),c(1,18,19,20, 23)]
paises_ranking_economico
## # A tibble: 9 × 5
## Paises Consumo.capita.kWh.2…¹ Consumo.capita.kWh.2…² Consumo.capita.kWh.2…³
## <chr> <dbl> <dbl> <dbl>
## 1 Noruega 23043. 23054. 24117.
## 2 Suiza 7113. 6377. 6604.
## 3 Dinamarca 6045. 5855 6501.
## 4 Australia 10033. 9348. 9217.
## 5 Irlanda 5412. 5689. 6452.
## 6 Italia 5318. 4762. 5085.
## 7 Islandia 51155. 51049. 49725.
## 8 Singapur 8199. 8973. 9701.
## 9 Estados … 12471. 12142. 11974.
## # ℹ abbreviated names: ¹Consumo.capita.kWh.2011, ²Consumo.capita.kWh.2019,
## # ³Consumo.capita.kWh.2022
## # ℹ 1 more variable: Country <chr>
highchart() %>%
hc_chart(type = 'column') %>%
hc_xAxis(categories = paises_ranking_economico$Paises) %>%
hc_add_series(
paises_ranking_economico$Consumo.capita.kWh.2011,
name = 'Año 2011',
dataLabels = list(enabled = TRUE),
color = '#EC7063'
) %>%
hc_add_series(
paises_ranking_economico$Consumo.capita.kWh.2019,
name = 'Año 2019',
dataLabels = list(enabled = TRUE),
color = '#979A9A'
) %>%
hc_add_series(
paises_ranking_economico$Consumo.capita.kWh.2022,
name = 'Año 2022',
dataLabels = list(enabled = TRUE),
color = '#85C1E9'
) %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
También podemos realizar este proceso con los clusters de países que más contribuyen a la formación de la primera componente principal (cuya contribución más alta es del PIB) que serían: Noruega, Europa Norte-Australia (Francia, Dinamarca y Australia) y America Norte-Arabia (Estados Unidos, Canadá y Arabia Saudita)
paisesmayoreconomia <- bd[bd$Paises %in% c("Noruega","Francia", "Dinamarca", "Australia", "Estados Unidos", "Canadá", "Arabia Saudita"),c(1,18,19, 20, 23) ]
paisesmayoreconomia
## # A tibble: 7 × 5
## Paises Consumo.capita.kWh.2…¹ Consumo.capita.kWh.2…² Consumo.capita.kWh.2…³
## <chr> <dbl> <dbl> <dbl>
## 1 Noruega 23043. 23054. 24117.
## 2 Dinamarca 6045. 5855 6501.
## 3 Australia 10033. 9348. 9217.
## 4 Francia 6892. 6639. 6595.
## 5 Canadá 15965. 14554. 14512
## 6 Arabia S… 7453. 9690 9645.
## 7 Estados … 12471. 12142. 11974.
## # ℹ abbreviated names: ¹Consumo.capita.kWh.2011, ²Consumo.capita.kWh.2019,
## # ³Consumo.capita.kWh.2022
## # ℹ 1 more variable: Country <chr>
highchart() %>%
hc_chart(type = 'column') %>%
hc_xAxis(categories = paisesmayoreconomia$Paises) %>%
hc_add_series(
paisesmayoreconomia$Consumo.capita.kWh.2011,
name = 'Año 2011',
dataLabels = list(enabled = TRUE),
color = '#EC7063'
) %>%
hc_add_series(
paisesmayoreconomia$Consumo.capita.kWh.2019,
name = 'Año 2019',
dataLabels = list(enabled = TRUE),
color = '#979A9A'
) %>%
hc_add_series(
paisesmayoreconomia$Consumo.capita.kWh.2022,
name = 'Año 2022',
dataLabels = list(enabled = TRUE),
color = '#85C1E9'
) %>%
hc_exporting(enabled = TRUE) %>%
hc_plotOptions(series = list(animation = FALSE))
Por útlimo, vamos a estudiar la variación del gasto público destinado en defensa, de la misma forma que en el resto de indicadores.
bd$gpd.variacion19a22 = ((bd$Gasto.Defensa.2022 - bd$Gasto.Defensa.2019) / bd$Gasto.Defensa.2019) * 100
summary(bd$gpd.variacion19a22)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## -69.386 -2.278 6.815 10.044 23.193 68.792 3
bd[26,23] = 'USA'
bd <- bd %>%
mutate(grupo = case_when(
gpd.variacion19a22 < -2.278 ~ "mucha disminución",
gpd.variacion19a22 < 0 ~ "disminución",
gpd.variacion19a22 > 23.193 ~ "mucho incremento",
gpd.variacion19a22 > 0 ~ "incremento",
TRUE ~ "sin cambio"
))
world_map <- map_data("world")
datos_mapa <- bd %>%
select(Country, grupo) %>%
distinct() %>%
full_join(world_map, by = c("Country" = "region"))
# Crear el gráfico de mapas utilizando ggplot2
ggplot(datos_mapa, aes(x = long, y = lat, group = group, fill = grupo)) +
geom_polygon(color = "black", size = 0.2) +
coord_equal() +
theme_void() +
scale_fill_manual(values = c(
"mucha disminución" = "#E74C3C",
"disminución" = "#F5B7B1",
"incremento" = "#ABEBC6",
"mucho incremento" = "#239B56",
"sin cambio" = "gray"
)) +
labs(title = "Variación gasto público en defensa 2019-2022") +
guides(fill = guide_legend(title = "Grupos"))