rafpyprog/pySGS

Problema na data de inicio e fim

marcelo-ventura opened this issue · 4 comments

Caro, obrigado pelo excelente trabalho e pela nova versão.
sgs.dataframe([20577,20669,20745,21117,20882], start='17/08/2019', end='18/08/2019')
Quando busco os indices no intervalo acima ele me retorna o seguinte:
20577 20669 20745 21117 20882 2019-06-01 203887.0 11921.0 20.84 1.99 84.53
Há alguma diferenciação na busca de dados mensais?

Olá @marcelo-ventura,

Desculpe pela demora em responder. Ao verificar os metadados pude observar que a última data disponível para as suas séries é Julho/2019. Como você está solicitando uma data posterior a API do Bancen retornará a última data disponível.

Você pode verificar os metadados das séries utilizando a função metatada:

df = sgs.dataframe([20577, 20669, 20745, 21117, 20882], start='17/08/2019', end='18/08/2019')
sgs.metadata(df)

O seguinte resultado será exibido:

[{'code': 20577,
'name': 'Saldo da carteira de crédito com recursos livres - Pessoas físicas - Crédito pessoal consignado para trabalhadores do setor público',
'unit': 'R$ (milhões)',
'frequency': 'M',
'first_value': Timestamp('2007-03-01 00:00:00'),
'last_value': Timestamp('2019-07-01 00:00:00'),
'source': 'BCB-DSTAT'},
{'code': 20669,
'name': 'Concessões de crédito com recursos livres - Pessoas físicas - Crédito pessoal consignado para trabalhadores do setor público',
'unit': 'R$ (milhões)',
'frequency': 'M',
'first_value': Timestamp('2011-03-01 00:00:00'),
'last_value': Timestamp('2019-07-01 00:00:00'),
'source': 'BCB-DSTAT'},
{'code': 20745,
'name': 'Taxa média de juros das operações de crédito com recursos livres - Pessoas físicas - Crédito pessoal consignado para trabalhadores do setor público',
'unit': '% a.a.',
'frequency': 'M',
'first_value': Timestamp('2011-03-01 00:00:00'),
'last_value': Timestamp('2019-07-01 00:00:00'),
'source': 'BCB-DSTAT'},
{'code': 21117,
'name': 'Inadimplência da carteira de crédito com recursos livres - Pessoas físicas - Crédito pessoal consignado para trabalhadores do setor público',
'unit': '%',
'frequency': 'M',
'first_value': Timestamp('2011-03-01 00:00:00'),
'last_value': Timestamp('2019-07-01 00:00:00'),
'source': 'BCB-DSTAT'},
{'code': 20882,
'name': 'Prazo médio das concessões de crédito com recursos livres - Pessoas físicas - Crédito pessoal consignado para trabalhadores do setor público',
'unit': 'Meses',
'frequency': 'M',
'first_value': Timestamp('2011-03-01 00:00:00'),
'last_value': Timestamp('2019-07-01 00:00:00'),
'source': 'BCB-DSTAT'}]

Desta forma, entendo que os dados retornados estão corretos.

Olá @rafpyprog tudo bem? Muito obrigado pela resposta.

Talvez seria interessante implementar a seguinte lógica (filtro):

Se dentro do intervalo pedido não houverem dados, não ser retornada nenhuma consulta ou uma mensagem dizendo que não há dados disponíveis.

Pelo que entendi do teu comentário, é padrão a API do Bacen retornar o último dado disponível.

No entanto isso pode ser perigoso na automação de fluxos, tendo em vista que no teu exemplo eu poderia alimentar minha base com um dado que está fora do intervalo pedido.

Aqui eu to usando o seguinte filtro (considerando dados agregados mensais):

tabela_final = tabela_final[tabela_final.data > int(pd.to_datetime(dat_ini, format="%d/%m/%Y").strftime("%Y%m"))]

Fiz o PR #32 abordando essa issue.

Se puderem avaliar, sugerir e revisar o código, agradeço.

@opardal obrigado!
o código já está na versão 2.1.0 no Pypi