Skip to content

ojunqueira/inf2102

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

Análise Preditiva para Previsão de Declínio de Produção de Óleo

Python FastAPI OpenAPI Swagger Code style: black Typed with: pydantic coverage report

Descrição

Módulo de software especializado em análise preditiva para planejamento e gestão de reservatórios de petróleo.

Utiliza técnicas de aprendizado de máquina para prever a curva de declínio de produção de óleo.

[...]

As funções essenciais do programa são:

Treinamento de Modelos: Processar um vasto conjunto de dados históricos de simulação de reservatórios (séries temporais de produção de óleo, gás, água, saturação, etc.) para treinar múltiplos modelos de aprendizado de máquina, incluindo Redes Neurais Multicamadas (MLPs), Redes Neurais Recorrentes (LSTMs) e Redes Neurais Convolucionais (CNNs).

Análise Preditiva: Utilizar os modelos treinados para gerar projeções futuras da curva de produção de óleo para reservatórios, grupos de poços ou poços individuais, baseando-se em seus dados históricos de produção.

Cálculo de Incerteza: Estimar o grau de confiança e os intervalos de incerteza associados às previsões geradas, oferecendo uma métrica quantitativa sobre a confiabilidade da projeção.

Integração e Visualização: Fornecer os resultados (curva projetada e grau de confiança) de forma estruturada para que o sistema cliente possa exibi-los graficamente aos usuários finais.

[...]

Desenvolvido utilizando o framework FastAPI em Python 3.12

A API segue os padrões RESTful e OpenAPI, garantindo a documentação automática e a fácil integração com outras aplicações. As buscas são realizadas utilizando modelos de IA específicos, e a arquitetura modular permite a fácil extensão e manutenção do sistema.

Instalação

MiniConda3

  • Instalação do miniconda

    mkdir -p ~/miniconda3
    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
    bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
    rm -rf ~/miniconda3/miniconda.sh
    ~/miniconda3/bin/conda init bash
    ~/miniconda3/bin/conda init zsh
  • Criar environment python 3.12:

    conda create -n python3.12 python=3.12
  • Ativar o environment:

    conda activate python3.12
  • Instalar o pipenv no conda environment:

    $ python -m pip install pipenv

PipEnv

  • Instale as dependências do projeto usando Pipenv:

    $ python -m pipenv install --dev

Execução

As tarefas comuns do projeto são automatizadas através de scripts definidos no Pipfile. Toda a execução deve ser feita através do pipenv.

Listando e Executando Scripts

  1. Listar scripts disponíveis: Para ver todos os scripts definidos, execute:

    $ pipenv scripts
  2. Executar um script: Para executar um script específico, use o comando pipenv run:

    $ pipenv run <nome_do_script>

    Por exemplo, para iniciar o treinamento:

    $ pipenv run train

Pipeline Principal

Estes são os dois passos principais para processar os dados e treinar os modelos.

  1. model-1-generate-dataframes

    • O que faz: Este é o primeiro passo (ETL). Ele lê os arquivos de simulação brutos (ex: .sr3), processa os dados, calcula propriedades derivadas e salva o resultado em um formato otimizado (Parquet) no diretório especificado em DATAFRAMES_DIRECTORY.
    • Comando:
      $ pipenv run model-1-generate-dataframes
  2. model-2-train

    • O que faz: Este é o segundo e principal passo do pipeline. Ele carrega os dataframes gerados na etapa anterior, pré-processa os dados (normalização, criação de sequências), treina todos os modelos de Machine Learning configurados (MLP, LSTM, etc.) e, ao final, gera e salva os dashboards com os resultados e métricas de avaliação.
    • Comando:
      $ pipenv run model-2-train

Outros Scripts

  • api-server: Inicia o servidor da API web usando FastAPI/Uvicorn.
  • model-debug-export-dataframes: Script utilitário que converte os dataframes Parquet para o formato CSV, facilitando a inspeção e depuração dos dados.
  • model-debug-trainment: Executa o pré-processamento passo a passo para uma única simulação, exibindo informações detalhadas para ajudar a depurar problemas de KeyError ou falta de dados para o treinamento.
  • tests: Executa a suíte de testes automatizados do projeto com pytest.
  • tests-coverage: Executa os testes e gera um relatório de cobertura de código no terminal.

Executando em Diferentes Ambientes

A seleção do ambiente (ex: TESTING, PRODUCTION) é controlada pela variável de ambiente ENV, que determina qual arquivo .env será carregado.

O projeto utiliza arquivos .env para gerenciar as configurações de cada ambiente. A seleção do ambiente é controlada pela variável de ambiente ENV.

  • Produção (padrão): Se a variável ENV não for definida, o sistema carregará as configurações do arquivo /config/Environment.py.
  • Desenvolvimento: Para usar as configurações de desenvolvimento, defina a variável ENV como DEVELOPMENT. O sistema carregará o arquivo .env.development e aplicará sobre as configurações padrão.
  • Teste: Para usar as configurações de teste, defina a variável ENV como TEST. O sistema carregará o arquivo .env.test e aplicará sobre as configurações padrão.

Você pode combinar a definição da variável de ambiente com a execução do script.

Exemplos:

  • Iniciar a API em ambiente de desenvolvimento (Linux/macOS):
$ ENV=DEVELOPMENT pipenv run api-server
  • Iniciar o treinamento em ambiente de teste (Windows PowerShell):
$ $env:ENV="TESTING"; pipenv run model-2-train
  • Para acessar a API, abra localhost:8000/docs no seu navegador.

Testing

  • Execute o seguinte comando para iniciar os testes:
    $ pipenv run tests
  • Para incluir também o Relatório de Cobertura:
    $ pipenv run tests-coverage
  • Para visualizar o Relatório de Cobertura: Instale o pacote coverage, se ainda não tiver instalado
    $ pip install coverage
    Peça para gerar o relatório em html, por exemplo:
    $ coverage html
    Abra o arquivo gerado (htmlcov/index.html)

Gerenciamento de Migrações com Alembic

Este projeto utiliza o Alembic para gerenciar as migrações do banco de dados. As migrações são uma maneira de manter o esquema do banco de dados atualizado conforme as mudanças no modelo de dados.

Criando Migrations

Para gerar novas migrações, utilize o comando do Alembic via CLI:

$ pipenv run alembic revision --autogenerate -m "migration_description_2024.12.31"

Isso gerará um novo arquivo de migração baseado nas mudanças detectadas nos modelos.

Aplicando Migrations

Para aplicar as migrações no banco de dados, o Alembic também pode ser utilizado via CLI:

$ pipenv run alembic upgrade head

Este comando irá aplicar todas as migrações pendentes até a mais recente.

Aplicação Automática de Migrations na Inicialização da Aplicação

Além do uso via linha de comando, as migrações são automaticamente aplicadas durante o ciclo de vida da aplicação FastAPI. O seguinte código foi adicionado à função lifespan da aplicação para garantir que, ao iniciar, a aplicação sempre aplique as migrações mais recentes:

@asynccontextmanager
async def lifespan(app: FastAPI):
    # Create an Alembic configuration object
    alembic_cfg = Config("alembic.ini")
    # Run the Alembic upgrade command to apply migrations
    command.upgrade(alembic_cfg, "head")
    yield

# Core Application Instance
app = FastAPI(
    title=env.APP_NAME,
    version=env.API_VERSION,
    openapi_tags=Tags,
    lifespan=lifespan
)

Esse código garante que, ao iniciar a aplicação, todas as migrações pendentes sejam aplicadas automaticamente ao banco de dados, sem a necessidade de executar o comando pipenv run alembic upgrade head manualmente.

Ferramentas

HDF View

About

INF2102 - PROJETO FINAL DE PROGRAMACAO - 2025.2 - 3WA

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published