15 de setembro de 2016
É o processo de inspecionar, limpar, transformar e modelar dados com o objetivo de descobrir informação útil, sugerindo conclusões e dando suporte à tomada de decisão
O que fazer com dados…
filter, arrange, select, mutate, summarise, group_by, inner_joinSeleciona linhas de acordo com critério. Original:
| classe | versao | tamanho |
|---|---|---|
| Tela.java | 1 | 235 |
| Tela.java | 3 | 311 |
| Tela.java | 2 | 288 |
| Config.java | 3 | 12 |
| Config.java | 2 | 23 |
| Config.java | 1 | 30 |
filter(versao == 1)
| classe | versao | tamanho |
|---|---|---|
| Tela.java | 1 | 235 |
| Tela.java | 3 | 311 |
| Tela.java | 2 | 288 |
| Config.java | 3 | 12 |
| Config.java | 2 | 23 |
| Config.java | 1 | 30 |
filter(versao == 1)
| classe | versao | tamanho |
|---|---|---|
| Tela.java | 1 | 235 |
| Config.java | 1 | 30 |
Ordena de acordo o valor de uma ou mais colunas. Original:
| classe | versao | tamanho |
|---|---|---|
| Tela.java | 1 | 235 |
| Tela.java | 3 | 311 |
| Tela.java | 2 | 288 |
| Config.java | 3 | 12 |
| Config.java | 2 | 23 |
| Config.java | 1 | 30 |
arrange(classe, versao) - ordena por classe e versao
| classe | versao | tamanho |
|---|---|---|
| Config.java | 1 | 30 |
| Config.java | 2 | 23 |
| Config.java | 3 | 12 |
| Tela.java | 1 | 235 |
| Tela.java | 2 | 288 |
| Tela.java | 3 | 311 |
arrange(desc(tamanho)) - ordem decrescente de tamanho
| classe | versao | tamanho |
|---|---|---|
| Tela.java | 3 | 311 |
| Tela.java | 2 | 288 |
| Tela.java | 1 | 235 |
| Config.java | 1 | 30 |
| Config.java | 2 | 23 |
| Config.java | 3 | 12 |
Seleciona colunas. Original:
| classe | versao | tamanho |
|---|---|---|
| Tela.java | 1 | 235 |
| Tela.java | 3 | 311 |
| Tela.java | 2 | 288 |
| Config.java | 3 | 12 |
| Config.java | 2 | 23 |
| Config.java | 1 | 30 |
select(classe, tamanho)
| classe | tamanho |
|---|---|
| Tela.java | 235 |
| Tela.java | 311 |
| Tela.java | 288 |
| Config.java | 12 |
| Config.java | 23 |
| Config.java | 30 |
Cria colunas computadas. Original:
| classe | versao | tamanho |
|---|---|---|
| Tela.java | 1 | 235 |
| Tela.java | 3 | 311 |
| Tela.java | 2 | 288 |
| Config.java | 3 | 12 |
| Config.java | 2 | 23 |
| Config.java | 1 | 30 |
mutate(x = tamanho / versao)
| classe | versao | tamanho | x |
|---|---|---|---|
| Tela.java | 1 | 235 | 235.0 |
| Tela.java | 3 | 311 | 103.7 |
| Tela.java | 2 | 288 | 144.0 |
| Config.java | 3 | 12 | 4.0 |
| Config.java | 2 | 23 | 11.5 |
| Config.java | 1 | 30 | 30.0 |
Combina todos os valores de uma coluna em um único valor (ex.: máximo, mínimo, soma, média…). Original:
| classe | versao | tamanho |
|---|---|---|
| Tela.java | 1 | 235 |
| Tela.java | 3 | 311 |
| Tela.java | 2 | 288 |
| Config.java | 3 | 12 |
| Config.java | 2 | 23 |
| Config.java | 1 | 30 |
summarise(x = max(tamanho), y = min(tamanho))
| x | y |
|---|---|
| 311 | 12 |
Agrupa os dados de acordo com o valor de uma coluna.
| classe | versao | tamanho |
|---|---|---|
| Tela.java | 1 | 235 |
| Tela.java | 3 | 311 |
| Tela.java | 2 | 288 |
| Config.java | 3 | 12 |
| Config.java | 2 | 23 |
| Config.java | 1 | 30 |
group_by(versao)
| classe | versao | tamanho |
|---|---|---|
| Tela.java | 1 | 235 |
| Tela.java | 3 | 311 |
| Tela.java | 2 | 288 |
| Config.java | 3 | 12 |
| Config.java | 2 | 23 |
| Config.java | 1 | 30 |
group_by(versao)
| classe | versao | tamanho |
|---|---|---|
| Tela.java | 1 | 235 |
| Config.java | 1 | 30 |
| Tela.java | 2 | 288 |
| Config.java | 2 | 23 |
| Tela.java | 3 | 311 |
| Config.java | 3 | 12 |
group_by(versao) %>% summarise(total = sum(tamanho))
| versao | total |
|---|---|
| 1 | 265 |
| 2 | 311 |
| 3 | 323 |
…
Vamos considerar uma tabela com o tamanho (linhas de código, TLOC) dos arquivos do código-fonte do programa Eclipse, versão 3.0. Para fins didáticos, usaremos uma amostra aleatória de 9 linhas dessa tabela.
| file | TLOC |
|---|---|
| StateChangeListener.java | 5 |
| FieldCreationTime.java | 44 |
| ObjectVector.java | 83 |
| SWTUtil.java | 53 |
| IPluginImport.java | 10 |
| DebugCoreMessages.java | 16 |
| BundleActivator.java | 6 |
| BuildEditorContributor.java | 11 |
| Field.java | 10 |
R possui as funções mean (média) e sd (desvio-padrão). Para fins didáticos, mostramos como calcular esses valores usando a fórmula:
n <- length(TLOC) media <- sum(TLOC) / n desvioPadrao <- sqrt( sum((TLOC - media) ^ 2) / (n - 1) )
media
## [1] 26.44444
desvioPadrao # indica o quanto os dados estão "espalhados"
## [1] 27.33638
Identifique os valores mínimo e máximo de TLOC:
| file | TLOC |
|---|---|
| StateChangeListener.java | 5 |
| FieldCreationTime.java | 44 |
| ObjectVector.java | 83 |
| SWTUtil.java | 53 |
| IPluginImport.java | 10 |
| DebugCoreMessages.java | 16 |
| BundleActivator.java | 6 |
| BuildEditorContributor.java | 11 |
| Field.java | 10 |
Fica mais fácil com a tabela ordenada:
| file | TLOC |
|---|---|
| StateChangeListener.java | 5 |
| BundleActivator.java | 6 |
| IPluginImport.java | 10 |
| Field.java | 10 |
| BuildEditorContributor.java | 11 |
| DebugCoreMessages.java | 16 |
| FieldCreationTime.java | 44 |
| SWTUtil.java | 53 |
| ObjectVector.java | 83 |
| file | TLOC |
|---|---|
| StateChangeListener.java | 5 |
| BundleActivator.java | 6 |
| IPluginImport.java | 10 |
| Field.java | 10 |
| BuildEditorContributor.java | 11 |
| DebugCoreMessages.java | 16 |
| FieldCreationTime.java | 44 |
| SWTUtil.java | 53 |
| ObjectVector.java | 83 |
hist(x)
hist(eclipse3$PAR_avg)
plot(ecdf(eclipse3$FOUT_avg))
moments para calcular a assimetria (skewness):skewness(eclipse3$PAR_avg)
## [1] 2.253637
kurtosis(eclipse3$PAR_avg)
## [1] 13.93165
Às vezes os dados estão tão espalhados que é difícil visualizá-los.
Uma solução é adotar uma escala logarítmica para os eixos do gráfico:
x cresce, y cresce? (diminui?)x e y variam na mesma proporção?cor(x, y)
## [1] 0.8879799
## post TLOC VG_avg PAR_avg FOUT_avg ## post 1.00000000 0.4721315 0.2045547 0.04405611 0.1733836 ## TLOC 0.47213146 1.0000000 0.4180516 0.11092324 0.3790984 ## VG_avg 0.20455465 0.4180516 1.0000000 0.27765238 0.6883466 ## PAR_avg 0.04405611 0.1109232 0.2776524 1.00000000 0.2249910 ## FOUT_avg 0.17338363 0.3790984 0.6883466 0.22499105 1.0000000