#------------------------------------------------------------------------
# 1. Realice una revisión de los datos nulos, vacíos o si tienen algún otro 
#carácter:
#------------------------------------------------------------------------


#(a) En caso de presentar valores diferentes a tipo numérico, reemplace con NA.
datos_originales<-read.csv(file="C:/Users/wars_/Downloads/data_prac_2 1.csv",header=TRUE,sep=",",dec=",")
datos<-datos_originales%>%
 replace_with_na_all(condition = ~.x %in% c("","$$","null","$$"," "))

View(datos)
#(b) Verifique que las variables tengan el formato adeacuado para trabajar.  
str(datos)
## tibble [1,338 × 8] (S3: tbl_df/tbl/data.frame)
##  $ edad   : chr [1:1338] "19" "18" "28" "33" ...
##  $ sexo   : chr [1:1338] "femenino" "masculino" "masculino" "masculino" ...
##  $ imc    : chr [1:1338] "27.9" "33.77" "33" "22.705" ...
##  $ hijos  : int [1:1338] 0 1 3 0 0 0 1 3 2 0 ...
##  $ fumador: chr [1:1338] "yes" "no" "no" "no" ...
##  $ region : chr [1:1338] "suroeste" "sureste" "sureste" "noroeste" ...
##  $ clm    : chr [1:1338] "16884.924" "1725.5523" "4449.462" "21984.47061" ...
##  $ X      : int [1:1338] NA NA NA NA NA NA NA NA NA NA ...
datos[,1]<-lapply(datos[,1],as.numeric)
## Warning in lapply(datos[, 1], as.numeric): NAs introducidos por coerción
datos[,3:4]<-lapply(datos[,3:4],as.numeric)
## Warning in lapply(datos[, 3:4], as.numeric): NAs introducidos por coerción
datos[,7]<-lapply(datos[,7],as.double)
## Warning in lapply(datos[, 7], as.double): NAs introducidos por coerción
datos[,2]<-lapply(datos[,2],as.factor)
datos[,5:6]<-lapply(datos[,5:6],as.factor)

lapply(datos,class) #Saber cuáles son numéricas y cuáles son categóricas
## $edad
## [1] "numeric"
## 
## $sexo
## [1] "factor"
## 
## $imc
## [1] "numeric"
## 
## $hijos
## [1] "numeric"
## 
## $fumador
## [1] "factor"
## 
## $region
## [1] "factor"
## 
## $clm
## [1] "numeric"
## 
## $X
## [1] "integer"
summary(datos)
##       edad              sexo          imc            hijos       fumador   
##  Min.   :18.00   femenino :662   Min.   :15.96   Min.   :0.000   no :1064  
##  1st Qu.:27.00   masculino:676   1st Qu.:26.22   1st Qu.:0.000   yes: 274  
##  Median :39.00                   Median :30.30   Median :1.000             
##  Mean   :39.23                   Mean   :30.62   Mean   :1.095             
##  3rd Qu.:51.00                   3rd Qu.:34.59   3rd Qu.:2.000             
##  Max.   :64.00                   Max.   :53.13   Max.   :5.000             
##  NA's   :72                      NA's   :39                                
##       region         clm              X         
##  noreste :324   Min.   : 1122   Min.   : 1.000  
##  noroeste:325   1st Qu.: 4747   1st Qu.: 3.000  
##  sureste :364   Median : 9378   Median : 6.000  
##  suroeste:325   Mean   :13278   Mean   : 5.563  
##                 3rd Qu.:16776   3rd Qu.: 8.000  
##                 Max.   :63770   Max.   :10.000  
##                 NA's   :41      NA's   :308
#(c) ¿Hay manera de detectar valores duplicados?, en caso negativo, ¿qué
#podría proponer como identificador, para evitar duplicados en el data
#set?
datos %>%
  janitor::get_dupes()
## No variable names specified - using all columns.
## No duplicate combinations found of: edad, sexo, imc, hijos, fumador, region, clm, X
## # A tibble: 0 × 9
## # ℹ 9 variables: edad <dbl>, sexo <fct>, imc <dbl>, hijos <dbl>, fumador <fct>,
## #   region <fct>, clm <dbl>, X <int>, dupe_count <int>
print("No hay combinaciones de duplicados entre la base de datos")
## [1] "No hay combinaciones de duplicados entre la base de datos"
#Implementar un id_de asegurado a cada cliente, de esta forma podremos buscar
# e identificar a cada cliente de forma màs rapida y actualizar su informacion

datos<-datos%>%mutate(id_cliente=row_number())

#(d) Reemplace los valores no disponibles con las técnicas usadas, y haga una
#tabla resumen sobre los resultados (summary) de las variables numéricas,
#¿cuál técnica sugiere usar y por qué?

#Para el indice de masa corporal,dependiendo del genero es el imc corporal 
#promedio, haremos medias correspondientes

female_datos<-datos%>%filter(datos$sexo=="femenino")
female_mean<-mean(female_datos$imc, na.rm=TRUE)

male_datos<-datos%>%filter(datos$sexo=="masculino")
male_mean<-mean(male_datos$imc, na.rm=TRUE)

for (i in seq.default(1,nrow(datos))){
  if(is.na(datos[i,3])&&datos[i,2]=="femenino"){
    datos[i,3]<-female_mean
  }
  if(is.na(datos[i,3])&&datos[i,2]=="masculino"){
    datos[i,3]<-male_mean
  }
}

#Para otros datos, podemos simplemente implementar la media,
#la edad no es dependiente del género ni del peso

datos[,1]<-data.frame(lapply(datos[,1],
                                function(x) ifelse(is.na(x), 
                                                   mean(x, na.rm=TRUE), x)))
#Para el monto de reclamacion, podemos ver las medias entre fumadores y 
#no fumadores

smoker_datos<-datos%>%filter(datos$fumador=="yes")
smoker_mean<-mean(smoker_datos$clm, na.rm=TRUE)

non_smoker_datos<-datos%>%filter(datos$fumador=="no")
non_smoker_mean<-mean(non_smoker_datos$clm, na.rm=TRUE)

#Aplicando media condicionado a fumador o no
for (i in seq.default(1,nrow(datos))){
  if(is.na(datos[i,7])&&datos[i,5]=="yes"){
    datos[i,7]<-smoker_mean
  }
  if(is.na(datos[i,7])&&datos[i,5]=="no"){
    datos[i,7]<-non_smoker_mean
  }
}
#------------------------------------------------------------------------
#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?.

hist(datos$hijos)

hist(datos$clm)

hist(datos$edad)

hist(datos$imc)

#Sí, es en el que se ve de forma más clara la frecuencia de los asegurados, 
#ya sea en cualquiera de las clasificaciones que queramos analizar, no obstante,
#para hacer análisis más profundo, es conveniente poder editar la información, 
#al igual que ver relaciones entre diferentes variables.

#(b) Calcule la media de monto de reclamación por sexo.

clm_gender<-datos%>%
  group_by(sexo)%>%
  summarise(media_monto=mean(clm))%>%
  arrange(desc(media_monto))

View(clm_gender)

#(c) Calcule la media de monto de reclamación por fumador y sexo.
clm_gender_smoker<-datos%>%
  group_by(sexo,fumador)%>%
  summarise(media_monto=mean(clm))%>%
  arrange(desc(media_monto))
## `summarise()` has grouped output by 'sexo'. You can override using the
## `.groups` argument.
View(clm_gender_smoker)

#(d) Identifique la región con mayor monto promedio de reclamación.

clm_region<-datos%>%
  group_by(region)%>%
  summarise(media_monto=mean(clm))%>%
  arrange(desc(media_monto))

View(clm_region)

#(e) Cree una columna con la etiqueta ”obesidad”, si el imc es mayor a 30.

datos<-datos%>%mutate(obesidad=ifelse(datos$imc>30,"obesidad","No" ))
View(datos)

#(f) Identifique el top 10 de personas obesas indicando: edad, sexo, hijos,
#monto de reclamación y región.

datos_obesos<-datos%>%filter(datos$obesidad=="obesidad")
top10_obesos<-datos_obesos%>%
  select(edad,imc,sexo,hijos,clm,region)%>%
  arrange(desc(imc))
View(top10_obesos)