05/set/2018

O que é o R ?

Instalando o R

Tutorial

3º Instalar o package swirl (ensina a utilizar o R)

  • Abrir o R Studio

    • File -> New File -> R Script
  • Comando para instalar o pacote: install.packages("swirl")

  • Comando para acionar a library: library(swirl)

  • Comando para ativar o pacote: swirl()

  • Após isso, seguir os passos que aparecem no Console

***Para rodar um comando é necessário clickar na linha e apertar Ctrl + Enter —

Onde continuar estudando?

Primeiros Passos

Atribuindo valor a uma variável

x <- 2

Removendo variável

rm(x)

Criando um vetor (conjunto de valores)

y <- c(0,1,2,3,4)                   # Escolhendo valores

z <- c(0:4)                         # Cria variáveis de 0 a 4 no vetor

a <- seq(from=0, to=1, length=9)    # Cria uma sequência do 0 ao 1, com 9 dígitos

b <- seq(from=0, to=0.5, length=9)

c <- seq(from=0, to=10, by=2)       # Cria uma sequência do 0 ao 10, de dois em dois

Operações Matemáticas básicas

x + y                   # Adição
x - y                   # Subtração
x * y                   # Multiplicação
x / y                   # Divisão
x ^ y                   # Exponencial
x + y[2]                # Adição de um valor específico de y
x - y[2:4]              # Subtração de valores específicos de y  
sqrt(9)                 # Raiz Quadrada
abs(-1)                 # Módulo ou valor absoluto
abs(1)                  # Módulo ou valor absoluto
log(10)                 # Logaritmo natural
log(10, base = 10)      # Logaritmo base 10
log10(10)               # Também logaritmo de base 10
log(10, base = 3.4076)  # Logaritmo base 3.4076
exp(1)                  # Exponencial
(3 + 3)*0 + 3           # Precedência de operador

Manipulando um Data.Frame

# Criando Data Frame
Data_Frame <- data.frame(Nome_Coluna = c("Conteudo das colunas"), Outra_Coluna = c("Conteúdo da coluna"), 
                         Quantidade_linhas=c(1:10))
View(Data_Frame)

# Criando coluna
Data_Frame$Nova_Coluna <- c(seq(from=0, to=1, length=10))

# Alterando célula em uma coluna
Data_Frame[5,2] <- as.character("Conteúdo Alterado") # Altera o dado da linha 1 e coluna 2

# Removeno coluna
Data_Frame$Nova_Coluna <- NULL

# Adicionando Linha
linha <- data.frame(Nome_Coluna = c("Novo Conteúdo"), Outra_Coluna = c("Novo Conteúdo"), 
                    Quantidade_linhas=11)
Data_Frame <- rbind(Data_Frame, linha) # rbind une os DF por linhas
Data_Frame

# Removendo Linha
Data_Frame[-3,]

# Removendo Data Frame
remove(Data_Frame)

Operações Estatísticas descritiva

Código Efeito
mean(a) Média
var(a) Variância
sd(a) Desvio Padrão
min(a) Valor Mínimo
median(a) Mediana
max(a) Valor Máximo
sum(a) Somatório
summary(a) Mín, 1Q Med, Média, 3Q, e Máx

Importando base de dados (xlsx)

  • Necessário pacote readxl ou outro
install.packages("readxl")
library(readxl)

Nome_DF <- read_xlsx("Caminho/Nome_planilha.xlsx", sheet=2, skip=7)

View(CoopAgro2006NumEstab)

# DF = Data Frame, usado para armazenar tabelas de dados
# sheet seleciona a folha
# skip seleciona a linha de ínicio


# install.packages("xlsx") e install.packages("openxlsx") são outras opções de pacotes

Tratamento do DF

Renomeando colunas

names(CoopAgro2006NumEstab)[1:9] <- c("Cidade","Orientacao Tecnica","Origem 
                                      O.T.","Total","Associado","Coop","Classe","CoopeClasse","N.Associado")



# names(Nome_DF)[] <- c()
# [] = Onde ficará o numero de colunas
# c()  = Onde ficará o novo nome das colunas

Separando linhas em novo DF

CoopAgro2006NumEstabPais = data.frame(CoopAgro2006NumEstab[1,c("Cidade","Orientacao Tecnica",
"Origem O.T.","Total","Associado","Coop","Classe","CoopeClasse","N.Associado")])

# Nome_NovoDF = data.frame(Nome_DF[Linha, Coluna])
# [] Seleciona as linhas que irão ser copiadas, seleciona as colunas que serão copiadas

Removendo linhas de um DF

CoopAgro2006NumEstab <- CoopAgro2006NumEstab[-1:-28, ]  

CoopAgro2006AreaEstab = subset(CoopAgro2006AreaEstab, Cidade!="Fonte: IBGE - Censo Agropecuário")

# Nome_DF <- Nome_DF[-linha, -coluna]
# subset substitui o DF por outro com as linhas selecionas.
# != significa diferente

Filtrando Informações

install.packages("dplyr")
library(dplyr)

# Seleciona cidades com Classe 1 e exibe Cidade e Estado
CoopAgro2006NumEstab %>% filter(Classe==1) %>% select(Cidade,Estado) 

# Seleciona cidades com Classe 1 e 2, e exibe Cidade e Estado 
CoopAgro2006NumEstab %>% filter(Classe %in% c(1, 2)) %>% select(Cidade,Estado)

# Seleciona cidades com Classe 1 e 2, Estado SP e exibe Cidade e Estado
CoopAgro2006NumEstab %>% filter(Classe %in% c(1, 2) & Estado=="SP") %>% select(Cidade,Estado) 

# Funções do pacte Dyplr

# mutate()    Adiciona novas variáveis que são funções de variáveis existentes
# select()    Seleciona variáveis baseadas em seus nomes
# filter()    Seleciona casos baseados em seus valores
# summarise() Reduz multiplos valores em um resumo
# arrange()   Muda a ordem das linhas

Substituindo Valores

  • Para o R realizar operações, os valores devem ser numéricos
# Transformando "-" em 0 
CoopAgro2006NumEstab$Associado[which(CoopAgro2006NumEstab$Associado == "-")] <- 0

# Data_Frame$Coluna[em que(Valor que será alterado)] <- Valor que irá substituir 
  • Caso a coluna esteja em um formato diferente de números
# Transformando Colunas em Números
CoopAgro2006NumEstab$Associado <- as.numeric(CoopAgro2006NumEstab$Associado)

Adicionando Código de Municípios (IBGE)

# Importando .CSV com códigos do IBGE
cod_mun <- read.csv("C:/Users/rtheodoro/Desktop/Curso R - Ricardo/cod_mun.csv",header=T,sep=";")
  • Para unir dois Data.Frames primeiro é preciso deixa-los com os campos iguais
# Deixando tudo maiúsculo
CoopAgro2006NumEstab$Cidade <- str_to_upper(CoopAgro2006NumEstab$Cidade)
# Removendo acentos
CoopAgro2006NumEstab$Cidade <- chartr("ÃÁÂÉÊÍÓÔÕÚÜÇ","AAAEEIOOOUUC", CoopAgro2006NumEstab$Cidade)

# chartr substitui uma letra por outra, deve aparecer na ordem que será substituida

# Substituindo parte das células
CoopAgro2006NumEstab$Cidade <- gsub("D'O", "DO O",CoopAgro2006NumEstab$Cidade)

  • Unindo os Data.Frames
# Remove as colunas desnecessárias
cod_mun$X <- NULL 

# Aplica o MERGE para unir os DF
CoopAgro2006NumEstab <- merge(CoopAgro2006NumEstab,cod_mun, by.x=c("Cidade","Estado"),
                              by.y=c("municipio","uf"))

# Novo_DF <- merge(DF1, DF2, by.x = Colunas do DF1, by.y=Colunas do DF2)

# Verificando as diferenças entre os DF
setdiff(c(cod_mun$municipio),c(CoopAgro2006AreaEstab$Cidade)) 
# Renomenado novas colunas
colnames(CoopAgro2006NumEstab) # Verifica número da coluna
colnames(CoopAgro2006NumEstab)[11] <- c("cod_IBGE_uf")
colnames(CoopAgro2006NumEstab)[12] <- c("cod_IBGE_mun")

Explorando os dados

  • Para obter um resumo da estatística descritiva dos dados
summary(CoopAgro2006NumEstab)             # Min, 1Q, Med, Méd, 3Q, Max
describe(CoopAgro2006NumEstab$Total)      # Pacote Psych, fornece estatística descritiva

# Descreve a Estatística descritiva de determinadas colunas, agrupada por alguma categoria
describeBy(CoopAgro2006NumEstab[,c('Prop_Coop','Freq_abs_UF')],group=CoopAgro2006NumEstab$Estado)

# summary(DF) - mostra todas as colunas
# summary(DF$ColunaEspecifica) - mostra uma coluna específica
  • Criando coluna e somando valores
CoopAgro2006NumEstab <- transform(CoopAgro2006NumEstab,
                        Prop_Coop =  ((CoopAgro2006NumEstab$Coop+CoopAgro2006NumEstab$CoopeClasse)/
                                        CoopAgro2006NumEstab$Total)*100)


# transform = cria a coluna Prop_Coop no DF CoopAgro2006NumEstab.
# A nova coluna terá o valor resultado da equação.

Criando grupos

  • Será criado cinco grupos de acordo com a proporção de Coop. em cada cidade
  • Os grupos serão: 1=(0<20), 2=(>=20 e <40),3=(>=40 e <60),4=(>=60 e <80),5=(>=80 e <=100)
CoopAgro2006NumEstab$Grupo_prop_coop <- c(0)   # Cria a coluna

i <- 1 

for (i in 1:nrow(CoopAgro2006NumEstab)){
  if (CoopAgro2006NumEstab[i,"Prop_Coop"]<20){
     CoopAgro2006NumEstab[i,"Grupo_prop_coop"] <- 1
  } else if (CoopAgro2006NumEstab[i,"Prop_Coop"]>=20 && CoopAgro2006NumEstab[i,"Prop_Coop"]<40 ){
    CoopAgro2006NumEstab[i,"Grupo_prop_coop"] <- 2
  } else if (CoopAgro2006NumEstab[i,"Prop_Coop"]>=40 && CoopAgro2006NumEstab[i,"Prop_Coop"]<60 ){
    CoopAgro2006NumEstab[i,"Grupo_prop_coop"] <- 3
  } else if (CoopAgro2006NumEstab[i,"Prop_Coop"]>=60 && CoopAgro2006NumEstab[i,"Prop_Coop"]<80 ){
    CoopAgro2006NumEstab[i,"Grupo_prop_coop"] <- 4
  } else {
    CoopAgro2006NumEstab[i,"Grupo_prop_coop"] <- 5
  }
} # Atribui os valores para a coluna criada de acordo com as características

# i = 1 indica o número de linhas que será verificada por vez
# o "for" indica que fará a busca da linha 1 até a última linha do DF 
# nrow indica o número de linhas
# if indica a condição necessária para atribuir determinado valor a coluna

Calculando frequências

#Pacote Dyplr

# Calculando Frequencia Absoluta por Estado
CoopAgro2006NumEstab<-CoopAgro2006NumEstab %>% 
  group_by(cod_IBGE_uf) %>%                     # Agrupa por estado
  mutate(Freq_abs_UF=Coop+CoopeClasse)          # Cria a coluna Freq_abs_UF, de acordo com a equação
# Calculando Frequencia Relativa por Estado com vinculo a coop

CoopAgro2006NumEstab<-CoopAgro2006NumEstab %>% 
  group_by(cod_IBGE_uf) %>%         # Agrupa por estado
  mutate(Freq_rel_UF=(Freq_abs_UF)/(sum(Freq_abs_UF))) %>%  
  # Cada Estado = 100%, função sum soma todos os valores da coluna
  mutate(Freq_rel_UF=round(Freq_rel_UF*100, 2))
# Calculando Frequencia Relativa Brasil, participação de cada estado

total <- sum(CoopAgro2006NumEstab$Freq_abs_UF)
CoopAgro2006NumEstab<-CoopAgro2006NumEstab %>% 
  mutate(Freq_rel_Total=(Freq_abs_UF)/total) %>%          # Brasil = 100%
  mutate(Freq_rel_Total=round(Freq_rel_Total*100, 2))     # round serve para arredondar valores

Criando Histograma

  • A função básica para criar um histograma é
hist(CoopAgro2006NumEstab$Grupo_prop_coop)


# Histograma da frequência dos grupos de cooperativas
  • Mas esse histograma pode ser melhorado:
# Cria um DF com a freq. relativa de cada grupo
freq_grupo <- table(CoopAgro2006NumEstab$Grupo_prop_coop) # Freq Absoluta
freq_rel_grupo <- data.frame(100*prop.table(freq_grupo)) # Frequencia Relativa de cada grupo
freq_rel_grupo$Freq


hist(CoopAgro2006NumEstab$Grupo_prop_coop, col="lightblue", border="black", 
     prob=FALSE, main="Histograma: Grupos de Proporção de Cooperativas", 
     ylab="Frequência Absoluta", xlab="Grupos", ylim=c(0,4500), 
     label= paste(round(freq_rel_grupo$Freq,2),"%") , breaks = c(0,seq(1,5,1)))


# col, gera cor das barras e border a cor das bordas
# prob indica se será um gráfico de prob ou não
# ylab e xlab mudam os nomes dos eixos
# label aplica a frequencia sobre cada barra
# breaks tira os espaços entre as barras

  • Adicionando curva ao histograma
histograma <- hist(CoopAgro2006NumEstab$Grupo_prop_coop, col="lightblue", border="black", prob=FALSE,
                   main="Histograma: Grupos de Proporção de Cooperativas", ylab="Frequência Absoluta",
                   xlab="Grupos", ylim=c(0,4500), label= paste(round(freq_rel_grupo$Freq,2),"%"),
                   breaks = c(0,seq(1,5,1)))

xfit<-seq(min(CoopAgro2006NumEstab$Grupo_prop_coop),max(CoopAgro2006NumEstab$Grupo_prop_coop))
yfit<-dnorm(xfit,mean=mean(CoopAgro2006NumEstab$Grupo_prop_coop),sd=sd(CoopAgro2006NumEstab$Grupo_prop_coop))
yfit <- yfit*diff(histograma$mids[1:2])*length(CoopAgro2006NumEstab$Grupo_prop_coop)
lines(xfit, yfit, col="pink", lwd=5) # Curva

# xfit pega a sequencia do mínimo ao máximo da coluna
# yfit cria uma distribuição normal a partir de xfit, com média e desv. padrão dos grupos
# yfit 
# lines traça a linha, eixo x e y

Criando gráficos

  • É necessário o pacote ggplot2
install.packages("ggplot2")
library(ggplot2)

## Freq. Relativa Total (por estado)
ggplot(CoopAgro2006NumEstab, aes(y=CoopAgro2006NumEstab$Freq_rel_Total, x=CoopAgro2006NumEstab$Estado))+
  geom_bar(stat="identity", col="lightblue") +
  labs(title = "Frequência Relativa por Estado",
       x="Estados", y="Frequência Relativa", caption = "Elaborado pelo autor")+
  theme(plot.caption = element_text(hjust = 0))

# ggplot(df, aes(y=Coluna_Eixo_y, x=Coluna_Eixo_x))
# geom_bar é o tipo de gráfico
# labs são os nomes do título, dos eixos e da legenda, respectivamente
# theme é a criação de um tema para o gráfico, nesse caso esta alinhando a legenda à esquerda
## Freq. Abs. por UF
ggplot(CoopAgro2006NumEstab, aes(y=CoopAgro2006NumEstab$Freq_abs_UF, x=CoopAgro2006NumEstab$Estado))+
  geom_bar(stat="identity", colour="lightgreen") + 
  labs(title = "Frequência Absoluta por Estado", x="Estados", y="Frequancia Absoluta", 
       scale_fill_hue('Legenda'))

Alterando cores de um gráfico

  • Necessário o pacote RColorBrewer
    install.packages("RColorBrewer")
    library(RColorBrewer)
    
    # Exibe paleta de cores do R
    display.brewer.all()
    
    # Comando para gerar Degrade, do amarelo ao verde atribuído a variável color
    color <- colorRampPalette(c("yellow", "green")) 
    
    # Comando para gerar Degrade, do azul claro ao verde escuro atribuído a variável color
    color2 <- colorRampPalette(c("lightblue", "darkgreen"))
# Boxplot, paleta de cores  () e tema pronto
ggplot(CoopAgro2006NumEstab, aes(x=reorder(Grupo_prop_coop,Prop_Coop), y=Prop_Coop,fill=Grupo_prop_coop)) +
  geom_boxplot(fill=color(5)) + labs(title = "Box Plot", x="Grupos de Cooperativas por proporção", 
                                     y="Proporção de Cooperativas") + 
  theme_bw() 

# fill = preencher com a cor
# color(5), porque são 5 boxplots
#  theme_bw()  Chama um tema pré-formatado, existem outros, como: classic, light, dark..

  • Criando histograma com ggplot2
ggplot(CoopAgro2006NumEstab, aes(x=Grupo_prop_coop)) +
  geom_histogram(fill=color2(5), binwidth = 1,inherit.aes = TRUE,position = "stack")+
  labs(title = "Histograma", x="Grupos", y="Quantidade", scale_fill_hue('Legenda')) +
  theme(panel.background=element_rect(fill="white"), 
        panel.grid.major=element_line(colour="darkgrey", linetype ="dashed"))