Curso: Minería de datos
Pre procesamiento de datos :Discretización de datos
Aplicación 2. Productores pecuarios
Se tienen los datos de una encuesta de una línea base para implementar un programa de asistencia técnica a los productores pecuarios de la región de Cajamarca.
Archivo: IMD_PD_Clase_03_PreProcesamiento_02_Datos01.csv
Las variables son:
X1_Tamaño_Predio Tamaño de predio (has)
X2_N_Vacuno Número de cabezas de ganado vacuno
X3_N_Ovino Número de cabezas de ganado ovino
X4_N_Cuy Número de cabezas de cuyes
X5_P_Leche Producción de leche (litros/día)
X6_P_Lana Producción de lana (libras/día)
X7_P_Carne Producción de carne (kgs/día)
X8_V_Leche Venta de leche (litros)
X9_V_lana Venta de lana (libras)
X10_V_Carne Venta de carne (kgs.)
X11_Ingreso Ingreso (soles)
X12_Capacitacion Recibió capacitación en manejo de pastos (Si, No)
X13_A_Tecnica Recibió asistencia técnica (Si, No)
X14_T_Pasto Tipo de pasto (Cultivado o Natural)
X15_Tecnologia Tecnología para el manejo de pastos (Alta, Media o Baja)
Y_Productividad Mejoró su productividad en el último año (Si, No)
# Lectura de archivo de datos
Datos=read.table("IMD_PD_Clase_03_PreProcesamiento_02_Datos01.csv", stringsAsFactors=TRUE, header=F,sep=";")
# install.packages("arules")
library(arules)
# Lectura de archivo de datos
Datos=read.table("IMD_PD_Clase_03_PreProcesamiento_02_Datos01.csv", stringsAsFactors=TRUE, header=TRUE,sep=";")
attach(Datos)
str(Datos)
## 'data.frame': 840 obs. of 16 variables:
## $ X1_Tamano_Predio: num 8 6 3 3 4 3 3 3 8 2 ...
## $ X2_N_Vacuno : int 19 34 17 58 14 45 21 45 52 14 ...
## $ X3_N_Ovino : int 118 26 143 52 47 39 81 47 25 59 ...
## $ X4_N_Cuy : int 147 337 337 134 282 48 383 356 244 230 ...
## $ X5_P_Leche : int 16 54 123 171 177 104 183 56 57 62 ...
## $ X6_P_Lana : int 11 52 73 70 20 78 64 60 20 77 ...
## $ X7_P_Carne : int 40 92 118 43 49 113 20 18 124 95 ...
## $ X8_V_Leche : int 29 12 23 21 15 15 20 6 21 29 ...
## $ X9_V_lana : int 41 36 48 39 38 38 42 12 36 8 ...
## $ X10_V_Carne : int 15 7 53 43 39 60 48 38 57 31 ...
## $ X11_Ingreso : int 1074 999 1008 1358 1398 1311 929 1374 1040 1246 ...
## $ X12_Capacitacion: Factor w/ 2 levels "NO","SI": 1 2 1 2 1 1 2 1 2 2 ...
## $ X13_A_Tecnica : Factor w/ 2 levels "NO","SI": 2 2 2 1 1 1 2 2 1 1 ...
## $ X14_T_Pasto : Factor w/ 2 levels "Cultivado","Natural": 1 2 2 1 1 2 1 2 1 1 ...
## $ X15_Tecnologia : Factor w/ 3 levels "Alta","Baja",..: 3 3 3 1 2 2 1 2 3 2 ...
## $ y_Productividad : Factor w/ 2 levels "NO","SI": 1 1 1 1 2 2 2 2 2 2 ...
n=dim(Datos)[1]
summary(Datos)
## X1_Tamano_Predio X2_N_Vacuno X3_N_Ovino X4_N_Cuy
## Min. :2.00 Min. : 4.00 Min. : 4.00 Min. : 10.0
## 1st Qu.:3.00 1st Qu.:19.00 1st Qu.: 41.00 1st Qu.:107.0
## Median :5.00 Median :32.00 Median : 76.00 Median :217.5
## Mean :4.96 Mean :32.14 Mean : 76.34 Mean :210.6
## 3rd Qu.:7.00 3rd Qu.:46.00 3rd Qu.:111.00 3rd Qu.:313.0
## Max. :8.00 Max. :60.00 Max. :150.00 Max. :400.0
## X5_P_Leche X6_P_Lana X7_P_Carne X8_V_Leche
## Min. : 10.00 Min. :10.00 Min. : 10.00 Min. : 5.00
## 1st Qu.: 54.75 1st Qu.:26.00 1st Qu.: 47.00 1st Qu.:11.00
## Median :105.00 Median :44.00 Median : 79.00 Median :18.50
## Mean :104.34 Mean :44.19 Mean : 80.32 Mean :17.77
## 3rd Qu.:151.00 3rd Qu.:62.00 3rd Qu.:117.00 3rd Qu.:24.00
## Max. :200.00 Max. :80.00 Max. :150.00 Max. :30.00
## X9_V_lana X10_V_Carne X11_Ingreso X12_Capacitacion X13_A_Tecnica
## Min. : 5.00 Min. : 5.00 Min. : 900 NO:422 NO:425
## 1st Qu.:15.00 1st Qu.:19.00 1st Qu.:1051 SI:418 SI:415
## Median :27.00 Median :32.00 Median :1201
## Mean :27.16 Mean :32.76 Mean :1202
## 3rd Qu.:39.00 3rd Qu.:47.25 3rd Qu.:1354
## Max. :50.00 Max. :60.00 Max. :1498
## X14_T_Pasto X15_Tecnologia y_Productividad
## Cultivado:539 Alta :161 NO:248
## Natural :301 Baja :385 SI:592
## Media:294
##
##
##
# Renombrar los nombres de las variables si es necesario
# names(Datos)=c("X1","X2","X3","X4","X5","X6","Y")
# Selección de variables para su discretización
Var_A<- c(2,4,6,8)
nv=length(Var_A)
nbins=5
#nbins<-nclass.Sturges(Datos[,h]) #Usando Sturges
# nbins<-nclass.scott(Datos[,h]) # Usando Scott
# nbins<-nclass.FD(Datos[,h]) # Usando Friedman-Diaconis
Datos_D=Datos
for(i in 1:nv){
h=Var_A[i]
Datos_D[,h]<-discretize(Datos[,h], method="interval", categories=nbins)
cat("Número de intervalos: ",nbins, " Variable = ",h, "\n")
# print(table(Datos_D[,h]))
f= table(Datos_D[,h])
fr=round(prop.table(f)*100,1)
print(cbind(f, fr))
}
## Número de intervalos: 5 Variable = 2
## f fr
## [4,15.2) 162 19.3
## [15.2,26.4) 177 21.1
## [26.4,37.6) 165 19.6
## [37.6,48.8) 164 19.5
## [48.8,60] 172 20.5
## Número de intervalos: 5 Variable = 4
## f fr
## [10,88) 161 19.2
## [88,166) 167 19.9
## [166,244) 147 17.5
## [244,322) 176 21.0
## [322,400] 189 22.5
## Número de intervalos: 5 Variable = 6
## f fr
## [10,24) 169 20.1
## [24,38) 179 21.3
## [38,52) 168 20.0
## [52,66) 153 18.2
## [66,80] 171 20.4
## Número de intervalos: 5 Variable = 8
## f fr
## [5,10) 172 20.5
## [10,15) 140 16.7
## [15,20) 146 17.4
## [20,25) 184 21.9
## [25,30] 198 23.6
# Guardar los datos discretizados
# write.table(Datos_D, file ="Datos_Discretizada_01.csv", sep = ";", eol = "\n", dec= ".", row.names = TRUE, col.names = TRUE)
Datos_D=Datos
for(i in 1:nv){
h=Var_A[i]
Datos_D[,h]<-discretize(Datos[,h],method="frequency",categories=nbins)
cat("Número de intervalos: ",nbins, " Variable = ",h, "\n")
# print(table(Datos_D[,h]))
f= table(Datos_D[,h])
fr=round(prop.table(f)*100,1)
print(cbind(f, fr))
}
## Número de intervalos: 5 Variable = 2
## f fr
## [4,16) 162 19.3
## [16,26) 160 19.0
## [26,37.4) 182 21.7
## [37.4,49) 164 19.5
## [49,60] 172 20.5
## Número de intervalos: 5 Variable = 4
## f fr
## [10,91.8) 168 20.0
## [91.8,171) 168 20.0
## [171,256) 164 19.5
## [256,330) 170 20.2
## [330,400] 170 20.2
## Número de intervalos: 5 Variable = 6
## f fr
## [10,23) 160 19.0
## [23,37) 175 20.8
## [37,51) 163 19.4
## [51,66) 171 20.4
## [66,80] 171 20.4
## Número de intervalos: 5 Variable = 8
## f fr
## [5,9) 149 17.7
## [9,16) 185 22.0
## [16,21) 156 18.6
## [21,25) 152 18.1
## [25,30] 198 23.6
# Guardar los datos discretizados
# write.table(Datos_D, file ="Datos_Discretizada_01.csv", sep = ";", eol = "\n", dec= ".", row.names = TRUE, col.names = TRUE)
Datos_D=Datos
for(i in 1:nv){
h=Var_A[i]
Datos_D[,h]<-discretize(Datos[,h],method="cluster",categories=nbins)
cat("Número de intervalos: ",nbins, " Variable = ",h, "\n")
# print(table(Datos_D[,h]))
f= table(Datos_D[,h]);fr=round(prop.table(f)*100,1); print(cbind(f, fr))
}
## Número de intervalos: 5 Variable = 2
## f fr
## [4,16.2) 174 20.7
## [16.2,28.6) 202 24.0
## [28.6,39.5) 158 18.8
## [39.5,49.7) 149 17.7
## [49.7,60] 157 18.7
## Número de intervalos: 5 Variable = 4
## f fr
## [10,85.4) 155 18.5
## [85.4,167) 177 21.1
## [167,247) 153 18.2
## [247,324) 172 20.5
## [324,400] 183 21.8
## Número de intervalos: 5 Variable = 6
## f fr
## [10,24.4) 182 21.7
## [24.4,39.1) 185 22.0
## [39.1,53.3) 178 21.2
## [53.3,66.5) 133 15.8
## [66.5,80] 162 19.3
## Número de intervalos: 5 Variable = 8
## f fr
## [5,7.73) 113 13.5
## [7.73,12) 119 14.2
## [12,17.5) 159 18.9
## [17.5,23.7) 197 23.5
## [23.7,30] 252 30.0
# Guardar los datos discretizados
write.table(Datos_D, file ="Datos_Discretizada_01.csv", sep = ";", eol = "\n", dec= ".", row.names = TRUE, col.names = TRUE)
#install.packages("discretization")
library(discretization)
# Lectura de archivo de datos
Datos=read.table("IMD_PD_Clase_03_PreProcesamiento_02_Datos01.csv", stringsAsFactors=TRUE, header=TRUE,sep=";")
attach(Datos)
str(Datos)
## 'data.frame': 840 obs. of 16 variables:
## $ X1_Tamano_Predio: num 8 6 3 3 4 3 3 3 8 2 ...
## $ X2_N_Vacuno : int 19 34 17 58 14 45 21 45 52 14 ...
## $ X3_N_Ovino : int 118 26 143 52 47 39 81 47 25 59 ...
## $ X4_N_Cuy : int 147 337 337 134 282 48 383 356 244 230 ...
## $ X5_P_Leche : int 16 54 123 171 177 104 183 56 57 62 ...
## $ X6_P_Lana : int 11 52 73 70 20 78 64 60 20 77 ...
## $ X7_P_Carne : int 40 92 118 43 49 113 20 18 124 95 ...
## $ X8_V_Leche : int 29 12 23 21 15 15 20 6 21 29 ...
## $ X9_V_lana : int 41 36 48 39 38 38 42 12 36 8 ...
## $ X10_V_Carne : int 15 7 53 43 39 60 48 38 57 31 ...
## $ X11_Ingreso : int 1074 999 1008 1358 1398 1311 929 1374 1040 1246 ...
## $ X12_Capacitacion: Factor w/ 2 levels "NO","SI": 1 2 1 2 1 1 2 1 2 2 ...
## $ X13_A_Tecnica : Factor w/ 2 levels "NO","SI": 2 2 2 1 1 1 2 2 1 1 ...
## $ X14_T_Pasto : Factor w/ 2 levels "Cultivado","Natural": 1 2 2 1 1 2 1 2 1 1 ...
## $ X15_Tecnologia : Factor w/ 3 levels "Alta","Baja",..: 3 3 3 1 2 2 1 2 3 2 ...
## $ y_Productividad : Factor w/ 2 levels "NO","SI": 1 1 1 1 2 2 2 2 2 2 ...
# Selección de variables para su discretización
Datos_A=Datos[, c(1,2,3,4,5,6,7,8,9,10,11,16)]
# Presentar la tablas de frecuencias
Var_A<- c(1,2,3,4,5,6,7,8,9,10,11); nv=length(Var_A)
Datos_D<-chiM(Datos_A, alpha=0.05)
# Datos_D$cutp
# head(Datos_D$Disc.data)
for(i in 1:nv){
h=Var_A[i]
f=table(Datos_D$Disc.data[,h]); fr=round(prop.table(f)*100,1)
nbins=length(f)
cat("Número de intervalos: ",nbins, " Variable = ",h, "\n")
print(cbind(f, fr))
cat("Puntos de cortes: ", "\n");
print(Datos_D$cutp[h])
}
## Número de intervalos: 3 Variable = 1
## f fr
## 1 262 31.2
## 2 107 12.7
## 3 471 56.1
## Puntos de cortes:
## [[1]]
## [1] 3.5 4.5
##
## Número de intervalos: 7 Variable = 2
## f fr
## 1 322 38.3
## 2 75 8.9
## 3 69 8.2
## 4 157 18.7
## 5 26 3.1
## 6 78 9.3
## 7 113 13.5
## Puntos de cortes:
## [[1]]
## [1] 25.5 30.5 35.5 45.5 47.5 52.5
##
## Número de intervalos: 8 Variable = 3
## f fr
## 1 84 10.0
## 2 13 1.5
## 3 3 0.4
## 4 15 1.8
## 5 412 49.0
## 6 155 18.5
## 7 2 0.2
## 8 156 18.6
## Puntos de cortes:
## [[1]]
## [1] 20.5 22.5 23.5 25.5 93.5 121.5 122.5
##
## Número de intervalos: 32 Variable = 4
## f fr
## 1 63 7.5
## 2 4 0.5
## 3 4 0.5
## 4 1 0.1
## 5 18 2.1
## 6 46 5.5
## 7 80 9.5
## 8 10 1.2
## 9 9 1.1
## 10 2 0.2
## 11 27 3.2
## 12 2 0.2
## 13 59 7.0
## 14 7 0.8
## 15 7 0.8
## 16 15 1.8
## 17 15 1.8
## 18 7 0.8
## 19 8 1.0
## 20 7 0.8
## 21 68 8.1
## 22 12 1.4
## 23 25 3.0
## 24 4 0.5
## 25 98 11.7
## 26 27 3.2
## 27 42 5.0
## 28 23 2.7
## 29 17 2.0
## 30 1 0.1
## 31 18 2.1
## 32 114 13.6
## Puntos de cortes:
## [[1]]
## [1] 40.0 42.5 44.5 45.5 53.5 74.5 109.5 115.5 120.5 121.5 133.5 134.5
## [13] 163.5 167.5 173.5 182.5 192.5 194.5 198.5 204.5 236.5 241.5 253.5 255.5
## [25] 292.5 311.5 328.5 337.5 347.5 348.5 357.5
##
## Número de intervalos: 17 Variable = 5
## f fr
## 1 21 2.5
## 2 28 3.3
## 3 109 13.0
## 4 7 0.8
## 5 207 24.6
## 6 103 12.3
## 7 8 1.0
## 8 6 0.7
## 9 28 3.3
## 10 5 0.6
## 11 143 17.0
## 12 4 0.5
## 13 27 3.2
## 14 2 0.2
## 15 33 3.9
## 16 4 0.5
## 17 105 12.5
## Puntos de cortes:
## [[1]]
## [1] 14.5 19.5 41.5 42.5 95.5 118.5 121.5 122.5 128.5 130.5 156.5 157.5
## [13] 165.5 166.5 174.5 175.5
##
## Número de intervalos: 2 Variable = 6
## f fr
## 1 60 7.1
## 2 780 92.9
## Puntos de cortes:
## [[1]]
## [1] 15.5
##
## Número de intervalos: 12 Variable = 7
## f fr
## 1 124 14.8
## 2 7 0.8
## 3 195 23.2
## 4 11 1.3
## 5 133 15.8
## 6 17 2.0
## 7 30 3.6
## 8 20 2.4
## 9 6 0.7
## 10 25 3.0
## 11 59 7.0
## 12 213 25.4
## Puntos de cortes:
## [[1]]
## [1] 31.5 32.5 64.5 66.5 87.5 89.5 94.5 98.5 99.5 103.5 116.5
##
## Número de intervalos: 3 Variable = 8
## f fr
## 1 285 33.9
## 2 49 5.8
## 3 506 60.2
## Puntos de cortes:
## [[1]]
## [1] 13.5 15.5
##
## Número de intervalos: 6 Variable = 9
## f fr
## 1 37 4.4
## 2 200 23.8
## 3 20 2.4
## 4 152 18.1
## 5 44 5.2
## 6 387 46.1
## Puntos de cortes:
## [[1]]
## [1] 6.5 16.5 17.5 26.5 28.5
##
## Número de intervalos: 4 Variable = 10
## f fr
## 1 70 8.3
## 2 308 36.7
## 3 32 3.8
## 4 430 51.2
## Puntos de cortes:
## [[1]]
## [1] 9.5 29.5 31.5
##
## Número de intervalos: 44 Variable = 11
## f fr
## 1 20 2.4
## 2 15 1.8
## 3 17 2.0
## 4 2 0.2
## 5 12 1.4
## 6 1 0.1
## 7 8 1.0
## 8 2 0.2
## 9 4 0.5
## 10 3 0.4
## 11 25 3.0
## 12 2 0.2
## 13 22 2.6
## 14 2 0.2
## 15 18 2.1
## 16 2 0.2
## 17 46 5.5
## 18 19 2.3
## 19 66 7.9
## 20 3 0.4
## 21 173 20.6
## 22 8 1.0
## 23 7 0.8
## 24 4 0.5
## 25 59 7.0
## 26 8 1.0
## 27 3 0.4
## 28 7 0.8
## 29 1 0.1
## 30 4 0.5
## 31 4 0.5
## 32 8 1.0
## 33 2 0.2
## 34 41 4.9
## 35 4 0.5
## 36 48 5.7
## 37 3 0.4
## 38 103 12.3
## 39 13 1.5
## 40 7 0.8
## 41 1 0.1
## 42 23 2.7
## 43 3 0.4
## 44 17 2.0
## Puntos de cortes:
## [[1]]
## [1] 911.5 918.5 932.5 934.5 945.5 946.5 951.5 952.5 956.0 957.5
## [11] 979.5 981.5 995.5 996.5 1011.5 1012.5 1046.5 1056.5 1101.5 1102.5
## [21] 1232.5 1240.5 1246.5 1247.5 1294.5 1299.0 1300.5 1304.5 1305.5 1308.5
## [31] 1310.5 1314.5 1316.5 1345.0 1347.5 1386.5 1388.5 1462.5 1471.5 1474.5
## [41] 1475.5 1489.5 1492.5
Datos_D<-mdlp(Datos_A)
# Datos_D$cutp
# head(Datos_D$Disc.data)
for(i in 1:nv){
h=Var_A[i]
f=table(Datos_D$Disc.data[,h]); fr=round(prop.table(f)*100,1)
nbins=length(f)
cat("Número de intervalos: ",nbins, " Variable = ",h, "\n")
print(cbind(f, fr))
cat("Puntos de cortes: ", "\n"); print(Datos_D$cutp[h])
}
## Número de intervalos: 1 Variable = 1
## f fr
## 1 840 100
## Puntos de cortes:
## [[1]]
## [1] "All"
##
## Número de intervalos: 1 Variable = 2
## f fr
## 1 840 100
## Puntos de cortes:
## [[1]]
## [1] "All"
##
## Número de intervalos: 1 Variable = 3
## f fr
## 1 840 100
## Puntos de cortes:
## [[1]]
## [1] "All"
##
## Número de intervalos: 1 Variable = 4
## f fr
## 1 840 100
## Puntos de cortes:
## [[1]]
## [1] "All"
##
## Número de intervalos: 1 Variable = 5
## f fr
## 1 840 100
## Puntos de cortes:
## [[1]]
## [1] "All"
##
## Número de intervalos: 1 Variable = 6
## f fr
## 1 840 100
## Puntos de cortes:
## [[1]]
## [1] "All"
##
## Número de intervalos: 1 Variable = 7
## f fr
## 1 840 100
## Puntos de cortes:
## [[1]]
## [1] "All"
##
## Número de intervalos: 1 Variable = 8
## f fr
## 1 840 100
## Puntos de cortes:
## [[1]]
## [1] "All"
##
## Número de intervalos: 1 Variable = 9
## f fr
## 1 840 100
## Puntos de cortes:
## [[1]]
## [1] "All"
##
## Número de intervalos: 1 Variable = 10
## f fr
## 1 840 100
## Puntos de cortes:
## [[1]]
## [1] "All"
##
## Número de intervalos: 1 Variable = 11
## f fr
## 1 840 100
## Puntos de cortes:
## [[1]]
## [1] "All"
Datos_D<-disc.Topdown(Datos_A, method=1)
# Datos_D$cutp
# head(Datos_D$Disc.data)
for(i in 1:nv){
h=Var_A[i]
f=table(Datos_D$Disc.data[,h]); fr=round(prop.table(f)*100,1)
nbins=length(f)
cat("Número de intervalos: ",nbins, " Variable = ",h, "\n")
print(cbind(f, fr))
cat("Puntos de cortes: ", "\n"); print(Datos_D$cutp[h])
}
## Número de intervalos: 2 Variable = 1
## f fr
## 1 706 84
## 2 134 16
## Puntos de cortes:
## [[1]]
## [1] 2.0 7.5 8.0
##
## Número de intervalos: 2 Variable = 2
## f fr
## 1 242 28.8
## 2 598 71.2
## Puntos de cortes:
## [[1]]
## [1] 4.0 20.5 60.0
##
## Número de intervalos: 2 Variable = 3
## f fr
## 1 527 62.7
## 2 313 37.3
## Puntos de cortes:
## [[1]]
## [1] 4.0 93.5 150.0
##
## Número de intervalos: 2 Variable = 4
## f fr
## 1 834 99.3
## 2 6 0.7
## Puntos de cortes:
## [[1]]
## [1] 10.0 398.5 400.0
##
## Número de intervalos: 2 Variable = 5
## f fr
## 1 522 62.1
## 2 318 37.9
## Puntos de cortes:
## [[1]]
## [1] 10.0 130.5 200.0
##
## Número de intervalos: 2 Variable = 6
## f fr
## 1 60 7.1
## 2 780 92.9
## Puntos de cortes:
## [[1]]
## [1] 10.0 15.5 80.0
##
## Número de intervalos: 2 Variable = 7
## f fr
## 1 487 58
## 2 353 42
## Puntos de cortes:
## [[1]]
## [1] 10.0 89.5 150.0
##
## Número de intervalos: 2 Variable = 8
## f fr
## 1 260 31
## 2 580 69
## Puntos de cortes:
## [[1]]
## [1] 5.0 12.5 30.0
##
## Número de intervalos: 2 Variable = 9
## f fr
## 1 57 6.8
## 2 783 93.2
## Puntos de cortes:
## [[1]]
## [1] 5.0 7.5 50.0
##
## Número de intervalos: 2 Variable = 10
## f fr
## 1 70 8.3
## 2 770 91.7
## Puntos de cortes:
## [[1]]
## [1] 5.0 9.5 60.0
##
## Número de intervalos: 2 Variable = 11
## f fr
## 1 789 93.9
## 2 51 6.1
## Puntos de cortes:
## [[1]]
## [1] 900.0 1471.5 1498.0