library (tidyverse)
library (foreign)
library (ggplot2)
library(dplyr)
library(scales)
library(ggrepel)
colores_base <- c("maroon4", "mediumorchid3", "thistle")
generar_variantes <- function(color, n) {
color_fun <- colorRampPalette(c("lavenderblush", 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("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\US_Auto_Parts_Industry.csv")
CarProduction<-read.csv("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\US_Auto_Production_Sales.csv")
ImpCartonBox<-read.csv("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\Importers of Cartons boxes cases of corrugated paper or board 2020-2021.csv")
ExpCartonBox<-read.csv("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\Exporters of Carton boxes cases of corrugated paper or board 2020-2021.csv")
RH_info<-read.csv("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\form_rh_datos.csv")
Data1 <- read.csv("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\mx_exportacion_autos.csv")
RHB <-read.csv("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\form_rh_bajas_datosB.csv")
Ndatos<- read.csv ("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\hybrid_car_units.csv")
mx_exauto <- read.csv("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\mex_exports_autoparts.csv")
Autopartes <- read.csv("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\Autopartes.csv")
ventas_carton <- read.csv("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\ventas.csv")
View(Autoparts)
View(CarProduction)
View(ImpCartonBox)
View(ExpCartonBox)
View(RH_info)
RH1<-RH_info%>%select(FECHA.DE.NACIMIENTO,GENERO,FECHA.DE.ALTA,Primer.mes,X4to.mes,PUESTO,DEPARTAMENTO,SALARIO.DIARIO.IMSS,ESTADO.CIVIL,TARJETA.CUENTA)
View(RH1)
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))
#####Con esta gráfica podemos observar las marcas de autos con más
exportaciones, esto es relevante para el socio formador ya que indica un
área de oportunidad de posibles clientes. Como se puede observar, Nissan
es la marca con más exportaciones por año, y al ser una marca de origen
Japones, entra en el mercado de clientes que le interesan a Forms.
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)
## Warning: Removed 40 rows containing non-finite values (`stat_boxplot()`).
##### La venta de autos híbridos ha ido en aumento durante los últimos
años, gracias a las tendencias de consumo y cuidado del ambiente. En
esta gráfica se puede analizar que en la zona Norte del país se realizan
más ventas de este tipo de autos que en otras zonas. Sin embargo, el
rendimiento más alto se encuentra en la zona Norte Occidental.
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)
##### En este gráfico podemos observar la participación de los distintos
estados de México en las exportaciones de autopartes, esto nos permite
visualizar a grandes rasgos en que estados es en donde hay más
exportación de autopartes a países extranjeros. Estos hallazgos nos
permiten tomar decisiones estratégicas, como por ejemplo elegir alguna
ubicación estratégica para un almacén, punto de distribución o incluso
una planta.
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" = "lavenderblush", "Total de importaciones" = "mediumorchid3")) +
theme_minimal() +
labs(fill = "Tipo de Importación")
##### Se puede observar fácilmente el impacto de la pandema por
Covid-19, ya que la tendencia de la gráfica iba en ascenso hasta el año
2020 que los negocios estuvieron detenidos, y luego nuevamente en los
años posteriores vuelve a ascender el total de importaciones. Es
importante mencionar también, que el país con más importaciones es USA
con más del 50% del total de importaciones.
ICB2<-ImpCartonBox%>%arrange(desc(Trade.Value))
View(ICB2)
ICB3<-ICB2%>%filter(Trade.Value>=123989664)
View(ICB3)
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)
##### La gráfica anterior nos permite visualizar los países que importan
más y a los que podrá expandirse FORMS para nuevos clientes
internacionales.
ECB2<-ExpCartonBox%>%arrange(desc(Trade.Value))
View(ECB2)
ECB3<-ECB2%>%filter(Trade.Value>=101375372)
View(ECB3)
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)
##### Los países más exportadores de cajas y empaques de cartón son del
continente asiático y no entran en el grupo de “clientes prohibidos” de
FORM. Estos datos son importantes para el socio formador ya que son
competidores directos y pueden representar una amenaza y sería más
dificil penetrar en el mercado de esos lugares debido a la alta
competencia de la industria.
view(ventas_carton)
ggplot(ventas_carton, aes(x = Mes, y = Carton)) +
geom_bar(stat = "identity", fill = "mediumorchid2") +
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)
##### Durante el 2022 las ventas de cartón tuvieron un incremento
durante el final de cada trimestre, sin embargo, Agosto fue el mes con
incrementos más considerables respecto al mes anterior.
####** Antecedentes de las industrias**
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("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\B_form_rh_bajas_datos_2022.csv")
datos_2023 <- read.csv("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\B_BDD_FORM_BAJAS_2023.csv")
datos_actuales <- read.csv("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\form_rh_datos (1).csv")
datos_2023 <- datos_2023[complete.cases(datos_2023), ]
df_bajas <- bind_rows(datos_2022, datos_2023)
df_bajas <- as.data.frame(lapply(df_bajas, toupper))
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)
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("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\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("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\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ón 66647 Soltera 8133726737
## 2 Nuevo Leon 66646 Casada 8115902048
## 3 Nuevo León 64120 Casado 8110206284
## 4 Nuevo León 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)
##### La gráfica nos confirma lo que nos mencionó con anterioridad el
CEO de la empresa; los empleados no mencionan el motivo por el que están
abandonando la compaía. De 279 personas, solamente el 23.7% registró el
motivo por el que estaba dejando a FORM. Los motivos que se encontraron
son:
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.55
## 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.54571
Rango_edad
## [1] 55
Varianza_edad
## [1] 122.4091
DesvEs_edad
## [1] 11.06386
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 1689 2019-01-28 36 FEMENINO AYUDANTE GENERAL A.G.
## 2 1595 2019-05-02 39 FEMENINO AYUDANTE GENERAL A.G.
## 3 1346 2020-01-06 56 FEMENINO AYUDANTE GENERAL A.G.
## 4 902 2021-03-25 30 FEMENINO AYUDANTE GENERAL A.G.
## 5 902 2021-03-25 27 FEMENINO AYUDANTE GENERAL A.G.
## 6 882 2021-04-14 27 FEMENINO AYUDANTE GENERAL A.G.
## 7 872 2021-04-24 52 FEMENINO AYUDANTE GENERAL A.G.
## 8 839 2021-05-27 54 FEMENINO AYUDANTE GENERAL A.G.
## 9 708 2021-10-05 61 FEMENINO AYUDANTE GENERAL A.G.
## 10 638 2021-12-14 39 FEMENINO AYUDANTE GENERAL A.G.
head(dataRH4M,10)
## DiasTrabajados FECHA.DE.ALTA EDAD GENERO PUESTO PUESTO_N
## 1 2577 2016-08-23 27 MASCULINO AYUDANTE GENERAL A.G.
## 2 2436 2017-01-11 29 MASCULINO AYUDANTE GENERAL A.G.
## 3 2209 2017-08-26 59 MASCULINO AYUDANTE GENERAL A.G.
## 4 1315 2020-02-06 23 MASCULINO AYUDANTE GENERAL A.G.
## 5 1131 2020-08-08 54 MASCULINO AYUDANTE GENERAL A.G.
## 6 1119 2020-08-20 46 MASCULINO AYUDANTE GENERAL A.G.
## 7 1044 2020-11-03 31 MASCULINO AYUDANTE GENERAL A.G.
## 8 704 2021-10-09 21 MASCULINO AYUDANTE GENERAL A.G.
## 9 678 2021-11-04 22 MASCULINO AYUDANTE GENERAL A.G.
## 10 664 2021-11-18 21 MASCULINO AYUDANTE GENERAL A.G.
summary(dataRH4F)
## DiasTrabajados FECHA.DE.ALTA EDAD GENERO
## Min. : 386.0 Min. :2019-01-28 Min. :21.00 Length:31
## 1st Qu.: 415.5 1st Qu.:2021-06-28 1st Qu.:28.00 Class :character
## Median : 518.5 Median :2022-04-12 Median :39.00 Mode :character
## Mean : 651.6 Mean :2021-11-30 Mean :38.55
## 3rd Qu.: 806.2 3rd Qu.:2022-07-24 3rd Qu.:49.50
## Max. :1689.0 Max. :2022-08-23 Max. :61.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. : 386.0 Min. :2016-08-23 Min. :20.00 Length:24
## 1st Qu.: 414.2 1st Qu.:2020-10-15 1st Qu.:21.00 Class :character
## Median : 583.5 Median :2022-02-06 Median :24.00 Mode :character
## Mean : 850.0 Mean :2021-05-16 Mean :28.46
## 3rd Qu.:1062.8 3rd Qu.:2022-07-25 3rd Qu.:31.00
## Max. :2577.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-26 Class :character
## Mode :character Mode :character Median :1995-02-09 Mode :character
## Mean :1992-05-15
## 3rd Qu.:2000-10-04
## Max. :2022-10-31
##
## RFC FECHA.DE.ALTA MOTIVO.DE.BAJA DIAS.LABORADOS
## Length:516 Min. :2016-10-12 Length:516 Length:516
## Class :character 1st Qu.:2022-04-07 Class :character Class :character
## Mode :character Median :2022-08-27 Mode :character Mode :character
## Mean :2022-08-27
## 3rd Qu.:2023-03-24
## Max. :2023-08-23
##
## BAJA PUESTO DEPARTAMENTO SALARIO
## Min. :2021-11-27 Length:516 Length:516 Min. :144.4
## 1st Qu.:2022-05-17 Class :character Class :character 1st Qu.:180.7
## Median :2023-01-23 Mode :character Mode :character Median :180.7
## Mean :2022-11-28 Mean :194.6
## 3rd Qu.:2023-06-07 3rd Qu.:217.6
## Max. :2023-08-28 Max. :500.0
## NA's :14 NA's :1
## 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 OBSERVACIONES CP
## Length:516 Length:516 Length:516 Length:516
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## EDAD DIAS.LABORADOS.CALCULADO DIRECCION
## Min. : 1.00 Min. :-279.00 Length:516
## 1st Qu.:23.00 1st Qu.: 8.00 Class :character
## Median :29.00 Median : 21.00 Mode :character
## Mean :31.34 Mean : 87.04
## 3rd Qu.:38.00 3rd Qu.: 85.00
## Max. :62.00 Max. :1966.00
## NA's :14
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
## 3 137 247 129
frecuenciagenero <- table(df_bajas_f$GENERO)
frecuenciagenero
##
## FEMENINO MASCULINO
## 289 227
frecuenciaestadocivil <- table(df_bajas_f$ESTADO.CIVIL)
frecuenciaestadocivil
##
## DIVORCIO MATRIMONIO SOLTERO UNION LIBRE
## 3 137 247 129
tabyl(df_bajas_f,GENERO,ESTADO.CIVIL)
## GENERO DIVORCIO MATRIMONIO SOLTERO UNION LIBRE
## FEMENINO 2 76 136 75
## MASCULINO 1 61 111 54
library(tidyverse)
library(dplyr)
library(ggplot2)
library(lubridate)
data<-read.csv("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\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 = "plum4", width = 0.7, fill = "plum3") +
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("C:\\Users\\A00831614\\Documents\\Directorio de trabajo\\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 46
## 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 46
## 6 POLICIA AUXILIAR GUADALUPE NUEVO LEON SOLTERIA NA 57
## dias_trabajados
## 1 391
## 2 572
## 3 2436
## 4 1044
## 5 574
## 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 <- "1eff12f0d3ed448d86c8e799ba5f0a27"
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 <- 25.75419
longitud_objetivo <- -100.17443
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
class(copia_bajas_nl$DISTANCIA.KM)
## [1] "numeric"
hist(copia_bajas_nl$DISTANCIA.KM,
main = "Histograma de Distancia (BAJAS)",
xlab = "Distancia en km",
ylab = "Frecuencia",
col = "maroon3",
border = "maroon4",
breaks = 20)
##### El histograma nos muestra, que gran parte los empleados que se
dieron de baja de la empresa tenían que recorrer distancias de entre 0 y
2 km para llegar a la fábrica.
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: 234
cat("Frecuencia de datos LEJOS de la mediana:", frecuencia_lejos_nl, "\n")
## Frecuencia de datos LEJOS de la mediana: 233
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 = "mediumorchid3",
border = "mediumorchid4",
breaks = 20)
intervalos_distancia <- c(0, 1, 2, 3, 5, 10, Inf)
df_consolidad_nl$INT.DISTANCIA <- cut(df_consolidad_nl$DISTANCIA.KM,
breaks = intervalos_distancia,
labels = c("0-1", "1-2", "2-3", "3-5", "5-10", "10+"),
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-1 5 37 42 12 88
## 1-2 44 259 303 15 85
## 2-3 10 25 35 29 71
## 3-5 9 17 26 35 65
## 5-10 7 37 44 16 84
## 10+ 22 92 114 19 81