Você está na página 1de 22

Análise Preditiva

e Classificação
Aplicações em R

Responsável pelo Conteúdo:


Prof. Me. Orlando Junior

Revisão Textual:
Prof.ª Dr.ª Luciene Oliveira da Costa Granadeiro
Aplicações em R

• Introdução;
• Fluxo de Trabalho;
• Ambiente;
• Importar;
• Transformar;
• Visualizar e Modelar;
• Comunicar.


OBJETIVO

DE APRENDIZADO
• Criar produtos de dados aplicando modelagem preditiva em R.
UNIDADE Aplicações em R

Introdução
Nesta unidade, você será apresentado à prática da análise e classificação de da-
dos. Você construirá uma aplicação passando por todas as etapas da modelagem
preditiva. Ao final da unidade, você terá construído um produto de dados usando a
linguagem R e as ferramentas que ela ofecerá para isso.

Para que você possa trabalhar com todos os elementos da análise preditiva na lin-
guagem R, vamos escolher um problema e apresentá-lo de maneira didática. Perceba
que, tendo como base um projeto específico, tomaremos algumas decisões ao longo
do caminho que farão sentido apenas para o projeto no qual estivermos trabalhando
no momento.

Fluxo de Trabalho
Embora as aplicações de ciência de dados não dependam de uma ferramenta
específica ou linguagem de programação, é importante que você, como analista e
solucionador do problema analítico, conheça como a ferramenta funciona e decida,
como tomador de decisões técnico, o melhor caminho a ser traçado para a resolução
do problema.

Usando a linguagem R e o ambiente de programação RStudio, você conduzirá


projetos de ciência de dados usando o fluxo de trabalho apresentado na Figura 1, que
é a metodologia sugerida em (WICKHAM; GROLEMUND, 2019).

Visualizar

Importar Arrumar Transformar Comunicar

Modelar

Figura 1 – Fluxo de Trabalho para Modelagem Preditiva em R


Fonte: Adaptado de WICKHAM; GROLEMUND, 2019

Conforme a abordagem que seguiremos nas próximas seções e que você deverá
aplicar em projetos de ciência de dados que usem R, você deverá:
1. Importar os dados para o R: estejam eles armazenados em um arquivo,
um base de dados ou disponíveis na web;
2. Arrumar os dados carregados: organizando-os de forma consistente
e combinando a semântica da base de dados com a maneira em que
são organizados;
3. Transformar os dados: limitando os dados a observações de interesse,
criando novas variáveis e calculando estatísticas de resumo;
4. Visualizar e modelar os dados;
5. Comunicar os resultados a outras pessoas.

Você está preparado(a) para conhecer todas essas etapas em detalhes e na prática?

8
Ambiente
Para que você possa executar todo fluxo de trabalho sem dificuldades, vamos
preparar o seu ambiente de programação. Você vai precisar do R, do RStudio, da
coleção de pacotes tidyverse e de muitos outros pacotes que serão indicados durante
a realização do projeto.

• Para baixar o R, acesse o CRAN , o repositório de distribuição do R e seus pacotes,


disponível em: https://bit.ly/3mfvnF8
• Para baixar o RStudio, que será o nosso ambiente de desenvolvimento integrado (IDE) des-
tinado ao desenvolvimento das nossas soluções, escolhe a opção mais recente e instale em
seu computador. Disponível em: https://bit.ly/37uAWeP

Assim que você tiver instalado o R e o RStudio, rode uma dessas plataformas e
execute a seguinte linha de comando para instalar o tidyverse diretamente do CRAN:

install.packages(“tidyverse”)

Para verificar que a instalação do pacote deu certo, execute a linha abaixo:

library(tidyverse)

Você deverá observar os resultados do comando na Figura 2.

Figura 2 – Carregamento do tidyverse no RStudio

A partir das próximas seções, você vai usar o ambiente do RStudio para construir
aplicações de análise preditiva e classificação. Em cada seção, você verá um tipo de
aplicação de ciência de dados. Lembre-se de incluir os códigos no documento de
script do RStudio um abaixo do outro, conforme eles forem sendo apresentados
para você nesta unidade.

9
9
UNIDADE Aplicações em R

Importar
Em todo projeto de análise e modelagem preditiva, sobretudo em R, o primeiro
passo é o de importar a base de dados que será utilizada. Porém, antes disso, vale a
pena conhecermos um pouco mais sobre o problema que iremos trabalhar e sobre o
que os dados desse problema falam.

Para esta seção, você utilizará a base de dados mpg e tentaremos responder à
pergunta: “carros com motores maiores usam mais combustível que carros com
motores menores?”. Talvez você já tenha uma ideia da resposta, mas nesta unidade
provaremos com conhecimento analítico o que você imagina.

O conjunto de dados mpg contém dados de economia de combustível de modelos


de veículos populares entre 1999 e 2008. Esses dados estão disponíveis no pacote
ggplot2. Você pode observar uma amostra desses dados na Tabela 1, cuja apresen-
tação invertemos para que você possa acompanhar integralmente nesta página. Os
atributos do conjunto são apresentados na primeira coluna da tabela, enquanto as de-
mais colunas apresentam os valores de cada atributo para cada uma das 5 amostras.

Tabela 1 – Amostra de dados do conjunto mpg


manufacturer audi audi audi audi audi
model a4 a4 a4 a4 a4
displ 1.8 1.8 2 2 2.8
year 1999 1999 2008 2008 1999
cyl 4 4 4 4 6
trans auto(l5) manual(m5) manual(m6) auto(av) auto(l5)
drv f f f f f
cty 18 21 20 21 16
hwy 29 29 31 30 26
fl p p p p p

Essa amostra de dados pode ser obtida por meio da execução do seguinte co-
mando: head(mpg, 5)
Entre as variáveis que esse conjunto de dados apresenta, estão:
• displ (double): corresponde ao tamanho do motor, em litros;
• hwy (int): corresponde à eficiência do combustível de um carro na estrada, em
milhas por galão.

Um automóvel com baixa eficiência de combustível consome mais combustível


que um automóvel com alta eficiência quando ambos trafegam a mesma distância.
Na Figura 3, você pode observar no gráfico de dispersão uma relação negativa entre
o tamanho do motor (displ) e a sua eficiência de combustível (hwy).

10
Figura 3 – Relação entre o tamanho do motor e a eficiência de combustível.

Usando o ggplot, você pode construir esse gráfico executando este código:

ggplot(data = mpg) +

geom_point(mapping = aes(x = displ, y = hwy), color=”red”)

Observe no gráfico que, à medida que os valores de displ aumentam, os valores


em hwy caem. Portanto, carros com motores maiores usam mais combustível que
carros com motores menores.

Arrumar
Nosso próximo passo é arrumar os dados. Em R, a arrumação de dados pode ser
realizada usando as funções do pacote tidyr, que segue a filosofia tidy data (WICKHAM
et al., 2019). Nessa filosofia, os conjuntos de dados estão arranjados de tal forma que
cada variável é uma coluna e cada observação é uma linha. Entre as vantagens de se
trabalhar com essa filosofia, estão a consistência dos dados armazenados, que mantêm
a uniformidade, e a natureza vetorizada de R, que trabalha com vetores de valores.

Para arrumar os dados, faça com que:


• Cada variável tenha sua própria coluna;
• Cada observação tenha sua própria linha; e
• Cada valor tenha sua própria célula.

Na prática:
• Coloque cada conjunto de dados em um tibble; e
• Coloca da variável em uma coluna.

11
11
UNIDADE Aplicações em R

Por exemplo, a Tabela 2 mostra uma pequena porção de um conjunto de dados


que não está no formato tidy (tidyr::table2). Considerando que a unidade de análise
corresponde ao par país-ano (country-year), cada observação está erroneamente
dividida em múltiplas linhas.

Tabela 2 – Dados não arrumados


country year type count
Afghanistan 1999 cases 745
Afghanistan 1999 population 19987071
Afghanistan 2000 cases 2666
Afghanistan 2000 population 20595360
Brazil 1999 cases 37737
Brazil 1999 population 172006362

Para realizar a correção desses dados em R, utilizaremos a função spread, que


requer dois parâmetros:
• key: coluna que contém os nomes de variáveis; e
• value: coluna com valores que forma múltiplas variáveis.

Essa função deverá ser aplicada ao conjunto de dados desta forma:

spread(table2, key = type, value = count)

O resultado da execução do comando acima deverá ser igual à Tabela 3.

Tabela 3 – Dados arrumados da Tabela 2


country year cases population
Afghanistan 1999 745 19987071
Afghanistan 2000 2666 20595360
Brazil 1999 37737 1272915272

Transformar
Na transformação de dados, estamos interessados em limitar o nosso conjunto
de dados a observações que sejam do nosso interesse. Por exemplo, se temos um
conjunto com dados de todo o país, pode ser de nosso interesse estudar apenas uma
das cidades. Outra atividade da transformação é a criação de novas variáveis a par-
tir de outras já existentes, como o cálculo da idade a partir da data de nascimento.
Por fim, é importante que algumas estatísticas sejam coletadas durante esta etapa.
Juntas, a arrumação e a transformação de dados são conhecidas de data wrangling
(WICKHAM; GROLEMUND, 2019).

A melhor forma de realizar transformações de dados em R é usando o pacote


dplyr, que faz parte do tidyverse. A maior parte dos problemas que envolvem mani-
pulação de dados podem ser resolvidos com cinco funções desse pacote:

12
• filter: seleciona as observações por seus valores;
• arrange: reordena as linhas;
• select: seleciona variáveis por seus nomes;
• mutate: cria novas variáveis com funções de variáveis existentes;
• summarize: reúne muitos valores em um único resumo.

Para demonstrar o uso dessas funções, vamos utilizar o conjunto flights, do pa-
cote nycflights13. Caso você não tenha esse pacote, faça a instalação e carregue-o:

install.packages(“nycflights13”)

library(nycflights13)

Uma amostra dos 5 primeiros registros desses dados é apresentada de maneira


invertida na Tabela 4.

Tabela 4 – Amostra de dados do conjunto flights


year 2013 2013 2013 2013 2013
month 1 1 1 1 1
day 1 1 1 1 1
dep_time 517 533 542 544 554
sched_dep_time 515 529 540 545 600
dep_delay 2 4 2 -1 -6
arr_time 830 850 923 1004 812
sched_arr_time 819 830 850 1022 837
arr_delay 11 20 33 -18 -25
carrier UA UA AA B6 DL
flight 1545 1714 1141 725 461
tailnum N14228 N24211 N619AA N804JB N668DN
origin EWR LGA JFK JFK LGA
dest IAH IAH MIA BQN ATL
air_time 227 227 160 183 116
distance 1400 1416 1089 1576 762
hour 5 5 5 5 6
minute 15 29 40 45 0
01/01/2013 01/01/2013 01/01/2013 01/01/2013 01/01/2013
time_hour 05:00 05:00 05:00 05:00 06:00

Ao fazer a impressão desses dados no R, você perceberá que o conjunto de da-


dos contém 336.776 registros de voos que partiram de Nova Iorque em 2013. Você
também perceberá que os dados são um tibble, um dataframe especial usado pelo
tidyverse para facilitar a manipulação de dados.

13
13
UNIDADE Aplicações em R

Função filter
Essa função permite que você crie um subconjunto de dados a partir dos valores.
Ele possui basicamente dois parâmetros:
• O nome do data frame que você vai transformar; e
• A expressão (ou expressões) que filtram o conjunto de dados.

No conjunto de dados nycflights13, você pode filtrar todos os voos que ocorreram
no dia 12 de dezembro. Como retorno, obterá 968 registros. Para fazer isso usando
a linguagem R, execute o seguinte código:

filter(flights, month == 12, day == 12)

Função arrange
Em vez de selecionar as linhas do conjunto de dados como faz a função filter, a
função arrange alterna a ordem das linhas. Essa função recebe como entrada um
tibble e um conjunto de nomes de colunas na ordem desejada para rearranjá-las.

Por exemplo, para reordenar o conjunto de dados e ver os últimos voos nas pri-
meiras posições, acrescente a função desc para apresentar em ordem decrescente:

arrange(flights, desc(month))

Função select
A função select é uma das principais desse conjunto de funções que você está
estudando neste momento. O propósito dela é escolher as variáveis que farão parte
dos dados que serão trabalhados por você.

Usando o conjunto de dados flights, você pode selecionar apenas as colunas day,
month e year:

select(flights, day, month, year)

Ou selecionar todas as variáveis entre year e day:

select(flights, year:day)

Você também pode selecionar todas as colunas, exceto year, month e day:

select(flights, -year, -month, -day)

Função mutate
A função mutate permite que você adicione novas colunas que sejam funções de
colunas existentes. Ela sempre adiciona novas colunas ao final do conjunto de dados.

14
Vamos começar criando um subconjunto de dados para poder visualizar todas
as colunas:

new_flights = select(flights, day, month, ends_with(“delay”),

distance, air_time)

Em seguida, você vai reutilizar new_flights para construir a variável gain no con-
junto de dados:

new_flights = mutate(new_flights, speed = distance / air_time * 60)

A Figura 4 mostra como os resultados serão visualizados no RStudio usando a


função View.

Figura 4 – Visualização com a função View

Função summarize
A função summarize reduz o data frame a uma única linha. Para conhecer a
média dos valores não ausentes da variável dep_delay (correspondente ao tempo de
atraso do voo), execute:

summarize(flights, atraso_medio = mean(dep_delay, na.rm = TRUE))

Para tornar a função mais útil, devemos combiná-la com a função group_by, que
muda a unidade da análise de todo o conjunto de dados para os grupos individuais.
Por exemplo, se você quiser saber o atraso médio por data, execute:

summarize(por_data, atraso_medio = mean(dep_delay, na.rm = TRUE))

Os resultados da execução desse comando summarize para a obtenção do atraso


médio por data são apresentados na Figura 5.

15
15
UNIDADE Aplicações em R

Figura 5 – Visualização do atraso médio de voos por dia, mês e ano

Visualizar e Modelar
Na modelagem de dados, o objetivo é fornecer um resumo simples de baixa
dimensão do conjunto de dados (WICKHAM; GROLEMUND, 2019). Como R é es-
sencialmente um software estatístico e com características voltadas para estatísticos,
construiremos modelos para particionar os dados em padrões e resíduos. Como pa-
drões mais fortes tendem a esconder tendências, usaremos os modelos construídos
para retirar as camadas de estrutura enquanto exploramos o conjunto de dados.

Um modelo estatístico possui duas partes:


• Uma família de modelos: expressa ao mesmo tempo um padrão preciso e
genérico que você deseja capturar. Sendo uma linha reta ou uma curva, você
expressará a família do modelo como uma equação;
• Um modelo ajustado: após encontrar o modelo da família que seja mais próxi-
mo dos seus dados, você gera um modelo ajustado, tornando a família genérica
em uma família específica.

Entenda que um modelo ajustado não necessariamente reflete a verdade a res-


peito dos dados. Ele é apenas o modelo mais próximo de uma família de modelos,
implicando que você tenha o “melhor” modelo, mas não um “bom” modelo. Assim,
o propósito da modelagem é construir modelos que se aproximem dos dados.

Nesta seção, continuaremos usando o conjunto de dados flights, mas o tornare-


mos ainda mais simples ao nosso objetivo. Agora, desejamos responder: “o que afeta
o número de voos diários?”. Por meio dessa pergunta-chave, reduziremos o conjunto
de dados a apenas aos voos que saem de Nova Iorque por dia. Para isso, podemos
utilizar o seguinte código:

16
library(lubridate) # pacote para manipulação de datas

voos_por_dia = flights %>%

mutate(data = make_date(year, month, day)) %>%

group_by(data) %>%

summarize(quantidade = n())

Para visualizar os dados, construa o gráfico diário, que deverá ficar igual à Figura 6:

ggplot(voos_por_dia, aes(data, quantidade)) + geom_line()

Figura 6 – Voos por dia

Vamos começar observando a distribuição de voos por dia da semana a fim de


entender a tendência de longo prazo. O código abaixo gera um boxplot dessa distri-
buição, que pode ser visualizado na Figura 7:

voos_por_dia = voos_por_dia %>%

mutate(semana = wday(data, label = TRUE))

ggplot(voos_por_dia, aes(semana, quantidade)) +

geom_boxplot()

Você deve ter observado no gráfico que a maior parte dos voos acontece durante
a semana, o que nos leva a crer que as viagens realizadas são feitas com finalidades
de negócio.

Assim, devemos remover esse padrão ajustando um modelo aos dados exibindo
as previsões sobrepostas aos dados originais:

# Ajusta um modelo linear aos dados

modelo = lm(quantidade ~ semana, data = voos_por_dia)

grid = voos_por_dia %>%

data_grid(semana) %>%

add_predictions(modelo, “quantidade”)

17
17
UNIDADE Aplicações em R

ggplot(voos_por_dia, aes(semana, quantidade)) +

geom_boxplot() +

geom_point(data = grid, color = “red”, size = 4)

Figura 7 – Boxplot de voos diários

Os novos resultados podem ser visualizados na Figura 8 e na Figura 9. No caso


da Figura 8, você observa as previsões sobrepostas aos dados originais.

Figura 8 – Boxplot de voos diários ajustado ao modelo

Na Figura 9, observe a mudança do eixo x em comparação à Figura 6: agora é


possível ver o desvio do número esperado de voos em relação ao dia da semana.

18
Figura 9 – Boxplot de voos diários ajustado ao modelo

Comunicar
Nas seções anteriores, você viu como utilizar gráficos para fazer explorações de
dados. Ao usar gráficos na análise exploratória, você sabe quais variáveis o gráfico
exibirá, descartando-o logo em seguida. Como o intuito é explorar e descobrir ten-
dências, assim que você as descobre, os gráficos de exploração deixam de ser úteis
por eles mesmos, nos conduzindo à modelagem.

Por outro lado, os gráficos podem ser extremamente úteis na comunicação dos
insights que você percebeu ao longo do desenvolvimento do projeto analítico ao pú-
blico não técnico. Na verdade, a comunicação por gráficos pode ajudar até mesmo
os técnicos que não fizeram parte do seu projeto e não o acompanharam durante o
desenvolvimento. Assim, a ideia desta seção é ajudar você a construir modelos men-
tais a partir dos seus modelos estatísticos usando gráficos.

A melhor maneira de você construir bons gráficos para comunicação em R é uti-


lizando os recursos dos ggplot2:
• Rótulos: use a função labs();
• Anotações: use as funções geom_text() e geom_label() para adicionar ró-
tulos textuais aos seus gráficos e facilitar a leitura dos rótulos adicionando um
retângulo atrás deles, respectivamente;
• Escalas: use as funções do esquema de notação scale_ (como a função scale_x_
continuous()) para melhorar a comunicação ajustando o gráfico na escala
correta. Você pode usar os parâmetros breaks e labels.breaks para ajustar as
marcas dos eixos e as chaves de legenda dos gráficos;
• Legendas: o layout da legenda no gráfico pode ser controlado por meio do parâ-
metro legend.position da função theme(), destinada à construção de temas;
• Zoom: uma das maneiras mais eficientes de dar zoom em um gráfico é configu-
rando xlim e ylim da função coord_cartesian();
• Temas: você pode utilizar um tema pronto do ggplot2 e também customizá-lo. Use
as funções theme_bw(), theme_classic() e outras para usar os temas padrão.

19
19
UNIDADE Aplicações em R

Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:

 Leitura
Tidy Data
https://bit.ly/34nxLnv
Recursos de Visualização do R com ggplot2
https://bit.ly/2FQ2n7u
Gráficos com ggplot2
https://bit.ly/2FRc5Xn
Modelagem com modelr
https://bit.ly/34iuPbF
Manipulando Dados com dplyr e tidyr
https://bit.ly/3okbX3R

20
Referências
WICKHAM, H. Advanced R. Estados Unidos: CRC press, 2019.

________. R packages: organize, test, document, and share your code. Estados
Unidos: O’Reilly Media, Inc., 2015.

________; GROLEMUND, G., 2019. R para Data Science: importe, arrume,


transforme e visualize dados. Rio de Janeiro: Alta Books, 2019.

________. et al. Welcome to the Tidyverse. Journal of Open Source Software.


[Online] v. 4, n. 43, p. 1686, 2019. Disponível em: <https://joss.theoj.org/
papers/10.21105/joss.01686>. Acesso em: 22/10/2020.

21
21

Você também pode gostar