-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathcomputacao-cientifica.Rmd
403 lines (299 loc) · 12 KB
/
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
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
---
title: "Computação científica e interação com R"
output:
html_document:
code_folding: show
---
```{r setup, include=FALSE}
source("setup_knitr.R")
```
# Interagindo com o computador
O que significa este ícone?
<img src="img/excelcsvgrey.png" width="400px" />
- É 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
# Escrevendo código
Aprender a interagir com o computador através de uma linguagem de
programação, coloca o usuário na sua posição original de poder!
<img src="img/power.gif" width="400px" />
Uma linguagem de programação nos permite interagir não só com outros
*softwares*, mas também com o nosso *hardware*
<img src="img/script-hardware.png" width="800px" />
<!-- # Software livre -->
<!-- ## Software Livre -->
<!-- ### O que é software livre? -->
<!-- - Software que pode ser utilizado, estudado e modificado sem -->
<!-- restrições -->
<!-- - Pode ser copiado e redistribuido (modificado ou não) -->
<!-- - A redistribuição tem uma única restrição: assegurar que os -->
<!-- receptores tenham a mesma liberdade -->
<!-- - Para isso é necessário que os desenvolvedores (ou modificadores) -->
<!-- disponibilizem o **código fonte**! -->
<!-- - Não confundir software **livre** com software **grátis** -->
<!-- - Livre como em “liberdade de expressão”, não grátis como “cerveja -->
<!-- grátis” -->
<!-- ## Software Livre -->
<!-- ### Um software só é considerado livre quando é possível ter as 4 liberdades -->
<!-- 0. Liberdade para usar o programa para qualquer propósito -->
<!-- 1. Liberdade para estudar como o programa funciona, e modificá-lo para -->
<!-- sua necessidade -->
<!-- 2. Liberdade para redistribuir cópias (e ajudar o seu vizinho) -->
<!-- 3. Liberdade para aprimorar o programa, e redistribuí-lo para que todos -->
<!-- se beneficiem -->
<!-- ## Software Livre -->
<!-- - Os principais motivos para user software livre: -->
<!-- - Garantir que sabemos (ou temos como saber) o que o software está -->
<!-- fazendo -->
<!-- - Garantir que sabemos aonde estão nossos dados, e o que o software -->
<!-- faz com eles -->
<!-- - A importância disso aparece cada vez mais na academia, indústria e -->
<!-- governo: -->
<!-- - [http://www.softwarelivre.gov.br](http://www.softwarelivre.gov.br) -->
<!-- - [http://www.softwarepublico.gov.br](http://www.softwarepublico.gov.br) -->
<!-- - [https://www.serpro.gov.br](https://www.serpro.gov.br) -->
# Data Science? Estatística?
- [The data science Venn diagram][DSVD]
![Diagrama de Venn para Ciência de Dados](img/Data_Science_VD.png)
- Conhecimento de matemática e estatística: é o que você está fazendo
aqui
- Habilidade hacker:
- Saber programar (aqui vamos saber usar o R)
- Saber responder perguntas sozinho.
- Saber buscar respostas
- Experiência substancial: depende da área dos dados, da interação com o
pesquisador, ou de buscar o conhecimento
# 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 o 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
## O que é o R
Um dialeto do S.
> *"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
- *Ambiente* estatístico para análise de dados e produção de gráficos
- Uma completa linguagem de programação:
- Interpretada (contrário de compilada)
- Orientada a objetos:
*Tudo no R é um objeto...*
- Livre distribuição (código-aberto)
- Mais de 6000 pacotes adicionais
## 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: 20 desenvolvedores principais e muitos outros colaboradores em
todo o mundo
- Estatísticos, matemáticos e programadores
<!-- ## Vantagens -->
<!-- - A linguagem mais comum em *data science*, e certamente a mais -->
<!-- utilizada em estatística hoje em dia -->
<!-- - Permite ir rapidamente de dados brutos para gráficos para relatórios -->
<!-- dinâmicos para aplicativos web -->
<!-- - Software livre -->
<!-- - Funciona em praticamente todos os sistemas operacionais: Unix (Linux, -->
<!-- FreeBSD, \ldots), Macintosh e Windows -->
<!-- - É o produto da cooperação entre estatísticos do mundo todo -->
<!-- - Linguagem lógica e intuitiva -->
<!-- - Flexibilidade nas análises estatísticas -->
<!-- - Gráficos de alta qualidade -->
<!-- - [R no New York Times][RNYT] -->
<!-- ## Desvantagens -->
<!-- - Sem interface gráfica (?) -->
<!-- - Não há visualização direta dos dados -->
<!-- - Curva de aprendizado longa -->
<!-- - Pode ser lento com grandes (GB, TB, ...) bases de dados -->
<!-- - Necessidade de **vetorização** -->
## Configuração inicial
### Configurando o diretório de trabalho
- 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
```
![](img/script-commandline.png)
![](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
`^` | potência
`exp()` | exponencial
`sqrt()` | raíz quadrada
`factorial()` | fatorial
`log()`; `log2()`; `log10()` | logaritmos
## Ordens de execução
As operações são realizadas sempre seguindo as prioridades:
1. De dentro para fora de parênteses `()`
2. Multiplicação e divisão
3. 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))
```
## 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.
<img src="img/script-assign.png" width="400px" />
Para saber quais objetos estão 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 or criado durante uma sessão do R,
armazenado na memória RAM
Para efetivamente salvar esas variáveis, podemos armazenar esse *workspace*
do R em disco, em um arquivo chamdo `.Rdata`
![](img/script-workspace.png)
![](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 depois
## 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 -->
# 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