demandcast

Retrieve historic electricity demand data and generate synthetic future demand predictions using our ML model

https://github.com/open-energy-transition/demandcast

Science Score: 26.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (13.1%) to scientific vocabulary

Keywords from Contributors

energy-system-model
Last synced: 11 months ago · JSON representation

Repository

Retrieve historic electricity demand data and generate synthetic future demand predictions using our ML model

Basic Info
Statistics
  • Stars: 6
  • Watchers: 1
  • Forks: 0
  • Open Issues: 6
  • Releases: 2
Created over 1 year ago · Last pushed 11 months ago
Metadata Files
Readme Contributing License Security

README.md

DemandCast

Global hourly electricity demand forecasting

A project developed by

OET Logo

Supported by

Breakthrough Energy Logo

Documentation

About

DemandCast is a Python-based project focused on collecting, processing, and forecasting hourly electricity demand data. The aim of this project is to support energy planning studies by using machine learning models to generate hourly time series of future electricity demand or for countries without available data.

Features

  • Retrieval of open hourly and sub-hourly electricity demand data from public sources (ETL).
  • Retrieval of weather and socio-economic data (ETL).
  • Forecasting using machine learning models (models).
  • Modular design for adding new countries or data sources.
  • Support for reproducible, containerized development.

The project is in active development, we are always looking for suggestions and contributions!

Repository structure

demandcast/ ├── .github/ # Github specifics such as actions ├── ETL/ # Scripts for extracting, transforming, and loading data ├── models/ # Machine learning models for demand forecasting ├── webpage/ # Documentation website files (MkDocs) ├── .gitattributes # Git attributes for handling line endings ├── .gitignore # File lists that git ignores ├── .pre-commit-config.yaml # Pre-commit configuration ├── CONTRIBUTING.md # Guide to contributing ├── LICENSE # License file ├── README.md # Project overview and instructions ├── ruff.toml # Ruff configuration └── security.md # Security policy

DemandCast structure

DemandCast

Historical electricity demand collection progress

Countries and subdivisions for which retrieval scripts of electricity demand data are available

Find the code that we used to retrieve the data in their respective files inside the ETL folder.

Getting started

1. Clone the repository

bash git clone https://github.com/open-energy-transition/demandcast.git cd demandcast

2. Set up your environment

This project uses uv as a package manager to install the required dependencies and create an environment stored in .venv.

uv can be used within the provided Dockerfile or installed standalone (see installing uv).

The ETL folder and each subfolder in the models directory—each representing a separate model—contain their own pyproject.toml files that define the dependencies for that module.

To set up the environment, run: bash cd path/to/folder uv sync

Alternatively, you may use a package manager of your choice (e.g., conda) to install the dependencies listed in the respective pyproject.toml. If you choose this approach, please adjust the commands below to align with the conventions of your selected package manager.

3. Run scripts

Scripts can be run directly using:

bash cd path/to/folder uv run script.py

Jupyter notebooks (details) can be launched with:

bash cd path/to/folder uv run --with jupyter jupyter lab --allow-root

Development workflow

Run tests and check test coverage

bash cd path/to/folder uv run pytest --cov=utils --cov-report=term-missing

Pre-commit and lint code

To ensure code quality, we use pre-commit hooks. These hooks automatically run checks on your code before committing changes. Among the pre-commit hooks, we also use ruff to enforce code style and linting. All the pre-commit hooks are defined in the .pre-commit-config.yaml file.

To run pre-commit hooks, you can use: bash uvx pre-commit

Documentation

The documentation is currently hosted on GitHub pages connected to this repository. It is built with mkdocs.

To run it locally:

bash cd webpage uv run mkdocs serve

Maintainers

The project is maintained by the Open Energy Transition team. The team members currently involved in this project are:

Contributing

We welcome contributions in the form of:

  • Country-specific ETL modules
  • New or improved forecasting models
  • Documentation and testing enhancements

Please follow the repository’s structure and submit your changes via pull request.

License

This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).

Owner

  • Name: open-energy-transition
  • Login: open-energy-transition
  • Kind: organization

GitHub Events

Total
  • Create event: 13
  • Release event: 1
  • Issues event: 5
  • Watch event: 1
  • Delete event: 15
  • Issue comment event: 5
  • Push event: 149
  • Pull request review comment event: 33
  • Pull request review event: 40
  • Pull request event: 19
Last Year
  • Create event: 13
  • Release event: 1
  • Issues event: 5
  • Watch event: 1
  • Delete event: 15
  • Issue comment event: 5
  • Push event: 149
  • Pull request review comment event: 33
  • Pull request review event: 40
  • Pull request event: 19

Committers

Last synced: 12 months ago

All Time
  • Total Commits: 46
  • Total Committers: 4
  • Avg Commits per committer: 11.5
  • Development Distribution Score (DDS): 0.609
Past Year
  • Commits: 46
  • Committers: 4
  • Avg Commits per committer: 11.5
  • Development Distribution Score (DDS): 0.609
Top Committers
Name Email Commits
Enrico Antonini 5****i 18
Kevin Steijn 1****s 15
Vamsipriya22 g****2@g****m 9
pre-commit-ci[bot] 6****] 4

Issues and Pull Requests

Last synced: 11 months ago

All Time
  • Total issues: 3
  • Total pull requests: 78
  • Average time to close issues: about 1 month
  • Average time to close pull requests: 12 days
  • Total issue authors: 2
  • Total pull request authors: 4
  • Average comments per issue: 0.0
  • Average comments per pull request: 0.24
  • Merged pull requests: 54
  • Bot issues: 0
  • Bot pull requests: 5
Past Year
  • Issues: 3
  • Pull requests: 78
  • Average time to close issues: about 1 month
  • Average time to close pull requests: 12 days
  • Issue authors: 2
  • Pull request authors: 4
  • Average comments per issue: 0.0
  • Average comments per pull request: 0.24
  • Merged pull requests: 54
  • Bot issues: 0
  • Bot pull requests: 5
Top Authors
Issue Authors
  • ElectricMountains (2)
  • eantonini (1)
Pull Request Authors
  • eantonini (28)
  • ElectricMountains (26)
  • Vamsipriya22 (19)
  • pre-commit-ci[bot] (5)
Top Labels
Issue Labels
Enhancement (2) Bug (1)
Pull Request Labels
Python (56) Docs (29) GitHub Actions (20)

Dependencies

Dockerfile docker
  • python 3.12 build
pyproject.toml pypi
  • mkdocs-material >=9.5.50
uv.lock pypi
  • babel 2.16.0
  • certifi 2024.12.14
  • charset-normalizer 3.4.1
  • click 8.1.8
  • colorama 0.4.6
  • electric-demand-data 0.1.0
  • ghp-import 2.1.0
  • idna 3.10
  • iniconfig 2.0.0
  • jinja2 3.1.5
  • markdown 3.7
  • markupsafe 3.0.2
  • mergedeep 1.3.4
  • mkdocs 1.6.1
  • mkdocs-get-deps 0.2.0
  • mkdocs-material 9.5.50
  • mkdocs-material-extensions 1.3.1
  • packaging 24.2
  • paginate 0.5.7
  • pathspec 0.12.1
  • platformdirs 4.3.6
  • pluggy 1.5.0
  • pygments 2.19.1
  • pymdown-extensions 10.14.1
  • pytest 8.3.4
  • python-dateutil 2.9.0.post0
  • pyyaml 6.0.2
  • pyyaml-env-tag 0.1
  • regex 2024.11.6
  • requests 2.32.3
  • six 1.17.0
  • urllib3 2.3.0
  • watchdog 6.0.0