Fecha: 2016-12-31
Corregir la extracción de la hora para que el análisis tome la hora tal cual se genera de los reportes de Unicentro.
Hacer Análisis Multifactorial de las variables más importantes contra la variable de valor facturado
knitr::opts_knit$set(root.dir="D:/personal/data science/GRAN comunicaciones/GDProducts/GRAN comunicaciones/proyecto Unicentro/reportes")
library("data.table")
#setwd("C:/Users/ROG/Documents/proyectos data science/proyecto Unicentro/reportes")
setwd("D:/personal/data science/GRAN comunicaciones/GDProducts/GRAN comunicaciones/proyecto Unicentro/reportes")
#setwd("C:/Users/EnvyX360/Desktop/GDProducts/GRAN comunicaciones/proyecto Unicentro/reportes")
temp.zip<-list.files(pattern="*.zip") ## Busca los archivos zip que hay
csv.files <- unzip(temp.zip, junkpaths = TRUE, exdir = tempdir())
list2env(setNames(lapply(csv.files, fread, sep=","), basename(tools::file_path_sans_ext(csv.files))), globalenv()) #todos los archivos csv quedan el el ambiente global de R
## <environment: R_GlobalEnv>
You can also embed plots, for example:
Vamos a identificar las variables que tengan fecha, las convertiremos de caracteres a formato fecha y de ahi crearemos las columnas dia de la semana y mes. De aquà podriamos calcular, la edad de las personas, configurar rangos de edades, el mes de la factura,la hora de la factura,
library(lubridate)
format.time<- function(x){as.Date(strptime(x,"%Y-%m-%d"))} ## retorna como fecha el carácter
changecols<- c("fechafact","fecha_carga","nacimiento","fecha_registro_user") #columnas a cambiar
dt<-dt[,(changecols):=lapply(.SD, format.time), .SDcols=changecols] ## modificar la clase de columnas especÃficas
## Estamos creando dÃa de la semana, mes de la factura y edad del usuario
dt<-dt[,`:=`(weekday.fact=weekdays(fechafact),mes.fact=month(fechafact),
edad.usuario=(year(as.Date(Sys.time()))-year(nacimiento)))]
# filtramos datos desde Agosto 2016
dt<-dt[fechafact>=as.Date("2016-08-01",format="%Y-%m-%d")]
## Creo rangos de edad para análizar la data por rangos
dt$edad.usuario[is.na(dt$edad.usuario)]<-mean(dt$edad.usuario, na.rm=T)
rangos.edad <- c(-1,18,25,35,45,65,Inf) # tuve que configurar los rangos de edad desde
dt<-dt[,`:=`(rango.edad=cut(edad.usuario,breaks=rangos.edad))]
Limpiaremos los datos de la variable valor facturado para sacar a Adriana Arboleda y otros con comportamientos atÃpicos del análisis. Esos datos serán guardados en la variable valor. También conservaremos los datos originales sin imputación en la variable valor2. El propósito de ellos es que para el análisis de clusteres necesitaremos los datos originales sin imputación.
En caso de que se incluya el valor facturado al modelo se recomienda hacer transformación a los datos.
Finalmente empezaremos por unir los datos de tiendas y usuarios con las tablas de: usuarios-tiendas-seleccionadas y usuarios-tiendas-categorias para analizar a los usuarios por tiendas visitadas y categorÃas.
Seleccionaremos las siguientes variables para determinar si hay correlación entre las siguientes variables:Tienda,valor,documento, genero,ciudad,sector,nivel_educativo,estado.civil,hijos,week.day,rango.edad y recompra.
library(FactoMineR)
variables.PCA<-c(8,6,14,16:20,26,29,32)
dt2<-dt[,(.SD),.SDcols=variables.PCA]
setcolorder(dt2, c("valor","hijos","tienda","genero","ciudad","sector","nivel_educativo","estado_civil","weekday.fact","rango.edad", "recompra")) ##reordenamos columnas
#factorcols<- c("genero", "ciudad","sector", "nivel_educativo","estado_civil","weekday.fact")
factorcols <- colnames(dt2)[which(as.vector(dt2[,lapply(.SD, class)]) == "character")]
dt2<-dt2[,(factorcols):=lapply(.SD, as.factor), .SDcols=factorcols] ## modificar la clase de columnas
for (i in 2:ncol(dt2)){
dt3<-dt2[,(.SD),.SDcols=c(1,i)]
tipo<-ifelse(i>2,c("n"),c("s"))
res.dt3 <-MFA(dt3, group=c(1,1), type=c("s",tipo),ncp = 2,
name.group = c("valor.fact",colnames(dt3)[2]), graph = F)
titulo<-paste0("Análisis Multifactorial para valor facturado y ",colnames(dt3)[2])
plot(res.dt3, choix="axes", title=list(titulo))
jpeg(paste0(titulo,".jpg"),width=720,height = 480)
plot(res.dt3, choix="axes", title=list(titulo))
dev.off()
}