Gatlen's Opinionated Template (GOTem)
Cutting-edge, opinionated, and ambitious project builder for power users and researchers. Built on (and synced with) the foundation of CookieCutter Data Science (CCDS) V2, this template incorporates carefully selected defaults, dependency stack, customizations, and contemporary best practices for Python development, research projects, and academic work.
Quickstart
Gatlen's Opinionated Template (GOTem) works on all platforms w/ Python 3.10+. While I try my best to keep in-sync with the upstream CookieCutter Data Science (CCDS) V2, being a one-man-maintainer on this project means I may neglect features I tend not to use and deviations from what I use may not receive as thorough testing. If you wish to change any of the defaults, I recommend forking this project.
I recommend installing gotem it with uv. GOTem is Available on PyPi here.
```bash
uv pip install gatlens-opinionated-template
# From the parent directory where you want your project
gotem
```
```bash
pipx install gatlens-opinionated-template
# From the parent directory where you want your project
gotem
```
```bash
pip install gatlens-opinionated-template
# From the parent directory where you want your project
gotem
```
```bash
# conda install cookiecutter-data-science -c conda-forge
# From the parent directory where you want your project
# ccds
```
Starting a new project
Starting a new project is as easy as running this command at the command line. No need to create a directory first, the cookiecutter will do it for you.
gotem
The gotem
commandline tool defaults to the GOTem template, but you can pass your own template as the first argument if you want. The CCDS team has built significant tooling around Cookiecutter to make it easier to use and more customizable.
Example
Now that you've got your project, you're ready to go! You should do the following:
- Check out the directory structure below so you know what's in the project and how to use it.
- Read the opinions that are baked into the project so you understand best practices and the philosophy behind the project structure.
- Read the using the template guide to understand how to get started on a project that uses the template.
Enjoy!
Directory structure
The directory structure of your new project will look something like this (depending on the settings that you choose):
๐ .
โโโ โ๏ธ .cursorrules <- LLM instructions for Cursor IDE
โโโ ๐ป .devcontainer <- Devcontainer config
โโโ โ๏ธ .gitattributes <- GIT-LFS Setup Configuration
โโโ ๐งโ๐ป .github
โ โโโ โก๏ธ actions
โ โ โโโ ๐ setup-python-env <- Automated python setup w/ uv
โ โโโ ๐ก ISSUE_TEMPLATE <- Templates for Raising Issues on GH
โ โโโ ๐ก pull_request_template.md <- Template for making GitHub PR
โ โโโ โก๏ธ workflows
โ โโโ ๐ main.yml <- Automated cross-platform testing w/ uv, precommit, deptry,
โ โโโ ๐ on-release-main.yml <- Automated mkdocs updates
โโโ ๐ป .vscode <- Preconfigured extensions, debug profiles, workspaces, and tasks for VSCode/Cursor powerusers
โ โโโ ๐ launch.json
โ โโโ โ๏ธ settings.json
โ โโโ ๐ tasks.json
โ โโโ โ๏ธ '{{ cookiecutter.repo_name }}.code-workspace'
โโโ ๐ data
โ โโโ ๐ external <- Data from third party sources
โ โโโ ๐ interim <- Intermediate data that has been transformed
โ โโโ ๐ processed <- The final, canonical data sets for modeling
โ โโโ ๐ raw <- The original, immutable data dump
โโโ ๐ณ docker <- Docker configuration for reproducability
โโโ ๐ docs <- Project documentation (using mkdocs)
โโโ ๐ฉโโ๏ธ LICENSE <- Open-source license if one is chosen
โโโ ๐ logs <- Preconfigured logging directory for
โโโ ๐ทโโ๏ธ Makefile <- Makefile with convenience commands (PyPi publishing, formatting, testing, and more)
โโโ ๐ Taskfile.yml <- Modern alternative to Makefile w/ same functionality
โโโ ๐ notebooks <- Jupyter notebooks
โ โโโ ๐ 01_name_example.ipynb
โ โโโ ๐ฐ README.md
โโโ ๐๏ธ out
โ โโโ ๐ features <- Extracted Features
โ โโโ ๐ models <- Trained and serialized models
โ โโโ ๐ reports <- Generated analysis
โ โโโ ๐ figures <- Generated graphics and figures
โโโ โ๏ธ pyproject.toml <- Project configuration file w/ carefully selected dependency stacks
โโโ ๐ฐ README.md <- The top-level README
โโโ ๐ secrets <- Ignored project-level secrets directory to keep API keys and SSH keys safe and separate from your system (no setting up a new SSH-key in ~/.ssh for every project)
โ โโโ โ๏ธ schema <- Clearly outline expected variables
โ โโโ โ๏ธ example.env
โ โโโ ๐ ssh
โ โโโ โ๏ธ example.config.ssh
โ โโโ ๐ example.something.key
โ โโโ ๐ example.something.pub
โโโ ๐ฐ '{{ cookiecutter.module_name }}' <- Easily publishable source code
โโโ โ๏ธ config.py <- Store useful variables and configuration (Preset)
โโโ ๐ dataset.py <- Scripts to download or generate data
โโโ ๐ features.py <- Code to create features for modeling
โโโ ๐ modeling
โ โโโ ๐ __init__.py
โ โโโ ๐ predict.py <- Code to run model inference with trained models
โ โโโ ๐ train.py <- Code to train models
โโโ ๐ plots.py <- Code to create visualizations