##1. Realice una revisión de los datos nulos, vacíos o si tienen algún otro carácter:
##a) Cargamos la base de datos y cambiamos los valores a NA
data_prac_2 <- read.csv2("data_prac_2 1.csv", header = T, sep = ",", dec = ".", na.strings = c("null", "$$", "&&"), stringsAsFactors = FALSE) 
data_prac_2$X <- NULL ##Eliminamos la variable que estaba por error

##c) Vamos a ver si tenemos datos duplicados
data_prac_2 %>%
  janitor::get_dupes()
## No variable names specified - using all columns.
##   edad      sexo   imc hijos fumador   region      clm dupe_count
## 1   19 masculino 30.59     0      no noroeste 1639.563          2
## 2   19 masculino 30.59     0      no noroeste 1639.563          2
##tuvimos 1 dato duplicado, lo mejor es hacer un ID para cada persona

##d) Vamos a reemplazar los valores no disponibles con las técnicas usadas
  ##i) Reemplazamos los datos faltantes por la media--------------------------------------
    data_prac_2_mean <- data.frame(lapply(data_prac_2,
                                    function(x) ifelse(is.na(x), mean(x, na.rm = TRUE), x)))
    summary(select(data_prac_2_mean, where(is.numeric))) ##Hacemos una tabla resumen de las variables numericas
##       edad            imc            hijos            clm       
##  Min.   :18.00   Min.   :15.96   Min.   :0.000   Min.   : 1122  
##  1st Qu.:27.00   1st Qu.:26.40   1st Qu.:0.000   1st Qu.: 4855  
##  Median :39.23   Median :30.59   Median :1.000   Median : 9674  
##  Mean   :39.23   Mean   :30.62   Mean   :1.095   Mean   :13278  
##  3rd Qu.:51.00   3rd Qu.:34.40   3rd Qu.:2.000   3rd Qu.:16108  
##  Max.   :64.00   Max.   :53.13   Max.   :5.000   Max.   :63770
  ##ii) Reemplazamos los datos faltantes por la mediana-----------------------------------
    data_prac_2_median <- data.frame(lapply(data_prac_2,
                                    function(x) ifelse(is.na(x), median(x, na.rm = TRUE), x)))
    summary(select(data_prac_2_median, where(is.numeric))) ##Hacemos una tabla resumen de las variables numericas
##       edad            imc            hijos            clm       
##  Min.   :18.00   Min.   :15.96   Min.   :0.000   Min.   : 1122  
##  1st Qu.:27.00   1st Qu.:26.40   1st Qu.:0.000   1st Qu.: 4855  
##  Median :39.00   Median :30.30   Median :1.000   Median : 9378  
##  Mean   :39.21   Mean   :30.61   Mean   :1.095   Mean   :13158  
##  3rd Qu.:51.00   3rd Qu.:34.40   3rd Qu.:2.000   3rd Qu.:16108  
##  Max.   :64.00   Max.   :53.13   Max.   :5.000   Max.   :63770
    ##iii) Reemplazamos los datos faltantes por la media recortada------------------------
    data_prac_2_mean_rec <- data.frame(lapply(data_prac_2,
                                function(x) ifelse(is.na(x), mean(x, na.rm = TRUE, trim = .1), x)))
    summary(select(data_prac_2_mean_rec, where(is.numeric))) ##Hacemos una tabla resumen de las variables numericas
##       edad            imc            hijos            clm       
##  Min.   :18.00   Min.   :15.96   Min.   :0.000   Min.   : 1122  
##  1st Qu.:27.00   1st Qu.:26.40   1st Qu.:0.000   1st Qu.: 4855  
##  Median :39.03   Median :30.45   Median :1.000   Median : 9674  
##  Mean   :39.21   Mean   :30.61   Mean   :1.095   Mean   :13210  
##  3rd Qu.:51.00   3rd Qu.:34.40   3rd Qu.:2.000   3rd Qu.:16108  
##  Max.   :64.00   Max.   :53.13   Max.   :5.000   Max.   :63770
    ##iv) Reemplazar datos faltantes por la moda -----------------------------------------
    data_prac_2_mode <- data.frame(lapply(data_prac_2,
                                function(x) ifelse(is.na(x), mfv(x, na_rm = TRUE), x)))
    summary(select(data_prac_2_mode, where(is.numeric))) ##Hacemos una tabla resumen de las variables numericas
##       edad            imc            hijos            clm       
##  Min.   :18.00   Min.   :15.96   Min.   :0.000   Min.   : 1122  
##  1st Qu.:25.00   1st Qu.:26.40   1st Qu.:0.000   1st Qu.: 4439  
##  Median :38.00   Median :30.59   Median :1.000   Median : 8983  
##  Mean   :38.14   Mean   :30.66   Mean   :1.095   Mean   :12921  
##  3rd Qu.:51.00   3rd Qu.:34.40   3rd Qu.:2.000   3rd Qu.:16108  
##  Max.   :64.00   Max.   :53.13   Max.   :5.000   Max.   :63770
    ##v) Ahora vamos a hacer interpolacion------------------------------------------------
    data_prac_2_interpol <- data.frame(lapply(data_prac_2,
                                function(x) ifelse(is.na(x), na.approx(x, na.rm = TRUE), x)))
    summary(select(data_prac_2_interpol, where(is.numeric))) ##Hacemos una tabla resumen de las variables numericas
##       edad            imc            hijos            clm       
##  Min.   :18.00   Min.   :15.96   Min.   :0.000   Min.   : 1122  
##  1st Qu.:27.00   1st Qu.:26.24   1st Qu.:0.000   1st Qu.: 4784  
##  Median :39.00   Median :30.40   Median :1.000   Median : 9410  
##  Mean   :39.27   Mean   :30.62   Mean   :1.095   Mean   :13265  
##  3rd Qu.:51.00   3rd Qu.:34.56   3rd Qu.:2.000   3rd Qu.:16813  
##  Max.   :64.00   Max.   :53.13   Max.   :5.000   Max.   :63770
    ##La técnica que mas se recomienda para el reemplazo de datos faltantes (NA) es la de interpolación, seguida de la media recortada y después la mediana.
##b) Vamos a checar si las variables que tenemos estan en el formato adecuado para trabajar
names(data_prac_2) ##Saber que variables tenemos en la base de datos
## [1] "edad"    "sexo"    "imc"     "hijos"   "fumador" "region"  "clm"
str(data_prac_2) ##saber de que tipo son nuestras variables
## 'data.frame':    1338 obs. of  7 variables:
##  $ edad   : int  19 18 28 33 NA 31 46 37 37 60 ...
##  $ sexo   : chr  "femenino" "masculino" "masculino" "masculino" ...
##  $ imc    : num  27.9 33.8 33 22.7 28.9 ...
##  $ hijos  : int  0 1 3 0 0 0 1 3 2 0 ...
##  $ fumador: chr  "yes" "no" "no" "no" ...
##  $ region : chr  "suroeste" "sureste" "sureste" "noroeste" ...
##  $ clm    : num  16885 1726 4449 21984 3867 ...
##2. Teniendo la base funcional, emplee el data set con reemplazamiento mediante interpolación, para realizar lo siguiente:
  ##(a) Usando ggplot, realice un histograma para analizar las variables numéricas, ¿este sería el tipo de gráfico más significativo para su análisis univariante?.

  ##Vamos a seleccionar solo las variables numericas del data frame
data_prac_2_interpol_hist <- data_prac_2_interpol %>%
  select(edad, imc, clm, hijos) %>%
  pivot_longer(cols = everything(), names_to = "variable", values_to = "valor")

# Graficar histogramas
ggplot(data_prac_2_interpol_hist, aes(x = valor)) +
  geom_histogram(bins = 30, fill = "red", color = "white") +
  facet_wrap(~ variable, scales = "free") +
  labs(title = "Histogramas de Variables Numéricas", x = "Valores", y = "Frecuencia") +
  theme_minimal()

##Facet_wrap sirve para hacer un histograma por cada variable
##Este gráfico si podría ser el mas significativo, ya que nos da la frecuencia de cada una de nuestras variables numericas dentro de la base de datos que se ha utilizado.

  ##(b) Calcule la media de monto de reclamación por sexo.
  clm_por_sexo <- data_prac_2_interpol %>%
  group_by(sexo) %>%
  summarise(media_clm = mean(clm, na.rm = TRUE))%>%
  arrange(desc(media_clm))
  head(clm_por_sexo)
## # A tibble: 2 × 2
##   sexo      media_clm
##   <chr>         <dbl>
## 1 masculino    13998.
## 2 femenino     12517.
  ##(c) Calcule la media de monto de reclamación por fumador y sexo.
  clm_por_sexo_fumador <- data_prac_2_interpol %>%
  group_by(sexo,fumador) %>%
  summarise(media_clm_sex_fum = mean(clm, na.rm = TRUE))%>%
  arrange(desc(media_clm_sex_fum))
## `summarise()` has grouped output by 'sexo'. You can override using the
## `.groups` argument.
  head(clm_por_sexo_fumador)
## # A tibble: 4 × 3
## # Groups:   sexo [2]
##   sexo      fumador media_clm_sex_fum
##   <chr>     <chr>               <dbl>
## 1 masculino yes                32874.
## 2 femenino  yes                29556.
## 3 femenino  no                  8935.
## 4 masculino no                  8193.
  ##(d) Identifique la región con mayor monto promedio de reclamación.
   clm_por_region <- data_prac_2_interpol %>%
  group_by(region) %>%
  summarise(media_clm_por_region = mean(clm, na.rm = TRUE))%>%
  arrange(desc(media_clm_por_region))
  head(clm_por_region)
## # A tibble: 4 × 2
##   region   media_clm_por_region
##   <chr>                   <dbl>
## 1 sureste                14588.
## 2 noreste                13577.
## 3 noroeste               12385.
## 4 suroeste               12354.
  ##El sureste es la region con mayor monto promedio de reclamación, con una cifra de: 14588.32 
  
  ##(e) Cree una columna con la etiqueta ”obesidad”, si el imc es mayor a 30.
  data_prac_2_interpol <- data_prac_2_interpol %>%
  mutate(obesidad = ifelse(imc > 30, "Sí", "No")) ##Utilizamos la funcion mutate para crear la variable obesidad.
  
  ##(f) Identifique el top 10 de personas obesas indicando: edad, sexo, hijos, monto de reclamación y región.
  top_personas_obesas <- data_prac_2_interpol %>%
  filter(obesidad == "Sí") %>%  # Filtrar solo a las personas obesas
  select(edad, sexo, hijos, clm, region) %>%  # Seleccionar las columnas que se nos piden
  arrange(desc(clm))   # Ordenar de mayor a menor por monto de reclamación
  head(top_personas_obesas, 10)  # Nos imprime las 10 primeras personas obesas con mayor monto de reclamacion
##    edad      sexo hijos      clm   region
## 1    54  femenino     0 63770.43  sureste
## 2    45 masculino     0 62592.87  sureste
## 3    52 masculino     3 60021.40 noroeste
## 4    31  femenino     1 58571.07  noreste
## 5    33  femenino     0 55135.40 noroeste
## 6    60 masculino     0 52590.83 suroeste
## 7    28 masculino     1 51194.56 suroeste
## 8    64 masculino     2 49577.66  sureste
## 9    59 masculino     1 48970.25  sureste
## 10   44  femenino     0 48885.14  sureste