Transformação de Dados e Criação de Gráficos no R

Author

Prof. Letícia Raposo

Transformando os dados no R

O dplyr é um pacote essencial para a transformação de dados no R, oferecendo uma combinação elegante de simplicidade e eficiência.

As principais funções do dplyr são:

  • select(): seleciona colunas
  • arrange(): ordena a base
  • filter(): filtra linhas
  • mutate(): cria/modifica colunas
  • group_by(): agrupa a base
  • summarise(): sumariza a base

A utilização é facilitada pelo operador %>% (pipe).

As principais vantagens de usar o dplyr em vez das funções básicas do R são:

  • 🔄 Torna a manipulação de dados uma tarefa muito mais simples.
  • 😀 O código se torna mais intuitivo e fácil de ler.
  • ⚡ O dplyr usa C e C++ em grande parte de suas funções, o que geralmente resulta em um código mais rápido.
  • 💾 É possível trabalhar com diferentes fontes de dados, como bancos de dados relacionais (SQL) e data.table.

select()

library(dplyr)
library(titanic)

head(titanic_train)
  PassengerId Survived Pclass
1           1        0      3
2           2        1      1
3           3        1      3
4           4        1      1
5           5        0      3
6           6        0      3
                                                 Name    Sex Age SibSp Parch
1                             Braund, Mr. Owen Harris   male  22     1     0
2 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female  38     1     0
3                              Heikkinen, Miss. Laina female  26     0     0
4        Futrelle, Mrs. Jacques Heath (Lily May Peel) female  35     1     0
5                            Allen, Mr. William Henry   male  35     0     0
6                                    Moran, Mr. James   male  NA     0     0
            Ticket    Fare Cabin Embarked
1        A/5 21171  7.2500              S
2         PC 17599 71.2833   C85        C
3 STON/O2. 3101282  7.9250              S
4           113803 53.1000  C123        S
5           373450  8.0500              S
6           330877  8.4583              Q
# Selecionar as colunas "Survived" e "Sex" do dataframe 
t1 <- titanic_train %>% select(Survived, Sex)
# Selecionar todas as colunas que começam com "Nam" do dataframe 
t2 <- titanic_train %>% select(starts_with("Nam"))
# Selecionar todas as colunas que terminam com "ved" do dataframe 
t3 <- titanic_train %>% select(ends_with("ved"))
# Selecionar todas as colunas que contêm "Age" no nome do dataframe 
t4 <- titanic_train %>% select(contains("Age"))
# Excluir as colunas Name e Sex
t5 <- titanic_train %>% select(-Name, -Sex)
# Renomear a coluna "Name" para "nome_completo" do dataframe df
t6 <- titanic_train %>% select(nome_completo = Name)
# Selecionar todas as colunas do dataframe entre as colunas "Sex" e "Embarked"
t7 <- titanic_train %>% select(Sex:Embarked)

arrange()

# Ordenar o dataframe pela coluna "Age" em ordem crescente
t8 <- titanic_train %>% arrange(Age)
# Ordenar o dataframe pela coluna "Fare" em ordem decrescente
t9 <- titanic_train %>% arrange(desc(Fare))
# Ordenar o dataframe primeiro pela coluna "Age" em ordem crescente e, em seguida, pela coluna "Fare" em ordem crescente
t10 <- titanic_train %>% arrange(Age, Fare)
# Ordenar o dataframe pela coluna "Namee" em ordem alfabética ignorando letras maiúsculas/minúsculas
library(stringr)
t12 <- titanic_train %>% arrange(str_to_lower(Name))

filter()

# Filtrar o dataframe para mostrar apenas linhas onde a coluna "Age" seja maior que 18
t13 <- titanic_train %>% filter(Age > 18)
# Filtrar o dataframe para mostrar apenas linhas onde a coluna "Age" seja maior que 18 e a coluna "Fare" seja menor que 100
t14 <- titanic_train %>% filter(Age > 18 & Fare < 100)
# Filtrar o dataframe para mostrar apenas linhas onde a coluna "Embaked" seja "C" ou "Q"
t15 <- titanic_train %>% filter(Embarked == "C" | Embarked == "Q")
# # Filtrar o dataframe df para mostrar apenas linhas onde a coluna "nome" contenha a palavra "João"
t16 <- titanic_train %>% filter(grepl("Maria", Name))

mutate()

# Criar uma nova coluna "Age2" no dataframe com o dobro dos valores da coluna "Age"
t17 <- titanic_train %>% mutate(Age2 = Age * 2)
# Criar uma nova coluna "categoria" no dataframe, com base na coluna "Age"
t18 <- titanic_train %>% mutate(categoria = ifelse(Age < 18, "Menor de idade", "Maior de idade"))
# Criar uma nova coluna "tarifa_individual" no dataframe com base no numero de passageiros
t19 <- titanic_train %>% mutate(tarifa_individual = Fare/(Parch+SibSp+1))

group_by() e summarise()

# Agrupar o dataframe pela coluna "Sex" e calcular a frequencia de cada categoria
titanic_train %>% group_by(Sex) %>% summarise(freq = n())
# A tibble: 2 × 2
  Sex     freq
  <chr>  <int>
1 female   314
2 male     577
# Agrupar o dataframe pela coluna "Sex" e calcular a soma das tarifas pagas por cada grupo 
titanic_train %>% group_by(Sex) %>% summarise(soma = sum(Fare))
# A tibble: 2 × 2
  Sex      soma
  <chr>   <dbl>
1 female 13967.
2 male   14727.
# Agrupar o dataframe pela coluna "Sex" e calcular a media das idiades de caga grupo
titanic_train %>% group_by(Sex) %>% summarise(idade_media = mean(Age, na.rm = T))
# A tibble: 2 × 2
  Sex    idade_media
  <chr>        <dbl>
1 female        27.9
2 male          30.7
# Calcular o mínimo e máximo da coluna "Fare" no dataframe
titanic_train %>% summarise(min_tarifa = min(Fare), max_tarifa = max(Fare))
  min_tarifa max_tarifa
1          0   512.3292
# Calcular o mínimo e máximo da coluna "Fare" no dataframe agrupado pela coluna "Survived"
titanic_train %>% group_by(Survived) %>% summarise(min_tarifa = min(Fare), max_tarifa = max(Fare))
# A tibble: 2 × 3
  Survived min_tarifa max_tarifa
     <int>      <dbl>      <dbl>
1        0          0       263 
2        1          0       512.
# Pegando as colunas Sex e Survived e Age, filtrando apenas as pessoas com menos de 5 anos, transformando a idade para dias, agrupando por Sex e Survived e calculando a idade mediana de cada grupo
titanic_train %>% select(Sex, Survived, Age) %>%
  filter(Age < 5) %>% mutate(idade_dias = Age * 365) %>%
  group_by(Sex, Survived) %>%
  summarise(mediana_idade = median(idade_dias, na.rm = T))
# A tibble: 4 × 3
# Groups:   Sex [2]
  Sex    Survived mediana_idade
  <chr>     <int>         <dbl>
1 female        0          730 
2 female        1          912.
3 male          0          730 
4 male          1          365 

Gerando gráficos ggplot de forma simples

O pacote “esquisse” é um pacote do R que oferece uma interface gráfica interativa para a criação de gráficos usando a gramática de gráficos do pacote “ggplot2”. Ele foi desenvolvido para facilitar a criação e personalização de gráficos de maneira intuitiva e visual.

Com o pacote “esquisse”, você pode criar uma variedade de tipos de gráficos, como gráficos de barras, gráficos de dispersão, gráficos de linhas e muito mais. Ele fornece uma interface de usuário amigável, onde você pode interagir com o gráfico em tempo real, ajustando parâmetros, selecionando variáveis e alterando a estética visual.

Algumas das principais funcionalidades do pacote “esquisse” incluem:

  • ✨ Interface gráfica interativa: permite criar e personalizar gráficos de forma visual e intuitiva.
  • 🔄 Pré-visualização em tempo real: à medida que você faz alterações nas configurações do gráfico, a visualização é atualizada instantaneamente, permitindo uma rápida iteração.
  • 🎨 Opções de personalização: você pode ajustar várias propriedades do gráfico, como cores, títulos, rótulos, escalas e muito mais.
  • 🔍 Seleção de variáveis: é possível escolher as variáveis do seu conjunto de dados para mapear em diferentes elementos do gráfico.
  • 🔗 Compatibilidade com ggplot2: o pacote “esquisse” gera código ggplot2 por trás dos panos, o que significa que você pode salvar o código gerado e modificá-lo posteriormente.

Os gráficos abaixo foram feitos pela interface do esquisse, que fornece o código escrito em linguagem R:

library(dplyr)
library(ggplot2)
library(hrbrthemes)
t10 %>%
  mutate(Survived = as.factor(Survived)) %>%
  filter(!is.na(Age)) %>%
  filter(!(Embarked %in% "")) %>%
  ggplot() +
  aes(x = "", y = Age, fill = Survived) +
  geom_boxplot() +
  scale_fill_brewer(palette = "Set1", direction = 1) +
  labs(x = " ", y = "Idade (anos)", fill = "Sobrevivência") +
  theme_minimal() +
  facet_wrap(vars(Sex))

library(dplyr)
library(ggplot2)
library(hrbrthemes)
t10 %>%
  mutate(Survived = as.factor(Survived)) %>%
  mutate(Sex = as.factor(Sex)) %>%
 filter(!(Embarked %in% "")) %>%
 ggplot() +
  aes(x = Sex, fill = Survived) +
  geom_bar(position = "fill") +
  scale_fill_brewer(palette = "Set1", direction = 1) +
  labs(y = "Frequência relativa", fill = "Sobrevivência") +
  theme_minimal() +
  facet_wrap(vars(Pclass))

O pacote corrplot

library(corrplot)
M <- cor(iris[,-5])

# Gera um gráfico de matriz de correlação usando a matriz "M" e o método padrão de plotagem
corrplot(M)

# Gera um gráfico de matriz de correlação exibindo os valores numéricos nas células
corrplot(M, method = 'number')

# Gera um gráfico de matriz de correlação com cores representando a magnitude da correlação e ordem alfabética das variáveis
corrplot(M, method = 'color', order = 'alphabet')

# Gera um gráfico de matriz de correlação com ordem das variáveis definida pela estatística de eficiência de agrupamento (AOE)
corrplot(M, order = 'AOE')

# Gera um gráfico de matriz de correlação com sombra representando a magnitude da correlação, ordem definida por AOE e diagonal oculta
corrplot(M, method = 'shade', order = 'AOE', diag = FALSE)

# Gera um gráfico de matriz de correlação com exibição quadrada da magnitude da correlação, apenas parte inferior exibida e diagonal oculta
corrplot(M, method = 'square', type = 'lower', diag = FALSE)

# Gera um gráfico de matriz de correlação mista com sombra na parte inferior e gráficos de setores na parte superior, ordem definida por hclust
corrplot.mixed(M, lower = 'shade', upper = 'pie')

# Gera um gráfico de matriz de correlação, coeficientes em preto, texto na diagonal e legenda à direita sem exibição da cor
corrplot(M, addCoef.col = 'black', tl.pos = 'd', cl.pos = 'n', col = COL2('PiYG'))