Manipulação e Visualização de Dados

leg.ufpr.br/~walmes/cursoR/data-vis

1 Conjuntos de dados

# Carrega o pacote `readr`.
library(readr)
packageVersion("readr")
## [1] '1.1.1'

1.1 Jogadores de futebol da liga européia

Descrição: são dados biométricos e esportivos dos jogadores dos times da liga européia. Os dados foram extraídos do https://www.whoscored.com/.

url <- "http://leg.ufpr.br/~walmes/data/euro_football_players.txt"
browseURL(url)

fl <- file.exists(basename(url))
if (!fl) {
    download.file(url = url, destfile = basename(url))
}

# Leitura com R básico.
tb <- read.table(file = url,
                 header = TRUE,
                 sep = "\t",
                 quote = "",
                 stringsAsFactors = FALSE)
class(tb)
str(tb)

# Leitura com `readr`.
tb <- read_tsv(file = url,
               col_names = TRUE,
               quote = "",
               comment = "#")
class(tb)
str(tb, give.attr = FALSE)

Exercício: Faça a manipulação de dados para obter

1.1.1 Manipulação

  1. Total de observações e variáveis.
  2. O nome das equipes.
  3. Total de jogadores por equipe.
  4. Total de jogadores por país de origem.
  5. Total de gols por equipe.
  6. Total de cartões amarelos por equipe.
  7. Total de cartões amarelos e vermelhos por equipe.
  8. Substitua o NA dos cartões por 0.
  9. Obtenha a média, médiana e desvio-padrão de (idade|altura|peso) por equipe.
  10. Determine a correlação entre peso e altura por equipe.
  11. Determine o IMC médio por equipe.
  12. Calcule a proporção de disputas aéreas ganhas por faixa de altura com amplitura de classe de altura de 5 cm.
  13. Crie a variável que representa a posição em campo do jogador.
  14. Crie a variável que represente a classe de obsevidade pelo IMC.

1.1.2 Visualização

  1. A distribuição de frequência das posições em campo.
  2. Distribuição das idades por equipe.
  3. Distribuição das alturas por país de origem.
  4. Distribuição das alturas por posição em campo.
  5. Relação do peso com altura por posição em campo.
  6. Relação do peso com altura por país de origem.

1.2 Preço de veículos à venda

Descrição: são dados de veículos a venda em site de anúncio de veículos. As informações descrevem cada veículo sobre o preço de venda, a distância percorrida, ano e modelo de fabriação, etc.

url <- "http://leg.ufpr.br/~walmes/data/carros_venda_webmotors_270314.txt"
browseURL(url)

fl <- file.exists(basename(url))
if (!fl) {
    download.file(url = url, destfile = basename(url))
}

# Leitura com R básico.
tb <- read.table(file = url,
                 header = TRUE,
                 sep = "\t",
                 stringsAsFactors = FALSE)
class(tb)
str(tb)

# Leitura com `readr`.
tb <- read_tsv(file = url,
               col_names = TRUE)
class(tb)
str(tb, give.attr = FALSE)

Exercício: Faça a manipulação de dados para obter

1.2.1 Manipulação

  1. O número de veículos da tabela.
  2. O tipo de valor de cada variável.
  3. O número de veículos à venda por modelo.
  4. O número de veículos anunciados por marca.
  5. O número de veículos de cada cor.
  6. O preço médio de cada modelo.
  7. O número médio de km rodados por ano por modelo.
  8. O preço médio por veículo para faixas de km rodados com amplitude de classe de 10 km.

1.2.2 Visualização

  1. A distribuição do valor dos veículos.
  2. A distribuição do valor por modelo.
  3. A relação entre valor e km percorridos por modelo.

1.3 Avaliação de veículos pelos donos

Descrição: dados sobre a avaliação de veículos pelos donos. Os dados sobre avaliações foram extraídos do https://www.carrosnaweb.com.br/opiniao.asp. Os veículos são avaliados na escala de 0 a 10 para 14 itens.

url <- "http://leg.ufpr.br/~walmes/data/aval_carros_nota.txt"
browseURL(url)

fl <- file.exists(basename(url))
if (!fl) {
    download.file(url = url, destfile = basename(url))
}

# Leitura com R básico.
tb <- read.table(file = url,
                 header = TRUE,
                 sep = "\t",
                 stringsAsFactors = FALSE)
class(tb)
str(tb)

# Leitura com `readr`.
tb <- read_tsv(file = url,
               col_names = TRUE)
class(tb)
str(tb, give.attr = FALSE)

Exercício: Faça a manipulação de dados para obter

  1. Reformate a disposição dos dados para do formato amplo no itens.
  2. Obtenha o número de avaliações por modelo.
  3. Determine a nota média para Recomendação por modelo.
  4. Determine o item mais correlacionad com Recomendação em cada modelo.

1.4 Opiniões e características dos veículos

Descrição: disponível em https://github.com/leg-ufpr/hackathon.

url <- "https://raw.githubusercontent.com/leg-ufpr/hackathon/master/notas.csv"
# url <- "~/Dropbox/web-scrap/hackathon/notas.csv"

# tb <- read_csv2(url, col_names = FALSE)
tb <- read_csv2(url, col_names = c("id", "item", "nota"))
tb

url <- "https://raw.githubusercontent.com/leg-ufpr/hackathon/master/opinioes.json"
# url <- "/home/walmes/Dropbox/web-scrap/hackathon/opinions.json"
js <- jsonlite::fromJSON(url)
str(js)

js <- as_tibble(js)
str(js)

js <- js %>%
    setNames(nm = c("id", "tit", "veic", "dono", "desc", "pros",
                    "cont", "defe", "opin", "ts"))
str(js)

1.4.1 Manipulação

  1. Passe os dados das notas para o formato amplo.
  2. Selecione apenas as variáveis que descrevem o veículo e o dono.
  3. Isole a variável tempo de posse (anos).
  4. Isole a variável distância percorrida (km).
  5. Isole a variável ano/modelo.
  6. Isole a variável marca do veículo.
  7. Isole a variável carro anterior.
  8. Isole a variável cidade.
  9. Isole a variável estado.
  10. Faça a junção das duas tabelas.
  11. Qual o total de avaliações por veículo.
  12. Qual o total de avaliações por estado.
  13. Determine a recomendação média por veículo.
  14. Determine a recomendação média do Celta.
  15. Determine a recomendação média do Celta por estado.
  16. Determine a distância percorrida média por ano por estado do Celta.

1.4.2 Visualização

  1. Qual a distribuição da distância percorrida.
  2. Qual a distribuição da distância percorrida por veículo.
  3. Qual a distribuição da satisfação por veículo.
  4. Qual a distribuição da satisfação do Celta para cada estado.
  5. Qual a relação entre tempo de posse e distância percorrida.

1.5 Apartamentos à venda por bairro em Curitiba

Descrição: São dados de apartamentos à venda em Curitiba anunciados em site de imóveis. As informações são de imóveis em 7 bairros de Curitiba e descrevem cada imóvel em termos de preço de venda, metragem e número de cômodos.

url <- "http://leg.ufpr.br/~walmes/data/ap_venda7bairros_cwb_210314.txt"
browseURL(url)

fl <- file.exists(basename(url))
if (!fl) {
    download.file(url = url, destfile = basename(url))
}

# Leitura com R básico.
tb <- read.table(file = url,
                 header = TRUE,
                 sep = "\t",
                 quote = "",
                 comment.char = "")
class(tb)
str(tb)

# Leitura com `readr`.
tb <- read_tsv(file = url,
               col_names = TRUE,
               quote = "",
               comment = "")
class(tb)
str(tb, give.attr = FALSE)

Exercício: Faça a manipulação de dados para obter

  1. Total de imóveis por bairro.
  2. Distribuição do número de quartos/suites por imóvel.
  3. Distribuição preço/área dos imóveis.
  4. Distribuição preço/área dos imóveis por bairro.
  5. Relação preço e área dos imóveis.
  6. Relação preço e área dos imóveis por bairro.

1.6 Corrida de São Silvestre

Descrição: são dados sobre os atletas participantes da corrida de São Silvestre. Os dados são de alguma prova anterior a 2007 quando os resultados eram disponibilizados em formato de comprimento fixo de campo (FWF). Os dados foram extraídos do site oficial da prova: https://www.gazetaesportiva.com/sao-silvestre/resultados/.

url <- "http://leg.ufpr.br/~walmes/data/saosilvestre_fwf.txt"
browseURL(url)

fl <- file.exists(basename(url))
if (!fl) {
    download.file(url = url, destfile = basename(url))
}

# Posições que delimitam as fronteiras dos campos.
pos <- c(0, 5, 11, 43, 47, 57, 65, 104, 126)

# Leitura com R básico.
tb <- read.fwf(url,
               widths = diff(pos),
               stringsAsFactors = FALSE)
str(tb)

# Leitura com `readr`.
tb <- read_fwf(file = url,
               col_positions = fwf_widths(diff(pos)))
str(tb, give.attr = FALSE)
class(tb)

Exercício: Faça a manipulação de dados para obter

  1. O número de atletas de cada país.
  2. O número de atletas de cada equipe.
  3. O número de atletas de cada gênero.
  4. O número de atletas em cada faixa etária.
  5. O tempo médio de prova para cada gênero.
  6. O tempo médio de prova para cada faixa etária.
  7. O atleta campeão em cada gênero e faixa etária.

1.7 Triathlon

Descrição: dados sobre atletas de prova de triathlon. Foram extraídos do http://www.ipitos.com/. Os dados contém informações sobre o tempo nas provas de natação, ciclismo e corrida, além do gênero e categoria do atleta.

url <- "http://leg.ufpr.br/~walmes/data/triathlon.txt"
browseURL(url)

fl <- file.exists(basename(url))
if (!fl) {
    download.file(url = url, destfile = basename(url))
}

# Leitura com R básico.
tb <- read.table(file = url,
                 header = TRUE,
                 sep = "\t",
                 quote = "",
                 stringsAsFactors = FALSE)
class(tb)
str(tb)

# Leitura com `readr`.
tb <- read_tsv(file = url,
               col_names = TRUE,
               quote = "",
               comment = "#")
class(tb)
str(tb, give.attr = FALSE)

Exercício: Faça a manipulação de dados para obter

  1. O número de atletas por gênero.
  2. O número de atletas por categoria.
  3. O tempo médio na prova de (natação|ciclismo|corrida) por gênero.
  4. A fração do tempo total em (natação|ciclismo|corrida) por gênero.

1.8 Coberturas em Curitiba

Descrição: São dados de coberturas à venda em Curitiba de um site de anúncios de imóveis. Os dados foram obtidos por web scraping. Estão disponíveis informações como preço de venda, metragem do imóvel, localização geográfica, número de quartos, banheiros, vagas na garagem, etc.

# Para baixar o arquivo.
url <- "http://leg.ufpr.br/~walmes/data/coberturas-venda-cwb-26Jan2018.txt"
browseURL(url)

fl <- file.exists(basename(url))
if (!fl) {
    download.file(url = url, destfile = basename(url))
}

# Leitura com R básico.
tb <- read.table(file = url,
                 header = TRUE,
                 skip = 5,
                 sep = "\t",
                 quote = "",
                 comment.char = "",
                 stringsAsFactors = FALSE)
class(tb)
str(tb)

# Leitura com `readr`.
tb <- read_tsv(file = url,
               col_names = TRUE,
               skip = 5,
               quote = "",
               comment = "")
class(tb)
str(tb, give.attr = FALSE)

2 Instalação do tidyverse

#-----------------------------------------------------------------------
# Instala e carrega o tidyverse.

# Define globalmente na sessão o repositório R (use no seu ~/.Rprofile).
options(repos = "http://cran-r.c3sl.ufpr.br/")

# Instalar se não possuir o pacote.
install.packages(tidyverse, dependencies = TRUE)

# Carrega o pacote para a sessão.
library(tidyverse)

packageVersion("tidyverse")

Resumo das funcionalidades para manipulação:

Materiais úteis:

3 Visualização com ggplot2

#-----------------------------------------------------------------------
# Visualização com ggplot2.

# Modelo.
#
# ggplot(data = <dados>, ...) +
#     geom_<grafico>(mapping = aes(...), ...) +
#
# em que <dados> indica um data.frame e <grafico> indica um tipo de
# representação geométrica das informação dos dados.

# ls("package:ggplot2")

# Funções no `ggplot2` que começam com "geom".
grep(x = ls("package:ggplot2"),
     pattern = "^geom_",
     value = TRUE)

# Funções no `ggplot2` que começam com "stat".
grep(x = ls("package:ggplot2"),
     pattern = "^stat_",
     value = TRUE)

# Funções no `ggplot2` que começam com "scale" ou "coord".
grep(x = ls("package:ggplot2"),
     pattern = "^(scale|coord)_",
     value = TRUE)

# Funções no `ggplot2` que começam com "theme".
grep(x = ls("package:ggplot2"),
     pattern = "^theme_",
     value = TRUE)

#-----------------------------------------------------------------------
# Versões dos pacotes e data do documento.

devtools::session_info()
Sys.time()
25px

Licença Creative Commons 4.0

Este conteúdo está disponível por meio da Licença Creative Commons 4.0