Klímaadat-vizualizációs webalkalmazás Flask alapon. A projekt célja, hogy közérthető felületen mutassa meg a hőmérséklet, a csapadék, a CO2-kibocsátás és a globális felmelegedés fő trendjeit, grafikonos és térképes nézetekkel.
Az alkalmazás egy többoldalas klíma dashboard, ahol a felhasználó:
- kiválaszthat éveket és régiókat,
- összehasonlíthat eltérő időszakokat,
- megnézheti a kontinensek közötti különbségeket,
- térképen vizsgálhatja az országos értékeket,
- és egy egyszerűsített klímamodell alapján hőmérsékleti előrejelzést is kaphat 2050-ig.
A frontend kizárólag a saját Flask API-t használja. A külső adatforrásokat a backend tölti le, dolgozza fel, cache-eli és egységes JSON formában szolgálja ki.
- Áttekintő dashboard év-összehasonlítással
- Hőmérséklet oldal kontinens- és havi bontással
- Csapadék oldal éves és havi eloszlással
- CO2 oldal összkibocsátással és egy főre jutó mutatóval
- Föld felmelegedése oldal történeti trenddel és előrejelzéssel
- Világtérkép országos szintű rétegekkel
- CO2 kalkulátor oldal
- SEO-barát route-ok előtöltött év/régió paraméterekkel
- Python
- Flask
- requests
- saját service-réteg (
service/)
- Jinja2 sablonok
- HTML, CSS, vanilla JavaScript
- Chart.js grafikonokhoz
- Leaflet térképes megjelenítéshez
- Our World in Data grapher CSV-k
- helyi nyersadat-cache a
data/raw/mappában
app.py Flask route-ok és API végpontok
service/
api_service.py API payloadok összeállítása
forecast_service.py felmelegedési előrejelzés
loaders.py CSV letöltés, cache, betöltés
aggregations.py világ/kontinens aggregációk, per capita számítás
config.py chart nevek, limitek, alapbeállítások
store.py memóriabeli adattár és TTL-alapú cache
templates/ oldalak és kliensoldali adatlekérés
static/ stílusok, ikonok
data/raw/ nyers OWID CSV-k
/kezdőoldal/attekintesgyors összefoglaló a kiválasztott év globális és kontinentális adatairól/homersekletéves és havi hőmérsékleti bontás/csapadekéves és havi csapadékeloszlás/co2kontinensenkénti CO2-kibocsátás és per capita mutató/foldfelmelegedes/felmelegedestörténeti trendnézet/foldfelmelegedes/elorejelzesjövőbeli forgatókönyvek/terkepországos szintű térképes vizualizáció/co2-kalkulatorkülön kalkulátor oldal
A backend a service/loaders.py modulon keresztül dolgozik:
- először megnézi, hogy van-e helyi CSV a
data/raw/mappában, - ha van, abból tölt,
- ha nincs, letölti az OWID megfelelő grapher CSV-jét,
- majd eltárolja helyben, hogy a következő indulás gyorsabb legyen.
A használt fő chartok:
temperature->average-monthly-surface-temperatureprecipitation->average-precipitation-per-yearco2->co2-fossil-plus-land-usepopulation->population
Ezek environment változóval felülírhatók a service/config.py alapján.
Betöltéskor a rendszer:
- normalizálja az entitásneveket,
- eltárolja az országkódokat,
- felismeri a dátum oszlopot,
- havi és éves adatokat külön indexel,
- szükség esetén havi adatokból éves átlagot számol.
A belső memóriamodell:
STORE.monthly[metric][entity][year] -> [12 havi érték]STORE.yearly[metric][entity][year] -> éves értékSTORE.years[metric] -> elérhető évekSTORE.entities[metric] -> elérhető entitások
A service/aggregations.py végzi az összesítéseket:
- hőmérsékletnél és csapadéknál átlagol,
- CO2-nél összead,
- országokat kontinensekhez rendel,
- világértéket kontinensekből számol, ha nincs közvetlen adat,
- CO2 esetén népességadattal egy főre jutó mutatót is számol.
A memóriabeli store TTL-alapú. Ha a beállított időn túl nincs használat, a store ürül, majd újratöltődik. Induláskor egy háttérszál előmelegíti a gyakori adatokat (warm_cache_all()).
Manuális frissítés:
POST /admin/refresh
Ez újratölti a külső CSV-ket és felülírja a helyi cache fájlokat.
Az API réteg a service/api_service.py fájlban építi fel a JSON válaszokat.
Főbb végpontok:
GET /api/metaGET /api/overviewGET /api/metric/yearGET /api/metric/entityGET /api/mapGET /api/temperature/warmestGET /api/temperature/forecastGET /api/co2/overviewPOST /admin/refresh
- validálja a metrikát,
- ellenőrzi, hogy az adott év elérhető-e,
- fallback évet választ, ha kell,
- kiszámolja a világértéket és az összehasonlítási deltát,
- felépíti a kontinenslistákat és rangsorokat,
- térképhez ISO3 országkódos listát ad vissza,
- CO2 esetén per capita mutatót ad hozzá,
- csapadéknál havi bontást becsül, ha csak éves adat áll rendelkezésre.
A csapadékforrás nem minden esetben tartalmaz teljes havi bontást. Ilyenkor a rendszer:
- megkeresi az éves csapadékértéket,
- kontinensenként előre definiált havi arányprofilt használ,
- ebből 12 havi becsült értéket képez,
- és a válaszban jelzi, hogy ez becsült adat (
estimated_monthly: true).
Antarktiszra külön fallback éves érték is szerepel.
Az előrejelzés nem sima lineáris trendvonal. A service/forecast_service.py egy egyszerűsített, fizikailag motivált modellt használ.
- betölti a globális éves hőmérséklet idősorát,
- betölti a globális CO2 kibocsátási idősorát,
- bázisidőszakot képez,
- ebből hőmérsékleti anomáliát számol.
Elsődleges bázisidőszak:
1850-1900
Fallback bázis:
1951-1980
Ehhez egy korrekciós offset is tartozik, hogy a preindusztriális referencia közelíthető legyen.
A modell a kibocsátási adatokból becsült koncentrációs idősorokat állít elő:
- CO2 ppm
- CH4 ppb
- N2O ppb
Ez nem közvetlen méréssor, hanem egyszerűsített becslés a történeti kibocsátásokból.
A modell számol:
- CO2 forcinggal logaritmikus képlettel
- CH4 és N2O forcinggal négyzetgyök-alapú közelítéssel
- aeroszol proxyval
A CO2 forcing képlete:
dF = 5.35 * ln(C / C0)
A hőmérsékletet egy kétkomponensű energiamérleg-modell szimulálja:
- felszíni réteg
- mélyóceáni réteg
Ez azért fontos, mert az óceán hőtehetetlensége késlelteti a rendszer reakcióját.
A modell több paraméterkombinációt próbál ki rácskereséssel:
- ECS
- hőcsere paraméter
- felszíni hőkapacitás
- aeroszol skálák
- ENSO amplitúdó
A cél, hogy a modell jól kövesse a múltbeli anomáliasort. A score alapja:
- train RMSE
- TCR tartománybüntetés
Kalibrációs szakasz:
1950-2000
Backtest:
2001-től a jelenig
Három forgatókönyv készül:
- alacsony kibocsátás
- közepes kibocsátás
- magas kibocsátás
Mindegyikhez Monte Carlo mintavételezés fut, amely:
- kis mértékben szórja a modellparamétereket,
- módosítja a jövőbeli gázkoncentrációkat,
- aeroszol bizonytalanságot is beépít.
Az eredmény nem egyetlen szám, hanem sávos előrejelzés:
- medián érték
- alsó tartomány
- felső tartomány
A frontend ezekből rajzolja meg a 2030-as és 2050-es várható pályákat.
- globális éves átlag
- összehasonlított évek közötti delta
- éves hőingás:
max(havi átlag) - min(havi átlag) - legmelegebb / leghűvösebb kontinens
- legmelegebb globális év
- CO2 per capita
- országos térképi értéktartományok
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
python app.pyAlapértelmezett cím:
http://127.0.0.1:5000
A projekt több beállítást environment változókból olvas:
DATA_DIRTEMPERATURE_CHARTPRECIPITATION_CHARTCO2_CHARTPOPULATION_CHARTDEFAULT_COMPARE_YEARCACHE_TTL_SECONDSMAX_YEAR
- A projekt alapvetően OWID adatokra épül.
- Egyes csapadék havi bontások becsültek, nem közvetlen megfigyelések.
- Az előrejelzés demonstrációs célú, egyszerűsített klímamodell, nem hivatalos tudományos előrejelző rendszer.
- A térképes nézet külső GeoJSON állománnyal dolgozik.
Ez a projekt egy teljes klíma dashboard:
- backend oldalon adatletöltéssel, cache-sel, aggregációval és előrejelző modellel,
- frontend oldalon interaktív grafikonokkal és térképpel,
- egységes API-val, amelyből minden oldal dolgozik.