Â
www.conento.com
Octubre 2014
Â
R es un lenguaje y entorno de programación para el análisis estadÃstico y gráfico.
Â
Â
Â
Â
Usaremos los datos de vinos disponibles en www.verema.es:
Descargamos los datos haciendo uso de los paquetes XLM
, RCurl
y RSelenium
.
Vino | Añada | Bodega | Puntos | Comentarios | Precio | DO |
---|---|---|---|---|---|---|
Torelló Brut Reserva | 2008 | Torelló Cava | 8.7 | 1 | 10-20 | D.O. Cava |
Protos selección | 2005 | Bodegas Protos | 8.4 | 1 | 20-30 | D.O. Ribera del Duero |
Pesquera Magnum Reserva | 2007 | Alejandro Fernández - Tinto Pesquera | NA | 0 | 50-100 | D.O. Ribera del Duero |
Chafandin Tempranillo | 2004 | Bodegas y Viñedos del Jaro (CompañÃa de Viñedos Iberian) | NA | 0 | 30-50 | D.O. Ribera del Duero |
Montesierra Crianza Réhoboam 2004 | 2004 | Pirineos | NA | 0 | 30-50 | D.O. Somontano |
Protos rosado | 2008 | Bodegas Protos | 7.9 | 1 | 5-10 | D.O. Ribera del Duero |
Las Alcaydias Selección Barricas | 2002 | Viñedos Heretat de Cesilia | 8.0 | 12 | 5-10 | D.O. Alicante |
Vinya Orlina Blanco | 2012 | Celler Cooperatiu D´Espolla | NA | 0 | 0-5 | D.O. Empordà |
Un total de 18.037 registros.
ggplot(todo[!is.na(todo$Precio),],aes(x=Precio,y=Puntos))+geom_boxplot(fill="deepskyblue2")
ggplot(todo[todo$Añada>=1950,],aes(x=Añada,y=Puntos))+geom_point()+ geom_smooth(se=FALSE,lwd=1,col="orange")
Descargamos el mapa vectorial de las Denominaciones de Origen del Ministerio de Agricultura, Alimentación y Medio Ambiente.
Agregamos los datos de Verema:
todo[,list(.N,Puntos=mean(Puntos,na.rm = T),Precio=mean(Precio2)),by=DO_id]
## DO_id N Puntos Precio ## 1: binissalem 52 8.035135 14.375000 ## 2: campo de la guardia 4 8.075000 11.250000 ## 3: pago ayles 13 8.338462 6.346154 ## 4: pago los balagueses 8 8.614286 15.000000 ## 5: somontano 446 7.993939 10.829596 ## 6: valle de guimar 10 8.350000 13.750000 ## 7: alella 82 8.165000 13.445122 ## 8: cataluna 197 7.904196 9.213198
Usando el paquete ggmap
, descargamos un mapa base y pintamos encima:
ggmap(map,extent = "device")+ geom_polygon(aes(x=long,y=lat,group=group,fill=Puntos),data=ddoo_df,col="white",alpha = .4, size = .2)
Â
http://archive.ics.uci.edu/ml/datasets/Wine+Quality
Â
caret
Enlaces de interés:
Se dispone de 11 medidas quÃmicas para 6.497 "Vinho verde" (Portugal).
str(xx.all)
## 'data.frame': 6497 obs. of 13 variables: ## $ fixed.acidity : num 7.4 7.8 7.8 11.2 7.4 7.4 7.9 7.3 7.8 7.5 ... ## $ volatile.acidity : num 0.7 0.88 0.76 0.28 0.7 0.66 0.6 0.65 0.58 0.5 ... ## $ citric.acid : num 0 0 0.04 0.56 0 0 0.06 0 0.02 0.36 ... ## $ residual.sugar : num 1.9 2.6 2.3 1.9 1.9 1.8 1.6 1.2 2 6.1 ... ## $ chlorides : num 0.076 0.098 0.092 0.075 0.076 0.075 0.069 0.065 0.073 0.071 ... ## $ free.sulfur.dioxide : num 11 25 15 17 11 13 15 15 9 17 ... ## $ total.sulfur.dioxide: num 34 67 54 60 34 40 59 21 18 102 ... ## $ density : num 0.998 0.997 0.997 0.998 0.998 ... ## $ pH : num 3.51 3.2 3.26 3.16 3.51 3.51 3.3 3.39 3.36 3.35 ... ## $ sulphates : num 0.56 0.68 0.65 0.58 0.56 0.56 0.46 0.47 0.57 0.8 ... ## $ alcohol : num 9.4 9.8 9.8 9.8 9.4 9.4 9.4 10 9.5 10.5 ... ## $ quality : int 5 5 5 6 5 5 5 7 7 5 ... ## $ tipo : Factor w/ 2 levels "Blanco","Tinto": 2 2 2 2 2 2 2 2 2 2 ...
corrplot(cor(xx.all[,-indY]),order="hclust",bg = "transparent")
Queremos predecir de manera automática si un vino es tinto o blanco.
ggplot(melt(xx.all,id.vars = "tipo"),aes(x=value,col=tipo))+facet_wrap(~variable,scales = "free")+ geom_density()+scale_color_manual(values=c("#009f5d","#820000"))
Realizamos el aprendizaje usando el algoritmo Random Forest. Consiguiendo resultados muy buenos:
confusionMatrix(pred.test.class,xx.test$tipo)
Confusion Matrix and Statistics Reference Prediction Blanco Tinto Blanco 978 2 Tinto 1 317 Accuracy : 0.9977
roc(xx.test$tipo,pred.test.prob[, 2],plot=T)
## ## Call: ## roc.default(response = xx.test$tipo, predictor = pred.test.prob[, 2], plot = T) ## ## Data: pred.test.prob[, 2] in 979 controls (xx.test$tipo Blanco) < 319 cases (xx.test$tipo Tinto). ## Area under the curve: 1
También podemos observar las variables más importantes en el modelo:
Vamos a intentar predecir la variable quality
usando Support Vector Machine.
ggplot(xx.all,aes(x=quality))+geom_bar(fill="orange2")+geom_text(aes(y = (..count..), label=scales::percent((..count..)/sum(..count..))),stat="bin",colour="darkgreen",vjust=-0.2)
Lanzamos el modelo:
svm.fit = train ( xx.train[ , -indY ] , xx.train$quality , method = "svmRadial", trControl = cv.ctrl, tuneGrid = svmGrid )
Confusion Matrix and Statistics Reference Prediction 3 4 5 6 7 8 9 3 0 0 0 0 0 0 0 4 0 4 4 1 0 0 0 5 0 9 297 80 12 2 0 6 6 30 124 457 93 19 1 7 0 0 2 28 110 8 0 8 0 0 0 1 0 9 0 9 0 0 0 0 0 0 0 Overall Statistics Accuracy : 0.6762
Esta presentación: http://jayusor.github.io/openanalytics_2014
Códigos empleados: https://github.com/jayusor/openanalytics_2014