An ML system for identifying atmospheric teleconnection patterns and extreme weather precursors from reanalysis data.
This project applies machine learning techniques to recognize and classify large-scale atmospheric patterns from ERA5 and NCEP/NCAR reanalysis datasets. The system identifies teleconnections (El Nino-Southern Oscillation, North Atlantic Oscillation, Arctic Oscillation, Pacific Decadal Oscillation) and their relationships to extreme weather events.
- Automated download and preprocessing of ERA5 reanalysis data via CDS API
- Sea level pressure and geopotential height pattern extraction
- Unsupervised pattern discovery using clustering algorithms
- Supervised classification of known teleconnection phases
- Extreme event correlation analysis using EM-DAT disaster records
- Interactive visualization of atmospheric patterns
climate-pattern-recognition/
├── src/
│ ├── data/ # Data download and preprocessing
│ ├── features/ # Feature extraction and engineering
│ ├── models/ # ML model implementations
│ └── visualization/ # Plotting and interactive displays
├── tests/ # Unit and integration tests
├── notebooks/ # Exploratory analysis notebooks
├── docs/ # Documentation and implementation plans
└── data/
├── raw/ # Original downloaded data
├── processed/ # Cleaned and transformed data
└── external/ # Climate indices and validation data
| Dataset | Description | Access |
|---|---|---|
| ERA5 | Gridded atmospheric variables (0.25 deg, 1950-present) | Copernicus CDS |
| NCEP/NCAR | Coarser reanalysis (1948-present) | NOAA PSL |
| NOAA Climate Indices | Pre-computed ONI, NAO, AO, PDO | NOAA PSL |
| EM-DAT | International disaster database | EM-DAT |
- Python 3.9+
- xarray, dask (NetCDF handling)
- cdsapi (ERA5 access)
- scikit-learn (ML algorithms)
- matplotlib, cartopy (visualization)
git clone https://github.com/Sakeeb91/climate-pattern-recognition.git
cd climate-pattern-recognition
pip install -r requirements.txtfrom src.data.download import ERA5Downloader
from src.features.patterns import PatternExtractor
# Download monthly mean sea level pressure
downloader = ERA5Downloader()
data = downloader.get_monthly_slp(years=[2020, 2021, 2022])
# Extract dominant patterns
extractor = PatternExtractor(n_components=10)
patterns = extractor.fit_transform(data)MIT License
Contributions welcome. Please read the implementation plan in docs/IMPLEMENTATION_PLAN.md before starting.