# Abro las librerías
library(DescTools)
library(dplyr)
library(plotly)
library(DT)
library(tidyverse)
library(StatMeasures)
options(scipen = 999)
# Levanto los datos
applicants_tabla <- readRDS("D:/Documentos/Trabajo/Proyecto/Sprint_1/applicants_anon_tabla.rds")
log_events_tabla <- readRDS("D:/Documentos/Trabajo/Proyecto/Sprint_1/log_events_tabla.rds")
# Levanto los datos
log_events <- readRDS("D:/Documentos/Trabajo/Proyecto/Sprint_1/log_events_clean.rds")
log_events %>%
arrange(event_id) -> log_events
# Armo la tabla para analizar los distintos "Primeros eventos"
log_events %>%
group_by(Primer_event) %>%
summarise(Cantidad_Usuarios = length(unique(applicant_id))) -> primeros_eventos
A contnuación se presentan la distribución de los
usuarios según los distintos tipos de entrevistas detectados.
# Armo tabla cruzada para detectar el tipo de entrevistas existentes
log_events %>%
filter(Primer_event == "Applicant_created",
nro_evento<=23 | is.na(nro_evento),
!event %in% c("personal_info_saved",
"video_muted: false",
"video_muted: true",
"success_end",
"video_playing",
"video_finished"),
duplicated(paste(applicant_id,events_cat_1)) == FALSE) %>%
filter(Tipo_Entrevista %in% c('2_welcome','2_welcome-img','3_welcome','3_welcome-img',
'4_WP4','5_WP5')) %>%
group_by(Tipo_Entrevista) %>%
summarise(test_id = paste0(unique(test_id),collapse = "_"),
welcome_view = paste0(unique(welcome_view),collapse = "_"),
Cant_Usuarios = length(unique(applicant_id)),
Cant_Terminan = length(unique(applicant_id[is.na(tiempo_finalizaron_entrevista)==FALSE])),
Tiempo_Prom_Segundos = mean(tiempo_finalizaron_entrevista,na.rm = TRUE),
Cant_Eventos = n()) %>%
mutate(Cant_Eventos_Prom = Cant_Eventos / Cant_Usuarios,
Pct_Usuarios = Cant_Usuarios / sum(Cant_Usuarios),
Pct_Eventos = Cant_Eventos / sum(Cant_Eventos),
Tasa_Terminan = Cant_Terminan/Cant_Usuarios)-> tipos_entrevistas
tipos_entrevistas %>%
select(test_id,
welcome_view,
Cant_Usuarios,
Pct_Usuarios) %>%
datatable(rownames = FALSE,
options = list(paging=FALSE,
searching=FALSE)) %>%
formatRound(c("Cant_Usuarios"),
0) %>%
formatPercentage(c("Pct_Usuarios"),
2) %>%
formatStyle(c("Pct_Usuarios"),
background = styleColorBar(c(0,max(tipos_entrevistas$Pct_Usuarios)),
'lightblue'),
backgroundSize = '100% 100%',
backgroundRepeat = 'no-repeat')
En la siguiente tabla se puede apreciar que las entrevistas cuyo
“welcome_view” es “welcome-img” cuantan con mayor tasa de usuarios que
terminan la entrevista completa.
Además, analizando el
tiempo promedio en días en que tardan en finalizar la entrevista, puede
verse una disminución de la demora en terminar las entrevistas en los
“test_id” = 3.
A contnuación se presentan la distribución
de los usuarios según los distintos tipos de entrevistas detectados.
# Defino los cortes que van a hacer que cambie de color
brks <- quantile(c(tipos_entrevistas$Tiempo_Prom_Segundos),
probs = seq(0, 1, .05), na.rm = TRUE)
# Defino los colores que voy a usar
colfunc <- colorRampPalette(c("#63be7b","#ffdb81","#f8696b"))
clrs <- colfunc(length(brks) + 1)
tipos_entrevistas %>%
select(test_id,
welcome_view,
Cant_Usuarios,
Cant_Terminan,
Tasa_Terminan,
Tiempo_Prom_Segundos) %>%
datatable(rownames = FALSE,
options = list(paging=FALSE,
searching=FALSE)) %>%
formatRound(c("Cant_Usuarios",
"Cant_Terminan",
"Tiempo_Prom_Segundos"),
0) %>%
formatPercentage(c("Tasa_Terminan"),
2) %>%
formatStyle(c("Tasa_Terminan"),
background = styleColorBar(c(0,max(tipos_entrevistas$Tasa_Terminan)),
'#D98FF3'),
backgroundSize = '100% 100%',
backgroundRepeat = 'no-repeat',
fontWeight = "bold") %>%
formatStyle(c("Tiempo_Prom_Segundos"),
backgroundColor = styleInterval(brks, clrs))
# Analisis sobre entrevistas terminadas
log_events %>%
filter(Tipo_Entrevista %in% c('2_welcome','2_welcome-img','3_welcome','3_welcome-img',
'4_WP4','5_WP5')) %>%
filter(Primer_event == "Applicant_created",
nro_evento<=23 | is.na(nro_evento),
!event %in% c("personal_info_saved",
"video_muted: false",
"video_muted: true",
"success_end",
"video_playing",
"video_finished"),
duplicated(paste(applicant_id,events_cat_1)) == FALSE) %>%
mutate(Fin_Orden = case_when(Tiempo_Fin_Entrevista == "Menos_1dia" ~ 1,
Tiempo_Fin_Entrevista == "Menos_3dias" ~ 2,
Tiempo_Fin_Entrevista == "Menos_7dias" ~ 3,
Tiempo_Fin_Entrevista == "Mas_7dias" ~ 4,
TRUE ~ 5)) %>%
group_by(Fin_Orden,Tipo_Entrevista) %>%
summarise(Tiempo_Fin_Entrevista = paste0(unique(Tiempo_Fin_Entrevista),collapse = "_"),
Cantidad = length(unique(applicant_id)),
Pct = length(unique(applicant_id))) %>%
group_by(Tipo_Entrevista) %>%
mutate(Pct = Pct / sum(Pct),
Cantidad_Ac = cumsum(Cantidad),
Pct_Ac = Cantidad_Ac/sum(Cantidad)) -> entrevistas_terminadas
# Grafico de distribucion por tipo de entrevista y cant de dias hasta terminar
entrevistas_terminadas %>%
mutate(Tiempo_Fin_Entrevista = factor(Tiempo_Fin_Entrevista,
levels = c("No_Terminaron","Mas_7dias","Menos_7dias","Menos_3dias","Menos_1dia"))) %>%
plot_ly(x = ~Tipo_Entrevista,
y = ~Pct,
color = ~Tiempo_Fin_Entrevista,
type = "bar") %>%
layout(title = "Distribución de entrevistas según tipo y tiempo hasta terminar",
yaxis = list(title = "Porcentaje"),
xaxis = list(title = "Tipo de Entrevista"),
barmode = "stack")
entrevistas_terminadas %>%
mutate(Tiempo_Fin_Entrevista = factor(Tiempo_Fin_Entrevista,
levels =
c("Menos_1dia","Menos_3dias","Menos_7dias","Mas_7dias","No_Terminaron"))) %>%
plot_ly(x = ~Tiempo_Fin_Entrevista,
y = ~Pct_Ac,
color = ~Tipo_Entrevista,
type = "scatter",
mode = "lines+markers") %>%
layout(title = "Acumulación de entrevistas",
yaxis = list(title = "Porcentaje"),
xaxis = list(title = "Tiempo para terminar la entrevista"))
entrevistas_terminadas[,2:4] %>%
spread(Tiempo_Fin_Entrevista, Cantidad)->entrevistas_terminadas_1
entrevistas_terminadas_1[is.na(entrevistas_terminadas_1)] <- 0
brks <- quantile(entrevistas_terminadas_1[,2:ncol(entrevistas_terminadas_1)],
probs = seq(0, 1, .05), na.rm = TRUE)
clrs <- round(seq(255, 40, length.out = length(brks) + 1), 0) %>%
{paste0("rgb(255,", ., ",", ., ")")}
entrevistas_terminadas_1 %>%
select(Menos_1dia,
Menos_3dias,
Menos_7dias,
Mas_7dias,
No_Terminaron) %>%
datatable(rownames = FALSE,
options = list(paging=FALSE,
searching=FALSE)) %>%
formatStyle(names(entrevistas_terminadas_1)[2:ncol(entrevistas_terminadas_1)],
backgroundColor = styleInterval(brks, clrs)) %>%
formatRound(names(entrevistas_terminadas_1)[2:ncol(entrevistas_terminadas_1)],0)
log_events %>%
filter(Tipo_Entrevista %in% c('2_welcome','2_welcome-img','3_welcome','3_welcome-img',
'4_WP4','5_WP5')) %>%
mutate(events_cat_1 = case_when(test_id ==2 &
events_cat_1 == "Psicometrico_Phrasing_22" ~ "Psicometrico_Phrasing_AnteUlt",
test_id ==2 &
events_cat_1 == "Psicometrico_current_22" ~ "Psicometrico_current_AnteUlt",
test_id ==2 &
events_cat_1 == "Psicometrico_Phrasing_23" ~ "Psicometrico_Phrasing_Ult",
test_id ==2 &
events_cat_1 == "Psicometrico_current_23" ~ "Psicometrico_current_Ult",
test_id ==3 &
events_cat_1 == "Psicometrico_Phrasing_20" ~ "Psicometrico_Phrasing_AnteUlt",
test_id ==3 &
events_cat_1 == "Psicometrico_current_20" ~ "Psicometrico_current_AnteUlt",
test_id ==3 &
events_cat_1 == "Psicometrico_Phrasing_21" ~ "Psicometrico_Phrasing_Ult",
test_id ==3 &
events_cat_1 == "Psicometrico_current_21" ~ "Psicometrico_current_Ult",
TRUE ~ events_cat_1)) %>%
filter(Primer_event == "Applicant_created",
events_cat_1 %in% c("Applicant_created",
"field set: 1",
"field set: 8",
"Psicometrico_Phrasing_1",
"Psicometrico_Phrasing_AnteUlt",
"Psicometrico_Phrasing_Ult"),
duplicated(paste(applicant_id,events_cat_1)) == FALSE) %>%
group_by(applicant_id,events_cat_1) %>%
mutate(dif_seg = ifelse(is.na(dif_seg),0,dif_seg),
Supera = ifelse(dif_seg>60*60*24*7,1,0),
Supera_ac = cumsum(Supera)) %>%
filter(Supera_ac==0,
Primer_event == "Applicant_created") %>%
ungroup() %>%
mutate(events_cat_ord = factor(events_cat_1,
levels= c("Applicant_created",
"field set: 1",
"field set: 8",
"Psicometrico_Phrasing_1",
"Psicometrico_Phrasing_Ult"))) %>%
group_by(events_cat_ord,Tipo_Entrevista) %>%
summarise(Evento = paste(unique(events_cat_ord),collapse = "_"),
Cant_Usuarios = length(unique(applicant_id)),
#Tiempo_Prom = mean(dif_seg,na.rm = TRUE),
#Tiempo_Minimo = min(dif_seg,na.rm = TRUE),
Tiempo_Mediano = median(dif_seg,na.rm = TRUE),
Tiempo_Maximo = max(dif_seg,na.rm = TRUE))-> resumen_01
resumen_01 %>%
group_by(Tipo_Entrevista) %>%
do(p=plot_ly(.,
x = ~Cant_Usuarios,
y = ~events_cat_ord,
type = "funnel",
textinfo = "value+percent initial",
textposition = "inside",
split = ~Tipo_Entrevista)) %>%
subplot(nrows = 3,
shareX = TRUE,
shareY = TRUE)