Como automatizar tarefas repetitivas usando Python? Um exemplo para largar o Excel

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

  1. Acesse github.com
  2. Faça o cadastro/login se necessário
  3. Clique no botão “New” para criar um repositório
  4. Digite um nome no campo “Repository name*”
  5. Marque a opção “Add a README file”
  6. Clique no botão “Create repository”

Passo 02: ambiente de desenvolvimento

  1. Clique no botão “Code” no repositório GitHub criado
  2. Clique em “Codespaces”
  3. Clique em “Create codespace on main”
  4. Clique no botão “New Folder…” no painel “EXPLORER”
  5. Digite “.devcontainer” e pressione “Enter”
  6. Clique no botão “New File…”
  7. Digite “devcontainer.json” e pressione “Enter”
  8. 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"
    }
  9. Pressione as teclas Ctrl+Shift+P
  10. Digite “rebuild”
  11. Clique em “Codespaces: Rebuild Container”
  12. Clique em em “Rebuild”
  13. Execute o comando abaixo no painel “TERMINAL” (Ctrl+' para exibir)
    curl -sSL https://install.python-poetry.org | python3 -
  14. Clique no botão “New File…” no painel “EXPLORER” (raiz do projeto)
  15. Digite “pyproject.toml” e pressione “Enter”
  16. 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"
  17. 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

  1. Clique no botão “New File…” no painel “EXPLORER” (raiz do projeto)
  2. Digite “relatorio.qmd” e pressione “Enter”
  3. 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

  1. Clique no botão “New Folder…” no painel “EXPLORER” (raiz do projeto)
  2. Digite “.github” e pressione “Enter”
  3. Clique no botão “New Folder…” no painel “EXPLORER”
  4. Digite “workflows” e pressione “Enter”
  5. Clique no botão “New File…” no painel “EXPLORER”
  6. Digite “relatorio.yml” e pressione “Enter”
  7. 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

  1. Navegue até a página inicial do repositório GitHub criado anteriormente
  2. Clique no botão “Settings”
  3. Clique no menu “Actions” na seção “Code and automation”
  4. Clique no botão “General”
  5. Marque a opção “Read and write permissions” na seção “Workflow permissions”
  6. Clique no botão “Save”
  7. Volte à tela de edição de código (VS Code web)
  8. Clique no painel “Source Control”
  9. Clique no botão “+” (“Stage All Changes”) ao lado de “Changes”
  10. Digite uma mensagem como “Relatório automatizado” no campo textual acima do botão “Commit”
  11. Clique no botão “Commit”
  12. Clique no botão “Sync Changes”
  13. Clique no botão “OK”
  14. Navegue até a página inicial do repositório GitHub criado anteriormente
  15. Clique no botão “Settings”
  16. Clique no menu “Pages” na seção “Code and automation”
  17. Clique no botão “None” na seção “Branch”
  18. Clique na opção “main”
  19. 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.

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Como treinar e selecionar os melhores modelos de previsão no Python?

Em previsão, há uma infinidade de modelos que podem ser usados. O processo de escolha do(s) modelo(s) deve ser empírico-científico, usando métodos que visem avaliar a generalização dos algoritmos para dados novos. Neste artigo, mostramos como implementar a metodologia de validação cruzada com algoritmos de machine learning no Python, exemplificando para a previsão do IPCA.

Como selecionar variáveis para modelos de previsão no Python?

Em oposição à crença popular, grande parte dos modelos de machine learning não produzem previsões magicamente. É papel do cientista de dados executar uma boa engenharia de variáveis para não cair no clássico problema de “garbage in, garbage out” (GIGO) em aprendizado de máquina. Neste sentido, aprender a fazer uma boa seleção de variáveis é fundamental e neste artigo exploramos algumas possibilidades práticas usando o Python.

Resultado IPCA-15 - Novembro/2024

A Análise Macro apresenta os resultados do IPCA-15 de Novembro de 2024, com gráficos elaborados em Python para coleta, tratamento e visualização de dados. Todo o conteúdo, disponível exclusivamente no Clube AM, foi desenvolvido com base nos métodos ensinados nos cursos da Análise Macro, permitindo aos assinantes acesso aos códigos e replicação das análises.

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.