Y la primera sorpresa que me he llevado ha sido la facilidad para integrar modelos directos, desde un fichero de entrada como pueden ser clientes, aplicarles el algoritmo de kmeans para segmentarlos a partir de valores de negocio y datos sociodemograficos. Evidentemente que este tipo de técnicas requieres de manos expertas, sobre todo para analizar los resultados, pero que menos que poder explotarlo de manera visual en un mapa.
Pues eso he hecho, me he creado un pequeño flujo de 7 nodos, para aplicando K-means y C-means para comparar resultados. Luego desde MapBasic me he creado un menú de conexión a knime, donde ejecutar en modo batch el flujo a partir de tablas que tengo en mapinfo y realizar mapas temáticos.
Por si os interesa os dejo el chorro de código que le paso para ejecutarlo en modo batch desde MapBasic. Lo que hago desde MapBasic es:
Include "MAPBASIC.DEF"
Include "MENU.DEF"
Declare Sub Main
Declare Sub kmeans
Declare Sub Mapa
'genero el menú para tenerlo en MapInfo
Sub Main
Create Menu "knime" As
"Segmentacion" Calling kmeans,
"mapa tematico Segmentacion" Calling Mapa
Alter Menu Bar Add "Knime"
End Sub
Sub kmeans
'Exporto la tabla de clientes para enchufarla al knime como parámetro en opción del nodo
Export clientes_ok Into "E:\knime2\clientes.TXT" Type "ASCII" Overwrite Delimiter "|" CharSet "WindowsLatin1" Titles
'lanzo en modo batch el knime, como véis le paso como parámetros en el option=1 (nodo 1) el fichero que acabo de exportar
'y en el nodo 4 y 7 las dos salidas del modelo para luego levantarlas más adelante, se puede parametrizar el numero de
' iteraciones y datos a usar en cada algoritmo
Run Program "cmd.exe /c"+" E:\knime2\knime_2.3.1\knime.exe -consoleLog -nosplash -application -noexit org.knime.product.KNIME_BATCH_APPLICATION -workflowFile=E:\knime2\MapInfo2.zip -option=1,DataURL,"+"file:E:\knime2\Clientes.txt"+",String -option=4,filename,"+"tmp/Clientes_kmeans.csv"+",String -option=9,filename,"+"tmp/Clientes_cmeans.csv"+",String"
End Sub
Sub Mapa
'El resultado lo abro y lo paso a TAB directamente
Register Table "E:\knime2\tmp\Clientes_kmeans.csv" TYPE ASCII Delimiter 44 Titles Charset "WindowsLatin1" Into "E:\knime2\tmp\Clientes_kmeans.TAB"
Open Table "E:\knime2\tmp\Clientes_kmeans.TAB"
Register Table "E:\knime2\tmp\\Clientes_cmeans.csv" TYPE ASCII Delimiter 44 Titles Charset "WindowsLatin1" Into "E:\knime2\tmp\Clientes_cmeans.TAB"
Open Table "E:\knime2\tmp\Clientes_cmeans.TAB"
'uno las tablas de manera dinámica para luego hacer el temático
Add Column "clientes_ok" (Cluster_kmeans Char (9))From Clientes_kmeans Set To Cluster Where COL1 = COL1 Dynamic
Add Column "clientes_ok" (Cluster_cmeans Char (9))From Clientes_cmeans Set To COL13 Where COL1 = COL1 Dynamic
'shade window Frontwindow() 1 with Cluster_kmeans values "" Symbol (34,16711680,12) ,"cluster_0" Symbol (34,65280,12) ,"cluster_1" Symbol (34,255,12) ,"cluster_2" Symbol (34,16711935,12) ,"cluster_3" Symbol (34,16776960,12) ,"cluster_4" Symbol (34,65535,12) ,"cluster_5" Symbol (34,8388608,12) ,"cluster_6" Symbol (34,32768,12) ,"cluster_7" Symbol (34,128,12) ,"cluster_8" Symbol (34,8388736,12) ,"cluster_9" Symbol (34,8421376,12) default Symbol (40,0,12) style replace off
End Sub
Pues de una manera sencilla obtenemos una segmentación en un mapa temático usando un programa de data mining como knime. Os dejo algún pantallazo:
No hay comentarios:
Publicar un comentario