Manter relatórios diários com dados e análises atualizados é um desafio, pois envolve várias etapas repetitivas:
- Coleta de dados de fontes variadas
- Tratamento de tabelas e variáveis
- Produção de análises, tabelas e gráficos
- Atualização do relatório final
Fazer tudo isso manualmente todos os dias toma bastante tempo. Uma pesquisa da empresa Anaconda diz que essa perda de tempo pode passar de 3 horas por dia.
Aprenda a coletar, processar e analisar dados na formação de Do Zero à Análise de Dados com Python.
Uma possível solução é automatizar estas tarefas que são repetitivas. Isso significa que ao invés de clicar em um botão de download de dados, o analista escreve um código que coleta os dados através de um link. Ao invés de copiar e colar dados de uma tabela para outra para cruzar informações, o analista escreve outro código para cruzar as tabelas. E assim por diante. Sem precisar reescrever o código no dia seguinte.
Todas estas etapas são automatizáveis. Até mesmo a atualização das informações no relatório final e o envio do mesmo por email pode ser automatizado. Como consequência, ganha-se em produtividade, eficiência e tempo para tarefas mais complexas ou “humanas”.
Três ferramentas se destacam para implementar a automatização dessas tarefas repetitivas na produção de relatórios diários:
- Python: é uma linguagem de programação que permite generalizar e sistematizar tarefas, desde a coleta de dados até a visualização gráfica
- Quarto: é um programa de edição e compilação de relatórios que permite escrever código em Python junto com textos, tabelas, gráficos, etc.
- GitHub: é uma plataforma (site) da internet que permite armazenar arquivos e agendar a execução de códigos, incluindo Python
Todas estas ferramentas podem ser utilizadas gratuitamente.
Para exemplificar, neste artigo mostraremos como automatizar um relatório diário do mercado financeiro utilizando as ferramentas Python, Quarto e GitHub. O objetivo é eliminar a necessidade de interferência humana ou processos manuais para atualizar o relatório diariamente, economizando tempo e recursos.
Para obter o código e o tutorial deste exercício faça parte do Clube AM e receba toda semana os códigos em R/Python, vídeos, tutoriais e suporte completo para dúvidas.
Passo 01: repositório no GitHub
- Acesse github.com
- Faça o cadastro/login se necessário
- Clique no botão “New” para criar um repositório
- Digite um nome no campo “Repository name*”
- Marque a opção “Add a README file”
- Clique no botão “Create repository”
Passo 02: ambiente de desenvolvimento
- Clique no botão “Code” no repositório GitHub criado
- Clique em “Codespaces”
- Clique em “Create codespace on main”
- Clique no botão “New Folder…” no painel “EXPLORER”
- Digite “.devcontainer” e pressione “Enter”
- Clique no botão “New File…”
- Digite “devcontainer.json” e pressione “Enter”
- Copie o conteúdo abaixo e cole dentro do arquivo “devcontainer.json”
{ "image": "mcr.microsoft.com/devcontainers/python:3", "features": { "ghcr.io/rocker-org/devcontainer-features/quarto-cli:latest": {} }, "postCreateCommand": "python3 -m pip install jupyter" }
- Pressione as teclas Ctrl+Shift+PCtrl+Shift+P
- Digite “rebuild”
- Clique em “Codespaces: Rebuild Container”
- Clique em em “Rebuild”
- Execute o comando abaixo no painel “TERMINAL” (Ctrl+'Ctrl+' para exibir)
curl -sSL https://install.python-poetry.org | python3 -
- Clique no botão “New File…” no painel “EXPLORER” (raiz do projeto)
- Digite “pyproject.toml” e pressione “Enter”
- Copie o conteúdo abaixo e cole dentro do arquivo “pyproject.toml” fazendo as alterações que julgar necessárias
[tool.poetry] name = "automatizacao" version = "0.1.0" description = "NA" authors = ["Fernando da Silva <fernando@fortietwo.com>"] license = "MIT" readme = "README.md" [tool.poetry.dependencies] python = "^3.12" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"
- Execute cada comando abaixo separadamente no painel “TERMINAL”
poetry add requests poetry add pandas poetry add yfinance poetry add plotnine poetry add jupyter
Passo 03: relatório de exemplo
- Clique no botão “New File…” no painel “EXPLORER” (raiz do projeto)
- Digite “relatorio.qmd” e pressione “Enter”
- Copie o conteúdo abaixo e cole dentro do arquivo “relatorio.qmd” fazendo as alterações que julgar necessárias
--- title: Relatório de Ações author: Análise Macro date: today lang: pt format: html execute: echo: false warning: false message: false --- ```{python} # Bibliotecas import requests import pandas as pd import yfinance as yf import plotnine as p9 # Tickers url_tickers_b3 = ( "https://sistemaswebb3-listados.b3.com.br/indexProxy/indexCall/" + "GetTheoricalPortfolio/eyJwYWdlTnVtYmVyIjoxLCJwYWdlU2l6ZSI6" + "OTk5OSwibGFuZ3VhZ2UiOiJwdC1iciIsImluZGV4IjoiSUJPViJ9" ) df_tickers = pd.DataFrame(requests.get(url_tickers_b3).json()["results"]) df_tickers["cod"] = df_tickers["cod"] + ".SA" # Cotações df_cotacoes = yf.download( tickers = df_tickers["cod"].to_list(), start = pd.to_datetime("today") - pd.offsets.BusinessDay(n = 1), end = pd.to_datetime("today") ) ``` ```{python} # Variações df_variacoes = ( df_cotacoes["Close"] .pct_change() .mul(100) .iloc[1] .to_frame() .set_axis(labels = ["Variação (%)"], axis = "columns") .join( df_cotacoes["Close"].iloc[1].to_frame().set_axis(labels = ["Cotação ($)"], axis = "columns") ) .reset_index() .assign(Ticker = lambda x: x.Ticker.str.replace(".SA$", "", regex = True)) .sort_values(by = "Variação (%)") ) ``` ::: {.columns} ::: {.column width="47%"} # Maiores baixas ```{python} df_variacoes.head(5).style.format(precision = 2).hide() ``` ::: ::: {.column width="6%"} ::: ::: {.column width="47%"} # Maiores altas ```{python} df_variacoes.tail(5).style.format(precision = 2).hide() ``` ::: ::: # Distribuição de retornos ```{python} ( p9.ggplot(df_variacoes) + p9.aes(x = "Variação (%)") + p9.geom_histogram() + p9.labs(y = "Frequência") + p9.theme(figure_size = (8, 3)) ) ``` **Nota**: este documento não caracteriza recomendação de investimentos.
Passo 04: fluxo de automatização agendada
- Clique no botão “New Folder…” no painel “EXPLORER” (raiz do projeto)
- Digite “.github” e pressione “Enter”
- Clique no botão “New Folder…” no painel “EXPLORER”
- Digite “workflows” e pressione “Enter”
- Clique no botão “New File…” no painel “EXPLORER”
- Digite “relatorio.yml” e pressione “Enter”
- Copie o conteúdo abaixo e cole dentro do arquivo “relatorio.yml” fazendo as alterações que julgar necessárias
on: push: branches: [main, master] schedule: - cron: '0 18 * * 1-5' name: Automação de Relatório jobs: Automacao: runs-on: ubuntu-22.04 steps: - name: Clonar o repositório uses: actions/checkout@v3 - name: Instalar o Python uses: actions/setup-python@v4 with: python-version: '3.12' - name: Instalar o Poetry uses: snok/install-poetry@v1 with: version: 1.8.2 - name: Instalar as bibliotecas run: poetry install --no-root - name: Configurar o Quarto uses: quarto-dev/quarto-actions/setup@v2 - name: Renderizar o relatório run: poetry run quarto render relatorio.qmd - name: Commit & Push uses: stefanzweifel/git-auto-commit-action@v4 with: commit_message: Automatização do relatório
Passo 05: configurações finais
- Navegue até a página inicial do repositório GitHub criado anteriormente
- Clique no botão “Settings”
- Clique no menu “Actions” na seção “Code and automation”
- Clique no botão “General”
- Marque a opção “Read and write permissions” na seção “Workflow permissions”
- Clique no botão “Save”
- Volte à tela de edição de código (VS Code web)
- Clique no painel “Source Control”
- Clique no botão “+” (“Stage All Changes”) ao lado de “Changes”
- Digite uma mensagem como “Relatório automatizado” no campo textual acima do botão “Commit”
- Clique no botão “Commit”
- Clique no botão “Sync Changes”
- Clique no botão “OK”
- Navegue até a página inicial do repositório GitHub criado anteriormente
- Clique no botão “Settings”
- Clique no menu “Pages” na seção “Code and automation”
- Clique no botão “None” na seção “Branch”
- Clique na opção “main”
- Clique no botão “Save”
Ao final de todos estes passos o relatório diário de mercado financeiro estará automatizado, será atualizado diariamente às 18h e pode ser acessado pelo link:
- https://SUACONTA.github.io/automatizacao/relatorio.html
Onde “SUACONTA” é o nome de usuário da conta cadastrada no GitHub.
Conclusão
Manter relatórios diários com dados e análises atualizados é um desafio, pois envolve várias etapas: coleta de dados, tratamento de informações, produção de análises e atualização de relatório. Para superar este desafio algumas ferramentas como Python + Quarto + GitHub podem ser usadas para automatizar tudo que for automatizável. Neste artigo mostramos um exemplo com dados do mercado financeiro.
Quer aprender mais?
Clique aqui para fazer seu cadastro no Boletim AM e baixar o código que produziu este exercício, além de receber novos exercícios com exemplos reais de análise de dados envolvendo as áreas de Data Science, Econometria, Machine Learning, Macroeconomia Aplicada, Finanças Quantitativas e Políticas Públicas diretamente em seu e-mail.