Climate Model vs. Observation Comparison Tool
Project description
🌍 ClimEval: Climate Model vs. Observation Verification Tool
📌 OVERVIEW
ClimEval is a Python package designed for climate model comparisons against observation datasets. It enables researchers and analysts to:
- Efficiently compare climate model output vs. observational data.
- Compute a range of evaluation metrics (continuous, event-based, probabilistic, and distribution-based).
- Perform gridwise per-pixel analysis to assess spatial biases and detection capabilities.
- Use Dask for parallel computing and GPU acceleration (optional).
- Generate cartopy-based visualizations of climate fields and statistical maps
🔧 Installation
🛠 Install via PyPI:
pip install climeval
🐍 Install from Source (Development Version):
git clone https://github.com/shiv3679/ClimEval.git
cd ClimEval
pip install .
🖥 Dependencies:
ClimEval requires Python 3.7+ and the following dependencies:
numpy,xarray,dask,scipymatplotlib,cartopy,pytest- Optional for GPU:
cupy(requires CUDA)
To install dependencies separately:
pip install numpy xarray dask scipy matplotlib cartopy pytest
For GPU acceleration (optional, requires CUDA):
pip install cupy
Usage Guide
ClimEval can be used via CLI (Command-Line Interface) or Python API.
CLI Usage
climeval --help
Example Command:
climeval india_model_output_005deg_irregular_storm.nc india_obs_output_005deg_irregular_storm.nc --variable lightning_density --threshold 1.0 --visualize
CLI Options:
Usage: climeval [OPTIONS] MODEL_PATH OBS_PATH
Options:
--variable TEXT Variable to evaluate (e.g., 'temperature')
--chunks TEXT Dask chunking format (default: {'time': 10, 'lat': 200, 'lon': 200})
--threshold FLOAT Threshold for event-based metrics (default: 1.0)
--visualize Generate visualizations
-h, --help Show this message and exit.
Python API Usage
You can use ClimEval directly in Python scripts:
Example Usage
import xarray as xr
from climeval.core import compute_continuous_metrics, compute_event_metrics
from climeval.visualization import visualize_map, visualize_metric_map
# Load Datasets
model_ds = xr.open_dataset("model.nc")
obs_ds = xr.open_dataset("obs.nc")
# Select Variable
variable = "lightning_density"
model_da = model_ds[variable]
obs_da = obs_ds[variable]
# Compute Metrics
cont_metrics = compute_continuous_metrics(model_da, obs_da)
event_metrics = compute_event_metrics(model_da, obs_da, threshold=1.0)
print("Continuous Metrics:", cont_metrics)
print("Event-Based Metrics:", event_metrics)
# Visualization
visualize_map(model_da, obs_da, time_index=0)
📊 Metrics Computed
ClimEval calculates multiple climate verification metrics, categorized as:
-
Continuous Metrics (Domain-wide)
- MSE (Mean Squared Error)
- MAE (Mean Absolute Error)
- Bias (Mean Difference)
- Correlation Coefficient (Corr)
-
Event-Based Metrics
- POD (Probability of Detection)
- FAR (False Alarm Ratio)
- CSI (Critical Success Index)
- ETS (Equitable Threat Score)
- FSS (Fractions Skill Score)
-
Probabilistic Metrics
- Brier Score (BS)
- Brier Skill Score (BSS)
- Ranked Probability Skill Score (RPSS)
-
Distribution-Based Metrics
- Wasserstein Distance
- Jensen-Shannon Divergence
-
Per-Pixel (Gridwise) Metrics
- Bias Map
- MAE Map
- MSE Map
- Correlation Map
- POD, FAR, CSI, and ETS maps
🗺 Visualizations
ClimEval provides cartopy-based visualizations for model-observation comparison.
Example side-by-side model vs. observation plot:
from climeval.visualization import visualize_map
visualize_map(model_da, obs_da, time_index=0)
Example BIAS Map Visualization
from climeval.visualization import visualize_metric_map
bias_map = model_da.mean(dim="time") - obs_da.mean(dim="time")
visualize_metric_map(bias_map, title_str="Bias Map", cmap="RdBu", center=0)
⚠️ Common Issues & Fixes
NaN in Event-Based Metrics?
- Try reducing
--threshold(e.g.,--threshold 0.5). - Ensure the dataset contains meaningful events above the threshold.
Wayland Warning on GNOME?
- Fix by running:
export QT_QPA_PLATFORM=wayland
- Alternative:
export QT_QPA_PLATFORM=xcb
Dask Errors?
- Ensure no other Dask clusters are running (port 8787 conflicts).
- Run:
pkill -f dask
to close any existing Dask processes.
GPU Not Recognized?
- Ensure cupy is installed and CUDA drivers are configured.
- Run:
import cupy as cp
print(cp.cuda.Device(0))
to check GPU availability.
🏗 Future Enhancements
- ✔️ Better GPU Integration with optimized Dask-CuPy workflows.
- ✔️ Integration with AI-Based Climate Predictions.
- ✔️ More Advanced Regridding Methods (xesmf support).
- ✔️ Interactive Web Interface for Metrics Visualization.
📜 License
ClimEval is open-source under the MIT License.
Feel free to contribute, improve, or modify it.
Contributions are welcome!
👨💻 Author
- 📌 Developed by Shiv Shankar Singh
- 🌐 GitHub: shiv3679
- 📧 Email: shivshankarsingh.py@gmail.com
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file climeval-0.1.1.tar.gz.
File metadata
- Download URL: climeval-0.1.1.tar.gz
- Upload date:
- Size: 19.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.21
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
115d93d786c111af10727b2bcd40674ae7a880937defa223d67e6e259a5fe516
|
|
| MD5 |
806c46f251074f12e4f7d3628cd6433a
|
|
| BLAKE2b-256 |
0ac02f8c1361d766e827d5e2159fae84bdc6b38229249f5d3e8484e77eb69175
|
File details
Details for the file climeval-0.1.1-py3-none-any.whl.
File metadata
- Download URL: climeval-0.1.1-py3-none-any.whl
- Upload date:
- Size: 25.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.21
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c1feeea2d2365020836ca9b36df066d658fee6abcfc49dcb7db9a795c4ef6cb
|
|
| MD5 |
4f41546d3a924837745b06a452e4d85e
|
|
| BLAKE2b-256 |
616789410255ee6720314d57a19fce70821893defb09e40c28b3d4ce8159f8ea
|