Curso recomendado

jueves, 10 de marzo de 2011

Geomarketing - Integración de knime con MapInfo - MapBasic

El mundo del data minning del que Paco es un verdadero experto siempre me ha quedado un poco lejos, pero gracias a herramientas como KNime voy conociendo un poco más el "mundillo" de la minería de datos.

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: