diff --git a/webmotors.Rmd b/webmotors.Rmd new file mode 100644 index 0000000000000000000000000000000000000000..5e2a8a3de9f32d367e48398bc35b0fa3531ab6aa --- /dev/null +++ b/webmotors.Rmd @@ -0,0 +1,187 @@ +--- +title: "Webmotors - Web Scraping" +output: html_document +--- + +Bruna Wundervald - GRR20137536 + +*Carregando os pacotes* +```{r, echo=TRUE, message=FALSE} +library(XML) +library(RCurl) +library(googleVis) +library(plyr) +op <- options(gvis.plot.tag="chart") +``` + + - O modelo de carro escolhido foi o Veloster - Hyundai. + +*Leitura das página web e extração de dados - preço de venda, ano, km percorridos, cor, tipo de câmbio, cidade/estado de origem.* +```{r, echo=TRUE, warning=FALSE, cache=TRUE, error=TRUE} +pag <- function(i){ + site <- paste("http://www.webmotors.com.br/comprar/carros/novos-usados/veiculos-todos-estados/hyundai/veloster/?tipoveiculo=carros&anunciante=concession%C3%A1ria%7Cloja%7Cpessoa%20f%C3%ADsica&tipoanuncio=novos%7Cusados&marca1=hyundai&modelo1=veloster&palavrachave=veloster&estado1=veiculos-todos-estados&qt=36&o=1&p=",i, sep="") + url <- readLines(site) + h <- htmlTreeParse(file=url, asText=TRUE, useInternalNodes = TRUE, encoding = "utf-8") + + # Obtendo os preços + preco <- getNodeSet(doc=h, path="//div[@class='stripe-upper']//div", fun=xmlValue) + # preco <- gsub(x=preco, pattern="[^[:digit:]]", repl="", perl=TRUE) + preco <- gsub(x=preco, pattern="\\D", repl="") + # Porque existem tantos resultados? + m <- matrix(unlist(preco), ncol=2, byrow=TRUE) + preco <- as.numeric(m[,1]) + + # Extração de ano, cor, quilômetragem e tipo de câmbio. + extract <- getNodeSet(doc=h, path="//div[@class='features']//div//span", fun=xmlValue) + m2 <- matrix(unlist(extract), ncol=4, byrow=TRUE) + m2[,3] <- gsub(x=m2[,3], pattern="\\D", repl="") + + # Extração de cidade/estado. + cid.est <- getNodeSet(doc=h, path="//div[@class='card-footer']//span", fun=xmlValue) + m3 <- matrix(unlist(cid.est), ncol=2, byrow=TRUE) + cid.est <- m3[,1] + + # Formando uma única tabela de resultados + tab <- data.frame(preco, m2, cid.est, + stringsAsFactors=FALSE) + names(tab) <- c("Preço", "Ano", "Cor", "Km", "Câmbio", + "Cidade/Estado") + return(tab) +} + +L <- vector(mode="list", length=12) +for(i in 1:length(L)){ + L[[i]] <- pag(i) +} + +tab <- do.call(rbind, L) +head(tab) + +``` + +*Construção dos gráficos com a tabela obtida.* + + - Gráficos de frequências para o número de veículos em cada ano (barras). +```{r, echo=TRUE, results='asis', tidy=TRUE, error=TRUE} +names(tab) <- c("a", "b","c", "d", "e", "f") +tab$h <- gsub(tab$f, pattern ='^.*\\((..)\\)$', rep='\\1') +tab$b <- as.factor(tab$b) +bb <- count(tab$b) +bb$freq <- as.vector(bb$freq) +b <- levels(tab$b) +bar <- data.frame(b, bb$freq) + +barras <- gvisBarChart(bar, options = list( + hAxis="{title:'Frequência'}", + vAxis="{title: 'Ano dos Veículos'}", + bar="{groupWidth:'90%'}", + width=800, height=600)) + +plot(barras) +``` +*Interpretação: existem muitos carros dos anos 2011/2012 e 2012/2013. Dificilmente encontramos um 2010/2011 ou 2011.* + + + - Gráficos de frequências para o número de veículos segundo o tipo de cambio (setores). +```{r, echo=TRUE, results='asis', tidy=TRUE} +ee <- count(tab$e) +ee$freq <- as.vector(ee$freq) +tab$e <- as.factor(tab$e) +e <- levels(tab$e) +pie <- data.frame(e, ee$freq) + +setores <- gvisPieChart(pie, options=list( + legend="Tipo de Câmbio", + width=800, height=600, + slices="{0: {offset: 0.2}, + 1: {offset: 0.2}, + 2: {offset: 0.2}}", + colors="['green', 'orange', 'purple']", + pieSliceText='label', + pieHole=0.5), + chartid="doughnut") +plot(setores) +``` +*Interpretação: a marcha predominante neste tipo de carro é a automática, normal ou sequencial. Existem pouquissímos carros com marcha manual.* + + + - Gráfico do total de veículos por estado em um mapa. +```{r, echo=TRUE, results='asis', tidy=TRUE} +estados <- gsub(tab$f, pattern ='^.*\\((..)\\)$', rep='\\1') +tab$h <- estados +est <- count(estados) +est$x <- c("Bahia", "Ceará", "Distrito Federal", + "Espírito Santo", "Goiás", "Minas Gerais", "Mato Grosso do Sul", "Mato Grosso", + "Pará", "Paraíba", "Pernambuco","Piauí", "Paraná", "Rio de Janeiro", + "Rio Grande do Norte", "Rondônia", "Rio Grande do Sul", "Santa Catarina", + "Sergipe", "São Paulo", "Tocantins") +names(est) <- c("x", "y") + +# Neste chunk e no próximo, caso algum carro seja excluído do site, um estado pode ser excluído junto com ele, já que temos vários estados com apenas uma unidade do carro, logo, há a possibilidade de ocorrer erro na execução do código. + +mapa <- gvisGeoMap(est, locationvar='x', numvar='y', + options=list(region='BR', height=350, + displayMode="regions", + resolution="provinces", + width=600, height=400)) + +plot(mapa) +``` +*Interpretação: São Paulo é aonde existe a maior quantidade deste carro a venda. Estados como o Rio de Janeiro, Paraná e Minas Gerais também têm alguns deste carro para venda, mas a quantidade ainda é pequena perto de São Paulo. Nos outros estados ele é realmente bem raro.* + + - Gráfico do preço médio dos veículos por estado em um mapa. +```{r, echo=TRUE, results='asis', tidy=TRUE} +med <- aggregate(a~h, data=tab, mean) +med$h <- c("Bahia", "Ceará", "Distrito Federal", + "Espírito Santo","Goiás", "Minas Gerais", + "Mato Grosso do Sul", "Mato Grosso", "Pará", "Paraíba", + "Pernambuco","Piauí", "Paraná", "Rio de Janeiro", + "Rio Grande do Norte", "Rondônia","Rio Grande do Sul", + "Santa Catarina", "Sergipe", "São Paulo", "Tocantins") + +pmedio <- gvisGeoMap(med, locationvar='h', numvar='a', + options=list(region='BR', height=350, + displayMode="regions", + resolution="provinces", + width=600, height=400)) +plot(pmedio) +``` +*Interpretação: O Mato Grosso é aonde o preço médio do carro é o mais elevado, mas também só encontramos uma unidade do carro neste estado. Seguido do Mato Grosso, temos o Tocantins, Mato Grosso do Sul e Santa Catarina com preços médios altos.* + + - Diagrama de dispersão do preço de venda em função dos km percorridos. +```{r, echo=TRUE, results='asis', tidy=TRUE} +tab$d <- as.numeric(tab$d) +disp <- data.frame(tab$a, tab$d) + +dispe <- gvisScatterChart( + disp, + options=list( + legend="none", + vAxis="{title:' KM '}", + hAxis="{title: 'Preço de Venda'}", + width=800, height=600)) +plot(dispe) +``` +*Interpretação: Este gráfico mostra que, no geral, o preço no carro aumento quanto menor seja a quilômetragem.* + + - Gráfico de caixas do preço em função do ano do veículo. +```{r, echo=TRUE, results='asis', tidy=TRUE} +# Ano e preço +ano <- tab$b +pre <- tab$a +boxp <- data.frame(ano, pre) +a <- boxplot(pre~ano, boxp, outline=FALSE, plot=FALSE) + +min <- a$stats[1,] +max <- a$stats[5,] +open <- a$conf[1,] +close <- a$conf[2,] +factors <- a$names + +bp <- data.frame(factors, min, open, close, max) + +boxpl <- gvisCandlestickChart(bp, + options=list(legend='none')) +plot(boxpl) +``` +*Interpretação: Este gráfico mostra que carros "mais antigos" tendem a ter um preço mais baixo, mas também uma maior variação. Carros mais novos custam mais caro mas têm um preço mais estável.*