Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can't read 2014 COTAHIST #41

Open
Lvitor opened this issue Jun 16, 2022 · 8 comments
Open

Can't read 2014 COTAHIST #41

Lvitor opened this issue Jun 16, 2022 · 8 comments

Comments

@Lvitor
Copy link

Lvitor commented Jun 16, 2022

Olá! Ao ler o arquivo 2014 pela função read_marketdata com template = 'COTAHIST_YEARLY' devolve esse erro:

Error in stri_trim_both(string) :
invalid UTF-8 byte sequence detected; try calling stri_enc_toutf8()
Acontece apenas em 2014.

Abraços

@Lvitor
Copy link
Author

Lvitor commented Jun 16, 2022

Aparamente o problema esta ocorrendo apenas no dia 18/12/2014, mas não conseguir achar o problema.

@wilsonfreitas
Copy link
Collaborator

Olá,

Qual versão você está utilizando?

packageVersion("rb3")
#> [1] '0.0.3'

Created on 2022-06-16 by the reprex package (v2.0.1)

library(rb3)

refdate <- ISOdate(2014, 1, 1)

f <- download_marketdata("COTAHIST_YEARLY", refdate = refdate)

df <- read_marketdata(f, "COTAHIST_YEARLY")

df$Header
#> # A tibble: 1 x 5
#>   tipo_registro nome_arquivo  cod_origem data_geracao_arquivo reserva
#>           <int> <chr>         <chr>      <date>               <chr>  
#> 1             0 COTAHIST.2014 BOVESPA    2014-12-31           ""

df$HistoricalPrices
#> # A tibble: 392,228 x 26
#>    tipo_registro data_referencia cod_bdi cod_negociacao tipo_mercado
#>            <int> <date>            <int> <chr>                 <int>
#>  1             1 2014-01-02            2 AAPL34                   10
#>  2             1 2014-01-02            2 ABCB4                    10
#>  3             1 2014-01-02           96 ABCB4F                   20
#>  4             1 2014-01-02           62 ABCB4T                   30
#>  5             1 2014-01-02            2 ABEV3                    10
#>  6             1 2014-01-02           96 ABEV3F                   20
#>  7             1 2014-01-02           62 ABEV3T                   30
#>  8             1 2014-01-02            2 ABRE11                   10
#>  9             1 2014-01-02           96 ABRE11F                  20
#> 10             1 2014-01-02            2 AEDU3                    10
#> # ... with 392,218 more rows, and 21 more variables: nome_empresa <chr>,
#> #   especificacao <chr>, num_dias_mercado_termo <int>, cod_moeda <chr>,
#> #   preco_abertura <dbl>, preco_max <dbl>, preco_min <dbl>, preco_med <dbl>,
#> #   preco_ult <dbl>, preco_melhor_oferta_compra <dbl>,
#> #   preco_melhor_oferta_venda <dbl>, qtd_negocios <int>,
#> #   qtd_titulos_negociados <chr>, volume_titulos_negociados <dbl>,
#> #   preco_exercicio <dbl>, indicador_correcao_preco_exercicio <int>, ...

df$Trailer
#> # A tibble: 1 x 6
#>   tipo_mercado nome_arquivo  cod_origem data_geracao_arqu~ num_registros reserva
#>          <int> <chr>         <chr>      <date>             <chr>         <chr>  
#> 1           99 COTAHIST.2014 BOVESPA    2014-12-31         00000392230   ""

Created on 2022-06-16 by the reprex package (v2.0.1)

@wilsonfreitas
Copy link
Collaborator

Oi @Lvitor, qual versão você está rodando?

Se é a mesma versão, qual sistema operacional?

Só pra entender de onde o problema está vindo.

@Lvitor
Copy link
Author

Lvitor commented Jun 19, 2022

Olá!
Minha versão:

packageVersion("rb3")
[1] ‘0.0.3’
Tentei tanto em windows como Linux. Pelo meu diag o problema ocorre apenas no dia 18/12/2014. Tente esse codigo.

library(rb3)
refdate <- ISOdate(2014, 12, 18)

f <- download_marketdata("COTAHIST_YEARLY", refdate = refdate)

df <- read_marketdata(f, "COTAHIST_YEARLY")
Error in stri_trim_both(string) :
invalid UTF-8 byte sequence detected; try calling stri_enc_toutf8()

@wilsonfreitas
Copy link
Collaborator

Oi @Lvitor, uma coisa importante no seu exemplo, para COTAHIST_YEARLY a data específica não importa, pois para realizar o download do arquivo apenas o ano é utilizado no nome do arquivo.
Isso precisa ficar mais claro na documentação. Uma função estilo strftime é utilizada na formatação da URL.
Dessa maneira, tanto faz usar 2014-12-18 ou 2014-01-01.
Outro ponto é que o arquivo COTAHIST_YEARLY é um arquivo com todos os dados do ano e não deveria fazer diferença utilizar 2014-12-18 e 2014-01-01.

De qualquer maneira executei o seu código aqui exatamente como você propos, e não tive problemas aqui.
Veja o reprex

library(rb3)
refdate <- ISOdate(2014, 12, 18)
f <- download_marketdata("COTAHIST_YEARLY", refdate = refdate)
df <- read_marketdata(f, "COTAHIST_YEARLY")
df
#> $Header
#> # A tibble: 1 x 5
#>   tipo_registro nome_arquivo  cod_origem data_geracao_arquivo reserva
#>           <int> <chr>         <chr>      <date>               <chr>  
#> 1             0 COTAHIST.2014 BOVESPA    2014-12-31           ""     
#> 
#> $HistoricalPrices
#> # A tibble: 392,228 x 26
#>    tipo_registro data_referencia cod_bdi cod_negociacao tipo_mercado
#>            <int> <date>            <int> <chr>                 <int>
#>  1             1 2014-01-02            2 AAPL34                   10
#>  2             1 2014-01-02            2 ABCB4                    10
#>  3             1 2014-01-02           96 ABCB4F                   20
#>  4             1 2014-01-02           62 ABCB4T                   30
#>  5             1 2014-01-02            2 ABEV3                    10
#>  6             1 2014-01-02           96 ABEV3F                   20
#>  7             1 2014-01-02           62 ABEV3T                   30
#>  8             1 2014-01-02            2 ABRE11                   10
#>  9             1 2014-01-02           96 ABRE11F                  20
#> 10             1 2014-01-02            2 AEDU3                    10
#> # ... with 392,218 more rows, and 21 more variables: nome_empresa <chr>,
#> #   especificacao <chr>, num_dias_mercado_termo <int>, cod_moeda <chr>,
#> #   preco_abertura <dbl>, preco_max <dbl>, preco_min <dbl>, preco_med <dbl>,
#> #   preco_ult <dbl>, preco_melhor_oferta_compra <dbl>,
#> #   preco_melhor_oferta_venda <dbl>, qtd_negocios <int>,
#> #   qtd_titulos_negociados <chr>, volume_titulos_negociados <dbl>,
#> #   preco_exercicio <dbl>, indicador_correcao_preco_exercicio <int>, ...
#> 
#> $Trailer
#> # A tibble: 1 x 6
#>   tipo_mercado nome_arquivo  cod_origem data_geracao_arqu~ num_registros reserva
#>          <int> <chr>         <chr>      <date>             <chr>         <chr>  
#> 1           99 COTAHIST.2014 BOVESPA    2014-12-31         00000392230   ""     
#> 
#> attr(,"class")
#> [1] "parts"

Created on 2022-06-20 by the reprex package (v2.0.1)

Vou te pedir para executar o código com a opção parse_fields = FALSE da função read_marketdata, como no exemplo.

library(rb3)
refdate <- ISOdate(2014, 12, 18)
f <- download_marketdata("COTAHIST_YEARLY", refdate = refdate)
df <- read_marketdata(f, "COTAHIST_YEARLY", parse_fields = FALSE)
head(df$HistoricalPrices)
#>   tipo_registro data_referencia cod_bdi cod_negociacao tipo_mercado
#> 1            01        20140102      02   AAPL34                010
#> 2            01        20140102      02   ABCB4                 010
#> 3            01        20140102      96   ABCB4F                020
#> 4            01        20140102      62   ABCB4T                030
#> 5            01        20140102      02   ABEV3                 010
#> 6            01        20140102      96   ABEV3F                020
#>   nome_empresa especificacao num_dias_mercado_termo cod_moeda preco_abertura
#> 1 APPLE           DRN                                    R$    0000000013212
#> 2 ABC BRASIL      PN  EJS N2                             R$    0000000001231
#> 3 ABC BRASIL      PN  EJS N2                             R$    0000000001210
#> 4 ABC BRASIL      PN  EJS N2                    361      R$    0000000001346
#> 5 AMBEV S/A       ON                                     R$    0000000001730
#> 6 AMBEV S/A       ON                                     R$    0000000001726
#>       preco_max     preco_min     preco_med     preco_ult
#> 1 0000000013212 0000000013212 0000000013212 0000000013212
#> 2 0000000001236 0000000001170 0000000001192 0000000001190
#> 3 0000000001210 0000000001176 0000000001179 0000000001176
#> 4 0000000001347 0000000001346 0000000001346 0000000001347
#> 5 0000000001750 0000000001718 0000000001739 0000000001739
#> 6 0000000001750 0000000001711 0000000001738 0000000001750
#>   preco_melhor_oferta_compra preco_melhor_oferta_venda qtd_negocios
#> 1              0000000013190             0000000013340        00001
#> 2              0000000001175             0000000001190        01544
#> 3              0000000001152             0000000001249        00003
#> 4              0000000000000             0000000000000        00002
#> 5              0000000001738             0000000001740        22569
#> 6              0000000001740             0000000001750        00341
#>   qtd_titulos_negociados volume_titulos_negociados preco_exercicio
#> 1     000000000000000900        000000000011890800   0000000000000
#> 2     000000000000361200        000000000430789400   0000000000000
#> 3     000000000000000143        000000000000168614   0000000000000
#> 4     000000000000000100        000000000000134639   0000000000000
#> 5     000000000008035400        000000013974472400   0000000000000
#> 6     000000000000010795        000000000018764429   0000000000000
#>   indicador_correcao_preco_exercicio data_vencimento fator_cot
#> 1                                  0        99991231   0000001
#> 2                                  0        99991231   0000001
#> 3                                  0        99991231   0000001
#> 4                                  0        99991231   0000001
#> 5                                  0        99991231   0000001
#> 6                                  0        99991231   0000001
#>   preco_exercicio_pontos     cod_isin num_dist
#> 1          0000000000000 BRAAPLBDR004      106
#> 2          0000000000000 BRABCBACNPR4      121
#> 3          0000000000000 BRABCBACNPR4      121
#> 4          0000000000000 BRABCBACNPR4      121
#> 5          0000000000000 BRABEVACNOR1      100
#> 6          0000000000000 BRABEVACNOR1      100

Created on 2022-06-20 by the reprex package (v2.0.1)

Com essa opção apenas a leitura do arquivo é realizada e se funcionar consigo mapear onde pode estar o problema.

Outra coisa que pode ajudar é após o erro executar a função traceback() que mostra a pilha de execução e será possível ver onder o erro está surgindo.

@Lvitor
Copy link
Author

Lvitor commented Jun 21, 2022

Olá! Segue os dados:

library(rb3)
refdate <- ISOdate(2014, 12, 18)
f <- download_marketdata("COTAHIST_DAILY", refdate = refdate)
df <- read_marketdata(f, "COTAHIST_DAILY", parse_fields = T)
Error in stri_trim_both(string) :
invalid UTF-8 byte sequence detected; try calling stri_enc_toutf8()

traceback()
9: stri_trim_both(string)
8: stringr::str_trim(z)
7: FUN(X[[i]], ...)
6: lapply(x, function(z) {
if (is(z, "character")) {
stringr::str_trim(z)
}
else {
z
}
})
5: trim_fields(df)
4: parse_columns(df, part$colnames, part$handlers, .$.parser())
3: res(x, ...)
2: template$read_file(filename, parse_fields)
1: read_marketdata(f, "COTAHIST_DAILY", parse_fields = T)

Quando coloco: parse_fields = F, consegui carregar o dia 18/12/2014.

PS: Coloquei a função daily para mostrar o erro do dia.

Obrigado.

@wilsonfreitas
Copy link
Collaborator

@Lvitor muito obrigado!

Continuo não conseguindo gerar o erro aqui, mas vou fazer os testes em outras plataformas.
Isso é muito estranho.

@BrunoGeraldine
Copy link

Try this...

import pandas as pd
data=pd.read_csv("C:\Users\akashkumar\Downloads\Customers.csv",encoding='latin1')

I got it using that link:
https://stackoverflow.com/questions/13471665/unicodedecodeerror-utf-8-codec-cant-decode-byte-0xc7-in-position

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants