library (tidyverse)
library (foreign)
library (ggplot2)
library(dplyr)
library(scales)
library(ggrepel)
colores_base <- c("darkorange", "darkgoldenrod", "tan")
generar_variantes <- function(color, n) {
color_fun <- colorRampPalette(c("ivory", color))
return(color_fun(n))
}
mi_paleta <- c(colores_base, generar_variantes(colores_base[1], 10), generar_variantes(colores_base[2], 10), generar_variantes(colores_base[3], 10))
Autoparts<-read.csv("/Users/enrique/Downloads/US_Auto_Parts_Industry.csv")
CarProduction<-read.csv("/Users/enrique/Downloads/US_Auto_Production_Sales.csv")
ImpCartonBox<-read.csv("/Users/enrique/Downloads/Importers of Cartons boxes cases of corrugated paper or board 2020-2021.csv")
ExpCartonBox<-read.csv("/Users/enrique/Downloads/Exporters of Carton boxes cases of corrugated paper or board 2020-2021.csv")
RH_info<-read.csv( "/Users/enrique/Downloads/form_rh_datos-2.csv")
Data1 <- read.csv("/Users/enrique/Downloads/mx_exportacion_autos.csv")
RHB <-read.csv("/Users/enrique/Downloads/form_rh_bajas_datosB.csv")
Ndatos<- read.csv ("/Users/enrique/Downloads/hybrid_car_units.csv")
mx_exauto <- read.csv("/Users/enrique/Downloads/mex_exports_autoparts.csv")
Autopartes <- read.csv("/Users/enrique/Downloads/Autopartes.csv")
ventas_carton <- read.csv("/Users/enrique/Downloads/ventas.csv")
RH1<-RH_info%>%select(FECHA.DE.NACIMIENTO,GENERO,Primer.mes,FECHA.DE.ALTA,X4to.mes,PUESTO,DEPARTAMENTO,SALARIO.DIARIO.IMSS,ESTADO.CIVIL,TARJETA.CUENTA)
g = ggplot(RH1, aes(PUESTO, fill=GENERO) ) + labs(title = "Distribución de Genero Por puesto de Trabajo",x="Puesto (Abreviado)")+ylab("Número de Personas") + theme(plot.title = element_text(size = rel(2), colour = "darkgoldenrod3"))
g+geom_bar(position="dodge") + scale_fill_manual(values = mi_paleta) +
theme(axis.title.x = element_text(face="bold", size=10)) + theme_minimal()
RHB <- rename (RHB,MOTIVO.DE.BAJA = "MOTIVO.DE.BAJA")
Bajas_por_genero<- select(RHB,GENERO,MOTIVO.DE.BAJA)
ggplot(Bajas_por_genero, aes(GENERO))+geom_bar(aes(fill=MOTIVO.DE.BAJA), width = 0.5)+ggtitle ("Motivos de baja por genero")+ theme_minimal() + scale_fill_manual(values = mi_paleta)
ggplot(RHB, aes(GENERO)) +
geom_bar(aes(fill = GENERO), width = .25) + # Utiliza GENERO para determinar los colores
labs(title = "Distribución de Género por Días Laborados ante de Salir",
x = "Género",
y = " Promedio de Días de trabajo") +
theme_minimal() + scale_fill_manual(values = mi_paleta)
rh_m <- RH_info %>%
slice(-22)
municipios <- rh_m %>%
filter(ESTADO=="NUEVO LEON") %>%
group_by(MUNICIPIO, GENERO) %>%
summarise(total_personas = n_distinct(NOMBRE))
ggplot(municipios, aes(x = MUNICIPIO, y = total_personas, fill = GENERO)) +
geom_col() +
labs(title = "Colaboradores por Municipio",
x = "Municipio",
y = "Total de Personas",
fill = "Género") +
theme_minimal() + scale_fill_manual(values = mi_paleta) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Exportaciones <-Data1 %>% group_by(Marca) %>% summarise(num_exportaciones=n()) %>% arrange (desc(num_exportaciones))
Marca_mas_exportaciones <- Data1 %>% filter(Marca %in% c("Nissan","Volkswagen","General Motors","Chrysler","Mazda","Ford Motor","KIA","Honda","Fiat","Audi"))
ggplot(Marca_mas_exportaciones,aes(Marca,fill=Marca))+geom_bar()+ggtitle ("Top 10 Exportaciones por Marca") + theme_minimal() + scale_fill_manual(values = mi_paleta) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Regiones <- filter(Ndatos,region %in%
c("Centro-Norte","Norte","Norte-Occidente","Centro","Sur"))
ggplot(data=Regiones,
aes(x=region,y=hybrid_car_units,fill=region
)) + geom_boxplot() + ylim(0,1000) +
theme_minimal() + ylab("Unidades de carros hybridos") +
ggtitle("Unidades de carros hybridos por zonas de México") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + scale_fill_manual(values = mi_paleta)
resultados <- mx_exauto %>%
filter(year >= 2020) %>%
group_by(year, State) %>%
summarise(ventas_totales = sum(trade_value))
ggplot(resultados, aes(x = State, y = ventas_totales, fill = factor(year))) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = "Ventas Totales por Año y Estado",
x = "Estado",
y = "Ventas Totales",
fill = "Año") +
theme_minimal() +
theme(legend.position = "top") +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
scale_y_continuous(labels = scales::comma)+scale_fill_manual(values = mi_paleta)
ggplot(Autopartes, aes(x = year)) +
geom_bar(aes(y = imports_from_US, fill = "Importaciones desde US"), stat = "identity", position = "dodge") +
geom_bar(aes(y = total_imports - imports_from_US, fill = "Total de importaciones"), stat = "identity", position = "dodge") +
labs(title = "Importaciones de Autopartes por Año",
subtitle = "Industria Automotriz",
caption = "Mexico Automotive Industry - International Trade Administration - USD Billions",
x = "Año",
y = "Importaciones") +
scale_fill_manual(values = c("Importaciones desde US" = "ivory2", "Total de importaciones" = "darkorange")) +
theme_minimal() +
labs(fill = "Tipo de Importación")
ICB2<-ImpCartonBox%>%arrange(desc(Trade.Value))
ICB3<-ICB2%>%filter(Trade.Value>=123989664)
ggplot(ICB3, aes(x=Trade.Value, y=Country, fill=Country)) + geom_bar(stat="identity") + xlab("") + labs(x="Trade Value en 2021",title = "Top 20 países importadores de cajas de cartón", subtitle = "Según su Trade Value en el año 2021") + scale_x_continuous(labels=function(n){format(n, scientific = FALSE)}) + theme_minimal() + scale_fill_manual(values = mi_paleta)
ECB2<-ExpCartonBox%>%arrange(desc(Trade.Value))
ECB3<-ECB2%>%filter(Trade.Value>=101375372)
ggplot(ECB3, aes(x=Trade.Value, y=Country, fill=Country)) + geom_bar(stat="identity") + xlab("") + labs(x="Trade Value en 2021",title = "Top 20 países exportadores de cajas de cartón", subtitle = "Según su Trade Value en el año 2021") + scale_x_continuous(labels=function(n){format(n, scientific = FALSE)})+ theme_minimal() + scale_fill_manual(values = mi_paleta)
ggplot(ventas_carton, aes(x = Mes, y = Carton)) +
geom_bar(stat = "identity", fill = "darkorange") +
labs(title = "Ventas de Carton por Mes", subtitle = "2022", x = "Mes", y = "Ventas MDP") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 20, hjust = 1)) + scale_x_discrete(limits = ventas_carton$Mes)
library(readxl)
library(tidyverse)
library(writexl)
library(psych)
library(dplyr)
library(lubridate)
library(opencage)
library(httr)
library(geosphere)
library(leaflet)
library(ggmap)
datos_2022 <- read.csv( "/Users/enrique/Downloads/B_form_rh_bajas_datos_2022.csv")
datos_2023 <- read.csv("/Users/enrique/Downloads/BDD_FORM_BAJAS_2023.csv")
datos_actuales <- read.csv( "/Users/enrique/Downloads/form_rh_datos (1).csv")
df_bajas <- bind_rows(datos_2022, datos_2023)
df_bajas <- df_bajas %>%
mutate(ESTADO.CIVIL = ifelse(ESTADO.CIVIL %in% c("SOLTERIA", "SOLTERA"), "SOLTERO", ESTADO.CIVIL)) %>%
mutate(ESTADO.CIVIL = ifelse(ESTADO.CIVIL %in% c("CASADO", "CASADA", "MATRIOMONIO"), "MATRIMONIO", ESTADO.CIVIL))
datos_actuales <- datos_actuales %>%
mutate(ESTADO.CIVIL = ifelse(ESTADO.CIVIL %in% c("SOLTERIA", "SOLTERA"), "SOLTERO", ESTADO.CIVIL)) %>%
mutate(ESTADO.CIVIL = ifelse(ESTADO.CIVIL %in% c("CASADO", "CASADA", "MATRIOMONIO"), "MATRIMONIO", ESTADO.CIVIL))
df_bajas$FECHA.DE.NACIMIENTO <- dmy(df_bajas$FECHA.DE.NACIMIENTO)
fecha_actual <- Sys.Date()
df_bajas$EDAD <- round(as.numeric(difftime(fecha_actual, df_bajas$FECHA.DE.NACIMIENTO, units = "days") / 365.25))
datos_actuales$FECHA.DE.NACIMIENTO <- mdy(datos_actuales$FECHA.DE.NACIMIENTO)
datos_actuales$EDAD <- round(as.numeric(difftime(fecha_actual, datos_actuales$FECHA.DE.NACIMIENTO, units = "days") / 365.25))
df_bajas$FECHA.DE.ALTA <- dmy(df_bajas$FECHA.DE.ALTA)
df_bajas$BAJA <- dmy(df_bajas$BAJA)
df_bajas$DIAS.LABORADOS.CALCULADO <- as.numeric(difftime(df_bajas$BAJA, df_bajas$FECHA.DE.ALTA, units = "days"))
datos_actuales$FECHA.DE.ALTA <- mdy(datos_actuales$FECHA.DE.ALTA)
datos_actuales$BAJA <- fecha_actual
datos_actuales$DIAS.LABORADOS.CALCULADO <- as.numeric(difftime(datos_actuales$BAJA, datos_actuales$FECHA.DE.ALTA, units = "days"))
df_bajas$DIRECCION <- paste(df_bajas$CALLE, df_bajas$NUMERO.INTERNO, df_bajas$COLONIA, df_bajas$MUNICIPIO, df_bajas$ESTADO, sep = ", ")
datos_actuales$DIRECCION <- paste(datos_actuales$CALLE, datos_actuales$NUMERO.INTERNO, datos_actuales$COLONIA, datos_actuales$MUNICIPIO, datos_actuales$ESTADO, sep = ", ")
datos_actuales<- as.data.frame(lapply(datos_actuales, toupper))
datos_actuales$BAJA <- as.Date(datos_actuales$BAJA)
df_bajas$BAJA <- as.Date(df_bajas$BAJA)
datos_actuales$FECHA.DE.NACIMIENTO <- as.Date(datos_actuales$FECHA.DE.NACIMIENTO)
datos_actuales$FECHA.DE.ALTA <- as.Date(datos_actuales$FECHA.DE.ALTA)
datos_actuales$SALARIO <- as.numeric(datos_actuales$SALARIO)
df_bajas$SALARIO <- as.numeric(df_bajas$SALARIO)
df_bajas$EDAD <- as.numeric(df_bajas$EDAD)
datos_actuales$EDAD <- as.numeric(datos_actuales$EDAD)
datos_actuales$DIAS.LABORADOS.CALCULADO <- as.numeric(datos_actuales$DIAS.LABORADOS.CALCULADO)
df_bajas$DIAS.LABORADOS.CALCULADO <- as.numeric(df_bajas$DIAS.LABORADOS.CALCULADO)
# Convertir la columna DIAS.LABORADOS en datos_actuales a tipo numeric
datos_actuales$DIAS.LABORADOS <- as.numeric(datos_actuales$DIAS.LABORADOS)
# Convertir la columna FECHA.DE.NACIMIENTO en df_bajas a tipo Date
df_bajas$FECHA.DE.NACIMIENTO <- as.Date(df_bajas$FECHA.DE.NACIMIENTO, format = "%Y-%m-%d")
# Convertir la columna FECHA.DE.ALTA en datos_actuales a tipo Date
datos_actuales$FECHA.DE.ALTA <- as.Date(datos_actuales$FECHA.DE.ALTA, format = "%Y-%m-%d")
datos_actuales$CP <- as.character(datos_actuales$CP)
# Reemplazar valores NA por 0 en la columna CP de df_bajas
df_bajas$CP[is.na(df_bajas$CP)] <- 0
# Convertir la columna CP en df_bajas a tipo character
df_bajas$CP <- as.character(df_bajas$CP)
# Ahora puedes combinar los data frames
df_consolidado <- bind_rows(df_bajas, datos_actuales)
df_consolidado <- df_consolidado %>%
mutate(PUESTO.N = case_when(
PUESTO %in% c("AYUDANTE GENERAL", "AY.GENERAL") ~ "A.G.",
PUESTO %in% c("GESTOR") ~ "GT.",
PUESTO %in% c("SOLDADOR", "AYUDANTE SOLDADOR") ~ "SDR.",
PUESTO %in% c("AYUDANTE DE EMBARQUES") ~ "A.D.E.",
PUESTO %in% c("CHOFER GESTOR", "CHOFER") ~ "CHO.",
PUESTO %in% c("COSTURERA", "COSTURERO", "COSTURA") ~ "COS.",
PUESTO %in% c("ENFERMERA") ~ "EN.",
PUESTO %in% c("GUARDIA DE SEGURIDAD", "GUARDIA SEGURIDAD") ~ "G.D.S.",
PUESTO %in% c("INSPECTOR DE CALIDAD", "CALIDAD") ~ "I.C.",
PUESTO %in% c("LIMPIEZA") ~ "LPZ.",
PUESTO %in% c("MATERIALISTA") ~ "MAT.",
PUESTO %in% c("MONTACARGISTA") ~ "MC.",
PUESTO %in% c("PINTOR", "AYUDANTE PINTOR") ~ "PI.",
PUESTO %in% c("RESIDENTE", "RESIDENTE YANFENG CIENEGA") ~ "RDT.",
PUESTO %in% c("MANTENIMIENTO") ~ "MTO.",
PUESTO %in% c("ANALISTA DE NOMINAS") ~ "A.D.N.",
PUESTO %in% c("CUSTOMER SERVICE INF") ~ "C.S.I.",
PUESTO %in% c("CORTADOR") ~ "COR.",
PUESTO %in% c("DISEÑO") ~ "DIS.",
PUESTO %in% c("EXTERNO") ~ "EX.",
PUESTO %in% c("FACTURACION") ~ "FAC.",
PUESTO %in% c("JEFE DE SEGURIDAD E HIGIENE") ~ "J.S.H.",
PUESTO %in% c("LIDER") ~ "LI.",
PUESTO %in% c("MARCADORA") ~ "MAR.",
PUESTO %in% c("OPERADOR") ~ "OP.",
PUESTO %in% c("RECIBO") ~ "RBO.",
PUESTO %in% c("SERVICIO AL CLIENTE") ~ "S.C.",
PUESTO %in% c("SUPERVISOR") ~ "SUP.",
TRUE ~ PUESTO
))
dataRH<-read.csv( "/Users/enrique/Downloads/CFORMF.csv")
head(dataRH)
## FECHA.DE.NACIMIENTO GENERO FECHA.DE.ALTA BAJA DIAS_LABORADOS
## 1 23/12/1994 MASCULINO 18/08/2022 0 NA
## 2 23/10/2002 MASCULINO 18/02/2022 0 NA
## 3 11/03/1995 MASCULINO 11/01/2017 0 NA
## 4 01/11/1992 MASCULINO 03/11/2020 0 NA
## 5 29/09/1976 FEMENINO 16/02/2022 0 NA
## 6 07/07/1966 FEMENINO 01/06/2022 1 NA
## PUESTO PUESTO_N DEPARTAMENTO SALARIO.DIARIO.IMSS
## 1 MANTENIMIENTO MTO 180.68
## 2 AYUDANTE GENERAL A.G. Ay.flexo 180.68
## 3 AYUDANTE GENERAL A.G. Cedis 176.72
## 4 AYUDANTE GENERAL A.G. Cedis 176.72
## 5 AYUDANTE GENERAL A.G. Celdas 180.68
## 6 AYUDANTE GENERAL A.G. Celdas 180.68
## FACTOR.CRED.INFONAVIT LUGAR.DE.NACIMIENTO CALLE NUMERO.INTERNO
## 1 0 EBANO, SAN LUIS POTOSI MIER Y NORIEGA 106B
## 2 0 MONTERREY, NUEVO LEON PORTAL GALICIA 219
## 3 0 OCEANIA
## 4 0 TASAJILLO 220
## 5 0 HIDALGO, TAMAULIPAS RIO ESCONDIDO 760
## 6 0 CANATLAN, DURANGO HABICHUELA 306
## COLONIA MUNICIPIO ESTADO ESTADO.CIVIL
## 1 MIRADOR DE SAN ANTONIO JUAREZ NUEVO LEON MATRIMONIO
## 2 PORTAL DEL VALLE APODACA NUEVO LEON SOLTERIA
## 3 FRACC. OCEANIA BOULEVARES SALTILLO COAHUILA MATRIMONIO
## 4 EL CACTUS RAMOS ARIZPE COAHUILA UNION LIBRE
## 5 PUEBLO NUEVO APODACA NUEVO LEON SOLTERIA
## 6 POLICIA AUXILIAR GUADALUPE NUEVO LEON SOLTERIA
rh_ba<-read.csv("/Users/enrique/Downloads/BDD_FORM_BAJAS_2023.csv")
head(rh_ba)
## No. Apellidos Nombre Fecha.de.Nacimiento Genero
## 1 1 Perez Chavarria Yessica Yazmin 13/02/1985 Femenino
## 2 1 Pecina Aleman Blanca Idalia 25/05/1966 Femenino
## 3 1 Suarez Romo Julio Cesar 27/06/1969 Masculino
## 4 1 Ortiz De La Torre Fermina 07/07/1966 Femenino
## 5 1 Gallegos Manzanares Veronica 28/11/1973 Femenino
## 6 1 Guzman Reyes Carlos Benito 25/11/2002 Masculino
## RFC Fecha.de.Alta Primer.Mes Cuarto.Mes Fecha.de.Baja
## 1 PECY850213QS8 05/09/2022 05/10/2022 05/01/2023 02/01/2023
## 2 PEAB660525QT5 06/10/2022 05/11/2022 05/02/2023 02/01/2023
## 3 SURJ690627TK7 01/12/2017 31/12/2017 31/03/2018 05/01/2023
## 4 OITF660712QD2 01/06/2022 01/07/2022 29/09/2022 05/01/2023
## 5 GAMV731128LZA 22/10/2022 21/11/2022 21/02/2023 05/01/2023
## 6 GURC021125UL8 06/01/2023 05/02/2023 08/05/2023 07/01/2023
## Motivo.de.Baja Observaciones
## 1 Separacion voluntaria Se retiro para cuidar de su (s) hije (s)
## 2 Separacion voluntaria No hay observacion registrada sobre el motivo de baja
## 3 Separacion voluntaria Encontro otro empleo
## 4 Separacion voluntaria Se encontraba agotad@ por la carga laboral
## 5 Separacion voluntaria
## 6 Separacion voluntaria
## Puesto Puesto_Nom Dpto Imss SD
## 1 AYUDANTE GENERAL A.G. Stabilus 43048517130 180.68
## 2 AYUDANTE GENERAL A.G. 43056601958 180.68
## 3 GESTOR GT. Embarques 43956909626 176.72
## 4 AYUDANTE GENERAL A.G. Celdas 43946623980 180.68
## 5 AYUDANTE GENERAL A.G. 03 907303238 180.68
## 6 SOLDADOR SDR. 0 3190285142 180.68
## Factor.de.Credito.Infonavit No..De.Credito.Infonavit Lugar.de.Nacimiento
## 1 N/A N/A MONTERREY, NUEVO LEON
## 2 N/A N/A ARAMBERRI, NUEVO LEON
## 3
## 4 N/A N/A CANATLAN, DURANGO
## 5 N/A N/A Guadalupe, Nuevo Leon
## 6 N/A N/A Tampico, Tamaulipas
## CURP Calle Numero Colonia Municipio
## 1 PECY850213MNLRHS03 Alemania 1170 Vivienda Digna Apodaca
## 2 PEAB660525MNLCLL07 Rio Guayalejo Sur 304 Pueblo Nuevo Apodaca
## 3 SURJ690627HNLRML04 Mar Rojo Loma Linda Monterrey
## 4 OITF660712MDGRRR023 Habichuela 306 Policia Auxiliar Guadalupe
## 5 GAMV731128MNLLNR04 Romanos 341 Milenium Residencial Apodaca
## 6 GURC021125HTSZYRB7 Rio Salinas 122 Pueblo Nuevo Apodaca
## Estado CP Estado.Civil Numero.de.Telefono
## 1 Nuevo Le\xf3n 66647 Soltera 8133726737
## 2 Nuevo Leon 66646 Casada 8115902048
## 3 Nuevo Le\xf3n 64120 Casado 8110206284
## 4 Nuevo Le\xf3n 67114 Soltera 8130933136
## 5 Nuevo Leon 66646 Casada 8184705262
## 6 Nuevo Leon 66646 Soltero NA
rh_ba2<-rh_ba%>%group_by(Observaciones)%>%count()%>%ungroup()%>%mutate(pcnt=n/sum(n)*100)%>%arrange(pcnt)
rh_ba2$pcnt<-round(rh_ba2$pcnt,2)
rh_ba3 <- rh_ba2 %>% mutate(csum = rev(cumsum(rev(pcnt))),
pos = pcnt/2 + lead(csum, 1),
pos = if_else(is.na(pos), pcnt/2, pos))
ggplot(rh_ba2,aes(x="",y=pcnt,fill=Observaciones))+geom_bar(stat="identity")+coord_polar(theta="y")+theme(legend.position = "none")+geom_label_repel(data=rh_ba3,aes(x=c(.0003,0.15,0.32,0.5,0.7,0.9,1.1,1.3,1.5,1.7,1.9,2.1,2.3,2.5,2.7,1,0.98,1),y=pos,label=paste0(pcnt,"%")),size=4.5,nudge_x=1,max.overlaps=30,show.legend = FALSE)+theme_void()+ theme(legend.position = "bottom")+labs(title="Razones de las bajas laborales de FORM 2023")+scale_fill_manual(values = mi_paleta)
g = ggplot(rh_ba, aes(Puesto_Nom, fill=Genero) ) + labs(title = "Distribución de Bajas por Género Por puesto de Trabajo",x="Puesto (Abreviado)")+ylab("Número de Personas") + theme(plot.title = element_text(size = rel(2), colour = "darkgoldenrod3"))
g+geom_bar(position="dodge") + theme(axis.title.x = element_text(face="bold", size=10)) + theme_minimal() + theme(axis.text.x = element_text(angle = 90, hjust = 1))+ scale_fill_manual(values = mi_paleta)
dataRH$FECHA.DE.NACIMIENTO<-as.Date(dataRH$FECHA.DE.NACIMIENTO, format = "%d/%m/%Y")
fecha_actual<-Sys.Date()
diferencia_dias<-as.numeric(difftime(fecha_actual,dataRH$FECHA.DE.NACIMIENTO,units = "days"))
dataRH$EDAD<-diferencia_dias/365.25
dataRH$EDAD<-round(dataRH$EDAD,digits=0)
dataRH2<-dataRH%>%filter(BAJA==0)
dataRH2$FECHA.DE.ALTA<-as.Date(dataRH2$FECHA.DE.ALTA, format = "%d/%m/%Y")
dataRH2<-dataRH2%>%mutate(DiasTrabajados=as.numeric(difftime(fecha_actual,dataRH2$FECHA.DE.ALTA,units="days")))
dataRH3<-dataRH2%>%select(DiasTrabajados,FECHA.DE.ALTA,EDAD,GENERO,PUESTO,PUESTO_N)
dataRH3<-dataRH3%>%arrange(desc(DiasTrabajados))
prom_edad<- mean(dataRH$EDAD)
summary(dataRH)
## FECHA.DE.NACIMIENTO GENERO FECHA.DE.ALTA BAJA
## Min. :1949-11-21 Length:350 Length:350 Min. :0.0000
## 1st Qu.:1983-02-12 Class :character Class :character 1st Qu.:0.0000
## Median :1992-11-17 Mode :character Mode :character Median :1.0000
## Mean :1990-03-04 Mean :0.7143
## 3rd Qu.:1999-04-12 3rd Qu.:1.0000
## Max. :2004-04-02 Max. :1.0000
##
## DIAS_LABORADOS PUESTO PUESTO_N DEPARTAMENTO
## Min. : 0.00 Length:350 Length:350 Length:350
## 1st Qu.: 9.00 Class :character Class :character Class :character
## Median : 19.00 Mode :character Mode :character Mode :character
## Mean : 78.43
## 3rd Qu.: 48.50
## Max. :1966.00
## NA's :127
## SALARIO.DIARIO.IMSS FACTOR.CRED.INFONAVIT LUGAR.DE.NACIMIENTO
## Min. :1.440e+02 Min. :0.00000 Length:350
## 1st Qu.:1.770e+02 1st Qu.:0.00000 Class :character
## Median :1.810e+02 Median :0.00000 Mode :character
## Mean :4.359e+06 Mean :0.05714
## 3rd Qu.:1.810e+02 3rd Qu.:0.00000
## Max. :1.517e+09 Max. :1.00000
## NA's :1
## CALLE NUMERO.INTERNO COLONIA MUNICIPIO
## Length:350 Length:350 Length:350 Length:350
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## ESTADO ESTADO.CIVIL EDAD
## Length:350 Length:350 Min. :19.00
## Class :character Class :character 1st Qu.:24.00
## Mode :character Mode :character Median :31.00
## Mean :33.59
## 3rd Qu.:41.00
## Max. :74.00
##
Rango_edad<- max(dataRH$EDAD)-min(dataRH$EDAD)
N<-length(dataRH$EDAD)
Varianza_edad<- var(dataRH$EDAD)
DesvEs_edad<-sd(dataRH$EDAD)
prom_edad
## [1] 33.59429
Rango_edad
## [1] 55
Varianza_edad
## [1] 122.4997
DesvEs_edad
## [1] 11.06796
dataRH4<-dataRH3%>%filter(PUESTO_N=="A.G.")
ggplot(dataRH4, aes(x=DiasTrabajados, y=GENERO, fill=GENERO)) + geom_bar(stat="identity") + xlab("") + labs(title = "Días trabajados por cada género") + scale_fill_manual(values = mi_paleta)
dataRH4F<-dataRH4%>%filter(GENERO=="FEMENINO")
dataRH4M<-dataRH4%>%filter(GENERO=="MASCULINO")
head(dataRH4F,10)
## DiasTrabajados FECHA.DE.ALTA EDAD GENERO PUESTO PUESTO_N
## 1 1706 2019-01-28 36 FEMENINO AYUDANTE GENERAL A.G.
## 2 1612 2019-05-02 39 FEMENINO AYUDANTE GENERAL A.G.
## 3 1363 2020-01-06 56 FEMENINO AYUDANTE GENERAL A.G.
## 4 919 2021-03-25 30 FEMENINO AYUDANTE GENERAL A.G.
## 5 919 2021-03-25 27 FEMENINO AYUDANTE GENERAL A.G.
## 6 899 2021-04-14 27 FEMENINO AYUDANTE GENERAL A.G.
## 7 889 2021-04-24 52 FEMENINO AYUDANTE GENERAL A.G.
## 8 856 2021-05-27 54 FEMENINO AYUDANTE GENERAL A.G.
## 9 725 2021-10-05 62 FEMENINO AYUDANTE GENERAL A.G.
## 10 655 2021-12-14 39 FEMENINO AYUDANTE GENERAL A.G.
head(dataRH4M,10)
## DiasTrabajados FECHA.DE.ALTA EDAD GENERO PUESTO PUESTO_N
## 1 2594 2016-08-23 27 MASCULINO AYUDANTE GENERAL A.G.
## 2 2453 2017-01-11 29 MASCULINO AYUDANTE GENERAL A.G.
## 3 2226 2017-08-26 59 MASCULINO AYUDANTE GENERAL A.G.
## 4 1332 2020-02-06 23 MASCULINO AYUDANTE GENERAL A.G.
## 5 1148 2020-08-08 54 MASCULINO AYUDANTE GENERAL A.G.
## 6 1136 2020-08-20 46 MASCULINO AYUDANTE GENERAL A.G.
## 7 1061 2020-11-03 31 MASCULINO AYUDANTE GENERAL A.G.
## 8 721 2021-10-09 21 MASCULINO AYUDANTE GENERAL A.G.
## 9 695 2021-11-04 22 MASCULINO AYUDANTE GENERAL A.G.
## 10 681 2021-11-18 21 MASCULINO AYUDANTE GENERAL A.G.
summary(dataRH4F)
## DiasTrabajados FECHA.DE.ALTA EDAD GENERO
## Min. : 403.0 Min. :2019-01-28 Min. :21.00 Length:31
## 1st Qu.: 432.5 1st Qu.:2021-06-28 1st Qu.:28.00 Class :character
## Median : 535.5 Median :2022-04-12 Median :39.00 Mode :character
## Mean : 668.6 Mean :2021-11-30 Mean :38.61
## 3rd Qu.: 823.2 3rd Qu.:2022-07-24 3rd Qu.:49.50
## Max. :1706.0 Max. :2022-08-23 Max. :62.00
## NA's :1 NA's :1
## PUESTO PUESTO_N
## Length:31 Length:31
## Class :character Class :character
## Mode :character Mode :character
##
##
##
##
summary(dataRH4M)
## DiasTrabajados FECHA.DE.ALTA EDAD GENERO
## Min. : 403.0 Min. :2016-08-23 Min. :20.00 Length:24
## 1st Qu.: 431.2 1st Qu.:2020-10-15 1st Qu.:21.00 Class :character
## Median : 600.5 Median :2022-02-06 Median :24.00 Mode :character
## Mean : 867.0 Mean :2021-05-16 Mean :28.46
## 3rd Qu.:1079.8 3rd Qu.:2022-07-25 3rd Qu.:31.00
## Max. :2594.0 Max. :2022-08-23 Max. :59.00
## PUESTO PUESTO_N
## Length:24 Length:24
## Class :character Class :character
## Mode :character Mode :character
##
##
##
library(readxl)
library(tidyverse)
library(writexl)
library(psych)
library(dplyr)
library(lubridate)
library (ggplot2)
library(janitor)
library(dplyr)
i <- 238
df_bajas_f<- subset(df_bajas, !row.names(df_bajas)==i)
summary (df_bajas_f)
## APELLIDOS NOMBRE FECHA.DE.NACIMIENTO GENERO
## Length:516 Length:516 Min. :1961-10-09 Length:516
## Class :character Class :character 1st Qu.:1985-12-31 Class :character
## Mode :character Mode :character Median :1994-02-16 Mode :character
## Mean :1992-02-14
## 3rd Qu.:1999-09-19
## Max. :2022-05-14
## NA's :279
## RFC FECHA.DE.ALTA MOTIVO.DE.BAJA DIAS.LABORADOS
## Length:516 Min. :2016-10-12 Length:516 Min. : 0.00
## Class :character 1st Qu.:2022-01-26 Class :character 1st Qu.: 9.00
## Mode :character Median :2022-04-12 Mode :character Median : 19.00
## Mean :2022-02-09 Mean : 79.71
## 3rd Qu.:2022-06-15 3rd Qu.: 49.00
## Max. :2022-11-07 Max. :1966.00
## NA's :279 NA's :303
## BAJA PUESTO DEPARTAMENTO SALARIO
## Min. :2021-11-27 Length:516 Length:516 Min. :144.4
## 1st Qu.:2022-02-25 Class :character Class :character 1st Qu.:180.7
## Median :2022-04-29 Mode :character Mode :character Median :180.7
## Mean :2022-04-29 Mean :178.0
## 3rd Qu.:2022-06-29 3rd Qu.:180.7
## Max. :2022-08-25 Max. :500.0
## NA's :293 NA's :280
## FACTOR.CRED.INFONAVIT LUGAR.DE.NACIMIENTO CURP
## Length:516 Length:516 Length:516
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
##
## CALLE NUMERO.INTERNO COLONIA MUNICIPIO
## Length:516 Length:516 Length:516 Length:516
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## ESTADO ESTADO.CIVIL No. Apellidos
## Length:516 Length:516 Min. :1.000 Length:516
## Class :character Class :character 1st Qu.:1.000 Class :character
## Mode :character Mode :character Median :1.000 Mode :character
## Mean :1.022
## 3rd Qu.:1.000
## Max. :4.000
## NA's :237
## Nombre Fecha.de.Nacimiento Genero Fecha.de.Alta
## Length:516 Length:516 Length:516 Length:516
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## Primer.Mes Cuarto.Mes Fecha.de.Baja Motivo.de.Baja
## Length:516 Length:516 Length:516 Length:516
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## Observaciones Puesto Puesto_Nom Dpto
## Length:516 Length:516 Length:516 Length:516
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## Imss SD Factor.de.Credito.Infonavit
## Length:516 Min. :151.6 Length:516
## Class :character 1st Qu.:217.6 Class :character
## Mode :character Median :217.6 Mode :character
## Mean :208.7
## 3rd Qu.:217.6
## Max. :217.7
## NA's :237
## No..De.Credito.Infonavit Lugar.de.Nacimiento Calle
## Length:516 Length:516 Length:516
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
##
## Numero Colonia Municipio Estado
## Length:516 Length:516 Length:516 Length:516
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## CP Estado.Civil Numero.de.Telefono EDAD
## Length:516 Length:516 Min. :8.320e+07 Min. : 1.00
## Class :character Class :character 1st Qu.:8.118e+09 1st Qu.:24.00
## Mode :character Mode :character Median :8.129e+09 Median :30.00
## Mean :7.989e+09 Mean :31.64
## 3rd Qu.:8.136e+09 3rd Qu.:38.00
## Max. :9.841e+09 Max. :62.00
## NA's :249 NA's :279
## DIAS.LABORADOS.CALCULADO DIRECCION
## Min. :-279.00 Length:516
## 1st Qu.: 8.00 Class :character
## Median : 19.00 Mode :character
## Mean : 80.28
## 3rd Qu.: 59.50
## Max. :1966.00
## NA's :293
GeneroyEstadocivil <- select(df_bajas_f,GENERO, ESTADO.CIVIL)
ggplot(GeneroyEstadocivil,aes(GENERO))+geom_bar(aes(fill=ESTADO.CIVIL), width= 0.5) + labs(title = "Estado Civil por Género")+ scale_fill_manual(values = mi_paleta)
df_bajas_f$ESTADO.CIVIL <- as.factor(df_bajas_f$ESTADO.CIVIL)
summary(df_bajas_f$ESTADO.CIVIL)
## DIVORCIO MATRIMONIO SOLTERO UNION LIBRE NA's
## 3 64 108 62 279
frecuenciagenero <- table(df_bajas_f$GENERO)
frecuenciagenero
##
## FEMENINO MASCULINO
## 140 97
frecuenciaestadocivil <- table(df_bajas_f$ESTADO.CIVIL)
frecuenciaestadocivil
##
## DIVORCIO MATRIMONIO SOLTERO UNION LIBRE
## 3 64 108 62
tabyl(df_bajas_f,GENERO,ESTADO.CIVIL)
## GENERO DIVORCIO MATRIMONIO SOLTERO UNION LIBRE NA_
## FEMENINO 2 44 57 37 0
## MASCULINO 1 20 51 25 0
## <NA> 0 0 0 0 279
library(tidyverse)
library(dplyr)
library(ggplot2)
library(lubridate)
data<-read.csv("/Users/enrique/Downloads/E_form_rh_bajas_datos_2022.csv")
data$Fecha <- dmy(data$BAJA)
data$Mes <- month(data$Fecha)
data$Estacion <- case_when(
data$Mes %in% c(3, 4, 5) ~ "Primavera",
data$Mes %in% c(6, 7, 8) ~ "Verano",
data$Mes %in% c(9, 10, 11) ~ "Otoño",
data$Mes %in% c(12, 1, 2) ~ "Invierno",
TRUE ~ NA_character_
)
estacion_frecuencia <- table(data$Estacion)
estacion_mas_comun <- names(estacion_frecuencia[which.max(estacion_frecuencia)])
cat("La estación con más bajas es:", estacion_mas_comun)
## La estación con más bajas es: Primavera
estacion_frecuencia <- table(data$Estacion)
tabla_bajas_por_estacion <- as.data.frame(estacion_frecuencia)
colnames(tabla_bajas_por_estacion) <- c("Estacion", "Cantidad_Bajas")
print(tabla_bajas_por_estacion)
## Estacion Cantidad_Bajas
## 1 Invierno 58
## 2 Otoño 1
## 3 Primavera 84
## 4 Verano 80
ggplot(tabla_bajas_por_estacion, aes(x = Estacion, y = Cantidad_Bajas)) +
geom_bar(stat = "identity", color = "black", width = 0.7, fill = "orange") +
labs(title = "Cantidad de Bajas por Estación del Año 2022", subtitle = "Recursos Humanos", x = "Estación", y = "Cantidad de Bajas")
datos_E<- read.csv("/Users/enrique/Downloads/E_FORM_Consolidado.csv")
datos_E$FECHA.DE.NACIMIENTO <- as.Date(datos_E$FECHA.DE.NACIMIENTO, format = "%d/%m/%Y")
datos_E <- datos_E %>%
mutate(edad = as.integer(difftime(Sys.Date(), FECHA.DE.NACIMIENTO, units = "days") / 365.25))
head(datos_E)
## FECHA.DE.NACIMIENTO GENERO FECHA.DE.ALTA BAJA DIAS_LABORADOS
## 1 1994-12-23 MASCULINO 18/08/2022 0 NA
## 2 2002-10-23 MASCULINO 18/02/2022 0 NA
## 3 1995-03-11 MASCULINO 11/01/2017 0 NA
## 4 1992-11-01 MASCULINO 03/11/2020 0 NA
## 5 1976-09-29 FEMENINO 16/02/2022 0 NA
## 6 1966-07-07 FEMENINO 01/06/2022 1 NA
## PUESTO DEPARTAMENTO SALARIO.DIARIO.IMSS FACTOR.CRED.INFONAVIT
## 1 MANTENIMIENTO 180.68 0
## 2 AYUDANTE GENERAL Ay.flexo 180.68 0
## 3 AYUDANTE GENERAL Cedis 176.72 0
## 4 AYUDANTE GENERAL Cedis 176.72 0
## 5 AYUDANTE GENERAL Celdas 180.68 0
## 6 AYUDANTE GENERAL Celdas 180.68 0
## LUGAR.DE.NACIMIENTO CALLE NUMERO.INTERNO
## 1 EBANO, SAN LUIS POTOSI MIER Y NORIEGA 106B
## 2 MONTERREY, NUEVO LEON PORTAL GALICIA 219
## 3 OCEANIA
## 4 TASAJILLO 220
## 5 HIDALGO, TAMAULIPAS RIO ESCONDIDO 760
## 6 CANATLAN, DURANGO HABICHUELA 306
## COLONIA MUNICIPIO ESTADO ESTADO.CIVIL EDAD edad
## 1 MIRADOR DE SAN ANTONIO JUAREZ NUEVO LEON MATRIMONIO NA 28
## 2 PORTAL DEL VALLE APODACA NUEVO LEON SOLTERIA NA 20
## 3 FRACC. OCEANIA BOULEVARES SALTILLO COAHUILA MATRIMONIO NA 28
## 4 EL CACTUS RAMOS ARIZPE COAHUILA UNION LIBRE NA 30
## 5 PUEBLO NUEVO APODACA NUEVO LEON SOLTERIA NA 47
## 6 POLICIA AUXILIAR GUADALUPE NUEVO LEON SOLTERIA NA 57
datos_E$FECHA.DE.ALTA <- as.Date(datos_E$FECHA.DE.ALTA, format = ("%d/%m/%Y"))
# Obtener la fecha actual
fecha_actual <- Sys.Date()
datos_E <- datos_E %>%
mutate(dias_trabajados = ifelse(BAJA == 1, 0, difftime(fecha_actual, FECHA.DE.ALTA, units = "days")))
head(datos_E)
## FECHA.DE.NACIMIENTO GENERO FECHA.DE.ALTA BAJA DIAS_LABORADOS
## 1 1994-12-23 MASCULINO 2022-08-18 0 NA
## 2 2002-10-23 MASCULINO 2022-02-18 0 NA
## 3 1995-03-11 MASCULINO 2017-01-11 0 NA
## 4 1992-11-01 MASCULINO 2020-11-03 0 NA
## 5 1976-09-29 FEMENINO 2022-02-16 0 NA
## 6 1966-07-07 FEMENINO 2022-06-01 1 NA
## PUESTO DEPARTAMENTO SALARIO.DIARIO.IMSS FACTOR.CRED.INFONAVIT
## 1 MANTENIMIENTO 180.68 0
## 2 AYUDANTE GENERAL Ay.flexo 180.68 0
## 3 AYUDANTE GENERAL Cedis 176.72 0
## 4 AYUDANTE GENERAL Cedis 176.72 0
## 5 AYUDANTE GENERAL Celdas 180.68 0
## 6 AYUDANTE GENERAL Celdas 180.68 0
## LUGAR.DE.NACIMIENTO CALLE NUMERO.INTERNO
## 1 EBANO, SAN LUIS POTOSI MIER Y NORIEGA 106B
## 2 MONTERREY, NUEVO LEON PORTAL GALICIA 219
## 3 OCEANIA
## 4 TASAJILLO 220
## 5 HIDALGO, TAMAULIPAS RIO ESCONDIDO 760
## 6 CANATLAN, DURANGO HABICHUELA 306
## COLONIA MUNICIPIO ESTADO ESTADO.CIVIL EDAD edad
## 1 MIRADOR DE SAN ANTONIO JUAREZ NUEVO LEON MATRIMONIO NA 28
## 2 PORTAL DEL VALLE APODACA NUEVO LEON SOLTERIA NA 20
## 3 FRACC. OCEANIA BOULEVARES SALTILLO COAHUILA MATRIMONIO NA 28
## 4 EL CACTUS RAMOS ARIZPE COAHUILA UNION LIBRE NA 30
## 5 PUEBLO NUEVO APODACA NUEVO LEON SOLTERIA NA 47
## 6 POLICIA AUXILIAR GUADALUPE NUEVO LEON SOLTERIA NA 57
## dias_trabajados
## 1 408
## 2 589
## 3 2453
## 4 1061
## 5 591
## 6 0
ggplot(datos_E, aes(x = edad, fill = factor(BAJA))) +
geom_bar() +
labs(x = "Edad", y = "Cantidad de Personas", fill = "Baja") +
theme_minimal() + labs(title="Edad de Bajas y No Bajas")+scale_fill_manual(values = mi_paleta)
bajas_nl <- df_bajas %>%
mutate(ESTADO = ifelse(ESTADO %in% c("NUEVO LEON", "NUEVO LEÓN"), "NUEVO LEON", ESTADO)) %>%
filter(ESTADO == "NUEVO LEON")
actuales_nl <- datos_actuales %>%
mutate(ESTADO = ifelse(ESTADO %in% c("NUEVO LEON", "NUEVO LEÓN"), "NUEVO LEON", ESTADO)) %>%
filter(ESTADO == "NUEVO LEON")
#clave_api <- "54c60ed2b93e47e6948c618ee0a83db6"
clave_api <- "54c60ed2b93e47e6948c618ee0a83db6"
geocode_opencage <- function(direccion, clave_api) {
url <- paste0("https://api.opencagedata.com/geocode/v1/json?q=", URLencode(direccion),
"&key=", clave_api)
respuesta <- GET(url)
contenido <- content(respuesta, "text", encoding = "UTF-8")
datos <- jsonlite::fromJSON(contenido)
return(datos)
}
bajas_nl$GEOCODE_RESULT <- lapply(bajas_nl$DIRECCION, function(x) geocode_opencage(x, clave_api))
bajas_nl$LATITUD <- sapply(bajas_nl$GEOCODE_RESULT, function(x) x$results$geometry$lat)
bajas_nl$LONGITUD <- sapply(bajas_nl$GEOCODE_RESULT, function(x) x$results$geometry$lng)
actuales_nl$GEOCODE_RESULT <- lapply(actuales_nl$DIRECCION, function(x) geocode_opencage(x, clave_api))
actuales_nl$LATITUD <- sapply(actuales_nl$GEOCODE_RESULT, function(x) x$results$geometry$lat)
actuales_nl$LONGITUD <- sapply(actuales_nl$GEOCODE_RESULT, function(x) x$results$geometry$lng)
calcular_promedio <- function(valor) {
if (is.character(valor)) {
valores <- tryCatch(eval(parse(text = valor)), error = function(e) NA_real_)
} else {
valores <- valor
}
valores <- valores[!is.na(valores)]
if (length(valores) > 0) {
return(mean(valores))
} else {
return(NA_real_)
}
}
bajas_nl$LONGITUD <- sapply(bajas_nl$LONGITUD, calcular_promedio)
bajas_nl$LATITUD <- sapply(bajas_nl$LATITUD, calcular_promedio)
actuales_nl$LONGITUD <- sapply(actuales_nl$LONGITUD, calcular_promedio)
actuales_nl$LATITUD <- sapply(actuales_nl$LATITUD, calcular_promedio)
direccion_objetivo <- "Calle El Sabinal 105, 66645 Apodaca, Nuevo León"
coordenadas_objetivo <- geocode_opencage(direccion_objetivo, clave_api)
latitud_objetivo <- coordenadas_objetivo$results$geometry$lat
longitud_objetivo <- coordenadas_objetivo$results$geometry$lng
calcular_distancia_km <- function(lat1, lon1, lat2, lon2) {
dist_metros <- distHaversine(c(lon1, lat1), c(lon2, lat2))
dist_km <- dist_metros / 1000
return(dist_km)
}
bajas_nl$DISTANCIA.KM <- mapply(calcular_distancia_km, bajas_nl$LATITUD, bajas_nl$LONGITUD, latitud_objetivo, longitud_objetivo)
actuales_nl$DISTANCIA.KM <- mapply(calcular_distancia_km, actuales_nl$LATITUD, actuales_nl$LONGITUD, latitud_objetivo,longitud_objetivo)
copia_actuales_nl <- as.data.frame(lapply(actuales_nl, toupper))
copia_bajas_nl <- as.data.frame(lapply(bajas_nl, toupper))
copia_actuales_nl <- copia_actuales_nl[!is.na(copia_actuales_nl$LATITUD) & !is.na(copia_actuales_nl$LONGITUD), ]
copia_bajas_nl <- copia_bajas_nl[!is.na(copia_bajas_nl$LATITUD) & !is.na(copia_bajas_nl$LONGITUD), ]
copia_actuales_nl$LATITUD <- as.numeric(copia_actuales_nl$LATITUD)
copia_actuales_nl$LONGITUD <- as.numeric(copia_actuales_nl$LONGITUD)
copia_bajas_nl$LATITUD <- as.numeric(copia_bajas_nl$LATITUD)
copia_bajas_nl$LONGITUD <- as.numeric(copia_bajas_nl$LONGITUD)
copia_actuales_nl$DISTANCIA.KM <- as.numeric(copia_actuales_nl$DISTANCIA.KM)
copia_bajas_nl$DISTANCIA.KM <- as.numeric(copia_bajas_nl$DISTANCIA.KM)
copia_actuales_nl <- copia_actuales_nl[copia_actuales_nl$LONGITUD >= -100.5 & copia_actuales_nl$LONGITUD <= -99.9, ]
copia_bajas_nl <- copia_bajas_nl[copia_bajas_nl$LONGITUD >= -100.5 & copia_bajas_nl$LONGITUD <= -99.9, ]
copia_actuales_nl <- copia_actuales_nl[copia_actuales_nl$LATITUD >= 25 & copia_actuales_nl$LATITUD <= 26, ]
copia_bajas_nl <- copia_bajas_nl[copia_bajas_nl$LATITUD >= 25 & copia_bajas_nl$LATITUD <= 26, ]
m <- leaflet() %>%
addTiles() %>% # Añade un fondo de mapa real
addCircleMarkers(
data = copia_bajas_nl, # Datos de ubicaciones de registros
lat = ~LATITUD, # Nombre de la columna de latitud
lng = ~LONGITUD, # Nombre de la columna de longitud
color = "red", # Color de los marcadores de registros
radius = 5, # Tamaño de los marcadores de registros
label = "Bajas" # Etiqueta para los marcadores de registros
) %>%
addCircleMarkers(
data = copia_actuales_nl, # Datos de ubicaciones de df_actual
lat = ~LATITUD, # Nombre de la columna de latitud en df_actual
lng = ~LONGITUD, # Nombre de la columna de longitud en df_actual
color = "green", # Color de los marcadores de df_actual
radius = 5, # Tamaño de los marcadores de df_actual
label = "Activos" # Etiqueta para los marcadores de df_actual
) %>%
addCircleMarkers(
lat = latitud_objetivo, # Latitud del destino
lng = longitud_objetivo, # Longitud del destino
color = "blue", # Color del marcador de destino
radius = 8, # Tamaño del marcador de destino
label = "Destino" # Etiqueta para el marcador de destino
)
m
hist(copia_bajas_nl$DISTANCIA.KM,
main = "Histograma de Distancia (BAJAS)",
xlab = "Distancia en km",
ylab = "Frecuencia",
col = "darkorange3",
border = "black",
breaks = "Scott")
mediana_bajas_nl <- median(copia_bajas_nl$DISTANCIA.KM)
grupo_cerca_nl <- copia_bajas_nl[copia_bajas_nl$DISTANCIA.KM <= mediana_bajas_nl, ]
grupo_lejos_nl <- copia_bajas_nl[copia_bajas_nl$DISTANCIA.KM > mediana_bajas_nl, ]
frecuencia_cerca_nl <- nrow(grupo_cerca_nl)
frecuencia_lejos_nl <- nrow(grupo_lejos_nl)
cat("Frecuencia de datos CERCA de la mediana:", frecuencia_cerca_nl, "\n")
## Frecuencia de datos CERCA de la mediana: 118
cat("Frecuencia de datos LEJOS de la mediana:", frecuencia_lejos_nl, "\n")
## Frecuencia de datos LEJOS de la mediana: 96
copia_actuales_nl <- copia_actuales_nl %>%
mutate(ESTATUS = "ACTIVO")
copia_bajas_nl <- copia_bajas_nl %>%
mutate(ESTATUS = "INACTIVO")
df_consolidad_nl <- bind_rows(copia_bajas_nl, copia_actuales_nl)
hist(df_consolidad_nl$DISTANCIA.KM,
main = "Histograma de Distancia (CONSOLIDADO)",
xlab = "Distancia en km",
ylab = "Frecuencia",
col = "orange",
border = "black",
breaks = "Scott")
intervalos_distancia <- c(0, 5, 10, 15, Inf)
df_consolidad_nl$INT.DISTANCIA <- cut(df_consolidad_nl$DISTANCIA.KM,
breaks = intervalos_distancia,
labels = c("0-5", "5.1-10", "10.1-15", "15.1+"),
include.lowest = TRUE)
tc <- tabyl(df_consolidad_nl, INT.DISTANCIA, ESTATUS)
tc <- tc %>%
mutate(TOTAL = rowSums(across(c("ACTIVO", "INACTIVO"))))
tc <- tc %>%
mutate(PORCENTAJE.ACTIVO = round(ACTIVO / TOTAL * 100),
PORCENTAJE.INACTIVO = round(INACTIVO / TOTAL * 100))
tc
## INT.DISTANCIA ACTIVO INACTIVO TOTAL PORCENTAJE.ACTIVO PORCENTAJE.INACTIVO
## 0-5 7 25 32 22 78
## 5.1-10 3 6 9 33 67
## 10.1-15 71 163 234 30 70
## 15.1+ 18 20 38 47 53
####En el caso de RH pudimos identificar que la alta rotacion del personal puede ser por el problema de edad y puestos con lo que se recomienda que Form tenga en cuanta que al contrar a una persona de cierta edad para un puesto especifico pueda tener una nivel de riesgo de que la persona pueda dejar el puesto
####Form es una empresa que cuenta con un nivel alto de dependencia a ciertos clientes por lo cual una estrategia variable para ellos es consolidarse en el mercado de Austin, Texas y ampliar su portafolio de clientes que puedan hacer la empresa menos dependientes de ciertos clientes
####Es posible que Form llege al mercado deseado que es el de estados unidos y por lo cual tendra que no solo incrementar el personal con el que se cuenta si no que también tiene que definir su estrategia de mercado en estados unidos con importaciones y exportaciones
####Otro hallazgo que se encontro fue que las bajas más comunes son por las faltas las cuales se dan en los meses donde hay mas calor en la ciudad lo cual puede interpretarse como que los trabajadores pueden estar descontentos con la calidad del estado laboral en tiempos de calor y prefieren no presentarse en estás epocas