ENTREGABLE 2.1

a. FORM – Recursos Humanos

1) ¿Cuántas variables y cuantos registros tiene la base de datos?

En el primer sheet, “Colaboradores”

bd_rh_colaboradores<-read.csv("/Users/elenavela/Downloads/colabbb.csv")
summary(bd_rh_colaboradores)
##  No..De.Empleado   APELLIDOS            NOMBRE          AÑO.DE.NACIMIENTO
##  Min.   :  1.00   Length:111         Length:111         Min.   :1955     
##  1st Qu.: 25.25   Class :character   Class :character   1st Qu.:1978     
##  Median : 49.50   Mode  :character   Mode  :character   Median :1989     
##  Mean   : 57.79                                         Mean   :1987     
##  3rd Qu.: 84.00                                         3rd Qu.:1997     
##  Max.   :148.00                                         Max.   :2022     
##  NA's   :21                                             NA's   :3        
##     GENERO              RFC            FECHA.DE.ALTA    Primer.mes  
##  Length:111         Length:111         Min.   :2010   Min.   :2010  
##  Class :character   Class :character   1st Qu.:2020   1st Qu.:2021  
##  Mode  :character   Mode  :character   Median :2022   Median :2022  
##                                        Mean   :2021   Mean   :2021  
##                                        3rd Qu.:2022   3rd Qu.:2022  
##                                        Max.   :2022   Max.   :2022  
##                                        NA's   :1      NA's   :3     
##     X4to.mes         BAJA       PUESTO          DEPARTAMENTO      
##  Min.   :1905   Min.   :3    Length:111         Length:111        
##  1st Qu.:2021   1st Qu.:3    Class :character   Class :character  
##  Median :2022   Median :3    Mode  :character   Mode  :character  
##  Mean   :2020   Mean   :3                                         
##  3rd Qu.:2022   3rd Qu.:3                                         
##  Max.   :2022   Max.   :3                                         
##  NA's   :3      NA's   :98                                        
##  NO.SEGURO.SOCIAL   SALARIO.DIARIO.IMSS FACTOR.CRED.INFONAVIT
##  Length:111         Min.   :144.4       Length:111           
##  Class :character   1st Qu.:176.7       Class :character     
##  Mode  :character   Median :180.7       Mode  :character     
##                     Mean   :179.1                            
##                     3rd Qu.:180.7                            
##                     Max.   :337.1                            
##                                                              
##  N...CREDITO.INFONAVIT LUGAR.DE.NACIMIENTO     CURP          
##  Length:111            Length:111          Length:111        
##  Class :character      Class :character    Class :character  
##  Mode  :character      Mode  :character    Mode  :character  
##                                                              
##                                                              
##                                                              
##                                                              
##     CALLE           NUMERO.INTERNO       COLONIA           MUNICIPIO        
##  Length:111         Length:111         Length:111         Length:111        
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##     ESTADO          CODIGO.POSTAL   ESTADO.CIVIL       TARJETA....CUENTA 
##  Length:111         Min.   :25016   Length:111         Length:111        
##  Class :character   1st Qu.:66642   Class :character   Class :character  
##  Mode  :character   Median :66646   Mode  :character   Mode  :character  
##                     Mean   :63300                                        
##                     3rd Qu.:66649                                        
##                     Max.   :67493                                        
## 

Se tienen 26 variables y 113 registros.

2) Clasifica cada variable en cualitativa, cuantitativa discreta o cuantitativa continua

str(bd_rh_colaboradores)
## 'data.frame':    111 obs. of  26 variables:
##  $ No..De.Empleado      : int  4 15 7 8 26 24 89 88 86 78 ...
##  $ APELLIDOS            : chr  "CAZARES MORALES" "CAZARES AMAYA" "PERALTA MARTINEZ" "TOVAR PEREZ" ...
##  $ NOMBRE               : chr  "MARIA" "GUADALUPE" "ARACELY" "PEDRO ISAI" ...
##  $ AÑO.DE.NACIMIENTO    : int  1990 1984 1984 1985 1984 1962 1966 1976 1963 1979 ...
##  $ GENERO               : chr  "FEMENINO" "MASCULINO" "FEMENINO" "MASCULINO" ...
##  $ RFC                  : chr  "CAMM9005019S8" "CAAG8207168N6" "PEMA6707017U2" "TOPP961210989" ...
##  $ FECHA.DE.ALTA        : int  2013 2018 2015 2016 2020 2020 2022 2022 2022 2022 ...
##  $ Primer.mes           : int  2013 2018 2015 2016 2020 2020 2022 2022 2022 2022 ...
##  $ X4to.mes             : int  2013 2019 2015 2016 2020 2020 2022 2022 2022 2022 ...
##  $ BAJA                 : int  NA NA NA NA NA NA 3 3 3 3 ...
##  $ PUESTO               : chr  "SUPERVISORA" "MANTENIMIENTO" "COSTURERA" "AYUDANTE GENERAL" ...
##  $ DEPARTAMENTO         : chr  "Produccion Cartón MC" "EHS" "Costura" "Producción Retorn" ...
##  $ NO.SEGURO.SOCIAL     : chr  "4.31E+14" "4.70E+14" "3876700802" "4.31E+13" ...
##  $ SALARIO.DIARIO.IMSS  : num  337 280 260 241 241 ...
##  $ FACTOR.CRED.INFONAVIT: chr  "" "" "" "" ...
##  $ N...CREDITO.INFONAVIT: chr  "" "" "" "" ...
##  $ LUGAR.DE.NACIMIENTO  : chr  "" "" "" "" ...
##  $ CURP                 : chr  "CAMM900501MVZZRR00" "CAAG820716HNLZMD05" "PEMA670701MNLRRR02" "TOPP961210HNLVRD07" ...
##  $ CALLE                : chr  "RIO ACAPONETA" "ESTAMBUL" "ALAMO TEMBLON" "RIO ACAPONETA" ...
##  $ NUMERO.INTERNO       : chr  "" "" "" "" ...
##  $ COLONIA              : chr  "PUEBLO NUEVO" "PASEO DE LAS FLORES" "ALAMOS DEL PARQUE" "PUEBLO NUEVO 5TO SECTOR" ...
##  $ MUNICIPIO            : chr  "APODACA" "APODACA" "APODACA" "APODACA" ...
##  $ ESTADO               : chr  "Nuevo Leon" "Nuevo Leon" "Nuevo Leon" "Nuevo Leon" ...
##  $ CODIGO.POSTAL        : int  66649 66643 66633 66649 66646 66646 66643 66643 66670 66646 ...
##  $ ESTADO.CIVIL         : chr  "Casado" "Soltero" "Casado" "Casado" ...
##  $ TARJETA....CUENTA    : chr  "BANORTE" "BANORTE" "BANORTE" "BANORTE" ...
Variable Type
No.De.Empleado Cualitativa (nominal)
Apellidos Cualitativa (nominal)
Nombre Cualitativa (nominal)
FechaNacimiento Cuantitativa (discreta)
Genero Cualitativa (nominal)
RFC Cualitativa (nominal)
FechaAlta Cuantitativa (discreta)
PrimerMes Cuantitativa (discreta)
4toMes Cuantitativa (discreta)
Baja Cuantitativa (discreta)
Puesto Cualitativa (nominal)
Departamento Cualitativa (nominal)
SeguroSocial Cualitativa (nominal)
SalarioDiario Cuantitativa (continuo)
FactorInfonavit Cualitativa (nominal)
N.CreditoInfonavit Cualitativa (nominal)
LugarNacimiento Cualitativa (nominal)
CURP Cualitativa (nominal)
Calle Cualitativa (nominal)
NumeroInterno Cualitativa (nominal)
Colonia Cualitativa (nominal)
Municipio Cualitativa (nominal)
Estado Cualitativa (nominal)
CodigoPostal Cualitativa (nominal)
EstadoCivil Cualitativa (nominal)
Tarjeta Cualitativa (nominal)

3) Elige la escala de medición de cada variable.

Variable Medicion
No.De.Empleado Números
Apellidos No aplica
Nombre No aplica
FechaNacimiento Año
Genero No aplica
RFC No aplica
FechaAlta Año
PrimerMes Año
4toMes Año
Baja Números
Puesto No aplica
Departamento No aplica
SeguroSocial No aplica
SalarioDiario Pesos mexicanos
FactorInfonavit Pesos mexicanos
N.CreditoInfonavit No aplica
LugarNacimiento No aplica
CURP No aplica
Calle No aplica
NumeroInterno No aplica
Colonia No aplica
Municipio No aplica
Estado No aplica
CodigoPostal No aplica
EstadoCivil No aplica
Tarjeta No aplica

4) Aplica al menos 2 técnicas de limpieza de bases de datos y explícalas brevemente, ¿por qué realizaste esas técnicas?

Técnica 3, ERRORES TIPOGRÁFICOS Y ERRORES SIMILARES
Primeramente, se notó que en el excel algunas fechas estaban con formato día/mes/año y otros mes/día/año. Por lo que para tener la información más real y precisa posible, se extrajeron solo los AÑOS para el análisis.

Técnica 1, REMOVER DATOS IRRELEVANTES Existen muchas variables en la base de datos, y muchas de estas contienen datos personales de los colaboradores, por lo que es información muy sensible y que no aporta mucho insight al análisis. Por lo tanto, se ha escogido la técnica de remover datos irrelevantes a la información personal de los empleados que no sirvan mucho para el análisis, como lo es su nombre, apellido, RFC, CURP. Sin embargo, otros datos personales se han mantenido para hacer un análisis de diversidad e inclusión (género, fecha de nacimiento, estado civil).

summary(bd_rh_colaboradores)
##  No..De.Empleado   APELLIDOS            NOMBRE          AÑO.DE.NACIMIENTO
##  Min.   :  1.00   Length:111         Length:111         Min.   :1955     
##  1st Qu.: 25.25   Class :character   Class :character   1st Qu.:1978     
##  Median : 49.50   Mode  :character   Mode  :character   Median :1989     
##  Mean   : 57.79                                         Mean   :1987     
##  3rd Qu.: 84.00                                         3rd Qu.:1997     
##  Max.   :148.00                                         Max.   :2022     
##  NA's   :21                                             NA's   :3        
##     GENERO              RFC            FECHA.DE.ALTA    Primer.mes  
##  Length:111         Length:111         Min.   :2010   Min.   :2010  
##  Class :character   Class :character   1st Qu.:2020   1st Qu.:2021  
##  Mode  :character   Mode  :character   Median :2022   Median :2022  
##                                        Mean   :2021   Mean   :2021  
##                                        3rd Qu.:2022   3rd Qu.:2022  
##                                        Max.   :2022   Max.   :2022  
##                                        NA's   :1      NA's   :3     
##     X4to.mes         BAJA       PUESTO          DEPARTAMENTO      
##  Min.   :1905   Min.   :3    Length:111         Length:111        
##  1st Qu.:2021   1st Qu.:3    Class :character   Class :character  
##  Median :2022   Median :3    Mode  :character   Mode  :character  
##  Mean   :2020   Mean   :3                                         
##  3rd Qu.:2022   3rd Qu.:3                                         
##  Max.   :2022   Max.   :3                                         
##  NA's   :3      NA's   :98                                        
##  NO.SEGURO.SOCIAL   SALARIO.DIARIO.IMSS FACTOR.CRED.INFONAVIT
##  Length:111         Min.   :144.4       Length:111           
##  Class :character   1st Qu.:176.7       Class :character     
##  Mode  :character   Median :180.7       Mode  :character     
##                     Mean   :179.1                            
##                     3rd Qu.:180.7                            
##                     Max.   :337.1                            
##                                                              
##  N...CREDITO.INFONAVIT LUGAR.DE.NACIMIENTO     CURP          
##  Length:111            Length:111          Length:111        
##  Class :character      Class :character    Class :character  
##  Mode  :character      Mode  :character    Mode  :character  
##                                                              
##                                                              
##                                                              
##                                                              
##     CALLE           NUMERO.INTERNO       COLONIA           MUNICIPIO        
##  Length:111         Length:111         Length:111         Length:111        
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##     ESTADO          CODIGO.POSTAL   ESTADO.CIVIL       TARJETA....CUENTA 
##  Length:111         Min.   :25016   Length:111         Length:111        
##  Class :character   1st Qu.:66642   Class :character   Class :character  
##  Mode  :character   Median :66646   Mode  :character   Mode  :character  
##                     Mean   :63300                                        
##                     3rd Qu.:66649                                        
##                     Max.   :67493                                        
## 

Eliminar columnas

Se eliminan las columnas que no aportan mucho al análisis de datos.

  bd_rh_colaboradores2<-bd_rh_colaboradores
  bd_rh_colaboradores2<-subset(bd_rh_colaboradores2,select=-c(No..De.Empleado,TARJETA....CUENTA,CODIGO.POSTAL,COLONIA,NUMERO.INTERNO,CALLE,CURP,FACTOR.CRED.INFONAVIT,NO.SEGURO.SOCIAL,RFC,APELLIDOS,NOMBRE))
summary(bd_rh_colaboradores2)
##  AÑO.DE.NACIMIENTO    GENERO          FECHA.DE.ALTA    Primer.mes  
##  Min.   :1955      Length:111         Min.   :2010   Min.   :2010  
##  1st Qu.:1978      Class :character   1st Qu.:2020   1st Qu.:2021  
##  Median :1989      Mode  :character   Median :2022   Median :2022  
##  Mean   :1987                         Mean   :2021   Mean   :2021  
##  3rd Qu.:1997                         3rd Qu.:2022   3rd Qu.:2022  
##  Max.   :2022                         Max.   :2022   Max.   :2022  
##  NA's   :3                            NA's   :1      NA's   :3     
##     X4to.mes         BAJA       PUESTO          DEPARTAMENTO      
##  Min.   :1905   Min.   :3    Length:111         Length:111        
##  1st Qu.:2021   1st Qu.:3    Class :character   Class :character  
##  Median :2022   Median :3    Mode  :character   Mode  :character  
##  Mean   :2020   Mean   :3                                         
##  3rd Qu.:2022   3rd Qu.:3                                         
##  Max.   :2022   Max.   :3                                         
##  NA's   :3      NA's   :98                                        
##  SALARIO.DIARIO.IMSS N...CREDITO.INFONAVIT LUGAR.DE.NACIMIENTO
##  Min.   :144.4       Length:111            Length:111         
##  1st Qu.:176.7       Class :character      Class :character   
##  Median :180.7       Mode  :character      Mode  :character   
##  Mean   :179.1                                                
##  3rd Qu.:180.7                                                
##  Max.   :337.1                                                
##                                                               
##   MUNICIPIO            ESTADO          ESTADO.CIVIL      
##  Length:111         Length:111         Length:111        
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##                                                          
##                                                          
##                                                          
## 

Técnica 5, VALORES FALTANTES
Con un rápido vistazo de la base de datos, se podía observar que faltaban ciertos valores en las diferentes variables. Si faltaban muchos datos en una sola variable, se optó por eliminar la columna, mientras que en otros casos donde haya pocos por variables sólo se eliminaron los registros.

¿Cuántos NA tengo en la base de datos?

sum(is.na(bd_rh_colaboradores2))
## [1] 108

¿Cuántos NA tengo por variable?

sapply(bd_rh_colaboradores2,function(x) sum(is.na(x)))
##     AÑO.DE.NACIMIENTO                GENERO         FECHA.DE.ALTA 
##                     3                     0                     1 
##            Primer.mes              X4to.mes                  BAJA 
##                     3                     3                    98 
##                PUESTO          DEPARTAMENTO   SALARIO.DIARIO.IMSS 
##                     0                     0                     0 
## N...CREDITO.INFONAVIT   LUGAR.DE.NACIMIENTO             MUNICIPIO 
##                     0                     0                     0 
##                ESTADO          ESTADO.CIVIL 
##                     0                     0

En la base de datos se tienen los NA en una sola variable: BAJA. Aqui faltan 100 de 113 registros, por lo que resulta mejor ELIMINAR la columna en su totalidad.

bd_rh_colaboradores3<-bd_rh_colaboradores2
  bd_rh_colaboradores3<-subset(bd_rh_colaboradores2,select=-c(BAJA))
summary(bd_rh_colaboradores3)
##  AÑO.DE.NACIMIENTO    GENERO          FECHA.DE.ALTA    Primer.mes  
##  Min.   :1955      Length:111         Min.   :2010   Min.   :2010  
##  1st Qu.:1978      Class :character   1st Qu.:2020   1st Qu.:2021  
##  Median :1989      Mode  :character   Median :2022   Median :2022  
##  Mean   :1987                         Mean   :2021   Mean   :2021  
##  3rd Qu.:1997                         3rd Qu.:2022   3rd Qu.:2022  
##  Max.   :2022                         Max.   :2022   Max.   :2022  
##  NA's   :3                            NA's   :1      NA's   :3     
##     X4to.mes       PUESTO          DEPARTAMENTO       SALARIO.DIARIO.IMSS
##  Min.   :1905   Length:111         Length:111         Min.   :144.4      
##  1st Qu.:2021   Class :character   Class :character   1st Qu.:176.7      
##  Median :2022   Mode  :character   Mode  :character   Median :180.7      
##  Mean   :2020                                         Mean   :179.1      
##  3rd Qu.:2022                                         3rd Qu.:180.7      
##  Max.   :2022                                         Max.   :337.1      
##  NA's   :3                                                               
##  N...CREDITO.INFONAVIT LUGAR.DE.NACIMIENTO  MUNICIPIO        
##  Length:111            Length:111          Length:111        
##  Class :character      Class :character    Class :character  
##  Mode  :character      Mode  :character    Mode  :character  
##                                                              
##                                                              
##                                                              
##                                                              
##     ESTADO          ESTADO.CIVIL      
##  Length:111         Length:111        
##  Class :character   Class :character  
##  Mode  :character   Mode  :character  
##                                       
##                                       
##                                       
## 

Se vuelve a ver lo de NAs

¿Cuántos NA tengo por variable?

sapply(bd_rh_colaboradores3,function(x) sum(is.na(x)))
##     AÑO.DE.NACIMIENTO                GENERO         FECHA.DE.ALTA 
##                     3                     0                     1 
##            Primer.mes              X4to.mes                PUESTO 
##                     3                     3                     0 
##          DEPARTAMENTO   SALARIO.DIARIO.IMSS N...CREDITO.INFONAVIT 
##                     0                     0                     0 
##   LUGAR.DE.NACIMIENTO             MUNICIPIO                ESTADO 
##                     0                     0                     0 
##          ESTADO.CIVIL 
##                     0

Eliminar renglones de NAs

bd_rh_colaboradores4<-bd_rh_colaboradores3
bd_rh_colaboradores4<-na.omit(bd_rh_colaboradores4)      
summary(bd_rh_colaboradores4)
##  AÑO.DE.NACIMIENTO    GENERO          FECHA.DE.ALTA    Primer.mes  
##  Min.   :1955      Length:106         Min.   :2010   Min.   :2010  
##  1st Qu.:1978      Class :character   1st Qu.:2021   1st Qu.:2020  
##  Median :1990      Mode  :character   Median :2022   Median :2022  
##  Mean   :1987                         Mean   :2021   Mean   :2021  
##  3rd Qu.:1997                         3rd Qu.:2022   3rd Qu.:2022  
##  Max.   :2022                         Max.   :2022   Max.   :2022  
##     X4to.mes       PUESTO          DEPARTAMENTO       SALARIO.DIARIO.IMSS
##  Min.   :2010   Length:106         Length:106         Min.   :144.4      
##  1st Qu.:2021   Class :character   Class :character   1st Qu.:176.7      
##  Median :2022   Mode  :character   Mode  :character   Median :180.7      
##  Mean   :2021                                         Mean   :179.4      
##  3rd Qu.:2022                                         3rd Qu.:180.7      
##  Max.   :2022                                         Max.   :337.1      
##  N...CREDITO.INFONAVIT LUGAR.DE.NACIMIENTO  MUNICIPIO        
##  Length:106            Length:106          Length:106        
##  Class :character      Class :character    Class :character  
##  Mode  :character      Mode  :character    Mode  :character  
##                                                              
##                                                              
##                                                              
##     ESTADO          ESTADO.CIVIL      
##  Length:106         Length:106        
##  Class :character   Class :character  
##  Mode  :character   Mode  :character  
##                                       
##                                       
## 
sapply(bd_rh_colaboradores4,function(x) sum(is.na(x)))
##     AÑO.DE.NACIMIENTO                GENERO         FECHA.DE.ALTA 
##                     0                     0                     0 
##            Primer.mes              X4to.mes                PUESTO 
##                     0                     0                     0 
##          DEPARTAMENTO   SALARIO.DIARIO.IMSS N...CREDITO.INFONAVIT 
##                     0                     0                     0 
##   LUGAR.DE.NACIMIENTO             MUNICIPIO                ESTADO 
##                     0                     0                     0 
##          ESTADO.CIVIL 
##                     0

Eliminar error de fecha de nacimiento (existen datos que muestran que alguien nació en el 2022)

  bd_rh_colaboradores5<-bd_rh_colaboradores4
  bd_rh_colaboradores5<-bd_rh_colaboradores5[bd_rh_colaboradores5$AÑO.DE.NACIMIENTO<2004,]
  summary(bd_rh_colaboradores5)
##  AÑO.DE.NACIMIENTO    GENERO          FECHA.DE.ALTA    Primer.mes  
##  Min.   :1955      Length:104         Min.   :2010   Min.   :2010  
##  1st Qu.:1978      Class :character   1st Qu.:2021   1st Qu.:2020  
##  Median :1989      Mode  :character   Median :2022   Median :2022  
##  Mean   :1987                         Mean   :2021   Mean   :2021  
##  3rd Qu.:1996                         3rd Qu.:2022   3rd Qu.:2022  
##  Max.   :2003                         Max.   :2022   Max.   :2022  
##     X4to.mes       PUESTO          DEPARTAMENTO       SALARIO.DIARIO.IMSS
##  Min.   :2010   Length:104         Length:104         Min.   :144.4      
##  1st Qu.:2021   Class :character   Class :character   1st Qu.:176.7      
##  Median :2022   Mode  :character   Mode  :character   Median :180.7      
##  Mean   :2021                                         Mean   :179.3      
##  3rd Qu.:2022                                         3rd Qu.:180.7      
##  Max.   :2022                                         Max.   :337.1      
##  N...CREDITO.INFONAVIT LUGAR.DE.NACIMIENTO  MUNICIPIO        
##  Length:104            Length:104          Length:104        
##  Class :character      Class :character    Class :character  
##  Mode  :character      Mode  :character    Mode  :character  
##                                                              
##                                                              
##                                                              
##     ESTADO          ESTADO.CIVIL      
##  Length:104         Length:104        
##  Class :character   Class :character  
##  Mode  :character   Mode  :character  
##                                       
##                                       
## 

Queda limpia y lista para analizar la base de datos.

Exportar

rh_limpia <-bd_rh_colaboradores5
write.csv(rh_limpia, file ="rh_limpia5.csv", row.names = FALSE)

5) Incluye una breve reflexión de la actividad.

Esta base de datos fue tomando en cuenta los datos otorgados por Form de su gestión de Recursos Humanos. Obtenemos los datos de los colaboradores, y algunas de sus características que podrían resultar interesantes para proponer estrategias fundamentadas a la organización. Me encontré con diferentes retos al trabajar primeramente con los datos, como lo fueron algunos datos faltantes y errores de dedo (fechas en idioma español y otras en inglés de EUA).

Una importante reflexión de esta actividad fue como R me puede ayudar a preparar una base de datos de manera que tengamos menos errores y hacer el proceso más eficiente. Este proceso realizado será de gran utilidad para las próximas actividades y la resolución del reto.

ENTREGABLE 2.3

Realizar un análisis estadístico descriptivo en el que logres destacar el conjunto de datos, que apoyan a la empresa a mejorar su operación. Incorpora al menos dos propuestas concretas, apoyadas de tu análisis en donde se incluye al menos:
(1) Tabla de frecuencia,
(opcional) Tablas cruzadas,
(2-3) Gráficos de datos cualitativos y cuantitativos, barras, histogramas, line plots (2-3) Gráficos de dispersión.

Análisis estadístico descriptivo.

Librerías que se podrían usar

library(foreign)
library(dplyr)        # data manipulation 
library(forcats)      # to work with categorical variables
library(ggplot2)      # data visualization 
library(janitor)      # data exploration and cleaning 
#install.packages("psych")
library(corrplot)     # correlation plots
library(lmtest)       # diagnostic checks - linear regression analysis 
library(car)          # diagnostic checks - linear regression analysis

Importar base de datos.
Se ha decidido también borrar el número de crédito de infonavit, se elimina la columna.

#file.choose()
rh<-read.csv("/Users/elenavela/Downloads/rh_limpia5.csv")
summary(rh)
##  AÑO.DE.NACIMIENTO    GENERO          FECHA.DE.ALTA    Primer.mes  
##  Min.   :1955      Length:104         Min.   :2010   Min.   :2010  
##  1st Qu.:1978      Class :character   1st Qu.:2021   1st Qu.:2020  
##  Median :1989      Mode  :character   Median :2022   Median :2022  
##  Mean   :1987                         Mean   :2021   Mean   :2021  
##  3rd Qu.:1996                         3rd Qu.:2022   3rd Qu.:2022  
##  Max.   :2003                         Max.   :2022   Max.   :2022  
##     X4to.mes       PUESTO          DEPARTAMENTO       SALARIO.DIARIO.IMSS
##  Min.   :2010   Length:104         Length:104         Min.   :144.4      
##  1st Qu.:2021   Class :character   Class :character   1st Qu.:176.7      
##  Median :2022   Mode  :character   Mode  :character   Median :180.7      
##  Mean   :2021                                         Mean   :179.3      
##  3rd Qu.:2022                                         3rd Qu.:180.7      
##  Max.   :2022                                         Max.   :337.1      
##  N...CREDITO.INFONAVIT LUGAR.DE.NACIMIENTO  MUNICIPIO        
##  Length:104            Length:104          Length:104        
##  Class :character      Class :character    Class :character  
##  Mode  :character      Mode  :character    Mode  :character  
##                                                              
##                                                              
##                                                              
##     ESTADO          ESTADO.CIVIL      
##  Length:104         Length:104        
##  Class :character   Class :character  
##  Mode  :character   Mode  :character  
##                                       
##                                       
## 
rh1<-rh
rh1<-subset(rh1,select=-c(N...CREDITO.INFONAVIT))

summary(rh1)
##  AÑO.DE.NACIMIENTO    GENERO          FECHA.DE.ALTA    Primer.mes  
##  Min.   :1955      Length:104         Min.   :2010   Min.   :2010  
##  1st Qu.:1978      Class :character   1st Qu.:2021   1st Qu.:2020  
##  Median :1989      Mode  :character   Median :2022   Median :2022  
##  Mean   :1987                         Mean   :2021   Mean   :2021  
##  3rd Qu.:1996                         3rd Qu.:2022   3rd Qu.:2022  
##  Max.   :2003                         Max.   :2022   Max.   :2022  
##     X4to.mes       PUESTO          DEPARTAMENTO       SALARIO.DIARIO.IMSS
##  Min.   :2010   Length:104         Length:104         Min.   :144.4      
##  1st Qu.:2021   Class :character   Class :character   1st Qu.:176.7      
##  Median :2022   Mode  :character   Mode  :character   Median :180.7      
##  Mean   :2021                                         Mean   :179.3      
##  3rd Qu.:2022                                         3rd Qu.:180.7      
##  Max.   :2022                                         Max.   :337.1      
##  LUGAR.DE.NACIMIENTO  MUNICIPIO            ESTADO          ESTADO.CIVIL      
##  Length:104          Length:104         Length:104         Length:104        
##  Class :character    Class :character   Class :character   Class :character  
##  Mode  :character    Mode  :character   Mode  :character   Mode  :character  
##                                                                              
##                                                                              
## 

Tabla de frecuencia

library(dplyr)
library(janitor)

Se agrega una columna de empleados, y que sigue un número seguido. Se borró la anterior porque el número de empleados no seguía un orden lógico (del 2 se saltaba al 5).

rh2 <- rh1
rh2 <- cbind(rh2,Empleado=c("Empleado"))
#summary(rh2)

Se generan las tablas de frecuencias de las variables CUALITATIVAS.

?table
## Help on topic 'table' was found in the following packages:
## 
##   Package               Library
##   vctrs                 /Library/Frameworks/R.framework/Versions/4.2/Resources/library
##   base                  /Library/Frameworks/R.framework/Resources/library
## 
## 
## Using the first match ...
genero<-table(rh2$GENERO)
#genero
knitr::kable(genero)
Var1 Freq
FEMENINO 59
MASCULINO 45
puesto<-table(rh2$PUESTO)
#puesto
knitr::kable(puesto)
Var1 Freq
AY. GENERAL 7
AYUDANTE DE MANTENIMIENTO 1
Ayudante general 1
AYUDANTE GENERAL 54
CHOFER 3
CHOFER GESTOR 1
COSTURERA 10
CUSTOMER SERVICE INF 1
ENFERMERA 1
GESTOR 1
GUARDIA DE SEGURIDAD 1
INSPECTOR DE CALIDAD 1
INSPECTORA DE CALIDAD 1
LIDER 1
LIMPIEZA 1
MANTENIMIENTO 1
MONTACARGUISTA 1
MOZO 1
OP. FLEXO-RANURADORA-REFILADORA 1
OPERADOR SIERRA 1
PINTOR 1
RECIBO 1
RESIDENTE 4
SOLDADOR 5
Supervisor de M√°quin 1
Supervisor de pegado 1
SUPERVISORA 1
departamento<-table(rh2$DEPARTAMENTO)
#departamento
knitr::kable(departamento)
Var1 Freq
37
Ay.flexo 1
Calidad 2
Cedis 6
CEDIS 2
Celdas 3
CORTADORAS 1
Costura 6
COSTURA 1
Costura T2 1
EHS 3
Embarques 4
Limpieza 1
Materiales 1
Paileria 4
Producción Retorn 8
Produccion Cartón MC 5
Produccion Cartón MDL 7
Rotativa 1
Stabilus 6
Troquel 4
lugar<-table(rh2$LUGAR.DE.NACIMIENTO)
#lugar
knitr::kable(lugar)
Var1 Freq
36
ACAYUCAN VERACRUZ 1
ACAYUCAN, VERACRUZ 1
CANATLAN, DURANGO 1
CANCUN, QUINTANA ROO 1
COMALCALCO, TABASCO 1
CUAHUTEMOC, DISTRITO FEDERAL 1
EBANO, SAN LUIS POTOSI 1
GOMEZ PALACIO, DURANGO 1
GUADALUPE, NUEVO LEON 3
HIDALGO, TAMAULIPAS 2
HONDURAS, SANTA BARBARA 1
IXHUATAN, CHIAPAS 1
JESUS CARRANZA, VERACRUZ 1
LAS CHOAPAS, VERACRUZ 1
LLERA, TAMAULIPAS 1
MIGUEL HIDALGO CIUDAD DE MEXICO 1
MONTEMORELOS, NUEVO LEON 1
MONTERREY NL 1
MONTERREY NUEVO LEON 1
MONTERREY, NUEVO LEON 14
NUEVO LEON 1
OLUTA, VERACRUZ 1
PARRAS COAHUILA DE ZARAGOZA 1
RAMOS ARIZPE, COAHUILA 1
RAYON, SAN LUIS POTOSI 1
SALAMANCA, GUANAJUATO 1
SALTILLO, COAHUILA 2
SAN JUAN EVANGELISYA. VERACRUZ 1
SAN LUIS POTOSI 1
SAN NICOLAS DE LOS GARZA 1
SAN NICOLAS DE LOS GARZA NUEVO LEON. 1
SAN NICOLAS DE LOS GARZA, NUEVO LEON 11
SAN PEDRO GARZA GARCIA, NUEVO LEON 1
TAMAPACHE, VERACRUZ 1
TANTOYUCA, VERACRUZ 1
TERMINAL DE PROVIDENCIA - ZACATECAS 1
VERACRUZ 1
VERACRUZ, TANTOYUCA 1
VILLA CORZO, CHIAPAS 1
ZAMORA, VERACRUZ 1
ZONGOLICA, VERACRUZ 1
municipio<-table(rh2$MUNICIPIO)
#municipio
knitr::kable(municipio)
Var1 Freq
APODACA 67
CANADA BLANCA 1
GUADALUPE 5
JUAREZ 9
MONTERREY 3
PESQUERIA 9
RAMOS ARIZPE 3
SALTILLO 5
SAN NICOLAS DE LOS G 2
estado<-table(rh2$ESTADO)
#estado
knitr::kable(estado)
Var1 Freq
Coahuila 9
Nuevo Leon 95
civil<-table(rh2$ESTADO.CIVIL)
#civil
knitr::kable(civil)
Var1 Freq
Casado 39
Divorciado 3
Soltero 42
Union libre 20

Tablas cruzada

cruzada1<-table(rh2$GENERO,rh$AÑO.DE.NACIMIENTO)

knitr::kable(cruzada1)
1955 1962 1963 1964 1966 1967 1968 1969 1972 1973 1974 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1987 1988 1989 1990 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003
FEMENINO 0 2 1 0 2 1 0 3 2 1 0 2 2 1 2 1 1 3 1 4 1 2 2 0 4 2 4 3 2 2 2 0 2 0 2 2 0
MASCULINO 1 0 0 1 0 2 1 2 0 1 1 0 1 1 0 0 0 1 0 2 1 1 1 2 2 1 1 2 0 2 2 1 2 2 3 4 4
cruzada2<-table(rh2$ESTADO,rh2$GENERO)
knitr::kable(cruzada2)
FEMENINO MASCULINO
Coahuila 1 8
Nuevo Leon 58 37

Gráficos de datos cualitativos y cuantitativos

Datos cualitativos

Se obtiene primeramente una gráfica de barras que compara los diferentes estados civiles (actuales) de los colaboradores. Observamos que la gran mayoría son solteros o casados, y muy pocos divorciados.

barplot(prop.table(table(rh2$ESTADO.CIVIL)),col=c("orange","blue","red","green"),main="Estado Civil", ylab ="Frecuencias",las=1)

La siguiente pie chart nos da a conocer como existen más mujeres que hombres laborando actualmente en Form.

pie(prop.table(table(rh2$GENERO)),col=c("pink","blue"),main="Género", ylab ="Frecuencias",las=1)

Cambio en la base de datos, se elimina un valor incorrecto en el salario.

str(rh2)
## 'data.frame':    104 obs. of  13 variables:
##  $ AÑO.DE.NACIMIENTO  : int  1990 1984 1984 1985 1984 1962 1966 1976 1963 1979 ...
##  $ GENERO             : chr  "FEMENINO" "MASCULINO" "FEMENINO" "MASCULINO" ...
##  $ FECHA.DE.ALTA      : int  2013 2018 2015 2016 2020 2020 2022 2022 2022 2022 ...
##  $ Primer.mes         : int  2013 2018 2015 2016 2020 2020 2022 2022 2022 2022 ...
##  $ X4to.mes           : int  2013 2019 2015 2016 2020 2020 2022 2022 2022 2022 ...
##  $ PUESTO             : chr  "SUPERVISORA" "MANTENIMIENTO" "COSTURERA" "AYUDANTE GENERAL" ...
##  $ DEPARTAMENTO       : chr  "Produccion Cartón MC" "EHS" "Costura" "Producción Retorn" ...
##  $ SALARIO.DIARIO.IMSS: num  337 280 260 241 241 ...
##  $ LUGAR.DE.NACIMIENTO: chr  "" "" "" "" ...
##  $ MUNICIPIO          : chr  "APODACA" "APODACA" "APODACA" "APODACA" ...
##  $ ESTADO             : chr  "Nuevo Leon" "Nuevo Leon" "Nuevo Leon" "Nuevo Leon" ...
##  $ ESTADO.CIVIL       : chr  "Casado" "Soltero" "Casado" "Casado" ...
##  $ Empleado           : chr  "Empleado" "Empleado" "Empleado" "Empleado" ...

Datos cuantitativos

El presente histograma ve el salario, y como la mayoría se concentra en entre los 150 y 200 pesos diarios. Con muy pocas excepciones que superan esto.

hist((rh2$SALARIO.DIARIO.IMSS),col=c("red"),main="Salario Diario",xlab="Salario en pesos mx")

Mediante el siguiente histograma notamos que la mayoría de los ingresos en Form son recientes, de entre el 202 y 2022; indicando que hay poca antigüedad en los colaboradores.

hist((rh2$Primer.mes),col=c("lightblue"),main="Año del Primer Mes en FORM",xlab="Año")

Gráficos de dispersión

El presente scatterplot compara la fecha de ingreso con el salario diario, en donde vemos que los que tienen mayor antigüedad (desde el 2010), ganan lo mismo que algunos de los recién ingresados. El más alto ingresando en el 2014 (aproximadamente)

plot(rh2$FECHA.DE.ALTA, rh2$SALARIO.DIARIO.IMSS, main = "Fecha de ingreso con salario diario",
     xlab = "Fecha de ingreso", ylab = "Salario",
     pch = 19, frame = FALSE)

Ahora, comparando el año de nacimiento con el salario, observamos que la persona con un mayor ingreso es alguien nacido en 1990. Fuera de algunos casos específicos, los salarios no ven diferencia a las edades.

plot(rh2$AÑO.DE.NACIMIENTO, rh2$SALARIO.DIARIO.IMSS, main = "Año de nacimiento",
     xlab = "Año de nacimiento", ylab = "Salario",
     pch = 19, frame = FALSE)

Analizando otra vez, la fecha de nacimiento, observamos que la gran parte de los empleados nacieron en la decada de los ochentas y de los noventas.

boxplot(rh2$AÑO.DE.NACIMIENTO , vertical = TRUE)

LS0tCnRpdGxlOiA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPioqRXRhcGEgMiBFbnRyZWdhYmxlcyoqCmF1dGhvcjogIkVsZW5hVmVsYV9BMDEyODM1MzUiCmRhdGU6ICIyMDIyLTA5LTA1IgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdGhlbWU6IHVuaXRlZAogICAgaGlnaGxpZ2h0OiB0YW5nbwogICAgY29kZV9kb3dubG9hZDogdHJ1ZQotLS0KPGltZyBzcmM9Ii9Vc2Vycy9lbGVuYXZlbGEvL0Rvd25sb2Fkcy9mb3JtLnBuZyI+ICAKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmxpZ2h0Ymx1ZSI+KipFTlRSRUdBQkxFIDIuMSoqPC9zcGFuPgoKIyMgYS4gRk9STSDigJMgUmVjdXJzb3MgSHVtYW5vcwoKIyMjIDEpIMK/Q3XDoW50YXMgdmFyaWFibGVzIHkgY3VhbnRvcyByZWdpc3Ryb3MgdGllbmUgbGEgYmFzZSBkZSBkYXRvcz8gCgpFbiBlbCBwcmltZXIgKnNoZWV0KiwgIkNvbGFib3JhZG9yZXMiCmBgYHtyfQpiZF9yaF9jb2xhYm9yYWRvcmVzPC1yZWFkLmNzdigiL1VzZXJzL2VsZW5hdmVsYS9Eb3dubG9hZHMvY29sYWJiYi5jc3YiKQpzdW1tYXJ5KGJkX3JoX2NvbGFib3JhZG9yZXMpCmBgYAoKU2UgdGllbmVuIDI2IHZhcmlhYmxlcyB5IDExMyByZWdpc3Ryb3MuIAoKIyMjIDIpIENsYXNpZmljYSBjYWRhIHZhcmlhYmxlIGVuIGN1YWxpdGF0aXZhLCBjdWFudGl0YXRpdmEgZGlzY3JldGEgbyBjdWFudGl0YXRpdmEgY29udGludWEgCgpgYGB7cn0Kc3RyKGJkX3JoX2NvbGFib3JhZG9yZXMpCmBgYAoKYGBge3IgZWNobyA9IEZBTFNFLCByZXN1bHRzID0gVFJVRX0KVmFyaWFibGU8LWMoImBOby5EZS5FbXBsZWFkb2AiLCJgQXBlbGxpZG9zYCIsImBOb21icmVgIiwiYEZlY2hhTmFjaW1pZW50b2AiLCJgR2VuZXJvYCIsImBSRkNgIiwiYEZlY2hhQWx0YWAiLCJgUHJpbWVyTWVzYCIsImA0dG9NZXNgIiwiYEJhamFgIiwiYFB1ZXN0b2AiLCJgRGVwYXJ0YW1lbnRvYCIsImBTZWd1cm9Tb2NpYWxgIiwiYFNhbGFyaW9EaWFyaW9gIiwiYEZhY3RvckluZm9uYXZpdGAiLCJgTi5DcmVkaXRvSW5mb25hdml0YCIsImBMdWdhck5hY2ltaWVudG9gIiwiYENVUlBgIiwiYENhbGxlYCIsImBOdW1lcm9JbnRlcm5vYCIsImBDb2xvbmlhYCIsImBNdW5pY2lwaW9gIiwiYEVzdGFkb2AiLCJgQ29kaWdvUG9zdGFsYCIsImBFc3RhZG9DaXZpbGAiLCJgVGFyamV0YWAiKQpUeXBlPC1jKCJDdWFsaXRhdGl2YSAobm9taW5hbCkiLCAiQ3VhbGl0YXRpdmEgKG5vbWluYWwpIiwgIkN1YWxpdGF0aXZhIChub21pbmFsKSIsICJDdWFudGl0YXRpdmEgKGRpc2NyZXRhKSIsIkN1YWxpdGF0aXZhIChub21pbmFsKSIsICJDdWFsaXRhdGl2YSAobm9taW5hbCkiLCAiQ3VhbnRpdGF0aXZhIChkaXNjcmV0YSkiLCAiQ3VhbnRpdGF0aXZhIChkaXNjcmV0YSkiLCJDdWFudGl0YXRpdmEgKGRpc2NyZXRhKSIsICJDdWFudGl0YXRpdmEgKGRpc2NyZXRhKSIsICJDdWFsaXRhdGl2YSAobm9taW5hbCkiLCAiQ3VhbGl0YXRpdmEgKG5vbWluYWwpIiwiQ3VhbGl0YXRpdmEgKG5vbWluYWwpIiwgIkN1YW50aXRhdGl2YSAoY29udGludW8pIiwiQ3VhbGl0YXRpdmEgKG5vbWluYWwpIiwgIkN1YWxpdGF0aXZhIChub21pbmFsKSIsIkN1YWxpdGF0aXZhIChub21pbmFsKSIsICJDdWFsaXRhdGl2YSAobm9taW5hbCkiLCJDdWFsaXRhdGl2YSAobm9taW5hbCkiLCAiQ3VhbGl0YXRpdmEgKG5vbWluYWwpIiwiQ3VhbGl0YXRpdmEgKG5vbWluYWwpIiwgIkN1YWxpdGF0aXZhIChub21pbmFsKSIsIkN1YWxpdGF0aXZhIChub21pbmFsKSIsICJDdWFsaXRhdGl2YSAobm9taW5hbCkiLCJDdWFsaXRhdGl2YSAobm9taW5hbCkiLCAiQ3VhbGl0YXRpdmEgKG5vbWluYWwpIikKdGFibGU8LWRhdGEuZnJhbWUoVmFyaWFibGUsVHlwZSkKa25pdHI6OmthYmxlKHRhYmxlKQpgYGAKCgojIyMgMykgRWxpZ2UgbGEgZXNjYWxhIGRlIG1lZGljacOzbiBkZSBjYWRhIHZhcmlhYmxlLgoKCmBgYHtyIGVjaG8gPSBGQUxTRSwgcmVzdWx0cyA9IFRSVUV9ClZhcmlhYmxlPC1jKCJgTm8uRGUuRW1wbGVhZG9gIiwiYEFwZWxsaWRvc2AiLCJgTm9tYnJlYCIsImBGZWNoYU5hY2ltaWVudG9gIiwiYEdlbmVyb2AiLCJgUkZDYCIsImBGZWNoYUFsdGFgIiwiYFByaW1lck1lc2AiLCJgNHRvTWVzYCIsImBCYWphYCIsImBQdWVzdG9gIiwiYERlcGFydGFtZW50b2AiLCJgU2VndXJvU29jaWFsYCIsImBTYWxhcmlvRGlhcmlvYCIsImBGYWN0b3JJbmZvbmF2aXRgIiwiYE4uQ3JlZGl0b0luZm9uYXZpdGAiLCJgTHVnYXJOYWNpbWllbnRvYCIsImBDVVJQYCIsImBDYWxsZWAiLCJgTnVtZXJvSW50ZXJub2AiLCJgQ29sb25pYWAiLCJgTXVuaWNpcGlvYCIsImBFc3RhZG9gIiwiYENvZGlnb1Bvc3RhbGAiLCJgRXN0YWRvQ2l2aWxgIiwiYFRhcmpldGFgIikKTWVkaWNpb248LWMoIk7Dum1lcm9zIiwgIk5vIGFwbGljYSIsICJObyBhcGxpY2EiLCAiQcOxbyIsIk5vIGFwbGljYSIsICJObyBhcGxpY2EiLCAiQcOxbyIsICJBw7FvIiwiQcOxbyIsICJOw7ptZXJvcyIsICJObyBhcGxpY2EiLCAiTm8gYXBsaWNhIiwiTm8gYXBsaWNhIiwgIlBlc29zIG1leGljYW5vcyIsIlBlc29zIG1leGljYW5vcyIsICJObyBhcGxpY2EiLCJObyBhcGxpY2EiLCAiTm8gYXBsaWNhIiwiTm8gYXBsaWNhIiwgIk5vIGFwbGljYSIsIk5vIGFwbGljYSIsICJObyBhcGxpY2EiLCJObyBhcGxpY2EiLCAiTm8gYXBsaWNhIiwiTm8gYXBsaWNhIiwgIk5vIGFwbGljYSIpCnRhYmxlMjwtZGF0YS5mcmFtZShWYXJpYWJsZSxNZWRpY2lvbikKa25pdHI6OmthYmxlKHRhYmxlMikKYGBgCgoKIyMjIDQpIEFwbGljYSBhbCBtZW5vcyAyIHTDqWNuaWNhcyBkZSBsaW1waWV6YSBkZSBiYXNlcyBkZSBkYXRvcyB5IGV4cGzDrWNhbGFzIGJyZXZlbWVudGUsIMK/cG9yIHF1w6kgcmVhbGl6YXN0ZSBlc2FzIHTDqWNuaWNhcz8KCioqVMOpY25pY2EgMywgKkVSUk9SRVMgVElQT0dSw4FGSUNPUyBZIEVSUk9SRVMgU0lNSUxBUkVTKioqICAKUHJpbWVyYW1lbnRlLCBzZSBub3TDsyBxdWUgZW4gZWwgZXhjZWwgYWxndW5hcyBmZWNoYXMgZXN0YWJhbiBjb24gZm9ybWF0byBkw61hL21lcy9hw7FvIHkgb3Ryb3MgbWVzL2TDrWEvYcOxby4gUG9yIGxvIHF1ZSBwYXJhIHRlbmVyIGxhIGluZm9ybWFjacOzbiBtw6FzIHJlYWwgeSBwcmVjaXNhIHBvc2libGUsIHNlIGV4dHJhamVyb24gc29sbyBsb3MgQcORT1MgcGFyYSBlbCBhbsOhbGlzaXMuCgoqKlTDqWNuaWNhIDEsICpSRU1PVkVSIERBVE9TIElSUkVMRVZBTlRFUyoqKgpFeGlzdGVuIG11Y2hhcyB2YXJpYWJsZXMgZW4gbGEgYmFzZSBkZSBkYXRvcywgeSBtdWNoYXMgZGUgZXN0YXMgY29udGllbmVuIGRhdG9zIHBlcnNvbmFsZXMgZGUgbG9zIGNvbGFib3JhZG9yZXMsIHBvciBsbyBxdWUgZXMgaW5mb3JtYWNpw7NuIG11eSBzZW5zaWJsZSB5IHF1ZSBubyBhcG9ydGEgbXVjaG8gKmluc2lnaHQqIGFsIGFuw6FsaXNpcy4gUG9yIGxvIHRhbnRvLCBzZSBoYSBlc2NvZ2lkbyBsYSB0w6ljbmljYSBkZSByZW1vdmVyIGRhdG9zIGlycmVsZXZhbnRlcyBhIGxhIGluZm9ybWFjacOzbiBwZXJzb25hbCBkZSBsb3MgZW1wbGVhZG9zIHF1ZSBubyBzaXJ2YW4gbXVjaG8gcGFyYSBlbCBhbsOhbGlzaXMsIGNvbW8gbG8gZXMgc3Ugbm9tYnJlLCBhcGVsbGlkbywgUkZDLCBDVVJQLiBTaW4gZW1iYXJnbywgb3Ryb3MgZGF0b3MgcGVyc29uYWxlcyBzZSBoYW4gbWFudGVuaWRvIHBhcmEgaGFjZXIgdW4gYW7DoWxpc2lzIGRlIGRpdmVyc2lkYWQgZSBpbmNsdXNpw7NuIChnw6luZXJvLCBmZWNoYSBkZSBuYWNpbWllbnRvLCBlc3RhZG8gY2l2aWwpLgoKYGBge3J9CnN1bW1hcnkoYmRfcmhfY29sYWJvcmFkb3JlcykKYGBgCgoKIyMjIyBFbGltaW5hciBjb2x1bW5hcwpTZSBlbGltaW5hbiBsYXMgY29sdW1uYXMgcXVlIG5vIGFwb3J0YW4gbXVjaG8gYWwgYW7DoWxpc2lzIGRlIGRhdG9zLgpgYGB7cn0KICBiZF9yaF9jb2xhYm9yYWRvcmVzMjwtYmRfcmhfY29sYWJvcmFkb3JlcwogIGJkX3JoX2NvbGFib3JhZG9yZXMyPC1zdWJzZXQoYmRfcmhfY29sYWJvcmFkb3JlczIsc2VsZWN0PS1jKE5vLi5EZS5FbXBsZWFkbyxUQVJKRVRBLi4uLkNVRU5UQSxDT0RJR08uUE9TVEFMLENPTE9OSUEsTlVNRVJPLklOVEVSTk8sQ0FMTEUsQ1VSUCxGQUNUT1IuQ1JFRC5JTkZPTkFWSVQsTk8uU0VHVVJPLlNPQ0lBTCxSRkMsQVBFTExJRE9TLE5PTUJSRSkpCnN1bW1hcnkoYmRfcmhfY29sYWJvcmFkb3JlczIpCmBgYAoKCioqVMOpY25pY2EgNSwgKlZBTE9SRVMgRkFMVEFOVEVTKioqICAKQ29uIHVuIHLDoXBpZG8gdmlzdGF6byBkZSBsYSBiYXNlIGRlIGRhdG9zLCBzZSBwb2TDrWEgb2JzZXJ2YXIgcXVlIGZhbHRhYmFuIGNpZXJ0b3MgdmFsb3JlcyBlbiBsYXMgZGlmZXJlbnRlcyB2YXJpYWJsZXMuIFNpIGZhbHRhYmFuIG11Y2hvcyBkYXRvcyBlbiB1bmEgc29sYSB2YXJpYWJsZSwgc2Ugb3B0w7MgcG9yIGVsaW1pbmFyIGxhICpjb2x1bW5hKiwgbWllbnRyYXMgcXVlIGVuIG90cm9zIGNhc29zIGRvbmRlIGhheWEgcG9jb3MgcG9yIHZhcmlhYmxlcyBzw7NsbyBzZSBlbGltaW5hcm9uIGxvcyByZWdpc3Ryb3MuICAKCsK/Q3XDoW50b3MgTkEgIHRlbmdvIGVuIGxhIGJhc2UgZGUgZGF0b3M/CmBgYHtyfQpzdW0oaXMubmEoYmRfcmhfY29sYWJvcmFkb3JlczIpKQpgYGAKICAgICAgCsK/Q3XDoW50b3MgTkEgdGVuZ28gcG9yIHZhcmlhYmxlPwpgYGB7cn0Kc2FwcGx5KGJkX3JoX2NvbGFib3JhZG9yZXMyLGZ1bmN0aW9uKHgpIHN1bShpcy5uYSh4KSkpCmBgYAoKRW4gbGEgYmFzZSBkZSBkYXRvcyBzZSB0aWVuZW4gbG9zIE5BIGVuIHVuYSBzb2xhIHZhcmlhYmxlOiBCQUpBLiBBcXVpIGZhbHRhbiAxMDAgZGUgMTEzIHJlZ2lzdHJvcywgcG9yIGxvIHF1ZSByZXN1bHRhIG1lam9yIEVMSU1JTkFSIGxhIGNvbHVtbmEgZW4gc3UgdG90YWxpZGFkLgoKYGBge3J9CmJkX3JoX2NvbGFib3JhZG9yZXMzPC1iZF9yaF9jb2xhYm9yYWRvcmVzMgogIGJkX3JoX2NvbGFib3JhZG9yZXMzPC1zdWJzZXQoYmRfcmhfY29sYWJvcmFkb3JlczIsc2VsZWN0PS1jKEJBSkEpKQpzdW1tYXJ5KGJkX3JoX2NvbGFib3JhZG9yZXMzKQpgYGAKCgoqU2UgdnVlbHZlIGEgdmVyIGxvIGRlIE5BcyoKCgrCv0N1w6FudG9zIE5BIHRlbmdvIHBvciB2YXJpYWJsZT8KYGBge3J9CnNhcHBseShiZF9yaF9jb2xhYm9yYWRvcmVzMyxmdW5jdGlvbih4KSBzdW0oaXMubmEoeCkpKQpgYGAKCkVsaW1pbmFyIHJlbmdsb25lcyBkZSBOQXMKYGBge3J9CmJkX3JoX2NvbGFib3JhZG9yZXM0PC1iZF9yaF9jb2xhYm9yYWRvcmVzMwpiZF9yaF9jb2xhYm9yYWRvcmVzNDwtbmEub21pdChiZF9yaF9jb2xhYm9yYWRvcmVzNCkgICAgICAKc3VtbWFyeShiZF9yaF9jb2xhYm9yYWRvcmVzNCkKc2FwcGx5KGJkX3JoX2NvbGFib3JhZG9yZXM0LGZ1bmN0aW9uKHgpIHN1bShpcy5uYSh4KSkpCmBgYAoKRWxpbWluYXIgZXJyb3IgZGUgZmVjaGEgZGUgbmFjaW1pZW50byAoZXhpc3RlbiBkYXRvcyBxdWUgbXVlc3RyYW4gcXVlIGFsZ3VpZW4gbmFjacOzIGVuIGVsIDIwMjIpCmBgYHtyfQogIGJkX3JoX2NvbGFib3JhZG9yZXM1PC1iZF9yaF9jb2xhYm9yYWRvcmVzNAogIGJkX3JoX2NvbGFib3JhZG9yZXM1PC1iZF9yaF9jb2xhYm9yYWRvcmVzNVtiZF9yaF9jb2xhYm9yYWRvcmVzNSRBw5FPLkRFLk5BQ0lNSUVOVE88MjAwNCxdCiAgc3VtbWFyeShiZF9yaF9jb2xhYm9yYWRvcmVzNSkKYGBgCgpRdWVkYSBsaW1waWEgeSBsaXN0YSBwYXJhIGFuYWxpemFyIGxhIGJhc2UgZGUgZGF0b3MuIAoKRXhwb3J0YXIKYGBge3J9CnJoX2xpbXBpYSA8LWJkX3JoX2NvbGFib3JhZG9yZXM1CndyaXRlLmNzdihyaF9saW1waWEsIGZpbGUgPSJyaF9saW1waWE1LmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQpgYGAKCiMjIyA1KSBJbmNsdXllIHVuYSBicmV2ZSByZWZsZXhpw7NuIGRlIGxhIGFjdGl2aWRhZC4KRXN0YSBiYXNlIGRlIGRhdG9zIGZ1ZSB0b21hbmRvIGVuIGN1ZW50YSBsb3MgZGF0b3Mgb3RvcmdhZG9zICBwb3IgRm9ybSBkZSAgc3UgZ2VzdGnDs24gZGUgUmVjdXJzb3MgSHVtYW5vcy4gT2J0ZW5lbW9zIGxvcyBkYXRvcyBkZSBsb3MgY29sYWJvcmFkb3JlcywgeSBhbGd1bmFzIGRlIHN1cyBjYXJhY3RlcsOtc3RpY2FzICBxdWUgcG9kcsOtYW4gcmVzdWx0YXIgaW50ZXJlc2FudGVzIHBhcmEgcHJvcG9uZXIgZXN0cmF0ZWdpYXMgZnVuZGFtZW50YWRhcyBhIGxhIG9yZ2FuaXphY2nDs24uIE1lIGVuY29udHLDqSBjb24gZGlmZXJlbnRlcyByZXRvcyBhbCB0cmFiYWphciBwcmltZXJhbWVudGUgY29uIGxvcyBkYXRvcywgY29tbyBsbyBmdWVyb24gYWxndW5vcyBkYXRvcyBmYWx0YW50ZXMgeSBlcnJvcmVzIGRlIGRlZG8gKGZlY2hhcyBlbiBpZGlvbWEgZXNwYcOxb2wgeSBvdHJhcyBlbiBpbmdsw6lzIGRlIEVVQSkuICAKClVuYSBpbXBvcnRhbnRlICByZWZsZXhpw7NuIGRlIGVzdGEgYWN0aXZpZGFkIGZ1ZSBjb21vIFIgbWUgcHVlZGUgYXl1ZGFyIGEgcHJlcGFyYXIgdW5hIGJhc2UgZGUgZGF0b3MgZGUgbWFuZXJhIHF1ZSB0ZW5nYW1vcyBtZW5vcyBlcnJvcmVzIHkgaGFjZXIgZWwgcHJvY2VzbyBtw6FzIGVmaWNpZW50ZS4gRXN0ZSBwcm9jZXNvIHJlYWxpemFkbyBzZXLDoSBkZSBncmFuIHV0aWxpZGFkIHBhcmEgbGFzIHByw7N4aW1hcyBhY3RpdmlkYWRlcyB5IGxhIHJlc29sdWNpw7NuIGRlbCByZXRvLiAKCgojIDxzcGFuIHN0eWxlPSJjb2xvcjpsaWdodGJsdWUiPioqRU5UUkVHQUJMRSAyLjMqKjwvc3Bhbj4KCipSZWFsaXphciB1biBhbsOhbGlzaXMgZXN0YWTDrXN0aWNvIGRlc2NyaXB0aXZvIGVuIGVsIHF1ZSBsb2dyZXMgZGVzdGFjYXIgZWwgY29uanVudG8gZGUgZGF0b3MsIHF1ZSBhcG95YW4gYSBsYSBlbXByZXNhIGEgbWVqb3JhciBzdSBvcGVyYWNpw7NuLiBJbmNvcnBvcmEgYWwgbWVub3MgZG9zIHByb3B1ZXN0YXMgY29uY3JldGFzLCBhcG95YWRhcyBkZSB0dSBhbsOhbGlzaXMgZW4gZG9uZGUgc2UgaW5jbHV5ZSBhbCBtZW5vczogICAKKDEpIFRhYmxhIGRlIGZyZWN1ZW5jaWEsICAKKG9wY2lvbmFsKSBUYWJsYXMgY3J1emFkYXMsICAgCigyLTMpIEdyw6FmaWNvcyBkZSBkYXRvcyBjdWFsaXRhdGl2b3MgeSBjdWFudGl0YXRpdm9zLCBiYXJyYXMsIGhpc3RvZ3JhbWFzLCBsaW5lIHBsb3RzIAooMi0zKSBHcsOhZmljb3MgZGUgZGlzcGVyc2nDs24uKgoKIyMgQW7DoWxpc2lzIGVzdGFkw61zdGljbyBkZXNjcmlwdGl2by4KCkxpYnJlcsOtYXMgcXVlIHNlIHBvZHLDrWFuIHVzYXIKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KbGlicmFyeShmb3JlaWduKQpsaWJyYXJ5KGRwbHlyKSAgICAgICAgIyBkYXRhIG1hbmlwdWxhdGlvbiAKbGlicmFyeShmb3JjYXRzKSAgICAgICMgdG8gd29yayB3aXRoIGNhdGVnb3JpY2FsIHZhcmlhYmxlcwpsaWJyYXJ5KGdncGxvdDIpICAgICAgIyBkYXRhIHZpc3VhbGl6YXRpb24gCmxpYnJhcnkoamFuaXRvcikgICAgICAjIGRhdGEgZXhwbG9yYXRpb24gYW5kIGNsZWFuaW5nIAojaW5zdGFsbC5wYWNrYWdlcygicHN5Y2giKQpsaWJyYXJ5KGNvcnJwbG90KSAgICAgIyBjb3JyZWxhdGlvbiBwbG90cwpsaWJyYXJ5KGxtdGVzdCkgICAgICAgIyBkaWFnbm9zdGljIGNoZWNrcyAtIGxpbmVhciByZWdyZXNzaW9uIGFuYWx5c2lzIApsaWJyYXJ5KGNhcikgICAgICAgICAgIyBkaWFnbm9zdGljIGNoZWNrcyAtIGxpbmVhciByZWdyZXNzaW9uIGFuYWx5c2lzCgpgYGAKCkltcG9ydGFyIGJhc2UgZGUgZGF0b3MuICAKU2UgaGEgZGVjaWRpZG8gdGFtYmnDqW4gYm9ycmFyIGVsIG7Dum1lcm8gZGUgY3LDqWRpdG8gZGUgaW5mb25hdml0LCBzZSBlbGltaW5hIGxhIGNvbHVtbmEuCmBgYHtyfQojZmlsZS5jaG9vc2UoKQpyaDwtcmVhZC5jc3YoIi9Vc2Vycy9lbGVuYXZlbGEvRG93bmxvYWRzL3JoX2xpbXBpYTUuY3N2IikKc3VtbWFyeShyaCkKCnJoMTwtcmgKcmgxPC1zdWJzZXQocmgxLHNlbGVjdD0tYyhOLi4uQ1JFRElUTy5JTkZPTkFWSVQpKQoKc3VtbWFyeShyaDEpCmBgYAoKCgojIyMgVGFibGEgZGUgZnJlY3VlbmNpYQoKYGBge3J9CmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoamFuaXRvcikKYGBgCgpTZSBhZ3JlZ2EgdW5hIGNvbHVtbmEgZGUgZW1wbGVhZG9zLCB5IHF1ZSBzaWd1ZSB1biBuw7ptZXJvIHNlZ3VpZG8uIFNlIGJvcnLDsyBsYSBhbnRlcmlvciBwb3JxdWUgZWwgbsO6bWVybyBkZSBlbXBsZWFkb3Mgbm8gc2VndcOtYSB1biBvcmRlbiBsw7NnaWNvICAoZGVsIDIgc2Ugc2FsdGFiYSBhbCA1KS4KYGBge3J9CnJoMiA8LSByaDEKcmgyIDwtIGNiaW5kKHJoMixFbXBsZWFkbz1jKCJFbXBsZWFkbyIpKQojc3VtbWFyeShyaDIpCmBgYAoKU2UgZ2VuZXJhbiBsYXMgdGFibGFzIGRlIGZyZWN1ZW5jaWFzIGRlIGxhcyB2YXJpYWJsZXMgKipDVUFMSVRBVElWQVMqKi4KYGBge3J9Cgo/dGFibGUKCmdlbmVybzwtdGFibGUocmgyJEdFTkVSTykKI2dlbmVybwprbml0cjo6a2FibGUoZ2VuZXJvKQoKcHVlc3RvPC10YWJsZShyaDIkUFVFU1RPKQojcHVlc3RvCmtuaXRyOjprYWJsZShwdWVzdG8pCgpkZXBhcnRhbWVudG88LXRhYmxlKHJoMiRERVBBUlRBTUVOVE8pCiNkZXBhcnRhbWVudG8Ka25pdHI6OmthYmxlKGRlcGFydGFtZW50bykKCmx1Z2FyPC10YWJsZShyaDIkTFVHQVIuREUuTkFDSU1JRU5UTykKI2x1Z2FyCmtuaXRyOjprYWJsZShsdWdhcikKCm11bmljaXBpbzwtdGFibGUocmgyJE1VTklDSVBJTykKI211bmljaXBpbwprbml0cjo6a2FibGUobXVuaWNpcGlvKQoKZXN0YWRvPC10YWJsZShyaDIkRVNUQURPKQojZXN0YWRvCmtuaXRyOjprYWJsZShlc3RhZG8pCgpjaXZpbDwtdGFibGUocmgyJEVTVEFETy5DSVZJTCkKI2NpdmlsCmtuaXRyOjprYWJsZShjaXZpbCkKYGBgCgojIyMgVGFibGFzIGNydXphZGEKCmBgYHtyfQpjcnV6YWRhMTwtdGFibGUocmgyJEdFTkVSTyxyaCRBw5FPLkRFLk5BQ0lNSUVOVE8pCgprbml0cjo6a2FibGUoY3J1emFkYTEpCmBgYAoKYGBge3J9CmNydXphZGEyPC10YWJsZShyaDIkRVNUQURPLHJoMiRHRU5FUk8pCmtuaXRyOjprYWJsZShjcnV6YWRhMikKCmBgYAoKCiMjIyBHcsOhZmljb3MgZGUgZGF0b3MgY3VhbGl0YXRpdm9zIHkgY3VhbnRpdGF0aXZvcwoKKkRhdG9zIGN1YWxpdGF0aXZvcyogIAoKU2Ugb2J0aWVuZSBwcmltZXJhbWVudGUgdW5hIGdyw6FmaWNhIGRlIGJhcnJhcyBxdWUgY29tcGFyYSBsb3MgZGlmZXJlbnRlcyBlc3RhZG9zIGNpdmlsZXMgKGFjdHVhbGVzKSBkZSBsb3MgY29sYWJvcmFkb3Jlcy4gT2JzZXJ2YW1vcyBxdWUgbGEgZ3JhbiBtYXlvcsOtYSBzb24gc29sdGVyb3MgbyBjYXNhZG9zLCB5IG11eSBwb2NvcyBkaXZvcmNpYWRvcy4KCmBgYHtyfQpiYXJwbG90KHByb3AudGFibGUodGFibGUocmgyJEVTVEFETy5DSVZJTCkpLGNvbD1jKCJvcmFuZ2UiLCJibHVlIiwicmVkIiwiZ3JlZW4iKSxtYWluPSJFc3RhZG8gQ2l2aWwiLCB5bGFiID0iRnJlY3VlbmNpYXMiLGxhcz0xKQpgYGAKCkxhIHNpZ3VpZW50ZSAqcGllIGNoYXJ0KiBub3MgZGEgYSBjb25vY2VyIGNvbW8gZXhpc3RlbiBtw6FzIG11amVyZXMgcXVlIGhvbWJyZXMgbGFib3JhbmRvIGFjdHVhbG1lbnRlIGVuIEZvcm0uCgpgYGB7cn0KcGllKHByb3AudGFibGUodGFibGUocmgyJEdFTkVSTykpLGNvbD1jKCJwaW5rIiwiYmx1ZSIpLG1haW49IkfDqW5lcm8iLCB5bGFiID0iRnJlY3VlbmNpYXMiLGxhcz0xKQpgYGAKCgoqKkNhbWJpbyBlbiBsYSBiYXNlIGRlIGRhdG9zLCBzZSBlbGltaW5hIHVuIHZhbG9yIGluY29ycmVjdG8gZW4gZWwgc2FsYXJpby4qKgoKYGBge3J9CnN0cihyaDIpCmBgYAoKKkRhdG9zIGN1YW50aXRhdGl2b3MqCgpFbCBwcmVzZW50ZSBoaXN0b2dyYW1hIHZlIGVsIHNhbGFyaW8sIHkgY29tbyBsYSBtYXlvcsOtYSBzZSBjb25jZW50cmEgZW4gZW50cmUgbG9zIDE1MCB5IDIwMCBwZXNvcyBkaWFyaW9zLiBDb24gbXV5IHBvY2FzIGV4Y2VwY2lvbmVzIHF1ZSBzdXBlcmFuIGVzdG8uIApgYGB7cn0KaGlzdCgocmgyJFNBTEFSSU8uRElBUklPLklNU1MpLGNvbD1jKCJyZWQiKSxtYWluPSJTYWxhcmlvIERpYXJpbyIseGxhYj0iU2FsYXJpbyBlbiBwZXNvcyBteCIpCmBgYAoKCk1lZGlhbnRlIGVsIHNpZ3VpZW50ZSBoaXN0b2dyYW1hIG5vdGFtb3MgcXVlIGxhIG1heW9yw61hIGRlIGxvcyBpbmdyZXNvcyBlbiBGb3JtIHNvbiByZWNpZW50ZXMsIGRlIGVudHJlIGVsIDIwMiB5IDIwMjI7IGluZGljYW5kbyBxdWUgaGF5IHBvY2EgYW50aWfDvGVkYWQgZW4gbG9zIGNvbGFib3JhZG9yZXMuCgpgYGB7cn0KaGlzdCgocmgyJFByaW1lci5tZXMpLGNvbD1jKCJsaWdodGJsdWUiKSxtYWluPSJBw7FvIGRlbCBQcmltZXIgTWVzIGVuIEZPUk0iLHhsYWI9IkHDsW8iKQpgYGAKCiMjIyBHcsOhZmljb3MgZGUgZGlzcGVyc2nDs24KCkVsIHByZXNlbnRlIHNjYXR0ZXJwbG90IGNvbXBhcmEgbGEgZmVjaGEgZGUgaW5ncmVzbyBjb24gZWwgc2FsYXJpbyBkaWFyaW8sIGVuIGRvbmRlIHZlbW9zIHF1ZSBsb3MgcXVlIHRpZW5lbiBtYXlvciBhbnRpZ8O8ZWRhZCAoZGVzZGUgZWwgMjAxMCksIGdhbmFuIGxvIG1pc21vIHF1ZSBhbGd1bm9zIGRlIGxvcyByZWNpw6luIGluZ3Jlc2Fkb3MuIEVsIG3DoXMgYWx0byBpbmdyZXNhbmRvIGVuIGVsIDIwMTQgKGFwcm94aW1hZGFtZW50ZSkKYGBge3J9CnBsb3QocmgyJEZFQ0hBLkRFLkFMVEEsIHJoMiRTQUxBUklPLkRJQVJJTy5JTVNTLCBtYWluID0gIkZlY2hhIGRlIGluZ3Jlc28gY29uIHNhbGFyaW8gZGlhcmlvIiwKICAgICB4bGFiID0gIkZlY2hhIGRlIGluZ3Jlc28iLCB5bGFiID0gIlNhbGFyaW8iLAogICAgIHBjaCA9IDE5LCBmcmFtZSA9IEZBTFNFKQpgYGAKCkFob3JhLCBjb21wYXJhbmRvIGVsIGHDsW8gZGUgbmFjaW1pZW50byBjb24gZWwgc2FsYXJpbywgb2JzZXJ2YW1vcyBxdWUgbGEgcGVyc29uYSBjb24gdW4gbWF5b3IgaW5ncmVzbyBlcyBhbGd1aWVuIG5hY2lkbyBlbiAxOTkwLiBGdWVyYSBkZSBhbGd1bm9zIGNhc29zIGVzcGVjw61maWNvcywgbG9zIHNhbGFyaW9zIG5vIHZlbiBkaWZlcmVuY2lhIGEgbGFzIGVkYWRlcy4gCgpgYGB7cn0KcGxvdChyaDIkQcORTy5ERS5OQUNJTUlFTlRPLCByaDIkU0FMQVJJTy5ESUFSSU8uSU1TUywgbWFpbiA9ICJBw7FvIGRlIG5hY2ltaWVudG8iLAogICAgIHhsYWIgPSAiQcOxbyBkZSBuYWNpbWllbnRvIiwgeWxhYiA9ICJTYWxhcmlvIiwKICAgICBwY2ggPSAxOSwgZnJhbWUgPSBGQUxTRSkKYGBgCgoKQW5hbGl6YW5kbyBvdHJhIHZleiwgbGEgZmVjaGEgZGUgbmFjaW1pZW50bywgb2JzZXJ2YW1vcyBxdWUgbGEgZ3JhbiBwYXJ0ZSBkZSBsb3MgZW1wbGVhZG9zIG5hY2llcm9uIGVuIGxhIGRlY2FkYSBkZSBsb3Mgb2NoZW50YXMgeSBkZSBsb3Mgbm92ZW50YXMuIAoKYGBge3J9CmJveHBsb3QocmgyJEHDkU8uREUuTkFDSU1JRU5UTyAsIHZlcnRpY2FsID0gVFJVRSkKYGBgCgoKCgoKCgoK