-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path01-computacao-cientifica.Rmd
323 lines (244 loc) · 9.35 KB
/
01-computacao-cientifica.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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
# (PART) R básico {-}
# Computação científica e interação com o R
## Interagindo com o computador
O que significa este ícone?
```{r, out.width='50%', echo=FALSE}
knitr::include_graphics("img/excelcsvgrey.png")
```
- É um documento do Microsoft Excel?
- É um arquivo de **texto pleno**, separado por vírgulas (CSV *comma
separated values*);
- De fato, o nome do arquivo é `final.csv` e não `final`;
- O Excel pode sim abrir este arquivo... assim como milhares de outros
programas!
O que está acontecendo?
- O computador (leia-se, nesse caso, o sistema operacional Windows)
"proteje" o usuário dos "detalhes sujos".
- Isso é ruim? **Sim!**
- O usuário se acostuma com o computador ditando as regras.
- É importante lembrar que é você quem deve dizer o que o computador
deve fazer (nesse caso, com qual programa abrir certo arquivo).
O que deve acontecer?
- Para a maioria dos usuários, a interação com o computador se limita a
clicar em links, selecionar menus e caixas de diálogo.
- O problema com essa abordagem é que parece que o usuário é controlado
pelo computador.
- A verdade deve ser o oposto!
- É o usuário que possui o controle e deve dizer para o computador
exatamente o que fazer.
- Escrever código ainda tem a vantagem de deixar registrado tudo o que
foi feito, possibilitando a reprodução e auditoria.
## Editores de texto
Uma característica importante de códigos de programação é que eles são
em **texto puro**, por isso precisamos de um bom **editor de textos**.
Características de um bom editor:
- **Identação automática**;
- **Complementação de parênteses**;
- **Destaque de sintaxe** (*syntax highlighting*);
- **Numeração de linhas**;
- **Auto completar comandos**.
### Editores para R
Windows:
- Interface padrão: pouco recomendado.
- Tinn-R.
Linux:
- Vim-R-plugin.
- Gedit-R-plugin.
Todas as plataformas:
- Rstudio: recomendado para iniciantes.
- Emacs + ESS: altamente recomendado.
## R
> *"The statistical software should help, by supporting each step from
> user to programmer, with as few intrusive barriers as possible."*
> *"... to turn ideas into software, quickly and faithfully."*
--- John M. Chambers
O R é um *dialeto* da linguagem de programação S que inclui:
- *Ambiente* estatístico para análise de dados e produção de gráficos.
- Uma linguagem de programação completa:
- Interpretada (contrário de compilada).
- Orientada a objetos.
*Tudo no R é um objeto...*
- Livre distribuição (código-aberto).
- 18732 (em 2022-10-14) pacotes adicionais "oficiais"
(disponíveis no repositório [CRAN](https://cran-r.c3sl.ufpr.br/web/packages/index.html)).
Pequeno histórico:
- 1980: Linguagem S: desenvolvida por R. Becker, J. Chambers e A. Wilks
(AT&T Bell Laboratories);
- 1980: Versão comercial: S-Plus (Insightful Corporation);
- 1996: Versão livre: R desenvolvido por R. Ihaka e R. Gentleman
(Universidade de Auckland);
- 1997: R Development Core Team;
- Hoje: desenvolvedores principais (*core team*) e muitos outros colaboradores em
todo o mundo;
- Estatísticos, matemáticos, programadores e profissionais de formação e atuação em outras áreas.
### Configuração inicial
- O **diretório de trabalho** é uma pasta onde o R será
direcionado. Todos os arquivos que serão importados (base de dados,
...) ou exportados (base de dados, gráficos, ...) por ele
ficarão nesta pasta.
- Existem duas maneiras de configurar o
diretório de trabalho (suponha que vamos usar a pasta
`~/estatcomp1`):
- `1)` Utilizando a função `setwd()` dentro do R:
```{r, eval=FALSE}
setwd("~/estatcomp1")
```
- `2)` Pelo menu do RStudio em `Session > Set Working Directory > Choose Directory...`
Confira o diretório que está trabalhando com a função
```{r, eval=FALSE}
getwd()
```
### O R como uma calculadora
O símbolo `>` indica que o R está pronto para receber um comando:
```{r, prompt=TRUE, comment=NA}
2 + 2
```
O símbolo `>` muda para `+` se o comando estiver incompleto:
```{r, prompt=TRUE, tidy=FALSE, comment=NA}
2 *
2
```
Espaços entre os números não fazem diferença:
```{r, prompt=TRUE, comment=NA}
2+ 2
```
### Para onde vão os resultados?
```{r, prompt=TRUE, comment=NA}
1 + 3 + 5 + 7
```
```{r, echo=FALSE, out.width='50%'}
knitr::include_graphics("img/script-commandline.png")
```
```{r, echo=FALSE, out.width='50%'}
knitr::include_graphics("img/script-commandlinedata.png")
```
- Note que o resultado é apenas mostrado na tela, nada é salvo na
memória (por enquanto).
### O editor de scripts
- Para criar rotinas computacionais é necessário utilizar um editor
de scripts.
- Clique em `File > New file > R script`. Salve com a extensão
`.R`.
- Para enviar comandos diretamente para o console, selecione-os e
aperte `Ctrl + <Enter>`.
- Para adicionar comentários ao script, utiliza-se o símbolo
`#` antes do texto e/ou comandos. O que estiver depois do
símbolo não será interpretado pelo R. Portanto:
```{r, eval=FALSE}
2 + 2 # esta linha será executada
# 2 + 2 esta linha não será executada
```
### Operadores aritméticos
Operador | Significado
-------- | -----------
`+` | adição
`-` | subtração
`*` | multiplicação
`/` | divisão
`^` ou `**` | potência
`sqrt()` | raíz quadrada
`exp()` | exponencial
`log()`; `log2()`; `log10()` | logaritmos
`factorial()` | fatorial
### Ordens de execução
As operações são realizadas sempre seguindo as prioridades:
1. De dentro para fora de parênteses `()`.
2. Potência e radiciação.
3. Multiplicação e divisão.
4. Adição e subtração.
```{r, prompt=TRUE, comment=NA}
5 * 2 - 10 + 7
5 * 2 - (10 + 7)
5 * (2 - 10 + 7)
5 * (2 - (10 + 7))
2*3^2
2*3**2
3*sqrt(9**2)
exp(1)
log2(16)
```
### Exercícios {-}
1. Calcule a seguinte equação: $32 + 16^2 - 25^3$
2. Divida o resultado por $345$
3. Qual o resultado da expressão $\frac{e^{-2} 2^{4} - 1}{4!}$?
4. E do logaritmo desta expressão?
### "Salvando" resultados
Do exercício anterior
```{r, prompt=TRUE, comment=NA}
x <- 32 + 16^2 - 25^3
x
x/345
(y <- (exp(-2) * 2^4 - 1)/factorial(4))
log(y)
```
Quando criamos uma variável (`x`, `y`), ela fica armazenada
**temporariamente** na memória RAM.
```{r, echo=FALSE, out.width='50%'}
knitr::include_graphics("img/script-assign.png")
```
Para saber quais objetos foram criados, usamos a **função** `ls()`
```{r, prompt=TRUE, comment=NA}
ls()
```
Estas variáveis ficam armazenadas no chamado *workspace* do R.
- O *workspace* consiste de tudo que foi criado durante uma sessão do R,
e fica armazenado na memória RAM.
Para efetivamente salvar essas variáveis, podemos armazenar esse *workspace*
do R em disco, em um arquivo chamado `.Rdata`
```{r, echo=FALSE, out.width='50%'}
knitr::include_graphics("img/script-workspace.png")
```
```{r, echo=FALSE, out.width='50%'}
knitr::include_graphics("img/script-workspacedata.png")
```
- Quando o R é iniciado em um diretório com um arquivo `.Rdata`, as
variáveis salvas são automaticamente carregadas.
- No entanto, é sempre melhor salvar os dados e o **script**, assim é
possível gerar os resultados novamente, sem salvar nada sem
necessidade.
- Veremos mais pra frente como salvar variáveis específicas, por
exemplo, resultados de uma análise que leva muito tempo para ser
executada.
- O mais importante é salvar o **código**, assim sabemos **como**
chegamos a determinado resultado, e podemos recriá-lo.
### Finalizando o programa
A qualquer momento durante uma sessão você pode usar o comando
```{r, prompt=TRUE, eval=FALSE}
save.image()
```
No RStudio:
- `File > Save As...`
- Na janela que abrir, digite o nome do arquivo (por exemplo
`script_aula1`) e salve.
- Automaticamente o script será salvo com a extensão `.R`
(nesse caso `script_aula1.R`) no diretório de trabalho que você
configurou no início.
Alternativamente, você pode também salvar toda sua área de trabalho,
clicando em `Workspace > Save As Default Workspace`. Este
processo irá gerar dois arquivos:
- `.Rdata`: contém todos os objetos criados durante uma
sessão. Não é necessário (e nem recomendado) dar um nome antes do
ponto. Dessa forma, a próxima vez que o programa for iniciado neste
diretório, a área de trabalho será carregada automaticamente.
- `.Rhistory`: um arquivo texto que contém todos os comandos
que foram digitados no console.
<!-- ## Layout de código -->
<!-- ## Formatos de arquivos -->
<!-- ### Texto pleno -->
<!-- ### CSV -->
### Encoding
Caracteres especiais (cedilha, acentos, dentre outros) podem gerar problemas de visualização
entre diferentes sistemas operacionais que utilizam diferentes codificações (*encodings*).
Não iremos tratar disto neste momento, mas se voce visualizar estes caracteres de maneira "estranha" é porque
irá precisar conciliar os "encodings".
## Referências {-}
* Leek, J. [The Elements of Data Analytic Style][datastyle]. Leanpub, 2015.
* Murrell,
P. [Introduction to data technologies](https://www.stat.auckland.ac.nz/~paul/ItDT/HTML). Boca
Raton: Chapman & Hall/CRC, 2009.
* Peng,
RD. [R programming for data science](https://leanpub.com/rprogramming). Leanpub, 2015.
[dados]: http://simplystatistics.org/2013/12/12/the-key-word-in-data-science-is-not-data-it-is-science/
[RNYT]: http://www.nytimes.com/2009/01/07/technology/business-computing/07program.html?pagewanted=all&_r=0
[DSVD]: http://drewconway.com/zia/2013/3/26/the-data-science-venn-diagram
[datastyle]: https://leanpub.com/datastyle