How unusual was this month, for this place?
Climate Anomaly compares every month in your climate record with the normal for that same calendar month at that same place. It reports the departure as RAI, MRAI, SRAI, SSPI and SPI for rainfall, and as z-scores, deviations and percentage departures for rainfall and temperature. You choose the baseline period.
Kerala monsoon rainfall, 1976–2025
% departure from meanFive rainfall indices, three anomaly forms, and the climatology behind them
Standardised dry–wet scales
For rainfall, Tmax, Tmin and Tavg
The normal you compare against
From a spreadsheet to a table of indices in four steps
Upload Data
A CSV or Excel file with monthly (or daily, or annual) rainfall and/or temperature for one or many locations.
Match Columns
Tell the model which column is the location, the year, the month and each variable. Common names are detected for you.
Baseline Period
Use the full record, or a fixed window such as the last 30 years, separately for rainfall and temperature.
Indices & results
Pick the indices and compute. Results open on their own page, ready to download as CSV or print.
Your data stays with you
The file is read and processed inside your browser. Nothing is uploaded to a server.
Any file layout
No fixed column names. Year and month columns or a single date column; daily rows are rolled up to months.
Checked against reference code
The formulas reproduce the companion R package and Python script to four decimal places on 21,924 state-months.
Try it on the bundled sample first
Six Indian states, 1976–2026, already loaded in the model.
Compute anomaly indices
Upload data
CSV, TSV, TXT, XLSX or XLS. One row per location and time step; see Instructions for the layout.
Match the columns
Pick which column holds each item. Likely matches are pre-selected; anything not in your file can stay as "Not in file".
Choose the baseline period
The years used to compute each place-and-month's normal (mean, SD, extremes, Gamma fit). Indices are then calculated for every year against that normal.
Select indices
Untick anything you don't need. Temperature items are computed for each temperature column you matched.
Advanced settings
No results yet
Upload your data in the model, work through the four tabs, then press Compute indices.
Open the modelResults
Time series
Class frequency
Baseline climatology
Results table
Preparing data, choosing a baseline, and reading the results
Data format
Use one row per location and time step, with each variable in its own column. Column names can be anything; you match them in step 2. Extra columns are ignored.
| Item | Needed? | Accepted values |
|---|---|---|
| Location | Optional | Any text or code (state, district, station, grid ID). Omit for a single site. |
| Year or date | Yes | A four-digit year, e.g. 1998, or a full date: 1998-06-15, 15-06-1998 or 15/06/1998 (day first), Jun 1998, Excel dates. A date column also gives the month. |
| Month | Only with a year column | 1–12, Jan, January. Omit for annual data. |
| Rainfall | At least one variable | Numeric total for the time step (mm or any unit) |
| Tmax, Tmin, Tavg | At least one variable | Numeric, °C. Each temperature is used only if your file has that column. |
Example of a monthly file:
| state | year | month | rainfall_mm | tmax_c | tmin_c |
|---|---|---|---|---|---|
| Kerala | 2018 | 8 | 1092.4 | 27.9 | 22.6 |
| Kerala | 2018 | 9 | 161.0 | 29.8 | 22.9 |
| Rajasthan | 2018 | 8 | 96.3 | 33.6 | 25.4 |
One column per location (a "wide" file, common for gridded and district datasets) also works: a date or year/month column, then one column of values per location. In Match Columns, set Location to Each location is a separate column, say which variable the columns hold, and tick the location columns to include.
Daily data is accepted: when a location has several rows in the same month, rainfall is summed and temperatures are averaged before any index is computed. Check that every month is complete, because a month with missing days will have a lower rainfall total.
Missing values: blank cells and NA are always missing. Add your own codes (for example -999) in step 1.
Using the model
The Model page has four tabs. Work through them in order with the Next button at the bottom of each tab, or click a tab to go back and change something.
- Upload Data. Drop a file on the upload area or choose it. For an Excel workbook with several sheets, pick the sheet. A preview of the first rows appears. The sample dataset is loaded when the page opens, so you can try the model before using your own file.
- Match Columns. Check the location column (or Each location is a separate column), the year or date column, the month column if there is one, and each variable. The summary underneath reports how many location-months were read, how many rows were skipped and whether daily rows were combined.
- Baseline Period. Choose the reference years for rainfall and for temperature (see below).
- Indices. Choose the time scale (each month, or a season total such as Jun–Sep). Tick the indices you need and, if required, open Advanced settings to change the number of RAI extremes, the minimum baseline size or the number of decimals. Press Compute indices.
- Results. The results open on their own page. Use the Location, Month and Index filters to explore the chart, the class frequencies, the baseline climatology and the full table.
- Download or print. Download results gives one CSV row per location-month with every index and class; Climatology gives the baseline mean, SD and number of years for each location-month; Print report prints the selected location (settings, chart, classes, climatology and table) or saves it as PDF. Use Back to the model to change settings and compute again.
Choosing the baseline period
Every index compares a value with the normal for the same place and calendar month. The baseline is the set of years that defines that normal. All parameters (mean, standard deviation, maximum, minimum, extreme-year means, percentiles and the Gamma fit for SPI) are estimated from the baseline years only, and every year in the record is then scored against them. Values outside the baseline can therefore fall beyond the usual range of an index, for example MRAI above +3.
- Full record (default): all years in the file.
- Last N years: the N most recent years, e.g. 20 or 30.
- First N years: the N earliest years.
- Custom range: any start and end year. The WMO recommends 30-year normals and currently uses 1991–2020 as the standard reference period (WMO, 2017).
Rainfall and temperature have separate baselines, so you can, for instance, use the full record for rainfall and 1991–2020 for temperature.
Season totals
Under Time scale in the Indices tab, choose Season total to work with a season instead of single months, as IMD does for the southwest monsoon. Pick a preset (Monsoon Jun–Sep, Pre-monsoon Mar–May, Post-monsoon Oct–Dec, Winter Jan–Feb, Whole year) or any start and end month.
- Rainfall is added up over the months of the season; temperatures are averaged.
- A season is used only when every month in it has a value; incomplete seasons are left blank and reported.
- Every index is then computed on the season totals, against the baseline mean of the same season, which is the Long Period Average (LPA). For IMD's convention, set the baseline to 1971–2020.
- A season that crosses the new year (for example Nov–Mar) is labelled with the year in which it ends.
- Rainfall % of normal (LPA) gives actual ÷ LPA × 100, with IMD's seasonal categories: Deficient, Below Normal, Normal, Above Normal and Excess. Rainfall % departure gives the same comparison as a departure (for example −12.6%), with IMD's district categories.
IMD's all-India figures are area-weighted averages over the whole country, computed from its own gridded rain-gauge data. The model reproduces the method for each location in your file; the numbers match IMD's only when the same data and area weighting are used.
Formulas
Notation: P is the rainfall of one place in one calendar month of one year; X is any variable. Bars and s denote the baseline mean and sample standard deviation of the same place and calendar month.
RAI · Rainfall Anomaly Index
van Rooy (1965)MRAI · Modified Rainfall Anomaly Index
Ekpetere (2025)SRAI · Standardized Rainfall Anomaly Index
Ekpetere (2025)SSPI · Simplified Standardized Precipitation Index
Raziei (2021)SPI · Standardized Precipitation Index
McKee et al. (1993); Thom (1958)Rainfall % of normal (LPA)
India Meteorological DepartmentAnomalies for rainfall and temperature
Standard definitionsClasses
Class boundaries include the upper limit, so a value of exactly −1 falls in the class that ends at −1.
| RAI, MRAI, SRAI | Class |
|---|
| SPI, SSPI, rainfall z | Class |
|---|
| Rainfall % departure (IMD) | Class |
|---|
| Temperature z | Class |
|---|
| Season rainfall, % of LPA (IMD) | Class |
|---|
Deviation classes (rainfall in data units, temperature in °C) and temperature percentage classes use fixed thresholds, symmetric about zero: rainfall deviation ±20, ±50, ±100; temperature deviation ±0.5, ±1.5, ±3 °C; temperature departure ±0.5, ±2, ±5 %.
Output columns
| Column | Meaning |
|---|---|
location, year, month | Identifiers (named after your own columns) |
RAI … SPI | Rainfall indices, each with a _class column |
rainfall_anomaly | Rainfall z-score |
rain_deviation | Rainfall minus baseline mean |
rain_pct_anomaly | Rainfall percentage departure, with IMD district class |
rain_pct_of_lpa, rain_lpa_class | Rainfall as % of normal (LPA); IMD seasonal class (season totals only) |
season | Season label, e.g. Jun–Sep (season totals only) |
tmax_anomaly, tmin_anomaly, tavg_anomaly | Temperature z-scores |
tmax_deviation … | Temperature minus baseline mean (°C) |
tmax_pct_anomaly … | Temperature percentage departure |
*_clim_mean, *_clim_sd | Baseline mean and SD for that location and month |
The climatology CSV has one row per location and month with the baseline years, mean, SD and number of baseline values for each variable.
Notes and limits
- Groups with fewer baseline values than the minimum (default 4) are left blank. Thirty years is the usual recommendation for a stable normal.
- SPI uses the exact maximum-likelihood Gamma fit (starting from Thom's approximation), and results agree with
scipy.stats.gamma.fit. - Skewness for SSPI is the moment estimator without small-sample correction, as in
scipy.stats.skew. - Percentage departure is left blank when the baseline mean is zero, for example in a month that never rains.
- Indices here are computed at the one-month time scale (or annual, for annual data). For 3-, 6- or 12-month SPI, aggregate your rainfall to rolling totals first and upload those.
- Your file never leaves your computer. Very large files (several hundred thousand rows) may take a few seconds.
How to cite
If you use Climate Anomaly in a publication, please cite the tool and the original papers for the indices you report.
Paul, R. K., Yeasin, M., & Bora, P. (2026). Climate Anomaly: A web tool for rainfall and temperature anomaly indices [Web application]. ICAR-Indian Agricultural Statistics Research Institute, New Delhi.
References
- Ekpetere, K. O. (2025). Development and evaluation of the modified and standardized rainfall anomaly indices for extreme variability analysis. Journal of Environmental Management, 375, 124160. https://doi.org/10.1016/j.jenvman.2025.124160
- India Meteorological Department. Rainfall departure categories used in IMD rainfall statistics: for districts and subdivisions, Large Excess (≥ +60%), Excess (+20 to +59%), Normal (−19 to +19%), Deficient (−20 to −59%), Large Deficient (−60 to −99%), No Rain (−100%); for all-India seasonal rainfall as % of the Long Period Average (1971–2020), Deficient (< 90%), Below Normal (90–95%), Normal (96–104%), Above Normal (105–110%), Excess (> 110%). https://mausam.imd.gov.in/
- McKee, T. B., Doesken, N. J., & Kleist, J. (1993). The relationship of drought frequency and duration to time scales. In Proceedings of the 8th Conference on Applied Climatology (pp. 179–184). American Meteorological Society.
- Raziei, T. (2021). Revisiting the Rainfall Anomaly Index to serve as a Simplified Standardized Precipitation Index. Journal of Hydrology, 602, 126761. https://doi.org/10.1016/j.jhydrol.2021.126761
- Raziei, T. (2023). Improving the normalization procedure of the simplified standardized precipitation index (SSPI) using Box–Cox transformation. Stochastic Environmental Research and Risk Assessment, 37, 925–951. https://doi.org/10.1007/s00477-022-02317-9
- Thom, H. C. S. (1958). A note on the gamma distribution. Monthly Weather Review, 86(4), 117–122.
- van Rooy, M. P. (1965). A rainfall anomaly index independent of time and space. Notos, 14, 43–48.
- World Meteorological Organization. (2017). WMO guidelines on the calculation of climate normals (WMO-No. 1203). WMO.
The team behind Climate Anomaly
Climate Anomaly was developed at the ICAR-Indian Agricultural Statistics Research Institute, New Delhi, as part of work on statistical methods for climate variability and agricultural risk.
ICAR-Indian Agricultural Statistics Research Institute
Indian Council of Agricultural Research, New Delhi. Questions about the methods or the tool can be sent to any of the developers above.