#------------------------------------------------------------------------
# 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)