Machine Learning
|
Para explorar os recursos básicos de visualização, serão usados dados reais sobre a venda do modelo Renault Duster extraídos da WEB. Os dados estão disponíveis online em http://www.leg.ufpr.br/~walmes/data/duster_venda_260314.txt.
Os dados contém informações sobre o preço de venda (R$, valor
) e distância percorrida (km, km
) além de outras características descritoras do veículo, como ano de fabricação, cor, tipo de câmbio.
#-----------------------------------------------------------------------
# Dados de carros Duster à venda no webmotors em 26/03/2014.
# Importa a tabela de dados da web.
url <- "http://www.leg.ufpr.br/~walmes/data/duster_venda_260314.txt"
dus <- read.table(file = url,
header = TRUE,
sep = "\t",
encoding = "utf-8")
str(dus)
## 'data.frame': 699 obs. of 10 variables:
## $ modelo: Factor w/ 11 levels "RENAULT DUSTER 1.6 4X2 16V FLEX 4P MANUAL",..: 3 1 2 2 1 1 2 3 6 2 ...
## $ cor : Factor w/ 9 levels "Azul","Branco",..: 5 1 5 5 5 8 6 6 6 6 ...
## $ km : int 31442 40800 56000 NA 45000 50000 44000 30000 41000 55000 ...
## $ ano : Factor w/ 7 levels "2011/2011","2011/2012",..: 2 2 2 2 2 4 3 4 2 2 ...
## $ valor : num 41990 42500 42900 42990 43800 ...
## $ cambio: Factor w/ 2 levels "AUTOMÁTICO","MANUAL": 2 2 2 2 2 2 2 2 2 2 ...
## $ poten : num 1.6 1.6 1.6 1.6 1.6 1.6 1.6 1.6 2 1.6 ...
## $ trac : Factor w/ 2 levels "4X2","4X4": 1 1 1 1 1 1 1 1 1 1 ...
## $ cat : Factor w/ 5 levels " "," DYNAMIQUE ",..: 3 1 2 2 1 1 2 3 2 2 ...
## $ novo : Factor w/ 2 levels "novo","usado": 2 2 2 2 2 2 2 2 2 2 ...
# Cria ano do veículo com extração regex.
dus$ano <- factor(gsub(x = as.character(dus$ano),
pattern = "/\\d{4}$",
replacement = ""))
# Quantidade de NA em cada coluna.
apply(dus, MARGIN = 2, FUN = function(x) sum(is.na(x)))
## modelo cor km ano valor cambio poten trac cat novo
## 0 0 132 0 0 0 0 0 0 0
#-----------------------------------------------------------------------
# Carrega o pacote `lattice` e `latticeExtra`.
library(lattice)
library(latticeExtra)
ls("package:lattice")
## [1] "as.factorOrShingle" "as.shingle"
## [3] "axis.default" "banking"
## [5] "barchart" "barley"
## [7] "bwplot" "canonical.theme"
## [9] "cloud" "col.whitebg"
## [11] "contourplot" "current.column"
## [13] "current.panel.limits" "current.row"
## [15] "densityplot" "diag.panel.splom"
## [17] "do.breaks" "dotplot"
## [19] "draw.colorkey" "draw.key"
## [21] "environmental" "equal.count"
## [23] "ethanol" "histogram"
## [25] "is.shingle" "larrows"
## [27] "lattice.getOption" "lattice.options"
## [29] "latticeParseFormula" "level.colors"
## [31] "levelplot" "llines"
## [33] "lplot.xy" "lpoints"
## [35] "lpolygon" "lrect"
## [37] "lsegments" "ltext"
## [39] "ltransform3dMatrix" "ltransform3dto3d"
## [41] "make.groups" "melanoma"
## [43] "oneway" "packet.number"
## [45] "packet.panel.default" "panel.3dscatter"
## [47] "panel.3dwire" "panel.abline"
## [49] "panel.arrows" "panel.average"
## [51] "panel.axis" "panel.barchart"
## [53] "panel.brush.splom" "panel.bwplot"
## [55] "panel.cloud" "panel.contourplot"
## [57] "panel.curve" "panel.densityplot"
## [59] "panel.dotplot" "panel.error"
## [61] "panel.fill" "panel.grid"
## [63] "panel.histogram" "panel.identify"
## [65] "panel.identify.cloud" "panel.identify.qqmath"
## [67] "panel.levelplot" "panel.levelplot.raster"
## [69] "panel.linejoin" "panel.lines"
## [71] "panel.link.splom" "panel.lmline"
## [73] "panel.loess" "panel.mathdensity"
## [75] "panel.number" "panel.pairs"
## [77] "panel.parallel" "panel.points"
## [79] "panel.polygon" "panel.qq"
## [81] "panel.qqmath" "panel.qqmathline"
## [83] "panel.rect" "panel.refline"
## [85] "panel.rug" "panel.segments"
## [87] "panel.smoothScatter" "panel.spline"
## [89] "panel.splom" "panel.stripplot"
## [91] "panel.superpose" "panel.superpose.2"
## [93] "panel.superpose.plain" "panel.text"
## [95] "panel.tmd.default" "panel.tmd.qqmath"
## [97] "panel.violin" "panel.wireframe"
## [99] "panel.xyplot" "parallel"
## [101] "parallelplot" "prepanel.default.bwplot"
## [103] "prepanel.default.cloud" "prepanel.default.densityplot"
## [105] "prepanel.default.histogram" "prepanel.default.levelplot"
## [107] "prepanel.default.parallel" "prepanel.default.qq"
## [109] "prepanel.default.qqmath" "prepanel.default.splom"
## [111] "prepanel.default.xyplot" "prepanel.lmline"
## [113] "prepanel.loess" "prepanel.qqmathline"
## [115] "prepanel.spline" "prepanel.tmd.default"
## [117] "prepanel.tmd.qqmath" "qq"
## [119] "qqmath" "rfs"
## [121] "Rows" "shingle"
## [123] "show.settings" "simpleKey"
## [125] "simpleTheme" "singer"
## [127] "splom" "standard.theme"
## [129] "strip.custom" "strip.default"
## [131] "stripplot" "tmd"
## [133] "trellis.currentLayout" "trellis.device"
## [135] "trellis.focus" "trellis.grobname"
## [137] "trellis.last.object" "trellis.panelArgs"
## [139] "trellis.par.get" "trellis.par.set"
## [141] "trellis.switchFocus" "trellis.unfocus"
## [143] "trellis.vpname" "USMortality"
## [145] "USRegionalMortality" "which.packet"
## [147] "wireframe" "xscale.components.default"
## [149] "xyplot" "xyplot.ts"
## [151] "yscale.components.default"
ls("package:latticeExtra")
## [1] "ancestry" "as.layer"
## [3] "asTheEconomist" "axis.grid"
## [5] "biocAccess" "combineLimits"
## [7] "custom.theme" "custom.theme.2"
## [9] "dendrogramGrob" "doubleYScale"
## [11] "drawLayer" "EastAuClimate"
## [13] "ecdfplot" "flattenPanel"
## [15] "ggplot2like" "ggplot2like.opts"
## [17] "glayer" "glayer_"
## [19] "gvhd10" "horizonplot"
## [21] "layer" "layer_"
## [23] "mapplot" "marginal.plot"
## [25] "mergedTrellisLegendGrob" "panel.2dsmoother"
## [27] "panel.3dbars" "panel.3dpolygon"
## [29] "panel.3dtext" "panel.ablineq"
## [31] "panel.ecdfplot" "panel.ellipse"
## [33] "panel.horizonplot" "panel.key"
## [35] "panel.levelplot.points" "panel.lmlineq"
## [37] "panel.mapplot" "panel.qqmath.tails"
## [39] "panel.qqmath.xyarea" "panel.quantile"
## [41] "panel.rootogram" "panel.scaleArrow"
## [43] "panel.segplot" "panel.smoother"
## [45] "panel.tskernel" "panel.voronoi"
## [47] "panel.xblocks" "panel.xyarea"
## [49] "postdoc" "prepanel.ecdfplot"
## [51] "prepanel.horizonplot" "prepanel.mapplot"
## [53] "prepanel.rootogram" "prepanel.segplot"
## [55] "resizePanels" "rootogram"
## [57] "SeatacWeather" "segplot"
## [59] "simpleSmoothTs" "theEconomist.axis"
## [61] "theEconomist.opts" "theEconomist.theme"
## [63] "tileplot" "USAge.df"
## [65] "USAge.table" "USCancerRates"
## [67] "useOuterStrips" "xscale.components.fractions"
## [69] "xscale.components.log" "xscale.components.log10.3"
## [71] "xscale.components.log10ticks" "xscale.components.logpower"
## [73] "xscale.components.subticks" "xyplot.list"
## [75] "yscale.components.fractions" "yscale.components.log"
## [77] "yscale.components.log10.3" "yscale.components.log10ticks"
## [79] "yscale.components.logpower" "yscale.components.subticks"
funs <- c(ls("package:lattice"), ls("package:latticeExtra"))
# Funções de alto nível.
c(grep(x = funs, pattern = "^[^.]+plot$", value = TRUE),
c("histogram", "wireframe", "splom", "qqmath"))
## [1] "bwplot" "contourplot" "densityplot" "dotplot"
## [5] "levelplot" "parallelplot" "stripplot" "xyplot"
## [9] "ecdfplot" "horizonplot" "mapplot" "segplot"
## [13] "tileplot" "histogram" "wireframe" "splom"
## [17] "qqmath"
# Funções de baixo nível.
grep(x = funs, pattern = "^panel\\.", value = TRUE)
## [1] "panel.3dscatter" "panel.3dwire"
## [3] "panel.abline" "panel.arrows"
## [5] "panel.average" "panel.axis"
## [7] "panel.barchart" "panel.brush.splom"
## [9] "panel.bwplot" "panel.cloud"
## [11] "panel.contourplot" "panel.curve"
## [13] "panel.densityplot" "panel.dotplot"
## [15] "panel.error" "panel.fill"
## [17] "panel.grid" "panel.histogram"
## [19] "panel.identify" "panel.identify.cloud"
## [21] "panel.identify.qqmath" "panel.levelplot"
## [23] "panel.levelplot.raster" "panel.linejoin"
## [25] "panel.lines" "panel.link.splom"
## [27] "panel.lmline" "panel.loess"
## [29] "panel.mathdensity" "panel.number"
## [31] "panel.pairs" "panel.parallel"
## [33] "panel.points" "panel.polygon"
## [35] "panel.qq" "panel.qqmath"
## [37] "panel.qqmathline" "panel.rect"
## [39] "panel.refline" "panel.rug"
## [41] "panel.segments" "panel.smoothScatter"
## [43] "panel.spline" "panel.splom"
## [45] "panel.stripplot" "panel.superpose"
## [47] "panel.superpose.2" "panel.superpose.plain"
## [49] "panel.text" "panel.tmd.default"
## [51] "panel.tmd.qqmath" "panel.violin"
## [53] "panel.wireframe" "panel.xyplot"
## [55] "panel.2dsmoother" "panel.3dbars"
## [57] "panel.3dpolygon" "panel.3dtext"
## [59] "panel.ablineq" "panel.ecdfplot"
## [61] "panel.ellipse" "panel.horizonplot"
## [63] "panel.key" "panel.levelplot.points"
## [65] "panel.lmlineq" "panel.mapplot"
## [67] "panel.qqmath.tails" "panel.qqmath.xyarea"
## [69] "panel.quantile" "panel.rootogram"
## [71] "panel.scaleArrow" "panel.segplot"
## [73] "panel.smoother" "panel.tskernel"
## [75] "panel.voronoi" "panel.xblocks"
## [77] "panel.xyarea"
# Lista de itens que podem ser customizados.
str(trellis.par.get())
## List of 35
## $ grid.pars : list()
## $ fontsize :List of 2
## ..$ text : num 12
## ..$ points: num 8
## $ background :List of 2
## ..$ alpha: num 1
## ..$ col : chr "transparent"
## $ panel.background :List of 1
## ..$ col: chr "transparent"
## $ clip :List of 2
## ..$ panel: chr "on"
## ..$ strip: chr "on"
## $ add.line :List of 4
## ..$ alpha: num 1
## ..$ col : chr "#000000"
## ..$ lty : num 1
## ..$ lwd : num 1
## $ add.text :List of 5
## ..$ alpha : num 1
## ..$ cex : num 1
## ..$ col : chr "#000000"
## ..$ font : num 1
## ..$ lineheight: num 1.2
## $ plot.polygon :List of 5
## ..$ alpha : num 1
## ..$ col : chr "#00ffff"
## ..$ border: chr "black"
## ..$ lty : num 1
## ..$ lwd : num 1
## $ box.dot :List of 5
## ..$ alpha: num 1
## ..$ col : chr "#000000"
## ..$ cex : num 1
## ..$ font : num 1
## ..$ pch : num 16
## $ box.rectangle :List of 5
## ..$ alpha: num 1
## ..$ col : chr "#0080ff"
## ..$ fill : chr "transparent"
## ..$ lty : num 1
## ..$ lwd : num 1
## $ box.umbrella :List of 4
## ..$ alpha: num 1
## ..$ col : chr "#0080ff"
## ..$ lty : num 2
## ..$ lwd : num 1
## $ dot.line :List of 4
## ..$ alpha: num 1
## ..$ col : chr "#e6e6e6"
## ..$ lty : num 1
## ..$ lwd : num 1
## $ dot.symbol :List of 5
## ..$ alpha: num 1
## ..$ cex : num 0.8
## ..$ col : chr "#0080ff"
## ..$ font : num 1
## ..$ pch : num 16
## $ plot.line :List of 4
## ..$ alpha: num 1
## ..$ col : chr "#0080ff"
## ..$ lty : num 1
## ..$ lwd : num 1
## $ plot.symbol :List of 6
## ..$ alpha: num 1
## ..$ cex : num 0.8
## ..$ col : chr "#0080ff"
## ..$ font : num 1
## ..$ pch : num 1
## ..$ fill : chr "transparent"
## $ reference.line :List of 4
## ..$ alpha: num 1
## ..$ col : chr "#e6e6e6"
## ..$ lty : num 1
## ..$ lwd : num 1
## $ strip.background :List of 2
## ..$ alpha: num 1
## ..$ col : chr [1:7] "#ffe5cc" "#ccffcc" "#ccffff" "#cce6ff" ...
## $ strip.shingle :List of 2
## ..$ alpha: num 1
## ..$ col : chr [1:7] "#ff7f00" "#00ff00" "#00ffff" "#0080ff" ...
## $ strip.border :List of 4
## ..$ alpha: num 1
## ..$ col : chr [1:7] "#000000" "#000000" "#000000" "#000000" ...
## ..$ lty : num [1:7] 1 1 1 1 1 1 1
## ..$ lwd : num [1:7] 1 1 1 1 1 1 1
## $ superpose.line :List of 4
## ..$ alpha: num 1
## ..$ col : chr [1:7] "#0080ff" "#ff00ff" "darkgreen" "#ff0000" ...
## ..$ lty : num [1:7] 1 1 1 1 1 1 1
## ..$ lwd : num [1:7] 1 1 1 1 1 1 1
## $ superpose.symbol :List of 6
## ..$ alpha: num [1:7] 1 1 1 1 1 1 1
## ..$ cex : num [1:7] 0.8 0.8 0.8 0.8 0.8 0.8 0.8
## ..$ col : chr [1:7] "#0080ff" "#ff00ff" "darkgreen" "#ff0000" ...
## ..$ fill : chr [1:7] "#CCFFFF" "#FFCCFF" "#CCFFCC" "#FFE5CC" ...
## ..$ font : num [1:7] 1 1 1 1 1 1 1
## ..$ pch : num [1:7] 1 1 1 1 1 1 1
## $ superpose.polygon:List of 5
## ..$ alpha : num [1:7] 1 1 1 1 1 1 1
## ..$ col : chr [1:7] "#CCFFFF" "#FFCCFF" "#CCFFCC" "#FFE5CC" ...
## ..$ border: chr [1:7] "black" "black" "black" "black" ...
## ..$ lty : num [1:7] 1 1 1 1 1 1 1
## ..$ lwd : num [1:7] 1 1 1 1 1 1 1
## $ regions :List of 2
## ..$ alpha: num 1
## ..$ col : chr [1:100] "#FF80FFFF" "#FF82FFFF" "#FF85FFFF" "#FF87FFFF" ...
## $ shade.colors :List of 2
## ..$ alpha : num 1
## ..$ palette:function (irr, ref, height, saturation = 0.9)
## $ axis.line :List of 4
## ..$ alpha: num 1
## ..$ col : chr "#000000"
## ..$ lty : num 1
## ..$ lwd : num 1
## $ axis.text :List of 5
## ..$ alpha : num 1
## ..$ cex : num 0.8
## ..$ col : chr "#000000"
## ..$ font : num 1
## ..$ lineheight: num 1
## $ axis.components :List of 4
## ..$ left :List of 3
## .. ..$ tck : num 1
## .. ..$ pad1: num 1
## .. ..$ pad2: num 1
## ..$ top :List of 3
## .. ..$ tck : num 1
## .. ..$ pad1: num 1
## .. ..$ pad2: num 1
## ..$ right :List of 3
## .. ..$ tck : num 1
## .. ..$ pad1: num 1
## .. ..$ pad2: num 1
## ..$ bottom:List of 3
## .. ..$ tck : num 1
## .. ..$ pad1: num 1
## .. ..$ pad2: num 1
## $ layout.heights :List of 19
## ..$ top.padding : num 1
## ..$ main : num 1
## ..$ main.key.padding : num 1
## ..$ key.top : num 1
## ..$ xlab.top : num 1
## ..$ key.axis.padding : num 1
## ..$ axis.top : num 1
## ..$ strip : num 1
## ..$ panel : num 1
## ..$ axis.panel : num 1
## ..$ between : num 1
## ..$ axis.bottom : num 1
## ..$ axis.xlab.padding: num 1
## ..$ xlab : num 1
## ..$ xlab.key.padding : num 0
## ..$ key.bottom : num 1
## ..$ key.sub.padding : num 1
## ..$ sub : num 1
## ..$ bottom.padding : num 1
## $ layout.widths :List of 15
## ..$ left.padding : num 1
## ..$ key.left : num 1
## ..$ key.ylab.padding : num 0
## ..$ ylab : num 1
## ..$ ylab.axis.padding: num 1
## ..$ axis.left : num 1
## ..$ axis.panel : num 1
## ..$ strip.left : num 1
## ..$ panel : num 1
## ..$ between : num 1
## ..$ axis.right : num 1
## ..$ axis.key.padding : num 1
## ..$ ylab.right : num 1
## ..$ key.right : num 1
## ..$ right.padding : num 1
## $ box.3d :List of 4
## ..$ alpha: num 1
## ..$ col : chr "#000000"
## ..$ lty : num 1
## ..$ lwd : num 1
## $ par.xlab.text :List of 5
## ..$ alpha : num 1
## ..$ cex : num 1
## ..$ col : chr "#000000"
## ..$ font : num 1
## ..$ lineheight: num 1
## $ par.ylab.text :List of 5
## ..$ alpha : num 1
## ..$ cex : num 1
## ..$ col : chr "#000000"
## ..$ font : num 1
## ..$ lineheight: num 1
## $ par.zlab.text :List of 5
## ..$ alpha : num 1
## ..$ cex : num 1
## ..$ col : chr "#000000"
## ..$ font : num 1
## ..$ lineheight: num 1
## $ par.main.text :List of 5
## ..$ alpha : num 1
## ..$ cex : num 1.2
## ..$ col : chr "#000000"
## ..$ font : num 2
## ..$ lineheight: num 1
## $ par.sub.text :List of 5
## ..$ alpha : num 1
## ..$ cex : num 1
## ..$ col : chr "#000000"
## ..$ font : num 2
## ..$ lineheight: num 1
#-----------------------------------------------------------------------
# Gráfico de barras e setores.
# Tabela de frequência.
x <- xtabs(~cambio, data = dus)
class(x)
## [1] "xtabs" "table"
# Gráfico padrão.
barchart(x,
horizontal = FALSE,
xlab = "Tipo de câmbio",
ylab = "Frequência absoluta")
# A lattice também trabalha com fórmulas.
tb <- as.data.frame(x)
# CUIDADO: a origem desse gráfico não é o zero!
barchart(Freq ~ cambio,
data = tb,
xlab = "Tipo de câmbio",
ylab = "Frequência absoluta",
col = c("seagreen", "yellowgreen"))
barchart(Freq ~ cambio,
data = tb,
origin = 0, # <-- ATENÇÃO.
xlab = "Tipo de câmbio",
ylab = "Frequência absoluta",
col = c("seagreen", "yellowgreen"))
Deve-se ter cuidado com a refência das barras. O argumento origin =
permite especificar a origem.
# Para as cores do carro.
x <- xtabs(~cor, data = dus)
levels(dus$cor)
## [1] "Azul" "Branco" "Cinza" "Indefinida" "Prata"
## [6] "Preto" "Verde" "Vermelho" "Vinho"
tb <- as.data.frame(x)
tb
## cor Freq
## 1 Azul 14
## 2 Branco 193
## 3 Cinza 30
## 4 Indefinida 7
## 5 Prata 223
## 6 Preto 155
## 7 Verde 58
## 8 Vermelho 18
## 9 Vinho 1
# Vetor que cores para usar com cada cor de veiculo.
cols <- c("blue", "white", "gray50", "Yellow", "gray90", "black",
"green4", "red", "red4")
cbind(levels(dus$cor), cols)
## cols
## [1,] "Azul" "blue"
## [2,] "Branco" "white"
## [3,] "Cinza" "gray50"
## [4,] "Indefinida" "Yellow"
## [5,] "Prata" "gray90"
## [6,] "Preto" "black"
## [7,] "Verde" "green4"
## [8,] "Vermelho" "red"
## [9,] "Vinho" "red4"
# Com anotação sobre as barras.
barchart(Freq ~ reorder(cor, -Freq),
data = tb,
origin = 0,
col = cols,
xlab = "Cores",
ylab = "Frequência absoluta") +
layer({
panel.text(x = x, y = y, pos = 3, label = y)
})
#-----------------------------------------------------------------------
# Gráficos de barras emplilhadas (stacked) e lado a lado.
x <- xtabs(~cambio + ano, data = dus)
x
## ano
## cambio 2011 2012 2013 2014
## AUTOMÁTICO 51 40 100 4
## MANUAL 88 204 180 32
cols <- c("#660d32", "#bc1a5e")
# Barras empilhadas.
barchart(x,
xlab = "Ano",
stack = TRUE,
auto.key = TRUE,
ylab = "Frequência absoluta")
# Barras lado a lado.
barchart(x,
xlab = "Ano",
stack = FALSE,
horizontal = FALSE,
auto.key = list(space = "right"),
ylab = "Frequência absoluta")
tb <- as.data.frame(x)
tb
## cambio ano Freq
## 1 AUTOMÁTICO 2011 51
## 2 MANUAL 2011 88
## 3 AUTOMÁTICO 2012 40
## 4 MANUAL 2012 204
## 5 AUTOMÁTICO 2013 100
## 6 MANUAL 2013 180
## 7 AUTOMÁTICO 2014 4
## 8 MANUAL 2014 32
barchart(Freq ~ ano,
groups = cambio,
auto.key = list(space = "right", title = "Ano"),
data = tb,
origin = 0,
xlab = "Câmbio",
ylab = "Frequência absoluta")
cols <- c("#07B1FF", "#0CE8BB", "#00FF40", "#BEE80C")
barchart(Freq ~ cambio,
groups = ano,
auto.key = list(space = "right", title = "Ano"),
data = tb,
origin = 0,
xlab = "Ano",
ylab = "Frequência absoluta",
par.settings = list(superpose.polygon = list(col = cols)))
#-----------------------------------------------------------------------
# Anotações nas barras.
cols <- c("#07B1FF", "#0CE8BB", "#00FF40", "#BEE80C")
barchart(Freq ~ cambio,
groups = ano,
auto.key = list(corner = c(0, 1), title = "Ano"),
data = tb,
origin = 0,
xlab = "Ano",
ylab = "Frequência absoluta",
par.settings = list(superpose.polygon = list(col = cols))) +
layer({
# print(ls()) # Descomente para ver os objetos do escopo.
g <- scale(as.integer(groups)/(nlevels(groups) + box.ratio),
scale = FALSE)
print(g)
panel.text(x = as.integer(x) + g, y = y, pos = 3, label = y)
}) +
layer({
panel.abline(h = seq(0, 200, by = 25),
lty = 2,
col = "gray50")
}, under = TRUE)
## [,1]
## [1,] -0.25000000
## [2,] -0.25000000
## [3,] -0.08333333
## [4,] -0.08333333
## [5,] 0.08333333
## [6,] 0.08333333
## [7,] 0.25000000
## [8,] 0.25000000
## attr(,"scaled:center")
## [1] 0.4166667
# Mais dimensões.
x <- xtabs(~cambio + ano + cor, data = dus)
tb <- as.data.frame(x)
head(tb)
## cambio ano cor Freq
## 1 AUTOMÁTICO 2011 Azul 4
## 2 MANUAL 2011 Azul 3
## 3 AUTOMÁTICO 2012 Azul 0
## 4 MANUAL 2012 Azul 6
## 5 AUTOMÁTICO 2013 Azul 0
## 6 MANUAL 2013 Azul 1
barchart(Freq ~ ano | cor,
groups = cambio,
auto.key = list(columns = 2, title = "Câmbio", cex.title = 1.1),
data = tb,
origin = 0,
xlab = "Ano",
ylab = "Frequência absoluta",
par.settings = list(superpose.polygon = list(col = cols)))
barchart(Freq ~ ano | cor,
groups = cambio,
auto.key = list(columns = 2, title = "Câmbio", cex.title = 1.1),
data = tb,
origin = 0,
xlab = "Ano",
ylab = "Frequência absoluta",
scales = list(y = list(relation = "free")),
par.settings = list(superpose.polygon = list(col = cols)))
#-----------------------------------------------------------------------
# Histograma.
# Gráfico básico.
# hist(dus$valor)
histogram(~valor,
data = dus,
xlab = "Preço de venda (R$)",
ylab = "Frequência relativa",
col = "orange") +
layer(panel.rug(x, col = 1))
# Se breaks é um escalar então entende-se que é uma *sugestão* para o
# número de clases.
histogram(~valor,
data = dus,
breaks = 15,
type = c("percent", "count", "density")[2],
xlab = "Preço de venda (R$)",
ylab = "Frequência absoluta",
col = "orange") +
layer(panel.rug(x, col = 1))
# Se breaks é um vetor então entende-se que são os limites para
# classificação dos valores.
histogram(~valor,
data = dus,
breaks = seq(35000, 75000, by = 2500),
type = c("percent", "count", "density")[2],
xlab = "Preço de venda (R$)",
ylab = "Frequência absoluta",
col = "orange") +
layer(panel.rug(x, col = 1))
# Gráfico onde a altura é a densidade e não a frequência.
histogram(~valor,
data = dus,
type = c("percent", "count", "density")[3],
xlab = "Preço de venda (R$)",
ylab = "Frequência absoluta",
col = "#ba6dff") +
layer(panel.rug(x, col = 1))
#-----------------------------------------------------------------------
# Gráficos de densidade.
densityplot(~valor,
data = dus,
kernel = "rectangular",
bw = 2000,
xlab = "Preço de venda (R$)",
ylab = "Frequência absoluta",
# plot.points = c("jitter", "rug")[2],
plot.points = FALSE,
col = "#ba6dff") +
layer({
panel.rug(x, col = 1)
})
densityplot(~valor,
groups = cambio,
auto.key = list(corner = c(0.95, 0.95)),
data = dus,
xlab = "Preço de venda (R$)",
ylab = "Frequência absoluta",
plot.points = "jitter")
densityplot(~valor | ano,
groups = cambio,
auto.key = list(corner = c(0.05, 0.95)),
data = dus,
xlab = "Preço de venda (R$)",
ylab = "Frequência absoluta",
plot.points = "jitter")
#-----------------------------------------------------------------------
# Gráfico de frequência acumulada empírica.
# Gráfico onde a altura é a densidade e não a frequência.
ecdfplot(~valor,
data = dus,
xlab = "Preço de venda (R$)",
ylab = "Frequência acumulada",
col = "#ba6dff") +
layer({
panel.rug(x, col = 1)
})
ecdfplot(~valor,
groups = cambio,
auto.key = list(corner = c(0.05, 0.8)),
data = dus,
xlab = "Preço de venda (R$)",
ylab = "Frequência acumulada")
ecdfplot(~valor | ano,
groups = cambio,
auto.key = list(corner = c(0.05, 0.85)),
data = dus,
xlab = "Preço de venda (R$)",
ylab = "Frequência acumulada")
#-----------------------------------------------------------------------
# Diagrama de dispersão.
# Diagrama de dispersão básico.
xyplot(valor ~ km, data = dus)
# Adicionar uma linha de tendência suave.
xyplot(valor ~ km,
data = dus,
type = c("p", "smooth"))
xyplot(valor ~ km, data = dus) +
layer({
panel.smoother(x, y)
})
# Usar cores diferentes para identificar o tipo de câmbio.
xyplot(valor ~ km,
groups = cambio,
auto.key = TRUE,
data = dus)
# Adicionar uma linha de tendência suave.
xyplot(valor ~ km,
groups = cambio,
auto.key = TRUE,
data = dus) +
glayer({
panel.smoother(x = x, y = y, col = col.line, span = 0.9)
})
n <- head(names(sort(table(dus$cor), decreasing = TRUE)), n = 4)
xyplot(valor ~ km | cor,
groups = cambio,
auto.key = TRUE,
data = subset(dus, cor %in% n)) +
glayer({
panel.smoother(x = x, y = y, col = col.line, span = 0.9)
})
#-----------------------------------------------------------------------
# Preço em função dos anos.
bwplot(valor ~ ano, data = dus, pch = "|")
# Edita níveis do fator.
levels(dus$cat)
## [1] " " " DYNAMIQUE " " EXPRESSION " " TECH ROAD "
## [5] " TECH ROAD II "
levels(dus$cat) <- trimws(levels(dus$cat))
dus2 <- droplevels(subset(dus, cat != ""))
dus2 <- transform(dus2, valor = valor/1000, km = km/1000)
names(trellis.par.get())
## [1] "grid.pars" "fontsize" "background"
## [4] "panel.background" "clip" "add.line"
## [7] "add.text" "plot.polygon" "box.dot"
## [10] "box.rectangle" "box.umbrella" "dot.line"
## [13] "dot.symbol" "plot.line" "plot.symbol"
## [16] "reference.line" "strip.background" "strip.shingle"
## [19] "strip.border" "superpose.line" "superpose.symbol"
## [22] "superpose.polygon" "regions" "shade.colors"
## [25] "axis.line" "axis.text" "axis.components"
## [28] "layout.heights" "layout.widths" "box.3d"
## [31] "par.xlab.text" "par.ylab.text" "par.zlab.text"
## [34] "par.main.text" "par.sub.text"
str(trellis.par.get()$box.dot)
## List of 5
## $ alpha: num 1
## $ col : chr "#000000"
## $ cex : num 1
## $ font : num 1
## $ pch : num 16
str(trellis.par.get()$box.rectangle)
## List of 5
## $ alpha: num 1
## $ col : chr "#0080ff"
## $ fill : chr "transparent"
## $ lty : num 1
## $ lwd : num 1
str(trellis.par.get()$box.umbrella)
## List of 4
## $ alpha: num 1
## $ col : chr "#0080ff"
## $ lty : num 2
## $ lwd : num 1
# Customização do gráfico.
bw_ps <- list(plot.symbol = list(col = 1),
box.dot = list(pch = "|"),
box.umbrella = list(col = 1, lty = 1),
box.rectangle = list(col = 1, fill = "seagreen"))
bwplot(valor ~ cat,
data = dus2,
xlab = "Modelo",
ylab = "Preço de venda (R$)",
par.settings = bw_ps)
bwplot(valor ~ cat | ano,
data = dus2,
xlab = "Modelo",
ylab = "Preço de venda (R$)",
as.table = TRUE,
par.settings = bw_ps)
# Indicação do valor da média.
bwplot(valor ~ cat,
data = dus2,
xlab = "Modelo",
ylab = "Preço de venda (R$)",
par.settings = bw_ps) +
layer({
# panel.xyplot(x = x, y = y, jitter.x = TRUE)
m <- aggregate(y ~ x, FUN = mean)
panel.points(x = m$x, y = m$y, col = "red", pch = 19)
})
# Indicação do valor da média.
bwplot(valor ~ cat | cambio,
data = dus2,
xlab = "Modelo",
ylab = "Preço de venda (R$)",
par.settings = bw_ps) +
layer({
m <- aggregate(y ~ x, FUN = mean)
panel.points(x = m$x, y = m$y, col = "red", pch = 19)
fiv <- by(y, x, FUN = fivenum, simplify = FALSE)
fiv <- do.call(cbind, fiv)
aiq <- fiv[4, ] - fiv[2, ]
l <- fiv[2, ] - 1.5 * aiq
u <- fiv[4, ] + 1.5 * aiq
i <- seq_along(u)
panel.segments(x0 = i - 0.5, x1 = i + 0.5, y0 = l, y1 = l,
col = "gray50", lty = 3)
panel.segments(x0 = i - 0.5, x1 = i + 0.5, y0 = u, y1 = u,
col = "gray50", lty = 3)
})
Machine Learning | Prof. Eduardo V. Ferreira & Prof. Walmes M. Zeviani |