15 de marzo de 2015

Qlikview + R para Kmeans


Notas previas:
• Para el siguiente ejemplo debe estar instalado R
• Debe crearse un archivo .r con script de R que se desea ejecutar
• Un zip con archivos .qvw y .r puede Descargarse-AQUI y copiar en c:\  para ejecutar este ejemplo
• Para este ejemplo se utilizó:
    QlikView 11 SR5 64-bit, 
    R 3.1.0 64-bit
    windows 8.1


Si se tienen datos de clientes en QlikView y se quiere hacer una segmentación usando el algoritmo kmeans del lenguaje R, puede aplicarse la siguiente técnica que ejecuta script de R  usando el comando EXECUTE en Qlikview y luego agrega el resultado al modelo de datos QV.

Los pasos serían estos:
PASO 1: Hacer Store en formato csv de los datos que se desean analizar.
PASO 2: Usar el comando EXECUTE para ejecutar script de R, el cual lee el csv del "Paso 1" y crea un nuevo csv con resultados de cluster creado por algoritmo kmeans.
PASO 3: Hacer Load del csv creado por R para joinear el resultado con cluster al modelo dimensional QV.


Conceptualmente sería esto:






El resultado en QlikView sería este: 

























El script para los pasos seria este:





// PASO 1. Crear datos y guardar en csv
//----------------------------------------------------------------------------
Datos:
LOAD * INLINE [
    Nombre, Edad, MontoConsumo
    Juan, 55, 19
    Pedro, 30, 66
    Maria, 70, 88
    Isabel, 71, 80
    Diego, 68, 34
    Luis, 19, 101
    Lucia, 46, 42
    Francisca, 38, 43
    Alberto, 69, 23
    Garcia, 54, 45
    Soto, 82, 98
    Victor, 28, 31
    Esteban, 19, 76
    Jose, 29, 61
    Beto, 16, 96
    Maciel,75, 5
    Nelson, 60, 51,
    Ale, 79,31
    Alberto, 21,98
    Lee, 82,97]
;
STORE Datos into c:\Qlikview_mas_R\Datos.csv (txt) ;


// PASO 2. Ejecutar script de R via CMD
//----------------------------------------------------------------------------
EXECUTE "C:\Program Files\R\R-3.1.0\bin\R.exe" CMD BATCH "C:\Qlikview_mas_R\kmeans.r";


// PASO 3. Join de csv creado por R
//----------------------------------------------------------------------------
Left Join (Datos)
LOAD *
FROM
[..\..\..\Qlikview_mas_R\Datos_mas_cluster.csv]
(
txt, codepage is 1252, embedded labels, delimiter is ',', msq);
 



Consideraciones:
• En ambiente de produccion, hacer la ejecución de cada paso en diferentes archivos qvw.
• En grandes volumenes de datos, hacer join del paso 3 con un campo clave, y no con todos los campos. Esto para mejorar performance.


Referencia:
http://qlikviewapuntes.blogspot.com/2014/01/execute-para-copiar-archivos-y-otras.html



6 comentarios:

Anónimo dijo...

I cant download the example file.

Enmanuel Santana dijo...

fixed

Luis dijo...

Emmanuel puedes Ahondar Sobre ETL y Carga en Qlikview

Enmanuel Santana dijo...

hola Luis Enrique
Actualmente estoy con una integracion qlik+python y estamos usando este mismo esquema y funciona muy bien. La logica es igual que la imagen (a modo general): store de qlik, execute python y luego load qlik de resultados. Si necesitas más detalles, o ayuda con algo puntual, escribeme y lo vemos.

saludos

Beatriz dijo...

Buenos días,
Tengo una duda, porque si ejecuto únicamente el comando:
execute "D:\R\R-4.0.0\bin\R.exe" CMD BATCH "d:\Qlikview_mas_R\kmeans.r";

Si ejecuta R pero no me genera el csv Datos_mas_cluster.csv, su ejemplo ya trae ese cvs creado, pero como hago para que R lo genere con mis datos y poder hacer el left.

Enmanuel Santana dijo...

hola Beatriz
Al ejecutar kmeans.r se genera el archivo que mencionas. Asegura tener creada la carpeta donde se guarda o cambiar la ruta en esta linea de codigo de R dentro de kmeans.r:
write.csv(Datos,'C:/Qlikview_mas_R/Datos_mas_cluster.csv',row.names=F)