O objetivo dessa atividade é fazer uma introdução ao universo tidyverse.
Como você sabe, precisamos utilizar as ferramentas do universo tidyverse ao longo do curso para analisar dados e também para aprender os conceitos estatísticos discutidos nos livros de uma forma aplicada. Ao final dessa atividade, espero-se que você saiba:
Manipular uma base de dados com o operador %>%,
Usar o Dplyr para calcuar uma média por categoria,
Fazer o cruzamento de uma variável categórica com uma variável quantitativa em qualquer base de dados no R.
O banco de dados CARROS.RData é uma tradução livre da base de dados mtcars.
O banco de dados POKEMON.RData tem diversas informações sobre cada Pokemon.
Tanto a base de dados CARROS.RData quanto a base de dados POKEMON.RData podem ser encontradas aqui . Para fazer o download, você precisa clicar no Botão verde chamado “Clone or Download”. Depois disso, você precisa clicar na aba “Download ZIP”. Após essa etapa, o Download das bases de dados (no formato ZIP, isto é compactado) deve iniciar. Você deve extrair todos os arquivos antes de importar para o R.
Após essa etapa, precisamos carregar as duas bases de dados. O comando para isso tem quer ser algo parecido com esse. Para o código aparecer, clique em code.
# CARROS
load("C:/Users/SEU_NOME/SEU_ENDERECO/Base_de_dados-master/CARROS.RData")
# Pokemon
load("C:/Users/SEU_NOME/SEU_ENDERECO/Base_de_dados-master/df_pokemon.RData")
A base de dados CARROS tem um dicionário de dados junto com os dados. Para entender o que representa cada variável você escrever:
## [1] "Km por litro"
## [2] "Número de Cilindros"
## [3] "Preço"
## [4] "HP = Horse Power (potência do motor)"
## [5] "Amperagem_circ_eletrico = Amperagem média (o principal indicador da bateria)"
## [6] "Peso (em toneladas) do Carro"
## [7] "RPM = Rotações Por Minuto"
## [8] "Tipo de combustível (0 = Gasolina, 1 = Álcool)"
## [9] "Tipo de Câmbio (0 = Automático, 1 = Manual)"
## [10] "Número de Marchas"
## [11] "Número de Válvulas"
Lembrete: A base de dados CARROS precisa tratar as variáveis
TipodeMarcha e Tipodecombustivel. Essas variáveis têm o mesmo
problema (qualitativa tratada como quantitativa) que precisa ser corrigido
(corrigimos isso na aula passada).
Para Fazer a média do HP (Horse Power) por Tipo de combustível. Precisamos fazer o seguinte comando:
## # A tibble: 2 x 2
## Tipodecombustivel media_HP
## <fct> <dbl>
## 1 Gasolina 190.
## 2 Álcool 91.4
Para fazer a média do HP e do Km/l simultaneamente por Tipo de combustível. Precisamos fazer o seguinte comando:
CARROS %>%
group_by(Tipodecombustivel) %>%
summarize(media_HP = mean(HP),
media_Kmporlitro = mean(Kmporlitro))
## # A tibble: 2 x 3
## Tipodecombustivel media_HP media_Kmporlitro
## <fct> <dbl> <dbl>
## 1 Gasolina 190. 16.6
## 2 Álcool 91.4 24.6
Para o banco de dados Pokemon podemos fazer algo parecido.
Identificando as variáveis:
## [1] "id" "pokemon" "species_id"
## [4] "height" "weight" "base_experience"
## [7] "type_1" "type_2" "attack"
## [10] "defense" "hp" "special_attack"
## [13] "special_defense" "speed" "color_1"
## [16] "color_2" "color_f" "egg_group_1"
## [19] "egg_group_2" "url_image" "x"
## [22] "y"
## [1] "character"
Utilizando o dplyr para o cruzamento de variáveis:
## # A tibble: 18 x 3
## type_1 media_attack media_defesa
## <chr> <dbl> <dbl>
## 1 bug 65.2 67.7
## 2 dark 86.2 67.9
## 3 dragon 103. 79.1
## 4 electric 67.8 59.1
## 5 fairy 61.5 65.7
## 6 fighting 94.7 64.3
## 7 fire 81.6 63.7
## 8 flying 71.7 61.7
## 9 ghost 66.7 76.8
## 10 grass 70.9 69.4
## 11 ground 91.3 82.2
## 12 ice 70.7 71.0
## 13 normal 71.7 57.8
## 14 poison 74.7 68.8
## 15 psychic 60.2 65.2
## 16 rock 88.2 98.5
## 17 steel 83.5 119.
## 18 water 71.0 70.5
No R, observe que você precisa estar consciente da ordem de operações.
Se você quiser trocar a média pela mediana, é só trocar o comando mean por median. O código é apresentado abaixo.
df %>%
group_by(type_1) %>%
summarize(mediana_attack = median(attack),
mediana_defesa = median(defense))
## # A tibble: 18 x 3
## type_1 mediana_attack mediana_defesa
## <chr> <dbl> <dbl>
## 1 bug 63 55
## 2 dark 86.5 67.5
## 3 dragon 97.5 85
## 4 electric 61.5 58.5
## 5 fairy 52 66
## 6 fighting 100 62
## 7 fire 82.5 59
## 8 flying 70 70
## 9 ghost 65 65
## 10 grass 68 65
## 11 ground 83.5 82
## 12 ice 65 70
## 13 normal 70 60
## 14 poison 74 67
## 15 psychic 52.5 62.5
## 16 rock 86.5 98.5
## 17 steel 82.5 116.
## 18 water 70 68
df %>%
group_by(type_1) %>%
summarize(
minimo_attack = min(attack),
media_attack = median(attack),
desvio_padrao = sd(attack),
mediana_attack = median(attack),
IQR_attack = IQR(attack),
maximo_attack = max(attack))
## # A tibble: 18 x 7
## type_1 minimo_attack media_attack desvio_padrao mediana_attack
## <chr> <int> <dbl> <dbl> <dbl>
## 1 bug 10 63 30.7 63
## 2 dark 50 86.5 24.3 86.5
## 3 dragon 50 97.5 29.6 97.5
## 4 elect~ 30 61.5 25.2 61.5
## 5 fairy 20 52 29.8 52
## 6 fight~ 35 100 27.7 100
## 7 fire 40 82.5 25.3 82.5
## 8 flying 30 70 42.5 70
## 9 ghost 30 65 25.3 65
## 10 grass 27 68 24.1 68
## 11 ground 40 83.5 28.6 83.5
## 12 ice 30 65 25.9 65
## 13 normal 5 70 29.3 70
## 14 poison 43 74 19.6 74
## 15 psych~ 20 52.5 30.8 52.5
## 16 rock 40 86.5 32.6 86.5
## 17 steel 24 82.5 24.6 82.5
## 18 water 10 70 25.0 70
## # ... with 2 more variables: IQR_attack <dbl>, maximo_attack <int>
Para terminar vamos formatar esse output do R com o pacote Pander
tabela <- CARROS %>%
group_by(Tipodecombustivel) %>%
summarize(media_HP = mean(HP),
desvio_padrao_HP = sd(HP))
library(pander)
pander( tabela, style='rmarkdown' )
Tipodecombustivel | media_HP | desvio_padrao_HP |
---|---|---|
Gasolina | 189.7 | 60.28 |
Álcool | 91.36 | 24.42 |
Esse desvio-padrão é alto? O que isso indica?
No nosso proximo encontro, vamos construir um gráfico do ggplot2 para o relacionamento de uma variável quantitativa com uma qualitativa. O resultado deve ser algo desse tipo:
Lembrete: package ‘ggplot2’ was built under R version 3.5.3
Lembrete: package ‘ggthemes’ was built under R version 3.5.3
ggplot(data = df) +
aes(x = type_1, y = attack, color = type_1, size = attack) +
geom_boxplot(fill = "#0c4c8a") +
scale_colour_viridis_d(option = "magma") +
labs(title = "Boxplot",
x = "Tipo",
y = "Força do ataque",
caption = "Introdução ao tidyverse",
subtitle = "ataque (quantitativa) por tipo (qualitativa)") +
theme_solarized() +
theme(legend.position = 'left')
Não esqueça de ver as outras aulas sobre o tidyverse.
Para aqueles que não gostam da liberdade dos códigos do tidyverse, podemos utilizar o pacote psych para gerar essa mesma tabela.
Attaching package: ‘psych’
The following objects are masked from ‘package:ggplot2’:
%+%, alpha
## item group1 vars n mean sd median trimmed mad min
## X11 1 Gasolina 1 18 16.61667 3.860699 15.65 16.41875 2.96520 10.4
## X12 2 Álcool 1 14 24.55714 5.378978 22.80 24.34167 6.00453 17.8
## max range skew kurtosis se
## X11 26.0 15.6 0.4848484 -0.04617697 0.9099756
## X12 33.9 16.1 0.4055612 -1.40081941 1.4375924
## item group1 vars n mean sd median trimmed mad
## X11 1 bug 1 63 65.22222 30.74161 63.0 63.56863 40.0302
## X12 2 dark 1 28 86.25000 24.33657 86.5 85.41667 29.6520
## X13 3 dragon 1 24 102.62500 29.64253 97.5 102.45000 33.3585
## X14 4 electric 1 36 67.77778 25.15223 61.5 65.96667 24.4629
## X15 5 fairy 1 17 61.52941 29.75130 52.0 59.66667 20.7564
## X16 6 fighting 1 25 94.72000 27.66394 100.0 96.33333 29.6520
## X17 7 fire 1 46 81.60870 25.29776 82.5 80.39474 26.6868
## X18 8 flying 1 3 71.66667 42.52450 70.0 71.66667 59.3040
## X19 9 ghost 1 23 66.65217 25.28674 65.0 65.68421 22.2390
## X110 10 grass 1 66 70.90909 24.07790 68.0 70.59259 26.6868
## X111 11 ground 1 30 91.30000 28.62498 83.5 90.37500 24.4629
## X112 12 ice 1 23 70.69565 25.93600 65.0 68.89474 22.2390
## X113 13 normal 1 93 71.73118 29.30096 70.0 71.09333 22.2390
## X114 14 poison 1 28 74.67857 19.63001 74.0 74.66667 23.7216
## X115 15 psychic 1 46 60.21739 30.76933 52.5 57.02632 28.9107
## X116 16 rock 1 40 88.17500 32.57566 86.5 87.03125 41.5128
## X117 17 steel 1 22 83.54545 24.60687 82.5 83.83333 14.8260
## X118 18 water 1 105 71.04762 25.03013 70.0 71.04706 28.1694
## min max range skew kurtosis se
## X11 10 135 125 0.380391425 -0.69101323 3.873079
## X12 50 131 81 0.349103174 -0.98674236 4.599179
## X13 50 150 100 0.124787666 -1.31677034 6.050755
## X14 30 123 93 0.639132740 -0.55008198 4.192039
## X15 20 131 111 0.876376993 0.05694996 7.215750
## X16 35 140 105 -0.437212902 -0.66307777 5.532787
## X17 40 140 100 0.352915815 -0.68952001 3.729952
## X18 30 115 85 0.039132886 -2.33333333 24.551533
## X19 30 115 85 0.313555232 -1.07626147 5.272649
## X110 27 130 103 0.153448080 -0.80857924 2.963785
## X111 40 150 110 0.329780390 -0.96243009 5.226183
## X112 30 130 100 0.641537362 -0.56682385 5.408029
## X113 5 160 155 0.361076486 0.71920527 3.038368
## X114 43 106 63 -0.004738210 -1.38415752 3.709723
## X115 20 150 130 0.934935632 0.24749723 4.536690
## X116 40 165 125 0.225478277 -0.94425325 5.150664
## X117 24 135 111 -0.207417321 0.11402662 5.246201
## X118 10 130 120 0.005117858 -0.33882206 2.442690