En el presente Notebook se empleará la librería ggplot para generar gráficas básicas de la data correspondiente a los personajes de la película Star Wars, donde mediante comandos de la librería dplyr se filtrará la data para mejorar el performance de los objetos visuales.

Es de recordar que la librería tidyverse internamente posee ggplt y dplyr, por ende solo se importará tidyverse.

Importar librería

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

Importar data de Star Wars

starwars <- starwars
#Mostrar data
# view(starwars)

Gratifica utilizando la sintaxis de ggplot con el operador “pipe” %>%

starwars %>%
  ggplot(aes(x= height, y= mass) )+
  geom_point()+
  labs(title = "Comparativa de altura de los personajes de StarWars respecto al peso")
## Warning: Removed 28 rows containing missing values or values outside the scale range
## (`geom_point()`).

Se observa que existen valores Outlier o atípicos, donde estos dificulta el correcto análisis del dataframe, por ende es requerido filtrar la data con el comando pipe, para proveer un mejor visual sin afectar la data original.

Para este caso, nos ayudaremos del comando filter, donde solo se tomarán los personajes que pesan menos de 200Kg,

starwars %>%
  filter(mass < 200) %>%
  ggplot(aes(x=height, y= mass))+
  geom_point()+
  labs(title = "Altura de los personajes StarWars respecto al peso",
       subtitle = "data filtrada")+
  xlab("Altura personajes Star Wars")+
  ylab("Peso personajes Star Wars")

Como se puede observar, al quitar los Outlier o datos atípicos se puede apreciar de mejor forma la correlación entre las dos variables estudiadas.

Segregación pór genero

En este apartado se segrega la data por la valeriana genero o en ingles gender, utilizando el comando color, este parámetro gráfica con diferente color cada uno de los diferentes valores que posee dicha variable.

starwars %>%
  filter(mass < 200) %>%
  ggplot(aes(x= height, y= mass, colour = gender))+
  geom_point()+
  labs(title = "Altura de los personajes StarWars respecto al peso",
       subtitle = "Segregada por genero")+
  xlab("Altura personajes Star Wars")+
  ylab("Peso personajes Star Wars")

En la anterior gráfica existen valores nulos, este problema se va a soluciona con el comando filter(!is.na(gender)) el cual quita los valores nulos

Quitar valores nulos

starwars %>%
  filter(starwars$mass < 200) %>%
  filter(!is.na(gender)) %>%
  ggplot(aes(x=height, y=mass, colour = gender ))+
  geom_point()+
  labs(title = "Altura de los personajes StarWars respecto al peso",
       subtitle = "Segregada por genero")+
  xlab("Altura personajes Star Wars")+
  ylab("Peso personajes Star Wars")

Como se puede apreciar ahora los valores nulos fueron eliminados del objeto visual ayudando con la interpretation de la data

Colocar coles manualmente a los objetos visuales

starwars %>%
  filter(starwars$mass < 200) %>%
  filter(!is.na(gender)) %>%
  ggplot(aes(x=height, y=mass, colour = gender ))+
  geom_point()+
  labs(title = "Altura de los personajes StarWars respecto al peso",
       subtitle = "Segregada por genero")+
  xlab("Altura personajes Star Wars")+
  ylab("Peso personajes Star Wars")+
  scale_color_manual( labels=c("female", "male"),
                      values = c("#5b2c6f", "#FFC300"))

Medianate el comando scale_color_manual se fija manualmente los colores de las etiquetas

Grafica de barras

Crear una tabla pivot de la media de la altura de las especies

starwars %>%
  group_by(species) %>%
  summarise(avg_altura = mean(height, na.rm= TRUE))
## # A tibble: 38 × 2
##    species   avg_altura
##    <chr>          <dbl>
##  1 Aleena           79 
##  2 Besalisk        198 
##  3 Cerean          198 
##  4 Chagrian        196 
##  5 Clawdite        168 
##  6 Droid           131.
##  7 Dug             112 
##  8 Ewok             88 
##  9 Geonosian       183 
## 10 Gungan          209.
## # ℹ 28 more rows

Transformar tabla en objeto visual

starwars %>%
  group_by(species) %>%
  summarise( avg_altura = mean(height, na.rm= TRUE)) %>%
  ggplot(aes(x= species, y = avg_altura))+
  geom_col()

En el anterior gráfica no se puede leer el numero de las especies, se invertiran los ejes.

starwars %>%
  group_by(species) %>%
  summarise( avg_altura = mean(height, na.rm= TRUE)) %>%
  ggplot(aes(y= species, x = avg_altura))+
  geom_col()

El gráfico sigue con valores nulos en las especies, a continuación se eliminaran y ordenaran de mayo a menor

starwars %>%
  filter(!is.na(species)) %>%
  group_by(species) %>%
  summarise( avg_altura = mean(height, na.rm= TRUE)) %>%
  ggplot(aes(x = avg_altura, y= reorder(species, avg_altura)))+
  geom_col()