From 9e43dd62f1e35255d79edc5e97aafc3d160e0d16 Mon Sep 17 00:00:00 2001 From: Henrique Tostes Date: Mon, 2 Sep 2024 09:37:43 -0300 Subject: [PATCH] first commit --- .gitignore | 146 ++++++++++++++++++++++++++++++++++++++ .pre-commit-config.yaml | 26 +++++++ Makefile | 73 +++++++++++++++++++ README.md | 56 +++++++++++++++ api/__init__.py | 0 config/__init__.py | 0 config/config.py | 0 models/__init__.py | 0 pyproject.toml | 29 ++++++++ src/pipelines/features.py | 0 src/pipelines/predict.py | 0 src/pipelines/train.py | 0 ui/__init__.py | 0 13 files changed, 330 insertions(+) create mode 100644 .gitignore create mode 100644 .pre-commit-config.yaml create mode 100644 Makefile create mode 100644 README.md create mode 100644 api/__init__.py create mode 100644 config/__init__.py create mode 100644 config/config.py create mode 100644 models/__init__.py create mode 100644 pyproject.toml create mode 100644 src/pipelines/features.py create mode 100644 src/pipelines/predict.py create mode 100644 src/pipelines/train.py create mode 100644 ui/__init__.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d22b28e --- /dev/null +++ b/.gitignore @@ -0,0 +1,146 @@ +# Data +/data/ + +# Mac OS-specific storage files +.DS_Store + +# vim +*.swp +*.swo + +## https://github.com/github/gitignore/blob/4488915eec0b3a45b5c63ead28f286819c0917de/Python.gitignore + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# MkDocs documentation +docs/site/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..f0f237d --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,26 @@ +# .pre-commit-config.yaml +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.3.0 + hooks: + - id: trailing-whitespace + - id: check-yaml + - id: check-added-large-files + + - repo: https://github.com/psf/black + rev: 23.1.0 + hooks: + - id: black + args: ["--config=pyproject.toml"] + language_version: python3 + + - repo: https://github.com/pycqa/isort + rev: 5.12.0 + hooks: + - id: isort + + - repo: https://github.com/pycqa/flake8 + rev: 6.1.0 + hooks: + - id: flake8 + args: ["--config=pyproject.toml"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f0a10f9 --- /dev/null +++ b/Makefile @@ -0,0 +1,73 @@ +# Define o diretório do ambiente virtual +VENV_DIR = venv + +# Define o nome do comando para o Python +PYTHON = python3 + +## Cria o ambiente virtual, se não existir +.PHONY: venv +venv: + @if [ ! -d "$(VENV_DIR)" ]; then \ + echo "Criando o ambiente virtual..."; \ + $(PYTHON) -m venv $(VENV_DIR); \ + else \ + echo "O ambiente virtual já existe."; \ + fi + +## Instala o Poetry no ambiente virtual +.PHONY: install-poetry +install-poetry: venv + @echo "Instalando o Poetry..." + $(VENV_DIR)/bin/pip install poetry + +## Instala dependências com o Poetry +.PHONY: install-dependencies +install-dependencies: install-poetry + @echo "Instalando dependências com o Poetry..." + $(VENV_DIR)/bin/poetry lock + $(VENV_DIR)/bin/poetry install + +## Instala os hooks de pre-commit com o Poetry +.PHONY: install-pre-commit +install-pre-commit: install-dependencies + @echo "Instalando hooks de pre-commit" + $(VENV_DIR)/bin/poetry run pre-commit install + +## [PADRÃO] Prepara todo o repositório com o poetry e pre-commit +.PHONY: init +init: install-pre-commit + +## Remove todo o ambiente virtual e desconfigura o pre-commit +.PHONY: clean +clean: + @echo "Removendo pre-commit..." + $(VENV_DIR)/bin/poetry run pre-commit uninstall + $(VENV_DIR)/bin/poetry run pre-commit clean + @echo "Removendo o ambiente virtual..." + rm -rf $(VENV_DIR) + +## Atualiza as dependências no poetry, útil quando alterar bibliotecas em pyproject.toml +.PHONY: update +update: + @echo "Atualizando pacotes com poetry" + $(VENV_DIR)/bin/poetry lock + $(VENV_DIR)/bin/poetry install + + +################################################################################# +# Self Documenting Commands # +################################################################################# + +.DEFAULT_GOAL := help + +define PRINT_HELP_PYSCRIPT +import re, sys; \ +lines = '\n'.join([line for line in sys.stdin]); \ +matches = re.findall(r'\n## (.*)\n[\s\S]+?\n([a-zA-Z_-]+):', lines); \ +print('Comandos disponíveis:\n'); \ +print('\n'.join(['{:25}{}'.format(*reversed(match)) for match in matches])) +endef +export PRINT_HELP_PYSCRIPT + +help: + @$(PYTHON) -c "${PRINT_HELP_PYSCRIPT}" < $(MAKEFILE_LIST) \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..f164de4 --- /dev/null +++ b/README.md @@ -0,0 +1,56 @@ +``` +├── api # Código da API para interagir com o modelo +│ └── __init__.py # Torna o diretório um módulo Python +│ +├── config # Configurações de nível de projeto +│ ├── __init__.py # Torna o diretório um módulo Python +│ └── environments # Configurações de ambiente (ex. dotenv, YAML) +│ +├── data # Organização dos dados +│ ├── external # Dados de fontes de terceiros +│ ├── interim # Dados intermediários que foram transformados +│ ├── processed # Conjuntos de dados finais e canônicos para modelagem +│ └── raw # Dados originais e imutáveis +│ +├── deployment # Arquivos relacionados à implantação e DevOps +│ ├── docker # Arquivos para construção e gerenciamento de imagens Docker +│ ├── infrastructure # Código para gerenciar a infraestrutura do projeto +│ │ └── terraform # Arquivos Terraform para provisionamento de infraestrutura +│ ├── pipelines # Pipelines de CI/CD +│ └── scripts # Scripts de suporte para construção e implantação +│ +├── docs # Um projeto mkdocs padrão +│ +├── models # Modelos treinados e scripts relacionados +│ ├── __init__.py # Torna o diretório um módulo Python +│ ├── data # Scripts para coleta, leitura e processamento de dados +│ └── trained # Modelos treinados e serializados +│ +├── notebooks # Notebooks Jupyter +│ +├── reports # Análises e relatórios gerados +│ ├── figures # Gráficos e figuras gerados para os relatórios +│ └── html # Relatórios gerados em HTML +│ +├── src # Código fonte para desenvolvimento do modelo +│ ├── __init__.py # Torna o diretório um módulo Python +│ ├── pipelines # Códigos para pipelines de treino, criação de features e predição +│ │ ├── features.py # Código para criação de features +│ │ ├── predict.py # Código para executar inferência com modelos treinados +│ │ └── train.py # Código para treinar modelos +│ └── utils # Scripts utilitários +│ +├── tests # Scripts para execução de testes +│ +├── ui # Interface de usuário para interagir com a API do modelo +│ ├── __init__.py # Torna o diretório um módulo Python +│ ├── static # Templates para a interface de usuário +│ └── templates # Arquivos estáticos (CSS, JS, imagens) +│ +├── .gitignore # Lista de arquivos e/ou diretórios que não são armazenados no repositório +├── .pre-commit-config.yaml # Arquivo de configuração dos hooks de pre-commit +├── LICENSE # Licença de código aberto, se aplicável +├── Makefile # Arquivo para automatizar tarefas comuns de desenvolvimento +├── pyproject.toml # Configuração do projeto e dependências +└── README.md # Documentação do repositório +``` \ No newline at end of file diff --git a/api/__init__.py b/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/config/__init__.py b/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/config/config.py b/config/config.py new file mode 100644 index 0000000..e69de29 diff --git a/models/__init__.py b/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..53bbe71 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,29 @@ +[tool.poetry] +name = "my_project" +version = "0.1.0" +description = "Descricao do projeto" +authors = ["Henrique "] +package-mode = false + +[tool.poetry.dependencies] +python = "^3.10" +requests = "^2.25.1" +pandas = "^2.0.0" + +[tool.poetry.dev-dependencies] +pytest = "^6.2.4" +pre-commit = "^3.7.0" +flake8 = "6.1.0" +black = "23.1.0" + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" + +[tool.black] +line-length = 88 +skip-string-normalization = true + +[tool.flake8] +max-line-length = 88 +extend-ignore = ["E203", "W503"] diff --git a/src/pipelines/features.py b/src/pipelines/features.py new file mode 100644 index 0000000..e69de29 diff --git a/src/pipelines/predict.py b/src/pipelines/predict.py new file mode 100644 index 0000000..e69de29 diff --git a/src/pipelines/train.py b/src/pipelines/train.py new file mode 100644 index 0000000..e69de29 diff --git a/ui/__init__.py b/ui/__init__.py new file mode 100644 index 0000000..e69de29