Project Story: ClimateWiz

About

Interactive globe + timeline for country-level temperature data. Shows absolute temperatures and anomalies vs. the 1991–2020 baseline.

Why

Climate data is abundant yet fragmented. ClimateWiz condenses it into fast, comparable visuals for evidence-based exploration.

Build

  • Stack: Python (Pandas/Polars), FastAPI, Streamlit, globe.gl/WebGL, Plotly
  • Pipeline: raw CSV → schema checks → country harmonization → yearly aggregation → basic tile caching
  • Ops: Reproducible Conda env, lint/tests in CI; versioned environment.yml

Methods

Anomaly

$$ A_{c,t}=T_{c,t}-\overline{T}_{c,1991{:}2020} $$

Trend & Forecasting (supervised OLS)

$$ \hat{T}_{c,t}=\hat{\alpha}_c+\hat{\beta}_c\,t \quad\Rightarrow\quad $$

$$ \hat{T}_{c,t+h}=\hat{\alpha}_c+\hat{\beta}_c\,(t+h),\; h>0 $$

We fit a supervised linear regression per country and extrapolate to forecast future annual temperatures. When needed, monthly estimates are aggregated to yearly means.

Machine Learning Aspect

  • Supervised forecasting: annual temperature as target, time as feature; train on history, predict (t{+}h).
  • Reproducibility: fixed data pipeline, deterministic splits, versioned environment.
  • Extensibility: same pipeline can host ridge/lasso or robust estimators without UI changes.

Lessons

  • Reproducible environments (pinned Python/libs; resolving _distutils_hack) prevented dev/CI drift.
  • Defaults (baseline, units, palette) shape interpretation; documenting them reduces confusion.
  • Small UX fixes (clickable help, legend/line linkage, reliable PNG/CSV export) improved usability.
  • Data hygiene (country codes, historical splits/merges) dominated chart fidelity.
  • Pre-aggregation and tile caching delivered most performance gains.

Challenges

  • Inconsistent country sets and sparse years required careful harmonization and gap handling.
  • UI edge cases: unresponsive buttons, trend/guide coupling, equal-month artifacts after adjustments.
  • Export reliability (PNG “screenshot” vs. true render capture) across browsers/GPUs.
  • Balancing interactivity with WebGL limits on lower-end hardware.
  • Aligning dependencies across local setups, CI, and IDE interpreters (Conda ↔ PyCharm).

Built With

  • black
  • conda
  • fastapi
  • github
  • ols-trend
  • pandas
  • plotly
  • polars
  • polars-(etl);-fastapi-(api);-streamlit-+-streamlit.components.v1-&-globe.gl/webgl-(ui);-plotly-(charts/export);-ols-trend-pro-land-(modell);-conda/environment.yml
  • pycharm
  • python
  • ruff
  • streamlit
Share this project:

Updates

Submission history