为什么在Modeler中运行需要这么长时间?

时间:2019-10-22 07:38:20

标签: r spss-modeler

我写了一个循环来找出哪个客户是新客户。代码是这样的:

#Format dates

emision <- as.POSIXct(modelerData$Fecha_Emision_Poliza, format= "%Y-%m-%d", tz="UTC")

anulacion <- as.POSIXct(modelerData$Fecha_Anulacion, format= "%Y-%m-%d", tz="UTC")


#Todo a TRUE

modelerData$Nuevos_Clientes[1] <- "T"


#La primera póliza a TRUE las demás a False

for (t in 2:nrow(modelerData)) {

  modelerData$Nuevos_Clientes[t] <- "T"

  if (modelerData$Cod_Titular_Poliza[t]==modelerData$Cod_Titular_Poliza[t-1]){

    modelerData$Nuevos_Clientes[t] <- "F"
  }
}

#Define vector for indexes
vec <- vector(length = nrow(modelerData)) 
vec <- which(modelerData$Nuevos_Clientes == "T")

vec[length(vec)+1] <- nrow(modelerData)+1

#Create function for max annulations `anteriores`

max_anula <- function( q, w) {

  voc <- vector(length = q-w)

  for (m in w:(q-1)) {
    voc[m-w+1]<- anulacion[m]

  }

  maxi <- max(voc, na.rm = TRUE)

  return(maxi)
}

#Recorre las pólizas
s <- 1
for (h in vec){
  s <- s+1
if(h==max(vec) | s == length(vec)+1){
  break
}  
  else if (vec[s]-vec[s-1]==1){

  next}

  else {

for (i in (h+1):(vec[s]-1)){

  print(cat("Esta es i: ",i,"\n"))
  print(cat("Esta es s: ",s,"\n"))
  print(cat("Esta es h: ",h,"\n"))

  if(emision[i]==emision[i-1]){

    modelerData$Nuevos_Clientes[i]<-modelerData$Nuevos_Clientes[i-1]
  } 
  else if (is.na(anulacion[i-1]==TRUE)){

    for (n in i:(vec[s]-1)) {
      modelerData$Nuevos_Clientes[i]<- "F" #Como hay una arriba "Activa" todos los de abajo "F"
       #rompe el bucle ya no tengo que mirar más pólizas
    }
    break
  } else if (emision[i]<anulacion[i-1]){
    modelerData$Nuevos_Clientes[i]<- "F"
  }
    else if (as.numeric(emision[i])< max_anula(i-1, h)){ #(emision[i]< max(anulacion_anteriores, na.rm = TRUE))){
      modelerData$Nuevos_Clientes[i]<- "F" 
    }
    else 

      modelerData$Nuevos_Clientes[i]<- "T" 

                           }  
     }
}

#Creamos la nueva columna

modelerData$Nuevos_Clientes <- Nuevos_Clientes

newVar <- c(fieldName="Nuevos_Clientes", fieldLabel="", fieldStorage="string", fieldMeasure="", fieldFormat="", fieldRole="")

modelerDataModel <- cbind(modelerDataModel, newVar)

数据集样本(Nuevos_Clientes是我正在计算的字段):

Cod_Titular_Poliza  Cod_Poliza  Fecha_Emision_Poliza    Fecha_Anulacion Nuevos_Clientes
99999   41000011063800000   01/03/2003 0:00 31/01/2006 0:00 T
99998   41000011063800000   01/03/2003 0:00 31/10/2006 0:00 T
99997   41000011063800000   01/03/2003 0:00 31/01/2006 0:00 T
99996   41000011063800000   01/03/2003 0:00 31/01/2006 0:00 T
99996   41000011063300000   01/01/2006 0:00 31/12/2006 0:00 F
99996   41000011088800000   01/01/2014 0:00     T

如果我只是将.csv中的100.000行样本导出到R Studio并执行代码,则只需几分钟。但是,如果我在Modeler的R转换节点中运行相同的代码,则将花费数小时。有什么我想念的吗?如果在Modeler中取样10.000行,则将花费53秒。为什么要运行100.000行需要几个小时?大约需要530秒吗?

感谢您的帮助。

0 个答案:

没有答案