RH_Colaboradores/Bajas

#file.choose()

RhColab<-read.csv("/Users/joseramonvazquezguzman/Documents/Tecnológico de Monterrey/Septimo semestre/Analítica de datos /RETO/Bases de datos (limpias) CSV /BaseDatosL RH_Colaboradores.csv")
RhBajas<-read.csv("/Users/joseramonvazquezguzman/Documents/Tecnológico de Monterrey/Septimo semestre/Analítica de datos /RETO/Bases de datos (limpias) CSV /BaseD_Limpia RH_ Bajas .csv")

Tipos de Variables Existentes para RHCOLAB

variable<-c("numero_de_empleado","nombre_completo", "edad", "genero", "fecha_de_alta", "antioguedad", "BAJA", "puesto", "departamento", "mano_de_obra", "salario_diario", "colonia", "municipio")

type<-c("Cualitativo (nominal)","Cualitativo (nominal)", "Cuantitativo(discreta)", "Cualitativo (nominal)", "Cuantitativo(discreta)", "cualitativo (nominal)", "Cualitativo (nominal)", "Cualitativo (nominal)", "Cualitativo (nominal)", "Cualitativo (nominal)", "Cuantitativo (continua)", "Cualitativo (nominal)", "Cualitativo (nominal)")

Escala_de_Medición<-c("Numero", "Fecha", "Departamento", "Salario", "Estado")


table<-data.frame(variable,type)
knitr::kable(table)
variable type
numero_de_empleado Cualitativo (nominal)
nombre_completo Cualitativo (nominal)
edad Cuantitativo(discreta)
genero Cualitativo (nominal)
fecha_de_alta Cuantitativo(discreta)
antioguedad cualitativo (nominal)
BAJA Cualitativo (nominal)
puesto Cualitativo (nominal)
departamento Cualitativo (nominal)
mano_de_obra Cualitativo (nominal)
salario_diario Cuantitativo (continua)
colonia Cualitativo (nominal)
municipio Cualitativo (nominal)

Tipos de Variables Existentes para RHBAJAS

variable<-c ("nombre","edad", "genero", "fecha_alta", "motivo_baja", "dias_de_trabajo", "baja", "puesto_que_desempeña", "salario_imss", "colonia", "municipio", "estado", "estado_civil" )


type<-c ("Cualitativo (nominal)","Cuantitativo(discreta)", "Cualitativo (nominal)", "Cuantitativo(discreta)", "Cualitativo (nominal)", "Cuantitativo(discreta)", "Cuantitativo(discreta)", "Cualitativo (nominal)", "Cuantitativo(Continua)", "Cualitativo (nominal)", "Cualitativo (nominal)", "Cualitativo (nominal)", "Cualitativo (nominal)" )

Escala_de_Medición<-c("Numero", "Fecha", "Departamento", "Salario", "Estado")


table<-data.frame(variable,type)
knitr::kable(table)
variable type
nombre Cualitativo (nominal)
edad Cuantitativo(discreta)
genero Cualitativo (nominal)
fecha_alta Cuantitativo(discreta)
motivo_baja Cualitativo (nominal)
dias_de_trabajo Cuantitativo(discreta)
baja Cuantitativo(discreta)
puesto_que_desempeña Cualitativo (nominal)
salario_imss Cuantitativo(Continua)
colonia Cualitativo (nominal)
municipio Cualitativo (nominal)
estado Cualitativo (nominal)
estado_civil Cualitativo (nominal)

Llamar librerias

library(foreign)
library(dplyr)        # data manipulation 
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(forcats)      # to work with categorical variables
library(ggplot2)      # data visualization 
library(janitor)      # data exploration and cleaning 
## 
## Attaching package: 'janitor'
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
library(Hmisc)        # several useful functions for data analysis 
## Loading required package: lattice
## Loading required package: survival
## Loading required package: Formula
## 
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:dplyr':
## 
##     src, summarize
## The following objects are masked from 'package:base':
## 
##     format.pval, units
library(psych)        # functions for multivariate analysis 
## 
## Attaching package: 'psych'
## The following object is masked from 'package:Hmisc':
## 
##     describe
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
library(naniar)       # summaries and visualization of missing values NAs
library(dlookr)       # summaries and visualization of missing values NAs
## 
## Attaching package: 'dlookr'
## The following object is masked from 'package:psych':
## 
##     describe
## The following object is masked from 'package:Hmisc':
## 
##     describe
## The following object is masked from 'package:base':
## 
##     transform
library(corrplot)     # correlation plots
## corrplot 0.92 loaded
library(jtools)       # presentation of regression analysis 
## 
## Attaching package: 'jtools'
## The following object is masked from 'package:Hmisc':
## 
##     %nin%
library(lmtest)       # diagnostic checks - linear regression analysis 
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(car)          # diagnostic checks - linear regression analysis
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:psych':
## 
##     logit
## The following object is masked from 'package:dplyr':
## 
##     recode
library(olsrr)        # diagnostic checks - linear regression analysis 
## 
## Attaching package: 'olsrr'
## The following object is masked from 'package:datasets':
## 
##     rivers
library(kableExtra)   # HTML table attributes
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows

Verificar la estructura de la base de datos

str(RhColab)
## 'data.frame':    999 obs. of  13 variables:
##  $ numero_de_empleado: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ nombre_completo   : chr  "NICOLAS MARTINEZ DE LOERA" "MARIANA DE LEON MORENO" "JOSE LUIS HERNANDEZ CERVANTES" "MARIA CAZARES MORALES" ...
##  $ edad              : int  67 43 73 32 57 38 55 26 27 37 ...
##  $ genero            : chr  "MASCULINO" "FEMENINO" "MASCULINO" "FEMENINO" ...
##  $ fecha_de_alta     : chr  "1/7/2010" "1/7/2011" "22/11/2011" "30/1/2013" ...
##  $ antiguedad        : int  12 11 11 9 8 8 7 6 5 5 ...
##  $ BAJA              : int  NA NA NA NA NA NA NA NA NA NA ...
##  $ puesto            : chr  "Supervisor de Máquin" "Supervisor de pegado" "Externo" "SUPERVISORA" ...
##  $ departamento      : chr  "Produccion Cartón MDL" "Produccion Cartón MDL" "Externo" "Produccion Cartón MC" ...
##  $ mano_de_obra      : chr  "Indirecto" "Indirecto" "Indirecto" "Indirecto" ...
##  $ salario_diario    : num  177 177 177 337 441 ...
##  $ colonia           : chr  "UNIDAD LABORAL" "SANTA TERESITA" "VILLAS DE HUINALA" "PUEBLO NUEVO" ...
##  $ municipio         : chr  "SAN NICOLAS DE LOS G" "APODACA" "APODACA" "APODACA" ...
str(RhBajas)
## 'data.frame':    237 obs. of  13 variables:
##  $ nombre              : chr  "MARIO VALDEZ ORTIZ" "ISABEL BARRIOS MENDEZ" "MARIA ELIZABETH GOMEZ HERNANDEZ" "ALONDRA ABIGAIL ESCARCIA GOMEZ" ...
##  $ edad                : int  32 36 23 21 29 46 29 31 50 19 ...
##  $ genero              : chr  "MASCULINO" "FEMENINO" "FEMENINO" "FEMENINO" ...
##  $ fecha_de_alta       : chr  "9/3/2020" "9/11/2021" "10/11/2021" "10/11/2021" ...
##  $ motivo_de_baja      : chr  "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" ...
##  $ dias_de_trabajo     : int  628 60 59 59 51 37 37 31 18 224 ...
##  $ baja                : chr  "27/11/2021" "8/1/2022" "8/1/2022" "8/1/2022" ...
##  $ puesto_que_desempeña: chr  "DISEÑO" "AYUDANTE GENERAL" "AYUDANTE GENERAL" "AYUDANTE GENERAL" ...
##  $ salario_imss        : num  500 152 152 152 152 ...
##  $ colonia             : chr  "SAN NICOLAS DE LOS G" "COLINAS DEL AEROPÑUERTO" "PUEBLO NUEVO" "PUEBLO NUEVO" ...
##  $ municipio           : chr  "SAN NICOLAS DE LOS G" "PESQUERIA" "APODACA" "APODACA" ...
##  $ estado              : chr  "NUEVO LEÓN" "NUEVO LEÓN" "NUEVO LEÓN" "NUEVO LEÓN" ...
##  $ estado_civil        : chr  "SOLTERO" "UNIÓN LIBRE" "CASADO" "SOLTERO" ...

seleccionar columnas / variables

RhColab1<-RhColab 
RhBajas1<-RhBajas 

Limpieza de datos

RhColab1<-RhColab %>% select(-one_of('numero_de_empleado','Fecha_alta' , 'BAJA', 'edad'))



# lets rename the selected columns / variables
summary(RhColab1)
##  nombre_completo       genero          fecha_de_alta        antiguedad    
##  Length:999         Length:999         Length:999         Min.   : 0.000  
##  Class :character   Class :character   Class :character   1st Qu.: 0.000  
##  Mode  :character   Mode  :character   Mode  :character   Median : 0.000  
##                                                           Mean   : 1.425  
##                                                           3rd Qu.: 2.000  
##                                                           Max.   :12.000  
##                                                           NA's   :886     
##     puesto          departamento       mano_de_obra       salario_diario 
##  Length:999         Length:999         Length:999         Min.   :144.4  
##  Class :character   Class :character   Class :character   1st Qu.:176.7  
##  Mode  :character   Mode  :character   Mode  :character   Median :180.7  
##                                                           Mean   :181.4  
##                                                           3rd Qu.:180.7  
##                                                           Max.   :441.4  
##                                                           NA's   :886    
##    colonia           municipio        
##  Length:999         Length:999        
##  Class :character   Class :character  
##  Mode  :character   Mode  :character  
##                                       
##                                       
##                                       
## 
names(RhColab1)<-c('Nom_Comp', 'Gen', 'Fecha_alta', 'Ant', 'Puesto', 'Dep', 'MDO', 'Sal_Diario', 'Col', 'Mun')
names(RhBajas1)<-c('Nom', 'Edad', 'Gen', 'Fecha_alta', 'MB', 'Días_trab', 'Baja', 'PuestDes', 'Sal_IMSS', 'Col', 'Mun', 'Estado', 'EstCiv')

##lets convert fecha_nacimiento to date format 


RhColab1$Fecha_alta<-as.Date(RhColab$fecha_de_alta, format = "%d/%m/%Y")
RhBajas1$Fecha_alta<-as.Date(RhBajas1$Fecha_alta, format = "%d/%m/%Y")
RhBajas1$Baja<-as.Date(RhBajas1$Baja, format = "%d/%m/%Y")

str(RhColab1)
## 'data.frame':    999 obs. of  10 variables:
##  $ Nom_Comp  : chr  "NICOLAS MARTINEZ DE LOERA" "MARIANA DE LEON MORENO" "JOSE LUIS HERNANDEZ CERVANTES" "MARIA CAZARES MORALES" ...
##  $ Gen       : chr  "MASCULINO" "FEMENINO" "MASCULINO" "FEMENINO" ...
##  $ Fecha_alta: Date, format: "2010-07-01" "2011-07-01" ...
##  $ Ant       : int  12 11 11 9 8 8 7 6 5 5 ...
##  $ Puesto    : chr  "Supervisor de Máquin" "Supervisor de pegado" "Externo" "SUPERVISORA" ...
##  $ Dep       : chr  "Produccion Cartón MDL" "Produccion Cartón MDL" "Externo" "Produccion Cartón MC" ...
##  $ MDO       : chr  "Indirecto" "Indirecto" "Indirecto" "Indirecto" ...
##  $ Sal_Diario: num  177 177 177 337 441 ...
##  $ Col       : chr  "UNIDAD LABORAL" "SANTA TERESITA" "VILLAS DE HUINALA" "PUEBLO NUEVO" ...
##  $ Mun       : chr  "SAN NICOLAS DE LOS G" "APODACA" "APODACA" "APODACA" ...
str(RhBajas1)
## 'data.frame':    237 obs. of  13 variables:
##  $ Nom       : chr  "MARIO VALDEZ ORTIZ" "ISABEL BARRIOS MENDEZ" "MARIA ELIZABETH GOMEZ HERNANDEZ" "ALONDRA ABIGAIL ESCARCIA GOMEZ" ...
##  $ Edad      : int  32 36 23 21 29 46 29 31 50 19 ...
##  $ Gen       : chr  "MASCULINO" "FEMENINO" "FEMENINO" "FEMENINO" ...
##  $ Fecha_alta: Date, format: "2020-03-09" "2021-11-09" ...
##  $ MB        : chr  "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" ...
##  $ Días_trab : int  628 60 59 59 51 37 37 31 18 224 ...
##  $ Baja      : Date, format: "2021-11-27" "2022-01-08" ...
##  $ PuestDes  : chr  "DISEÑO" "AYUDANTE GENERAL" "AYUDANTE GENERAL" "AYUDANTE GENERAL" ...
##  $ Sal_IMSS  : num  500 152 152 152 152 ...
##  $ Col       : chr  "SAN NICOLAS DE LOS G" "COLINAS DEL AEROPÑUERTO" "PUEBLO NUEVO" "PUEBLO NUEVO" ...
##  $ Mun       : chr  "SAN NICOLAS DE LOS G" "PESQUERIA" "APODACA" "APODACA" ...
##  $ Estado    : chr  "NUEVO LEÓN" "NUEVO LEÓN" "NUEVO LEÓN" "NUEVO LEÓN" ...
##  $ EstCiv    : chr  "SOLTERO" "UNIÓN LIBRE" "CASADO" "SOLTERO" ...
# Eliminar NA's y sustituir con 0's

sum(is.na(RhColab1))
## [1] 2658
sum(is.na(RhBajas1))
## [1] 0
summary(RhColab1)
##    Nom_Comp             Gen              Fecha_alta              Ant        
##  Length:999         Length:999         Min.   :2010-07-01   Min.   : 0.000  
##  Class :character   Class :character   1st Qu.:2020-08-28   1st Qu.: 0.000  
##  Mode  :character   Mode  :character   Median :2022-02-23   Median : 0.000  
##                                        Mean   :2021-01-16   Mean   : 1.425  
##                                        3rd Qu.:2022-07-05   3rd Qu.: 2.000  
##                                        Max.   :2022-08-23   Max.   :12.000  
##                                        NA's   :886          NA's   :886     
##     Puesto              Dep                MDO              Sal_Diario   
##  Length:999         Length:999         Length:999         Min.   :144.4  
##  Class :character   Class :character   Class :character   1st Qu.:176.7  
##  Mode  :character   Mode  :character   Mode  :character   Median :180.7  
##                                                           Mean   :181.4  
##                                                           3rd Qu.:180.7  
##                                                           Max.   :441.4  
##                                                           NA's   :886    
##      Col                Mun           
##  Length:999         Length:999        
##  Class :character   Class :character  
##  Mode  :character   Mode  :character  
##                                       
##                                       
##                                       
## 
summary(RhBajas1)
##      Nom                 Edad           Gen              Fecha_alta        
##  Length:237         Min.   : 0.00   Length:237         Min.   :2016-10-12  
##  Class :character   1st Qu.:23.00   Class :character   1st Qu.:2022-01-19  
##  Mode  :character   Median :29.00   Mode  :character   Median :2022-04-04  
##                     Mean   :30.52                      Mean   :2022-02-10  
##                     3rd Qu.:37.00                      3rd Qu.:2022-06-14  
##                     Max.   :61.00                      Max.   :2022-08-17  
##       MB              Días_trab            Baja              PuestDes        
##  Length:237         Min.   :   0.00   Min.   :2021-11-27   Length:237        
##  Class :character   1st Qu.:   9.00   1st Qu.:2022-03-01   Class :character  
##  Mode  :character   Median :  21.00   Median :2022-05-06   Mode  :character  
##                     Mean   :  83.42   Mean   :2022-05-05                     
##                     3rd Qu.:  49.00   3rd Qu.:2022-07-07                     
##                     Max.   :1966.00   Max.   :2022-08-25                     
##     Sal_IMSS         Col                Mun               Estado         
##  Min.   :144.4   Length:237         Length:237         Length:237        
##  1st Qu.:180.7   Class :character   Class :character   Class :character  
##  Median :180.7   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :178.6                                                           
##  3rd Qu.:180.7                                                           
##  Max.   :500.0                                                           
##     EstCiv         
##  Length:237        
##  Class :character  
##  Mode  :character  
##                    
##                    
## 
RhColab1 <- na.omit(RhColab1)
RhBajas1 <- na.omit(RhBajas1)


summary(RhColab1)
##    Nom_Comp             Gen              Fecha_alta              Ant        
##  Length:113         Length:113         Min.   :2010-07-01   Min.   : 0.000  
##  Class :character   Class :character   1st Qu.:2020-08-28   1st Qu.: 0.000  
##  Mode  :character   Mode  :character   Median :2022-02-23   Median : 0.000  
##                                        Mean   :2021-01-16   Mean   : 1.425  
##                                        3rd Qu.:2022-07-05   3rd Qu.: 2.000  
##                                        Max.   :2022-08-23   Max.   :12.000  
##     Puesto              Dep                MDO              Sal_Diario   
##  Length:113         Length:113         Length:113         Min.   :144.4  
##  Class :character   Class :character   Class :character   1st Qu.:176.7  
##  Mode  :character   Mode  :character   Mode  :character   Median :180.7  
##                                                           Mean   :181.4  
##                                                           3rd Qu.:180.7  
##                                                           Max.   :441.4  
##      Col                Mun           
##  Length:113         Length:113        
##  Class :character   Class :character  
##  Mode  :character   Mode  :character  
##                                       
##                                       
## 
summary(RhBajas1)  
##      Nom                 Edad           Gen              Fecha_alta        
##  Length:237         Min.   : 0.00   Length:237         Min.   :2016-10-12  
##  Class :character   1st Qu.:23.00   Class :character   1st Qu.:2022-01-19  
##  Mode  :character   Median :29.00   Mode  :character   Median :2022-04-04  
##                     Mean   :30.52                      Mean   :2022-02-10  
##                     3rd Qu.:37.00                      3rd Qu.:2022-06-14  
##                     Max.   :61.00                      Max.   :2022-08-17  
##       MB              Días_trab            Baja              PuestDes        
##  Length:237         Min.   :   0.00   Min.   :2021-11-27   Length:237        
##  Class :character   1st Qu.:   9.00   1st Qu.:2022-03-01   Class :character  
##  Mode  :character   Median :  21.00   Median :2022-05-06   Mode  :character  
##                     Mean   :  83.42   Mean   :2022-05-05                     
##                     3rd Qu.:  49.00   3rd Qu.:2022-07-07                     
##                     Max.   :1966.00   Max.   :2022-08-25                     
##     Sal_IMSS         Col                Mun               Estado         
##  Min.   :144.4   Length:237         Length:237         Length:237        
##  1st Qu.:180.7   Class :character   Class :character   Class :character  
##  Median :180.7   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :178.6                                                           
##  3rd Qu.:180.7                                                           
##  Max.   :500.0                                                           
##     EstCiv         
##  Length:237        
##  Class :character  
##  Mode  :character  
##                    
##                    
## 
str(RhColab1)
## 'data.frame':    113 obs. of  10 variables:
##  $ Nom_Comp  : chr  "NICOLAS MARTINEZ DE LOERA" "MARIANA DE LEON MORENO" "JOSE LUIS HERNANDEZ CERVANTES" "MARIA CAZARES MORALES" ...
##  $ Gen       : chr  "MASCULINO" "FEMENINO" "MASCULINO" "FEMENINO" ...
##  $ Fecha_alta: Date, format: "2010-07-01" "2011-07-01" ...
##  $ Ant       : int  12 11 11 9 8 8 7 6 5 5 ...
##  $ Puesto    : chr  "Supervisor de Máquin" "Supervisor de pegado" "Externo" "SUPERVISORA" ...
##  $ Dep       : chr  "Produccion Cartón MDL" "Produccion Cartón MDL" "Externo" "Produccion Cartón MC" ...
##  $ MDO       : chr  "Indirecto" "Indirecto" "Indirecto" "Indirecto" ...
##  $ Sal_Diario: num  177 177 177 337 441 ...
##  $ Col       : chr  "UNIDAD LABORAL" "SANTA TERESITA" "VILLAS DE HUINALA" "PUEBLO NUEVO" ...
##  $ Mun       : chr  "SAN NICOLAS DE LOS G" "APODACA" "APODACA" "APODACA" ...
##  - attr(*, "na.action")= 'omit' Named int [1:886] 114 115 116 117 118 119 120 121 122 123 ...
##   ..- attr(*, "names")= chr [1:886] "114" "115" "116" "117" ...
str(RhBajas1)
## 'data.frame':    237 obs. of  13 variables:
##  $ Nom       : chr  "MARIO VALDEZ ORTIZ" "ISABEL BARRIOS MENDEZ" "MARIA ELIZABETH GOMEZ HERNANDEZ" "ALONDRA ABIGAIL ESCARCIA GOMEZ" ...
##  $ Edad      : int  32 36 23 21 29 46 29 31 50 19 ...
##  $ Gen       : chr  "MASCULINO" "FEMENINO" "FEMENINO" "FEMENINO" ...
##  $ Fecha_alta: Date, format: "2020-03-09" "2021-11-09" ...
##  $ MB        : chr  "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" "RENUNCIA VOLUNTARIA" ...
##  $ Días_trab : int  628 60 59 59 51 37 37 31 18 224 ...
##  $ Baja      : Date, format: "2021-11-27" "2022-01-08" ...
##  $ PuestDes  : chr  "DISEÑO" "AYUDANTE GENERAL" "AYUDANTE GENERAL" "AYUDANTE GENERAL" ...
##  $ Sal_IMSS  : num  500 152 152 152 152 ...
##  $ Col       : chr  "SAN NICOLAS DE LOS G" "COLINAS DEL AEROPÑUERTO" "PUEBLO NUEVO" "PUEBLO NUEVO" ...
##  $ Mun       : chr  "SAN NICOLAS DE LOS G" "PESQUERIA" "APODACA" "APODACA" ...
##  $ Estado    : chr  "NUEVO LEÓN" "NUEVO LEÓN" "NUEVO LEÓN" "NUEVO LEÓN" ...
##  $ EstCiv    : chr  "SOLTERO" "UNIÓN LIBRE" "CASADO" "SOLTERO" ...

Calcular la variable “año” en años para realizar caracteristicas adicionales de los colaboradores

library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
edad<-trunc((RhColab1$Fecha_alta %--% RhColab1$Fecha_alta) / years(1)) # %--% creates a time interval based on as.date() format
RhColab1$edad<-edad

edad<-trunc((RhBajas1$Fecha_alta %--% RhBajas1$Fecha_alta) / years(1))
edad<-trunc((RhBajas1$Baja %--% RhBajas1$Baja) / years(1))

Convertir las variables a factor para poder crear graficas descriptivas

###  Colab1
RhColab1$Gen<-as.factor(RhColab1$Gen)
RhColab1$Puesto<-as.factor(RhColab1$Puesto)
RhColab1$Dep<-as.factor(RhColab1$Dep)
RhColab1$Mun<-as.factor(RhColab1$Mun)
RhColab1$Col<-as.factor(RhColab1$Col)


###  Bajas1 

RhBajas1$Gen<-as.factor(RhBajas1$Gen)
RhBajas1$MB<-as.factor(RhBajas1$MB)
RhBajas1$Días_trab<-as.factor(RhBajas1$Días_trab)
RhBajas1$PuestDes<-as.factor(RhBajas1$PuestDes)
RhBajas1$Col<-as.factor(RhBajas1$Col)
RhBajas1$Mun<-as.factor(RhBajas1$Mun)
RhBajas1$Estado<-as.factor(RhBajas1$Estado)
RhBajas1$EstCiv<-as.factor(RhBajas1$EstCiv)

Verioficar la estructura de las bases de datos RhColab1 y RhBajas1

str(RhColab1)
## 'data.frame':    113 obs. of  11 variables:
##  $ Nom_Comp  : chr  "NICOLAS MARTINEZ DE LOERA" "MARIANA DE LEON MORENO" "JOSE LUIS HERNANDEZ CERVANTES" "MARIA CAZARES MORALES" ...
##  $ Gen       : Factor w/ 2 levels "FEMENINO","MASCULINO": 2 1 2 1 1 2 1 2 2 1 ...
##  $ Fecha_alta: Date, format: "2010-07-01" "2011-07-01" ...
##  $ Ant       : int  12 11 11 9 8 8 7 6 5 5 ...
##  $ Puesto    : Factor w/ 29 levels "AY. GENERAL",..: 27 28 10 29 29 8 7 4 3 7 ...
##  $ Dep       : Factor w/ 22 levels "","Ay.flexo",..: 18 18 13 17 8 4 8 19 4 10 ...
##  $ MDO       : chr  "Indirecto" "Indirecto" "Indirecto" "Indirecto" ...
##  $ Sal_Diario: num  177 177 177 337 441 ...
##  $ Col       : Factor w/ 73 levels "ALAMOS DEL PARQUE",..: 64 61 69 51 56 18 1 52 14 5 ...
##  $ Mun       : Factor w/ 9 levels "APODACA","CAÑADA BLANCA",..: 9 1 1 1 1 8 1 1 8 9 ...
##  $ edad      : num  0 0 0 0 0 0 0 0 0 0 ...
##  - attr(*, "na.action")= 'omit' Named int [1:886] 114 115 116 117 118 119 120 121 122 123 ...
##   ..- attr(*, "names")= chr [1:886] "114" "115" "116" "117" ...
summary(RhColab1)
##    Nom_Comp                Gen       Fecha_alta              Ant        
##  Length:113         FEMENINO :61   Min.   :2010-07-01   Min.   : 0.000  
##  Class :character   MASCULINO:52   1st Qu.:2020-08-28   1st Qu.: 0.000  
##  Mode  :character                  Median :2022-02-23   Median : 0.000  
##                                    Mean   :2021-01-16   Mean   : 1.425  
##                                    3rd Qu.:2022-07-05   3rd Qu.: 2.000  
##                                    Max.   :2022-08-23   Max.   :12.000  
##                                                                         
##               Puesto                      Dep         MDO           
##  AYUDANTE GENERAL:59                        :40   Length:113        
##  COSTURERA       :10   Producción Retorn    :10   Class :character  
##  AY. GENERAL     : 7   Costura              : 7   Mode  :character  
##  SOLDADOR        : 5   Produccion Cartón MDL: 7                     
##  CHOFER          : 4   Stabilus             : 7                     
##  RESIDENTE       : 4   Cedis                : 6                     
##  (Other)         :24   (Other)              :36                     
##    Sal_Diario                      Col            Mun          edad  
##  Min.   :144.4   PUEBLO NUEVO        :27   APODACA  :72   Min.   :0  
##  1st Qu.:176.7   CANTORAL            : 4   JUAREZ   :10   1st Qu.:0  
##  Median :180.7   CAÑADA BLANCA       : 3   PESQUERIA: 9   Median :0  
##  Mean   :181.4   MISION SAN PABLO    : 3   GUADALUPE: 6   Mean   :0  
##  3rd Qu.:180.7   PORTAL DE HUINALA   : 3   SALTILLO : 5   3rd Qu.:0  
##  Max.   :441.4   VALLE DE SANTA MARIA: 3   MONTERREY: 4   Max.   :0  
##                  (Other)             :70   (Other)  : 7
str(RhBajas1)
## 'data.frame':    237 obs. of  13 variables:
##  $ Nom       : chr  "MARIO VALDEZ ORTIZ" "ISABEL BARRIOS MENDEZ" "MARIA ELIZABETH GOMEZ HERNANDEZ" "ALONDRA ABIGAIL ESCARCIA GOMEZ" ...
##  $ Edad      : int  32 36 23 21 29 46 29 31 50 19 ...
##  $ Gen       : Factor w/ 2 levels "FEMENINO","MASCULINO": 2 1 1 1 1 1 1 2 2 2 ...
##  $ Fecha_alta: Date, format: "2020-03-09" "2021-11-09" ...
##  $ MB        : Factor w/ 5 levels "ABANDONO","BAJA POR FALTAS",..: 4 4 4 4 4 2 2 2 2 4 ...
##  $ Días_trab : Factor w/ 95 levels "0","1","2","3",..: 88 53 52 52 48 37 37 31 19 79 ...
##  $ Baja      : Date, format: "2021-11-27" "2022-01-08" ...
##  $ PuestDes  : Factor w/ 31 levels "ANALISTA DE NOMINAS /AUX DE R.H.",..: 15 9 9 9 9 9 9 9 9 4 ...
##  $ Sal_IMSS  : num  500 152 152 152 152 ...
##  $ Col       : Factor w/ 98 levels "ACANTO RESIDENCIAL",..: 82 18 72 72 73 28 72 48 15 80 ...
##  $ Mun       : Factor w/ 13 levels "APODACA","CADEREYTA",..: 10 7 1 1 1 1 1 5 4 1 ...
##  $ Estado    : Factor w/ 3 levels "COAHUILA","NUEVO LEÓN",..: 2 2 2 2 2 2 2 2 2 2 ...
##  $ EstCiv    : Factor w/ 5 levels "CASADO","DIVORCIADO",..: 3 5 1 3 3 3 5 5 3 3 ...
summary(RhBajas1)
##      Nom                 Edad              Gen        Fecha_alta        
##  Length:237         Min.   : 0.00   FEMENINO :140   Min.   :2016-10-12  
##  Class :character   1st Qu.:23.00   MASCULINO: 97   1st Qu.:2022-01-19  
##  Mode  :character   Median :29.00                   Median :2022-04-04  
##                     Mean   :30.52                   Mean   :2022-02-10  
##                     3rd Qu.:37.00                   3rd Qu.:2022-06-14  
##                     Max.   :61.00                   Max.   :2022-08-17  
##                                                                         
##                    MB        Días_trab        Baja           
##  ABANDONO           :  1   15     : 11   Min.   :2021-11-27  
##  BAJA POR FALTAS    :141   1      :  9   1st Qu.:2022-03-01  
##  JUBILACION         :  1   6      :  9   Median :2022-05-06  
##  RENUNCIA VOLUNTARIA: 86   9      :  8   Mean   :2022-05-05  
##  TERMINO DE CONTRATO:  8   0      :  7   3rd Qu.:2022-07-07  
##                            8      :  7   Max.   :2022-08-25  
##                            (Other):186                       
##                   PuestDes      Sal_IMSS                       Col     
##  AYUDANTE GENERAL     :173   Min.   :144.4   PUEBLO NUEVO        : 67  
##  SOLDADOR             : 11   1st Qu.:180.7   VALLE DE SANTA MARIA: 15  
##  COSTURERA            : 10   Median :180.7   CANTORAL            : 10  
##  MONTACARGUISTA       :  5   Mean   :178.6   PORTAL DE HUINALA   :  6  
##  AY. GENERAL          :  4   3rd Qu.:180.7   SAN ISIDRO          :  6  
##  AUXILIAR DE EMBARQUES:  3   Max.   :500.0   BOSQUES DE HUINALA  :  4  
##  (Other)              : 31                   (Other)             :129  
##                        Mun             Estado            EstCiv   
##  APODACA                 :162   COAHUILA  :  9   CASADO     : 64  
##  PESQUERIA               : 32   NUEVO LEÓN:227   DIVORCIADO :  3  
##  JUAREZ                  : 15   SALTILLO  :  1   SOLTERO    :110  
##  GUADALUPE               : 10                    Unión libre:  1  
##  RAMOS ARIZPE            :  8                    UNIÓN LIBRE: 59  
##  SAN NICOLAS DE LOS GARZA:  3                                     
##  (Other)                 :  7

Mostrar tablas de visualización para identificar perspectivas relevantes de las bases de datos RhColab1 y RhBajas1

## Colaboradores


tapply(RhColab1$Sal_Diario,
       list(RhColab1$Gen,RhColab1$Puesto), mean)
##           AY. GENERAL AYUDANTE DE MANTENIMIENTO Ayudante general
## FEMENINO       151.61                        NA               NA
## MASCULINO      151.61                    180.68           176.72
##           AYUDANTE GENERAL CHOFER CHOFER GESTOR COSTURERA CUSTOMER SERVICE INF
## FEMENINO          177.4222     NA            NA  191.7533                   NA
## MASCULINO         176.2268 177.71        180.68  176.7200               176.72
##           ENFERMERA Externo EXTERNO GESTOR GUARDIA DE SEGURIDAD
## FEMENINO     176.72      NA      NA     NA                   NA
## MASCULINO        NA  176.72  151.67 176.72               180.68
##           INSPECTOR DE CALIDAD INSPECTORA DE CALIDAD  LIDER LIMPIEZA
## FEMENINO                208.65                180.68 144.45   176.72
## MASCULINO                   NA                    NA     NA       NA
##           MANTENIMIENTO MONTACARGUISTA   MOZO OP. FLEXO-RANURADORA-REFILADORA
## FEMENINO             NA             NA     NA                              NA
## MASCULINO        279.61         180.68 180.68                          176.72
##           OPERADOR SIERRA PINTOR RECIBO RESIDENTE SOLDADOR Supervisor de Máquin
## FEMENINO               NA     NA 176.72        NA       NA                   NA
## MASCULINO          180.68 176.72     NA    177.71  179.888               176.72
##           Supervisor de pegado SUPERVISORA
## FEMENINO                176.72      389.21
## MASCULINO                   NA          NA
tapply(RhColab1$Sal_Diario,
       list(RhColab1$Gen,RhColab1$Dep), mean)
##                    Ay.flexo Calidad  Cedis  CEDIS Celdas CORTADORAS Costura
## FEMENINO  178.7544       NA 194.665     NA     NA 180.68         NA 245.375
## MASCULINO 176.5400   180.68      NA 176.72 180.68     NA     180.68 176.720
##           COSTURA Costura T2     EHS Embarques Externo Limpieza Materiales
## FEMENINO   151.61     152.86 176.720        NA      NA   176.72     176.72
## MASCULINO      NA         NA 230.145    177.71 164.195       NA         NA
##           Paileria Produccion Cartón MC Produccion Cartón MDL Producción Retorn
## FEMENINO        NA              194.405              156.0975          161.3000
## MASCULINO    178.7              151.670              168.3700          183.8443
##           Rotativa Stabilus Troquel
## FEMENINO        NA   180.68  180.68
## MASCULINO   151.61   180.68  180.68
## Bajas

tapply(RhBajas1$Sal_IMSS,RhBajas1$Gen,mean)
##  FEMENINO MASCULINO 
##  177.3126  180.5544

Reemplazar el valor atípico de salario_diario con la mediana

RhColab1$Sal_Diario<-replace(RhColab1$Sal_Diario,RhColab1$Sal_Diario>1000000,181)

Mostrar gráficos de visualización de datos para que podamos identificar información relevante de nuestro conjunto de datos RHColab y RHBajas

tapply(RhColab1$Sal_Diario,
       list(RhColab1$Gen,RhColab1$Dep), mean)
##                    Ay.flexo Calidad  Cedis  CEDIS Celdas CORTADORAS Costura
## FEMENINO  178.7544       NA 194.665     NA     NA 180.68         NA 245.375
## MASCULINO 176.5400   180.68      NA 176.72 180.68     NA     180.68 176.720
##           COSTURA Costura T2     EHS Embarques Externo Limpieza Materiales
## FEMENINO   151.61     152.86 176.720        NA      NA   176.72     176.72
## MASCULINO      NA         NA 230.145    177.71 164.195       NA         NA
##           Paileria Produccion Cartón MC Produccion Cartón MDL Producción Retorn
## FEMENINO        NA              194.405              156.0975          161.3000
## MASCULINO    178.7              151.670              168.3700          183.8443
##           Rotativa Stabilus Troquel
## FEMENINO        NA   180.68  180.68
## MASCULINO   151.61   180.68  180.68
hist(RhBajas1$Edad, freq=TRUE, col='orange', main="Histograma de Edad",xlab="Edad en Años")

ggplot(RhBajas1, aes(x=Gen, y=Edad, fill=Gen)) + 
  geom_boxplot() 

ggplot(RhColab1, aes(x=Gen, y=Sal_Diario, fill=Gen)) + 
  geom_boxplot() 

ggplot(RhColab1, aes(Gen,Sal_Diario,fill=Gen)) +                                    
  geom_bar(stat = "identity") +
  scale_fill_brewer(palette = "Set2") + ggtitle("Salario Diario por Genero")

ggplot(RhBajas1, aes(x=Gen, y=Sal_IMSS, fill=Gen)) + 
  geom_bar(stat="identity") + 
  facet_grid(~EstCiv) + scale_fill_brewer(palette = "Set1")

Conclusiones

En promedio la mayor parte de los colaboradores de Form tienen una edad de entre 20 y 30 años, hay empleadas que tienen un máximo de 56 años mientras que hay un empleado que pasa ya de los 60 años de edad. Entre hombres y mujeres están en un rango de 20 a 40 años de edad

El saldo promedio tanto para hombres como para mujeres ronda en un monto de 170 y 180 pesos, pero hay una empleada que llega a un salario diario de 441 pesos, duplicando el saldo promedio de la mayor parte de los empleados de la compañía.

En cuanto a solteros y casados la mujer tiene un salario más elevado que el de los hombres.

LS0tCnRpdGxlOiAiUkhfQ29sYWJvcmFkb3Jlcy9CYWphcyIKYXV0aG9yOiAiRXF1aXBvIDYiCmRhdGU6ICIwNC0xMC0yMDIyIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgdG9jOiB0cnVlCiAgIHRvY19mbG9hdDogdHJ1ZQogICBjb2RlX2Rvd25sb2FkOiB0cnVlCgotLS0KIyMgUkhfQ29sYWJvcmFkb3Jlcy9CYWphcwoKYGBge3J9CiNmaWxlLmNob29zZSgpCgpSaENvbGFiPC1yZWFkLmNzdigiL1VzZXJzL2pvc2VyYW1vbnZhenF1ZXpndXptYW4vRG9jdW1lbnRzL1RlY25vbG/MgWdpY28gZGUgTW9udGVycmV5L1NlcHRpbW8gc2VtZXN0cmUvQW5hbGnMgXRpY2EgZGUgZGF0b3MgL1JFVE8vQmFzZXMgZGUgZGF0b3MgKGxpbXBpYXMpIENTViAvQmFzZURhdG9zTCBSSF9Db2xhYm9yYWRvcmVzLmNzdiIpClJoQmFqYXM8LXJlYWQuY3N2KCIvVXNlcnMvam9zZXJhbW9udmF6cXVlemd1em1hbi9Eb2N1bWVudHMvVGVjbm9sb8yBZ2ljbyBkZSBNb250ZXJyZXkvU2VwdGltbyBzZW1lc3RyZS9BbmFsacyBdGljYSBkZSBkYXRvcyAvUkVUTy9CYXNlcyBkZSBkYXRvcyAobGltcGlhcykgQ1NWIC9CYXNlRF9MaW1waWEgUkhfIEJhamFzIC5jc3YiKQoKCgoKYGBgCgoKIyMgIFRpcG9zIGRlIFZhcmlhYmxlcyBFeGlzdGVudGVzIHBhcmEgUkhDT0xBQgoKYGBge3J9Cgp2YXJpYWJsZTwtYygibnVtZXJvX2RlX2VtcGxlYWRvIiwibm9tYnJlX2NvbXBsZXRvIiwgImVkYWQiLCAiZ2VuZXJvIiwgImZlY2hhX2RlX2FsdGEiLCAiYW50aW9ndWVkYWQiLCAiQkFKQSIsICJwdWVzdG8iLCAiZGVwYXJ0YW1lbnRvIiwgIm1hbm9fZGVfb2JyYSIsICJzYWxhcmlvX2RpYXJpbyIsICJjb2xvbmlhIiwgIm11bmljaXBpbyIpCgp0eXBlPC1jKCJDdWFsaXRhdGl2byAobm9taW5hbCkiLCJDdWFsaXRhdGl2byAobm9taW5hbCkiLCAiQ3VhbnRpdGF0aXZvKGRpc2NyZXRhKSIsICJDdWFsaXRhdGl2byAobm9taW5hbCkiLCAiQ3VhbnRpdGF0aXZvKGRpc2NyZXRhKSIsICJjdWFsaXRhdGl2byAobm9taW5hbCkiLCAiQ3VhbGl0YXRpdm8gKG5vbWluYWwpIiwgIkN1YWxpdGF0aXZvIChub21pbmFsKSIsICJDdWFsaXRhdGl2byAobm9taW5hbCkiLCAiQ3VhbGl0YXRpdm8gKG5vbWluYWwpIiwgIkN1YW50aXRhdGl2byAoY29udGludWEpIiwgIkN1YWxpdGF0aXZvIChub21pbmFsKSIsICJDdWFsaXRhdGl2byAobm9taW5hbCkiKQoKRXNjYWxhX2RlX01lZGljacOzbjwtYygiTnVtZXJvIiwgIkZlY2hhIiwgIkRlcGFydGFtZW50byIsICJTYWxhcmlvIiwgIkVzdGFkbyIpCgoKdGFibGU8LWRhdGEuZnJhbWUodmFyaWFibGUsdHlwZSkKa25pdHI6OmthYmxlKHRhYmxlKQoKCgpgYGAKCgojIyAgVGlwb3MgZGUgVmFyaWFibGVzIEV4aXN0ZW50ZXMgcGFyYSBSSEJBSkFTCgpgYGB7cn0KCnZhcmlhYmxlPC1jICgibm9tYnJlIiwiZWRhZCIsICJnZW5lcm8iLCAiZmVjaGFfYWx0YSIsICJtb3Rpdm9fYmFqYSIsICJkaWFzX2RlX3RyYWJham8iLCAiYmFqYSIsICJwdWVzdG9fcXVlX2Rlc2VtcGXDsWEiLCAic2FsYXJpb19pbXNzIiwgImNvbG9uaWEiLCAibXVuaWNpcGlvIiwgImVzdGFkbyIsICJlc3RhZG9fY2l2aWwiICkKCgp0eXBlPC1jICgiQ3VhbGl0YXRpdm8gKG5vbWluYWwpIiwiQ3VhbnRpdGF0aXZvKGRpc2NyZXRhKSIsICJDdWFsaXRhdGl2byAobm9taW5hbCkiLCAiQ3VhbnRpdGF0aXZvKGRpc2NyZXRhKSIsICJDdWFsaXRhdGl2byAobm9taW5hbCkiLCAiQ3VhbnRpdGF0aXZvKGRpc2NyZXRhKSIsICJDdWFudGl0YXRpdm8oZGlzY3JldGEpIiwgIkN1YWxpdGF0aXZvIChub21pbmFsKSIsICJDdWFudGl0YXRpdm8oQ29udGludWEpIiwgIkN1YWxpdGF0aXZvIChub21pbmFsKSIsICJDdWFsaXRhdGl2byAobm9taW5hbCkiLCAiQ3VhbGl0YXRpdm8gKG5vbWluYWwpIiwgIkN1YWxpdGF0aXZvIChub21pbmFsKSIgKQoKRXNjYWxhX2RlX01lZGljacOzbjwtYygiTnVtZXJvIiwgIkZlY2hhIiwgIkRlcGFydGFtZW50byIsICJTYWxhcmlvIiwgIkVzdGFkbyIpCgoKdGFibGU8LWRhdGEuZnJhbWUodmFyaWFibGUsdHlwZSkKa25pdHI6OmthYmxlKHRhYmxlKQoKCgpgYGAKCiMjIyBMbGFtYXIgbGlicmVyaWFzIAoKYGBge3Igd2FybmluZz1UUlVFfQoKbGlicmFyeShmb3JlaWduKQpsaWJyYXJ5KGRwbHlyKSAgICAgICAgIyBkYXRhIG1hbmlwdWxhdGlvbiAKbGlicmFyeShmb3JjYXRzKSAgICAgICMgdG8gd29yayB3aXRoIGNhdGVnb3JpY2FsIHZhcmlhYmxlcwpsaWJyYXJ5KGdncGxvdDIpICAgICAgIyBkYXRhIHZpc3VhbGl6YXRpb24gCmxpYnJhcnkoamFuaXRvcikgICAgICAjIGRhdGEgZXhwbG9yYXRpb24gYW5kIGNsZWFuaW5nIApsaWJyYXJ5KEhtaXNjKSAgICAgICAgIyBzZXZlcmFsIHVzZWZ1bCBmdW5jdGlvbnMgZm9yIGRhdGEgYW5hbHlzaXMgCmxpYnJhcnkocHN5Y2gpICAgICAgICAjIGZ1bmN0aW9ucyBmb3IgbXVsdGl2YXJpYXRlIGFuYWx5c2lzIApsaWJyYXJ5KG5hbmlhcikgICAgICAgIyBzdW1tYXJpZXMgYW5kIHZpc3VhbGl6YXRpb24gb2YgbWlzc2luZyB2YWx1ZXMgTkFzCmxpYnJhcnkoZGxvb2tyKSAgICAgICAjIHN1bW1hcmllcyBhbmQgdmlzdWFsaXphdGlvbiBvZiBtaXNzaW5nIHZhbHVlcyBOQXMKbGlicmFyeShjb3JycGxvdCkgICAgICMgY29ycmVsYXRpb24gcGxvdHMKbGlicmFyeShqdG9vbHMpICAgICAgICMgcHJlc2VudGF0aW9uIG9mIHJlZ3Jlc3Npb24gYW5hbHlzaXMgCmxpYnJhcnkobG10ZXN0KSAgICAgICAjIGRpYWdub3N0aWMgY2hlY2tzIC0gbGluZWFyIHJlZ3Jlc3Npb24gYW5hbHlzaXMgCmxpYnJhcnkoY2FyKSAgICAgICAgICAjIGRpYWdub3N0aWMgY2hlY2tzIC0gbGluZWFyIHJlZ3Jlc3Npb24gYW5hbHlzaXMKbGlicmFyeShvbHNycikgICAgICAgICMgZGlhZ25vc3RpYyBjaGVja3MgLSBsaW5lYXIgcmVncmVzc2lvbiBhbmFseXNpcyAKbGlicmFyeShrYWJsZUV4dHJhKSAgICMgSFRNTCB0YWJsZSBhdHRyaWJ1dGVzCgoKYGBgCgoKIyMgVmVyaWZpY2FyIGxhIGVzdHJ1Y3R1cmEgZGUgbGEgYmFzZSBkZSBkYXRvcwoKYGBge3J9CgpzdHIoUmhDb2xhYikKc3RyKFJoQmFqYXMpCgoKYGBgCgojIyBzZWxlY2Npb25hciBjb2x1bW5hcyAvIHZhcmlhYmxlcyAKCmBgYHtyfQoKUmhDb2xhYjE8LVJoQ29sYWIgClJoQmFqYXMxPC1SaEJhamFzIAoKYGBgCgoKIyMgTGltcGllemEgZGUgZGF0b3MgCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQoKUmhDb2xhYjE8LVJoQ29sYWIgJT4lIHNlbGVjdCgtb25lX29mKCdudW1lcm9fZGVfZW1wbGVhZG8nLCdGZWNoYV9hbHRhJyAsICdCQUpBJywgJ2VkYWQnKSkKCgoKIyBsZXRzIHJlbmFtZSB0aGUgc2VsZWN0ZWQgY29sdW1ucyAvIHZhcmlhYmxlcwpzdW1tYXJ5KFJoQ29sYWIxKQpuYW1lcyhSaENvbGFiMSk8LWMoJ05vbV9Db21wJywgJ0dlbicsICdGZWNoYV9hbHRhJywgJ0FudCcsICdQdWVzdG8nLCAnRGVwJywgJ01ETycsICdTYWxfRGlhcmlvJywgJ0NvbCcsICdNdW4nKQpuYW1lcyhSaEJhamFzMSk8LWMoJ05vbScsICdFZGFkJywgJ0dlbicsICdGZWNoYV9hbHRhJywgJ01CJywgJ0TDrWFzX3RyYWInLCAnQmFqYScsICdQdWVzdERlcycsICdTYWxfSU1TUycsICdDb2wnLCAnTXVuJywgJ0VzdGFkbycsICdFc3RDaXYnKQoKIyNsZXRzIGNvbnZlcnQgZmVjaGFfbmFjaW1pZW50byB0byBkYXRlIGZvcm1hdCAKCgpSaENvbGFiMSRGZWNoYV9hbHRhPC1hcy5EYXRlKFJoQ29sYWIkZmVjaGFfZGVfYWx0YSwgZm9ybWF0ID0gIiVkLyVtLyVZIikKUmhCYWphczEkRmVjaGFfYWx0YTwtYXMuRGF0ZShSaEJhamFzMSRGZWNoYV9hbHRhLCBmb3JtYXQgPSAiJWQvJW0vJVkiKQpSaEJhamFzMSRCYWphPC1hcy5EYXRlKFJoQmFqYXMxJEJhamEsIGZvcm1hdCA9ICIlZC8lbS8lWSIpCgpzdHIoUmhDb2xhYjEpCnN0cihSaEJhamFzMSkKCgoKCiMgRWxpbWluYXIgTkEncyB5IHN1c3RpdHVpciBjb24gMCdzCgpzdW0oaXMubmEoUmhDb2xhYjEpKQpzdW0oaXMubmEoUmhCYWphczEpKQoKCnN1bW1hcnkoUmhDb2xhYjEpCnN1bW1hcnkoUmhCYWphczEpCgpSaENvbGFiMSA8LSBuYS5vbWl0KFJoQ29sYWIxKQpSaEJhamFzMSA8LSBuYS5vbWl0KFJoQmFqYXMxKQoKCnN1bW1hcnkoUmhDb2xhYjEpCnN1bW1hcnkoUmhCYWphczEpICAKCnN0cihSaENvbGFiMSkKc3RyKFJoQmFqYXMxKQoKCmBgYAoKCiMjIENhbGN1bGFyIGxhIHZhcmlhYmxlICJhw7FvIiBlbiBhw7FvcyBwYXJhIHJlYWxpemFyIGNhcmFjdGVyaXN0aWNhcyBhZGljaW9uYWxlcyBkZSBsb3MgY29sYWJvcmFkb3JlcyAKCmBgYHtyfQoKbGlicmFyeShsdWJyaWRhdGUpCgoKZWRhZDwtdHJ1bmMoKFJoQ29sYWIxJEZlY2hhX2FsdGEgJS0tJSBSaENvbGFiMSRGZWNoYV9hbHRhKSAvIHllYXJzKDEpKSAjICUtLSUgY3JlYXRlcyBhIHRpbWUgaW50ZXJ2YWwgYmFzZWQgb24gYXMuZGF0ZSgpIGZvcm1hdApSaENvbGFiMSRlZGFkPC1lZGFkCgplZGFkPC10cnVuYygoUmhCYWphczEkRmVjaGFfYWx0YSAlLS0lIFJoQmFqYXMxJEZlY2hhX2FsdGEpIC8geWVhcnMoMSkpCmVkYWQ8LXRydW5jKChSaEJhamFzMSRCYWphICUtLSUgUmhCYWphczEkQmFqYSkgLyB5ZWFycygxKSkKCgpgYGAKCgojIyBDb252ZXJ0aXIgbGFzIHZhcmlhYmxlcyBhIGZhY3RvciBwYXJhIHBvZGVyIGNyZWFyIGdyYWZpY2FzIGRlc2NyaXB0aXZhcyAKCmBgYHtyfQoKIyMjICBDb2xhYjEKUmhDb2xhYjEkR2VuPC1hcy5mYWN0b3IoUmhDb2xhYjEkR2VuKQpSaENvbGFiMSRQdWVzdG88LWFzLmZhY3RvcihSaENvbGFiMSRQdWVzdG8pClJoQ29sYWIxJERlcDwtYXMuZmFjdG9yKFJoQ29sYWIxJERlcCkKUmhDb2xhYjEkTXVuPC1hcy5mYWN0b3IoUmhDb2xhYjEkTXVuKQpSaENvbGFiMSRDb2w8LWFzLmZhY3RvcihSaENvbGFiMSRDb2wpCgoKIyMjICBCYWphczEgCgpSaEJhamFzMSRHZW48LWFzLmZhY3RvcihSaEJhamFzMSRHZW4pClJoQmFqYXMxJE1CPC1hcy5mYWN0b3IoUmhCYWphczEkTUIpClJoQmFqYXMxJETDrWFzX3RyYWI8LWFzLmZhY3RvcihSaEJhamFzMSREw61hc190cmFiKQpSaEJhamFzMSRQdWVzdERlczwtYXMuZmFjdG9yKFJoQmFqYXMxJFB1ZXN0RGVzKQpSaEJhamFzMSRDb2w8LWFzLmZhY3RvcihSaEJhamFzMSRDb2wpClJoQmFqYXMxJE11bjwtYXMuZmFjdG9yKFJoQmFqYXMxJE11bikKUmhCYWphczEkRXN0YWRvPC1hcy5mYWN0b3IoUmhCYWphczEkRXN0YWRvKQpSaEJhamFzMSRFc3RDaXY8LWFzLmZhY3RvcihSaEJhamFzMSRFc3RDaXYpCgpgYGAKCgoKIyMgIFZlcmlvZmljYXIgbGEgZXN0cnVjdHVyYSBkZSBsYXMgYmFzZXMgZGUgZGF0b3MgUmhDb2xhYjEgeSBSaEJhamFzMSAgCgpgYGB7cn0KCnN0cihSaENvbGFiMSkKc3VtbWFyeShSaENvbGFiMSkKCnN0cihSaEJhamFzMSkKc3VtbWFyeShSaEJhamFzMSkKCgoKYGBgCgojIyBNb3N0cmFyIHRhYmxhcyBkZSB2aXN1YWxpemFjacOzbiBwYXJhIGlkZW50aWZpY2FyIHBlcnNwZWN0aXZhcyByZWxldmFudGVzIGRlIGxhcyBiYXNlcyBkZSBkYXRvcyBSaENvbGFiMSB5IFJoQmFqYXMxIAoKYGBge3J9CgojIyBDb2xhYm9yYWRvcmVzCgoKdGFwcGx5KFJoQ29sYWIxJFNhbF9EaWFyaW8sCiAgICAgICBsaXN0KFJoQ29sYWIxJEdlbixSaENvbGFiMSRQdWVzdG8pLCBtZWFuKQoKdGFwcGx5KFJoQ29sYWIxJFNhbF9EaWFyaW8sCiAgICAgICBsaXN0KFJoQ29sYWIxJEdlbixSaENvbGFiMSREZXApLCBtZWFuKQoKIyMgQmFqYXMKCnRhcHBseShSaEJhamFzMSRTYWxfSU1TUyxSaEJhamFzMSRHZW4sbWVhbikKCmBgYAoKIyMgUmVlbXBsYXphciBlbCB2YWxvciBhdMOtcGljbyBkZSBzYWxhcmlvX2RpYXJpbyBjb24gbGEgbWVkaWFuYQoKYGBge3J9CgpSaENvbGFiMSRTYWxfRGlhcmlvPC1yZXBsYWNlKFJoQ29sYWIxJFNhbF9EaWFyaW8sUmhDb2xhYjEkU2FsX0RpYXJpbz4xMDAwMDAwLDE4MSkKCmBgYAoKCiMjIE1vc3RyYXIgZ3LDoWZpY29zIGRlIHZpc3VhbGl6YWNpw7NuIGRlIGRhdG9zIHBhcmEgcXVlIHBvZGFtb3MgaWRlbnRpZmljYXIgaW5mb3JtYWNpw7NuIHJlbGV2YW50ZSBkZSBudWVzdHJvIGNvbmp1bnRvIGRlIGRhdG9zIFJIQ29sYWIgeSBSSEJhamFzCgpgYGB7cn0KCnRhcHBseShSaENvbGFiMSRTYWxfRGlhcmlvLAogICAgICAgbGlzdChSaENvbGFiMSRHZW4sUmhDb2xhYjEkRGVwKSwgbWVhbikKCmhpc3QoUmhCYWphczEkRWRhZCwgZnJlcT1UUlVFLCBjb2w9J29yYW5nZScsIG1haW49Ikhpc3RvZ3JhbWEgZGUgRWRhZCIseGxhYj0iRWRhZCBlbiBBw7FvcyIpCgpnZ3Bsb3QoUmhCYWphczEsIGFlcyh4PUdlbiwgeT1FZGFkLCBmaWxsPUdlbikpICsgCiAgZ2VvbV9ib3hwbG90KCkgCgpnZ3Bsb3QoUmhDb2xhYjEsIGFlcyh4PUdlbiwgeT1TYWxfRGlhcmlvLCBmaWxsPUdlbikpICsgCiAgZ2VvbV9ib3hwbG90KCkgCgpnZ3Bsb3QoUmhDb2xhYjEsIGFlcyhHZW4sU2FsX0RpYXJpbyxmaWxsPUdlbikpICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiU2V0MiIpICsgZ2d0aXRsZSgiU2FsYXJpbyBEaWFyaW8gcG9yIEdlbmVybyIpCgoKZ2dwbG90KFJoQmFqYXMxLCBhZXMoeD1HZW4sIHk9U2FsX0lNU1MsIGZpbGw9R2VuKSkgKyAKICBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIpICsgCiAgZmFjZXRfZ3JpZCh+RXN0Q2l2KSArIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIpCgoKYGBgCgojIyAgKkNvbmNsdXNpb25lcyoKCiMjIyMgIEVuIHByb21lZGlvIGxhIG1heW9yIHBhcnRlIGRlIGxvcyBjb2xhYm9yYWRvcmVzIGRlIEZvcm0gdGllbmVuIHVuYSBlZGFkIGRlIGVudHJlIDIwIHkgMzAgYcOxb3MsIGhheSBlbXBsZWFkYXMgcXVlIHRpZW5lbiB1biBtw6F4aW1vIGRlIDU2IGHDsW9zIG1pZW50cmFzIHF1ZSBoYXkgdW4gZW1wbGVhZG8gcXVlIHBhc2EgeWEgZGUgbG9zIDYwIGHDsW9zIGRlIGVkYWQuIEVudHJlIGhvbWJyZXMgeSBtdWplcmVzIGVzdMOhbiBlbiB1biByYW5nbyBkZSAyMCBhIDQwIGHDsW9zIGRlIGVkYWQKCiMjIyMgIEVsIHNhbGRvIHByb21lZGlvIHRhbnRvIHBhcmEgaG9tYnJlcyBjb21vIHBhcmEgbXVqZXJlcyByb25kYSBlbiB1biBtb250byBkZSAxNzAgeSAxODAgcGVzb3MsIHBlcm8gaGF5IHVuYSBlbXBsZWFkYSBxdWUgbGxlZ2EgYSB1biBzYWxhcmlvIGRpYXJpbyBkZSA0NDEgcGVzb3MsIGR1cGxpY2FuZG8gZWwgc2FsZG8gcHJvbWVkaW8gZGUgbGEgbWF5b3IgcGFydGUgZGUgbG9zIGVtcGxlYWRvcyBkZSBsYSBjb21wYcOxw61hLiAKCiMjIyMgIEVuIGN1YW50byBhIHNvbHRlcm9zIHkgY2FzYWRvcyBsYSBtdWplciB0aWVuZSB1biBzYWxhcmlvIG3DoXMgZWxldmFkbyBxdWUgZWwgZGUgbG9zIGhvbWJyZXMuCgoKCgoKCgoKCgoKCgoKCgoKCgoK