This project is a full-stack web application designed to help users intuitively understand the accuracy of UK national-level wind power generation forecasts. It compares actual generation data with forecasted data fetched from the BMRS API, adjusting for configurable forecast horizons.
The repository is organized into three main sections:
/analysis: Contains the Jupyter Notebook (forecast_analysis.ipynb) detailing the error characteristics of the forecast model and recommendations for reliable wind capacity based on first-principles reasoning./backend: A Python FastAPI application responsible for interacting with the Elexon BMRS API (/datasets/FUELHH/streamand/datasets/WINDFOR/stream). It handles data fetching, time-zone standardization, horizon filtering, and merging the datasets./frontend: A React.js application usingChart.js(react-chartjs-2) to provide an interactive dashboard. Users can select date ranges and use a slider to configure the forecast horizon.
-
Navigate to the backend directory:
cd backend -
Create and activate a virtual environment (optional but recommended):
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install the required dependencies:
pip install fastapi uvicorn pandas numpy requests
-
Start the development server:
uvicorn main:app --reload The backend will run on http://127.0.0.1:8000
-
Open a new terminal and navigate to the frontend directory:
cd frontend -
Install the required Node modules:
npm install
-
Start the React development server:
npm start
-
The frontend will run on http://localhost:3000
Live Application (Frontend): [(https://wind-forecast-app-sigma.vercel.app/)]
Live Backend API: [(https://wind-forecast-backend-32c2.onrender.com)]
Demo & Analysis Video: [(https://youtu.be/6VKA-zeY0AU)]
As permitted by the challenge guidelines, AI tools (Google Gemini) were utilized for low-level assistance during development. Specifically, AI was used to help debug strict JSON compliance issues with Pandas NaN values, troubleshoot BMRS API parameter syntax (publishDateTimeFrom), and resolve Chart.js configuration for plotting non-continuous lines (spanGaps). All architectural decisions, analytical reasoning, and data interpretations were derived independently.