Inicialização em estudos socieconômicos em linguagem R

1. Primeiros passos

# Carrega o dataset iris
data(iris)
# informações sobre o dataset
?iris
help(iris)
# Atribuindo o dataset a uma variavel
meu_iris <- iris
# Salvando o dataset em um objeto RDS do R
saveRDS(meu_iris, file = 'meu_iris.rds')
# Lendo o arquivo RDS
meu_iris_recuperado <- readRDS('meu_iris.rds')
# Listando os arquivos criados
ls()
## [1] "iris"                "meu_iris"            "meu_iris_recuperado"
# Listando o diretorio do projeto
getwd()
## [1] "/cloud/project"
meu_objeto <- c(1,2,3,4,5)
ls()
## [1] "iris"                "meu_iris"            "meu_iris_recuperado"
## [4] "meu_objeto"
# Removendo um objeto
rm(meu_objeto)
ls()
## [1] "iris"                "meu_iris"            "meu_iris_recuperado"
# Exibindo dados estatisticos do dataset
summary(iris)
##   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  
##                 
##                 
## 

1.1 Tipos de dados em R

# Limpar o ambiente
rm(list = ls())
idade <- 42
pi <- 3.14
nome <- 'Janderson'
cidade <- 'brasilia'
genero <- factor(c('Masculino','Feminino','Masculino','Feminino'))
genero
## [1] Masculino Feminino  Masculino Feminino 
## Levels: Feminino Masculino
setores <- factor(c('Chocolate','Lacticinios','Perfumaria','Frios','Lacticinios'
                    ,'','Frios','Perfumaria','Frios','Cafeteria'))
setores
##  [1] Chocolate   Lacticinios Perfumaria  Frios       Lacticinios            
##  [7] Frios       Perfumaria  Frios       Cafeteria  
## Levels:  Cafeteria Chocolate Frios Lacticinios Perfumaria
notas <- c(80,35,77,27,41)
notas
## [1] 80 35 77 27 41
matriz <- matrix(c(1,2,3,4,5,6),nrow = 2,ncol = 3 )
matriz
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
dados <- data.frame(Nome = c("Ana", "Carlos","Fabricio"),
                    Idade = c(22,18,19),
                    Nota = c(5,10,9.5),
                    situação = c('Reprovado','Aprovado','Aprovado')
                    )
dados
##       Nome Idade Nota  situação
## 1      Ana    22  5.0 Reprovado
## 2   Carlos    18 10.0  Aprovado
## 3 Fabricio    19  9.5  Aprovado

1.2 Operadores aritméticos e logicos

# Limpar o ambiente
rm(list = ls())
soma <- 5 + 3
soma
## [1] 8
diferenca <- 10-4
diferenca
## [1] 6
produto <- 5 * 8
produto
## [1] 40
quociente <- 10 / 5
quociente
## [1] 2
exponenciacao <- 2^3
exponenciacao
## [1] 8
resto <- 10 %% 3
resto
## [1] 1
resultado <- (5 == 5)
resultado
## [1] TRUE
diferente <- (10 != 10)
diferente
## [1] FALSE
maior_que <- (8 > 5)
maior_que
## [1] TRUE
menor_que <- (8 < 5)
menor_que
## [1] FALSE
maior_igual_que <- (8 >= 5)
maior_igual_que
## [1] TRUE
menor_igual_que <- (8 <= 5)
menor_igual_que
## [1] FALSE
condicao_1 <- TRUE
condicao_2 <- FALSE
condicao_a <- TRUE
condicao_b <- FALSE
# Verifica se apenas a primeira condição e falsa 
resultado_1 <- condicao_1 && condicao_2
resultado_1
## [1] FALSE
resultado_2 <- condicao_1 & condicao_2
resultado_2
## [1] FALSE
resultado_3 <- condicao_a | condicao_b
resultado_3
## [1] TRUE
# Verifica se apenas a primeira condição e verdadeira
resultado_4 <- condicao_1 || condicao_b
resultado_4
## [1] TRUE
resultado_5 <- !condicao_1
condicao_1
## [1] TRUE
resultado_5
## [1] FALSE
numeros <- c(7,9,10,15,17,20)
# Verificando quais numeros nao sao maiores que 15
nao_maiores_que_15 <- numeros <= 15
nao_maiores_que_15
## [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE

1.3 Funções aritiméticas e matemáticas

# limpar o ambiente
rm(list = ls())
valores <- c(2,5,8,3,8,5,1,9)
soma <- sum(valores)
soma
## [1] 41
media <- mean(valores)
media
## [1] 5.125
comprimento <- length(valores)
comprimento
## [1] 8
ordenar <- sort(valores)
ordenar
## [1] 1 2 3 5 5 8 8 9
valores_unicos <- unique(valores)
valores_unicos
## [1] 2 5 8 3 1 9
numero <- 25
raiz_quadrada <- sqrt(numero)
raiz_quadrada
## [1] 5
logaritimo <- log(numero)
logaritimo
## [1] 3.218876
absoluto <- abs(-25)
absoluto
## [1] 25

1.4 Funçoes de estudo em fisica, engenharia e geometria

sin(numero)
## [1] -0.1323518
cos(numero)
## [1] 0.9912028
tan(numero)
## [1] -0.1335264
asin(numero)
## Warning in asin(numero): NaNs produced
## [1] NaN
acos(numero)
## Warning in acos(numero): NaNs produced
## [1] NaN
atan(numero)
## [1] 1.530818
atan2(numero,5)
## [1] 1.373401
sinh(numero)
## [1] 36002449669
cosh(numero)
## [1] 36002449669
tanh(numero)
## [1] 1

2. Estudo e pratica

2.1 Simulação de estudo sobre o mercado de trabalho

criando o dataset

dados_trabalho <- data.frame(
  Nome <- c('Ana','Carlos','Mariana','Pedro','Julia'),
  Idade <- c(28,35,30,25,32),
  Salario <- c(5000,6000,5500,4800,7000),
  Cargo <- c('Analista','Gerente','Analista','Assitente','Diretor'),
  Experiencia_anos <- c(3,8,5,2,10)
)
# Media salarial
media_salarios <- mean(dados_trabalho$Salario)
media_salarios
## [1] 5660
# Numero de funcionarios
numero_funcionarios <- length(dados_trabalho$Nome)
numero_funcionarios
## [1] 5
# Idade em ordem crescente
ordena_idade <- sort(dados_trabalho$Idade)
ordena_idade
## [1] 25 28 30 32 35
# Cargos disponiveis
cargos_empresa <- factor(dados_trabalho$Cargo)
cargos_empresa
## [1] Analista  Gerente   Analista  Assitente Diretor  
## Levels: Analista Assitente Diretor Gerente
# Salario mais alto
salario_mais_alto <- max(dados_trabalho$Salario)
salario_mais_alto
## [1] 7000
# Gasto total com salario
folha_pagamento <- sum(dados_trabalho$Salario)
folha_pagamento
## [1] 28300
# tempo de experiencia acima de 5 anos
tempo_acima_5_anos <- dados_trabalho$Experiencia_anos > 5
tempo_acima_5_anos
## [1] FALSE  TRUE FALSE FALSE  TRUE

3. Estruturas de controle

# Limpando o ambiente
rm(list = ls())

idade <- 18
if (idade >= 18) {
  cat('Você e maior de idade.\n')
} else {
  cat('Você e menor de idade.\n')
}
## Você e maior de idade.

3.1 Estrutura Condicional if-else if-else

idade <- 25
if (idade < 18) {
  cat('Você e maior de idade.\n') 
} else if (idade >= 18 & idade <= 60){
  cat('Você e um adulto.\n')
} else {
  cat('Você e um idoso.\n')
}
## Você e um adulto.

3.2 Estrutura de repetição for

for(i in 1:5) {
  cat('Iteração: ',i, '\n')
}
## Iteração:  1 
## Iteração:  2 
## Iteração:  3 
## Iteração:  4 
## Iteração:  5

3.3 Estrutura de repetição while

contador <- 2
while(contador <= 5){
  cat('Iteração: ',contador,'\n')
contador <- contador + 1
cat('Iteração: ',contador,'\n')
}
## Iteração:  2 
## Iteração:  3 
## Iteração:  3 
## Iteração:  4 
## Iteração:  4 
## Iteração:  5 
## Iteração:  5 
## Iteração:  6

3.3 Estrutura de repetição repeat

# util quando não se sabe o numero de vezes a iterar
contador <- 1
repeat{
  cat('Iteração: ',contador,'\n')
contador <- contador +1
if(contador > 4){
  break
}}
## Iteração:  1 
## Iteração:  2 
## Iteração:  3 
## Iteração:  4

3.4 Estrutura de controle switch

dia_da_semana <- 'sexta'
mensagem <- switch(dia_da_semana,
                   'segunda' = 'Inicio da semana',
                   'terça' = 'Dia de reuniões',
                   'quarta' = 'Metade da semana',
                   'quinta' = 'Proximo do fim de semana',
                   'sexta' = 'Sextou!',
                   'sabado' = 'Dia de descanso',
                   'domingo' = 'Semana se inicia'
                   )
cat('Mensagem: ',mensagem, '\n')
## Mensagem:  Sextou!

3.3 Estrutura de repetição foreach

library(foreach)
vetor_numerico <- c(2,4,6,8,10)
foreach(valor = vetor_numerico)%do%{
  cat('Valor: ',valor, '\n')
}
## Valor:  2 
## Valor:  4 
## Valor:  6 
## Valor:  8 
## Valor:  10
## [[1]]
## NULL
## 
## [[2]]
## NULL
## 
## [[3]]
## NULL
## 
## [[4]]
## NULL
## 
## [[5]]
## NULL

4. Funçoes de análise estatística

4.1 Gerando os dados

# limpando o ambiente
rm(list=ls())
# Criando o dataset ficticio
dados <- data.frame(
  Idade = c(25,30,35,40,45,50,55,60),
  Salario = c(5000,6000,5500,7000,8000,7500,9000,9500),
  Educação = c('Ensino medio','Ensino superior','Ensino medio','Ensino superior'
               ,'Ensino medio','Ensino superior',
               'Ensino medio','Ensino superior'),
  Emprego = c('CLT','Autônomo','CLT','Autônomo','CLT',
              'Autônomo','CLT','Autônomo')
  
)

4.2 Media

media_salario <- mean(dados$Salario)
media_salario
## [1] 7187.5

4.3 Mediana

# Mediana
mediana_salario <- median(dados$Salario)
mediana_salario
## [1] 7250

4.4 Moda

# Moda
moda_salario <- table(dados$Salario)[which.max(table(dados$Salario))]
moda_salario
## 5000 
##    1

4.5 Desvio padrão

desvio_padrao_salario <- sd(dados$Salario)
desvio_padrao_salario
## [1] 1624.313

4.6 Amplitude interquartil (IQR)

iqr_salario <- IQR(dados$Salario)
iqr_salario
## [1] 2375

4.7 Calcular quartis de 25%,50% e 75% em Idade

quartis <- quantile(dados$Idade, probs = c(0.25, 0.5, 0.75))
quartis 
##   25%   50%   75% 
## 33.75 42.50 51.25

4.8 Valor t-Student

t_teste_salario_genero <- t.test(dados$Salario ~ dados$Educação)
t_teste_salario_genero
## 
##  Welch Two Sample t-test
## 
## data:  dados$Salario by dados$Educação
## t = -0.5148, df = 5.6062, p-value = 0.6263
## alternative hypothesis: true difference in means between group Ensino medio and group Ensino superior is not equal to 0
## 95 percent confidence interval:
##  -3647.032  2397.032
## sample estimates:
##    mean in group Ensino medio mean in group Ensino superior 
##                          6875                          7500

4.9 Teste Qui-Quadrado

tabela_contigencia <- table(dados$Educação,dados$Emprego)
qui_quadrado_educacao <- chisq.test(tabela_contigencia)
## Warning in chisq.test(tabela_contigencia): Chi-squared approximation may be
## incorrect
qui_quadrado_educacao
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tabela_contigencia
## X-squared = 4.5, df = 1, p-value = 0.03389

4.10 Calculo de variancia

variancia <- var(dados$Idade)
variancia
## [1] 150

4.11 Calculo de covariancia

covariancia <- cov(dados$Idade, dados$Salario)
covariancia
## [1] 19107.14

4.12 Correlação de Pearson

correlacao_idade_salario <- cor(dados$Idade, dados$Salario, method = "pearson")
correlacao_idade_salario
## [1] 0.9604624

4.13 informações dos dados

resumo <- summary(dados$Idade)
resumo
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   25.00   33.75   42.50   42.50   51.25   60.00

5. Função de manipulação de strings

# limpar o ambiente
rm(list=ls())

5.1 Metodo paste

nome <- 'Janderson'
sobrenome <- 'Batista'
nome_completo <- paste(nome, sobrenome, sep = ' ')
nome_completo
## [1] "Janderson Batista"

5.2 Metodo substring

frase <- 'manipulação de strings'
parte <- substring(frase, first = 1, last = 11)
parte
## [1] "manipulação"

5.3 Metodo grep

palavras <- c('R','Java','Python','C++')
indice_python <- grep('Python', palavras)
indice_python
## [1] 3

5.4 Metodo toupper e tolower

texto <- "exemplo de TEXTO"
texto_maiusculo <- toupper(texto)
texto_minusculo <- tolower(texto)
texto_maiusculo
## [1] "EXEMPLO DE TEXTO"
texto_minusculo
## [1] "exemplo de texto"

5.5 Metodo strsplit

frase = 'Manipulação de|Strings|no R'
substrings <- strsplit(frase, split = '|', fixed = TRUE)
substrings
## [[1]]
## [1] "Manipulação de" "Strings"        "no R"

5.6 Metodo gsub

frase <- 'Eu gosto de configurar o tema do rmarkdown para Material'
texto_substituido <- gsub('Material','Robobook', frase)
texto_substituido
## [1] "Eu gosto de configurar o tema do rmarkdown para Robobook"

5.7 Metodo nchar

palavra <- 'RStudio'
comprimento <- nchar(palavra)
cat('A palavra RStudio tem:',comprimento,' letras\n')
## A palavra RStudio tem: 7  letras

5.8 Metodo str_trim

library(stringr)
texto <- 'Espaços removidos'
texto_trimmed <- str_trim(texto)
texto_trimmed
## [1] "Espaços removidos"

5.9 Metodo separate

library(tidyr)
dados <- data.frame(
  nome_completo = c('João Silva','Janderson Batista','Maria Dulce',
                    'Carlos Oliveira'))
dados_arrumados <- separate(dados, col = nome_completo, 
                            into = c('Nome','Sobrenome'), sep = '')
## Warning: Expected 2 pieces. Additional pieces discarded in 4 rows [1, 2, 3, 4].
dados_arrumados
##   Nome Sobrenome
## 1              J
## 2              J
## 3              M
## 4              C

5.10 Criando um dataset

dados_educacionais <- data.frame(
  Escola = c('Escola A','Escola B','Escola C'),
  Nome_responsavel = c('João','Maria','Carlos'),
  Sobrenome_responsavel = c('Silva','Santos','Oliveira'),
  Estado = c('mg-Minas Gerais','rj-Rio De Janeiro','mg-Minas Gerais')
)
dados_educacionais
##     Escola Nome_responsavel Sobrenome_responsavel            Estado
## 1 Escola A             João                 Silva   mg-Minas Gerais
## 2 Escola B            Maria                Santos rj-Rio De Janeiro
## 3 Escola C           Carlos              Oliveira   mg-Minas Gerais
# Cria uma nova coluna com o nome completo do responsavel
dados_educacionais$nome_completo_responsavel <- 
  paste(dados_educacionais$Nome_responsavel, 
        dados_educacionais$Sobrenome_responsavel, sep = ' ')
dados_educacionais
##     Escola Nome_responsavel Sobrenome_responsavel            Estado
## 1 Escola A             João                 Silva   mg-Minas Gerais
## 2 Escola B            Maria                Santos rj-Rio De Janeiro
## 3 Escola C           Carlos              Oliveira   mg-Minas Gerais
##   nome_completo_responsavel
## 1                João Silva
## 2              Maria Santos
## 3           Carlos Oliveira
# Utilizando Substring par extrair o estado da escola
dados_educacionais$Estado_abreviado <- substring(dados_educacionais$Estado,
                                                  first=1, last=2)
dados_educacionais
##     Escola Nome_responsavel Sobrenome_responsavel            Estado
## 1 Escola A             João                 Silva   mg-Minas Gerais
## 2 Escola B            Maria                Santos rj-Rio De Janeiro
## 3 Escola C           Carlos              Oliveira   mg-Minas Gerais
##   nome_completo_responsavel Estado_abreviado
## 1                João Silva               mg
## 2              Maria Santos               rj
## 3           Carlos Oliveira               mg
# Transformar coluna estado abreviado em maiusculas
dados_educacionais$Estado_abreviado <- toupper(
  dados_educacionais$Estado_abreviado)
dados_educacionais
##     Escola Nome_responsavel Sobrenome_responsavel            Estado
## 1 Escola A             João                 Silva   mg-Minas Gerais
## 2 Escola B            Maria                Santos rj-Rio De Janeiro
## 3 Escola C           Carlos              Oliveira   mg-Minas Gerais
##   nome_completo_responsavel Estado_abreviado
## 1                João Silva               MG
## 2              Maria Santos               RJ
## 3           Carlos Oliveira               MG

6. Operação com vetores e matrizes

# Limpar o ambiente
rm(list = ls())
# Criando vetores
vetor1 <- c(2,4,6)
vetor2 <- c(1,3,5)
# Somando vetores
soma_vetores <- vetor1 + vetor2
soma_vetores
## [1]  3  7 11
subtracao_vetores <- vetor1 - vetor2
subtracao_vetores
## [1] 1 1 1
produto_escalar <- sum(vetor1*vetor2)
produto_escalar
## [1] 44
multiplicacao_vetores <- vetor1 * vetor2
multiplicacao_vetores
## [1]  2 12 30
vetor3 <- c(3,6,9)
escalar <- 2
multiplicacao <- vetor3 * escalar
multiplicacao
## [1]  6 12 18
divisao <- vetor3 / escalar
divisao
## [1] 1.5 3.0 4.5

6.1 Simulação de calculo com vetores

dados_clientes <- data.frame(
  Clientes = c('Cliente A','Cliente B','Cliente C'),
  Compras_Categoria1 = c(200,300,150),
  Compras_Categoria2 = c(120,180,90)
)
# Adição e subtração