alt text
GET00100 - Estatística I
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_savpara arquivos do SPSS;read_statapara arquivos do Stata;read_saspara 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.