Introdução

Introdução

Em qualquer projeto de análise de dados, é comum que os dados estejam dispostos em arquivos do tipo .csv. Como inseri-los no R?1 Para isso, vamos usar um pacote específico do tidyverse, o readr. Embora o R base venha com funções para isso, as do pacote readr já retornam diretamente tibbles, são mais rápidas e nos informam com barras de progresso quanto tempo falta para ler o objeto.2

library(tidyverse)
# ou alternativamente
library(readr)

Introdução

As funções mais básicas:

  • read_csv()lê arquivos com separação com vírgulas ,.
  • read_csv2() lê arquivos separados com ;.
  • read_delim() lê arquivos com qualquer tipo de separação.
  • read_fwf() lê arquivos com distância fixa.
  • read_table() faz isso com arquivos separados por espaços em braco - muito comum para bases disponibilizadas em extensão .txt.
  • read_log() lê arquivos em estilo Apache de logs

A função read_csv()

A função read_csv()

Abaixo, vemos um exemplo de utilizaçaõ da função read_csv().

heights <- read_csv("heights.csv")

A função read_csv()

Se você colocar o objeto heights no Console, verá que o output dele é o de um tibble

heights
## # A tibble: 1,192 x 6
##     earn height sex       ed   age race    
##    <dbl>  <dbl> <chr>  <dbl> <dbl> <chr>   
##  1 50000   74.4 male      16    45 white   
##  2 60000   65.5 female    16    58 white   
##  3 30000   63.6 female    16    29 white   
##  4 50000   63.1 female    16    91 other   
##  5 51000   63.4 female    17    39 white   
##  6  9000   64.4 female    15    26 white   
##  7 29000   61.7 female    12    49 white   
##  8 32000   72.7 male      17    46 white   
##  9  2000   72.0 male      15    21 hispanic
## 10 27000   72.2 male      12    26 white   
## # … with 1,182 more rows

Usando argumentos da função read_csv()

Lembre-se que você sempre poderá utilizar ?read_csv para consultar os argumentos da função - ou de qualquer função, diga-se, do R! Vamos usar abaixo alguns dos mais comuns.

mtcars <- read_csv(readr_example("mtcars.csv"), col_types = 
  cols(
    mpg = col_double(),
    cyl = col_integer(),
    disp = col_double(),
    hp = col_integer(),
    drat = col_double(),
    vs = col_integer(),
    wt = col_double(),
    qsec = col_double(),
    am = col_integer(),
    gear = col_integer(),
    carb = col_integer()
  )
)

Usando argumentos da função read_csv()

sidra = read_csv2('sidra.csv', skip=5,
                  col_names = c('mes', 'vendas', 'vendas_sa', 
                                'receita', 'receita_sa'),
                  col_types = 
                     cols(
                       mes = col_date(format='%d/%m/%Y'),
                       vendas = col_double(),
                       vendas_sa = col_double(),
                       receita = col_double(),
                       receita_sa = col_double()))

Analisando um vetor

Analisando um vetor

Agora que conseguimos importar nossos primeiros arquivos para o R, vamos ver um pouco sobre como o R analisa um vetor que contém um character e retorna um vetor mais especializado, como logical, integer ou date. Faremos isso através das funções parse_*().

str(parse_logical(c('TRUE', 'FALSE', 'NA')))
##  logi [1:3] TRUE FALSE NA

Analisando um vetor

str(parse_date(c('2010-01-01', '1979-10-14')))
##  Date[1:2], format: "2010-01-01" "1979-10-14"

Analisando um vetor

parse_integer(c('1', '231', '.', '456'), na='.')
## [1]   1 231  NA 456

Analisando um vetor

Usar as funções parse_*() é uma maneira de entender como o pacote readr lida com diferentes imputs na hora da importação de dados. Veremos cada um dos casos.

Números

Números

Há alguns problemas ao analisar um vetor que contém números. Dentre os mais comuns:

  • No Brasil, diferentemente dos Estados Unidos, escrevemos a parte decimal com , ao invés de .. De forma a ter maior controle, às vezes é preciso especificar isso ao ler um vetor.
parse_double('1.23')
## [1] 1.23
parse_double('1,23', locale = locale(decimal_mark = ','))
## [1] 1.23

Números

  • Números são com muita frequência seguidos de caracteres especiais como $ ou %.
parse_number('$100')
## [1] 100
parse_number('20%')
## [1] 20

Números

Às vezes, números contém grupos de caracteres, de modo a tornar mais fácil de lê-los.

parse_number('1.200,86', locale = locale(decimal_mark = ',',
                                         grouping_mark = '.'))
## [1] 1200.86

Strings

Strings

Vamos agora ver como analisar vetores que contenham caracteres ou strings. Para isso, podemos utilizar a função parse_character. O problema com strings é que existem várias formas de representá-los. Para entender melhor, vamos começar com o exemplo abaixo.

charToRaw('Seção')
## [1] 53 65 c3 a7 c3 a3 6f

Strings

Cada número hexadecimal representa um byte de informação: 53 é o S. A relação entre o número hexadecimal e o caractere é chamado de encoding. O problema é quando o idioma não é o inglês, como no nosso caso. O pacote readr irá sempre assumir como default que o arquivo está com encoding UTF-8 e acabará lendo o vetor que contenha caracteres especiais de forma errada. Para resolver isso, podemos fazer como no código abaixo.

parse_character('Seção', locale = locale(encoding = 'Latin1'))
## [1] "Seção"

Strings

subitem = read.csv2("subitem.csv")
subitem
##                                              subitem variacao   peso
## 1                                      1101002.Arroz    -0.41 0.5808
## 2                      1101051.Feij\xe3o - mulatinho    17.05 0.0262
## 3                          1101052.Feij\xe3o - preto    12.55 0.0824
## 4            1101053.Feij\xe3o - macassar (fradinho)     9.45 0.0301
## 5               1101073.Feij\xe3o - carioca (rajado)    12.93 0.2796
## 6                         1101075.Feij\xe3o - branco    29.25 0.0020
## 7                           1102001.Farinha de arroz    -4.73 0.0131
## 8                                1102006.Macarr\xe3o     1.13 0.2831
## 9                           1102008.Fub\xe1 de milho     1.02 0.0280
## 10                            1102009.Amido de milho     0.06 0.0043
## 11                           1102010.Flocos de milho     1.40 0.0060
## 12                          1102012.Farinha de trigo     0.70 0.0796
## 13                        1102013.Farinha vitaminada     3.30 0.0083
## 14                       1102023.Farinha de mandioca     2.57 0.1457
## 15                       1102029.Massa semipreparada     0.89 0.0938
## 16                            1103003.Batata-inglesa    21.11 0.2661
## 17                                    1103004.Inhame     3.81 0.0089
## 18                          1103005.Mandioca (aipim)    -1.34 0.0107
## 19                                1103017.Ab\xf3bora    -1.01 0.0127
## 20                               1103026.Piment\xe3o    12.97 0.0061
## 21                                    1103027.Quiabo    -8.29 0.0034
## 22                                    1103028.Tomate    31.84 0.2356
## 23                                    1103043.Cebola     5.38 0.1477
## 24                                   1103044.Cenoura     4.07 0.0620
## 25               1103046.Mandioquinha (batata-baroa)     4.68 0.0101
## 26                     1104003.A\xe7\xfacar refinado    -1.18 0.1043
## 27                      1104004.A\xe7\xfacar cristal    -1.00 0.2672
## 28                                     1104018.Balas     0.94 0.0169
## 29               1104023.Chocolate em barra e bombom    -3.59 0.1264
## 30                                   1104032.Sorvete     0.51 0.1151
## 31         1104052.Chocolate e achocolatado em p\xf3    -0.21 0.1513
## 32                   1104060.Doce de frutas em pasta    -0.03 0.0044
## 33                                    1105001.Alface     4.77 0.1242
## 34                                   1105004.Coentro     0.34 0.0111
## 35                                     1105005.Couve     2.84 0.0204
## 36                                1105006.Couve-flor     6.11 0.0051
## 37                                   1105010.Repolho    15.36 0.0352
## 38                              1105012.Cheiro-verde     5.02 0.0428
## 39                                 1105013.Agri\xe3o     4.05 0.0002
## 40                               1105019.Br\xf3colis     6.74 0.0178
## 41                           1106001.Banana-da-terra    -1.50 0.0120
## 42                                   1106003.Abacaxi   -11.02 0.0353
## 43                                   1106004.Abacate   -11.58 0.0013
## 44                           1106005.Banana - d'agua    13.13 0.0885
## 45                       1106006.Banana - ma\xe7\xe3    -2.67 0.0044
## 46                            1106008.Banana - prata     4.86 0.1820
## 47                         1106011.Laranja - ba\xeda    -1.19 0.0101
## 48                                  1106015.Lim\xe3o    -7.52 0.0018
## 49                                1106017.Ma\xe7\xe3    -6.29 0.1587
## 50                                  1106018.Mam\xe3o    18.52 0.0973
## 51                                     1106019.Manga    21.21 0.0123
## 52                               1106020.Maracuj\xe1    16.70 0.0054
## 53                                  1106021.Melancia    -0.59 0.0621
## 54                                      1106023.Pera    -4.71 0.0229
## 55                                 1106027.Tangerina     7.02 0.1242
## 56                                       1106028.Uva    -2.17 0.0836
## 57                            1106039.Laranja - pera     7.57 0.1708
## 58                                   1106051.Morango     5.31 0.0110
## 59                                    1106084.Goiaba    -5.90 0.0024
## 60                                 1107009.F\xedgado    -0.55 0.0258
## 61                            1107018.Carne de porco     0.56 0.2049
## 62                         1107031.Carne de carneiro     0.18 0.0075
## 63                             1107084.Contrafil\xe9    -1.23 0.3559
## 64                            1107085.Fil\xe9-mignon     1.83 0.0518
## 65                          1107087.Ch\xe3 de dentro     0.48 0.2705
## 66                                   1107088.Alcatra    -0.17 0.4248
## 67                                   1107089.Patinho     0.55 0.1926
## 68                           1107090.Lagarto redondo     0.30 0.0148
## 69                             1107091.Lagarto comum     2.00 0.0604
## 70                                1107093.M\xfasculo     1.88 0.1513
## 71                                     1107094.P\xe1     0.19 0.1257
## 72                                   1107095.Ac\xe9m     1.18 0.2837
## 73                                     1107096.Peito    -0.71 0.0337
## 74                           1107097.Capa de fil\xe9    -2.67 0.0050
## 75                                   1107099.Costela     2.41 0.4097
## 76                           1108002.Peixe - anchova     7.43 0.0035
## 77                            1108003.Peixe - badejo     2.42 0.0009
## 78                           1108004.Peixe - corvina    -0.17 0.0260
## 79                         1108005.Peixe - cavalinha    -2.59 0.0022
## 80                                     1108006.Peixe    -2.29 0.0506
## 81                        1108009.Peixe - pescadinha     1.13 0.0016
## 82                            1108011.Peixe - tainha     4.19 0.0006
## 83                          1108012.Peixe - sardinha    -3.20 0.0164
## 84                                1108013.Camar\xe3o     0.34 0.0528
## 85                          1108015.Peixe - vermelho    -4.99 0.0027
## 86                            1108019.Peixe - cavala     2.60 0.0050
## 87                              1108024.Peixe - pacu    -1.24 0.0005
## 88                           1108028.Peixe - dourado     2.38 0.0007
## 89                       1108029.Peixe - ca\xe7\xe3o     1.10 0.0081
## 90                           1108031.Peixe - merluza    -0.09 0.0261
## 91                             1108032.Peixe - serra     4.59 0.0068
## 92                           1108038.Peixe - pescada     3.07 0.0743
## 93                                1108045.Caranguejo     3.44 0.0058
## 94                          1108049.Peixe - castanha     6.35 0.0009
## 95                              1108054.Peixe - piau     0.42 0.0006
## 96                           1108057.Peixe - surubim     0.42 0.0004
## 97                                    1108067.Sururu     7.66 0.0003
## 98                       1108072.Peixe - curimat\xe3     9.74 0.0038
## 99                         1108075.Peixe - salm\xe3o     0.73 0.0074
## 100                       1108080.Peixe - til\xe1pia     3.49 0.0139
## 101                      1108083.Peixe - tucunar\xe9     3.50 0.0042
## 102                         1108087.Peixe - tambaqui    -3.01 0.0085
## 103                          1108088.Peixe - dourada     0.03 0.0182
## 104                         1108096.Peixe - pero\xe1     4.69 0.0006
## 105                          1108112.Peixe - pintado     0.81 0.0004
## 106                            1108170.Peixe - mandi     0.42 0.0005
## 107                                 1109002.Presunto     1.99 0.1113
## 108                                 1109007.Salsicha     1.15 0.1120
## 109                              1109008.Lingui\xe7a     1.74 0.2856
## 110                                1109010.Mortadela     1.00 0.0915
## 111                                   1109012.Salame    -0.96 0.0073
## 112                      1109056.Carne-seca e de sol     0.09 0.1227
## 113        1109058.Carne de porco salgada e defumada    -1.19 0.0126
## 114                             1109088.Hamb\xfarger    -0.24 0.0020
## 115                           1110009.Frango inteiro     1.66 0.4419
## 116                     1110010.Frango em peda\xe7os     1.35 0.3693
## 117                           1110044.Ovo de galinha     5.12 0.2138
## 118                         1111004.Leite longa vida     0.52 0.9238
## 119                         1111008.Leite condensado    -0.48 0.0170
## 120                           1111009.Leite em p\xf3    -0.26 0.2325
## 121                                   1111011.Queijo     0.91 0.5100
## 122                           1111012.Creme de leite    -1.98 0.0026
## 123             1111019.Iogurte e bebidas l\xe1cteas     0.30 0.2299
## 124                                 1111031.Manteiga     0.50 0.0309
## 125                                 1112003.Biscoito     0.14 0.4491
## 126                        1112015.P\xe3o franc\xeas     0.48 1.1236
## 127                              1112017.P\xe3o doce    -0.07 0.1029
## 128                          1112018.P\xe3o de forma     0.85 0.1206
## 129                                     1112019.Bolo     1.00 0.1102
## 130                         1112025.P\xe3o de queijo     0.72 0.0213
## 131                          1113013.\xd3leo de soja     1.09 0.2505
## 132                          1113014.Azeite de oliva    -1.42 0.0273
## 133                                1113040.Margarina     0.12 0.1515
## 134                           1114001.Suco de frutas     0.08 0.1554
## 135                  1114004.A\xe7a\xed (emuls\xe3o)    10.02 0.0373
## 136                         1114022.Caf\xe9 mo\xeddo    -0.69 0.3546
## 137                       1114023.Caf\xe9 sol\xfavel     0.11 0.0157
## 138                                   1114029.Ch\xe1     0.62 0.0413
## 139           1114083.Refrigerante e \xe1gua mineral    -0.37 0.7492
## 140                                  1114084.Cerveja    -0.34 0.3868
## 141             1114085.Outras bebidas alco\xf3licas    -0.29 0.1159
## 142                              1115004.Coco ralado     0.50 0.0071
## 143                      1115006.Ervilha em conserva    -0.93 0.0055
## 144                      1115016.Palmito em conserva     1.30 0.0137
## 145                       1115017.Pepino em conserva     0.60 0.0047
## 146                     1115039.Sardinha em conserva     0.16 0.0435
## 147                     1115050.Salsicha em conserva     0.36 0.0040
## 148                        1115051.Carne em conserva     0.31 0.0061
## 149                                  1115053.Pat\xea     0.11 0.0035
## 150                         1115056.Sopa desidratada    -0.22 0.0112
## 151                                 1115057.Azeitona     0.34 0.0272
## 152                  1115058.Milho-verde em conserva    -0.02 0.0171
## 153                         1115075.Atum em conserva    -0.19 0.0179
## 154                            1116001.Leite de coco     0.65 0.0042
## 155                                1116005.Atomatado    -0.19 0.1518
## 156                                     1116010.Alho     6.15 0.0871
## 157                                      1116013.Sal    -0.59 0.0097
## 158                                 1116026.Fermento     0.26 0.0080
## 159                                 1116033.Maionese    -0.63 0.0460
## 160                                  1116041.Vinagre     1.49 0.0064
## 161                        1116048.Caldo concentrado    -0.41 0.0266
## 162                            1116071.Tempero misto     1.03 0.0649
## 163                           1201001.Refei\xe7\xe3o    -0.25 5.0844
## 164                                   1201003.Lanche     1.02 2.1188
## 165                      1201005.Caf\xe9 da manh\xe3     0.45 0.1096
## 166           1201007.Refrigerante e \xe1gua mineral    -0.31 0.3892
## 167                                1201009.Cafezinho     0.79 0.0855
## 168                                  1201048.Cerveja    -0.36 0.7172
## 169             1201051.Outras bebidas alco\xf3licas     0.94 0.0630
## 170                                    1201061.Doces     0.59 0.2736
## 171                      2101001.Aluguel residencial     0.29 3.8108
## 172                            2101002.Condom\xednio     0.09 1.7068
## 173                 2101004.Taxa de \xe1gua e esgoto     0.46 1.7541
## 174                               2101012.Mudan\xe7a     0.89 0.0184
## 175                                2103005.Ferragens     1.13 0.0480
## 176                 2103008.Material de eletricidade    -0.64 0.0213
## 177                      2103009.Material de pintura    -0.24 0.0298
## 178                                    2103012.Vidro    -1.17 0.0204
## 179                                    2103014.Tinta     0.52 0.2422
## 180            2103032.Revestimento de piso e parede     1.90 0.1457
## 181                                  2103039.Cimento    -0.98 0.1432
## 182                                   2103040.Tijolo    -0.50 0.1125
## 183                   2103041.Material hidr\xe1ulico    -0.30 0.0543
## 184                           2103042.M\xe3o-de-obra     0.12 1.4837
## 185                                    2103048.Areia     0.06 0.0464
## 186                                    2103055.Telha     0.01 0.0692
## 187                     2104005.\xc1gua sanit\xe1ria     0.65 0.0577
## 188                               2104008.Detergente    -0.38 0.1250
## 189                        2104009.Sab\xe3o em p\xf3     1.25 0.3389
## 190                             2104012.Desinfetante    -0.17 0.0488
## 191                               2104013.Inseticida    -0.88 0.0052
## 192                        2104015.Sab\xe3o em barra     0.44 0.0979
## 193                       2104016.Esponja de limpeza     0.07 0.0439
## 194                                2104032.Amaciante     1.05 0.1443
## 195                        2201003.Carv\xe3o vegetal    -0.52 0.0076
## 196                     2201004.G\xe1s de botij\xe3o     0.58 1.3248
## 197                          2201005.G\xe1s encanado    -0.79 0.0839
## 198          2202003.Energia el\xe9trica residencial     0.04 3.8288
## 199                       3101002.M\xf3vel para sala     0.43 0.4977
## 200                     3101003.M\xf3vel para quarto     0.27 0.4379
## 201             3101015.M\xf3vel para copa e cozinha    -1.25 0.1661
## 202                        3101016.M\xf3vel infantil    -0.10 0.0100
## 203                               3101017.Colch\xe3o    -0.08 0.1163
## 204                                   3102005.Tapete     0.24 0.0876
## 205                                  3102006.Cortina    -0.12 0.0893
## 206                   3102007.Utens\xedlios de metal     0.73 0.0950
## 207        3102009.Utens\xedlios de vidro e lou\xe7a     0.03 0.0539
## 208             3102010.Utens\xedlios de pl\xe1stico     1.78 0.0411
## 209                          3102035.Flores naturais    -0.09 0.0225
## 210                   3102040.Utens\xedlios diversos     0.62 0.1595
## 211                            3103001.Roupa de cama     0.81 0.2238
## 212                           3103003.Roupa de banho     0.67 0.0783
## 213                             3201001.Refrigerador     1.06 0.4498
## 214                          3201002.Ar-condicionado    -0.62 0.0371
## 215                3201006.M\xe1quina de lavar roupa     0.02 0.1959
## 216                           3201012.Liquidificador     1.91 0.0029
## 217                               3201013.Ventilador     0.79 0.0238
## 218                                 3201021.Fog\xe3o    -1.46 0.1824
## 219                     3201050.Chuveiro el\xe9trico     0.31 0.0212
## 220                     3201065.Forno de micro-ondas     0.53 0.0497
## 221                                3202001.Televisor    -1.65 0.1569
## 222                          3202003.Aparelho de som    -0.37 0.0625
## 223                          3202005.Aparelho de DVD     0.42 0.0581
## 224                                   3202013.Antena     0.14 0.0057
## 225                          3202028.Microcomputador     0.50 0.2858
## 226                 3301002.Conserto de refrigerador    -0.32 0.0829
## 227                    3301006.Conserto de televisor    -0.14 0.0704
## 228              3301009.Conserto de aparelho de som     0.42 0.0057
## 229    3301015.Conserto de m\xe1quina de lavar roupa     2.12 0.0667
## 230                      3301022.Reforma de estofado     1.86 0.1314
## 231      3301044.Manuten\xe7\xe3o de microcomputador    -1.28 0.0022
## 232              4101002.Cal\xe7a comprida masculina    -0.13 0.4279
## 233                                    4101004.Terno     0.62 0.0613
## 234                       4101005.Agasalho masculino     3.52 0.0638
## 235                4101006.Short e bermuda masculina     0.64 0.2015
## 236                                    4101008.Cueca    -0.19 0.0210
## 237              4101009.Camisa / camiseta masculina     1.00 0.5865
## 238               4102002.Cal\xe7a comprida feminina     0.18 0.4453
## 239                        4102003.Agasalho feminino     3.16 0.0499
## 240                                     4102004.Saia     0.61 0.0218
## 241                                  4102005.Vestido    -1.22 0.2789
## 242                                    4102008.Blusa     1.45 0.5616
## 243                                 4102010.Lingerie    -0.46 0.1584
## 244                 4102013.Bermuda e short feminino    -1.40 0.0797
## 245                         4103001.Uniforme escolar     0.58 0.0255
## 246               4103002.Cal\xe7a comprida infantil     0.27 0.1190
## 247                        4103005.Agasalho infantil     1.08 0.0375
## 248                         4103007.Vestido infantil     0.30 0.0658
## 249                 4103008.Bermuda e short infantil    -0.16 0.1010
## 250               4103011.Camisa / camiseta infantil     0.62 0.2446
## 251                        4103031.Conjunto infantil     0.36 0.0425
## 252                         4201002.Sapato masculino     0.45 0.1858
## 253                          4201003.Sapato feminino    -0.19 0.2835
## 254                          4201004.Sapato infantil     1.24 0.0113
## 255          4201006.Sand\xe1lia / chinelo masculino    -0.35 0.0206
## 256           4201007.Sand\xe1lia / chinelo feminino    -0.86 0.3461
## 257           4201008.Sand\xe1lia / chinelo infantil    -0.30 0.0305
## 258                                    4201015.Bolsa     0.71 0.1778
## 259                                 4201063.T\xeanis     1.31 0.5878
## 260                                4301001.Bijuteria     0.60 0.1427
## 261                                     4301002.Joia     0.52 0.1847
## 262                      4301004.Rel\xf3gio de pulso     0.16 0.0160
## 263                                   4401001.Tecido     0.76 0.0521
## 264                     4401002.Artigos de armarinho    -0.51 0.0189
## 265                 4401005.Acortinado (mosquiteiro)    -0.50 0.0128
## 266                         5101001.\xd4nibus urbano     0.90 2.7967
## 267                                  5101002.T\xe1xi     0.00 0.3510
## 268                                     5101004.Trem     2.07 0.0626
## 269                 5101006.\xd4nibus intermunicipal     0.04 0.7714
## 270                  5101007.\xd4nibus interestadual    -0.14 0.2560
## 271                        5101010.Passagem a\xe9rea     7.29 0.4231
## 272                                 5101011.Metr\xf4     0.00 0.0680
## 273                5101022.Transporte hidrovi\xe1rio     0.00 0.0059
## 274                       5101026.Transporte escolar     1.29 0.0931
## 275                        5102001.Autom\xf3vel novo    -0.09 2.6249
## 276                5102004.Emplacamento e licen\xe7a     0.37 0.9053
## 277       5102005.Seguro volunt\xe1rio de ve\xedculo     0.65 0.2417
## 278                                    5102006.Multa     0.00 0.0459
## 279                     5102007.\xd3leo lubrificante     0.62 0.0946
## 280                 5102009.Acess\xf3rios e pe\xe7as     0.73 0.3226
## 281                                     5102010.Pneu     0.18 0.1771
## 282                 5102011.Conserto de autom\xf3vel     0.28 1.7264
## 283                           5102013.Estacionamento    -0.21 0.0950
## 284                               5102015.Ped\xe1gio     0.12 0.1101
## 285             5102019.Lubrifica\xe7\xe3o e lavagem    -0.60 0.0394
## 286                       5102020.Autom\xf3vel usado     0.01 0.8958
## 287                    5102037.Pintura de ve\xedculo     2.45 0.0459
## 288                    5102051.Aluguel de ve\xedculo    -5.61 0.0053
## 289                              5102053.Motocicleta     0.44 0.5968
## 290                                 5104001.Gasolina     2.88 4.2120
## 291                                   5104002.Etanol     7.02 0.9200
## 292                           5104003.\xd3leo diesel     1.44 0.1527
## 293                          5104005.G\xe1s veicular     0.58 0.1383
## 294         6101001.Anti-infeccioso e antibi\xf3tico    -0.53 0.2287
## 295           6101002.Analg\xe9sico e antit\xe9rmico     0.17 0.4318
## 296 6101003.Anti-inflamat\xf3rio e antirreum\xe1tico    -0.26 0.3105
## 297            6101004.Antigripal e antituss\xedgeno    -0.16 0.1850
## 298                         6101006.Dermatol\xf3gico    -0.13 0.1047
## 299        6101007.Antial\xe9rgico e broncodilatador     0.24 0.1821
## 300                           6101009.Gastroprotetor     0.04 0.2128
## 301                  6101010.Vitamina e fortificante     0.67 0.1964
## 302                              6101011.Horm\xf4nio    -0.64 0.3705
## 303         6101013.Psicotr\xf3pico e anorex\xedgeno    -0.88 0.4050
## 304      6101014.Hipotensor e hipocolesterol\xeamico     0.14 0.6610
## 305                         6101051.Oftalmol\xf3gico     0.39 0.0743
## 306               6102002.Arma\xe7\xe3o de \xf3culos     1.57 0.0361
## 307                       6102003.\xd3culos sem grau     0.97 0.0736
## 308         6102011.Lentes de \xf3culos e de contato     0.42 0.1296
## 309                                6201002.M\xe9dico     0.18 0.4766
## 310                                 6201003.Dentista     0.34 0.4883
## 311                  6201005.Aparelho ortod\xf4ntico     1.58 0.0623
## 312                   6201006.Artigos ortop\xe9dicos    -0.02 0.0035
## 313                           6201007.Fisioterapeuta     2.49 0.0572
## 314                             6201010.Psic\xf3logo    -0.25 0.0797
## 315                  6202003.Exame de laborat\xf3rio    -0.12 0.0993
## 316          6202004.Hospitaliza\xe7\xe3o e cirurgia     1.87 0.4008
## 317                          6202006.Exame de imagem     1.24 0.0995
## 318                        6203001.Plano de sa\xfade     0.80 4.1966
## 319                      6301001.Produto para cabelo     0.73 0.3092
## 320                    6301002.Fralda descart\xe1vel     0.67 0.0583
## 321                       6301004.Produto para barba     1.31 0.0139
## 322                        6301006.Produto para pele    -3.72 0.3254
## 323               6301007.Produto para higiene bucal     0.38 0.2020
## 324                        6301010.Produto para unha    -0.66 0.0961
## 325                                  6301011.Perfume     1.45 0.8831
## 326                              6301014.Desodorante     0.79 0.1031
## 327                  6301015.Absorvente higi\xeanico     0.47 0.0104
## 328                                 6301016.Sabonete     1.33 0.1710
## 329                       6301017.Papel higi\xeanico    -0.22 0.2070
## 330                     6301020.Artigos de maquiagem     0.22 0.1209
## 331                               7101001.Costureira     0.48 0.0487
## 332                                 7101005.Manicure    -0.71 0.4430
## 333                             7101009.Cabeleireiro    -0.22 1.2646
## 334                   7101010.Empregado dom\xe9stico     0.36 4.3219
## 335                          7101014.Depila\xe7\xe3o     1.20 0.0151
## 336                              7101036.Despachante     0.98 0.0853
## 337                   7101076.Servi\xe7o banc\xe1rio     0.00 0.6741
## 338                       7101090.Conselho de classe     0.27 0.0138
## 339                                   7201001.Cinema     0.10 0.1982
## 340                                 7201002.CD e DVD     0.93 0.0409
## 341                       7201003.Ingresso para jogo     0.68 0.0080
## 342                                    7201006.Clube     0.53 0.1713
## 343                      7201010.Instrumento musical     1.07 0.0385
## 344                    7201018.Tratamento de animais     0.03 0.2254
## 345                                7201019.Bicicleta    -0.85 0.0894
## 346                    7201020.Alimento para animais    -0.58 0.2688
## 347                                7201023.Brinquedo    -0.74 0.4104
## 348                     7201052.Loca\xe7\xe3o de DVD     0.34 0.1117
## 349                       7201054.Boate e danceteria     0.44 0.2344
## 350                            7201063.Jogos de azar     0.00 0.4371
## 351                                    7201068.Motel     1.45 0.0055
## 352                                    7201090.Hotel     1.81 0.3051
## 353                              7201095.Excurs\xe3o     1.48 0.3520
## 354                                  7202041.Cigarro    -0.34 1.0597
## 355                7203001.M\xe1quina fotogr\xe1fica     1.34 0.0469
## 356               7203003.Revela\xe7\xe3o e c\xf3pia     0.48 0.0280
## 357                                   8101001.Creche     1.04 0.0199
## 358                  8101002.Educa\xe7\xe3o infantil     0.62 0.2331
## 359                       8101003.Ensino fundamental     0.28 0.8896
## 360                          8101004.Ensino m\xe9dio    -0.04 0.4207
## 361                          8101005.Ensino superior     0.43 1.5488
## 362                   8101006.P\xf3s-gradua\xe7\xe3o     0.20 0.2084
## 363                         8102001.Jornal di\xe1rio     0.00 0.1515
## 364                     8102002.Assinatura de jornal     0.20 0.0409
## 365                                  8102004.Revista     0.00 0.2310
## 366                                    8102005.Livro     0.56 0.1399
## 367                                  8103001.Caderno     1.05 0.1335
## 368                             8103002.Fotoc\xf3pia    -0.91 0.0263
## 369                     8103014.Artigos de papelaria     0.25 0.1944
## 370                    8104001.Curso preparat\xf3rio     0.10 0.1782
## 371                         8104002.Curso t\xe9cnico     0.02 0.0784
## 372                          8104003.Curso de idioma     0.18 0.2751
## 373                  8104004.Curso de inform\xe1tica     0.64 0.0996
## 374                               8104005.Autoescola     0.00 0.0004
## 375                   8104006.Atiividades f\xedsicas     0.68 0.1970
## 376                                  9101001.Correio     2.23 0.0130
## 377                            9101002.Telefone fixo    -0.75 0.8422
## 378                      9101003.Telefone p\xfablico     0.00 0.0959
## 379                         9101008.Telefone celular     0.00 1.2531
## 380                     9101018.Acesso \xe0 internet     0.00 0.2206
## 381                   9101019.Aparelho telef\xf4nico    -1.44 0.1240
## 382           9101021.Telefone com internet - pacote     0.00 0.6645
## 383           9101022.TV por assinatura com internet     0.00 0.2753

Strings

subitem = read_csv2('subitem.csv', 
                    locale = locale(encoding='Latin1'))

subitem
## # A tibble: 383 x 3
##    subitem                              variacao   peso
##    <chr>                                   <dbl>  <dbl>
##  1 1101002.Arroz                           -0.41 0.581 
##  2 1101051.Feijão - mulatinho              17.0  0.0262
##  3 1101052.Feijão - preto                  12.6  0.0824
##  4 1101053.Feijão - macassar (fradinho)     9.45 0.0301
##  5 1101073.Feijão - carioca (rajado)       12.9  0.280 
##  6 1101075.Feijão - branco                 29.2  0.002 
##  7 1102001.Farinha de arroz                -4.73 0.0131
##  8 1102006.Macarrão                         1.13 0.283 
##  9 1102008.Fubá de milho                    1.02 0.028 
## 10 1102009.Amido de milho                   0.06 0.0043
## # … with 373 more rows

Factors

fruta = c('maracujá', 'limão', 'laranja', 'pêra')
parse_factor(fruta, levels=NULL, locale = locale(encoding='Latin1'))
## [1] maracujá limão    laranja   pêra    
## Levels: maracujá limão laranja pêra

Datas e horários

  • ISO8601: ano, mês, dia, hora, minuto e segundo.3
parse_datetime("2010-10-01T2010")
## [1] "2010-10-01 20:10:00 UTC"
parse_datetime("20101010")
## [1] "2010-10-10 UTC"

Datas e horários

parse_date("2010-10-01")
## [1] "2010-10-01"
library(hms)
parse_time("01:10 am")
## 01:10:00
parse_time("20:10:01")
## 20:10:01

Datas e horários

Você pode ainda especificar um formato próprio com o argumento format:

  • Ano: %Y (4 dígitos) ou %y (2 dígitos)
  • Mês: %m (2 dígitos) ou %b (Jan) ou %B (Janeiro)
  • Dia: %d (2 dígitos) ou %e (espaço)

Datas e horários

Tempo:

  • %H 0-23 hora.
  • %I 0-12, deve ser usado com %p.
  • %p AM/PM.
  • %M minutos.
  • %S segundos inteiros.
  • %OS segundos reais.
  • %Z Time zone
  • %z (UTC, ex, +0800).

Datas e horários

parse_date("01/02/15", "%m/%d/%y")
## [1] "2015-01-02"
parse_date("01/02/15", "%d/%m/%y")
## [1] "2015-02-01"
parse_date("01/02/15", "%y/%m/%d")
## [1] "2001-02-15"
parse_date("01/01/2000", "%d/%m/%Y")
## [1] "2000-01-01"

Analisando um arquivo

Analisando um arquivo

readr usa uma heurística para descobrir o tipo de cada coluna: lê as primeiras 1000 linhas e usa algumas heurísticas (moderadamente conservadoras) para descobrir o tipo de cada coluna. Você pode emular esse processo com um vetor de caracteres usando guess_parser(), que retorna a melhor estimativa de readr e parse_guess(), que usa essa suposição para analisar a coluna:

Analisando um arquivo

guess_parser("2010-10-01")
## [1] "date"
guess_parser("15:01")
## [1] "time"
guess_parser(c("TRUE", "FALSE"))
## [1] "logical"
guess_parser(c("1", "5", "9"))
## [1] "double"
guess_parser(c("12,352,561"))
## [1] "number"
str(parse_guess("2010-10-10"))
##  Date[1:1], format: "2010-10-10"

Analisando um arquivo

A heurística tenta cada um dos seguintes tipos, parando quando encontra uma correspondência:

  • lógico: contém apenas “F”, “T”, “FALSE” ou “TRUE”.
  • integer: contém apenas caracteres numéricos (e -).
  • double: contém apenas duplas válidas (incluindo números como 4.5e-5).
  • number: contém duplas válidas com a marca de agrupamento dentro.
  • time: corresponde ao time_format padrão.
  • date: corresponde ao padrão date_format.
  • data e hora: qualquer data ISO8601.

Analisando um arquivo

Esses padrões nem sempre funcionam para arquivos maiores. Existem dois problemas básicos:

  • As primeiras mil linhas podem ser um caso especial, e o readr adivinha um tipo que não é suficientemente geral. Por exemplo, você pode ter uma coluna de duplas que contenha apenas inteiros nas primeiras 1000 linhas.

  • A coluna pode conter muitos valores ausentes. Se as primeiras 1000 linhas contiverem apenas NAs, o readr irá adivinhar que é um vetor de caracteres, enquanto você provavelmente desejará analisá-lo como algo mais específico.

Analisando um arquivo

challenge <- read_csv(readr_example("challenge.csv"))

Analisando um arquivo

problems(challenge)
## # A tibble: 1,000 x 5
##      row col   expected       actual   file                                     
##    <int> <chr> <chr>          <chr>    <chr>                                    
##  1  1001 y     1/0/T/F/TRUE/… 2015-01… '/Library/Frameworks/R.framework/Version…
##  2  1002 y     1/0/T/F/TRUE/… 2018-05… '/Library/Frameworks/R.framework/Version…
##  3  1003 y     1/0/T/F/TRUE/… 2015-09… '/Library/Frameworks/R.framework/Version…
##  4  1004 y     1/0/T/F/TRUE/… 2012-11… '/Library/Frameworks/R.framework/Version…
##  5  1005 y     1/0/T/F/TRUE/… 2020-01… '/Library/Frameworks/R.framework/Version…
##  6  1006 y     1/0/T/F/TRUE/… 2016-04… '/Library/Frameworks/R.framework/Version…
##  7  1007 y     1/0/T/F/TRUE/… 2011-05… '/Library/Frameworks/R.framework/Version…
##  8  1008 y     1/0/T/F/TRUE/… 2020-07… '/Library/Frameworks/R.framework/Version…
##  9  1009 y     1/0/T/F/TRUE/… 2011-04… '/Library/Frameworks/R.framework/Version…
## 10  1010 y     1/0/T/F/TRUE/… 2010-05… '/Library/Frameworks/R.framework/Version…
## # … with 990 more rows

Analisando um arquivo

De forma a resolver esse problema, podemos proceder da forma anterior:

challenge <- read_csv(
  readr_example("challenge.csv"), 
  col_types = cols(
    x = col_double(),
    y = col_date()
  )
)

Escrevendo um arquivo

Escrevendo um arquivo

Por fim, é possível escrever arquivos .csv com a função write_csv.

write_csv(challenge, "challenge.csv")

Grolemund, G., and H. Wickham. 2017. R for Data Science. O’Reilly Media.