alt text

GET00100 - Estatística I

Jony Arrais Pinto Junior

R para Data Science

Conteúdo

  • Universo “arrumado”;
  • Importação de dados (readr, readxl, haven, data.table);

Importando e Exportando dados no R

1 - Universo tidyverse (universo “arrumado”)

Nós (cientista de dados) precisamos falar sobre o tidyverse!

O tidyverse é um conjunto de pacotes do R que auxiliam o estatístico/cientista de dados na execução de diversas tarefas corriqueiras de forma eficiente e unificada. Vamos inicialmente pensar em eficiência no sentido da velocidade de solucionar o problema e não da velocidade de execução de algoritmos. Os pacotes pertencentes a este universo compartilham de uma filosofia, gramática e estrutura de dados, o que permite uma maior integração entre eles.

Se você é novo no tidyverse, o melhor lugar para você aprender a filosofia completa e como tudo se encaixa é o livro R for data science de autoria do Garret Grolemund e do Haddley Wickham.

O tidyverse é considerado um “universo” a parte do R, principalmente porque todas suas ferramentas possuem formas de uso consistentes e funcionam muito bem em conjunto.

Os princípios do tidyverse são:

1 - Eficiência algorítmica vs eficiência de trabalho.

Estamos dizendo que o tempo que o estatísco/cientista de dados gasta pensando em como realizar uma operação é mais importante do que o tempo que o computador gasta para realizar um cálculo.

2 - Tidy data.

É um princípio para arrumação da base de dados que resolve, usualmente, mais de 80% dos problemas reais. O objetivo na arrumação dos dados é extrair e transformar uma base de dados até que ela esteja em formato tidy. Uma base de dados é considerada “tidy” se cada observação é uma linha da base, cada variável é uma coluna da base e cada dado está numa célula da base.

3 - Utilização do operador |> (pipe).

Operador que revolucionou/facilitou a lógica de programar no R.

4 - Aparato mnemônico.

Pacotes baseados em teoria e API consistentes.

5 - Minimalidade e funções puras.

Funções sem efeitos colaterais. Interagem com o mundo por meio de inputs e outputs. Encaixa perfeitamente com o princípio do pipe.

6 - workflow para ciência de dados

2 - Importando dados para o R

O primeiro passo para importarmos um arquivo para o R é fazer com que o mesmo “enxergue” a sua pasta de trabalho.

Como perguntar qual a pasta que o R está “enxergando” no momento?

#Descobrindo qual a pasta de trabalho que o R está "enxergando" neste momento
getwd()

Caso não seja a pasta onde localiza-se o seu arquivo, podemos mudar essa pasta com a função setwd.

#Modificando a pasta de trabalho que o R está "enxergando" neste momento
setwd("PASSAR AQUI O CAMINHO DA SUA PASTA SEMPRE ENTRE ASPAS")

O caminho deve estar SEMPRE entre aspas e as barras devem ser invertidas (caso deseje usar a barra sem ser invertida é preciso duplicá-las).

2.1 - Pacote readr

Um pacote cujo objetivo é um propiciar de modo rápido e amigável a importação de dados retangulares (como .txt, .csv, .tsv, .fwd).

As principais funções deste pacote para importação de dados são:

  • read_table2 - importa arquivos em que as colunas são separadas por espaços em branco. É equivalente a read.table, permite qualquer número de espaços entre colunas.
  • read_table - é similar a read_table2, porém é mais rigorosa, cada linha deve ter o mesmo cumprimento e cada campo está na mesma posição em todas as linhas.
  • read_csv - importa aquivos delimitados por vírgula.
  • read_csv2 - importa arquivos separados por semicolunas (comum em países que usam a “,” como separador decimal)
  • read_tsv - importa arquivos separados por tabs.
  • read_delim - importa arquivos com larguras fixas.

Importando arquivos .txt

Principais argumentos da função read_delim:

  - file - o arquivo a ser importado;

  - col_names - um argumento lógico indicando se o arquivo possui ou não os nomes das variáveis (default = TRUE);

  - delim - argumento que define o delimitador (separador) das colunas (default = NULL);

  - na - qual a codificação usada para dado faltante (default = NA);

  - skip - número de linhas a serem puladas no momento da importação (default = 0);

  - locale - controla vários aspectos como decimal, enconding, entre outros.

Após especificarmos a pasta de trabalho, basta utilizarmos a função read_delim como a seguir.

#Ativando o pacote readr
library(readr)

#Visualizando os argumentos da função table2
args(read_delim)
function (file, delim = NULL, quote = "\"", escape_backslash = FALSE, 
    escape_double = TRUE, col_names = TRUE, col_types = NULL, 
    col_select = NULL, id = NULL, locale = default_locale(), 
    na = c("", "NA"), quoted_na = TRUE, comment = "", trim_ws = FALSE, 
    skip = 0, n_max = Inf, guess_max = min(1000, n_max), name_repair = "unique", 
    num_threads = readr_threads(), progress = show_progress(), 
    show_col_types = should_show_types(), skip_empty_rows = TRUE, 
    lazy = TRUE) 
NULL
#Importando um arquivo .txt
base = read_delim(file = "BaseMunicipioMensal.txt",
                  delim = " ")
Rows: 8188 Columns: 58
── Column specification ────────────────────────────────────────────────────────
Delimiter: " "
dbl (58): fmun_cod, ano, mes, Trimestre, regiao, hom_doloso, lesao_corp_mort...

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#Visualizando o objeto
base
# A tibble: 8,188 × 58
   fmun_cod   ano   mes Trimestre regiao hom_doloso lesao_corp_morte latrocinio
      <dbl> <dbl> <dbl>     <dbl>  <dbl>      <dbl>            <dbl>      <dbl>
 1  3300100  2014     1         1      1         11             9999          0
 2  3300159  2014     1         1      1          0             9999          0
 3  3300209  2014     1         1      1          2                0          0
 4  3300225  2014     1         1      1          0                0          0
 5  3300233  2014     1         1      1          2                0          0
 6  3300258  2014     1         1      1          0                0          0
 7  3300308  2014     1         1      1          1                0          0
 8  3300407  2014     1         1      1          5                0          0
 9  3300456  2014     1         1      2         29                0          0
10  3300506  2014     1         1      1          0                0          0
# … with 8,178 more rows, and 50 more variables: hom_por_interv_policial <dbl>,
#   letalidade_violenta <dbl>, tentat_hom <dbl>, lesao_corp_dolosa <dbl>,
#   estupro <dbl>, hom_culposo <dbl>, lesao_corp_culposa <dbl>,
#   roubo_comercio <dbl>, roubo_residencia <dbl>, roubo_veiculo <dbl>,
#   roubo_carga <dbl>, roubo_transeunte <dbl>, roubo_em_coletivo <dbl>,
#   roubo_banco <dbl>, roubo_cx_eletronico <dbl>, roubo_celular <dbl>,
#   roubo_conducao_saque <dbl>, roubo_apos_saque <dbl>, …

A importação foi realizada de maneira correta?

Avaliem a variável lesao_corp_morte.

Suponham que o responsável pela digitação dos dados nos informou que ele utilizou o código 9999 como um código para dado faltante.

Isso significa que precisamos modificar alguns argumentos da função para que a mesma possa realizar a importação de forma adequada.

#Importando o arquivo txt de forma correta
base_crimes = read_delim(file = "BaseMunicipioMensal.txt", 
                         na = "9999", 
                         col_types = cols(fmun_cod = col_character()))

#Visualizando o objeto 
base_crimes
# A tibble: 8,188 × 58
   fmun_cod   ano   mes Trimestre regiao hom_doloso lesao_corp_morte latrocinio
   <chr>    <dbl> <dbl>     <dbl>  <dbl>      <dbl>            <dbl>      <dbl>
 1 3300100   2014     1         1      1         11               NA          0
 2 3300159   2014     1         1      1          0               NA          0
 3 3300209   2014     1         1      1          2                0          0
 4 3300225   2014     1         1      1          0                0          0
 5 3300233   2014     1         1      1          2                0          0
 6 3300258   2014     1         1      1          0                0          0
 7 3300308   2014     1         1      1          1                0          0
 8 3300407   2014     1         1      1          5                0          0
 9 3300456   2014     1         1      2         29                0          0
10 3300506   2014     1         1      1          0                0          0
# … with 8,178 more rows, and 50 more variables: hom_por_interv_policial <dbl>,
#   letalidade_violenta <dbl>, tentat_hom <dbl>, lesao_corp_dolosa <dbl>,
#   estupro <dbl>, hom_culposo <dbl>, lesao_corp_culposa <dbl>,
#   roubo_comercio <dbl>, roubo_residencia <dbl>, roubo_veiculo <dbl>,
#   roubo_carga <dbl>, roubo_transeunte <dbl>, roubo_em_coletivo <dbl>,
#   roubo_banco <dbl>, roubo_cx_eletronico <dbl>, roubo_celular <dbl>,
#   roubo_conducao_saque <dbl>, roubo_apos_saque <dbl>, …
#Caregando o pacote tibble
library(tibble)

#Visualizando a estrutura do objeto
glimpse(base_crimes)
Rows: 8,188
Columns: 58
$ fmun_cod                   <chr> "3300100", "3300159", "3300209", "3300225",…
$ ano                        <dbl> 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2…
$ mes                        <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
$ Trimestre                  <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
$ regiao                     <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1…
$ hom_doloso                 <dbl> 11, 0, 2, 0, 2, 0, 1, 5, 29, 0, 0, 9, 2, 0,…
$ lesao_corp_morte           <dbl> NA, NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
$ latrocinio                 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ hom_por_interv_policial    <dbl> 1, 0, NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ letalidade_violenta        <dbl> 12, 0, 2, 0, 2, 0, 1, 5, 29, 0, 0, 9, 2, 0,…
$ tentat_hom                 <dbl> 2, 0, 6, 0, 0, 0, 3, 6, 7, 0, 0, 12, 5, 0, …
$ lesao_corp_dolosa          <dbl> 96, 0, 69, 0, 44, 32, 52, 62, 256, 7, 23, 1…
$ estupro                    <dbl> 7, 0, 7, 0, 6, 2, 5, 4, 11, 1, 2, 9, 2, 0, …
$ hom_culposo                <dbl> 4, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 4, 1, 0, 0…
$ lesao_corp_culposa         <dbl> 37, 0, 45, 0, 26, 6, 7, 18, 45, 2, 6, 81, 2…
$ roubo_comercio             <dbl> 4, 0, 3, 0, 0, 0, 1, 9, 10, 0, 1, 8, 1, 0, …
$ roubo_residencia           <dbl> 0, 0, 2, 0, 0, 0, 0, 1, 2, 0, 0, 2, 1, 0, 0…
$ roubo_veiculo              <dbl> 8, 0, 9, 0, 2, 2, 1, 4, 73, 0, 0, 15, 0, 0,…
$ roubo_carga                <dbl> 0, 0, 0, 0, 0, 0, 1, 0, 23, 0, 0, 1, 1, 0, …
$ roubo_transeunte           <dbl> 5, 0, 6, 0, 5, 1, 2, 3, 173, 0, 0, 34, 1, 0…
$ roubo_em_coletivo          <dbl> 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 1, 0, 0, 0…
$ roubo_banco                <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ roubo_cx_eletronico        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ roubo_celular              <dbl> 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0…
$ roubo_conducao_saque       <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ roubo_apos_saque           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0…
$ roubo_bicicleta            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ outros_roubos              <dbl> 5, 0, 2, 0, 20, 6, 2, 1, 14, 2, 0, 118, 3, …
$ total_roubos               <dbl> 23, 0, 23, 0, 12, 6, 7, 18, 307, 2, 1, 103,…
$ furto_veiculos             <dbl> 18, 0, 16, 0, 9, 3, 5, 20, 27, 1, 0, 34, 4,…
$ furto_transeunte           <dbl> 3, 0, 2, 0, 9, 3, 0, 4, 18, 0, 0, 57, 0, 0,…
$ furto_coletivo             <dbl> 3, 0, 1, 0, 2, 0, 1, 0, 3, 1, 0, 6, 1, 1, 0…
$ furto_celular              <dbl> 11, 0, 10, 0, 7, 1, 5, 11, 10, 0, 1, 17, 1,…
$ furto_bicicleta            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ outros_furtos              <dbl> 98, 0, 76, 0, 74, 39, 27, 87, 112, 6, 20, 1…
$ total_furtos               <dbl> 134, 0, 105, 0, 117, 49, 38, 122, 170, 9, 2…
$ sequestro                  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ extorsao                   <dbl> 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0…
$ sequestro_relampago        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0…
$ estelionato                <dbl> 21, 0, 18, 0, 4, 8, 4, 5, 29, 3, 1, 27, 7, …
$ apreensao_drogas           <dbl> 35, 0, 13, 0, 16, 15, 12, 19, 35, 4, 9, 51,…
$ posse_drogas               <dbl> 18, 0, 9, 0, 6, 4, 7, 8, 2, 2, 8, 14, 2, 1,…
$ trafico_drogas             <dbl> 12, 0, 4, 0, 10, 10, 5, 10, 29, 2, 1, 34, 2…
$ apreensao_drogas_sem_autor <dbl> 5, 0, 1, 0, 2, 1, 1, 1, 4, 0, 0, 5, 1, 0, 0…
$ recuperacao_veiculos       <dbl> 9, 0, 4, 0, 2, 2, 2, 11, 91, 0, 0, 26, 0, 0…
$ apf                        <dbl> 28, 0, 34, 0, 26, 7, 19, 28, 64, 1, 3, 80, …
$ aaapai                     <dbl> 6, 0, 5, 0, 8, 1, 3, 1, 15, 0, 2, 28, 1, 0,…
$ cmp                        <dbl> 8, 0, 5, 0, 3, 1, 19, 25, 16, 3, 0, 8, 2, 0…
$ cmba                       <dbl> 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0…
$ ameaca                     <dbl> 98, 0, 91, 0, 46, 26, 56, 54, 231, 11, 27, …
$ pessoas_desaparecidas      <dbl> 13, 0, 10, 0, 0, 0, 0, 2, 22, 1, 0, 7, 2, 0…
$ encontro_cadaver           <dbl> 3, 0, 1, 0, 0, 0, 0, 1, 3, 0, 0, 3, 1, 0, 0…
$ encontro_ossada            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ pol_militares_mortos_serv  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ pol_civis_mortos_serv      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ cvli                       <dbl> 11, 0, 2, 0, 2, 0, 1, 5, 29, 0, 0, 9, 2, 0,…
$ roubo_rua                  <dbl> 7, 0, 7, 0, 6, 1, 2, 3, 182, 0, 0, 35, 1, 0…
$ registro_ocorrencias       <dbl> 561, 0, 480, 0, 309, 176, 248, 430, 1367, 5…
#Calculando medidas descritivas
summary(base_crimes)
   fmun_cod              ano            mes           Trimestre    
 Length:8188        Min.   :2014   Min.   : 1.000   Min.   :1.000  
     regiao        hom_doloso      lesao_corp_morte    latrocinio     
 Min.   :1.000   Min.   :  0.000   Min.   :0.00000   Min.   : 0.0000  
 hom_por_interv_policial letalidade_violenta   tentat_hom     lesao_corp_dolosa
 Min.   : 0.000          Min.   :  0.000     Min.   :  0.00   Min.   :   0.00  
    estupro         hom_culposo     lesao_corp_culposa roubo_comercio   
 Min.   :  0.000   Min.   : 0.000   Min.   :   0.00    Min.   :  0.000  
 roubo_residencia roubo_veiculo      roubo_carga      roubo_transeunte 
 Min.   : 0.000   Min.   :   0.00   Min.   :  0.000   Min.   :   0.00  
 roubo_em_coletivo  roubo_banco      roubo_cx_eletronico roubo_celular    
 Min.   :   0.00   Min.   :0.00000   Min.   :0.00000     Min.   :   0.00  
 roubo_conducao_saque roubo_apos_saque  roubo_bicicleta   outros_roubos   
 Min.   : 0.00000     Min.   : 0.0000   Min.   : 0.0000   Min.   :   0.0  
  total_roubos     furto_veiculos   furto_transeunte  furto_coletivo   
 Min.   :    0.0   Min.   :  0.00   Min.   :   0.00   Min.   :  0.000  
 furto_celular     furto_bicicleta   outros_furtos      total_furtos    
 Min.   :   0.00   Min.   :  0.000   Min.   :   0.00   Min.   :    0.0  
   sequestro           extorsao       sequestro_relampago  estelionato     
 Min.   :0.000000   Min.   :  0.000   Min.   : 0.0000     Min.   :   0.00  
 apreensao_drogas   posse_drogas     trafico_drogas  
 Min.   :   0.00   Min.   :  0.000   Min.   :  0.00  
 apreensao_drogas_sem_autor recuperacao_veiculos      apf         
 Min.   :  0.000            Min.   :   0.00      Min.   :   0.00  
     aaapai             cmp               cmba             ameaca       
 Min.   :  0.000   Min.   :   0.00   Min.   :  0.000   Min.   :   0.00  
 pessoas_desaparecidas encontro_cadaver  encontro_ossada   
 Min.   :  0.000       Min.   : 0.0000   Min.   : 0.00000  
 pol_militares_mortos_serv pol_civis_mortos_serv      cvli        
 Min.   :0.00000           Min.   :0.000000      Min.   :  0.000  
   roubo_rua       registro_ocorrencias
 Min.   :   0.00   Min.   :    0       
 [ reached getOption("max.print") -- omitted 6 rows ]

Qual o problema das medidas resumos apresentadas acima?

Tratando as variáveis qualitativas

#Transformando a variável regiao em um factor
base_crimes$regiao = factor(x = base_crimes$regiao,
                         labels = c("Interior","Baixada Fluminense","Capital","Grande Niterói"))

#Transformando a variável trimestre em um fator
base_crimes$Trimestre = factor(x = base_crimes$Trimestre,
                               labels = c("Primeiro","Segundo","Terceiro","Quarto"))


#Transformando a variável ano em um fator
base_crimes$ano = factor(x = base_crimes$ano)

#Transformando a variável mes em um fator
base_crimes$mes = factor(x = base_crimes$mes)



#Visualizando a base tratada
base_crimes
# A tibble: 8,188 × 58
   fmun_cod ano   mes   Trimestre regiao  hom_doloso lesao_corp_morte latrocinio
   <chr>    <fct> <fct> <fct>     <fct>        <dbl>            <dbl>      <dbl>
 1 3300100  2014  1     Primeiro  Interi…         11               NA          0
 2 3300159  2014  1     Primeiro  Interi…          0               NA          0
 3 3300209  2014  1     Primeiro  Interi…          2                0          0
 4 3300225  2014  1     Primeiro  Interi…          0                0          0
 5 3300233  2014  1     Primeiro  Interi…          2                0          0
 6 3300258  2014  1     Primeiro  Interi…          0                0          0
 7 3300308  2014  1     Primeiro  Interi…          1                0          0
 8 3300407  2014  1     Primeiro  Interi…          5                0          0
 9 3300456  2014  1     Primeiro  Baixad…         29                0          0
10 3300506  2014  1     Primeiro  Interi…          0                0          0
# … with 8,178 more rows, and 50 more variables: hom_por_interv_policial <dbl>,
#   letalidade_violenta <dbl>, tentat_hom <dbl>, lesao_corp_dolosa <dbl>,
#   estupro <dbl>, hom_culposo <dbl>, lesao_corp_culposa <dbl>,
#   roubo_comercio <dbl>, roubo_residencia <dbl>, roubo_veiculo <dbl>,
#   roubo_carga <dbl>, roubo_transeunte <dbl>, roubo_em_coletivo <dbl>,
#   roubo_banco <dbl>, roubo_cx_eletronico <dbl>, roubo_celular <dbl>,
#   roubo_conducao_saque <dbl>, roubo_apos_saque <dbl>, …
#Calculando medidas descritivas
summary(base_crimes)
   fmun_cod              ano            mes          Trimestre   
 Length:8188        2014   :1104   1      : 736   Primeiro:2208  
                regiao       hom_doloso      lesao_corp_morte 
 Interior          :6675   Min.   :  0.000   Min.   :0.00000  
   latrocinio      hom_por_interv_policial letalidade_violenta   tentat_hom    
 Min.   : 0.0000   Min.   : 0.000          Min.   :  0.000     Min.   :  0.00  
 lesao_corp_dolosa    estupro         hom_culposo     lesao_corp_culposa
 Min.   :   0.00   Min.   :  0.000   Min.   : 0.000   Min.   :   0.00   
 roubo_comercio    roubo_residencia roubo_veiculo      roubo_carga     
 Min.   :  0.000   Min.   : 0.000   Min.   :   0.00   Min.   :  0.000  
 roubo_transeunte  roubo_em_coletivo  roubo_banco      roubo_cx_eletronico
 Min.   :   0.00   Min.   :   0.00   Min.   :0.00000   Min.   :0.00000    
 roubo_celular     roubo_conducao_saque roubo_apos_saque  roubo_bicicleta  
 Min.   :   0.00   Min.   : 0.00000     Min.   : 0.0000   Min.   : 0.0000  
 outros_roubos     total_roubos     furto_veiculos   furto_transeunte 
 Min.   :   0.0   Min.   :    0.0   Min.   :  0.00   Min.   :   0.00  
 furto_coletivo    furto_celular     furto_bicicleta   outros_furtos    
 Min.   :  0.000   Min.   :   0.00   Min.   :  0.000   Min.   :   0.00  
  total_furtos       sequestro           extorsao       sequestro_relampago
 Min.   :    0.0   Min.   :0.000000   Min.   :  0.000   Min.   : 0.0000    
  estelionato      apreensao_drogas   posse_drogas     trafico_drogas  
 Min.   :   0.00   Min.   :   0.00   Min.   :  0.000   Min.   :  0.00  
 apreensao_drogas_sem_autor recuperacao_veiculos      apf         
 Min.   :  0.000            Min.   :   0.00      Min.   :   0.00  
     aaapai             cmp               cmba             ameaca       
 Min.   :  0.000   Min.   :   0.00   Min.   :  0.000   Min.   :   0.00  
 pessoas_desaparecidas encontro_cadaver  encontro_ossada   
 Min.   :  0.000       Min.   : 0.0000   Min.   : 0.00000  
 pol_militares_mortos_serv pol_civis_mortos_serv      cvli        
 Min.   :0.00000           Min.   :0.000000      Min.   :  0.000  
   roubo_rua       registro_ocorrencias
 Min.   :   0.00   Min.   :    0       
 [ reached getOption("max.print") -- omitted 6 rows ]

Atividade: Agora tentem importar o arquivo BaseMunicipioMensal_Angra.txt. (suponham que este arquivo possui as mesmas características do arquivo BaseMunicipioMensal.txt) e guardem em um objeto chamado base_crimes_Angra.

#Visualizando o objeto
base_crimes_Angra
# A tibble: 89 × 1
   fmun_codYanoYmesYTrimestreYregiaoYhom_dolosoYlesao_corp_morteYlatrocinioYhom…
   <chr>                                                                        
 1 3300100Y2014Y1Y1Y1Y11Y9999Y0Y1Y12Y2Y96Y7Y4Y37Y4Y0Y8Y0Y5Y1Y0Y0Y1Y0Y0Y0Y5Y23Y1…
 2 3300100Y2014Y2Y1Y1Y7Y0Y9999Y0Y7Y9Y83Y8Y1Y49Y6Y2Y7Y0Y18Y0Y0Y0Y0Y0Y0Y0Y1Y34Y17…
 3 3300100Y2014Y3Y1Y1Y6Y0Y0Y0Y6Y8Y90Y4Y0Y39Y8Y3Y3Y1Y13Y5Y0Y0Y3Y0Y0Y0Y3Y37Y20Y7Y…
 4 3300100Y2014Y4Y2Y1Y5Y0Y0Y0Y5Y7Y63Y3Y5Y37Y3Y0Y6Y0Y12Y4Y0Y0Y0Y0Y0Y0Y1Y26Y12Y3Y…
 5 3300100Y2014Y5Y2Y1Y4Y0Y0Y0Y4Y11Y48Y8Y4Y33Y8Y0Y6Y0Y19Y6Y0Y0Y2Y0Y0Y0Y5Y44Y8Y4Y…
 6 3300100Y2014Y6Y2Y1Y3Y0Y0Y0Y3Y5Y65Y8Y2Y35Y3Y0Y2Y0Y16Y7Y0Y0Y3Y0Y1Y0Y7Y38Y12Y4Y…
 7 3300100Y2014Y7Y3Y1Y4Y0Y0Y0Y4Y7Y64Y11Y1Y28Y4Y0Y4Y2Y14Y5Y0Y0Y1Y0Y0Y0Y4Y32Y8Y4Y…
 8 3300100Y2014Y8Y3Y1Y8Y0Y1Y0Y9Y6Y57Y8Y1Y23Y10Y1Y3Y2Y11Y1Y0Y0Y6Y0Y0Y0Y4Y36Y12Y9…
 9 3300100Y2014Y9Y3Y1Y5Y0Y0Y0Y5Y1Y67Y13Y3Y42Y3Y0Y3Y2Y11Y1Y0Y0Y1Y0Y0Y0Y6Y26Y11Y5…
10 3300100Y2014Y10Y4Y1Y6Y0Y0Y0Y6Y4Y70Y9Y3Y29Y2Y0Y1Y1Y10Y0Y0Y0Y0Y0Y0Y0Y7Y21Y6Y9Y…
# … with 79 more rows

Obviamente problemático, mas como resolvemos isso? Como resolver???

#Importando o arquivo com a função read_delim
base_crimes_Angra = read_delim(file = "BaseMunicipioMensal_Angra.txt", 
                  delim = "Y", 
                  na = "9999", 
                  col_types = cols(fmun_cod = col_character()))
#Visualizando o objeto
base_crimes_Angra
# A tibble: 89 × 58
   fmun_cod   ano   mes Trimestre regiao hom_doloso lesao_corp_morte latrocinio
   <chr>    <dbl> <dbl>     <dbl>  <dbl>      <dbl>            <dbl>      <dbl>
 1 3300100   2014     1         1      1         11               NA          0
 2 3300100   2014     2         1      1          7                0         NA
 3 3300100   2014     3         1      1          6                0          0
 4 3300100   2014     4         2      1          5                0          0
 5 3300100   2014     5         2      1          4                0          0
 6 3300100   2014     6         2      1          3                0          0
 7 3300100   2014     7         3      1          4                0          0
 8 3300100   2014     8         3      1          8                0          1
 9 3300100   2014     9         3      1          5                0          0
10 3300100   2014    10         4      1          6                0          0
# … with 79 more rows, and 50 more variables: hom_por_interv_policial <dbl>,
#   letalidade_violenta <dbl>, tentat_hom <dbl>, lesao_corp_dolosa <dbl>,
#   estupro <dbl>, hom_culposo <dbl>, lesao_corp_culposa <dbl>,
#   roubo_comercio <dbl>, roubo_residencia <dbl>, roubo_veiculo <dbl>,
#   roubo_carga <dbl>, roubo_transeunte <dbl>, roubo_em_coletivo <dbl>,
#   roubo_banco <dbl>, roubo_cx_eletronico <dbl>, roubo_celular <dbl>,
#   roubo_conducao_saque <dbl>, roubo_apos_saque <dbl>, …

Atividade: Agora tentem importar o arquivo dados_municipios.txt. Não foi usado código para dado faltante. Avaliem as característica do arquivo para fazer a importação correta e guardem em um objeto chamado base_muni.

#Visualizando o objeto
base_muni
# A tibble: 10 × 9
   municipio   ivs idhm2010 pop_total  pop_h  pop_m pop_nbranca pop_branca
       <dbl> <dbl>    <dbl>     <dbl>  <dbl>  <dbl>       <dbl>      <dbl>
 1    330010 0.259    0.724    169511  84666  84845       82652      86859
 2    330015 0.211    0.692     10213   5023   5190        2994       7219
 3    330020 0.288    0.718    112008  54283  57725       62916      49092
 4    330022 0.295    0.684     11423   5661   5762        5601       5822
 5    330023 0.192    0.728     27560  13742  13818       13557      14003
 6    330025 0.204    0.733     27715  13627  14088       12285      15430
 7    330030 0.249    0.733     94778  45154  49624       54132      40646
 8    330040 0.233    0.729    177813  85792  92021       86651      91162
 9    330045 0.387    0.684    469332 226757 242575      317494     151838
10    330050 0.262    0.66      25333  12720  12613        7987      17346
# … with 1 more variable: prop_id <dbl>

Importando arquivos .csv

As funções read_csv e read_csv2 leem dados em arquivos .csv.

CSV (comma separeted values)

Muito útil para dados salvos por meio do Excel.

Principais argumentos da função read_csv2:

  - file - o arquivo a ser importado;

  - col_names - um argumento lógico indicando se o arquivo possui ou não os nomes das variáveis (default = TRUE);

  - na - qual a codificação usada para dado faltante (default =c(““, NA));

  - skip - número de linhas a serem puladas no momento da importação (default = 0);

  - locale - controla vários aspectos como decimal, enconding, entre outros.

#Fazendo a leitura de um arquivo .csv
base_crimes_csv = read_csv2(file = "BaseMunicipioMensal.csv",
                        na = "9999",
                        locale = locale(encoding = "latin1"))
ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
Rows: 8188 Columns: 59
── Column specification ────────────────────────────────────────────────────────
Delimiter: ";"
chr  (1): fmun
dbl (58): fmun_cod, ano, mes, Trimestre, regiao, hom_doloso, lesao_corp_mort...

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Visualizando o objeto
base_crimes_csv
# A tibble: 8,188 × 59
   fmun_cod fmun          ano   mes Trimestre regiao hom_doloso lesao_corp_morte
      <dbl> <chr>       <dbl> <dbl>     <dbl>  <dbl>      <dbl>            <dbl>
 1  3300100 Angra dos …  2014     1         1      1         11               NA
 2  3300159 Aperibé      2014     1         1      1          0                0
 3  3300209 Araruama     2014     1         1      1          2                0
 4  3300225 Areal        2014     1         1      1          0                0
 5  3300233 Armação do…  2014     1         1      1          2                0
 6  3300258 Arraial do…  2014     1         1      1          0                0
 7  3300308 Barra do P…  2014     1         1      1          1                0
 8  3300407 Barra Mansa  2014     1         1      1          5                0
 9  3300456 Belford Ro…  2014     1         1      2         29                0
10  3300506 Bom Jardim   2014     1         1      1          0                0
# … with 8,178 more rows, and 51 more variables: latrocinio <dbl>,
#   hom_por_interv_policial <dbl>, letalidade_violenta <dbl>, tentat_hom <dbl>,
#   lesao_corp_dolosa <dbl>, estupro <dbl>, hom_culposo <dbl>,
#   lesao_corp_culposa <dbl>, roubo_comercio <dbl>, roubo_residencia <dbl>,
#   roubo_veiculo <dbl>, roubo_carga <dbl>, roubo_transeunte <dbl>,
#   roubo_em_coletivo <dbl>, roubo_banco <dbl>, roubo_cx_eletronico <dbl>,
#   roubo_celular <dbl>, roubo_conducao_saque <dbl>, roubo_apos_saque <dbl>, …

2.2 - Pacote readxl

A função read_excel importa dados em arquivos .xls e .xlsx.

Principais argumentos da função read_excel:

  - path - o arquivo a ser importado;

  - sheet - a planilha a ser importada;

  - col_names - um argumento lógico indicando se o arquivo possui ou não os nomes das variáveis (default = TRUE);

  - skip - número de linhas a serem puladas no momento da importação (default = 0);

  - na - qual a codificação usada para dado faltante (default = NA).

# Carregando o pacote readxl
library(readxl)

#Fazendo a leitura de um arquivo .xlsx
base_crimes_xlsx = read_excel(path = "BaseMunicipioMensal.xlsx", 
                         sheet = 1,
                         na = "9999")
# Visualizando o objeto
base_crimes_xlsx
# A tibble: 8,188 × 59
   fmun_cod fmun          ano   mes Trimestre regiao hom_doloso lesao_corp_morte
      <dbl> <chr>       <dbl> <dbl>     <dbl>  <dbl>      <dbl>            <dbl>
 1  3300100 Angra dos …  2014     1         1      1         11               NA
 2  3300159 AperibÈ      2014     1         1      1          0                0
 3  3300209 Araruama     2014     1         1      1          2                0
 4  3300225 Areal        2014     1         1      1          0                0
 5  3300233 ArmaÁ„o do…  2014     1         1      1          2                0
 6  3300258 Arraial do…  2014     1         1      1          0                0
 7  3300308 Barra do P…  2014     1         1      1          1                0
 8  3300407 Barra Mansa  2014     1         1      1          5                0
 9  3300456 Belford Ro…  2014     1         1      2         29                0
10  3300506 Bom Jardim   2014     1         1      1          0                0
# … with 8,178 more rows, and 51 more variables: latrocinio <dbl>,
#   hom_por_interv_policial <dbl>, letalidade_violenta <dbl>, tentat_hom <dbl>,
#   lesao_corp_dolosa <dbl>, estupro <dbl>, hom_culposo <dbl>,
#   lesao_corp_culposa <dbl>, roubo_comercio <dbl>, roubo_residencia <dbl>,
#   roubo_veiculo <dbl>, roubo_carga <dbl>, roubo_transeunte <dbl>,
#   roubo_em_coletivo <dbl>, roubo_banco <dbl>, roubo_cx_eletronico <dbl>,
#   roubo_celular <dbl>, roubo_conducao_saque <dbl>, roubo_apos_saque <dbl>, …

2.3 - Pacote haven

É possível ler dados diretamente de outros formatos que não seja texto (ASCII). Isto em geral é mais eficiente e requer menos memória do que converter para formato texto. Há funções para importar dados diretamente do SAS, SPSS e Stata.

A seguir serão listadas algumas destas funções

  • read_sav para arquivos do SPSS;
  • read_stata para arquivos do Stata;
  • read_sas para arquivos do SAS;
# Carregando o pacote haven
library(haven)

3 - Pacote data.table:

O pacote data.table é um pacote que fornece uma versão melhorada de data.frames (pense em um data.table como uma versão avançada do data.frame), bem como um conjunto de ferramentas para dividir, aplicar e combinar dados. Além disso o pacote disponibiliza uma função muito eficaz para importação de dados em diversos formatos. Tudo isso com baixo tempo de processamento e uso eficiente da memória (neste caso memória RAM).

#Carregando o pacote data.table
library(data.table)

#Importando um arquivo com a funcao fread
base_voos = fread("Base voos.txt")

#Verificando a classe
class(base_voos)
[1] "data.table" "data.frame"
#Visualizando o objeto 
base_voos
        Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
     1: 2011     1          1         6    1400    1500            AA       428
     2: 2011     1          2         7    1401    1501            AA       428
     3: 2011     1          3         1    1352    1502            AA       428
        TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin Dest
     1:  N576AA                60      40      -10        0    IAH  DFW
     2:  N557AA                60      45       -9        1    IAH  DFW
     3:  N541AA                70      48       -8       -8    IAH  DFW
        Distance TaxiIn TaxiOut Cancelled CancellationCode Diverted
     1:      224      7      13         0                         0
     2:      224      6       9         0                         0
     3:      224      5      17         0                         0
 [ reached getOption("max.print") -- omitted 8 rows ]

4 - Exportando dados do R

Após realizar as modificações na base de dados, podemos estar interessados em salvar a base modificada no nosso computador. Para isso, temos diversas opções, dependendo da extensão que desejarmos que o nosso arquivo tenha:

Principais argumentos da família de funções write_:

  - x - o arquivo a ser exportado;

  - path - nome com o qual o arquivo será salvo (não esquecer a extensão .xxx);

#Exportando o arquivo em .csv
write_excel_csv2(x = base_crimes,
                 path = "Base crimes alterada.csv")

#Exportando o arquivo em .txt
write_delim(x = base_crimes,
            path = "Base crimes alterada.txt")

#Exportando o arquivo em .sav
write_sav(data = base_crimes,
            path = "Base crimes alterada.sav")

5 - Extensão RDS

Ao salvarmos o arquivo como uma extensão .rds, ele cria uma versão serializada do conjunto de dados e, em seguida, salva-o com uma compressão, o que diminui o tamanho e o tempo necessário para a leitura do mesmo.

Principais argumentos da função write_rds:

  - x - o arquivo a ser exportado;

  - path - nome com o qual o arquivo será salvo (não esquecer a extensão .rds);

  - compress - escolher o tipo de compressão a ser aplicada (default = none);

#Salvando a base Escolhas
write_rds(x = base_voos,
          path = "Voos.rds",
          compress = "gz")
#Importando um arquivo .rds
base_rds = read_rds("Voos.rds")

#Visualizando o objeto
base_rds
         Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier
      1: 2011     1          1         6    1400    1500            AA
      2: 2011     1          2         7    1401    1501            AA
      3: 2011     1          3         1    1352    1502            AA
         FlightNum TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin
      1:       428  N576AA                60      40      -10        0    IAH
      2:       428  N557AA                60      45       -9        1    IAH
      3:       428  N541AA                70      48       -8       -8    IAH
         Dest Distance TaxiIn TaxiOut Cancelled CancellationCode Diverted
      1:  DFW      224      7      13         0             <NA>        0
      2:  DFW      224      6       9         0             <NA>        0
      3:  DFW      224      5      17         0             <NA>        0
 [ reached getOption("max.print") -- omitted 8 rows ]

Atividade: Faça a importação do arquivo dados_municipios.csv e guarde num objeto chamado dados_municipal.