Seminário Internacional de Estatística com R

Em 2019 estávamos planejando o V SER(Seminário Internacional de Estatística com R), chamada de trabalhos aberta, grande expectativa de realizá-lo com intensa participação da comunidade R, fomos surpreendidos pela pandemia da Covid-19 e decidimos cancelar o evento que ocorreria em maio de 2020. Aliás neste ano de 2020 fomos impulsionados a nos reinventar na maneira de interagir, começaram a surgir formas alternativas de se encontrar, lives, meets online, canais do youtube foram impulsionados, aulas passaram a ser remotas de forma síncrona e assíncrona e eu me mudei de cidade e iniciei uma nova vida com isolamento e próximo a meus entes queridos. Gravei algumas aulas e disponibilizei no youtube e o projeto de vídeos do canal Estatística é com R ficou lá, parado em produção, mas intenso em acessos e visualizações, era o momento de recorrer ao aprendizado remoto, todos fizemos isso.

O mundo inteiro passou a aprender de forma remota! Enquanto isso acontecia eu já tinha um livro em produção pela Alta Books prestes a ser lançado, um livro super completo, de fácil leitura e reprodução, pensado para quem está iniciando o aprendizado do R, deseja aplicar técnicas de análise de dados e já produzir seu relatório ou artigo dentro do ambiente integrado do Rstudio.

Este livro pode ser adquirido em https://altabooks.com.br/produto/utilizando-a-linguagem-r/

Um livro é sempre um bom caminho para iniciar um aprendizado, ver um novo ponto de vista, é uma maneira de se evoluir sozinho ou formar um grupo de estudos e passar a utilizá-lo. Mas a brincadeira fica muito mais empolgante quando podemos encontrar novas pessoas em torno do mesmo interesse e ampliar nosso network e oportunidades de trabalho, pesquisa e amizade.

Este network tão importante para nossas carreiras se torna possível através do SER – Seminário Internacional de Estatística com R, é lá que podemos encontrar aquela pessoa que nos ajudou de forma remota, que ouvimos falar nas redes sociais e que faz trabalhos incríveis com o R. Também podemos nos tornar protagonistas desse encontro ao mostrar nosso trabalho através de palestras ou sessões pôster/oral ou ainda compartilhar nosso conhecimento adquirido através dos minicursos.

O mundo é cheio de desafios, e tivemos que repensar o SER, enfrentar nossos medos e dificuldades diante do novo cenário que estava se formando, então a equipe de organizadores liderados por mim, pelo prof. Orlando e prof. Ariel reuniu forças, estudou o cenário, juntou os colaboradores e com grande sucesso realizou o V SER em junho de 2021, tudo online, participação gratuita para todos os interessados, com palestras online e chat ao vivo com o palestrante. Confira lá no canal do SER!

Este ano de 2022 esperamos repetir o sucesso, nossa equipe está sempre buscando novos desafios, abrir espaços para a disseminação e uso da linguagem R, além do público de estudantes, professores e praticantes de diversas áreas do conhecimento, sob o tema R::for(all), vamos também promover a integração da educação no ensino médio através do evento satélite EducaSER, integrando professores do ensino fundamental e médio à comunidade R, com um dia inteiro dedicado a palestras e minicursos próprios para este público que quer pensar a educação estatística desde a mais tenra idade. Esperamos receber professores de diversas áreas, exatas, humanas, letras, biológicas, etc, queremos pensar a educação estatística de forma integrada com outras áreas de conhecimento. Por exemplo, podemos utilizar o R para produzir mapas em conjunto com a disciplina de geografia, podemos estudar sequências de palavras em um texto em conjunto com a disciplina de português, analisar o crescimento de um planta através de um experimento de biologia, produzir obras artísticas a partir de funções matemáticas na disciplina de artes, dentre outras possibilidades.

Quero acreditar num futuro melhor, percebo o surgimento de integração de áreas dando espaço a formação de novos cursos que nunca se ouvia falar, talvez por estar ligada a academia, tenha uma leve percepção dessa demanda que está pautada nessa novo cenário. E com olhos atentos vamos absorvendo essa evolução no nosso seminário, o SER.

Faça-se presente no VI SER, inscreva-se gratuitamente e participe online: www.ser.uff.br

Profa. Luciane Alcoforado (UFF/AFA)

Publicado em Uncategorized | Deixe um comentário

A escolha da profissão: Estatística!

Todo jovem estudante do ensino médio se depara com o dilema da escolha da profissão. Esta escolha passa por diversos critérios como a afinidade com determinada área do conhecimento, a distância da residência à uma instituição de ensino superior que tenha um curso desejável e mesmo o custo de vida para enfrentar no mínimo 4 anos pela frente (apoio dos pais é fundamental, mas a decisão final é sempre do jovem) e as expectativas quanto a colocação no mercado de trabalho após a conclusão do curso. Junto com todas estas variáveis há a questão da aprovação no processo de seleção, o temível vestibular.

Pra que Estatística?

Estatísticas  auxiliam a definição de políticas públicas.

O grande desafio da Estatística é extrair o conhecimento de milhões de dados.

Estatísticas  transformam dados em conhecimento.

O Estatístico tem a possibilidade de trabalhar na área que gosta.

Habilidades que o profissional precisa desenvolver:

  • Raciocínio lógico
  • habilidade de se comunicar com clareza
  • saber trabalhar em equipe
  • ser crítico sobre os dados
  • saber programar
  • gostar de matemática (afinidade com a área de exatas)
  • comunicar-se em outros idiomas
  • ser curioso
  • ter muita vontade de aprender

O curso de Estatística na UFF

O Curso de Graduação em Estatística foi inaugurado em 2007, com a entrada de seus primeiros 30 alunos através do vestibular. Hoje já são mais de 200 alunos e 72 graduados, atuando no mercado de trabalho ou em cursos de pós-graduação.

Mais informações podem ser obtidas no site do curso (clique aqui)

Onde o Estatístico pode atuar?

Na indústria realizando análise de controle de qualidade e melhoria de processos, na área da saúde estudando as variáveis relacionadas a doenças ou epidemias, na área da segurança pública realizando modelagem espacial de dados, na área de finanças analisando riscos e investimentos, na área de marketing analisando o perfil do consumidor e tendências do mercado; na área acadêmica como professor, formando novos profissionais; na área da engenharia de dados modelando um grande conjunto de dados e sua visualização, na área de esporte modelando dados de performance de atletas ou times; na área ambiental modelando dados climáticos, e muitas outras atividades que desconheço no momento. Com as novas tecnologias e a grande disponibilidade de dados, novas aplicações são demandadas pelo mercado então há a possibilidade de que esta lista aumente ou se modifique ao longo dos anos e até o final de sua graduação muita coisa pode ter mudado, estamos vivendo a era dita líquida e que acredito que esteja caminhando para vaporizada!

Eles escolheram o curso de Estatística

A decisão de escolha é algo muito particular, então nesta postagem quero compartilhar com vocês o depoimento de quatro jovens recém formados em Estatística para que sirvam de inspiração neste processo de escolha.

Estes jovens integram o projeto Estatística é com R! desde seu início em 2015 quando ainda éramos uma promessa, uma página em branco. Eles atuaram ativamente na construção do projeto e vieram aqui dar seu recado.

Jonatha Azevedo – Estatístico

O que o motivou a escolher estatística?

A intensão era entrar no mundo de tecnologia e o curso apresentava uma boa relação com o segmento, atualmente, é um dos cursos mais pedidos para o ingresso no mercado tecnológico.

Dificuldades encontradas: Carga horária puxada e inflexível.

Superação: Automotivação

Incentivos: Projetos de extensão como o Estatística é com R!, monitoria e projetos de pesquisas.

O que faz hoje?

Sou desenvolvedor na equipe de métodos estatísticos e computacionais do FGV IBRE.

Desenvolvo sistemas e aplicações que apresentam funcionalidades estatísticas e com engenharia de dados.

O R é uma excelente e primordial ferramenta para estatística, além de ser uma boa linguagem de programação para adentrar nesse mundo.

Leonardo Filgueira – Estatístico

O que o motivou a escolher estatística?

Escolhi por causa da nota de corte e depois já no curso acabei me identificando e comecei a gostar da Estatística. Hoje vejo que essa foi a melhor decisão!

Dificuldades encontradas: Os primeiros períodos com Cálculo e Probabilidade

Superação: Aprender a aprender

Incentivos: Projetos de extensão Estatística é com R!, monitoria e o estágio

O QUE FAZ HOJE?

Sou estatístico da equipe de Data Science do IBOPE DTM.

Faço automação de processos e análise de dados  de perfil da população brasileira.

O R foi fundamental na minha formação e hoje é minha principal ferramenta de trabalho.

Estou me mudando para São Paulo com grandes perspectivas de crescimento na carreira.

 

A decisão final

Estudar estatística requer muita dedicação e o profissional tem tudo para ser bem sucedido.

Se você ficou interessado…

Entre para nossa Estatística!

Profa. Luciane Alcoforado / UFF / Dep. de Estatística

Publicado em ensino médio, estatística na uff, Uncategorized | Com a tag , , , , | Deixe um comentário

Analisando o canal do youtube Estatística é com R !

Neste tutorial serão usados os seguintes pacotes:

  • tuber: Para coletar os dados do Youtube, este será o foco desse tutorial;
  • dplyr: Usado na manipulação dos dados obtidos, para melhor entendimento desse pacote recomendamos https://www.youtube.com/watch?v=jTQkMHYxwew
  • lubridate: Trabalhar com data;
  • ggplot2: Visualização dos dados

Criando sua chave API e um OAuth Key.

O primeiro passo será criar uma conta no Google Cloud (https://cloud.google.com). Após criar sua conta, siga o passo a passo desse video https://www.youtube.com/watch?v=pP4zvduVAqo e em seguida crie sua OAuth Key

Autenticando sua chaves

Depois de obtida as chaves, devemos autenticar o pc/notebook que esta sendo utilizado. Para isso, utilizaremos a função yt_oauth().

app_id <- "ID_cliente"
app_secret <- "Chave secreta do cliente"
yt_oauth(app_id, app_secret, token='')

Deverá aparecer uma página pedindo para fazer login com sua conta Gmail e, se tudo der certo, aparecerá a seguinte:

menssagem Authentication complete. Please close this page and return to R.

Obtendo os dados

A partir de agora esses dados estão disponíveis para acesso e manipulação, e esse post focará em algumas funções capazes de acessar esses dados disponiveis.

get_stats

infos <- get_stats(video_id = smartcities$video_id[2])
## Error in get_stats(video_id = smartcities$video_id[2]): Must specify a video ID.

Aqui temos que tomar muito cuidado!!!!!!

class(smartcities$video_id[2])
## [1] "factor"

Todas os resultados em smartcities são factor, então faça as devidas alterações seja, transformando em character ou numeric.

id <- as.character(smartcities$video_id[2])
infos <- get_stats(video_id = id)
class(infos)
## [1] "list"

Obtendo estatísticas e fazendo análise descritiva de um canal

Agora será construído um script capaz de pegar todas as informações básicas de um video (número de vizualizações, likes, e dislikes, quando foi feito o upload). Como exemplo, será usado o canal Estatística é com R https://www.youtube.com/channel/UCmbNWlpq8o3dpqY6c9HDGXg .

1º passo: Obter todas as infos do canal.

canal <- yt_search(term = "", 
          type = "video",
          channel_id = 'UCmbNWlpq8o3dpqY6c9HDGXg')

Para achar channel_id, basta ir na pagina do mesmo e pegar tudo que vem após de /channel/…., nesse caso foi UCmbNWlpq8o3dpqY6c9HDGXg

2º passo: Coletar o id, salvo no objeto id.

id <- NULL
for (i in canal$video_id){
  id <- c(id,i)
}

3º passo: Extração

nrow <- dim(canal)[1] # Vendo quantos videos tem em um canal
ncol <- length(get_stats(video_id=id[1])) # Vendo quantas informações são fornecidas

# Criando um matriz para armazenar as estatisticas que no momento não tem nada 
estatisticas <- matrix(1:ncol,ncol=ncol,nrow=nrow)

# Para cada video estou armazenado as estisticas com a funcao get_stats()
for (j in 1:nrow){
  infos <- unlist(get_stats(video_id=id[j]))
  estatisticas[j,] <- infos
}

# Transforamndo de matriz para data frame
estatisticas <- as.data.frame(estatisticas)

# Colocando nome nas colunas
nome <- names(unlist(get_stats(video_id=id[1])))
colnames(estatisticas) <- nome

# Juntando a base estatistica com canal
estatisticas <- merge(estatisticas, canal,  by.y="video_id", by.x="id") 

# Selecionando somente as colunas estatisticas,title e  viewCount ate publishedAt
estatisticas <- select(estatisticas,title, viewCount:publishedAt)

# Manipulando as datas
estatisticas$publishedAt <- as_date(estatisticas$publishedAt)

4º passo (opicional): Exportar para csv ou qualquer outra extensão

write.csv2(estatisticas,"youtubeR.csv")

Apesar desse passo ser opcional, aconselha-se fazê-lo

Usando ggplot2

Gráfico 1

base <- estatisticas
base$viewCount <- as.numeric(as.character(estatisticas$viewCount))
base$title <- as.character(estatisticas$title)

base <- arrange(base, viewCount)
fig1 <- ggplot(base,aes(x=reorder(title,viewCount),y=viewCount))+
  geom_bar(stat="identity") +
  coord_flip()+
  labs(y = "Número de visualizações", x = "Nome do video")
fig1 

Gráfico 2

##Diferença de dias
hoje <- today("GMT")
base$diferenca <- hoje-base$publishedAt
base$diferenca <- as.numeric(base$diferenca)
base <- select(base,title,viewCount,views_por_dias,diferenca,everything())

#Views por dias
base$views_por_dias <- base$viewCount/base$diferenca
base <- arrange(base, views_por_dias)
fig2 <- ggplot(base,aes(x=reorder(title,views_por_dias),y=views_por_dias))+
  geom_bar(stat="identity") +
  coord_flip()+
  labs(y = "Número de visualizações por dia", x = "Nome do video")
fig2

Problemas http

As vezes pode ocorrer um erro ao utilizar a função yt_search() (error http 401), caso isto aconteça vá na pasta em que seu script esta salvo e delete os seguintes arquivos: .gitignore e .httr-oauth

Outro possível erro é o error http 403, nesse caso não há muito o que ser feito. Como esse é um serviço 0800 o próprio Google limita o número de acessos, mas fique calmo que depois de 24:00 do horario pacifico (pacific time) o próprio libera novamente o acesso.

Autoria: Gabriel Mizuno e Luciane Alcoforado

Publicado em Uncategorized | Deixe um comentário

Minicursos dia 21/5/2019 no IV SER – Seminário Internacional de Estatística com R

Na agenda do IV SER um dia inteiro de minicursos. Oportunidade de se atualizar nas ferramentas de análise utilizando o R e suas integrações com outras linguagens. Confira detalhes em www.ser.uff.br/minicurso

Publicado em Uncategorized | Deixe um comentário

Minicursos GRATUITOS para iniciantes em R – IV SER

Nossa equipe vem desenvolvendo diversos vídeos para o canal youtube.com/estatisticacomr e agora este acervo de vídeos pode ser visto em dois minicursos GRATUITOS que preparamos para a agenda do IV SER – Seminário Internacional de Estatística com R. Acesse agora mesmo o site do evento e faça sua inscrição. www.ser.uff.br/minicurso

O minicurso de Introdução ao R foi oferecido com sucesso em 2018 na agenda do III SER, mais de 500 pessoas de todo o Brasil e exterior já realizaram o curso. Agora em 2019 fizemos uma revisão no minicurso de Introdução ao R que foi ampliado para uma carga horária de 15h. Também oferecemos o minicurso de Introdução ao Tidyverse que é um conjunto de pacotes do R que facilita muito o trabalho do analista de dados, é uma ferramental fundamental para melhorar sua tarefa de analisar dados.

Esperamos que esta iniciativa contribua para disseminar ainda mais a linguagem R no Brasil e no mundo.

Publicado em Uncategorized | Deixe um comentário

Iniciando 2019 com as R-ladies Niterói

Iniciamos 2019 exercitando no R! Se você não pôde ir ao evento acompanhe a apresentação das meninas aqui. A Julia Ferreira que é graduanda em Estatística da UFF e a Camila Simões que é Estatística recém formada pela UFF são apaixonadas por estudar as possibilidades de análise com o R. Confira!

Para fazer parte do grupo basta inscrever-se em R-ladiesNiterói 

Publicado em Uncategorized | Deixe um comentário

Como comprar um carro usado com o R

 

By Prof. Dr. Steven Dutt Ross

Introdução

Estou começando o processo de compra de um carro usado. Como costumo tomar essas decisões fazendo uma pesquisa sobre o assunto, escrevi um código R para raspar dados de websites e construir um banco de dados. Acredito que esse processo pode ser replicado para comprar passagens aéreas, apartamentos, e outros elementos que envolvam a coleta de dados para reduzir a assimetria de informações. Acredito que saber o preço de outros carros com características semelhantes reduz essa assimetria.

A ideia deste texto surge a partir de diversos cursos e palestras sobre o R que fiz em 2018. Um ótimo exemplo disso é o minicurso realizado pela Karla Esquerre e Adelmo Filho sobre Web scraping no III Seminário Internacional de Estatística com R. Também recomendo o minicurso do CURSO-R sobre Web scraping.

Seria a Ciência de Dados um nome bonito para a Estatística?

Existe muita discussão sobre ciência de dados ser apenas um nome bonito para a estatística. Seria a mesma coisa com um outro nome? Recentemente assisti uma palestra da Jenny Bryan sobre o assunto e fiquei convencido que Não. Entre os argumentos colocados, Jenny Bryan coloca uma lista (incompleta) de ações que um cientista de dados consegue fazer e um estatístico não. Tive que concordar com ela. Sendo um estatístico, frequentemente vi a minha inabilidade para:

  1. Raspar dados da web,
  2. Solicitar dados por meio de uma API,
  3. Analisar dados em formato de lista,
  4. Entender formatos como o JSON ou GeoJSON,
  5. Utilizar dados no formato XML,
  6. Ler um simples banco de dados do formato SQL, entre outras coisas são comuns para um cientista de dados.

Como graduado em Estatística, a minha maior preocupação sempre foi o modelo, os seus pressupostos e o procedimento para o teste de hipóteses.

Mas isso não quer dizer que não podemos aprender um pouco de ciência de dados. Esse artigo é justamente para compartilhar o que aprendi sobre raspagem de dados, porque acredito que este é um ótimo exemplo de como alguém pode usar o R de uma forma funcional para a tomada de decisões simples (como comprar um carro usado). Ainda estou no processo de aprendizado. Assim, quero deixar claro que…

fonte: Jkust

fonte: Jkust

Parte 1: Identificando a estrutura do site

Para fazer a escolha do carro que vou comprar estou buscando vou raspar dados do site do vivalocal com o pacote Rvest. Ao fazer um levantamento da estrutura do site, percebi que o site tem uma estrutura do tipo:

SITE BÁSICO / NÚMERO DA PAGINA / COMPLEMENTO DO SITE

Onde: SITE BÁSICO = http://search.vivalocal.com/auto-veiculo-usado/rio-de-janeiro/t+

COMPLEMENTO DO SITE = ?lb=new&search=1&start_field=1&keywords=……

Exemplos da estrutura:

http://search.vivalocal.com/auto-veiculo-usado/rio-de-janeiro/t+2?lb=new&search=1&start_field=1&keywords=&cat_1=40&geosearch_text=Rio+de+Janeiro+-+RJ&searchGeoId=74&sp_common_price%5Bstart%5D=&sp_common_price%5Bend%5D=&sp_vehicules_mileage%5Bstart%5D=&sp_vehicules_mileage%5Bend%5D=&sp_common_year%5Bstart%5D=&sp_common_year%5Bend%5D=&sp_vehicules_energy=

http://search.vivalocal.com/auto-veiculo-usado/rio-de-janeiro/t+19?lb=new&search=1&start_field=1&keywords=&cat_1=40&geosearch_text=Rio+de+Janeiro+-+RJ&searchGeoId=74&sp_common_price%5Bstart%5D=&sp_common_price%5Bend%5D=&sp_vehicules_mileage%5Bstart%5D=&sp_vehicules_mileage%5Bend%5D=&sp_common_year%5Bstart%5D=&sp_common_year%5Bend%5D=&sp_vehicules_energy=

Identificar essa estrutura será uma das etapas mais importantes no processo de raspagem de dados.

Também descobri que o site tem 19 páginas.

Com a ferramenta selectorgadget, pude identificar os elementos do site que estou interessado. Um exemplo do uso do selectorgadget pode ser vista na figura abaixo:

Os elementos que estou interessado para construir o banco de dados são:

h4
.clad__price
.vip-enabled
.clad__summary , .not-tablet-mobile

Com a identificação dos elementos de que preciso, posso iniciar o processo de raspagem de dados com o R.

Parte 2: Raspagem de dados

A raspagem de dados pode ser realizada com o pacote rvest. O objeto nome_carro receberá um vetor com o nome de todos os carros da primeira página do site. O mesmo acontecerá com os objetos preco_carro,km_local_carro e texto_carro. O objetivo aqui é criar um vetor para cada elemento.

library(rvest)
## Loading required package: xml2
site_carro <- read_html('http://search.vivalocal.com/auto-veiculo-usado/rio-de-janeiro?lb=new&search=1&start_field=1&keywords=&cat_1=40&geosearch_text=Rio+de+Janeiro+-+RJ&searchGeoId=74&sp_common_price%5Bstart%5D=&sp_common_price%5Bend%5D=&sp_vehicules_mileage%5Bstart%5D=&sp_vehicules_mileage%5Bend%5D=&sp_common_year%5Bstart%5D=&sp_common_year%5Bend%5D=&sp_vehicules_energy=')

nome_carro <- site_carro %>%
  html_nodes("h4") %>%
  html_text()
##########################################
preco_carro <- site_carro %>%
  html_nodes(".clad__price") %>%
  html_text()
##########################################
km_local_carro <- site_carro %>%
  html_nodes(".vip-enabled") %>%
  html_text()
##########################################
texto_carro <- site_carro %>%
  html_nodes(".clad__summary , .not-tablet-mobile") %>%
  html_text()

Vamos dar uma olhada no que conseguimos. Com o comando head podemos ver as primeiras linhas do vetor.

head(nome_carro)
## [1] "Jac 2- Jac motors- seminovo"              
## [2] "Fiat Uno Vivace 1.0 8V (Flex) 4p 2013"    
## [3] "Chevrolet Onix 1.0 LT SPE4"               
## [4] "Proteção Veicular"                        
## [5] "Venda"                                    
## [6] "ONIX - 2014 1.4 MPFI LT 8V FLEX 4P MANUAL"
head(preco_carro)
## [1] "R$19.000"  "R$14.000"  "R$18.000"  "R$9.000"   "R$500.000" "R$35.900"
head(km_local_carro)
## [1] "50 km Particular Volta Redonda RJ "      
## [2] "62000 km Particular Niteroi RJ "         
## [3] "80000 km Particular Niteroi RJ "         
## [4] "1010101 km Particular Rio de Janeiro RJ "
## [5] "100 km Particular Angra dos Reis RJ "    
## [6] "61000 km Particular Petropolis RJ "
head(texto_carro,10)
##  [1] "Inserir anúncio"                                                                                                                                                                                                                                                                                                             
##  [2] "\n            Procurar\n        "                                                                                                                                                                                                                                                                                            
##  [3] "\n                                                            Particular  (226)                                                    "                                                                                                                                                                                         
##  [4] "\n                                                            Concessionária  (143)                                                    "                                                                                                                                                                                     
##  [5] "\n            \n                Ordenar: \n                        Últimos\n                        \n                        Preço\n                        \n        "                                                                                                                                                     
##  [6] "\n                \n                    \n                    Classificados\n                    \n                    Fotos\n            "                                                                                                                                                                                  
##  [7] " 192945467  Jac 2- Jac motors- seminovo  50 km Particular Volta Redonda RJ   R$19.000 Jacmotors- J2 1.4 semi novo completo, sem dividas documento em dia. contato zap( 21)969475739 / 24 992762557  "                                                                                                                        
##  [8] "Jacmotors- J2 1.4 semi novo completo, sem dividas documento em dia. contato zap( 21)969475739 / 24 992762557"                                                                                                                                                                                                                
##  [9] " 192922832  Fiat Uno Vivace 1.0 8V (Flex) 4p 2013  62000 km Particular Niteroi RJ   R$14.000 Fiat Uno Vivace 1.0 8V (Flex) 4p 2013 Ano 2013 62.000 Km Cor Preto Câmbio manual 4 Portas Flex, Final da placa 5 distribuição eletrônica de frenagem, airbag motorista, alarme, freios ABS, airbag passageiro ar-condicionad…  "
## [10] "Fiat Uno Vivace 1.0 8V (Flex) 4p 2013 Ano 2013 62.000 Km Cor Preto Câmbio manual 4 Portas Flex, Final da placa 5 distribuição eletrônica de frenagem, airbag motorista, alarme, freios ABS, airbag passageiro ar-condicionad…"

Podemos observar que conseguimos todos os dados que queriamos, mas as informações do objeto texto_carro tem dois problemas: Primeiro, as seis primeiras linhas do banco de dados não têm informação sobre os carros. Segundo, as linhas parecem replicadas. Isto é, cada registro está sendo contado duas vezes. Podemos ver isso utilizando o comando length.

length(nome_carro)
## [1] 20
length(preco_carro)
## [1] 20
length(km_local_carro)
## [1] 20
length(texto_carro)
## [1] 46

Corrigindo o objeto “texto_carro”. Encontrei a solução para isso em uma pergunta do stackoverflow.com. Admito que não é uma solução elegante, mas resolveu o problema.

# Resolvendo o problema 1
  texto_carro <- texto_carro[-c(1,2,3,4,5,6)]
# Resolvendo o problema 2  
  to_Delete <- seq(1, length(texto_carro), 2)
  texto_carro <-  texto_carro[-to_Delete]
  length(texto_carro)
## [1] 20

Como os dois problemas corrigidos, podemos montar uma base de dados com o comando data.frame(). Este comando será utilizado para “juntar” tudo em um único banco de dados.

carro_vivalocal<- data.frame(nome_carro,preco_carro,km_local_carro,texto_carro,stringsAsFactors = FALSE)

Como, até agora, a raspagem está funcionando para a primeira página, podemos tentar desenvolver uma função para ir da página 01 até a página 19. O objetivo é criar uma função que colete todos os dados da página 01, passe para a página 02, colete todos os dados dessa página, passe para a próxima página e assim por diante até a página 19. A função Sys.sleep() é utilizada para desacelerar a rotina da função for. Pelo que pude entender, esta função é importante porque ao fazer muitos pedidos ao site do viva local podemos sobrecarregar o servidor.

n_paginas <- 19
banco_carro_i <- c()
banco_carro   <- c()


for (i in 0:n_paginas) {
  url_number <- 19 - i
  # Buscando a página
  url <- paste0('http://search.vivalocal.com/auto-veiculo-usado/rio-de-janeiro/t+',url_number,'?lb=new&search=1&start_field=1&keywords=&cat_1=40&geosearch_text=Rio+de+Janeiro+-+RJ&searchGeoId=74&sp_common_price%5Bstart%5D=&sp_common_price%5Bend%5D=&sp_vehicules_mileage%5Bstart%5D=&sp_vehicules_mileage%5Bend%5D=&sp_common_year%5Bstart%5D=&sp_common_year%5Bend%5D=&sp_vehicules_energy=')

    # lendo a página
  page <- read_html(url)
  names_i <- page %>%   html_nodes("h4") %>% html_text()
  names_j <- page %>%   html_nodes(".clad__price") %>% html_text()
  names_k <- page %>%   html_nodes(".vip-enabled") %>% html_text()
  names_l <- page %>%   html_nodes(".clad__summary , .not-tablet-mobile") %>% html_text()
  # Resolvendo o Problema 1
  names_l <- names_l[-c(1,2,3,4,5,6)]
  # Resolvendo o Problema 2
  to_Delete <- seq(1, length(names_l), 2)
  names_l <-  names_l[-to_Delete]
  
  # Construindo o banco de dados de cada etapa
  banco_carro_i<- data.frame(names_i,names_j,names_k,names_l,stringsAsFactors = FALSE)
  # Alimentando o banco de dados total
  banco_carro<-rbind(banco_carro, banco_carro_i)
  # Mostra a página em que o R está
  print(i)
  # Para suspender a execução do R
  Sys.sleep(3)
}

Vamos ver a estrutura do banco de dados. O comando str() exibe a estrutura interna de um objeto R (é uma ótima alternativa ao summary()).

str(banco_carro)
## 'data.frame':    165 obs. of  8 variables:
##  $ names_i: chr  "Logus AP1.8 DocumentoOk ReciboAberto Zap(21)98403-1482" "Mercedes Benz Classe C 180 19971998 Classic" "Minivan Citroen 2000 + Moto XLX350 1990 COM 2018 OK RJ" "Sorento EX2 3.5 4X4 7 lugares automatico." ...
##  $ names_j: chr  "R$3.800" "R$24.000" "R$18.000" "R$70.000" ...
##  $ names_k: chr  "127000 km Particular Rio de Janeiro RJ " "187200 km Particular Campos dos Goytacazes RJ " "158000 km Concessionária Rio de Janeiro RJ " "95000 km Concessionária Rio de Janeiro RJ " ...
##  $ names_l: chr  "vendo logus 94 motor AP 1.8 nunca levo gas ! E meu a 5 anos no meu nome e assim consta ! manutenção em dia todo"| __truncated__ "Veículo em bom estado de conservação. Uso diário. Manual em português de Portugal. Cartão do primeiro dono. Mot"| __truncated__ "VENDO MINIVAN CITROEN EVASION GLX 2.0i 8V ANO E MODELO 2000 COR AZUL MARINHO VENDO MOTOCICLETA HONDA XLX 350 AN"| __truncated__ "Sorento EX2 3.5 G17 top de linha, 4/4, 24 válvulas. 7 lugares. Estudo troca por carro Suv automatico, valor men"| __truncated__ ...
##  $ preco  : num  3800 24000 18000 70000 16500 7500 15000 30000 9900 39900 ...
##  $ Km     : chr  "127000" "187200" "158000" "95000" ...
##  $ Tipo   : chr  "Particular" "Particular" "Concessionária" "Concessionária" ...
##  $ cidade : chr  "Rio de Janeiro RJ " "Campos dos Goytacazes RJ " "Rio de Janeiro RJ " "Rio de Janeiro RJ " ...

Parte 3: Transformação de dados

Já estamos com o banco de dados, mas ainda precisamos transformar essa estrutura para uma forma mais analítica. Já vi diversos termos para essa fase. Os mais comuns são limpeza de dados, higienização de dados, e transformação de variáveis.

A primeira etapa é transformar o preço do carro em número. Nesse momento, a variável está no formato texto (caracter).

# Tirando o ponto
banco_carro$preco <- gsub('\\.', '', banco_carro$names_j)
# Tirando o R$
banco_carro$preco <- chartr("R$","  ", banco_carro$preco)
# Tirando o espaço
banco_carro$preco <- gsub('\\s+', '', banco_carro$preco)
# Transformando em número
banco_carro$preco<-as.numeric(banco_carro$preco)

Temos uma variável com três informações: Kilometragem, Tipo, e cidade/local. A segunda etapa é dividir as colunas da variável. Isto é, quero dividir a variável em 03 outras variáveis. A primeira contendo a kilometragem. A segunda com as classes “Particular/Concessionária. A última com o local do carro. (Esse segmento ficou um pouco repetitivo. Preciso de uma programação um pouco mais funcional).

Repare que para dividir a primeira coluna, podemos usar Km como um marcador. Por exemplo,

##################################################################
# Km
##################################################################
mini_banco_carro<-banco_carro$names_k
mini_banco_carro<-data.frame(mini_banco_carro)
colnames(mini_banco_carro)<-'nome'

library(tidyr)
mini_banco_carro<-separate(data = mini_banco_carro, col = nome, into = c("Km", "resto"), sep = "\\ km ")

# Juntando as novas variaveis ao banco
library(dplyr)
banco_carro$chave<-rownames(banco_carro)
mini_banco_carro$chave<-rownames(mini_banco_carro)
banco_carro<-full_join(banco_carro, mini_banco_carro)
remove(mini_banco_carro)

##################################################################
# Tipo
##################################################################
mini_banco_carro<-banco_carro$resto
mini_banco_carro<-data.frame(mini_banco_carro)
colnames(mini_banco_carro)<-'nome'
mini_banco_carro<-separate(data = mini_banco_carro, col = nome, into = c("Tipo", "resto2"), sep = "\\s+")
# Juntando as novas variaveis ao banco
banco_carro$chave<-rownames(banco_carro)
mini_banco_carro$chave<-rownames(mini_banco_carro)
banco_carro<-full_join(banco_carro, mini_banco_carro,by = "chave")
remove(mini_banco_carro)

##################################################################
# Cidade
##################################################################

banco_carro$cidade <- gsub('\\Particular ', '', banco_carro$resto)
banco_carro$cidade <- gsub('\\Concessionária ', '', banco_carro$cidade)

##################################################################
# Retirando os excessos
##################################################################
nomes<-c("names_i", "names_j", "names_k", "names_l","preco","Km","Tipo","cidade") 
banco_carro<-banco_carro[,nomes]

Parte 4: Análise de texto

Agora precisamos de uma ferramenta para a análise de texto para avaliar o conteúdo de cada anúncio. Vamos utilizar o pacote chamado (tidytext)[https://cran.r-project.org/web/packages/tidytext/index.html]

A primeira etapa para a análise de texto é colocar no formato tidy. O formato tidy é um formato especifico onde:

  1. Cada coluna é uma variável,
  2. Cada linha é uma observação, e
  3. Cada célula é um valor.

Depois de colocar no formato tidy, vamos criar um gráfico com as palavras mais repetidas dos anúncios. Nesse gráfico, podemos ver que temos várias palavras que não são interessantes para a nossa análise. Por exemplo: “vendo”,“completo”, “primeira”,“parcela”,“dias”, etc. Precisamos remover essas palavras para gerar uma visualização de dados.

library(dplyr)
texto1<-banco_carro$names_i
texto1<-tbl_df(texto1)
colnames(texto1)<-'text'

library(tidytext)
tidy_texto1 <- texto1 %>%
    mutate(line = row_number()) %>%
    unnest_tokens(word, text)
library(forcats)
library(ggplot2)
tidy_texto1 %>%
    anti_join(get_stopwords(language = "pt")) %>%
    count(word, sort = TRUE) %>%
    top_n(50) %>%
    ggplot(aes(fct_reorder(word, n), n)) +
    geom_col() +
    coord_flip() +
    scale_y_continuous(expand = c(0,0)) +
    labs(x = NULL, y = "Number of occurrences")

# tirando as stopwords
pt_stop<-get_stopwords(language = "pt")

palavras_extras<- data.frame(word = c("vendo","completo","fire","8v","4p","primeira","parcela","p","km","dias","90","doc","ano","ok","vistoriado","4x4","troco","top","s","rj","novo","mao","lugare","estado","dono","0"),lexicon=rep("customizado",26),stringsAsFactors = FALSE)

# juntando as minhas palavras com a lista de stopwords
palavra_onibus<-pt_stop %>% bind_rows(palavras_extras)

tidy_texto1 %>%
    anti_join(palavra_onibus) %>%
    count(word, sort = TRUE) %>%
    top_n(50) %>%
    ggplot(aes(fct_reorder(word, n), n)) +
    geom_col() +
    coord_flip() +
    scale_y_continuous(expand = c(0,0)) +
    labs(x = NULL, y = "Number of occurrences")

Flex é uma palavra interessante para a decisão de comprar um carro. Podemos ter como um dos objetivos comparar os anúncios de carros Flex. Para fazer uma análise do preço do carro Flex, precisamos incluir uma variável binária (zero = carro não-Flex e um = carro Flex). Desse modo, temos:

# diversas maneiras de escrever a palavra
Flex<-c("flex","Flex","FLEX")
banco_carro$Flex <- as.integer(grepl(paste(Flex,collapse="|"), banco_carro$names_i))

Vamos olhar como ficou resultado com o pacote DT. O DT pode ser utilizado para apresentar o data.frame que conseguimos. Apresentar o banco de dados é cada vez mais importante na pesquisa reprodutível. Como consequencia da Reprodutibilidade científica, os critérios do SciELO buscam visam ampliar a transparência na pesquisa. Acredito que, em breve, todas as revistas devem pedir o banco de dados (e o código) junto com o artigo para publicação. Para quem quiser saber mais, recomendo o livro Reproducible Research with R and R Studio.

library(DT)
datatable(banco_carro, options = list(pageLength = 5))

A partir deste momento será possível muitas análises. Por exemplo, utilizar o pacote lexiconPT do Sillas Gonzaga para fazer uma análise no texto. Podemos também fazer uma comparação do Chevrolet Corsa com o Fiat Palio. Esse é um bom momento para construir alguns objetivos de pesquisa. Depois disso, podemos passar para uma análise estatística tradicional. Vou ficar por aqui.

Referências:

  1. Allaire,JJ; Xie, Yihui; McPherson,Jonathan; Luraschi, Javier;Ushey, Kevin;Atkins, Aron;Wickham, Hadley;Cheng, Joe;Chang, Winston rmarkdown: Dynamic Documents for R, 2018 Disponível aqui
  2. CURSO R: Minicurso de Webscraping. Disponível aqui
  3. Esquerre,Karla e Filho,Adelmo Minicurso de Webscraping com pacote Rvest no III SER. Disponível aqui
  4. Gandrud, C. Reproducible Research with R and RStudio. CRC Press, 2014.
  5. Gonzaga, S. lexiconPT: Lexicons for Portuguese Text Analysis R package version 0.1.0 https://CRAN.R-project.org/package=lexiconPT
  6. Knoepfle, D. How to buy a used car with R Disponível aqui
  7. Seminário de Estatística com o R – SER. Disponível aqui. Acesso em 07 de novembro de 2018.
  8. Wickham, H. rvest: Easily Harvest (Scrape) Web Pages. R package version 0.3.2. https://CRAN.R-project.org/package=rvest
Publicado em Uncategorized | Com a tag , , , | Deixe um comentário

Legendas em Português e Inglês nos vídeos

Por Julia Hellen Ferreira
Revisado por Thamires Marques

Desde o surgimento do canal “Estatística com R”, em 2015, nós temos o compromisso de ensinar a linguagem do R de forma acessível para todos. A cada ano, buscamos melhorias que atinjam o maior número de pessoas possível.

Agora teremos uma novidade! Os vídeos do canal estão com legendas em português, para que pessoas com deficiência auditiva possam acompanhá-los. Além disso, estamos expandindo o conteúdo para aqueles que não falam português. Por isso, escolhemos uma das línguas mais faladas do mundo, o inglês. As traduções estão sendo feitas pela aluna Luíza Oliveira, do curso de Estatística da UFF.

Os vídeos da série R Commander feitos pelas R-Ladies Niterói já estão com essas novidades. Não deixem de conferir e repassá-las aos seus amigos. Link do vídeo – Instalação do R Commander: http://bit.ly/Video-Rcommander

Veja o passo a passo abaixo para colocar legenda no vídeo:

1º Passo

2º Passo

3º Passo

4º Passo

5° Passo

 

Obrigada e até o próximo post!

Publicado em Uncategorized | Deixe um comentário

R-ladies Niterói

No dia 30 de agosto estivemos no primeiro encontro R-ladies Niterói com a missão de fortalecer ainda mais a comunidade R-ladies global e incentivar o aprendizado e uso da linguagem R nas análises de dados. Noelle Camelo, estudante de mestrado do Programa de Pós-Graduação em Engenharia Civil nos contou como o R entrou definitivamente em sua vida e seu emprego na visualização de dados do inventário da oferta turística do Rio de Janeiro. Julia Ferreira e Maciela Rodrigues, estudantes do curso de Estatística nos mostraram como o pacote Rcommander pode ajudar quem está começando a usar o R e não tem muita familiaridade com comandos de uma linguagem de programação. Fechando o encontro a profa. Luciane Alcoforado mostrou como o projeto “Estatística é com R!” iniciou, os produtos gerados e o alcance junto à comunidade.

Confira aqui os slides das palestras:

Noelle Camelo

Rcommander para leigos em R

O projeto Estatística é com R!

Publicado em Uncategorized | Deixe um comentário

Boletim Informativo do III SER

Publicado em Uncategorized | Deixe um comentário