Mini Curso de R

Data Science Workflow em R para Econometria:

Aula 1: Introdução à Programação com R

Vinícius M. de Sousa
in/viniciusmsousa/
github.com/viniciusmsousa
<vinisousa04@gmail.com>

Semana Acadêmica Ciências Econômicas
ESAG/UDESC - 12 de Agosto de 2019

Introdução

Quem sou eu

  • Nascido em Joinville, 23 anos;
  • Cristão;
  • Economista pela Esag/Udesc;
  • Mestrando em Ciência da Informação no PGCIn/Ufsc;
  • Pós-Graduando em Ciência de Dados (Senai/SC e Keyrus);
  • Cientista de Dados na Aquarela Advanced Analytics

Objetivo do Curso

Introdução ao R para:
  • Econometria (análise de dados, de maneira geral);
  • Centralizar todo o fluxo dentro de um ambiente organizado

Organização do Curso

Parte 1 (Hoje):

Introdução ao R (Pacotes, Tipos de variáveis, Funções, Operadores e Programação);

Parte 2 (Amanhã):

Importar Dados, Limpar Dados, Transformar Dados e Modelar;

Parte 3 (Quinta):

Visualizar, Comunicar e Organizar o Código;

  • R é um ambiente computacional e uma linguagem de programação que vem progressivamente se especializando em manipulação, análise e visualização gráfica de dados;
  • O nome R provém em parte das iniciais dos criadores (Ross Ihaka e Robert Gentleman);
  • Criada em 1993 na Universidade de Auckland.
  • RStudio é um software livre de ambiente de desenvolvimento integrado para R;
  • Primeira versão em Feveriro de 2011.
  • Exercício: Criar um Projeto no RStudio

    Funções

    Modo de realizar as operações com a linguagem: o programador fornece argumentos (inputs) e a função retorna (outputs)
    
                 rnorm(n=4,mean = 2,sd = 1.2) 
    
                 mean(c(10,20,70))            
    			

    Atividade: Gere uma sequência de 100 números aleatórios, com média 1 e desvio padrão 1, e salve-a como "x". Depois verifique com a função mean() que a média é próxima à que você colocou no argumento.

    Pacotes

    São conjuntos de funções sobre um mesmo "assunto". É necessário instalar os pacotes para poder acessar as funções.
    
                  install.packages("ggplot2")
    
                  library(ggplot2)
    			

    Atividade: Instale o pacote "tidyverse" e verifique se o mesmo foi instalado com sucesso executando o comando "?tidyverse".

    Tipos de dados

    • Números (numeric);
    • Texto (character);
    • Categoricos (factor);
    • Data (Dates).

    Atividade: Execute os comandos abaixo para verificar os tipos de dados

    
                 class(c(1,2))
                 class(c("a","b"))
                 class(as.factor(c("a","b")))
                 class(as.Date("2008-12-12"))            
    			

    Estruturas de Dados

    • (i) Vetores;
    • (ii) Matrizes;
    • (iii) DataFrame/Tibbles;
    • (iv) Listas

    Vetores

    • Estrutura básica do R;
    • Sequência de elementos do mesmo tipo (character, numeric, date, etc..);

    Vetores - Criando

    
    	             vetor1 <- c(1,2,3,4,5) 
    	             vetor2 <- seq(from = 1,to = 5,by = 1) 
    	             vetor3 <- c('o','i','e')            
    				

    Vetores - Acessando elementos

    
    				 vetor1[1]
    				 vetor1[1:3] 
    				 vetor1[length(vetor1)] <- 2 
    				 vetor1            
    				

    Vetores - Operações

    	            
    				sqrt(vetor1)
    				vetor1+1
    				

    Matrizes

    • Nada Além de vetores com duas dimensões;
    • Destaca-se todos os dados devem ser do memso tipo na matriz

    Matrizes - Criando

    	            
    				peso <- rnorm(5,65,10)
    				idade <- round(rnorm(5,35,4),0)
    				matriz1 <- cbind(idade,peso)
    				

    Matrizes - Acessando elementos

    	            
    				matriz1[1,2, drop=F]
    				matriz1[3,3, drop=F]
    				

    Matrizes - Atividade

    Crie um vetor de dias (do dia 1 ao dia 15) e crie um vetor de temperaturas. Depois junte os vetores em uma matriz.

    Data Frames/Tibbles

    • Mesma estrutura da matriz (colunas e linhas com o mesmo número de observações);
    • Com a diferença de que as colunas podem ser de tipos diferentes.

    Data Frames/Tibbles - Criando

    	            
    				df <- data.frame(
    				  nome = c("Aislan","Apolo","Ana"),
    				  idade = c(18,12,9),
    				  sexo = c("M","M",F)
    					)
    				

    Data Frames/Tibbles - Adicinando Coluna

    	            
    				df$escolaridade <- c("medio", 
    				                     "fundamental",
    				                     "fundamental")
    				df
    				

    Listas

    • Coleção de vetores;
    • Vantagem: cada elemento pode ser de qualquer estrutura

    Listas - Criando

    	            
    				lista <- list(matriz1,df,seq(1:5))
    				lista
    				

    Listas - Acessando elementos

    	            
    				lista[1]
    				lista[[1]]
    				

    Atividade Estrutura de Dados

    • 1) Crie dois vetores: (i) Com nome de 5 países e (ii) com uma estimativa de população para cada país;
    • 2) Junte os vetores em um dataframe;
    • 3) Por fim, crie uma lista que contenha os vetores orignais e o dataframe criado a partir dos vetores;

    Programação

    Funções

    Iterações

    Funções - Por que usar?

    • Ajuda a entender o código;
    • Caso o cenário mude você precisa atualizar o código apenas e um lugar;
    • Elimina erros de copiar e colar.

    Funções - Quando usar?

    • Rule of thumb: Sempre que copiar um mesmo pedaço de código mais de duas vezes;

    Funções - Exemplo

    	            
    				df <- data.frame(
    					a = rnorm(10),
    					b=rnorm(10), 
    					c=rnorm(10))
    					df
    				
    	            
    				df$a <- (df$a - min(df$a, na.rm=T))/
    					(max(df$a, na.rm=T)-min(df$a, na.rm=T))
    
    				df$b <- (df$b - min(df$b, na.rm=T))/
    					(max(df$b, na.rm=T)-min(df$b, na.rm=T))
    
    				df$c <- (df$c - min(df$c, na.rm=T))/
    					(max(df$c, na.rm=T)-min(df$c, na.rm=T))
    				df
    				

    Vamos escrever uma função que faz isso

    Funções - Exemplo

    Passos para criar uma função:

    • 1) Listar os inputs;
    • 2) Computar calculos intermediários;
    	            
    				df$a <- (df$a - min(df$a, na.rm=T))/
    					(max(df$a, na.rm=T)-min(df$a, na.rm=T))
    				

    Qual/quais inputs temos? e Há algo que podemos computar?

    Funções - Exemplo

    (Possível) Solução

    	            
    				rescale01 <- function(x){
    				rng <- range(x, na.rm=T)
    				(x-rng[1]/rng[2]-rng[1])
    			}
    				

    Verificando

    	            
    			df2 <- data.frame(a = rnorm(10),b=rnorm(10),
    			  c=rnorm(10))
    			df2$a <- rescale01(df$a)
    			df2$b <- rescale01(df$b)
    			df2$c <- rescale01(df$c)
    			df
    			

    Funções - Atividade

    Crie uma função para trecho de código abaixo:

    
                    	x / sum(x, na.rm = T)
                    	f1 <- function(x){x / sum(x, na.rm = T)}
                    
    
                    	sd(x, na.rm=T)/mean(x, na.rm=T)
                    
    
                    	x+y/(x*y)
                    

    Programação

    Funções

    Iterações

    Iterações - O que são

    • Evita repetição de código quando precisamos fazer a mesma coisa com múltiplos inputs;

    Iterações - loop for

    
                    	for(i in 1:10){
                    	print(i)
                    	}
                    

    Loop for - Exemplo

    Vamos reescrever o código abaixo com um loop for
    
                    	df2 <- data.frame(Geo = rnorm(10,7,2),
                    		Mat=rnorm(10,6.5,4),
                    		Ing=rnorm(10,8,3))
    
                    	df2$Geo <- ifelse(df$Geo > 6.9,"Passou","Reprovado")
                    	df2$Mat <- ifelse(df$Mat > 6.9,"Passou","Reprovado")
                    	df2$Ing <- ifelse(df$Ing > 6.9,"Passou","Reprovado")
                    	df2
                    
    
                    	df2 <- data.frame(Geo = rnorm(10,7,2),
                    		Mat=rnorm(10,6.5,4),
                    		Ing=rnorm(10,8,3))
    
                    	for(i in 1:ncol(df2)){
                    	df2[,i] <- ifelse(df2[,i] > 6.9,"Passou","Reprovado")
                    	}
                    	df2
                    

    Loop for - Atividade

    Reescreva o Código abaixo em forma de loop
    
    					df2 <- data.frame(a = rnorm(10),b=rnorm(10),
    					c=rnorm(10))
    					df2$a <- rescale01(df$a)
    					df2$b <- rescale01(df$b)
    					df2$c <- rescale01(df$c)
    					df
    Reescreva o Código abaixo em forma de loop
    
    					df2 <- data.frame(a = rnorm(10),b=rnorm(10),
    					c=rnorm(10))
    					df2$a <- rescale01(df$a)
    					df2$b <- rescale01(df$b)
    					df2$c <- rescale01(df$c)
    					df2
    				
    E se eu disser que podemos fazer isso com uma função?

    Funções apply

    Funções Apply

    • Permite abstrair os loops em funções;
    • É a lógica do "Big Data"

    Funcao map - exemplo

    
    					df2 <- data.frame(Geo = rnorm(10,7,2),
                    		Mat=rnorm(10,6.5,4),
                    		Ing=rnorm(10,8,3))
    				
    
    					apply(X = df2, MARGIN = 2,
                    	FUN = function(x){ifelse(x>6.9,"aprovado","reprovado")}
                    	)
    				

    Funções Apply - Atividade

    Transforme o loop for em uma funcao apply
    
                     	df2 <- data.frame(a = rnorm(10),b=rnorm(10),
                     	c=rnorm(10))
    				
    
                     	df2 <- data.frame(a = rnorm(10),b=rnorm(10),
                     	c=rnorm(10))
    					for(i in 1:ncol(df2)){
    					  df[,i] <- rescale(df[,i])
    					}
    				

    Obrigado pela Atenção

    Vinícius M. de Sousa

    Economista e Cientista de Dados

    Dúvidas/Perguntas/Considerações/Sugestões?

    Mini Curso de R

    Data Science Workflow em R para Econometria:

    Aula 2: Importação, Limpeza, Transformação e Modelagem

    Vinícius M. de Sousa
    in/viniciusmsousa/
    github.com/viniciusmsousa
    <vinisousa04@gmail.com>

    Semana Acadêmica Ciências Econômicas
    ESAG/UDESC - 13 de Agosto de 2019

    Parabéns pelo dia do Economista para gente

    Definindo o Problema

    Qual o impacto, ao longo dos anos, da qualidade institucional sobre a percepção de corrupção no mundo?
    Para isso precisamos de dados

    github.com/viniciusmsousa/MiniCursoR

    Importação dos Dados

    Limpeza dos Dados

    Transformação dos Dados

    Modelagem dos Dados

    Obrigado pela Atenção

    Vinícius M. de Sousa

    Economista e Cientista de Dados

    Dúvidas/Perguntas/Considerações/Sugestões?

    Mini Curso de R

    Data Science Workflow em R para Econometria:

    Aula 3: Visualização e Comunicação

    Vinícius M. de Sousa
    in/viniciusmsousa/
    github.com/viniciusmsousa
    <vinisousa04@gmail.com>

    Semana Acadêmica Ciências Econômicas
    ESAG/UDESC - 15 de Agosto de 2019
    github.com/viniciusmsousa/MiniCursoR

    Visualizar dados

    ggplot2

    Comunicar

    RMardown

    Obrigado pela Atenção

    Vinícius M. de Sousa

    Economista e Cientista de Dados

    Dúvidas/Perguntas/Considerações/Sugestões?