<p align="center">
<img src="images/logo_octoanalytics.png" alt="octoanalytics logo" width="200"/>
</p>
[](https://opensource.org/licenses/MIT)
# octoanalytics 📊⚡
**Energy consumption forecasting & risk premium analysis for the French electricity market**
---
## Description
`octoanalytics` is a Python toolkit for:
- Retrieving and smoothing **weather data** via Open-Meteo API.
- Training and evaluating **load forecasting models** (MW) using Random Forest.
- Generating **interactive visualizations** comparing actual vs. forecasted values.
- Accessing **spot and forward price data** (annual, monthly, PFC) from **Databricks SQL**.
- Computing **volume and shape risk premiums**, key for energy portfolio management.
---
## Installation
```bash
pip install octoanalytics
```
> ⚠️ You need a valid Databricks access token to retrieve market data.
---
## Dependencies
- `pandas`
- `numpy`
- `scikit-learn`
- `plotly`
- `matplotlib`
- `tqdm`
- `requests`
- `tentaclio`
- `yaspin`
- `holidays`
- `dotenv`
- `databricks-sql-connector`
---
## Main Features
### 🔁 Weather data retrieval and smoothing
```python
from octoanalytics import get_temp_smoothed_fr
temp_df = get_temp_smoothed_fr(start_date="2024-01-01", end_date="2024-12-31")
```
---
### ⚡ Load forecasting
```python
from octoanalytics import eval_forecast
forecast_df = eval_forecast(df=load_df(), temp_df=temp_df, cal_year=2024)
```
---
### 💰 Risk premium calculation
#### Volume Risk
```python
from octoanalytics import calculate_prem_risk_vol
premium = calculate_prem_risk_vol(forecast_df, spot_df, forward_df)
```
#### Shape Risk
```python
from octoanalytics import calculate_prem_risk_shape
shape_risk = calculate_prem_risk_shape(forecast_df, pfc_df, spot_df)
```
---
### 🔌 Databricks SQL connections
```python
from octoanalytics import get_spot_price_fr, get_forward_price_fr_annual
spot_df = get_spot_price_fr(token=DB_TOKEN, start_date="2024-01-01", end_date="2024-12-31")
forward_df = get_forward_price_fr_annual(token=DB_TOKEN, cal_year=2025)
```
---
## Package Structure
```
octoanalytics/
│
├── __init__.py
├── core.py # Main logic
├── ...
```
---
## Author
**Jean Bertin**
📧 jean.bertin@octopusenergy.fr
---
## License
MIT – free to use, modify, and distribute.
---
## Roadmap
- [ ] Add XGBoost model
- [ ] Load anomaly detection
- [ ] Flask REST API deployment
- [ ] Automatic PDF report generation
---
## Full Demo
To be included in `examples/forecast_demo.ipynb`.
Raw data
{
"_id": null,
"home_page": null,
"name": "octoanalytics",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "python, quantitative, risk, power, quant, octopusenergy",
"author": "Jean Bertin",
"author_email": "<jean.bertin@octopusenergy.fr>",
"download_url": "https://files.pythonhosted.org/packages/bc/bf/998c1ecab8fd0b475b644d8692a7275e4b2d274044b9d4a1f9c993817e62/octoanalytics-0.2.2.tar.gz",
"platform": null,
"description": "\n\n\n<p align=\"center\">\n <img src=\"images/logo_octoanalytics.png\" alt=\"octoanalytics logo\" width=\"200\"/>\n</p>\n\n[](https://opensource.org/licenses/MIT)\n\n# octoanalytics \ud83d\udcca\u26a1\n\n**Energy consumption forecasting & risk premium analysis for the French electricity market**\n\n---\n\n## Description\n\n\n`octoanalytics` is a Python toolkit for:\n\n- Retrieving and smoothing **weather data** via Open-Meteo API.\n- Training and evaluating **load forecasting models** (MW) using Random Forest.\n- Generating **interactive visualizations** comparing actual vs. forecasted values.\n- Accessing **spot and forward price data** (annual, monthly, PFC) from **Databricks SQL**.\n- Computing **volume and shape risk premiums**, key for energy portfolio management.\n\n---\n\n## Installation\n\n```bash\npip install octoanalytics\n```\n\n> \u26a0\ufe0f You need a valid Databricks access token to retrieve market data.\n\n---\n\n## Dependencies\n\n- `pandas`\n- `numpy`\n- `scikit-learn`\n- `plotly`\n- `matplotlib`\n- `tqdm`\n- `requests`\n- `tentaclio`\n- `yaspin`\n- `holidays`\n- `dotenv`\n- `databricks-sql-connector`\n\n---\n\n## Main Features\n\n### \ud83d\udd01 Weather data retrieval and smoothing\n\n```python\nfrom octoanalytics import get_temp_smoothed_fr\n\ntemp_df = get_temp_smoothed_fr(start_date=\"2024-01-01\", end_date=\"2024-12-31\")\n```\n\n---\n\n### \u26a1 Load forecasting\n\n```python\nfrom octoanalytics import eval_forecast\n\nforecast_df = eval_forecast(df=load_df(), temp_df=temp_df, cal_year=2024)\n```\n\n---\n\n### \ud83d\udcb0 Risk premium calculation\n\n#### Volume Risk\n\n```python\nfrom octoanalytics import calculate_prem_risk_vol\n\npremium = calculate_prem_risk_vol(forecast_df, spot_df, forward_df)\n```\n\n#### Shape Risk\n\n```python\nfrom octoanalytics import calculate_prem_risk_shape\n\nshape_risk = calculate_prem_risk_shape(forecast_df, pfc_df, spot_df)\n```\n\n---\n\n### \ud83d\udd0c Databricks SQL connections\n\n```python\nfrom octoanalytics import get_spot_price_fr, get_forward_price_fr_annual\n\nspot_df = get_spot_price_fr(token=DB_TOKEN, start_date=\"2024-01-01\", end_date=\"2024-12-31\")\nforward_df = get_forward_price_fr_annual(token=DB_TOKEN, cal_year=2025)\n```\n\n---\n\n## Package Structure\n\n```\noctoanalytics/\n\u2502\n\u251c\u2500\u2500 __init__.py\n\u251c\u2500\u2500 core.py # Main logic\n\u251c\u2500\u2500 ...\n```\n\n---\n\n## Author\n\n**Jean Bertin** \n\ud83d\udce7 jean.bertin@octopusenergy.fr\n\n---\n\n## License\n\nMIT \u2013 free to use, modify, and distribute.\n\n---\n\n## Roadmap\n\n- [ ] Add XGBoost model\n- [ ] Load anomaly detection\n- [ ] Flask REST API deployment\n- [ ] Automatic PDF report generation\n\n---\n\n## Full Demo\n\nTo be included in `examples/forecast_demo.ipynb`.\n",
"bugtrack_url": null,
"license": null,
"summary": "Quantitative analysis for power markets",
"version": "0.2.2",
"project_urls": null,
"split_keywords": [
"python",
" quantitative",
" risk",
" power",
" quant",
" octopusenergy"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "a7ee8eb759e5e539c4612a669536b688929d5a397eacf3579e6f2490dc0dbef6",
"md5": "afeae07a807c9dc7906fc7944b4c5b16",
"sha256": "4bd9ba4ebf0358b19a9b1a2e5cf5a454b8f998f1fcafe6f36d6dadea6784949b"
},
"downloads": -1,
"filename": "octoanalytics-0.2.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "afeae07a807c9dc7906fc7944b4c5b16",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 12185,
"upload_time": "2025-07-28T16:12:32",
"upload_time_iso_8601": "2025-07-28T16:12:32.890689Z",
"url": "https://files.pythonhosted.org/packages/a7/ee/8eb759e5e539c4612a669536b688929d5a397eacf3579e6f2490dc0dbef6/octoanalytics-0.2.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bcbf998c1ecab8fd0b475b644d8692a7275e4b2d274044b9d4a1f9c993817e62",
"md5": "01c3c31d019ec46b79a8da5f53a4f72e",
"sha256": "d40f70dc49c545e2ab94e9ff0e5b949547a707b83ec94d206b56313405814675"
},
"downloads": -1,
"filename": "octoanalytics-0.2.2.tar.gz",
"has_sig": false,
"md5_digest": "01c3c31d019ec46b79a8da5f53a4f72e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 13469,
"upload_time": "2025-07-28T16:12:34",
"upload_time_iso_8601": "2025-07-28T16:12:34.047186Z",
"url": "https://files.pythonhosted.org/packages/bc/bf/998c1ecab8fd0b475b644d8692a7275e4b2d274044b9d4a1f9c993817e62/octoanalytics-0.2.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-28 16:12:34",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "octoanalytics"
}