imagen
Noviembre 2018
imagen
antonio
sparklyr hace fácil el big dataFactoMineR y factoextra nos ayudan a extraer información útil.¿La satisfacción de nuestros clientes está relacionada con dónde viven, qué edad tienen o de dónde vienen ? Consideramos 4 variables
library(sparklyr) library(tidyverse) library(FactoMineR) library(factoextra) library(cowplot)
sc <- spark_connect(master = "local")
Ejemplo de datos
datos_tbl <- datos_tbl %>%
mutate(
tiene_incidencia = ifelse(is.na(tiene_incidencia), "Sin_incidencia", "Incidencia"),
tiene_alguna_porta = ifelse(is.na(tiene_alguna_porta), "no porta", "porta"),
entrada = ifelse(
is.na(entrada) |
entrada == "" | entrada == "NA" ,
"Sin_porta",
entrada
),
prov = ifelse(is.na(prov) |
prov == "" |
prov == "NA", "Prov_desconocida", prov),
edad = case_when(
edad < 0 ~ "Edad_desconocida",
edad < 35 ~ "18-35",
edad < 45 ~ "35-44",
edad < 55 ~ "45-54",
edad < 65 ~ "55-64",
edad >= 65 ~ ">64",
TRUE ~ "Edad_desconocida"
)
)
dat_agrup <-
datos_tbl %>% group_by(nps_cat, prov, entrada, edad) %>% count()
dat_agrup
La tabla con las frecuencias es suficientemente pequeña para tratarla en local. Con FactoMineR podemos usar las frecuencias como ponderación de las filas.
dat_mca <- dat_agrup %>% collect() # traemos a local
dat_mca <- dat_mca %>%
filter(prov != "Prov_desconocida", edad!="Edad_desconocida")
res_mca <- MCA(dat_mca[1:4], ncp = 100, row.w = dat_mca$n, graph = FALSE)
fviz_mca_var(res_mca, repel=TRUE, select.var = list(contrib = 20))
En vez de considerar la tabla multivía construimos una tabla a 2 vías
De esta forma estandarizamos
Construimos las tablas de contingencia que necesitamos en spark, usando la función sdf_pivot
tabla_edad <- datos_tbl %>%
select(nps_cat, edad, prov) %>%
sdf_pivot(nps_cat ~ edad ,
fun.aggregate = list(edad = "count"))
tabla_edad <- collect(tabla_edad)
tabla_edad
res_ca <- CA(mat_final, ncp = 10, graph = FALSE)
fviz_screeplot(res_ca)
fviz_ca_row(res_ca)
fviz_contrib(res_ca , choice = "col", axes = c(1,2))
fviz_ca_biplot(res_ca, repel = TRUE,
select.col = list(contrib = 20 ),
col.col = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
arrows = c(TRUE, FALSE))
fviz_ca_biplot(res_ca, repel = TRUE,
select.col = list(name = c("18-35","35-44","45-54","55-64",
"Incidencia",
"Sin_incidencia" ,"Porta_Comp_A","Porta_Comp_B","Porta_Comp_C")),
arrows = c(TRUE, FALSE))