#Plots

##Variables cualitativas - Categorias

##nominal ##Ordinal

#Variables Cuantitativas

##Continuas ##Discretas

##Clasificacion de las Varaibles

library(dslabs)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(readr)
library(titanic)
library(viridis)
## Cargando paquete requerido: viridisLite
library(viridisLite)
library(RColorBrewer)

library(RColorBrewer)
#datos


titanicPlots <- titanic_train

##Variables Cualitativas Nominales: sex, Embarket

##Variables cuantitativas : Pclass, Age, Parch

# Crear la tabla de frecuencias
tabla_sex <- table(titanicPlots$Sex)

tabla_sex
## 
## female   male 
##    314    577
# Seleccionar una paleta de colores de viridis
colores <- viridis(2)  # Usamos 2 colores de la paleta viridis

# Mejorar el gráfico de barras
barplot(tabla_sex, 
        main = "Distribución de Personas por Sexo en el Titanic",  # Título descriptivo
        ylab = "Frecuencia",           # Etiqueta del eje Y
        xlab = "Sexo",                 # Etiqueta del eje X
        ylim = c(0, 700),              # Límite del eje Y
        col = colores,                 # Colores viridis
        border = colores,              # Color del borde de las barras
        beside = TRUE,                 # Barras separadas
        names.arg = c("Hombres", "Mujeres"), # Etiquetas personalizadas en el eje X
        las = 1                        # Rotación de los valores del eje Y
)


grid(nx=NA, ny=NULL, col="black", lty = "dotted", lwd  =par("lwd") )

##Diagrama Torta (Circular)

# Calcular la tabla de frecuencias para las clases de pasajeros
clase <- table(titanicPlots$Pclass)  # Cambiar 'class' por 'clase' para evitar conflicto



# Calcular los porcentajes
porcentajes_clase <- clase * 100 / sum(clase)


# Definir los colores usando una paleta de colores de RColorBrewer
coloresTorta <- brewer.pal(3, "Accent")

#nombres 

etiquetas <- paste(names(clase), "=", names(clase), ": ", round(porcentajes_clase, 1), "%", sep = "")

# Definir los colores usando una paleta de colores de RColorBrewer
coloresTorta <- brewer.pal(length(clase), "Accent")

# Crear el gráfico de pastel con los colores personalizados y etiquetas
pie(clase, 
    labels = paste("Clase", names(clase)), 
    main = "Distribución de Pasajeros por Clase", 
    col = coloresTorta, 
    border = coloresTorta)

# Añadir una leyenda separada
legend("topright", 
       legend = names(clase), 
       fill = coloresTorta, 
       title = "Clases")

#Histograma

ages <- na.omit(titanicPlots$Age)

# Extender ligeramente los límites para cubrir todo el rango
breaks <- seq(floor(min(ages)), ceiling(max(ages)), by = 1)

# Histograma
hist(ages, 
     breaks = breaks,  # Intervalos de 1 en 1
     probability = TRUE,
     main = "Distribución de Edades de los Pasajeros del Titanic",  # Título del gráfico
     xlab = "Edad",                              # Etiqueta del eje X
     ylab = "Densidad", 
     xlim = c(min(ages), max(ages)),             # Límite del eje X
     col = "lightblue",                          # Color de las barras (opcional)
     border = "black")                           # Borde de las barras (opcional)

# Agregar ticks personalizados en el eje X de 10 de 10
axis(1, at = seq(floor(min(ages)), ceiling(max(ages)), by = 10))  








# Línea de densidad
lines(density(ages), col = "black", lwd = 2)

# Cálculo de la mediana y la media
median_age <- median(ages)
mean_age <- mean(ages)


# Función para calcular la moda
get_mode <- function(x) {
  uniq_x <- unique(x)
  uniq_x[which.max(tabulate(match(x, uniq_x)))]
}

# Calcular la moda
mode_age <- get_mode(ages)


# Añadir líneas verticales para la mediana y la media
abline(v = median_age, col = "blue", lwd = 2, lty = 2)  # Línea de mediana
abline(v = mean_age, col = "red", lwd = 2, lty = 2)    # Línea de media
abline(v = mode_age, col = "green", lwd = 2, lty = 2)    # Línea de moda

# Añadir una leyenda
legend("topright", legend = c("Mediana", "Media","Moda"), col = c("blue", "red", "green"), lty = 2, lwd = 2)

Boxplot

ages <- na.omit(titanicPlots$Age)

# Boxplot sin valores atípicos
boxplot(ages, col="blue", ylab="Tasa de asesinatos", outline=FALSE, main="Boxplot", ylim=c(0,80))

# Calcular los cuartiles y el IQR
Q1 <- quantile(ages, 0.25)
Q3 <- quantile(ages, 0.75)
IQR <- Q3 - Q1

# Definir los límites para valores atípicos
lower_bound <- Q1 - 1.5 * IQR
upper_bound <- Q3 + 1.5 * IQR

# Filtrar los datos excluyendo valores atípicos
ages_no_outliers <- ages[ages >= lower_bound & ages <= upper_bound]
max_age_no_outliers <- max(ages_no_outliers)

# Obtener resumen de los datos
summary_data <- summary(ages)

# Adicionar los puntos al gráfico (media, mediana, Q1, Q3, mínimo, máximo)
points(mean(ages), col="red", pch=21)  # Media
points(as.numeric(summary_data["Median"]), col="green", pch=22)  # Mediana
points(as.numeric(summary_data["1st Qu."]), col="orange", pch=23)  # Primer cuartil
points(as.numeric(summary_data["3rd Qu."]), col="purple", pch=24)  # Tercer cuartil
points(as.numeric(summary_data["Min."]), col="brown", pch=25)  # Mínimo
points(as.numeric(summary_data["Max."]), col="pink", pch=25)  # Máximo

# Agregar texto para la media
text(mean(ages), 33, labels=paste("Media: ", round(mean(ages), 2)), col="red")

# Ajustar la leyenda con los nuevos datos
legend("topright", 
       legend = c("Media", "Mediana", "1er Cuartil", "3er Cuartil", "Mínimo", "Máximo"), 
       col = c("red", "green", "orange", "purple", "brown", "pink"), 
       pch = c(21, 22, 23, 24, 25, 25),
       lty = 1)

Comparación variables cuantitativas y cualitativas

# Variables para el gráfico
x <- titanicPlots$Age
y <- titanicPlots$Fare

# Asegurarnos de que no haya valores NA en las variables que vamos a usar
x <- na.omit(x)
y <- na.omit(titanicPlots$Fare[!is.na(titanicPlots$Age)])

# Crear el gráfico de dispersión
plot(x, y, 
     main = "Edad vs Tarifa Pagada", 
     col = titanicPlots$Pclass,  # Colorear por clase (Pclass)
     pch = 20, 
     xlab = "Edad", 
     ylab = "Tarifa")

# Agregar una leyenda
legend("topright", 
       legend = paste("Clase", unique(titanicPlots$Pclass)), 
       fill = unique(titanicPlots$Pclass), 
       cex = 0.75)

# Crear un boxplot para comparar las edades según el género
boxplot(Age ~ Sex, 
        data = titanicPlots, 
        col = c("lightblue", "pink"),  # Colores para cada grupo
        outline = FALSE, 
        ylim = c(0, 80),  
        main = "Boxplot de Edades según Género",
        names = c('Hombres','Mujeres'))

abline(h = mean(titanicPlots$Age, na.rm = TRUE), col = "blue", lwd = 2)

# Añadir texto para la media
text(x = 1.5,
     y = mean(titanicPlots$Age, na.rm = TRUE) + 3,  # Posicionar un poco más arriba de la media
     labels = paste("Media: ", round(mean(titanicPlots$Age, na.rm = TRUE), 2) ), 
     col = "blue")

# Cargar los datos
titanicData <- titanicPlots

# Eliminar filas con NA en las columnas Age, Fare y Pclass simultáneamente
clean_data <- na.omit(titanicData[ c("Age", "Fare", "Pclass")])

# Definir las variables a usar
variable_x <- clean_data$Age
variable_y <- clean_data$Fare

# Configurar la ventana gráfica
par(mfrow = c(1, 2))

# Gráfico de dispersión 
plot(variable_x, variable_y, 
     main = "Costo vs Edad", 
     col = clean_data$Pclass,  # Colorear por clase
     pch = 20, 
     xlab = "Edad", 
     ylab = "Costo")

# Leyenda 
legend("topright", 
       legend = paste("clase", unique(clean_data$Pclass)), 
       fill = unique(clean_data$Pclass), 
       cex = 0.75)

# Boxplot de Fare por Pclass
boxplot(Fare ~ Pclass, 
        data = clean_data, 
        col = brewer.pal(3, "Set1"),  # Colores para cada clase
        outline = FALSE, 
        ylim = c(0, 300), 
        names = c('Edad','Costo','Clase'),
        xlab = 'Clase',
        ylab='Costo',
        main = "Boxplot de Costo por Clase")

# Añadir una línea horizontal con la media de Fare
abline(h = mean(clean_data$Fare), col = "blue", lwd = 2)

# Añadir el valor de la media en el gráfico del boxplot
text(x = 1.5, 
     y = mean(clean_data$Fare) + 10, 
     labels = paste("Media: ", round(mean(clean_data$Fare), 2)), 
     col = "blue", cex = 0.75)