diff --git a/docs/contribuindo/contribuindo.md b/docs/contribuindo/contribuindo.md new file mode 100644 index 0000000..109c284 --- /dev/null +++ b/docs/contribuindo/contribuindo.md @@ -0,0 +1,29 @@ +# Contribuindo com o pynvest + +Curtiu o projeto e encontrou alguma oportunidade de contribuir com ele de alguma forma? Vai fundo! Sendo uma iniciativa *open source*, qualquer um interessado em deixar sua contribuição será extremamente bem vindo. + +???+ question "Para contribuir eu preciso necessariamente escrever linhas de código?" + Não necessariamente! Uma contribuição pode ser desde um módulo adicional na biblioteca, como também o apontamento de alguma *issue* ou *feature request*. Sua interação é extremamente válida para manter a ideia viva! + + +O pacote surgiu de forma despretensiosa e com o simples objetivo de facilitar a gestão financeira pessoal do criador. Ao longo do tempo, percebeu-se que tais funcionalidades poderiam facilmnente ajudar outras pessoas dentro do mesmo escopo e propósito. Assim, a biblioteca tomou forma e, hoje, o resultado atual se mostra dentro de tudo o que está consolidado nesta documentação. + + +## Como Contribuir? + +Bom, em primeiro lugar, é importante que os potenciais contribuidores tenham a ciência completa sobre a biblioteca *pynvest* e o seu propósito. Dessa forma, as ideias de contribuição poderão ser moldadas e adaptadas para encaixar no escopo da biblioteca. + +Dito isso, os potenciais contribuidores podem acessar o repositório oficial da biblioteca e iniciar seus respectivos desenvolvimentos. + +- :fontawesome-brands-github: [Repositório com código fonte](https://github.com/ThiagoPanini/pynvest) +- :fontawesome-brands-python: [Página da biblioteca no PyPI](https://pypi.org/project/pynvest/) + +## Issues + +Abrir uma *issue* também é uma forma de contribuir com o projeto. Atualmente, existem alguns modelos específicos de *issues* que podem ser utilizados pelos usuários para fornecer insumos específicos sobre o projeto: + +- 🐞 Report de *bugs* da biblioteca +- 📄 Aprimorando de documentações já existentes ou inclusão de novas páginas +- 🚀 Requisição de novas funcionalidades para o projeto +- 😵‍💫 Pedido de ajuda para tarefas no geral +- 🤔 Questões ou dúvidas sobre o projeto diff --git a/docs/overrides/.icons/custom/custom-icon-32px.png b/docs/overrides/.icons/custom/custom-icon-32px.png new file mode 100644 index 0000000..f057aef Binary files /dev/null and b/docs/overrides/.icons/custom/custom-icon-32px.png differ diff --git a/docs/overrides/.icons/custom/custom-icon-32px.svg b/docs/overrides/.icons/custom/custom-icon-32px.svg new file mode 100644 index 0000000..c3575b7 --- /dev/null +++ b/docs/overrides/.icons/custom/custom-icon-32px.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/docs/overrides/home.html b/docs/overrides/home.html index 679eb8a..27988cc 100644 --- a/docs/overrides/home.html +++ b/docs/overrides/home.html @@ -25,7 +25,7 @@

Quick start - + Scrappers diff --git a/docs/quickstart/arquitetura.md b/docs/quickstart/arquitetura.md index 22be4f4..db1e6de 100644 --- a/docs/quickstart/arquitetura.md +++ b/docs/quickstart/arquitetura.md @@ -37,4 +37,7 @@ Apresentada a estratégia de funcionamento, a biblioteca possui essa árvore de └───__init__.py ``` -> Aqui, é possível entender claramente a relação entre *scrappers* e portais de indicadores financeiros. O submódulo `fundamentus.py` contém funções, classes e métodos especialmente construídos para contemplar toda a dinâmica de extração e tratamento de dados contidos no site Fundamentus. \ No newline at end of file + + :octicons-light-bulb-16: + **Dica:** Aqui, é possível entender claramente a relação entre *scrappers* e portais de indicadores financeiros. O submódulo `fundamentus.py` contém funções, classes e métodos especialmente construídos para contemplar toda a dinâmica de extração e tratamento de dados contidos no site Fundamentus. + diff --git a/docs/quickstart/design.md b/docs/quickstart/design.md index bd98432..cd041cf 100644 --- a/docs/quickstart/design.md +++ b/docs/quickstart/design.md @@ -19,6 +19,11 @@ Referências visuais para construção do logo: A imagem na [home](../index.md) da documentação foi criada utilizando a ilustração [Financial Data Isometric](https://storyset.com/illustration/financial-data/amico) da página [storyset](https://storyset.com/). +???+ tip "Sobre a conversão das imagens para a geração de ícones customizados" + Para conseguir gerar os logos customizados no cabeçalho da página, foi preciso realizar algumas etapas: + + 1. Converter a imagem PNG em um formato ICO utilizando as dimensões 32x32px ([cloudconvert](https://cloudconvert.com/png-to-ico)) + 2. Converter o arquivo ICO gerado para o formato SVG mantendo os *presets* de cores ([pixelied](https://pixelied.com/convert/png-converter/png-to-svg)) ## Fontes @@ -56,4 +61,6 @@ A imagem na [home](../index.md) da documentação foi criada utilizando a ilustr - [Dafont.com](https://www.dafont.com/) - [slidesgo](https://slidesgo.com/pt/) - [storyset](https://storyset.com/) -- [Power Point](https://www.microsoft.com/en-us/microsoft-365/powerpoint) \ No newline at end of file +- [Power Point](https://www.microsoft.com/en-us/microsoft-365/powerpoint) +- [cloudconvert](https://cloudconvert.com/png-to-ico) +- [pixelied](https://pixelied.com/convert/png-converter/png-to-svg) \ No newline at end of file diff --git a/docs/quickstart/instalacao.md b/docs/quickstart/instalacao.md index 8430bda..1020637 100644 --- a/docs/quickstart/instalacao.md +++ b/docs/quickstart/instalacao.md @@ -4,8 +4,7 @@
pynvest-logo -
-
+
PyPi shield diff --git a/docs/scrappers/fundamentus/about.md b/docs/scrappers/fundamentus/about.md deleted file mode 100644 index 9b023b9..0000000 --- a/docs/scrappers/fundamentus/about.md +++ /dev/null @@ -1,2 +0,0 @@ -# Sobre o Scrapper - diff --git a/docs/scrappers/fundamentus/indicadores/acoes.md b/docs/scrappers/fundamentus/indicadores/acoes.md index 05b3603..cfbc2ee 100644 --- a/docs/scrappers/fundamentus/indicadores/acoes.md +++ b/docs/scrappers/fundamentus/indicadores/acoes.md @@ -1,6 +1,6 @@ # Fundamentus: Indicadores de Ações -De forma objetiva, a tabela abaixo contempla uma lista de indicadores financeiros (e suas respectivas definições/descrições) disponíveis no site e obtidos como resultado do método [coleta_indicadores_de_ativo()](../../../mkdocstrings/scrappers/fundamentus.md/#pynvest.scrappers.fundamentus.Fundamentus.coleta_indicadores_de_ativo). +De forma objetiva, a tabela abaixo contempla uma lista de indicadores financeiros (e suas respectivas definições/descrições) disponíveis no site e obtidos como resultado do método [coleta_indicadores_de_ativo()](../mkdocstrings/fundamentus.md/#pynvest.scrappers.fundamentus.Fundamentus.coleta_indicadores_de_ativo). | **Nome Original** | **Atributo DataFrame** | **Descrição** | | :-- | :-- | :-- | diff --git a/docs/scrappers/fundamentus/indicadores/fiis.md b/docs/scrappers/fundamentus/indicadores/fiis.md index d96e3e8..0d87dc9 100644 --- a/docs/scrappers/fundamentus/indicadores/fiis.md +++ b/docs/scrappers/fundamentus/indicadores/fiis.md @@ -1,6 +1,6 @@ # Fundamentus: Indicadores de FIIs -No portal Fundamentus, Fundos Imobiliários possuem seus próprios indicadores fundamentalistas. A tabela abaixo traz a visão daquilo que também é obtido pela chamada do método [coleta_indicadores_de_ativo()](../../../mkdocstrings/scrappers/fundamentus.md/#pynvest.scrappers.fundamentus.Fundamentus.coleta_indicadores_de_ativo) com *tickers* de FIIs. +No portal Fundamentus, Fundos Imobiliários possuem seus próprios indicadores fundamentalistas. A tabela abaixo traz a visão daquilo que também é obtido pela chamada do método [coleta_indicadores_de_ativo()](../mkdocstrings/fundamentus.md/#pynvest.scrappers.fundamentus.Fundamentus.coleta_indicadores_de_ativo) com *tickers* de FIIs. | **Nome Original** | **Atributo DataFrame** | **Descrição** | | :-- | :-- | :-- | diff --git a/docs/scrappers/about.md b/docs/scrappers/index.md similarity index 97% rename from docs/scrappers/about.md rename to docs/scrappers/index.md index a631dca..1455106 100644 --- a/docs/scrappers/about.md +++ b/docs/scrappers/index.md @@ -1,4 +1,4 @@ -# Organização das Páginas +# Scrappers A proposta desta seção é propor uma visão consolidada contendo todos os detalhes relacionados aos *scrappers* disponíveis para uso na biblioteca. A ideia é que cada *scrapper* tenha o seu próprio combo de documentação composto por: diff --git a/docs/tools/arquitetura.md b/docs/tools/arquitetura.md new file mode 100644 index 0000000..8deb3dc --- /dev/null +++ b/docs/tools/arquitetura.md @@ -0,0 +1,19 @@ +# Arquitetura de Solução + +Agora que temos uma noção sobre o que é o módulo `pynvest-tools` e os principais benefícios atrelados ao seu uso, vamos iniciar um aprofundamento técnico sobre o que está por trás da solução. + +Iniciando pela arquitetura, a imagem abaixo traz uma visão detalhada da solução contendo toda a dinâmica de serviços e integrações disponibilizadas para o usuário. + + + :octicons-light-bulb-16: + **Dica:** clique na imagem para uma melhor visualização dos elementos. + + +![Arquitetura de Solução](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.2.x/docs/drawio/pynvest-tool-diagram-print.png?raw=true) + +Em essência, o diagrama acima contempla todos os serviços AWS entregues pelo módulo Terraform e, além disso, traz a visão de todas as integrações entre os recursos. + +Toda a dinâmica de implantação do módulo é baseada em **6 macro etapas** que, em linhas gerais, contemplam toda a lógica de extração, preparação e atualização agendada dos dados financeiros disponibilizados ao usuário em seu próprio ambiente AWS. + +Ao longo desta seção de detalhamento, será possível observar todas as nuances e particularidades dos [recursos provisionados](./recursos.md) e das [etapas de processamento da solução](./processo.md). + diff --git a/docs/tools/demo.md b/docs/tools/demo.md new file mode 100644 index 0000000..88371bb --- /dev/null +++ b/docs/tools/demo.md @@ -0,0 +1,114 @@ +# Demonstração pynvest-tools + +Para demonstrar as funcionalidades do pynvest-tools, vídeos foram gravados e transformados em GIFs para contemplar a jornada **completa** de utilização da solução, desde a chamada do módulo Terraform até a execução de *queries* no Athena com as tabelas geradas pelo processo. Navegue por essa decomentação e sane todas as suas dúvidas. + +## Implantação dos Recursos + +O primeiro passo a ser demonstrado é a chamada ao [módulo Terraform pynvest-tools](https://github.com/ThiagoPanini/pynvest-tools) para implantarmos, em uma conta AWS alvo, todos os recursos e serviços necessários por fazer a magia acontecer. Para isso, realizaremos: + +- A utilização do [Visual Studio Code](https://code.visualstudio.com/) como IDE +- A execução dos comandos Terraform para criação dos recursos: + - `terraform init` + - `terraform plan` + - `terraform apply` + + +??? example "📽️ Inicialização do módulo pynvest-tools via `terraform init`" + [![Um GIF mostrando a execução do comando terraform init para inicialização do módulo pynvest-tools](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-terraform-init-edited.gif?raw=true)](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-terraform-init-edited.gif?raw=true) + +Uma vez inicializado o módulo, podemos validar o plano de implantação dos recursos da seguinte maneira: + +??? example "📽️ Visualizando o plano de implantação via `terraform plan`" + [![Um GIF mostrando a execução do comando terraform plan para visualização de plano de implantação de recursos do módulo pynvest-tools](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-terraform-plan.gif?raw=true)](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-terraform-plan.gif?raw=true) + +Agora que sabemos a quantidade de recursos que serão adicionados em nosso ambiente AWS, podemos realizar a implanatação definitiva. + +??? example "📽️ Implantando os recursos via `terraform apply`" + [![Um GIF mostrando a execução do comando terraform apply para implantação de recursos do módulo pynvest-tools](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-terraform-apply-edited.gif?raw=true)](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-terraform-apply-edited.gif?raw=true) + + +## Visualizando os Recursos Implantados + +Após a correta chamada do módulo Terraform, teremos, em nosso ambiente AWS, todos os recursos contemplados dentro da lógica interna do módulo. De forma simplificada, podemos resumir tais recursos em: + +- **IAM** onde teremos *policies* e *roles* previamente definidas +- **Eventbridge** onde teremos um gatilho inicial de execução do processo de geração e atualização das tabelas +- **Lambda** onde teremos funções específicas para validar e processar os dados solicitados +- **Glue Data Catalog** onde teremos os *databases* e as tabelas devidamente catalogadas +- **Athena** onde teremos a possibilidade de consultar e analisar os dados gerados + +Para cada um destes cenários, vídeos de demonstração trarão a visão pós chamada do módulo com o intuito de dar uma maior clareza sobre tudo aquilo que está contemplado na solução. + +??? info "Relembrando a arquitetura do projeto" + ![[](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/drawio/pynvest-tool-diagram.png?raw=true)](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.1/docs/drawio/pynvest-tool-diagram.png?raw=true) + +### IAM + +Como forma de garantir que as aplicações tenham as permissões necessárias para obter, processar e atualizar os dados referentes aos indicadores financeiros, uma série de *policies* e *roles* [IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) são automaticamente entregues aos usuários. Uma listagem completa de todos os elementos IAM contemplados pode ser visualizada abaixo: + +??? info "Lista de todas as policies IAM presentes no pynvest-tools" + + *Policies* + + | **Nome da policy** | **Descrição** | + | :-- | :-- | + | [pynvest-cloudwatch-logs](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.1/iam/policy-templates/pynvest-cloudwatch-logs.json) | Permite criação de *log groups* e escrita de *log streams* no CloudWatch | + | [pynvest-lambda-invoke-functions](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.1/iam/policy-templates/pynvest-lambda-invoke-functions.json) | Permite a invocação de outras funções Lambda criadas no projeto | + | [pynvest-sqs-send-msgs-to-tickers-queues](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.1/iam/policy-templates/pynvest-sqs-send-msgs-to-tickers-queues.json) | Permite o envio de mensagens para filas SQS criadas no projeto | + | [pynvest-sqs-poll-msgs-from-tickers-queues](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.1/iam/policy-templates/pynvest-sqs-poll-msgs-from-tickers-queues.json) | Permite o *poll* de mensagens das filas SQS criadas no projeto | + | [pynvest-s3-manage-sor-data](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.1/iam/policy-templates/pynvest-s3-manage-sor-data.json) | Permite listagem, leitura, escrita e deleção de objetos em bucket e prefixos restritos para dados SoR processados no projeto | + | [pynvest-gluedatacatalog-check-partitions-sor-tables](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.1/iam/policy-templates/pynvest-gluedatacatalog-check-partitions-sor-tables.json) | Permite a validação e eventual deleção de partições em tabelas SoR criadas pelo projeto | + | [pynvest-gluedatacatalog-manage-sor-tables](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.1/iam/policy-templates/pynvest-gluedatacatalog-manage-sor-tables.json) | Permite a criação e atualização de tabelas SoR criadas no projeto, além da atualização de partições processadas | + +Agora que sabemos mais a respeito de tudo o que está consolidado no âmbito de identidade de acesso no projeto pynvest-tools, vamos visualizar os elementos já criados em nosso ambiente AWS alvo após a [implantação dos recursos](./demo.md#implantação-dos-recursos). + +??? example "📽️ Visualizando policies e roles IAM criadas pelo projeto" + [![Um GIF mostrando a presença de policies e roles IAM implantadas pelo módulo pynvest-tools](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-iam.gif?raw=true)](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-iam.gif?raw=true) + + +### Eventbridge + +Agora que visualizamos a presença das *policies* e *roles* IAM necessárias para conceder todas as permissões necessárias para os recursos do módulo pynvest-tools, vamos verificar a existência do gatilho de inicialização do processo de obtenção e atualização dos dados de indicadores financeiros (Lambda *trigger*). Faremos isso através da validação da existência de uma regra no [Eventbridge](https://aws.amazon.com/pt/eventbridge/). + +??? example "📽️ Visualizando regra de agendamento de execução de processos" + [![Um GIF mostrando a presença de uma regra no eventbridge](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-eventbridge.gif?raw=true)](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-eventbridge.gif?raw=true) + +### Lambda + +Com a regra de agendamento devidamente implementada, podemos navegar no serviço [Lambda](https://aws.amazon.com/pt/lambda/) e validar se as funções foram criadas com sucesso. Em essência, tais funções são as aplicações responsáveis por consolidar toda a lógica de coleta, tratamento e atualização dos dados de indicadores financeiros de ativos da B3. Algumas funções possuem integrações com serviços específicos, como o [SQS](https://aws.amazon.com/sqs/), o [S3](https://aws.amazon.com/s3/) e o [Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html). + +??? example "📽️ Visualizando funções Lambda para obtenção e processamento dos dados" + [![Um GIF mostrando a presença de funções Lambda](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-lambda.gif?raw=true)](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-lambda.gif?raw=true) + +### SQS + +Em uma das etapas de obtenção dos dados de indicadores financeiros, *tickers* de ativos são posicionados em filas SQS para posterior processamento. + +??? example "📽️ Visualizando filas SQS para facilitar o processamento dos dados" + [![Um GIF mostrando a presença de filas SQS](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-sqs.gif?raw=true)](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-sqs.gif?raw=true) + + +### S3 + +Na dinâmica de atualização de dados, funções Lambda são engatilhadas por filas SQS para obter e escrever arquivos PARQUET em um bucket no S3 (por exemplo, o bucket SoR informado pelo usuário no parâmetro `bucket_names_map` exigido pelo módulo pynvest-tools). Simulando essa dinâmica de processamento, uma vez obtidos os dados, espera-se que novos prefixos de tabela surjam no S3 apontado com os respectivos arquivos PARQUET processados. + +??? example "📽️ Visualizando dados atualizados no S3 após a execução agendada das Lambdas" + [![Um GIF mostrando a presença de dados processados no S3](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-s3.gif?raw=true)](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-s3.gif?raw=true) + +Neste momento, é importante reforçar que o gatilho do Eventbridge é o início de tudo. Por padrão, o módulo pynvest-tools considera uma execução diária com início às 19h. Em outras palavras, novos dados irão chegar no bucket alvo todos os dias após às 19h. + +### Glue Data Catalog + +E assim, em conjunto com a escrita de arquivos PARQUET em bucket do S3, há também a catalogação dos dados em tabelas do Glue Data Catalog. Ao acessar a página do serviço, será possível visualizar novos *databases* e tabelas criadas pelos processos internos disponibilizados pelo módulo pynvest-tools. + +??? example "📽️ Visualizando databases e tabelas disponibilizadas no Glue Data Catalog" + [![Um GIF mostrando a presença de databases e tabelas disponibilizadas no Glue Data Catalog](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-glue-data-catalog.gif?raw=true)](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-glue-data-catalog.gif?raw=true) + + +### Athena + +Por fim, uma vez atualizados os indicadores financeiros através das tabelas disponibilizadas, os usuários poderão realizar as mais variadas análises em seu ambiente de nuvem AWS. Uma das possibilidades é, por exemplo, a execução de *queries* analíticas no Athena. + +??? example "📽️ Executando queries no Athena para realização de análise de dados" + [![Um GIF mostrando a execução de queries no Athena para realização de análise de dados](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-athena.gif?raw=true)](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.0.x/docs/gifs/pynvest-tools-athena.gif?raw=true) + diff --git a/docs/tools/imgs/queries/exemplo-01.png b/docs/tools/imgs/queries/exemplo-01.png new file mode 100644 index 0000000..5b11f2a Binary files /dev/null and b/docs/tools/imgs/queries/exemplo-01.png differ diff --git a/docs/tools/imgs/queries/exemplo-02.png b/docs/tools/imgs/queries/exemplo-02.png new file mode 100644 index 0000000..80aa56e Binary files /dev/null and b/docs/tools/imgs/queries/exemplo-02.png differ diff --git a/docs/tools/imgs/queries/exemplo-03.png b/docs/tools/imgs/queries/exemplo-03.png new file mode 100644 index 0000000..242a0a5 Binary files /dev/null and b/docs/tools/imgs/queries/exemplo-03.png differ diff --git a/docs/tools/imgs/queries/exemplo-04.png b/docs/tools/imgs/queries/exemplo-04.png new file mode 100644 index 0000000..a9c5660 Binary files /dev/null and b/docs/tools/imgs/queries/exemplo-04.png differ diff --git a/docs/tools/processo.md b/docs/tools/processo.md new file mode 100644 index 0000000..060b758 --- /dev/null +++ b/docs/tools/processo.md @@ -0,0 +1,117 @@ +# Etapas do Processamento + +A solução `pynvest-tools` abrange a implantação de uma série de recursos AWS que, juntos, comportam uma série de atividades previamente definidas e designadas para um propósito único: disponibilizar dados confiáveis e recorrentemente atualizados contendo indicadores financeiros de ações e fundos imobiliários. + +Para que isso seja possível, um total de **6 macro etapas** foram desenhadas de modo pontual. Nesta seção, o usuário poderá encontrar detalhes sobre cada uma das etapas de processamento dos recursos do módulo. + +??? tip "Lembrete: arquitetura da solução" + Expanda esse bloco sempre que precisar relembrar o desenho de arquitetura de solução. + + + :octicons-zoom-in-16: + Clique na imagem para uma melhor visualização dos elementos. + + + ![Arquitetura de Solução](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.2.x/docs/drawio/pynvest-tool-diagram-print.png?raw=true) + + + :octicons-light-bulb-16: + **Dica:** visando facilitar o detalhamento das etapas, o desenho de arquitetura contempla indicações de sub-etapas em cada macro-etapa do processo. Por exemplo, a etapa 1 definida como "eliminação de partições do dia" contempla os passos 1.1, 1.2 e 1.3 que, de forma simplificada, serão detalhados ao longo desta seção. + + +## Etapa 1: Eliminação das Partições do Dia + + + :octicons-zoom-in-16: + Clique na imagem para expandir a visualização. + + +![Desenho de arquitetura contendo apenas a primeira etapa do processamento](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.2.x/docs/imgs/arquitetura-etapas/etapa-01.png?raw=true){width=550} + +:octicons-feed-issue-closed-16: ***1.1*** :octicons-chevron-right-12: Um gatilho no Eventbridge agendado para executar todo dia de semana (segunda à sexta) às 18h45m chama a função Lambda `pynvest-lambda-check-and-delete-partitions` + +:octicons-feed-issue-closed-16: ***1.2*** :octicons-chevron-right-12: A função Lambda citada recebe informações sobre todas as tabelas a serem mapeadas como uma variável de ambiente. Adicionalmente, é criada na função, em tempo de execução, uma variável para armazenar a data atual de processamento através da biblioteca `datetime`. Dessa forma, um laço de repetição é aplicado à lista de tabelas mapeadas para validar a existência de arquivos físicos no S3 e partições lógicas no Glue Data Catalog relacionadas a data atual de processamento criada. Em caso positivo, ou seja, existem arquivos físicos e partições relacionadas ao dia atual de execução, então a função utiliza métodos do [AWS SDK for Pandas](https://aws-sdk-pandas.readthedocs.io/en/stable/) para eliminar os arquivos físicos (via `awswrangler.s3.delete_objects()`) e as partições (via `awswrangler.catalog.delete_partitions()`) da data de execução do processo de modo a garantir que nenhum registro duplicado será gerado. + +:octicons-feed-issue-closed-16: ***1.3*** :octicons-chevron-right-12: De maneira assíncrona, a função `pynvest-lambda-check-and-delete-partitions` é responsável por engatilhar uma outra função Lambda para a continuidade do processo. + +___ + +## Etapa 2: Envio de Códigos de Ativos para Fila SQS + + + :octicons-zoom-in-16: + Clique na imagem para expandir a visualização. + + +![Desenho de arquitetura contendo apenas a segunda etapa do processamento](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.2.x/docs/imgs/arquitetura-etapas/etapa-02.png?raw=true) + +:octicons-feed-issue-closed-16: ***2.1*** :octicons-chevron-right-12: Na sequência, o processo tem continuidade através da coleta de *tickers* (códigos) de ativos financeiros (Ações e Fundos Imobiliários) presentes no site [Fundamentus](https://www.fundamentus.com.br/). Essa extração é realizada por meio da própria biblioteca [pynvest](https://github.com/ThiagoPanini/pynvest) em seu método [extracao_tickers_de_ativos()](../scrappers/fundamentus/mkdocstrings/fundamentus.md/#pynvest.scrappers.fundamentus.Fundamentus.extracao_tickers_de_ativos) capaz de retornar uma lista de *tickers* com base em um tipo específico de ativo. + +:octicons-feed-issue-closed-16: ***2.2*** :octicons-chevron-right-12: As listas são então separadas entre Ações e Fundos Imobiliários para, posteriormente, serem alvo de um processo de iteração visando o envio de mensagens para filas específicas no SQS. + +___ + +## Etapa 3: Processamento de Tabelas SoR + + + :octicons-zoom-in-16: + Clique na imagem para expandir a visualização. + + +![Desenho de arquitetura contendo apenas a terceira etapa do processamento](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.2.x/docs/imgs/arquitetura-etapas/etapa-03.png?raw=true) + +:octicons-feed-issue-closed-16: ***3.1*** :octicons-chevron-right-12: As filas SQS utilizadas para armazenar *tickers* de Ações e Fundos Imobiliários, respectivamente, engatilham outras duas funções Lambda. As funções Lambda então recebem os eventos de mensagens recebidas nas filas e, através de um laço de repetição aplicado ao número de mensagens recebidas, coletam as informações de *tickers* e realizam a extração de indicadores financeiros através do método [coleta_indicadores_de_ativo()](../scrappers/fundamentus/mkdocstrings/fundamentus.md/#pynvest.scrappers.fundamentus.Fundamentus.coleta_indicadores_de_ativo) da biblioteca `pynvest`. Os indicadores são então obtidos como DataFrames do pandas e escritos no S3 como arquivos parquet no bucket relacionado à camada SoR (dados brutos). A partição física é selecionada como a data de execução do processo. As etapas aqui mencionadas são análogas tanto para indicadores de Ações quanto para Fundos Imobiliários. + +:octicons-feed-issue-closed-16: ***3.2*** :octicons-chevron-right-12: Cada vez que novos arquivos são colocados no S3 (bucket SoR) através da função Lambda acima citada, outras duas Lambdas são acionadas com a missão de ler os arquivos e preparar os dados para serem colocados na camada SoT. + +___ + +## Etapa 4: Processamento de Tabelas SoT + + + :octicons-zoom-in-16: + Clique na imagem para expandir a visualização. + + +![Desenho de arquitetura contendo apenas a quarta etapa do processamento](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.2.x/docs/imgs/arquitetura-etapas/etapa-04.png?raw=true) + +:octicons-feed-issue-closed-16: ***4.1*** :octicons-chevron-right-12: Essa etapa é estritamente semelhante à etapa ***3.1***, com a diferença de que os gatilhos para as funções Lambda de preparação de dados para Ações e FIIs são compostos por eventos no S3 e não em filas SQS. Em suma, toda vez que objetos são colocados no bucket SoR nas *locations* das tabelas de Ações e FIIs, as respectivas funções Lambda de preparação são acionadas para a leitura dos dados recebidos via eventos, preparação e posterior escrita e catalogação na camada SoT. + +:octicons-feed-issue-closed-16: ***4.2*** :octicons-chevron-right-12: Assim também como na etapa ***3.2***, cada vez que arquivos são escritos na camada SoT do S3, processos posteriores são engatilhados para a continuidade da solução. + +___ + + +## Etapa 5: Processamento de Tabela Spec + + + :octicons-zoom-in-16: + Clique na imagem para expandir a visualização. + + +![Desenho de arquitetura contendo apenas a quinta etapa do processamento](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.2.x/docs/imgs/arquitetura-etapas/etapa-05.png?raw=true) + +:octicons-feed-issue-closed-16: ***5.1*** :octicons-chevron-right-12: Mais uma vez, esta etapa se assemelha ao que se pode encontrar em ***3.1*** e ***3.2***. A principal diferença se dá pelo fato de estarmos falando de um processo de especialização de dados que utiliza informações de ambas as tabelas SoTs (Ações e FIIs), exigindo assim a existência de uma única função Lambda responsável por ler os arquivos gerados na camada SoT para as tabelas (recebidos via eventos), processar e escrever o resultado em tabela única da camada Spec. + +___ + +## Etapa 6: Deduplicação de Registros + + + :octicons-zoom-in-16: + Clique na imagem para expandir a visualização. + + +![Desenho de arquitetura contendo apenas a quinta etapa do processamento](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.2.x/docs/imgs/arquitetura-etapas/etapa-06.png?raw=true){width=550} + +:octicons-feed-issue-closed-16: ***6.1*** :octicons-chevron-right-12: Assim como a etapa ***1.1*** do processo, esta etapa tem seu início através de um gatilho no Eventbridge programado para executar um *workflow* no Step Functions todo dia de semana (segunda à sexta) às 19h (15 minutos após a execução do gatilho em ***1.1***). O *workflow* tem o objetivo único de remover registros duplicados que eventualmente podem surgir durante o processamento dos dados através de eventos nas tabelas das camadas SoT (2 tabelas) e Spec (1 tabela). + +:octicons-feed-issue-closed-16: ***6.2*** :octicons-chevron-right-12: Como uma primeira parte do processo interno do *workflow* do Step Functions, duas funções Lambda são engatilhadas em paralelo para ler os dados presentes nas tabelas da camada SoT (Ações e FIIs), remover registros duplicados e, por fim, reescrever os dados na mesma camada após o processo de deduplicação. + +:octicons-feed-issue-closed-16: ***6.3*** :octicons-chevron-right-12: Uma vez finalizado o processo de deduplicação de dados na camada SoT, então uma próxima Lambda é chamada com a mesma missão das Lambdas anteriores, porém focada na tabela de ativos presente na camada Spec. + +___ + +## Fim do Processo + +Com todas as etapas concluídas, o usuário terá a possibilidade de realizar qualquer atividade relacionada à análise de dados de indicadores financeiros, sejam eles brutos (camada SoR), preparados (camada SoT) ou mesmo especializados (camada Spec). \ No newline at end of file diff --git a/docs/tools/queries.md b/docs/tools/queries.md new file mode 100644 index 0000000..0726a44 --- /dev/null +++ b/docs/tools/queries.md @@ -0,0 +1,149 @@ +# Valor para o Usuário + +Esta seção da documentação tem o nobre desejo de proporcionar uma visão prática, ao usuário (e possíveis usuários) do módulo `pynvest-tools`, sobre algumas análises interessantes que podem ser feitas após a utilização do módulo. + +Essencialmente, o conteúdo deste bloco será composto por *queries* SQL capazes de serem executadas no [Amazon Athena](https://aws.amazon.com/pt/athena/) de modo a obter resultados analíticos com os dados de indicadores financeiros coletados e armazenados pelos componentes implantados pelo módulo. + + + :octicons-eye-16: + **Observação:** as consultas SQL a serem exemplificadas abaixo consideram que as tabelas do módulo foram criadas juntamente com os databases recomendados quando o módulo é chamado com `flag_create_databases=true`. + + + +## Verificando Indicadores de uma Ação + +A tabela `tbsot_fundamentus_indicadores_acoes_prep` entregue na camada SoT do usuário contém informações preparadas de indicadores fundamentalistas de Ações listadas na B3. A *query* SQL abaixo permite retornar alguns desses indicadores para uma Ação específica, como a [ITUB3](https://www.google.com/search?q=itub3&oq=itub3&gs_lcrp=EgZjaHJvbWUyBggAEEUYOdIBBzUwN2owajGoAgCwAgA&sourceid=chrome&ie=UTF-8), por exemplo. + +```sql +--Retornando indicadores da ação ITUB3 +SELECT + nome_papel, + nome_empresa, + nome_setor, + vlr_ind_p_sobre_l, + vlr_ind_p_sobre_vp, + vlr_ind_div_yield, + vlr_ind_vpa + +FROM db_pynvest_sot.tbsot_fundamentus_indicadores_acoes_prep + +WHERE nome_papel = 'ITUB3' + --Filtrando apenas dados da última partição disponível + AND anomesdia_exec = ( + SELECT MAX(anomesdia_exec) FROM db_pynvest_sot.tbsot_fundamentus_indicadores_acoes_prep + ) +``` + +??? example "Clique para visualizar o resultado da consulta SQL" + + :octicons-light-bulb-16: + **Dica:** clique na imagem para expandir. + + + ![Resultado para exemplo de consulta SQL](./imgs/queries/exemplo-01.png) + +A consulta acima permite analisar um ativo financeiro (ação) em termos de alguns de seus principais indicadores, como [P/L](https://statusinvest.com.br/termos/p/p-l), [P/VP](https://statusinvest.com.br/termos/p/p-vp), [Dividend Yield](https://statusinvest.com.br/termos/d/dividend-yield) e [VPA](https://statusinvest.com.br/termos/p/p-vpa). + +## Analisando Valor e Variação da Cotação + +E se fosse preciso analisar o quanto o preço de uma ação evoluiu ao longo do tempo? E quanto a suas variações percentuais em diferentes épocas? Na consulta abaixo, continuamos olhando para o ativo ITUB3, agora sob uma ótica vinculada ao quanto a cotação desse ativo sofreu modificações ao longo dos últimos dias. + +```sql +SELECT + nome_papel, + anomesdia_exec, + vlr_cot, + vlr_min_52_sem, + vlr_max_52_sem, + pct_var_dia, + pct_var_mes, + pct_var_30d, + pct_var_12m + +FROM db_pynvest_sot.tbsot_fundamentus_indicadores_acoes_prep + +WHERE nome_papel = 'ITUB3' + --Filtrando os últimos 4 dias de dados + AND anomesdia_exec >= CAST(date_format(date_add('day', -4, now()), '%Y%m%d') AS INTEGER) + +ORDER BY anomesdia_exec DESC +``` + +??? example "Clique para visualizar o resultado da consulta SQL" + + :octicons-light-bulb-16: + **Dica:** clique na imagem para expandir. + + + ![Resultado para exemplo de consulta SQL](./imgs/queries/exemplo-02.png) + +No resultado analítico acima, é possível acompanhar a evolução da cotação de um determinado ativo, bem como suas variações percentuais em diferentes épocas (dia, mês, 30 dias, 12 meses, entre outros). + + +## Indicadores de Fundos Imobiliários + +E se a ideia fosse observar mais a fundo alguns Fundos Imobiliários específicos? Na consulta abaixo, alguns indicadores fundamentalistas de FIIs de um determinado setor são retornados para fins de comparação. + +Vamos supor, que nessa análise, deseja-se comparar apenas FIIs do segmento "shopping" e com valor de cotação entre R$50,00 e R$100,00. + +```sql +SELECT + fii, + segmento, + num_cotas, + vlr_cot, + vlr_ffo_yield, + vlr_ffo_sobre_cota, + vlr_div_yield, + vlr_p_sobre_vp + +FROM db_pynvest_sot.tbsot_fundamentus_indicadores_fiis_prep + +WHERE segmento = 'Shoppings' + AND anomesdia_exec = (SELECT max(anomesdia_exec) FROM db_pynvest_sot.tbsot_fundamentus_indicadores_fiis_prep) + AND pct_var_dia IS NOT NULL + AND vlr_cot BETWEEN 50 AND 150 +``` + +??? example "Clique para visualizar o resultado da consulta SQL" + + :octicons-light-bulb-16: + **Dica:** clique na imagem para expandir. + + + ![Resultado para exemplo de consulta SQL](./imgs/queries/exemplo-03.png) + +## Análise de Cotação de Ações e FIIs + +Em um outro cenário igualmente interessante, supõe-se que o usuário tenha uma carteira de ativos que ele já investe (ou pretende investir) e, para balizar sua próxima decisão financeira, o mesmo deseja analisar o valor de cotação de alguns desses ativos da carteira (misturando Ações e FIIs). + +Para este caso, o ideal é utilizar a tabela especializada de cotações de ativos (disponibilizada na camada Spec). + +```sql +SELECT + codigo_ticker_ativo, + tipo_ativo, + nome_ativo, + vlr_cot, + dt_ult_cot, + vlr_min_52_sem, + vlr_max_52_sem, + pct_var_dia, + pct_var_mes, + pct_var_30d + +FROM db_pynvest_spec.tbspec_fundamentus_cotacao_ativos + +WHERE codigo_ticker_ativo IN ('ITUB3', 'ITSA4', 'BBSE3', 'TAEE11', 'XPLG11', 'MALL11') + AND anomesdia_exec = (SELECT max(anomesdia_exec) FROM db_pynvest_sot.tbsot_fundamentus_indicadores_fiis_prep) + +ORDER BY tipo_ativo, vlr_cot DESC +``` + +??? example "Clique para visualizar o resultado da consulta SQL" + + :octicons-light-bulb-16: + **Dica:** clique na imagem para expandir. + + + ![Resultado para exemplo de consulta SQL](./imgs/queries/exemplo-04.png) \ No newline at end of file diff --git a/docs/tools/quickstart.md b/docs/tools/quickstart.md new file mode 100644 index 0000000..f5746cc --- /dev/null +++ b/docs/tools/quickstart.md @@ -0,0 +1,36 @@ +# Primeiros Passos + +O módulo `pynvest-tools` certamente poderá ajudar usuários a terem insumos extremamente interessantes para a aplicação dos mais variados processos de *analytics*. Para iniciar a jornada de utilização, é importante abordar alguns conceitos práticos. + +## Pré Requisitos + +- ☁️ [Conta AWS](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) disponível para uso +- 🔑 [Acesso programático](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html) à conta com chaves de acesso +- ⛏ [Terraform](https://www.terraform.io/) instalado +- 🪣 [Buckets S3](https://aws.amazon.com/s3/) existentes na conta AWS para armazenamento de dados brutos (SoR), preparados (SoT) e especializados (Spec) + +## Chamando o Módulo Terraform + +Uma vez cumpridos os pré requisitos, o usuário poderá realizar uma [chamada de módulo Terraform](https://developer.hashicorp.com/terraform/language/modules/syntax) no seguinte formato: + +```python +# Chamada de módulo pynvest-tools em arquivo main.tf +module "pynvest-tools" { + source = "git::https://github.com/ThiagoPanini/pynvest-tools?ref=main" + + # Fornecendo nomes de buckets para armazenamento dos dados a serem gerados + bucket_names_map = { + "sor" = "some-bucket-name-to-store-sor-data", + "sot" = "some-bucket-name-to-store-sot-data", + "spec" = "some-bucket-name-to-store-spec-data" + } +} +``` + +Após configurar a chamada ao módulo, basta executar os seguintes comandos Terraform para implantar a infraestrutura relacionada: + +- `terraform init` para inicialização do módulo +- `terraform plan` para validar o plano de implantação +- `terraform apply` para aplicar a implantação na conta AWS alvo + +Pronto! Você agora terá em sua conta AWS todo um conjunto de serviços para extrair, preparar e armazenar diariamente indicadores de Ações e Fundos Imobiliários da B3! Continue navegando nesta documentação para aprender mais detalhes sobre este incrível módulo! \ No newline at end of file diff --git a/docs/tools/recursos.md b/docs/tools/recursos.md new file mode 100644 index 0000000..1603c05 --- /dev/null +++ b/docs/tools/recursos.md @@ -0,0 +1,157 @@ +# Recursos Provisionados pelo Módulo + +Sendo um módulo Terraform, o `pynvest-tools` possui toda uma lógica de código baseada em IaC (*Infrastructure as Code*) para provisionar uma série de serviços AWS previamente configurados capazes de realizar todas as tarefas necessárias para proporcionar, ao usuário, uma experiência completa de análise de indicadores financeiros. + +Conhecer os detalhes de cada um dos recursos provisionados é um passo importante para que os usuários compreendam, de fato, toda a mágia por trás da solução. + +??? tip "Lembrete: arquitetura da solução" + Expanda esse bloco sempre que precisar relembrar o desenho de arquitetura de solução. + + + :octicons-light-bulb-16: + **Dica:** clique na imagem para uma melhor visualização dos elementos. + + + ![Arquitetura de Solução](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.2.x/docs/drawio/pynvest-tool-diagram-print.png?raw=true) + +## Serviços AWS + +Em linhas gerais, a última versão do módulo `pynvest-tools` considera o provisionamento dos seguintes recursos: + +- :octicons-lock-16: :octicons-chevron-right-12: 9 *policies* e 7 *roles* no IAM para configuração das permissões das aplicações +- :octicons-database-16: :octicons-chevron-right-12: 3 databases e 5 tabelas no Glue Data Catalog para consultas analíticas nos indicadores financeiros processados +- :octicons-terminal-16: :octicons-chevron-right-12: 7 funções Lambda contendo todas as lógicas de processamento embarcadas +- :octicons-mail-16: :octicons-chevron-right-12: 2 filas SQS para armazenamento de *tickers* (códigos) de Ações e Fundos Imobiliários a terem seus respectivos indicadores processados +- :octicons-workflow-16: :octicons-chevron-right-12: 1 workflow no Step Functions para otimização do armazenamento dos dados +- :octicons-calendar-16: :octicons-chevron-right-12: 2 regras de agendamento no Eventbridge para execução dos processos + +Cada serviço AWS contemplado no módulo `pynvest-tools` possui uma função representativa sobre como a solução, em geral, funciona. As subseções a seguir visam trazer um pouco mais de clareza sobre como cada um dos recursos acima listados atuam para gerar o valor esperado aos usuários. + +### :octicons-lock-16: Policies e Roles IAM + +As *policies* e *roles* IAM criadas pelo módulo `pynvest-tools` foram pensadas como elementos capazes de fornecer apenas as permissões necessárias para as aplicações e serviços de orquestração da solução. + +Cada *policy* possui um contexto específico capaz de ser visualizado através da tabela abaixo: + +??? info "Listagem de policies IAM presentes no módulo" + | :octicons-lock-16: **Policy** | :octicons-pencil-16: **Descrição** | :octicons-link-16: **JSON** | + | :-- | :-- | :-- | + | pynvest-store-cloudwatch-logs | Concede permissões de escrita de logs no CloudWatch através de funções Lambda relacionadas ao módulo | [Link](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.2.x/infra/modules/iam/policy-templates/pynvest-store-cloudwatch-logs.json) | + | pynvest-check-and-delete-partitions | Concede permissões de listagem e eliminação de objetos no S3 e de partições de tabelas no Glue Data Catalog | [Link](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.2.x/infra/modules/iam/policy-templates/pynvest-check-and-delete-partitions.json) | + | pynvest-invoke-lambda-functions | Concede permissões de invocação de outras funções Lambda relacionadas ao módulo | [Link](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.2.x/infra/modules/iam/policy-templates/pynvest-invoke-lambda-functions.json) | + | pynvest-invoke-state-machines | Concede permissões de inicialização de workflows do Step Function relacionados ao módulo | [Link](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.2.x/infra/modules/iam/policy-templates/pynvest-invoke-state-machines.json) | + | pynvest-send-msgs-to-tickers-queues | Concede permissões para envio de mensagens para filas no SQS relacionadas ao módulo | [Link](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.2.x/infra/modules/iam/policy-templates/pynvest-send-msgs-to-tickers-queues.json) | + | pynvest-share-sor-financial-data | Concede permissões de coleta de mensagens de filas SQS relacionadas ao módulo, além da escrita de objetos no S3 e atualização de partições em tabelas no Glue Data Catalog na camada SoR (dados brutos) | [Link](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.2.x/infra/modules/iam/policy-templates/pynvest-share-sor-financial-data.json) | + | pynvest-share-sot-financial-data | Concede permissões de leitura de dados na camada SoR (dados brutos), além da escrita de objetos no S3 e atualização de partições em tabelas no Glue Data Catalog na camada SoT (dados preparados) | [Link](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.2.x/infra/modules/iam/policy-templates/pynvest-share-sot-financial-data.json) | + | pynvest-share-spec-financial-data | Concede permissões de leitura de dados na camada SoT (dados preparados), além da escrita de objetos no S3 e atualização de partições em tabelas no Glue Data Catalog na camada Spec (dados especializados) | [Link](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.2.x/infra/modules/iam/policy-templates/pynvest-share-spec-financial-data.json) | + | pynvest-dedup-financial-data | Concede permissões de leitura e escrita de dados nas camadas SoT e Spec, tanto no S3 quanto no Glue Data Catalog | [Link](https://github.com/ThiagoPanini/pynvest-tools/blob/v0.2.x/infra/modules/iam/policy-templates/pynvest-dedup-financial-data.json) | + +Já as *roles* são basicamente construções assumidas por aplicações/serviços e formadas por uma ou mais *policies* presentes no módulo. + +??? info "Listagem de roles IAM presentes no módulo" + | :octicons-lock-16: **Role** | :octicons-pencil-16: **Descrição** | + | :-- | :-- | + | pynvest-lambda-check-and-delete-partitions | Role assumida pela função Lambda responsável por verificar e eliminar dados relacionados à partição da data do processamento agendado | + | pynvest-lambda-send-msgs-to-tickers-queues | Role assumida pela função Lambda responsável por coletar tickers de ativos e enviar mensagens para filas no SQS | + | pynvest-lambda-share-sor-financial-data | Role assumida pela função Lambda responsável por extrair e armazenar dados brutos de indicadores financeiros na camada SoR | + | pynvest-lambda-share-sot-financial-data | Role assumida pela função Lambda responsável por preparar e armazenar dados tratados de indicadores financeiros na camada SoT | + | pynvest-lambda-share-spec-financial-data | Role assumida pela função Lambda responsável por especializar e armazenar dados consolidados de indicadores financeiros na camada Spec | + | pynvest-lambda-dedup-financial-data | Role assumida por funções Lambda responsáveis por ler, remover registros duplicados e armazenar dados nas camadas SoT e Spec | + | pynvest-sfn-invoke-lambda-functions | Role assumida pela máquina de estados no Step Functions para realização do processo de remoção de registros duplicados | + + + :octicons-eye-16: + **Observação:** todas as *policies* IAM presentes no módulo são criadas com base na prática de [least privileges](https://docs.aws.amazon.com/wellarchitected/latest/framework/sec_permissions_least_privileges.html), ou seja, contemplam apenas as permissões estritamente necessárias para as aplicações. Isto é alcançado através de *templates* do Terraform onde variáveis específicas são definidas nos arquivos JSON das *policies* e substituídas em tempo de execução do módulo. + + + +### :octicons-database-16: Databases e Tabelas no Data Catalog + +O módulo `pynvest-tools` também contempla a criação de *databases* e tabelas previamente configuradas no Glue Data Catalog para que o usuário possa armazenar e analisar os dados financeiros obtidos em tempo de execução da solução. + +??? info "Tabelas criadas pelo módulo" + | :octicons-database-16: **Tabela** | :octicons-database-16: **Database** | :octicons-pencil-16: **Descrição** | + | :-- | :-- | :-- | + | tbsor_fundamentus_indicadores_acoes_raw | SoR | Tabela para armazenamento de indicadores financeiros de **Ações** extraídos diretamente do portal Fundamentus e sem qualquer tipo de preparação (dados brutos) | + | tbsor_fundamentus_indicadores_fiis_raw | SoR | Tabela para armazenamento de indicadores financeiros de **Fundos Imobiliários** extraídos diretamente do portal Fundamentus e sem qualquer tipo de preparação (dados brutos) | + | tbsot_fundamentus_indicadores_acoes_prep | SoT | Tabela preparada de indicadores financeiros de **Ações** (considerando tipagem e transformações específicas em strings) | + | tbsot_fundamentus_indicadores_acoes_prep | SoT | Tabela preparada de indicadores financeiros de **Fundos Imobiliários** (considerando tipagem e transformações específicas em strings) | + | tbspec_fundamentus_cotacao_ativos | Spec | Tabela especializada contendo apenas informações relacionadas à cotações de ativos financeiros, considerando tanto **Ações** quanto **Fundos Imobiliários** | + +As tabelas são, provavelmente, os ativos mais valiosos entregues pelo módulo `pynvest-tools`. Através delas, os usuários poderão realizar uma série de consultas e análises de indicadores financeiros de ações e fundos imobiliários. + + + :octicons-eye-16: + **Observação:** todas as tabelas criadas pelo módulo possuem atributos e indicadores bem definidos. Para consultar quais indicadores financeiros estão sendo contemplados em cada uma das tabelas, não deixe de navegar pela seção de [indicadores](). + + +### :octicons-terminal-16: Funções Lambda + +Apesar de já proporcionar toda a lógica de criação e documentação das tabelas, sem **dados** não há análise. Dito isso, é preciso conhecer em detalhes as aplicações capazes de extrair, preparar e especializar os dados em todas as camadas da solução. + +??? info "Funções Lambda responsáveis pela obtenção dos dados" + | :octicons-terminal-16: **Função** | :octicons-database-16: **Descrição** | + | :-- | :-- | + | pynvest-lambda-check-and-delete-partitions | Função responsável por verificar se existem partições físicas e lógicas relacionadas ao dia de processamento dos dados e, em caso positivo, eliminá-las para evitar dados duplicados | + | pynvest-lambda-get-tickers | Função responsável por coletar *tickers* (códigos) de ações e fundos imobiliários utilizando funcionalidades da biblioteca `pynvest` e armazenar os resultados como mensagens de filas SQS | + | pynvest-lambda-get-financial-data-for-acoes | Função responsável por ler mensagens de fila SQS contendo *tickers* de ações, extrair os indicadores financeiros utilizando funcionalidades da biblioteca `pynvest` e, por fim, armazenar os resultados em tabela na camada SoR (S3 e Glue Data Catalog) | + | pynvest-lambda-get-financial-data-for-fiis | Função responsável por ler mensagens de fila SQS contendo *tickers* de fundos imobiliários, extrair os indicadores financeiros utilizando funcionalidades da biblioteca `pynvest` e, por fim, armazenar os resultados em tabela na camada SoR (S3 e Glue Data Catalog) | + | pynvest-lambda-prep-financial-data-for-acoes | Função responsável por ler dados brutos de indicadores de ações na camada SoR, preparar os tipos primitivos dos atributos e, por fim, armazenar os resultados em tabela na camada SoT (S3 e Glue Data Catalog) | + | pynvest-lambda-prep-financial-data-for-fiis | Função responsável por ler dados brutos de indicadores de fundos imobiliários na camada SoR, preparar os tipos primitivos dos atributos e, por fim, armazenar os resultados em tabela na camada SoT (S3 e Glue Data Catalog) | + | pynvest-lambda-specialize-financial-data | Função responsável por ler dados preparados da camada SoT contendo indicadores de ações e fundos imobiliários, extrair apenas atributos específicos e, por fim, armazenar os resultados em tabela na camada Spec (S3 e Glue Data Catalog) | + | pynvest-lambda-dedup-financial-data-for-acoes | Função responsável por ler dados da tabela SoT de ações, remover registros duplicados e armazenar os resultados na mesma tabela/camada (overwrite partition) | + | pynvest-lambda-dedup-financial-data-for-fiis | Função responsável por ler dados da tabela SoT de fundos imobiliários, remover registros duplicados e armazenar os resultados na mesma tabela/camada (overwrite partition) | + | pynvest-lambda-dedup-financial-data-for-spec-ativos | Função responsável por ler dados da tabela Spec de ativos, remover registros duplicados e armazenar os resultados na mesma tabela/camada (overwrite partition) | + + + :octicons-eye-16: + **Observação:** as funções Lambda de deduplicação de registros (três últimas referências da tabela acima) são engatilhadas através de um *workflow* no Step Functions a ser detalhado nas próximas seções. + + + + :octicons-light-bulb-16: + **Dica:** os códigos de todas as funções Lambda podem ser visualizados diretamente no [repositório do módulo no GitHub](https://github.com/ThiagoPanini/pynvest-tools/tree/v0.2.x/app/lambda/functions). + + +### :octicons-mail-16: Filas no SQS + +Como mencionado na seção anterior onde todas as funções Lambda foram exemplificadas, em determinada etapa do processo, mensagens são escritas em filas SQS para um posterior processamento desacoplado. Detalhes sobre essas filas podem ser vistos logo abaixo: + +??? info "Filas SQS presentes no processo" + | :octicons-mail-16: **Nome da Fila** | :octicons-database-16: **Descrição** | + | :-- | :-- | + | pynvest-tickers-acoes-queue | Fila SQS responsável por armazenar mensagens contendo *tickers* (códigos) de Ações extraídos pela função `pynvest-lambda-get-tickers` | + | pynvest-tickers-fiis-queue | Fila SQS responsável por armazenar mensagens contendo *tickers* (códigos) de Fundos Imobiliários extraídos pela função `pynvest-lambda-get-tickers` | + +### :octicons-workflow-16: Workflow no Step Functions + +Assim como mencionado na seção de detalhamento das funções Lambda, um *workflow* do Step Functions foi criado para orquestrar o processo de remoção de registros duplicados nas tabelas disponibilizadas nas camadas SoT e Spec. + +??? info "Workflow do Step Functions provisionado" + | :octicons-workflow-16: **Workflow** | :octicons-database-16: **Descrição** | + | :-- | :-- | + | pynvest-sfn-dedup-sot-spec-tables | Workflow criado com o intuito de coordenar a execução de funções Lambdas específicas para a remoção de registros duplicados em tabelas do módulo `pynvest-tools` presentes nas camadas SoT e Spec. Este workflow é engatilhado através de um agendamento no Eventbridge. | + + + :octicons-eye-16: + **Observação:** como a lógica implementada para processar e escrever dados nas camadas SoT e Spec contempla o engatilhamento automático e desacoplado de funções Lambda, o workflow de remoção de registros duplicados foi designado a ser executado 15 minutos após o gatilho inicial do processo diário de atualização dos dados. + + +### :octicons-calendar-16: Gatilhos no Eventbridge + +Por fim, a arquitetura de solução contempla a existência de gatilhos no Eventbridge que coordenam a execução dos processos de atualização dos dados e remoção de registros duplicados. + +??? info "Regras e gatilhos no Eventbridge para execução diária do processo" + | :octicons-calendar-16: **Regra no Eventbridge** | :octicons-database-16: **Descrição** | :octicons-clock-16: **Horário** + | :-- | :-- | + | trigger-pynvest-lambda-check-and-delete-partitions | Gatilho responsável por executar a primeira função Lambda do processo (verificação e eliminação de partições do dia já existentes) | Todos os dias às 18:45 | + | trigger-pynvest-sfn-dedup-sot-spec-tables | Gatilho responsável por executar *workflow* do Step Functions para remoção de registros duplicados em tabelas das camadas SoT e Spec | Todos os dias às 19:00 | + + + :octicons-eye-16: + **Observação:** pela característica da solução, o primeiro gatilho do Eventbridge necessita apenas executar a função de validação e eliminação de partições. Todos os demais componentes e funções da arquitetura são executados automaticamente de forma altamente desacoplada. + + +## Infraestrutura + +Como um reforço importante, toda a lógica dos componentes de infraestrutura provisionados (e também dos códigos das aplicações) estão disponíveis no [repositório do módulo no GitHub](https://github.com/ThiagoPanini/pynvest-tools) e podem ser analisados para um entendimento mais aprofundado sobre os recursos. \ No newline at end of file diff --git a/docs/tools/tools.md b/docs/tools/tools.md new file mode 100644 index 0000000..a3c276b --- /dev/null +++ b/docs/tools/tools.md @@ -0,0 +1,53 @@ +# Obtenha Indicadores Financeiros em seu Próprio Ambiente AWS + +Você já imaginou ter todo um conjunto de serviços AWS implantados em seu ambiente pessoal para extrair, armazenar e atualizar recorrentemente **indicadores financeiros** de ativos da B3? + +Se sim, você precisa conhecer o [pynvest-tools](https://github.com/ThiagoPanini/pynvest-tools) como um módulo Terraform capaz de implantar recursos AWS estrategicamente desenvolvidos com o intuito de permitir com que seus usuários obtenham e analisem dados financeiros. + +
+
pynvest-logo +
+ +
+ + + + + + + + + + + + + + + + + +
+ + +## Visão Geral + +Dado o contexto introdutório fornecido acima, os usuários que decidirem utilizar o `pynvest-tools` em seus respectivos ambientes AWS, poderão obter, entre outros benefícios: + +- 🎯 Um processo agendado via [Eventbridge](https://aws.amazon.com/pt/eventbridge/) para obtenção e atualização diária de indicadores financeiros +- 📖 Tabelas previamente definidas no [Glue Data Catalog](https://docs.aws.amazon.com/pt_br/glue/latest/dg/start-data-catalog.html) para consultas em ferramentas analíticas +- 🧲 Arquitetura *serverless* e altamente desacoplada utilizando funções [Lambda](https://aws.amazon.com/pt/lambda/) e filas no [SQS](https://aws.amazon.com/sqs/) +- 📊 Possibilidade de utilizar serviços como [Glue](https://aws.amazon.com/pt/glue/), [Athena](https://aws.amazon.com/pt/athena/) e [QuickSight](https://aws.amazon.com/quicksight/) para as mais variadas análises em dados financeiros + +## Saiba Mais + +Navegue pelos tópicos desta seção para descobrir, de uma vez por todas, como o módulo Terraform `pynvest-tools` pode te ajudar a unir elementos do mundo financeiro em um ambiente totalmente *cloud native*. + +- Visite a página de [primeiros passos](./quickstart.md) para aprender como chamar o módulo em seu projeto Terraform +- Em [variáveis do módulo](./variaveis.md), você poderá visualizar todas as diferentes formas de customizar os recursos provisionados +- Para compreender todos os detalhes técnicos por trás da solução, navegue até as páginas de [arquitetura](./arquitetura.md), [recursos provisionados](./recursos.md) e [etapas do processo](./processo.md) +- Há, ainda, diversos [exemplos de análises](./queries.md) no Athena disponíveis para o usuário destravar todo o potencial do módulo + + + :octicons-history-16: + **Não perca tempo** e comece agora mesmo a criar **seu próprio Data Lake** com dados financeiros atualizados diariamente. + diff --git a/docs/tools/variaveis.md b/docs/tools/variaveis.md new file mode 100644 index 0000000..bfe43df --- /dev/null +++ b/docs/tools/variaveis.md @@ -0,0 +1,42 @@ +# Variáveis do Módulo + +O módulo `pynvest-tools` foi inteiramente desenhado para fornecer a experiência mais **simplificada possível** para os usuários. Pensando nisso, grande parte das variáveis do módulo possuem valores *default* que funcionam estritamente bem dentro de uma dinâmica básica e eficiente de uso. + +???+ warning "A única variável obrigatória do módulo" + Em linhas gerais, a única variável obrigatória do módulo, ou seja, a única variável que os usuários necessariamente **precisam fornecer** é a `bucket_names_map`. Seu papel é fornecer informações relacionadas aos *buckets* pré existentes na conta AWS do usuário (vide [pré requisitos de uso](./quickstart.md#pré-requisitos)) para que os dados gerados pelos componentes implantados pelo módulo possam ser devidamente armazenados. + +Por mais que a ideia seja facilitar a vida do usuário, as chamadas ao módulo `pynvest-tools` podem ser feitas de modo altamente customizado através das variáveis aceitas pelo módulo. Em casos mais avançados, os usuários podem, por exemplo, indicar para o módulo a utilização de *databases* próprios ao invés de permitir que o módulo crie seus próprios *databases*. + +Para uma listagem completa de todas as variáveis, os usuários podem considerar as subseções abaixo: + +## Variáveis do S3 e Glue Data Catalog + +| **Variável** | **Tipo** | **Descrição** | **Default** | +| :-- | :-- | :-- | :-- | +| bucket_names_map | map(string) | Dicionário (map) contendo nomes dos buckets SoR, SoT e Spec da conta AWS alvo de implantação dos recursos. O objetivo desta variável e permitir que o usuário forneça seus próprios buckets para armazenamento dos arquivos gerados. O correto preenchimento desta variável exige que as referências de nomes sejam fornecidas dentro das chaves 'sor', 'sot' e 'spec'. O usuário também pode fornecer o mesmo nome de bucket para as três quebras, caso queira armazenar os dados das tabelas em um único bucket. | *Required* | +| flag_create_databases | bool | Flag para validar a criação de databases no Glue Data Catalog caso o usuário não tenha ou não queira utilizar databases já existentes para catalogação das tabelas geradas. | `true` | +| databases_names_map | map(string) | Dicionário (map) contendo os nomes dos databases no Glue Data Catalog para catalogação de tabelas SoR, SoT e Spec. O correto preenchimento desta variável exige que as referências de nomes sejam fornecidas dentro das chaves 'sor', 'sot' e 'spec'. O usuário também pode fornecer o mesmo nome de database para as três quebras, caso queira armazenar os dados das tabelas em um único database. | ```{"sor" = "db_pynvest_sor", "sot" = "db_pynvest_sot", "spec" = "db_pynvest_spec"}``` | + + +## Variáveis de Filas SQS + +| **Variável** | **Tipo** | **Descrição** | **Default** | +| :-- | :-- | :-- | :-- | +| sqs_tickers_acoes_queue_name | string | Nome da fila SQS responsável por receber as mensagens contendo informações dos tickers de Ações extraídos | `"pynvest-tickers-acoes-queue"` | +| sqs_tickers_fiis_queue_name | string | Nome da fila SQS responsável por receber as mensagens contendo informações dos tickers de FIIs extraídos | `"pynvest-tickers-fiis-queue"` | +| sqs_visibility_timeout_seconds | number | Tempo (em segundos) em que uma mensagem recebida por um consumidor ficará invisível para outros consumidores | `1080` | +| sqs_message_retention_seconds | number | Tempo (em segundos) em que uma mensagem não deletada continua armazenada. Após esse período, as mensagens da fila são deletadas | `3060` | +| sqs_max_message_size | number | Tamanho máximo (em bytes) das mensagens da fila | `131072` | +| sqs_delay_seconds | number | Delay em que novas mensagens chegam à fila caso os consumidores necessitem de mais tempo para processamento | `0` | +| sqs_receive_wait_time_seconds | number | Tempo máximo (em segundos) que processos de pooling irão aguardar por mensagens disponíveis (Short Pooling versus Long Pooling) | `0` | + +## Variáveis de Funções Lambda + +| **Variável** | **Tipo** | **Descrição** | **Default** | +| :-- | :-- | :-- | :-- | +| functions_python_runtime | string | Definição do runtime (versão) da linguagem Python associada às funçõe | `"python3.10"` | +| functions_timeout | number | Timeout das funções Lambda | 900 | +| functions_memory_size | number | Quantidade de memória (MB) a ser alocada para as funções Lambda | 192 | +| sqs_lambda_trigger_batch_size | number | Número máximo de registros a serem enviados para a função em cada batch | 100 | +| sqs_lambda_trigger_batch_window | number | Valor máximo de tempo (em segundos) que a função irá aguardar para a coleta de registros antes da invocação | 10 | +| sqs_lambda_trigger_max_concurrency | number | Número máximo de funções concorrentes a serem invocadas pelo gatilho | 3 | \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index d83d02a..4298601 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,6 +1,6 @@ # Informações principais do projeto site_name: pynvest -site_url: https://pynvest.readthedocs.io/en/latest/ +site_url: https://pynvest.readthedocs.io/pt/latest/ site_author: Thiago Panini site_description : >- Um pacote Python capaz de utilizar processos de web scrapping para @@ -13,7 +13,20 @@ repo_url: https://github.com/ThiagoPanini/pynvest # Copyright copyright: | - Copyright © 2023-2024 ThiagoPanini + Copyright © 2023-2024 Thiago Panini + +# Configurando social media no footer +extra: + social: + - icon: fontawesome/brands/github + link: https://github.com/ThiagoPanini + name: Thiago Panini no Github + - icon: fontawesome/brands/linkedin + link: https://www.linkedin.com/in/thiago-panini/ + name: Thiago Panini no LinkedIn + - icon: fontawesome/brands/hashnode + link: https://panini.hashnode.dev/ + name: Blog panini-tech-lab no Hashnode # Configuração do tema theme: @@ -23,8 +36,11 @@ theme: custom_dir: docs/overrides # Customizando ícone no header da página - # icon: - # logo: tmp + icon: + logo: custom/custom-icon-32px + + # Customizando favicon (ícone da aba) + favicon: assets/imgs/logo/logo-sem-nome.png # Configurando paleta de cores palette: @@ -68,7 +84,7 @@ nav: - Design: quickstart/design.md - Scrappers: - - Sobre os Scrappers: scrappers/about.md + - scrappers/index.md - Fundamentus: - Documentação: - Classe Fundamentus: scrappers/fundamentus/mkdocstrings/fundamentus.md @@ -78,6 +94,19 @@ nav: - Indicadores: - Ações: scrappers/fundamentus/indicadores/acoes.md - FIIs: scrappers/fundamentus/indicadores/fiis.md + + - Tools: + - O Módulo Pynvest Tools: tools/tools.md + - Quickstart: + - Chamando o Módulo: tools/quickstart.md + - Variáveis do Módulo: tools/variaveis.md + - Detalhes da Solução: + - Arquitetura: tools/arquitetura.md + - Recursos Provisionados: tools/recursos.md + - Etapas do Processo: tools/processo.md + - Exemplos de Análises: tools/queries.md + + - Contribuindo: contribuindo/contribuindo.md # Configurando extensões markdown_extensions: diff --git a/pynvest/scrappers/fundamentus.py b/pynvest/scrappers/fundamentus.py index e3fbbb5..2bed672 100644 --- a/pynvest/scrappers/fundamentus.py +++ b/pynvest/scrappers/fundamentus.py @@ -62,12 +62,12 @@ "Mês": "pct_var_mes", "30 dias": "pct_var_30d", "12 meses": "pct_var_12m", - "2023": "pct_var_2023", - "2022": "pct_var_2022", - "2021": "pct_var_2021", - "2020": "pct_var_2020", - "2019": "pct_var_2019", - "2018": "pct_var_2018", + str(datetime.now().year): "pct_var_ano_a0", + str(datetime.now().year - 1): "pct_var_ano_a1", + str(datetime.now().year - 2): "pct_var_ano_a2", + str(datetime.now().year - 3): "pct_var_ano_a3", + str(datetime.now().year - 4): "pct_var_ano_a4", + str(datetime.now().year - 5): "pct_var_ano_a5", "P/L": "vlr_ind_p_sobre_l", "P/VP": "vlr_ind_p_sobre_vp", "P/EBIT": "vlr_ind_p_sobre_ebit", @@ -102,14 +102,6 @@ "Receita Líquida": "vlr_receita_liq_ult_3m", "EBIT": "vlr_ebit_ult_3m", "Lucro Líquido": "vlr_lucro_liq_ult_3m" - # "Cart. de Crédito": "vlr_cart_de_cred", - # "Depósitos": "vlr_depositos", - # "Patrim. Líq": "vlr_patrim_liq", - # "Result Int Financ_1": "vlr_result_int_financ_ult_12m", - # "Rec Serviços_1": "vlr_rec_servicos_ult_12m", - # "Lucro Líquido_1": "vlr_lucro_liq_ult_12m", - # "Result Int Financ": "vlr_result_int_financ_ult_3m", - # "Rec Serviços": "vlr_rec_servicos_ult_3m" } # Estabelecendo indicadores financeiros de ações @@ -120,9 +112,9 @@ "Segmento": "segmento", "Gestão": "tipo_gestao", "Cotação": "vlr_cot", - "Data últ cot": "data_ult_cot", - "Min 52 sem": "min_52_sem", - "Max 52 sem": "max_52_sem", + "Data últ cot": "dt_ult_cot", + "Min 52 sem": "vlr_min_52_sem", + "Max 52 sem": "vlr_max_52_sem", "Vol $ méd (2m)": "vol_med_neg_2m", "Valor de mercado": "vlr_mercado", "Nro. Cotas": "num_cotas", @@ -132,12 +124,12 @@ "Mês": "pct_var_mes", "30 dias": "pct_var_30d", "12 meses": "pct_var_12m", - "2023": "pct_var_2023", - "2022": "pct_var_2022", - "2021": "pct_var_2021", - "2020": "pct_var_2020", - "2019": "pct_var_2019", - "2018": "pct_var_2018", + str(datetime.now().year): "pct_var_ano_a0", + str(datetime.now().year - 1): "pct_var_ano_a1", + str(datetime.now().year - 2): "pct_var_ano_a2", + str(datetime.now().year - 3): "pct_var_ano_a3", + str(datetime.now().year - 4): "pct_var_ano_a4", + str(datetime.now().year - 5): "pct_var_ano_a5", "FFO Yield": "vlr_ffo_yield", "FFO/Cota": "vlr_ffo_sobre_cota", "Div. Yield": "vlr_div_yield", @@ -306,7 +298,7 @@ def __init__( self.metadata_cols_fiis = metadata_cols_fiis @staticmethod - def __parse_float_cols(df: pd.DataFrame, cols_list: list) -> pd.DataFrame: + def _parse_float_cols(df: pd.DataFrame, cols_list: list) -> pd.DataFrame: """ Transforma strings que representam números em objetos do tipo float. @@ -357,7 +349,7 @@ def __parse_float_cols(df: pd.DataFrame, cols_list: list) -> pd.DataFrame: return df @staticmethod - def __parse_pct_cols(df: pd.DataFrame, cols_list: list) -> pd.DataFrame: + def _parse_pct_cols(df: pd.DataFrame, cols_list: list) -> pd.DataFrame: """ Transforma strings que representam percentuais em objetos do tipo float @@ -711,9 +703,7 @@ def coleta_indicadores_de_ativo( # Adicionando informação de data e hora de processamento now = datetime.now(timezone(timedelta(hours=-3))) - date_exec = now.strftime("%d-%m-%Y") datetime_exec = now.strftime("%d-%m-%Y %H:%M:%S") - df_indicadores_ativo.loc[:, ["date_exec"]] = date_exec df_indicadores_ativo.loc[:, ["datetime_exec"]] = datetime_exec # Validando transformação de tipos primitivos dos atributos @@ -733,13 +723,13 @@ def coleta_indicadores_de_ativo( ] # Transformando strings que representam números - df_indicadores_ativo_float_prep = self.__parse_float_cols( + df_indicadores_ativo_float_prep = self._parse_float_cols( df=df_indicadores_ativo, cols_list=float_cols_to_parse ) # Transformando percentuais que representam números - df_indicadores_ativo_prep = self.__parse_pct_cols( + df_indicadores_ativo_prep = self._parse_pct_cols( df=df_indicadores_ativo_float_prep, cols_list=percent_cols_to_parse ) diff --git a/setup.py b/setup.py index ab43733..16933d3 100644 --- a/setup.py +++ b/setup.py @@ -13,7 +13,7 @@ # Setting up package information setup( name='pynvest', - version='0.1.0', + version='0.1.1', author='Thiago Panini', author_email='panini.development@gmail.com', packages=find_packages(),