#-- carga de librerias

library(tidyverse) # incluye ggplot2
library(readxl) # funciones para importar xlsx
library(janitor) # funciones de limpieza
library(patchwork) #combinar gráficos de ggplot
library(ggExtra)
library(ggthemes) # nuevas temas para los plots
library(plotly) #gráficos interactivos # remotes::install_github("plotly/plotly")
library(tibble)
library(skimr) # resumen numerico
library(modeest)
library(ggrepel) # añadir etiquetas a los gráficos
library(RColorBrewer) #paletas de colores
#library(plotly) #graficos interactivos
#library(corrplot)
#library(ggridges)

#--  cargar datos
datos_pinguinos <- read.csv("data/data_penguins_clean.csv")
table(datos_pinguinos$species)

# conjunto datos
class(datos_pinguinos) 
datos_pinguinos

# transfomar a tibble
datos_pinguinos <- as_tibble(datos_pinguinos)

datos_pinguinos |> 
  print(n = 25)


# Transformación factor
datos_pinguinos$species <- as.factor(datos_pinguinos$species)
datos_pinguinos$island <- as.factor(datos_pinguinos$island)
datos_pinguinos$sex <- as.factor(datos_pinguinos$sex)

# mostrar niveles de una variable categorica (ctrl + shift + c)
levels(datos_pinguinos$species)

datos_pinguinos |>
  glimpse()

# --------------------------------------------
# Variable tipo categórica
# species, island, sex
# Gráficos de barras

levels(datos_pinguinos$species)

# grafico de columnas
datos_pinguinos |> 
  ggplot(aes(x=species)) +
  geom_bar()

# grafico de barras , giro , opcion 1
datos_pinguinos |> 
  ggplot(aes(x=species)) +
  geom_bar() +
  coord_flip()

# grafico de barras , giro , opcion 2
datos_pinguinos |> 
  ggplot(aes(y=species)) +
  geom_bar() 

# tabla de contingencia 
table(datos_pinguinos$species)
# n=333


# grafico de columnas con datos
datos_pinguinos |> 
  ggplot(aes(x=species)) +
  geom_bar() +
  geom_text(
    aes(label = after_stat(count)),
    stat = "count", 
    vjust = -0.50
  )

# grafico de columnas con datos
# colores de los datos
datos_pinguinos |> 
  ggplot(aes(x=species)) +
  geom_bar() +
  geom_text(
    aes(label = after_stat(count)),
    stat = "count", 
    vjust = 2.0,
    colour = "#ffffff"
  )

# grafico de columnas con datos
# color de relleno 
datos_pinguinos |> 
  ggplot(aes(x=species)) +
  geom_bar(
    fill = "#a62749"
  ) +
  geom_text(
    aes(label = after_stat(count)),
    stat = "count", 
    vjust = 2.0,
    colour = "#ffffff"
  )


# grafico de columnas con datos
# color de relleno con variable categórica
datos_pinguinos |> 
  ggplot(aes(x=species)) +
  geom_bar(
    aes(fill = species)
  ) +
  geom_text(
    aes(label = after_stat(count)),
    stat = "count", 
    vjust = 2.0,
    colour = "#ffffff"
  ) +
  theme(legend.position = "bottom") +  #"none" +
  labs(fill = "")


# Ordenar columnas por variable categorica
datos_pinguinos |> 
  ggplot(aes(x= fct_infreq(species))) +
  geom_bar(
    aes(fill = species)
  ) +
  geom_text( 
    aes(label = after_stat(count)),
    stat = "count", 
    vjust = 2.0,
    colour = "#ffffff"
  ) +
  theme(legend.position = "bottom") +  #"none" +
  labs(fill = "")

# --------------------------------
# Ordenar personalizado

levels(datos_pinguinos$species)
# "Adelie"    "Chinstrap" "Gentoo"  # default
# "Adelie"    "Gentoo" "Chinstrap"  # orden por valor
# "Gentoo"  "Adelie" Chinstrap"     # orden personalizado
orden_danny <- c("Gentoo","Adelie","Chinstrap")

#reordenamiento por levels
datos_pinguinos$species <- factor(datos_pinguinos$species,
                                  levels = orden_danny)

levels(datos_pinguinos$species)

datos_pinguinos |> 
  ggplot(aes(x= species)) +
  geom_bar(
    aes(fill = species)
  ) +
  geom_text( 
    aes(label = after_stat(count)),
    stat = "count", 
    vjust = 2.0,
    colour = "#ffffff"
  ) +
  theme(legend.position = "bottom") +  #"none" +
  labs(fill = "")


# Barras apiladas
# Graficos de columnas - Dos datos categoricos
# sex, island
# Nueva categoria en el gráfico = fill, facetas
datos_pinguinos |> 
ggplot(aes(x= species)) +
  geom_bar(
    aes(fill = sex)
  ) 

# tabla contingencia
table(datos_pinguinos$species, datos_pinguinos$sex)

# Ejemplo de fill 2
# datos_pinguinos |> 
#   ggplot(aes(x= species, fill = species)) +
#   geom_bar() 


datos_pinguinos |> 
  ggplot(aes(x= sex)) +
  geom_bar(
    aes(fill = species)
  ) 

# tabla de contingencia
table(datos_pinguinos$sex, datos_pinguinos$species)

# Barras apiladas (plot stack) con datos
datos_pinguinos |> 
  ggplot(aes(x= species, fill = sex)) +
  geom_bar() +
  geom_text(
    aes(label =after_stat(count)
    ),
    stat = "count", 
    position = position_stack(0.5,0)
  )

# Barras no apiladas o agrupadas
datos_pinguinos |> 
  ggplot(aes(x= species, fill = sex)) +
  geom_bar(position = "dodge")
  
# Ejemplo 2
datos_pinguinos |> 
  ggplot(aes(x= species, fill = island)) +
  geom_bar(position = "dodge")

# tabla contengencia 
table(datos_pinguinos$species, datos_pinguinos$island)


# Graficos barras , girar gráfico
datos_pinguinos |> 
  ggplot(aes(y = species, fill = sex)) +
  geom_bar(position = "dodge")



# Modificar colores de relleno 
datos_pinguinos |> 
  ggplot(aes(x=species)) +
  geom_bar(
    fill = "#a62749"
  )

colores <- c("#F2CB05","#F2B138","#F25C05")

datos_pinguinos |> 
  ggplot(aes(x=species)) +
  geom_bar(
    fill = colores
  )

# enfasis 
colores <- c("#8e8482","#8e8482","#F25C05")

datos_pinguinos |> 
  ggplot(aes(x=species)) +
  geom_bar(
    fill = colores
  )


# Tarea 1 (profesor)
#  Modificar colores en barras apiladas
# 1. Crear vector de colores
color_01 <- c("#F2B138","#F25C05")

# 2. añadir funcion scale_fill_manual 
# y los valores del vector color_01
datos_pinguinos |> 
  ggplot(aes(y = species, fill=sex)) +
  geom_bar(position = "dodge") +
  scale_fill_manual(values = color_01)



# Tarea 2 (profesor)
# Tarea desviación estandar 
# error de barra
datos_pinguinos |> 
  ggplot(aes(x=species)) +
  geom_bar()

# Se necesita una variable cuantitativa body_mass_g
# para calcular la desviacion estandar y la media 
# que permite generar el error bar
datos_pinguinos |> 
ggplot(aes(species, body_mass_g))+
  stat_summary(geom = "bar", 
               fill="salmon")+
  stat_summary(geom = "errorbar")


# opcion 2 error barra
# calcular la media y el error estándar de una variable cuantitativa (masa corporal)
penguins_summary <- datos_pinguinos %>%
  group_by(species) %>%
  summarise(mean_mass = mean(body_mass_g),
            se_mass = sd(body_mass_g) / sqrt(n()))

# Mostrar datos
# penguins_summary |> 
#   head()

#gráfico de barras con error
ggplot(penguins_summary, 
       aes(x = species, 
           y = mean_mass, 
           ymin = mean_mass - se_mass, 
           ymax = mean_mass + se_mass)) +
  geom_bar(stat = "identity", 
           width = 0.7, 
           fill = "salmon") +
  geom_errorbar(width = 0.4, color = "black") +
  labs(x = "Species", y = "MediaBody Mass (g)",
       title = "Gráfico de barras con barra de error") 


# -----------------------------------
# Facetas
datos_pinguinos |> 
  ggplot(aes(x= species, fill = sex)) +
  geom_bar() +
  facet_grid(.~island)
  

datos_pinguinos |> 
  ggplot(aes(x= species, fill = sex)) +
  geom_bar() +
  facet_grid(island~.)


datos_pinguinos |> 
  glimpse()

table(datos_pinguinos$island)

# filtros 
# & (and)
# | (or)

# ejemplo con and
datos_pinguinos |> 
  filter(flipper_lenght > 200 & body_mass_g >3000 & island =="Biscoe") |> 
  ggplot(aes(x=species)) +
  geom_bar(
    aes(fill = sex)
  )

# ejemplo con or
datos_pinguinos |> 
  filter(flipper_lenght > 200 | body_mass_g >3000) |> 
  ggplot(aes(x=species)) +
  geom_bar(
    aes(fill = sex)
  )

