-
Notifications
You must be signed in to change notification settings - Fork 0
/
07_Odds_Sods.Rmd
135 lines (85 loc) · 8.08 KB
/
07_Odds_Sods.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
---
output:
pdf_document: default
html_document: default
---
```{r global_options, include = FALSE}
knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE)
options(scipen = 10)
```
# *Odds & Sods* 1
> Esta expressão da Inglaterra quer dizer *miudezas*. Quero entregar esta matéria para você mais rápido possível. Mas, sempre lembre no dia seguinte de algo mais que quis comunicar. Assim, vou pôr esses pensamentos em pequenos capítulos com este nome. Eles conterá idéias que não consegui colocar no texto principal quando estava escrevendo-lo. Na próxima versão do livro (sim, estes capítulos tornará um livro e-book), vou incorporar estes *Odds & Sods* e, com certeza, pensarei em outros.
## Resumo Rápido de `dplyr`
Já falei várias vezes das funções do pacote `dpylr` e vou falar muito mais dele porque é um dos pacotes mais importantes do *tidyverse*. Têm alguns conceitos que ainda não tratei que acho importante.
### Funções como Verbos
Em `dplyr`, é sempre conveniente de pensar que as funções têm a mesma função que os verbos em frases em português. São palavras de ação. Eles contam para você o que o programa vai fazer. Já vimos `filter()`, `select()`. Eles fazem exatamente o que a palavra diz: filtrar linhas e selecionar colunas para inclusão ou exclusão num dataframe ou tibble. Todos as funções em `dplyr` têm esta caraterística: elas escrevem ações. Esse foi intencional na parte de Hadley Wickham e sua equipe. Eles estão tentando estabelecer uma **gramática** de manipulação dos dados, ou seja, uma maneira ou estrutura formal para preparar dados para análise. Ele tinha usado este conceito no primeiro grande pacote do *tidyverse* `ggplot`, que cujas letras iniciais querem dizer *a grammar of graphics*.
Combinando os verbos com o *pipe* (`>%>`) permite que podemos pensar nos comandos complexos do *tidyverse* como frases com a estrutura:
"Começa com esses dados. Depois fazer isto. Depois disso, fazer isto, etc., etc." Em comparação a base R, facilita muito o entendimento do que está sendo programado. E, em comparação com Python, C++ ou Java, é bem mais compreensível.
### Agrupamento dos Dataframes/Tibbles
Uma outra capacidade super importante do `dplyr` é a habilidade de agrupar bases de dados em subgrupos utilizando a função (verbo) `group_by()`. Na secção 6.5.1, usei `group_by()` para organizar os dados por país e ano antes de calcular a soma de casos. O código usei lá foi o seguinte:
```{r bric_cod, eval = FALSE, echo = TRUE}
brics <- c("Brazil", "Russian Federation", "India", "China", "South Africa")
who_mod2 <- who_mod1 %>%
group_by(country, year) %>%
summarize(casos = sum(casos))
```
Este habilidade de organizar os dados para contar (neste caso) ou fazer outra operação nos dados agrupados em subgrupos é altamente poderoso e uma que você vai usar frequentemente.
### Resumo dos Comandos (Verbos) de *Tidyverse* que Já Aprendemos
**VSS** Não esqueça de consultar os *cheatsheets* de R Studio para ver os detalhes dessas funções num format bem simples a entender.
* Importação dos Dados (esp. de Excel)
1. `readr::read_csv()` -- produz um tibble
2. `base::readRDS()` -- ler um arquivo R no formato binário
3. `readxl::read_excel()` -- importar da planilha a tibble
* Limpeza/Manipulação dos Dados
1. `dplyr::slice()` -- ficar com as linhas especificadas
2. `dplyr::filter()` -- usar um teste lógico para determinar as linhas a incluir
3. `dplyr::select()` -- selecionar colunas
4. `dplyr::mutate()` -- criar uma nova variável ou mudar os valores das existentes
5. `dplyr::group_by()` -- agrupar as observações segundo os valores das variáveis categóricas
6. `dplyr::ungroup()` -- reverter a operação de `group_by()`
7. `dplyr::arrange()` -- pôr as observações em ordem segundo os valores de uma ou mais variáveis
8. `dplyr::left_join()` -- juntar variáveis de uma dataframe para um outro já especificada segundo um critério
9. `dplyr::summarise()` -- criar uma nova base com valores resumidos das variáveis no original
10: `tibble::tibble()` -- criar um tibble
11: `tibble::glimpse()` -- produzir um relatório com informação sobre os tipos e valores das variáveis
12: `tibble::add_row()` -- acrescentar uma nova fila para um tibble
13: `tidyr::gather()` -- mudar o formato de um dataframe de largo (como planilha) até *tidy* utilizando pares de chaves:valores
14. `purrr::map_dbl()` -- aplicar uma função a um numéro das variáveis em um dataframe/tibble; existem vários tipos das funções `map`
* Visualizar Dados em Forma Gráfica
1. `ggpubr::ggbarplot()` -- fazer um gráfico de barras utlizando o sistema `ggplot`
2. `ggpubr::ggboxplot()` -- fazer uma plotagem de caixas e suas extensões
3. `ggplubr::ggline()` -- fazer um gráfico com linhas e pontos
* Tabelas
1. `knitr::kable()` -- criar uma tabela ou lista de um dataframe/tibble formatada
* Outras Funções fora do *Tidyverse*
1. `base::set_seed()` -- estabelecer um ponto incial para o gerador dos numéros aleatórios
2. `stats::runif()` -- selecionar uma série de numéros aleatórios da distribuição uniforme
3. `stats::rnorm()` -- selecionar uma série de numéros aleatórios da distribuição normal (gaussiana)
4. `triangle::rtriangle()` -- selecionar uma série de numéros aleatórios da distribuição triangular
5. `scales::percent()` -- apresentar os numéros no formato porcentual
## Gapminder
Pensando dos dados no pacote de Gapminder, acho que seria melhor de ir diretamente ao site da Fundação Gapminder e download diretamente os dados que queremos usar nas aulas e nos projetos que vocês vão elaborar. Importante então é compartilhar onde pode achar os dados que eles têm disponíveis: https://gapminder.org/data/. Existem lá muitas bases de dados, todas em Excel e todas bem curadas.
## Os Dez Mandamentos para as Bases de Dados Bem Formatados
Esta semana, li um blog post do site françês, *ThinkR*, na tradução inglês, com este título e achei ótimo. [^1] Então vou reproduzir aqui as idéias básicas dos 10 pontos. Todos esses pontos refletem a filosofia do *tidyverse*. Muitas dessas regras especialmente aplicam a fase de organizar dados nas planilhas antes de importação em R.
[^1]: Colin Fay, Marion Louvoux (tr.), https://rtask.thinkr.fr/blog/the-ten-commandments-for-a-well-formatted-database/
1. Todos seus dados caberá em um dataframe/tibble **único**
* Não coloque os dados em dataframes múltiplos. Este é um habito que se associe com *relational database management* não R e não *tidyverse*.
2. Você respeitará um estilo de formatação certo
* A tabela deve ser preenchido sem brechas começando na célula para cima a esquerda e descendo sem deixar linhas em branca.
3. Uma linha $=$ uma observação
4. Uma coluna $=$ uma variável
5. Você não codificará variáveis qualitativas
* Se você tem variáveis para gênero, use `homem/mulher`, não `1/2`.
5a. Você não codificará variáveis com cores -- **JAMAIS**
* O R não pode entender cores mesmo que este é um artifício preferido dos Excelistas
6. A base de dados deve conter somente dados
* Formatação artística cria dificuldades na importação dos dados de Excel para R. Siga o princípio KISS.[^2]
[^2]: KISS: Keep It Simple, Stupid!
7. Consistente, você sempre estará
* Não misture nomes diferentes para a mesma coisa: sempre `homem`, não uma vez `homem`, uma vez `rapaz` ou `masculino`.
8. Você sempre respeitará a qualidade numérica das variáveis numéricas
* Exemplo: idade sempre estará um número ('25'), não texto e número ('25anos') e datas sempre na forma aceita internacionalmente YYYY-MM-DD.
9. Proteja o anonimato de seus pacientes/respondentes/clientes
* Use números ou outros identificadores para as pessoas e guardar a correspondência num lugar seguro.
10. Utilize nomes de variáveis compreensíveis pelos seres humanos
* Algum dia no futuro, você ou um outro vai querer entender o que quer dizer o nome de variável `G6`, e você não vai lembrar que refere a "glicemia em mês 6".