Welcome

O que é o R

O R não é apenas uma linguagem de programação, é também um ambiente integrado de desenvolvimento. É um projeto GNU, que foi desenvolvido na Bell Laboratories (antiga AT & T, agora Lucent Technologies) por John Chambers e seus colegas.

De acordo com seus criadores, o R é um conjunto integrado de instalações de software para manipulação de dados, cálculo e exibição gráfica, e esse ambiente inclui:

  • Ler e armazenar dados;
  • Operações matemáticas: cálculos em numéricos, em vetores e matrizes;
  • Ferramentas para análise de dados;
  • Criação de gráficos;

Além disso, o R conta com uma ampla comunidade que oferece suporte e ajuda aos usuários.

Isso faz do R um projeto aberto, o que sigfinica ser continuamente melhorado, atualizado e expandido pela comunidade global de desenvolvedor e seus usuários.

Bases de Dados Utilizadas

Neste primeiro módulo (Introdução ao R) faremos uso de alguns arquivos externos que estão disponíveis na pasta datasets no nosso diretório no dropbox.

  • populacao.txt,populacao.csv e populacao.xlsx: São todos a mesma base, porém em formatos diferentes. Trata-se dados simulados de uma amostra de pessoas de cinco regiões diferentes. Com informações sobre idade, gênero e região.

  • iris: (inclída no R) refere-se a informações sobre o comprimento e a largura de pétalas e sépalas (em centímetros) de 50 flores.

  • dados_anp2.csv: Com o objetivo de evitar possíveis irregularidades, desde 02 de maio de 2004, a ANP publica o Levantamento de Preços e de Margens de Comercialização de Combustíveis, contemplando a ampliação do universo de municípios pesquisados, abrangendo todos os estados brasileiros. A divulgação da pesquisa encontra-se no site http://www.anp.gov.br/preco/ Os combustíveis incluídos nessa pesquisa são: Gasolina, Etanol, Diesel, GNV, Diesel S10. Essa base contém dados dos preços de venda e compra desses combustíveis no ano de 2016. Esses dados foram capturados usando a técnica de wescraping com R.

  • Human development index (HDI).csv: base com a evolução do Índice de desenvolvimento Humano (IDH) nos anos de 2013 e 2014.

  • churn_telecon.csv,churn_telecon.xlsx echurn_telecon_tab: dados coletados no http://www.kaggle.com/. São referntes à uma empresa de telecom, com informações sobre dados móveis, pacotes de dados que o cliente possui. Também é possível saber se o cliente permanece na empresa ou não.

Instalando o R e o RStudio

Instalação do R

Neste curso faremos uso da versão mais recente do R, para instalá-la siga os passos:

  1. Entre no site cran.r-project.org
  2. Faça o download do arquivo
  3. Clique em executar

Instalação do RStudio

Neste curso além do R faremos uso do RStudio, para instalá-lo basta:

  1. Entre no site https://www.rstudio.com/home/
  2. Clique em dowload
  3. Escolha a opção Free
  4. Faça o download do arquivo
  5. Clique em executar

Acessando o RStudio pelo Azure Notebook

Além de acessar o R e Rsudio em sua máquina, é possível acessá-lo via Azure Notebook

  1. No Portal Azure, acesse seu Painel de Recursos e Selecione:
  1. Seleciione sua máquina e clique no botão iniciar:
  1. Com sua máquina ligada, abra ela via RStudio


4. Aprecie sem moderação!

Conhecendo o RStudio

O RStudio é um ambiente de desenvolvimento integrado (IDE) para R. Nele estão inclusos ferramentas que facilitam o uso da linguagem R, como um console e uma janela que suporta a execução do código direto, e instrumentos que auxiliam na análise histórica do script e debugação de possíveis erros.

O RStudio está disponível em open source e edições comerciais e é executado no desktop (Windows, Mac e Linux) ou em um navegador conectado ao RStudio Server ou ao RStudio Server Pro (Debian / Ubuntu, RedHat / CentOS e SUSE Linux).

Ao abrir o RStudio será aberto uma tela grande com quatro telas menores:

  1. A primeira tela é destinada à escrita dos seus scripts, onde ficarão armazendos seus códigos.


  1. A segunda tela é onde são compilados os códigos escritos na primeira tela. Você também pode digitar os comandos no console, mas não serão armazenados.

  1. A terceira tela, destina-se principalmente à armazenar os objetos criados nos scripts.



  1. A quarta tela tem três diferentes objetivos. O primeiro é mostrar os plots (gráficos) que serão feitos em um script. O segundo objetivo é mostrar os arquivos dentro de um diretório. O terceiro objetivo é responder os questionamentos de qualquer objeto fazendo uso da função help().



Scripts

Criando um Script

Scripts são arquivos em texto onde são armazenados os seus comandos em R, os scripts são escritos na primeira tela do RStudio. Para criar um novo Script basta seguir o caminho: File >> New File >> R Script:

Salvando um script existente

Para salvar um script escrito, basta seguir o caminho: File >> Save As...:

Executando um script

Para fazer com que o R entenda que você está executando uma linha de comando existem duas maneiras. A primeira é fortemente desencorajada, que é colocar o cursor ao final da linha ou selecionar as linhas que deseja e excutar e clicar no botão:

A segunda forma vai facilitar a sua vida durante o curso que é:

CRTL + Enter

Primeiros Passos com R

Operações Matemáticas

São operações que resultam em um número, essas operações são:

Operação Código
Soma +
Subtração -
Multiplicação *
Divisão /
Potência a**b
Raiz Quadrada sqrt()
Módulo %%
Média mean()
Desvio Padrão sd()
Mediana median()
Logaritmo log(x, base)

Exemplo: Qual é o resultado de \(\sqrt[2]{25}\)?

sqrt(25)
## [1] 5

Exemplo: Qual é o resto da divisão de \(\frac{5}{2}\)?

5%%2
## [1] 1

## Operações Lógicas

São operações que testam se uma situação é verdadeira ou falsa, os principais operadores são:

Operação Código
Negação !
Contém %in%
Maior >
Menor <
Igual ==
Diferença !=

Exemplo: Considere \(a=25\) e \(b=45\) analise se a é maior:

5%%2
## [1] 1

Os operadores lógicos acima analisam se uma situação é verdadeira ou falsa de maneira pontual. Existem operadores lógicos que analisam de maneira mais ampla se uma situção é verdadeira ou não:

  • Operador E - Retorna verdadeiro se toda a expressão for verdadeira. No R fazemos uso do operador & ou &&.
  • Operador OU - Retorna verdadeiro se ao menos uma das partes da expressão for verdadeira. No R fazemos uso do operador | ou ||.
  • Operador OU Exclusivo - Retorna verdadeiro, somente se uma das partes for verdadeira. No R para ou exclusivo fazemos uso do xor().

Exemplo: Analise se \(25^2 = \sqrt{625}\) E se Bigdata= bigData:

25**2==sqrt(625) & "Bigdata" == "bigData"
## [1] FALSE

Exemplo: Analise se \(25^2 = \sqrt{625}\) OU se Bigdata= bigData:

25**2==sqrt(625) | "Bigdata" == "bigData"
## [1] FALSE

Objetos

São objetos destinados a guardar temporariamente os valores calculados. Para atribuir um valor à um objeto basta digitar o comando <- ou =.

OBS: No R você pode criar objetos e visualizá-los de duas maneiras distintas:

  1. A primeira é inserindo “(” antes do objeto e “)” após o objeto atribuído

Exemplo:

(a=3)
## [1] 3
  1. A segunda é chamar o objeto pelo nome atribuído:

Exemplo:

a=3
a
## [1] 3

Umas dicas para os nomes dos objetos no R:

  • use letras minusculas
  • use _ entre palavras
  • tente usar nomes descritivos
  • tente usar nomes curtos.

Bom:

votos <- c("Sim", "Não", "Não", "Não", "Sim")

valor_produto <- c(1.32, 6.2, 1.9, 3.05)

Ruim:

data <- c(1, 3, 2, 4)

MuitasCoisasJuntosNumaBase <- c("alo", "tchau", "bom dia!")

Código em geral deve ser escrito numa forma que o deixe fácil ler depois. Por exemplo, insira espaços entre operadores como =, e quebre partes longas craindo novas linhas no código. Um exemplo que é ruim:

x<-data.frame(primeira=c(1,2,"João", "Maria"),segunda=3:6,terceira=TRUE)
x
##   primeira segunda terceira
## 1        1       3     TRUE
## 2        2       4     TRUE
## 3     João       5     TRUE
## 4    Maria       6     TRUE

A versão melhor:

x <- data.frame(primeira = c(1, 2, "João", "Maria"),
                segunda = 3:6,
                terceira = TRUE)
x
##   primeira segunda terceira
## 1        1       3     TRUE
## 2        2       4     TRUE
## 3     João       5     TRUE
## 4    Maria       6     TRUE

Classes de objetos

No R, há alguns tipos de variáveis que você pode ter num dataframe:

  • num: variável numerica, e.g. 1.45 (também chamada dbl);
  • int: número inteiro, e.g. 2;
  • chr: caracter, ou “string”, e.g. "Maria";
  • log: logical, FALSE ou TRUE.
  • Factor: caracter que tem níveis numéricos, que vamos explorar numa outra aula.
  • data: datas e horas.

Obviamente, algumas funções só podem ser aplicadas no tipo correto de variável: você não pode calcular a média de um chr, por exemplo. Com variáveis lógicas (TRUE/FALSE), podemos fazer operações matemáticas, porque TRUE = 1 e FALSE = 0 internamente no R; também podemos fazar cálculos com Factors.

Todos esses tipos têm funções para transformar uma variável no tipo desejado e para checar o tipo. No entanto, há limites obviamente, você não pode transformar "Maria" num número!

Numérico

Como o próprio nome indica, são variáveis que contém números.

Exemplo: Considere \(a=2\) e \(b=5\), calcule \(c=a+b\)

a=2
b=5

c=a+b
c
## [1] 7

Exemplo: Considere \(a=15\) e \(b=25\), calcule \(c=a+b\) e \(d=(\sqrt[3]{c})\)

a=15
b=25

(c=a+b)
## [1] 40
d=c^(1/3)
d
## [1] 3.419952

Caracteres (texto)

São palavras, textos, letras, entre outros. Para atribuir a uma variável tipo character é necessário colocar o valor entre "" (aspas duplas) ou '' (aspas simples).

Exemplo: Crie \(nome_1=Big\) e \(nome_2=Data\):

nome1="big"
nome1
## [1] "big"
nome2='data'
nome2
## [1] "data"

Exemplo: Calcule \(nomecompleto=nome_1+nome_2\):

Para resolver essa questão é necessário fazer uso da função paste(), essa função server para concatenar duas ou mais variáveis character.

nomecompleto=paste(nome1,nome2)
nomecompleto
## [1] "big data"

Caso não seja útil o espaço entre as palavras, basta usar a função paste0():

nomecompleto=paste0(nome1,nome2)
nomecompleto
## [1] "bigdata"

Data

Dados do tipo data podem ser importados de diversos tipos em especial character. É muito útil transformar caracteres em datas, principalmente quando arquivos são importados de fontes externas.

Exemplo: Transforme 06/02/2017 em data:

data="06/02/2017"

formatodata=as.Date(x = data,format="%d/%m/%Y")

formatodata
## [1] "2017-02-06"

No exemplo acima foi feito o uso da função as.Date(), que tem como inputs:

  • x : Objeto a ser transformado
  • format: como esta divido o texto a ser transformado em data (no exemplo acima estava divido por “/”):
    • %d = representa o dia
    • %m = representa o mês
    • %Y = representa o ano

Lógica

É uma variável booleana que pode receber como valores as situações TRUE (verdadeira) ou FALSE (Falso).

##Conhecendo a classe de um objeto

Para saber qual é a classe de um objeto basta usar a função class() ou str():

Exemplo: Considere \(a=3\), descubra a classe de a.

a=3

str(a)
##  num 3

Exemplo: Considere \(a=3\), descubra a classe de a.

a=3

class(a)
## [1] "numeric"

Vetores

Vetores são objetos que armazenam unidimensionalmente várias variáveis da mesma classe.

Imagine que você é um diretor de uma empresa que vende um determinado produto em todos os estados brasileiros. Assim, se você quisesse ter o conjunto de preços por estado de cada produtos você deveria criar 27 objetos numéricos diferentes.

preco1 = 1.5
preco2 = 2.5
preco3 = 2.5
.
.
.
preco27 = 5.5

Para evitar esse trabalho desnecessário o correto é usar vetores, que armazenará em um único objeto todos os preços em um formato sequêncial:

precos=[1.5,2.5,4.5,…,5.5]

No R para criar um vetor basta usar a função c():

Exemplo: Crie um vetor chamado nomes que contenha:

Anna
Paula
Roberta
Ingrid
Fernanda
João
nomes=c("Anna","Paula","Roberta","Ingrid","Fernanda","João")

nomes
## [1] "Anna"     "Paula"    "Roberta"  "Ingrid"   "Fernanda" "João"

Indexação de Vetores

É comum, trabalhar com um ou mais elementos específicos de um vetor, para acessa-los é necessário conhecer a indexação:

\(elemento_i=V[i]\)

onde:

\(i\) = é a posição do elemento solicitado.

\(V\) = Vetor em questão

No R, segue essa mesma lógica basta digitar nome_vetor[posição desejada].

Exemplo: Considere o vetor \(v=[1,10,15,5,30,2]\), qual é o primeiro elemento do vetor?

v=c(1,10,15,5,30,2)

v[1]
## [1] 1

Caso queira mais de uma posição digite nome_vetor[posicao_inicial:posicao_final]:

Exemplo: Ainda com o vetor \(v=[1,10,15,5,30,2]\), quais são os três primeiros elementos do vetor?

v[1:3]
## [1]  1 10 15

Tamanho do Vetor

Para saber o tamanho de um vetor, basta usar a função length():

Exemplo: Qual é o tamanho do vetor \(v=[1,10,15,5,30,2]\)?

v=c(1,10,15,5,30,2)
length(v)
## [1] 6

Concatenando vetores

Agora vamos supor que você é um professor e no primeiro dia de aula tem a lista com o nome dos alunos:

Anna
Pedro
Carlos
Bruno
Vanessa
Paula
Italo

Mas no segundo dia surgiram mais 5 alunos:

Jorge
Davi
Mariana
Bruno
Carolina
Alice

Como colocar os novos nomes na antiga lista?

No R, para concatenar vetores basta usar a função c(primeiro_objeto,segundo_objeto,...).

Exemplo: Concatene as listas com os nomes dos alunos:

nomes1<-c("Anna","Pedro","Carlos","Bruno","Vanessa","Paula","Italo")
nomes2<-c("Jorge","Davi","Mariana","Carolina","Alice")

nomes_completo<-c(nomes1,nomes2)
nomes_completo
##  [1] "Anna"     "Pedro"    "Carlos"   "Bruno"    "Vanessa"  "Paula"   
##  [7] "Italo"    "Jorge"    "Davi"     "Mariana"  "Carolina" "Alice"

Funções úteis

Função Saída
mean() Médias dos valores em um vetor
max() Retorna o valor Máximo
min() Retorna o Valor Mínimo
sum() Retorna a soma dos elementos
unique() Remoção de duplicatas

Exercícios

  1. Crie um vetor \(v=[105,106,150,135,120,147]\):
  • Concatene com o vetor \(v2=[105,250,300,175,157,147,134]\).

  • Remova as duplicatas.

  • Qual é o terceiro elemento?

  • Qual é o o tamanho do vetor?

  • Qual é a média dos valores?

  • Qual é o maior elemento?

Data Frames

No mundo real as informações não estão contidas em uma unica dimensão (vetor), na maioria dos casos são necessárias mais informações. Por exemplo caso na lista dos alunos, é importante as datas das aulas para saber o nível de presença, o nome da matéria, entre outras informações.

Neste tipo de cenário o adequado é o uso de tabelas. No r as tabelas são chamadas de Data Frame, e são os objetos mais usados na linguagem.

No R para criar um data frame basta usar a função data.frame().

Produto Preço
Produto A R$ 5,00
Produto B R$ 15,00
Produto C R$ 4,00
Produto D R$ 6,00
Produto E R$ 8,00

Crie esta tabela no R:

Produto<-c("Produto A"," Produto B","Produto C", "Produto D","Produto E")
Preco<-c(5,15,4,6,8)

tabela_preco_produto<-data.frame(Produto,Preco)

tabela_preco_produto
##      Produto Preco
## 1  Produto A     5
## 2  Produto B    15
## 3  Produto C     4
## 4  Produto D     6
## 5  Produto E     8

Indexação de Data Frames

A indexação dos valores de uma data frame é parecida com a indexação dos vetores, sendo que com duas dimensões:

\(elemento_{i,j}=df[i,j]\)

onde:

\(df\) = data frame criado

\(i\) = é posição da linha onde está o objeto desejado

\(j\) = é a posição da coluna do objeto desejado

No R, segue essa mesma lógica basta digitar data_frame[posição linha, posição coluna].

Exemplo: Acesse o preço do Produto D na tabela produtos:

tabela_preco_produto[4,2]
## [1] 6

Exemplo: Acesse os preço do Produto D e Produto E na tabela produtos:

tabela_preco_produto[4:5,2]
## [1] 6 8

Acessando colunas em data frame

Além da indexação tradicional pelo número da coluna, existem outras duas formas muito úteis para acessar uma coluna de um data frame.

A primeira é data_frame$nome_coluna:

Exemplo: Acesse a coluna produtos na tabela_produto:

tabela_preco_produto$Produto
## [1] "Produto A"  " Produto B" "Produto C"  "Produto D"  "Produto E"

A segunda forma é usando colchetes, data_frame[,"nome_coluna"]

Exemplo: Acesse a coluna produtos na tabela_preco_produto:

tabela_preco_produto[,"Produto"]
## [1] "Produto A"  " Produto B" "Produto C"  "Produto D"  "Produto E"

Criando uma nova coluna em uma data frame

A criação de um a nova coluna em um data frame é parecida com o acesso á colunas.

A primeira forma de criar uma nova coluna é data_frame$nome_nova_coluna.

Exemplo: Crie uma coluna quantidade, na tabela preços, que receba os valores:

quantidade<-c(50,100,120,150,200)

tabela_preco_produto$quantidade<-c(50,100,120,150,200)
tabela_preco_produto
##      Produto Preco quantidade
## 1  Produto A     5         50
## 2  Produto B    15        100
## 3  Produto C     4        120
## 4  Produto D     6        150
## 5  Produto E     8        200

A segunda forma de criar uma nova coluna é data_frame[,“nome_nova_coluna”]

Exemplo: Crie uma coluna, na tabela preços com os custos de cada produto:

custos<-c(2,12,3,5,6)

tabela_preco_produto[,"Custos"]<-c(2,12,3,5,6)
tabela_preco_produto
##      Produto Preco quantidade Custos
## 1  Produto A     5         50      2
## 2  Produto B    15        100     12
## 3  Produto C     4        120      3
## 4  Produto D     6        150      5
## 5  Produto E     8        200      6

Conhecendo seu Data Frame

É aconselhável conhecer seu objeto, data frame, com o qual está trabalhando. Até o momento trabalhamos com uma tabela pequena, a tabela preços, composta por 5 linhas (observações) e 4 colunas (variáveis). No mundo real tabelas como estas são exceção, neste sentido não é possível visualizar e extrair informações analogamente olhando a olho nu o data frame como feito na tabela preços.

O R oferece algumas funções que auxiliam a entender seu data frame. Para isso, vamos usar outra base de dados a iris.

A primeira função é a str() que ajuda a conhecer a classe de cada coluna (variável) no data frame.

base_flores<-iris

str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

A primeira saída dessa função é o numero de observações (linhas) e o número de colunas, depois saem as informações sobre cada coluna que exceto pela última são todas numéricas.

A segunda função é a head() que retorna as seis primeiras observações de seu data frame:

head(base_flores)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

A terceira função é a summary() que faz um “resumo” de todos os dados dentro de um data frame:

summary(base_flores)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 

Perceba que para as colunas numéricas a função summary calculou as estatísticas descritivas e para as colunas de texto foram contabilizadas as quantidades.

A quarta função é a names() que retorna os nomes das colunas do data frame.

names(base_flores)
## [1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"

Funções Úteis

Algumas funções úteis:

Função Saída
nrow() Número de linhas (observações) em um data frame
ncol() Número de colunas (varáveis) em um data frame
dim() Retorna a dimensão do data frame. Número de linhas e úmero de colunas
unique() Remoção de duplicatas
tail() Retorna as 6 últimas observações em um data frame
cbind() Concatena dois data frames pelas colunas
rbind() Concatena dois data frames pelas linhas

Exercício

Leia o arquivo dados_frame.txt e baseado em suas informações crie uma tabela, chamada de tabela_pessoas e responda as questões

  1. Quantas observações tem a tabela?
  2. Quais são as médias das idades?
  3. Quais são as classes de cada uma das colunas?
  4. calcule um resumo da tabela.

Utilização de Pacotes

Os pacotes no R são conjuntos de funções que facilitam a nossa vida. Como a comunidade do R vem crescendo, novos pacotes aparecem todos os dias.

Para instalar pacotes, use o comando install.packages()

Vamos instalar nosso primeiro:

Instalar pacotes

Pipeline Analytics

A maioria dos projetos de analytics começam com qual pergunta eu desejo responder?. Para isso, existe uam metodologia que é muito útil para:

  • verificar ser é fatível responder a pergunta
  • Encontrar o melhor modelo que responda
  • colocar em produção

Enquadramento

Essa é fase mais importante do projeto. É onde são definidos:

  • Pergunta a ser respondida
  • Enquadramento da evolução (inputs e outputs)
  • Fatores exógenos

Sanity check

Agora já temos maturidade para saber que a base de qualquer projeto em Analytics, são os dados, e desejamos:

Porém!!!!!

E por mais glamuroso que seja trabalhar:

  • trabalhar com dados
  • extrair insights
  • aplicar técnicas de machine learning

Sabemos que grande parte do esforço de uma trabalho com data science:

Então:

Assim, faz sentido se debruçar para conhecer o dado que vc está usando. Nessa etapa, é checado se a base de dados que recebemos possui as colunas e a quantidade de linhas esperadas. A gente também verifica se há observações faltantes (missing data) entre outros pontos.

Depois de carregar a base de dados (data frame), a gente precisa verificar como os dados estão. No mundo real as bases de dados são longas e possuem muitas variáveis. Assim sendo, não é possível visualizar e extrair informações apenas olhando para a tabela.

O Primeiro passo é a extração de pequenas asmostras. Para isso, basta usar a função a head() que retorna as seis primeiras observações do seu data frame:

## Warning: package 'DBI' was built under R version 4.0.4
con <- dbConnect(odbc::odbc(), .connection_string =c_string)

df = dbGetQuery(con," SELECT * FROM [claroTreinamentos].[rtp_audience_meter] where qtd_num_serie_smart_card<1000")
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.3     v purrr   0.3.4
## v tibble  3.0.5     v dplyr   1.0.3
## v tidyr   1.1.2     v stringr 1.4.0
## v readr   1.4.0     v forcats 0.5.0
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
df <- read_csv("assess/data/churn_telecom.csv")
## 
## -- Column specification --------------------------------------------------------
## cols(
##   .default = col_double(),
##   estado = col_character(),
##   telefone = col_character(),
##   plano_internacional = col_character(),
##   plano_email = col_character(),
##   churn = col_logical()
## )
## i Use `spec()` for the full column specifications.
df %>% 
  head()
## # A tibble: 6 x 21
##   estado cliente_fidelid~   ddd telefone plano_internaci~ plano_email plano_sms
##   <chr>             <dbl> <dbl> <chr>    <chr>            <chr>           <dbl>
## 1 KS                  128   415 382-4657 no               yes                25
## 2 OH                  107   415 371-7191 no               yes                26
## 3 NJ                  137   415 358-1921 no               no                  0
## 4 OH                   84   408 375-9999 yes              no                  0
## 5 OK                   75   415 330-6626 yes              no                  0
## 6 AL                  118   510 391-8027 yes              no                  0
## # ... with 14 more variables: min_lig_diurno <dbl>, qtdd_lig_diurna <dbl>,
## #   cobranca_diurna <dbl>, min_lig_noturna <dbl>, qtdd_lig_noturna <dbl>,
## #   cobranca_noturna <dbl>, min_lig_madrugada <dbl>, qtt_lig_madrugada <dbl>,
## #   cobranca_madrugada <dbl>, min_lig_internacional <dbl>,
## #   qtdd_lig_internacional <dbl>, cobranca_lig_internacional <dbl>,
## #   nivel_tarifa <dbl>, churn <lgl>

Já a função tail() retorna as seis últimas observações do seu data frame:

df %>% 
  tail()
## # A tibble: 6 x 21
##   estado cliente_fidelid~   ddd telefone plano_internaci~ plano_email plano_sms
##   <chr>             <dbl> <dbl> <chr>    <chr>            <chr>           <dbl>
## 1 SC                   79   415 348-3830 no               no                  0
## 2 AZ                  192   415 414-4276 no               yes                36
## 3 WV                   68   415 370-3271 no               no                  0
## 4 RI                   28   510 328-8230 no               no                  0
## 5 CT                  184   510 364-6381 yes              no                  0
## 6 TN                   74   415 400-4344 no               yes                25
## # ... with 14 more variables: min_lig_diurno <dbl>, qtdd_lig_diurna <dbl>,
## #   cobranca_diurna <dbl>, min_lig_noturna <dbl>, qtdd_lig_noturna <dbl>,
## #   cobranca_noturna <dbl>, min_lig_madrugada <dbl>, qtt_lig_madrugada <dbl>,
## #   cobranca_madrugada <dbl>, min_lig_internacional <dbl>,
## #   qtdd_lig_internacional <dbl>, cobranca_lig_internacional <dbl>,
## #   nivel_tarifa <dbl>, churn <lgl>

Por padrão, para executar um bom sanity check basta seguir o checklist:

  • Quais tabelas são necessárias para a construção do analise?
  • Qual a quantidade de linhas e colunas cada tabela possui?
  • Qual é a chave de cada tabela? A chave é única ou existe duplicidade?
  • Qual o percentual de missing data por coluna?
  • Quais são as estatísticas descritivas de cada coluna numérica (mínimo, máximo, média, mediana)?
  • Quais são as categorias que mais aparecem e quanto aparecem? Existe alguma categoria dominante nas colunas - categóricas?
  • Na tabelas temporais como está o comportamento ?

Exercício

Faça um sanity preliminar na base do [claroTreinamentos].[rtp_audience_meter].

DataExplorer

Para um sanity check mais completo e visualmente mais bonito, o R possui um pacote, que com poucas linhas de comando, a gente consegue produzir relatórios estatístico muito interessante. Esse pacote se chama DataExplorer e vamos carregá-lo agora:

library(DataExplorer)

Sumário da base de dados - Tabela

Um dos primeiros passos que a gente faz ao receber uma base de dados é conferir quantas colunas e linhas a base possui. A gente consegue essas informações e outras com o próximo comando do pacote DataExplorer:

introduce(df)
## # A tibble: 1 x 9
##    rows columns discrete_columns continuous_colu~ all_missing_col~
##   <int>   <int>            <int>            <int>            <int>
## 1  3333      21                5               16                0
## # ... with 4 more variables: total_missing_values <int>, complete_rows <int>,
## #   total_observations <int>, memory_usage <dbl>

Sumário da base de dados - Gráfico

Caso você queria gerar um gráfico com as informações da tabela produzida pelo comando anterior (introduce), basta usar o seguinte comando:

plot_intro(df)

Análise dados Faltantes

O próximo comando (plot_missing) lista a quantidade de observações que estão faltando em cada coluna:

plot_missing(df)

Análise das variáveis categóricas

Outro comando bastante útil é o plot_bar. Ele serve para analisarmos como as variáveis categóricas se comportam. Bastante rodar o seguinte comando, que o R produz os gráficos automaticamente:

plot_bar(df)
## 2 columns ignored with more than 50 categories.
## estado: 51 categories
## telefone: 3333 categories

Análise das variáveis Numéricas

Já para analisarmos as variáveis numéricas, nós utilizamos o comando plot_histogram na base de dados:

plot_histogram(df)

Relacionamento entre as variáveis

Para fazermos a matriz de correlação basta usar a função plot_correlation.:

plot_correlation(df,type = "all")
## 2 features with more than 20 categories ignored!
## estado: 51 categories
## telefone: 3333 categories

Relatório completo da base de dados

O próximo comando é um dos mais relevantes, pois com apenas uma linha de comando a gente consegue criar um relatório com os principais análises descritivas e estatísticas da base de dados:

create_report(df)

Exercício individual

  1. Carregar a base de dados: [claroTreinamentos].[rtp_audience_meter].
  2. Verificar se há outliers ou dados faltantes (missing data).
  3. O que podemos fazer com os dados faltantes?
  4. Quantos aos outliers, a gente retira da base de dados ou eles fazem sentido em termos de negócio?
  5. Elabore um relatório estáticos da base de dados (DataExplorer).
  6. Alguma informação do relatório te chamou atenção?
  7. As variáveis apresentaram valores que você esperava?