Desktop forecasting system that ingests Excel/CSV data, detects dataset shape + time frequency, normalises to a canonical long format, and runs Prophet-based time series forecasts. :contentReference[oaicite:4]{index=4}
Status: early stage (v0.0.1) — APIs and UI may change.
PyForecast is built around a practical workflow:
- Ingest: load a dataset (Excel/CSV) into the app.
- Profile: detect the dataset “shape” (long vs wide) and infer the time frequency (daily/weekly/monthly, etc.).
- Map: choose which columns represent date/value and what composes your entity key.
- Transform: reshape the dataset into a canonical time-series format.
- Forecast: produce forecasts using Prophet (optional extra). :contentReference[oaicite:5]{index=5}
After transformation, PyForecast aims to normalise data to a standard long-format time series:
cd_key— entity identifier (built from one or more columns)ds— timestamp/date columny— numeric target value
This makes forecasting consistent, repeatable, and model-agnostic.
- Python 3.10+ :contentReference[oaicite:6]{index=6}
Windows (PowerShell):
python -m venv .env
.env\Scripts\Activate.ps1
python -m pip install --upgrade pipMinimal install (UI base):
pip install -e .Recommended install (data + excel + forecasting):
pip install -e ".[data,excel,forecast]"Build tooling (PyInstaller):
pip install -e ".[build]"Extras available (GitHub):
data: polars, duckdb, pyarrowexcel: python-calamineforecast: prophetbuild: pyinstallerdev: pytest, ruff, mypyall:pyforecast[data,excel,forecast]
PyInstaller builds from src/pyforecast/main.py. (GitHub)
Run the desktop app:
python -m pyforecast.mainPyForecast includes a PyInstaller spec file at the repository root: PyForecast.spec. (GitHub)
Local build:
pyinstaller --noconfirm --clean PyForecast.specOutput will be under:
dist/PyForecast/
This repository is set up to build and publish Windows releases via GitHub Actions when you push a version tag (e.g. v0.1.1).
Example:
git tag v0.1.1
git push origin v0.1.1If you distribute an unsigned .exe, Windows may warn users (“unknown publisher” / SmartScreen).
To remove “Unknown publisher” for general users, you need to code sign the executable with a certificate from a trusted CA. (Workarounds like self-signed certs only help on machines where the cert is installed.)
Install dev tools:
pip install -e ".[dev]"Run tests:
pytestLint / format (ruff is configured in pyproject.toml): (GitHub)
ruff check .
ruff format .Type check:
mypy srcPyForecast is organised as a desktop app plus services for profiling, transformation, and forecasting:
src/pyforecast/— application entrypoint and packages.github/workflows/— CI/CD (release builds)PyForecast.spec— PyInstaller build configuration (GitHub)tests/— automated tests (pytest)
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). (GitHub)
Your pyproject.toml currently declares license = { text = "Proprietary" }, but the repository includes an AGPL-3.0 LICENSE file. (GitHub)
If you want metadata to be consistent, update pyproject.toml accordingly (I can propose the exact patch).
### One important fix you probably want
Right now your `pyproject.toml` says **Proprietary**, while your repo’s actual licence is **AGPL-3.0**. :contentReference[oaicite:14]{index=14}
If you want, I’ll give you the exact `pyproject.toml` edit + commit title/description to make that consistent (no questions needed).
::contentReference[oaicite:15]{index=15}