close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Ticket #1618: EndesaPrimas_CLARA_Clustering.tol

File EndesaPrimas_CLARA_Clustering.tol, 3.6 KB (added by Ismael Sánchez, 12 years ago)
Line 
1//////////////////////////////////////////////////////////////////////////////
2// FILE :  EndesaPrimas_CLARA_Clustering.tol
3// PURPOSE : Extracción datos y cluster CLARA
4//////////////////////////////////////////////////////////////////////////////
5
6// Parámetros
7////Base de datos
8Real DBOpen( "PrjEndesaPRIMas" , "endesa", "end!101.");
9////Tabla de muestra
10Text nombre_tabla_muestra = "vmc_cliente_cluster_v2";
11
12//Extracción de los datos
13//Se crea la query
14Text query =
15   "select ccliente,
16      case when avg_vpotppal_3M = 0 then 0 else ln(avg_vpotppal_3M) end as vpotppal,
17      qt_contrat_3M,
18      pc_imp_mora_3M,
19      qt_obl_mora_3M,
20      qt_imp_medio_3M,
21      case when qt_dias_recencia_3m is null then 0 else ln(qt_dias_recencia_3m)
22        end as qt_dias_recencia_3m  ,
23      sum_dias_mora_3M,
24      avg_dias_mora_3M
25    from " + nombre_tabla_muestra   
26;
27WriteLn("La query que extrae la muestra es:
28  "+query);
29
30//Se extrae la información
31Matrix Original_data = Matrix DBMatrix(query);
32Matrix Var_cluster = SubCol(Original_data, [[2,3,4,5,6,7]]);
33
34//////////////////////////////////////////////////////////////////////////////
35//Función que extrae los estadísticos de una matriz
36//////////////////////////////////////////////////////////////////////////////
37Set Matrix_Stadistic (Matrix mat){
38  For(1, Columns(mat), Set (Real x){
39    Matrix vector = SubCol(mat, [[x]]);
40    Real Media = MatAvr(vector);
41    Real Desv_est = MatStDs(vector);
42    Real Varianza = MatVar(vector);
43    Real Maximo = MatMax(vector);
44    Real Minimo = MatMin(vector);
45    Real Mediana = MatMedian(vector);
46    Set Estadísticos = [[Media, Desv_est, Varianza, Maximo, Minimo, Mediana]];
47    Eval("Set Stadistics_var_"+FormatReal(x)+" = Estadísticos")
48  })
49};
50
51//////////////////////////////////////////////////////////////////////////////
52//Transformación de las variables
53//////////////////////////////////////////////////////////////////////////////
54
55
56Matrix var = SubCol(Var_cluster, [[4]]);
57Set var_stadistic = Matrix_Stadistic(var);
58Matrix var_trans = RProd(var-var_stadistic[1][1],var_stadistic[1][2]);
59
60
61Matrix Var_cluster_trans = ConcatColumns(SubCol(Var_cluster, [[2,3]]),
62  var_trans,SubCol(Var_cluster, [[5,6]]));
63
64
65
66//////////////////////////////////////////////////////////////////////////////
67//Clustering
68//////////////////////////////////////////////////////////////////////////////
69#Require Rcluster;
70
71Real Cantidad_clusters = 4;
72Real Cantidad_variables = 6;
73
74Set Clara_cluster =
75  Rcluster::CLARA::Run(Var_cluster, Cantidad_clusters, [[ Real verbose = True ]]);
76
77Matrix Cluster_Asignment =
78  ConcatColumns(Clara_cluster["assignment"],Var_cluster);
79
80//Cálculo de las estadísticas de las variables de cada cluster
81Set Cluster_Stadistics = For(1, Cantidad_clusters, Set (Real x){
82  Set stadistics = Matrix_Stadistic(
83    Matrix SubCol(
84      SetMat(
85        Select(MatSet(Cluster_Asignment), Real(Set se){
86          Real se[1] == x
87        })
88      ), Range(2, Cantidad_variables+1,1)
89    )
90  );
91  Eval("Set Stadistics_cluster_"+FormatReal(x)+" = stadistics")
92});
93
94//Variables de los representantes (medoides)
95Matrix Medoides_vars = SubRow(Var_cluster,
96  Set BinGroup("<<",MatSet(Clara_cluster["representative"])));
97
98//Tamaño de cada cluster
99Set Tamaño_Cluster = For(1, Cantidad_clusters, Real (Real x){
100        Real dim_cluster = Card(
101          Select(MatSet(Cluster_Asignment), Real(Set se){
102            Real se[1] == x
103          })
104        );
105    Eval("Real dim_cluster_"+FormatReal(x)+" = dim_cluster")
106});
107
108Real Stop;
109
110
111
112
113
114
115
116
117
118
119