Introdução à Ciência de Dados no R


Aula 04 - Leitura de Dados

Aula 04

Antonio Vinícius Barbosa

10-02-2025


Manipulação de Dados

Manipulação de Dados

(…) o fato da Ciência de Dados existir como uma área se deve a uma falha colossal da estatística. Para mim, o que eu faço é o que é a estatística. É obter insights a partir dos dados utilizando modelagem e visualização. (Hadley Wickham)

Manipulação de Dados

  • A manipulação de dados refere-se à transformação de dados em informação relevante.
  • Parte de uma base “crua” e a transforma até obter uma base de dados analítica.

Manipulação de Dados

Manipulação de Dados

O objetivo desta aula é introduzir os principais pacotes e funções para importar dados para o R.

Antes de começar…

  • É necessário ter acesso aos dados e conhecer o seu formato.
  • Os dados podem estar salvos tanto localmente, em um servidor remoto ou em uma página web.
  • Uma boa prática é evitar salvar um banco de dados com nomes separados por espaços.
  • Evite símbolos especiais no nome dos diretórios ou arquivos, tais como ?$%^&(){}[]<>/...

Organizando o diretório de trabalho

  • O diretório de trabalho (ou workspace) nada mais é do que a pasta no qual inserimos o conteúdo de um projeto.
  • Uma boa prática é criar uma pasta para cada projeto
  • Uma vez criado o diretório de trabalho, devemos indicar ao R qual o caminho até esta pasta

Organizando o diretório de trabalho

# Conhecendo o diretório de trabalho
getwd()

# Definindo o diretório de trabalho
setwd("C:/Users/aviniciusbb/Documentos/ICDR") # No Windows
setwd("/home/aviniciusbb/Documentos/ICDR") # No Linux ou Mac

# Listar objetos no diretório (duas opções)
list.files()
dir() 

Preparando o Diretório de Trabalho

É possível definir no RStudio através da sequência:

Session > Set Working Directory > Choose Directory

Quizz #1

  • Crie um diretório no seu computador para os exercícios da aula.
  • Verifique o seu diretório de trabalho.
  • Mude o diretório de trabalho para o diretório que você criou.
  • Salve todos os arquivos de dados da aula no diretório criado.
  • Verifique o conteúdo do diretório.
05:00

Caminho absoluto vs. Caminho relativo

Existem duas maneiras de definir caminhos para um arquivo ou diretório - caminhos absolutos e caminhos relativos.

  • Um caminho relativo especifica um local a partir do local atual.

  • Um caminho absoluto especifica um local da raiz do sistema de arquivos.

# Caminho absoluto
"/home/aviniciusbb/Documents/ICDR/Data/meu_arquivo.csv"

# Caminho relativo
setwd("/home/aviniciusbb/Documents/ICDR/") 
"Data/meu_arquivo.csv"      

Criando projetos no RStudio

Projetos no RStudio

  • Um projeto corresponde simplesmente a uma pasta no qual todos os elementos todos os arquivos estão associados: dados, documentos, imagens, scripts, …
  • O RStudio possibilita a criação de um ambiente que permite o uso mais integrado desses elementos.
  • Consiste na criação de um arquivo .Rproj dentro de um diretório de trabalho
  • É, também, uma maneira mais simples de evitar ajustar o diretório de trabalho sempre que começamos uma nova tarefa

Projetos no RStudio

A estrutura básica de um projeto é apresenta na árvore abaixo:

Projetos no RStudio

Para criar um novo projeto, fazemos:

File > New Project

Projetos no RStudio

Em seguida, indicamos o tipo específico de projeto. Em geral, criamos um projeto em um novo diretório

Projetos no RStudio

Por fim, damos um nome ao projeto (diretório) e indicamos onde estará localizado no computador:

Projetos no RStudio

  • É possível navegar entre projetos através do ícone do lado direito superior
  • Os arquivos apresentados no painel referem-se aos arquivos do diretório onde o projeto foi criado
  • Todos os caminhos dentro de um projeto são relativos!
  • Os arquivos e scripts previamente utilizados são restaurados ao abrir um projeto

Leitura de Dados

O pacote readr

O pacote readr oferece algumas funcionalidades que facilitam a leitura de dados no formato retangular

O pacote readr

As principais funções são:

  • read_delim(): arquivos separados por qualquer delimitador
  • read_csv(): arquivos separados por vírgula
  • read_csv2(): arquivos separados por ponto-e-vírgula
  • read_tsv(): arquivos delimitados por Tab
  • read_fwf(): arquivos com colunas de tamanho fixo
  • read_table(): arquivos delimitados por espaço em branco

De forma geral, todas as funções são casos especiais da função geral read_delim()

Alguns exemplos

O arquivo abaixo apresenta delimitação por Tabs

Alguns exemplos

O arquivo abaixo apresenta delimitação por vírgulas (comma separated values - CSV)

Alguns exemplos

O arquivo abaixo apresenta delimitação por ponto e vírgula (;)

Ler arquivos .txt ou .csv

Arquivos .txt são arquivos padrões de texto, enquanto que arquivos .csv são arquivos geralmente separados por vírgula (,) ou ponto-e-vírgula (;).

A função a ser utilizada para ler os dados depende da forma em que as variáveis estão delimitadas.

Importar arquivos .txt

Para arquivos .txt simples, utilizamos a função básica read_delim():

# Sintaxe da funcao 
library(readr)
meus_dados <- read_delim(file = "meu_arquivo.txt")

Ler arquivos .txt ou .csv

Alguns argumentos da função são:

  • delim: indica qual o caracter usado para separar as colunas.
  • col_names = TRUE ou FALSE: indica se a primeira linha contém o nome das variáveis
  • col_types: indica o tipo da variável. Se col_type = NULL (default), as variáveis são imputadas automaticamente.
  • skip: indica quantas linhas devem ser ignoradas no começo do arquivo
  • trim_ws: elimina espaços em branco desnecessários antes e depois do valor da variável
  • Ver mais opções através de vignette("readr")

Importar arquivos .txt

Neste exemplo, vamos ler os dados participantes_tab.txt através da função read_delim():

# Ler dados
participantes <- readr::read_delim(
  file = "Dados/participantes_tab.txt", 
  delim = "\t", 
  show_col_types = FALSE
  )


participantes
## # A tibble: 6 × 4
##   Nome      Idade Sexo  Cidade          
##   <chr>     <dbl> <chr> <chr>           
## 1 Maria        45 F     "João Pessoa "  
## 2 João         32 M     "Campina Grande"
## 3 Francisco    18 M     "Sapé"          
## 4 Alice        17 F     "Mariz"         
## 5 Martin       22 M     "Areia"         
## 6 Dora         32 F     "Conde"

Importar arquivos .txt

Para este exemplo, utilizaremos um arquivo que usa | como separador:

# Abrir dados 
individuos_alt <- read_delim(
  "Dados/participantes_barra.txt", 
  delim = "|"
  )

individuos_alt
## # A tibble: 6 × 4
##   Nome      Idade Sexo  Cidade        
##   <chr>     <dbl> <chr> <chr>         
## 1 Maria        45 F     João Pessoa   
## 2 João         32 M     Campina Grande
## 3 Francisco    18 M     Sapé          
## 4 Alice        17 F     Mariz         
## 5 Martin       22 M     Areia         
## 6 Dora         32 F     Conde

Importar arquivos .txt

  • Neste caso, o delimitador de variáveis é o caractere |. Na verdade, qualquer caractere utilizado para separar valores das variáveis deve ser indicado no argumento delim.
  • Uma característica interessante das funções do pacote readr é o fato de lerem diretamente arquivos compactados (.gz, .bz2, .xz, .rar ou .zip)

Importar arquivos .csv

Para ler arquivos .csv, podemos utilizar a mesma função read_delim(), com o argumento delim = ",". No entanto, a função read_csv() lê os dados diretamente:

# Importando os dados
turistas_br_2021 <- read_delim(
  "Dados/chegadas_turistas_2021.csv", 
  delim = ";"
  )

# Checar primeiras linhas
head(turistas_br_2021, 5)
## # A tibble: 5 × 12
##   continente  cod_continente pais      cod_pais uf    cod_uf via   cod_via   ano
##   <chr>                <dbl> <chr>        <dbl> <chr>  <dbl> <chr>   <dbl> <dbl>
## 1 "\xc1frica"              1 "\xc1fri…        2 Acre       1 "A\x…       1  2021
## 2 "\xc1frica"              1 "\xc1fri…        2 Acre       1 "A\x…       1  2021
## 3 "\xc1frica"              1 "\xc1fri…        2 Acre       1 "A\x…       1  2021
## 4 "\xc1frica"              1 "\xc1fri…        2 Acre       1 "A\x…       1  2021
## 5 "\xc1frica"              1 "\xc1fri…        2 Acre       1 "A\x…       1  2021
## # ℹ 3 more variables: mes <chr>, cod_mes <dbl>, chegadas <dbl>

Como vimos, há nesse arquivos problemas de encoding (caracteres especiais não são lidos corretamente).

Importar arquivos .csv

Para resolver problemas com caracteres especiais, fazemos

# Importando os dados
turistas_br_2021 <- read_delim(
  "Dados/chegadas_turistas_2021.csv", 
  delim = ";",
  locale = locale(encoding = "Latin1")
  )

# Checar primeiras linhas
head(turistas_br_2021, 5)
## # A tibble: 5 × 12
##   continente cod_continente pais       cod_pais uf    cod_uf via   cod_via   ano
##   <chr>               <dbl> <chr>         <dbl> <chr>  <dbl> <chr>   <dbl> <dbl>
## 1 África                  1 África do…        2 Acre       1 Aérea       1  2021
## 2 África                  1 África do…        2 Acre       1 Aérea       1  2021
## 3 África                  1 África do…        2 Acre       1 Aérea       1  2021
## 4 África                  1 África do…        2 Acre       1 Aérea       1  2021
## 5 África                  1 África do…        2 Acre       1 Aérea       1  2021
## # ℹ 3 more variables: mes <chr>, cod_mes <dbl>, chegadas <dbl>

Importar arquivos .csv

Considere agora ler um arquivo .csv diretamente de uma página na internet (URL). Os dados apresentam informações sobre o número de queimadas

# URL da pagina 
url <- "https://dadosabertos.ibama.gov.br/dados/RAPP/expEcoMadProdSubprodFl/relatorio.csv"

# Importando os dados
exploracao_madeira <- read_csv(url, show_col_types = FALSE)

# Checar dimensões da base de dados
dim(exploracao_madeira)
  • Função similar é read_csv2(). A diferença é que esta considera colunas separadas por ponto-e-vírgula (;), enquanto que read_csv() considera a separação por vírgula (,).

Quizz #2

Neste exercício, iremos obter os dados históricos do Índice Bovespa (Ibovespa) disponíveis no site da B3 http://www.b3.com.br/pt_br/market-data-e-indices/indices/indices-amplos/indice-ibovespa-ibovespa-estatisticas-historicas.htm

  • Baixar os dados referentes ao segundo semestre de 2023
  • Salvar os dados na sua pasta de trabalho
  • Ajustar o diretório de trabalho
  • Utilizar uma das funções do readr para abrir os dados
  • Ver a estrutura de dados
  • Eliminar linhas desnecessárias
15:00

Lendo arquivos do Microsoft Excel

Um pacote útil para leitura de arquivos do Microsoft Excel (.xls ou .xlsx) é o pacote readxl, desenvolvido por Hadley Wickham (The RStudio Team)

Para mais informações sobre o pacote readxl, ver a documentação em https://readxl.tidyverse.org.

Lendo arquivos Microsoft Excel

A principal função para leitura é a read_excel(). Tal função identifica se a extensão do arquivo é .xls ou .xlsx.

# Instalar pacote
install.packages("readxl")
library(readxl)

# Sintaxe da funcao
data <- read_excel(path, 
                   sheet = NULL, 
                   range = NULL, 
                   skip = 0
                   )

Caso se conheça o formato exato do arquivo, pode-se utilizar as funcões read_xls() ou read_xlsx().

Lendo arquivos Microsoft Excel

Para este exemplo, utilizaremos os dados de Frotas de Veículos por municípios para o último trimestre de 2022. A série histórica está disponível na página do Ministério da Infraestrurura

Lendo arquivos Microsoft Excel

# Importando os dados
frota_2022 <- readxl::read_excel(
  "Dados/frota_munic_modelo_2022.xls",
  skip = 2
)

# Checar primeiras linhas
head(frota_2022)
## # A tibble: 6 × 24
##   UF    MUNICIPIO   TOTAL AUTOMOVEL BONDE CAMINHAO `CAMINHAO TRATOR` CAMINHONETE
##   <chr> <chr>       <dbl>     <dbl> <dbl>    <dbl>             <dbl>       <dbl>
## 1 AC    ACRELANDIA   7553      1711     0      462                38         837
## 2 AC    ASSIS BRAS…  2203       398     0       30                 0         192
## 3 AC    BRASILEIA   12126      2812     0      326               286        1649
## 4 AC    BUJARI       2675       749     0      134                42         329
## 5 AC    CAPIXABA     2710       758     0       95                 6         301
## 6 AC    CRUZEIRO D… 38777      8089     0      752               116        3425
## # ℹ 16 more variables: CAMIONETA <dbl>, `CHASSI PLATAF` <dbl>,
## #   CICLOMOTOR <dbl>, `MICRO-ONIBUS` <dbl>, MOTOCICLETA <dbl>, MOTONETA <dbl>,
## #   ONIBUS <dbl>, QUADRICICLO <dbl>, REBOQUE <dbl>, `SEMI-REBOQUE` <dbl>,
## #   `SIDE-CAR` <dbl>, OUTROS <dbl>, `TRATOR ESTEI` <dbl>, `TRATOR RODAS` <dbl>,
## #   TRICICLO <dbl>, UTILITARIO <dbl>

Lendo arquivos Microsoft Excel

Para selecionar uma aba específica, fazemos:

# Nomes das abas
readxl::excel_sheets("Dados/frota_munic_modelo_2022.xls")
## [1] "DEZEMBRO_2022" "NOVEMBRO_2022" "OUTUBRO_2022"

# Importando os dados
frota_2022 <- readxl::read_excel(
  "Dados/frota_munic_modelo_2022.xls",
  sheet = "NOVEMBRO_2022",
  skip = 2
)
readxl::excel_sheets("Dados/frota_munic_modelo_2022.xls")
## [1] "DEZEMBRO_2022" "NOVEMBRO_2022" "OUTUBRO_2022"
# Checar primeiras linhas
head(frota_2022)
## # A tibble: 6 × 24
##   UF    MUNICIPIO   TOTAL AUTOMOVEL BONDE CAMINHAO `CAMINHAO TRATOR` CAMINHONETE
##   <chr> <chr>       <dbl>     <dbl> <dbl>    <dbl>             <dbl>       <dbl>
## 1 AC    ACRELANDIA   7526      1704     0      462                38         840
## 2 AC    ASSIS BRAS…  2186       395     0       32                 0         190
## 3 AC    BRASILEIA   12055      2799     0      322               282        1639
## 4 AC    BUJARI       2656       744     0      133                41         328
## 5 AC    CAPIXABA     2695       755     0       95                 6         298
## 6 AC    CRUZEIRO D… 38517      8047     0      753               112        3392
## # ℹ 16 more variables: CAMIONETA <dbl>, `CHASSI PLATAF` <dbl>,
## #   CICLOMOTOR <dbl>, `MICRO-ONIBUS` <dbl>, MOTOCICLETA <dbl>, MOTONETA <dbl>,
## #   ONIBUS <dbl>, QUADRICICLO <dbl>, REBOQUE <dbl>, `SEMI-REBOQUE` <dbl>,
## #   `SIDE-CAR` <dbl>, OUTROS <dbl>, `TRATOR ESTEI` <dbl>, `TRATOR RODAS` <dbl>,
## #   TRICICLO <dbl>, UTILITARIO <dbl>

Lendo arquivos JSON

Um importante formato de arquivos é o JSON (Java Script Object Notation).

  • Permite a troca de dados de forma rápida entre sistemas (parsing).
  • Possui um formato independente.
  • Tem o formato de texto, facilmente legível em seus atributos.
  • É a estrutura de dados mais utilizada em APIs (Application Programming Interface)

Lendo arquivos JSON

Alguns exemplos de arquivos JSON são:

Lendo arquivos JSON

Alguns exemplos de arquivos JSON são:

Lendo arquivos JSON

Lendo arquivos JSON

Alguns exemplos de arquivos JSON são:

Lendo arquivos JSON

Uma vez instalado e carregado o pacote rjson, podemos utilizar a função fromJSON():

# Carregar pacote
library(rjson)

# Ler arquivo JSON
json_data <- fromJSON(file = "Dados/jobs.json")
class(json_data)
## [1] "list"

Lendo arquivos JSON

Para converter o objeto em data frame, fazemos

# Converter para data frame
json_df <- as.data.frame(json_data)
json_df
##   ID     Name Salary  StartDate       Dept
## 1  1     Rick 623.30   1/1/2012         IT
## 2  2      Dan 515.20  9/23/2013 Operations
## 3  3 Michelle 611.00 11/15/2014         IT
## 4  4     Ryan 729.00  5/11/2014         HR
## 5  5     Gary 843.25  3/27/2015    Finance
## 6  6     Nina 578.00  5/21/2013         IT
## 7  7    Simon 632.80  7/30/2013 Operations
## 8  8     Guru 722.50  6/17/2014    Finance

O pacote haven

O pacote haven possibilita a leitura e escrita de vários formatos de dados dos principais pacotes estatísticos disponíveis, tais como SPSS, SAS e Stata.

Atualmente, suporta os seguintes arquivos:

  • SAS: read_sas(), read_xpt() e write_xpt()
  • SPSS: read_sav() e write_sav()
  • Stata: read_dta() lê arquivos .dta (até a versão 15), enquanto write_dta() cria arquivos .dta (versões 8-15).

O pacote haven

Seguem alguns exemplos da sintaxe:

# Carregar pacote
library(haven)

# SAS
read_sas("mtcars.sas7bdat")
write_sas(mtcars, "mtcars.sas7bdat")

# SPSS
read_sav("mtcars.sav")
write_sav(mtcars, "mtcars.sav")

# Stata
read_dta("mtcars.dta")
write_dta(mtcars, "mtcars.dta")

Web scraping

O termo web scraping refere-se à prática de coleta de dados web, permitindo a extração de dados diretamente de sites e convertendo-os em informação estruturada para posterior análise.

Web scraping

No R, existem três pacotes principais para a extração de dados da web:

  • httr: realiza requisições web para obtenção das páginas de interesse
  • xml2: estrutura arquivos HTML ou XML de forma eficiente
  • rvest: reune funcionalidade dos dois pacotes anteriores e traz funções específicas

É importante ter conhecimento prévio de HTML

Web scraping

Como exemplo, gostaríamos de baixar os dados da tabela do campeonato brasileiro de 2022.

# Carregar pacote
library(rvest)

# Definir url da página
url <- "https://pt.wikipedia.org/wiki/Campeonato_Brasileiro_de_Futebol_de_2023_-_S%C3%A9rie_A"

# Ler arquivo 
cod_html <- read_html(url)

# Extrair tabela
tabela_html <- html_element(
  cod_html, 
  xpath = '//*[@id="mw-content-text"]/div[1]/table[3]'
  ) 

# Transformar para data frame
brasileirao_2023 <- html_table(tabela_html)

# Visualizar dados
brasileirao_2023
## # A tibble: 20 × 11
##      Pos Equipevde              Pts     J     V     E     D    GP    GC SG   
##    <int> <chr>                <int> <int> <int> <int> <int> <int> <int> <chr>
##  1     1 Palmeiras (C)           70    38    20    10     8    64    33 +31  
##  2     2 Grêmio                  68    38    21     5    12    63    56 +7   
##  3     3 Atlético Mineiro        66    38    19     9    10    52    32 +20  
##  4     4 Flamengo                66    38    19     9    10    56    42 +14  
##  5     5 Botafogo                64    38    18    10    10    58    37 +21  
##  6     6 Red Bull Bragantino     62    38    17    11    10    49    35 +14  
##  7     7 Fluminense              56    38    16     8    14    51    47 +4   
##  8     8 Athletico Paranaense    56    38    14    14    10    51    43 +8   
##  9     9 Internacional           55    38    15    10    13    46    45 +1   
## 10    10 Fortaleza               54    38    15     9    14    45    44 +1   
## 11    11 São Paulo               53    38    14    11    13    40    38 +2   
## 12    12 Cuiabá                  51    38    14     9    15    40    39 +1   
## 13    13 Corinthians             50    38    12    14    12    47    48 −1   
## 14    14 Cruzeiro                47    38    11    14    13    35    32 +3   
## 15    15 Vasco da Gama           45    38    12     9    17    41    51 −10  
## 16    16 Bahia                   44    38    12     8    18    50    53 −3   
## 17    17 Santos                  43    38    11    10    17    39    64 −25  
## 18    18 Goiás                   38    38     9    11    18    36    53 −17  
## 19    19 Coritiba                30    38     8     6    24    41    73 −32  
## 20    20 América Mineiro         24    38     5     9    24    42    81 −39  
## # ℹ 1 more variable: `Classificação ou descenso` <chr>

Salvando dados no formato R

Salvando dados no formato R

Nesta parte, veremos como:

  1. Salvar um objeto no formato R
  2. Salvar múltiplos objetos no formato R
  3. Salvar todo o workspace em um único arquivo

Salvar um objeto

Para salvar uma base de dados do R em um único arquivo, utilizamos a função write_rds(). O objeto pode ser lido através da função read_rds().

# Salvar um objeto em um arquivo
save_rds(objeto, file = "meus_dados.rds")

# Restaurar o objeto
write_rds(file = "meus_dados.rds")

Por exemplo, podemos salvar o objeto mtcars em um arquivo ‘.rds’:

# Salvar um objeto em um arquivo
write_rds(mtcars, file = "mtcars.rds")

# Restaurar o objeto
read_rds(file = "mtcars.rds")

Salvando múltiplos objetos

Para salvar múltiplos objetos em um único arquivo, utilizamos a função save(). O objeto será salvo no formato .Rda ou .RData (mesma extensão). Os objetos podem ser restaurados através da função load()

# Salvar um objeto no formato .RData
save(data1, file = "data.Rda")

# Salvar multiplos objetos
save(data1, data2, file = "data.Rda")

# Carregar os dados
load("data.Rda")

Salvando todo o workspace

Para salvar todos os dados e scripts de um projeto, utilizamos a função save.image(). Sempre ao finalizar o R/RStudio, ele pergunta se gostaríamos de salvar o workspace. Se a resposta for afirmativa, da próxima vez que abrirmos o programa todo o workspace será carregado.

# Salvar o workspace
save.image(file = "meu_workspace.Rda")

# Carregar o workspace
load("meu_workspace.Rda")