#install.packages("gapminder")
library(gapminder)
PRIA práctica 3: Introducción al data Wrangling y visualización con R
Data Wrangling
El data wrangling es un término ampliamente utilizado en la ciencia de datos para describir el proceso de preparación de datos crudos (raw) para su análisis. Este proceso implica varias acciones claves:
- Recopilar: Implica reunir datos de diversas fuentes y formatos.
- Integrar: Conlleva combinar datos de diferentes fuentes para obtener una vista unificada.
- Limpiar: Se refiere a encontrar y corregir errores o inconsistencias en los datos para asegurar su calidad.
- Transformar: Consiste en cambiar la estructura de los datos para facilitar su manipulación o análisis.
- Enriquecer: Se añade información adicional a los datos para aumentar su utilidad o precisión.
- Filtrar: Incluye eliminar datos irrelevantes o redundantes para enfocarse en la información más valiosa.
- Agilizar: Se busca mejorar la accesibilidad y eficiencia de los datos para el análisis.
El objetivo del data wrangling es transformar datos desorganizados o en bruto en un conjunto estructurado y limpio, listo para ser analizado y utilizado en la toma de decisiones basada en datos.
Como científico de datos, enfrentarás el desafío de convertir conjuntos de datos complejos y a menudo no estructurados en insights útiles. Estos insights son cruciales para las decisiones de negocio, y preparar los datos adecuadamente es un paso que no se debe subestimar.
Data Wrangling with dplyr and tidyr Cheat Sheet
1. El dataset Gapminder
- 1 Instala y carga la librería
gapminder
.
1.2 Usa la función help
para entender los datos. Explóralo con glimpse
, como alternativa a str
. Compara ambas salidas. ¿Cuál prefieres? Razona tu respuesta
?gapminder
str(gapminder)
glimpse(gapminder)
Con glimpse la salida es algo más tidy, mostrando prácticamente la misma información
2. Verbos dplyr
2.1 Usa filter
para filtrar por el año 1952 y guarda el resultado en la variable gm_1952.
<- gapminder %>%
gm_1952 filter(year == 1952)
2.2 Filtra por país (China) y por año (2002) y guarda el resultado en la variable china_2002
<- gapminder %>%
china_2002 filter(year == 2002 & country == "China")
2.3 Ordena por lifExp en ambos sentidos. Localiza el año más reciente con datos y filtra por éste. ¿Qué países son los extremos?
%>%
gapminder arrange(lifeExp)
# A tibble: 1,704 × 6
country continent year lifeExp pop gdpPercap
<fct> <fct> <int> <dbl> <int> <dbl>
1 Rwanda Africa 1992 23.6 7290203 737.
2 Afghanistan Asia 1952 28.8 8425333 779.
3 Gambia Africa 1952 30 284320 485.
4 Angola Africa 1952 30.0 4232095 3521.
5 Sierra Leone Africa 1952 30.3 2143249 880.
6 Afghanistan Asia 1957 30.3 9240934 821.
7 Cambodia Asia 1977 31.2 6978607 525.
8 Mozambique Africa 1952 31.3 6446316 469.
9 Sierra Leone Africa 1957 31.6 2295678 1004.
10 Burkina Faso Africa 1952 32.0 4469979 543.
# ℹ 1,694 more rows
%>%
gapminder arrange(desc(lifeExp))
# A tibble: 1,704 × 6
country continent year lifeExp pop gdpPercap
<fct> <fct> <int> <dbl> <int> <dbl>
1 Japan Asia 2007 82.6 127467972 31656.
2 Hong Kong, China Asia 2007 82.2 6980412 39725.
3 Japan Asia 2002 82 127065841 28605.
4 Iceland Europe 2007 81.8 301931 36181.
5 Switzerland Europe 2007 81.7 7554661 37506.
6 Hong Kong, China Asia 2002 81.5 6762476 30209.
7 Australia Oceania 2007 81.2 20434176 34435.
8 Spain Europe 2007 80.9 40448191 28821.
9 Sweden Europe 2007 80.9 9031088 33860.
10 Israel Asia 2007 80.7 6426679 25523.
# ℹ 1,694 more rows
%>%
gapminder filter(year == max(gapminder$year)) %>%
arrange(lifeExp) %>%
head(1)
# A tibble: 1 × 6
country continent year lifeExp pop gdpPercap
<fct> <fct> <int> <dbl> <int> <dbl>
1 Swaziland Africa 2007 39.6 1133066 4513.
%>%
gapminder filter(year == max(gapminder$year)) %>%
arrange(desc(lifeExp)) %>%
head(1)
# A tibble: 1 × 6
country continent year lifeExp pop gdpPercap
<fct> <fct> <int> <dbl> <int> <dbl>
1 Japan Asia 2007 82.6 127467972 31656.
2.4 Crea una nueva columna popM, con la población en millones de habitantes.
%>%
gapminder mutate(popM = pop*10**(-6))
# A tibble: 1,704 × 7
country continent year lifeExp pop gdpPercap popM
<fct> <fct> <int> <dbl> <int> <dbl> <dbl>
1 Afghanistan Asia 1952 28.8 8425333 779. 8.43
2 Afghanistan Asia 1957 30.3 9240934 821. 9.24
3 Afghanistan Asia 1962 32.0 10267083 853. 10.3
4 Afghanistan Asia 1967 34.0 11537966 836. 11.5
5 Afghanistan Asia 1972 36.1 13079460 740. 13.1
6 Afghanistan Asia 1977 38.4 14880372 786. 14.9
7 Afghanistan Asia 1982 39.9 12881816 978. 12.9
8 Afghanistan Asia 1987 40.8 13867957 852. 13.9
9 Afghanistan Asia 1992 41.7 16317921 649. 16.3
10 Afghanistan Asia 1997 41.8 22227415 635. 22.2
# ℹ 1,694 more rows
2.5 Extrae los 10 países con mayor población, expresados en millones de habitantes en el año 2007. Filtra por esos 10 países y extrae la población de los mismos en 1957.
<- gapminder %>%
paises filter(year == 2007) %>%
arrange(desc(pop)) %>%
head(10) %>%
select(country) %>%
pull()
%>%
gapminder filter(year == 1957,
%in% paises) %>% # country %in% gapminder_2007$country
country mutate(popM = pop*10**(-6)) %>%
select(country, popM) %>%
arrange(desc(popM))
# A tibble: 10 × 2
country popM
<fct> <dbl>
1 China 637.
2 India 409
3 United States 172.
4 Japan 91.6
5 Indonesia 90.1
6 Brazil 65.6
7 Bangladesh 51.4
8 Pakistan 46.7
9 Nigeria 37.2
10 Mexico 35.0
Solución alternativa con 2 dataframes, usando “join”. Función pull
, útil, pero no imprescindible.
2.6 Encuentra el promedio de esperanza de vida (lifeExp) para cada continente y resúmelo en una tabla.
%>%
gapminder group_by(continent) %>%
summarise(lifeExp = mean(lifeExp))
# A tibble: 5 × 2
continent lifeExp
<fct> <dbl>
1 Africa 48.9
2 Americas 64.7
3 Asia 60.1
4 Europe 71.9
5 Oceania 74.3
2.7 Añade una columna llamada gdpPercapLog que sea el logaritmo de gdpPercap, luego organiza los datos por esta nueva columna de forma descendente.
%>%
gapminder mutate(gdpPercapLog = log(gdpPercap)) %>%
arrange(desc(gdpPercapLog))
# A tibble: 1,704 × 7
country continent year lifeExp pop gdpPercap gdpPercapLog
<fct> <fct> <int> <dbl> <int> <dbl> <dbl>
1 Kuwait Asia 1957 58.0 212846 113523. 11.6
2 Kuwait Asia 1972 67.7 841934 109348. 11.6
3 Kuwait Asia 1952 55.6 160000 108382. 11.6
4 Kuwait Asia 1962 60.5 358266 95458. 11.5
5 Kuwait Asia 1967 64.6 575003 80895. 11.3
6 Kuwait Asia 1977 69.3 1140357 59265. 11.0
7 Norway Europe 2007 80.2 4627926 49357. 10.8
8 Kuwait Asia 2007 77.6 2505559 47307. 10.8
9 Singapore Asia 2007 80.0 4553009 47143. 10.8
10 Norway Europe 2002 79.0 4535591 44684. 10.7
# ℹ 1,694 more rows
2.8 Filtra los países donde la expectativa de vida lifeExp es mayor que 80 años.
%>%
gapminder filter(lifeExp > 80) %>%
select(country) %>%
distinct()
# A tibble: 13 × 1
country
<fct>
1 Australia
2 Canada
3 France
4 Hong Kong, China
5 Iceland
6 Israel
7 Italy
8 Japan
9 New Zealand
10 Norway
11 Spain
12 Sweden
13 Switzerland
2.9 Calcula la suma del PIB (gdpPercap * pop) para cada país y año, agrupando por país y año.
%>%
gapminder mutate(PIB = (gdpPercap * pop)/1000000)
# A tibble: 1,704 × 7
country continent year lifeExp pop gdpPercap PIB
<fct> <fct> <int> <dbl> <int> <dbl> <dbl>
1 Afghanistan Asia 1952 28.8 8425333 779. 6567.
2 Afghanistan Asia 1957 30.3 9240934 821. 7585.
3 Afghanistan Asia 1962 32.0 10267083 853. 8759.
4 Afghanistan Asia 1967 34.0 11537966 836. 9648.
5 Afghanistan Asia 1972 36.1 13079460 740. 9679.
6 Afghanistan Asia 1977 38.4 14880372 786. 11698.
7 Afghanistan Asia 1982 39.9 12881816 978. 12599.
8 Afghanistan Asia 1987 40.8 13867957 852. 11821.
9 Afghanistan Asia 1992 41.7 16317921 649. 10596.
10 Afghanistan Asia 1997 41.8 22227415 635. 14122.
# ℹ 1,694 more rows
%>%
gapminder mutate(PIB = (gdpPercap * pop)/1000000) %>%
group_by(country, year) %>%
summarise(PIBa = sum(PIB))
`summarise()` has grouped output by 'country'. You can override using the
`.groups` argument.
# A tibble: 1,704 × 3
# Groups: country [142]
country year PIBa
<fct> <int> <dbl>
1 Afghanistan 1952 6567.
2 Afghanistan 1957 7585.
3 Afghanistan 1962 8759.
4 Afghanistan 1967 9648.
5 Afghanistan 1972 9679.
6 Afghanistan 1977 11698.
7 Afghanistan 1982 12599.
8 Afghanistan 1987 11821.
9 Afghanistan 1992 10596.
10 Afghanistan 1997 14122.
# ℹ 1,694 more rows
2.10 Crea una nueva columna que clasifique a los países en ‘Alto PIB per cápita’ si gdpPercap es mayor que 10000, y ‘Bajo PIB per cápita’ en caso contrario.
%>%
gapminder mutate(tipo_pib =
case_when(gdpPercap > 10000 ~ "Alto PIB per cápita",
TRUE ~ "Bajo PIB per cápita" )
)
# A tibble: 1,704 × 7
country continent year lifeExp pop gdpPercap tipo_pib
<fct> <fct> <int> <dbl> <int> <dbl> <chr>
1 Afghanistan Asia 1952 28.8 8425333 779. Bajo PIB per cápita
2 Afghanistan Asia 1957 30.3 9240934 821. Bajo PIB per cápita
3 Afghanistan Asia 1962 32.0 10267083 853. Bajo PIB per cápita
4 Afghanistan Asia 1967 34.0 11537966 836. Bajo PIB per cápita
5 Afghanistan Asia 1972 36.1 13079460 740. Bajo PIB per cápita
6 Afghanistan Asia 1977 38.4 14880372 786. Bajo PIB per cápita
7 Afghanistan Asia 1982 39.9 12881816 978. Bajo PIB per cápita
8 Afghanistan Asia 1987 40.8 13867957 852. Bajo PIB per cápita
9 Afghanistan Asia 1992 41.7 16317921 649. Bajo PIB per cápita
10 Afghanistan Asia 1997 41.8 22227415 635. Bajo PIB per cápita
# ℹ 1,694 more rows
%>%
gapminder mutate(tipo_pib =
if_else(gdpPercap > 10000,
"Alto PIB per cápita",
"Bajo PIB per cápita" ))
# A tibble: 1,704 × 7
country continent year lifeExp pop gdpPercap tipo_pib
<fct> <fct> <int> <dbl> <int> <dbl> <chr>
1 Afghanistan Asia 1952 28.8 8425333 779. Bajo PIB per cápita
2 Afghanistan Asia 1957 30.3 9240934 821. Bajo PIB per cápita
3 Afghanistan Asia 1962 32.0 10267083 853. Bajo PIB per cápita
4 Afghanistan Asia 1967 34.0 11537966 836. Bajo PIB per cápita
5 Afghanistan Asia 1972 36.1 13079460 740. Bajo PIB per cápita
6 Afghanistan Asia 1977 38.4 14880372 786. Bajo PIB per cápita
7 Afghanistan Asia 1982 39.9 12881816 978. Bajo PIB per cápita
8 Afghanistan Asia 1987 40.8 13867957 852. Bajo PIB per cápita
9 Afghanistan Asia 1992 41.7 16317921 649. Bajo PIB per cápita
10 Afghanistan Asia 1997 41.8 22227415 635. Bajo PIB per cápita
# ℹ 1,694 more rows
2.11 Utiliza mutate_if para transformar todas las columnas numéricas aplicando el logaritmo natural, pero sólo si todas las entradas en esa columna son positivas.
%>%
gapminder select(lifeExp, pop, gdpPercap) %>%
mutate_if(~all(. > 0), log)
# A tibble: 1,704 × 3
lifeExp pop gdpPercap
<dbl> <dbl> <dbl>
1 3.36 15.9 6.66
2 3.41 16.0 6.71
3 3.47 16.1 6.75
4 3.53 16.3 6.73
5 3.59 16.4 6.61
6 3.65 16.5 6.67
7 3.69 16.4 6.89
8 3.71 16.4 6.75
9 3.73 16.6 6.48
10 3.73 16.9 6.45
# ℹ 1,694 more rows
%>%
gapminder select(lifeExp, pop, gdpPercap) %>%
mutate(across(where(~all(. > 0)), log))
# A tibble: 1,704 × 3
lifeExp pop gdpPercap
<dbl> <dbl> <dbl>
1 3.36 15.9 6.66
2 3.41 16.0 6.71
3 3.47 16.1 6.75
4 3.53 16.3 6.73
5 3.59 16.4 6.61
6 3.65 16.5 6.67
7 3.69 16.4 6.89
8 3.71 16.4 6.75
9 3.73 16.6 6.48
10 3.73 16.9 6.45
# ℹ 1,694 more rows
<- function(x) { all(x > 0) }
all_positive %>%
gapminder select(lifeExp, pop, gdpPercap) %>%
mutate(across(where(all_positive), log))
# A tibble: 1,704 × 3
lifeExp pop gdpPercap
<dbl> <dbl> <dbl>
1 3.36 15.9 6.66
2 3.41 16.0 6.71
3 3.47 16.1 6.75
4 3.53 16.3 6.73
5 3.59 16.4 6.61
6 3.65 16.5 6.67
7 3.69 16.4 6.89
8 3.71 16.4 6.75
9 3.73 16.6 6.48
10 3.73 16.9 6.45
# ℹ 1,694 more rows
2.12 Para cada continente, encuentra el país con la mayor población (pop) cada año.
%>%
gapminder group_by(continent, year) %>%
filter(pop == max(pop)) %>%
select(continent, country, year)
# A tibble: 60 × 3
# Groups: continent, year [60]
continent country year
<fct> <fct> <int>
1 Oceania Australia 1952
2 Oceania Australia 1957
3 Oceania Australia 1962
4 Oceania Australia 1967
5 Oceania Australia 1972
6 Oceania Australia 1977
7 Oceania Australia 1982
8 Oceania Australia 1987
9 Oceania Australia 1992
10 Oceania Australia 1997
# ℹ 50 more rows
2.13 Obten el mínimo, el máximo y la media de la esperanza de vida (lifeExp) y el PIB per cápita (gdpPercap) por continente.
%>%
gapminder group_by(continent) %>%
summarize(min_lifeExp = min(lifeExp),
max_lifeExp = max(lifeExp),
mean_lifeExp = mean(lifeExp),
min_gdpPercap = min(gdpPercap),
max_gdpPercap = max(gdpPercap),
mean_gdpPercap = mean(gdpPercap))
# A tibble: 5 × 7
continent min_lifeExp max_lifeExp mean_lifeExp min_gdpPercap max_gdpPercap
<fct> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Africa 23.6 76.4 48.9 241. 21951.
2 Americas 37.6 80.7 64.7 1202. 42952.
3 Asia 28.8 82.6 60.1 331 113523.
4 Europe 43.6 81.8 71.9 974. 49357.
5 Oceania 69.1 81.2 74.3 10040. 34435.
# ℹ 1 more variable: mean_gdpPercap <dbl>
Visualización con ggplot 2
Gramática de los Gráficos con ggplot2
https://rstudio.github.io/cheatsheets/data-visualization.pdf
Componentes básicos
- Datos: El conjunto de datos que queremos visualizar.
- Aesthetics (Aes): Define las variables a utilizar y cómo se mapean a aspectos visuales como ejes, color, tamaño, etc.
- Geometrías (Geom): Las formas gráficas que representan los datos (puntos, líneas, barras).
- Escala: Controla cómo se mapean los datos a los aesthetics (por ejemplo, qué rango de colores usar, leyendas, etiquetas).
- Coordenadas: El sistema de coordenadas (Cartesiano, polar, etc.).
- Facetas: Para crear gráficos con múltiples paneles.
- Temas: Controla la apariencia no relacionada con los datos del gráfico (colores de fondo, tipos de letra, etc.).
Taller la gramática de los gráficos (Samuel Calderon)
library(ggplot2)
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = cty, color = class)) +
facet_wrap(~ cyl)
ggplot(data = df, aes(x = var1, y = var2)) +
geom_point(aes(color = factor1)) +
labs(
title = "Título del Gráfico",
subtitle = "Subtítulo del Gráfico",
caption = "Fuente de los Datos",
x = "Etiqueta del Eje X",
y = "Etiqueta del Eje Y",
color = "Leyenda de Factor1"
)
3.1 Usando la variable gm_1952, crea un diagrama de dispersión donde se represente la renta per cápita en función de la población. Ahora la esperanza de vida en función de la población.
%>%
gm_1952 ggplot(aes(x = pop, y = gdpPercap)) +
geom_point()
%>%
gm_1952 ggplot(aes(x = pop, y = lifeExp)) +
geom_point()
3.2 Aplica a las gráficas anteriores un escalado logarítmico (log10) en el eje x e y
%>%
gm_1952 ggplot(aes(x = pop, y = gdpPercap)) +
geom_point() +
scale_x_log10() +
scale_y_log10()
%>%
gm_1952 ggplot(aes(x = pop, y = lifeExp)) +
geom_point() +
scale_x_log10() +
scale_y_log10()
3.3 Realiza un diagrama de dispersión de la esperanza de vida en función de la población, pero mapea la variable continent por color. Usa escalado para el eje x
%>%
gm_1952 ggplot(aes(x = pop, y = lifeExp, color = continent)) +
geom_point() +
scale_x_log10()
3.4 Repite la representación anterior pero añade el mapeo de la renta per cápita por tamaño del punto
%>%
gm_1952 ggplot(aes(x = pop, y = lifeExp, size = gdpPercap, color = continent)) +
geom_point() +
scale_x_log10()
3.5 Ahora, en lugar de mapear por continente, utiliza contienente como variable “faceta” y genera 5 gráficas en un lienzo con la esperanza de vida en función de la población en 1952.
%>%
gm_1952 ggplot(aes(x = pop, y = lifeExp, size = gdpPercap)) +
geom_point() +
scale_x_log10() +
facet_wrap(~ continent)
3.6 Representa la esperanza de vida en función del año, usando facetas (por continente). Utiliza la función de agregación apropiada. Prueba diagramas de dispersión, líneas ó barras.
%>%
gapminder mutate(pop = pop/1000000) %>%
group_by(year, continent) %>%
summarise(lifeExp = median(lifeExp), pop = median(pop)) %>%
ggplot(aes(x = year, y = lifeExp, size = pop)) +
geom_point() +
facet_wrap(~ continent)
`summarise()` has grouped output by 'year'. You can override using the
`.groups` argument.
3.7 Representa la población total en función del año, usando facetas (por continente). Utiliza la función de agregación apropiada.
%>%
gapminder mutate(pop = pop/1000000) %>%
group_by(year, continent) %>%
summarise(pop = sum(pop)) %>%
ggplot(aes(x = year, y = pop)) +
geom_line() +
facet_wrap(~ continent, scales = "free")
`summarise()` has grouped output by 'year'. You can override using the
`.groups` argument.
3.8 Representa en una sola gráfica, sin el uso de facetas, la información de los dos ejercicios anteriores, pero utiliza colores para mapear los continentes.
%>%
gapminder mutate(pop = pop/1000000) %>%
group_by(year, continent) %>%
summarise(lifeExp = median(lifeExp), pop = median(pop)) %>%
ggplot(aes(x = year, y = lifeExp, size = pop, color = continent)) +
geom_point()
`summarise()` has grouped output by 'year'. You can override using the
`.groups` argument.
%>%
gapminder mutate(pop = pop/1000000) %>%
group_by(year, continent) %>%
summarise(pop = sum(pop)) %>%
ggplot(aes(x = year, y = pop, color = continent)) +
geom_line()
`summarise()` has grouped output by 'year'. You can override using the
`.groups` argument.
3.9 Representa la renta per cápita en 2007 mapeando los puntos del diagrama de dispersión por color según el contienente y por tamaño, según la población.
%>%
gapminder filter(year == 2007) %>%
ggplot(aes(x = pop, y = gdpPercap, color = continent, size = pop)) +
geom_point() +
scale_x_log10() +
scale_y_log10()
3.10 Representa la evolución de la renta per cápita año a año entre Japón vs EEUU en una gráfica de líneas.
%>%
gapminder filter(country == "Japan" | country == "EEUU") %>%
ggplot(aes(x = pop, y = gdpPercap, color = continent, size = pop)) +
geom_point() +
scale_x_log10() +
scale_y_log10()
%>%
gapminder filter(country == "United States" | country == "Japan") %>%
ggplot(aes(x = year, y = gdpPercap, color = country)) +
geom_line()
3.11 Representa un diagrama de barras para comparar la renta per cápita en 2007 de europa vs EEUU+Canada.
%>%
gapminder filter(year == 2007) %>%
filter(country %in%
c("Canada", "United States") | continent == "Europe" ) %>%
mutate(continent = if_else(continent == "Europe", "Europa", "EEUU+Canada")) %>%
mutate(PIB = gdpPercap*pop) %>%
group_by(continent) %>%
summarise(PIB = sum(PIB), pop = sum(pop)) %>%
mutate(gdpPercap = PIB/pop) %>%
ggplot(aes(x = continent, y = gdpPercap)) +
geom_col()
3.12 Dibuja un histograma con los datos de la población mundial en 2007 según gapminder.
%>%
gapminder filter(year == 2007) %>%
ggplot(aes(pop)) +
geom_histogram(bins = 39)
3.13 Modifica la gráfica usando escala logarítmica. Prueba realizar diagrama de densidad en lugar de un histograma.
%>%
gapminder filter(year == 2007) %>%
ggplot(aes(pop)) +
geom_histogram(bins = 39) +
scale_x_log10()
3.14 Investiga el paquete esquisse
para crear gráficos sin código, usando los addins de RStudio. No es necesario instalarlo para la actividad, pero anota un enlace al vídeo o documentación que encuentres.
https://www.youtube.com/watch?v=IJRdNxemygw
3.15 Representa el histograma y diagrama de densidad de la esperanza de vida mundial por países en 2007. ¿Es una distribución simétrica?
%>%
gapminder filter(year == 2007) %>%
ggplot(aes(lifeExp)) +
geom_histogram(bins = 39)
%>%
gapminder filter(year == 2007) %>%
ggplot(aes(lifeExp)) +
geom_density()
Realiza el experimento del teorema central del límite utilizando como variable la esperanza de vida en el año 2007 de todos los países que aparecen ese año en gapminder.
Toma muestras de n = 50 para calcular las medias y realiza 1000 réplicas de ese experimento para obtener las medias. Representa gráficamente el histograma y/o density plot. ¿La gráfica de las 1000 medias ahora sigue una distribución simétrica aproximadamente normal?
<- gapminder %>%
gapminder_life_exp select(lifeExp)
<- function(df, n) {
simular_experimento <- sample_n(df, n)
muestra <- colMeans(muestra)
medias return(medias)
}
<- 1000
sims <- 50
n <- replicate(sims, simular_experimento(gapminder_life_exp,n)) resultados
<- data.frame(lifeExp_means = resultados)
gapminder_life_exp_medias %>% head(10) gapminder_life_exp_medias
lifeExp_means
1 57.34528
2 59.56210
3 57.71232
4 58.59676
5 59.38540
6 60.37946
7 58.89262
8 61.26174
9 59.21908
10 57.32392
%>%
gapminder_life_exp_medias ggplot(aes(lifeExp_means)) +
geom_histogram(bins = 39)
%>%
gapminder_life_exp_medias ggplot(aes(lifeExp_means)) +
geom_density()
%>%
gapminder_life_exp_medias ggplot(aes(x = lifeExp_means)) +
geom_histogram(aes(y = after_stat(density)), bins = 39, fill = "blue", color = "black") +
geom_density(color = "red") +
scale_y_continuous(sec.axis = sec_axis(~ . * length(gapminder_life_exp_medias), name = "Probabilidad"))+
theme_bw()