# Instalar y cargar las librerias
# install.packages(c("tidytuesdayR", "DBI", "RSQLite","tidyverse","datos","shiny"))
library(tidytuesdayR)
library(DBI)
library(RSQLite)
library(tidyverse)
library(datos)
library(shiny)
LifeExpectancy
Expectativa de vida
El siguiente código toma un dataset provisto por Tidy Tuesday que brinda información sobre la expectativa de vida anual de cada pais e intenta responder las siguientes preguntas:
1- Cuál es la relación entre el nivel de ingresos-desarrollo y la expectativa de vida?
2- Cuáles son los 3 países que tuvieron mayor/menor expectativa de vida promedio?
Cual fue el pais que tuvo mejor evolución de su expectativa de vida en un año?
# Descargar los datasets
<- tidytuesdayR::tt_load("2023-12-05")
tuesdata <- tuesdata$life_expectancy
life_expectancy <- tuesdata$life_expectancy_different_ages
life_expectancy_different_ages # life_expectancy_female_male <- tuesdata$life_expectancy_female_male
# Crear una conexión ficticia a una base de datos ficticia
<- dbConnect(RSQLite::SQLite(), dbname = ":memory:") con
# Crear tablas e insertar los datasets
dbWriteTable(con, "life", life_expectancy, overwrite = TRUE)
dbWriteTable(con, "life_ages", life_expectancy_different_ages, overwrite = TRUE)
# dbWriteTable(con, "life_sex", life_expectancy_female_male)
Expectativa de vida por continente
# Consultar datos desde la tabla life
<- dbGetQuery(con, "
Continents SELECT *
FROM life
WHERE Entity='Americas'
OR Entity='Africa'
OR Entity='Asia'
OR Entity='Europe'
OR Entity='Oceania'
OR Entity='World'
")
# Graficar las expectativas de vida por continente
ggplot(Continents, aes(x = Year, y = LifeExpectancy, color = Entity, label = Entity)) +
geom_line() +
geom_point() +
labs(title = "Evolución de la Expectativa de Vida por continente",
x = "Año",
y = "Expectativa de Vida") +
theme_minimal()
Expectativa de vida por nivel de ingresos
# Consultar datos desde la tabla life
<- dbGetQuery(con, "
Income SELECT *
FROM life
WHERE Entity='Low-income countries'
OR Entity='Lower-middle-income countries'
OR Entity='Middle-income countries'
OR Entity='Upper-middle-income countries'
OR Entity='High-income countries'
")
# Graficar las expectativas de vida por nivel de ingresos
ggplot(Income, aes(x = Year, y = LifeExpectancy, color = Entity, label = Entity)) +
geom_line() +
geom_point() +
labs(title = "Evolución de la Expectativa de Vida por nivel de ingresos",
x = "Año",
y = "Expectativa de Vida") +
theme_minimal()
Expectativa de vida por nivel de desarrollo
# Consultar datos desde la tabla life
<- dbGetQuery(con, "
Development SELECT *
FROM life
WHERE Entity='Less developed regions'
OR Entity='Less developed regions, excluding China'
OR Entity='Less developed regions, excluding least developed countries'
OR Entity='More developed regions'
OR Entity='Small Island Developing States (SIDS)'
")
# Graficar las expectativas de vida por nivel de ingresos
ggplot(Development, aes(x = Year, y = LifeExpectancy, color = Entity, label = Entity)) +
geom_line() +
geom_point() +
labs(title = "Evolución de la Expectativa de Vida por nivel de desarrollo",
x = "Año",
y = "Expectativa de Vida") +
theme_minimal()
1- Cuál es la relación entre el nivel de ingresos-desarrollo y la expectativa de vida?
A mayor nivel de ingresos o nivel de desarrollo se observa una mayor expectativa de vida.
Paises extremos
Paises extremos son los 3 paises que en promedio tuvieron mayor/menor expectativa de vida cada año.
# Filtrar datos a partir de 1950 hasta 2019
<- life_expectancy %>% filter(Year >= 1950 & Year <= 2019,
data !grepl("develop", Entity, ignore.case = TRUE))
dbWriteTable(con, "data", data)
# Consulta para obtener los 3 países con mayor LifeExpectancy en promedio
<- "
query_top_countries SELECT Entity, AVG(LifeExpectancy) AS AvgLifeExpectancy
FROM data
GROUP BY Entity
ORDER BY AvgLifeExpectancy DESC
LIMIT 3
"
# Consulta para obtener los 3 países con menor LifeExpectancy en promedio
<- "
query_bottom_countries SELECT Entity, AVG(LifeExpectancy) AS AvgLifeExpectancy
FROM data
GROUP BY Entity
ORDER BY AvgLifeExpectancy ASC
LIMIT 3
"
# Ejecutar las consultas y guardar los resultados en dataframes
<- dbGetQuery(con, query_top_countries)
top_countries <- dbGetQuery(con, query_bottom_countries) bottom_countries
# Mostrar los resultados
print("Países con mayor LifeExpectancy en promedio:")
print(top_countries)
print("Países con menor LifeExpectancy en promedio:")
print(bottom_countries)
# Consultar datos desde la tabla life
<- dbGetQuery(con, "SELECT * FROM life WHERE Entity='Monaco' OR Entity='Andorra' OR Entity='San Marino' OR Entity='South Sudan' OR Entity='Mali' OR Entity='Sierra Leone'") Extremos
<- Extremos %>%
extremos filter(Year >= 1950)
# Graficar las expectativas de vida por paises extremos
ggplot(extremos, aes(x = Year, y = LifeExpectancy, color = Entity, label = Entity)) +
geom_line() +
geom_point() +
labs(title = "Evolución de la Expectativa de Vida por paises extremos",
x = "Año",
y = "Expectativa de Vida") +
theme_minimal()
2- Cuáles son los 3 países que tuvieron mayor/menor expectativa de vida promedio?
Los 3 países con mayor expectativa de vida promedio fueron: Iceland, Sweden, Monaco.
Los 3 países con menor expectativa de vida promedio fueron: South Sudan, Mali, Sierra Leone
Expectativa de vida segun edad
A continuación se compara la expectativa de vida al nacer versus la expectativa de vida al tener 80 años.
dbWriteTable(con, "extremos", extremos)
# Realizar el JOIN
<- dbGetQuery(con, "
result_join SELECT LE.*, LDA.LifeExpectancy80
FROM extremos LE
INNER JOIN life_ages LDA
ON LE.Entity = LDA.Entity AND LE.Year = LDA.Year
")
<- dbGetQuery(con, "
result_window SELECT Entity, Year, LifeExpectancy, LifeExpectancy80,
LifeExpectancy80 - LifeExpectancy AS DiffLifeExpectancy
FROM (
SELECT LE.Entity, LE.Year, LE.LifeExpectancy, LDA.LifeExpectancy80
FROM extremos LE
INNER JOIN life_ages LDA
ON LE.Entity = LDA.Entity AND LE.Year = LDA.Year
)
")
# print(result_window)
# Graficar las expectativas de vida srgun edad por paises extremos
ggplot(result_window, aes(x = Year, y = DiffLifeExpectancy, color = Entity, label = Entity)) +
geom_line() +
geom_point() +
labs(title = "Diferencia de la Expectativa de Vida segun edad por paises extremos",
x = "Año",
y = "Expectativa de Vida") +
theme_minimal()
Mejor performance
Cual fue el pais que tuvo mejor evolución de su expectativa de vida en un año?
Common Table Expression (CTE) - RankedLifeExpectancy se obtienen los siguientes datos de data:
Mediante la funcion de ventana LAG() se obtiene PrevYearLifeExpectancy, particionando los datos por Entity.
La diferencia entre el año actual y el anterior es ChangeInLifeExpectancy.
Consulta principal: Selecciona el MaxIncreaseInLifeExpectancy de RankedLifeExpectancy.
Ejecución y resultado: Se obtien un ranking de los paises con mayor crecimiento de expectativa de vida en su año record.
<- dbGetQuery(con, "
best_year WITH RankedLifeExpectancy AS (
SELECT
Entity,
Year,
LifeExpectancy,
LAG(LifeExpectancy) OVER (PARTITION BY Entity ORDER BY Year) AS PrevYearLifeExpectancy,
LifeExpectancy - LAG(LifeExpectancy) OVER (PARTITION BY Entity ORDER BY Year) AS ChangeInLifeExpectancy
FROM
data
)
SELECT
Entity,
Year as BestYear,
MAX(ChangeInLifeExpectancy) AS MaxIncrease
FROM
RankedLifeExpectancy
GROUP BY
Entity
ORDER BY
MaxIncrease DESC
LIMIT 10;
")
print(best_year)
Entity BestYear MaxIncrease
1 Rwanda 1995 25.8707
2 Lebanon 1977 25.5465
3 South Sudan 1999 24.8376
4 Bangladesh 1972 23.5946
5 Somalia 1993 23.3369
6 Palestine 1974 23.2408
7 Cambodia 1977 16.8974
8 Bosnia and Herzegovina 1994 15.6905
9 Haiti 2011 15.6042
10 Cyprus 1975 15.2879
Conclusión
En general los países de Europa y Oceanía son más longevos y los países de Africa son menos longevos. La longevidad de todos los continentes tienden a converger, a excepción de Africa que se mantiene relegado.
La expectativa de vida tiende aumentar en forma proporcional al nivel de ingresos y al nivel de desarrollo.
En niveles extremos la brecha de longevidad tiende a reducirse, alcanzando hasta 40 años de diferencia en 1950, reduciéndose hasta 30 años para 2020. Esta reducción en la brecha parece estar relacionada con un aumento de la expectativa de vida al nacer de los países más relegados.