IMD β India Meteorological Department¶
India's official source for weather, climate, and rainfall data β going back to 1901 for gridded rainfall.
What IMD Provides¶
| Dataset | Resolution | Period | Format | Access |
|---|---|---|---|---|
| Gridded Daily Rainfall | 0.25Β° | 1901β2023 | NetCDF | π‘ Registration |
| Gridded Monthly Rainfall | 0.25Β° | 1901β2023 | NetCDF | π‘ Registration |
| District Monthly Rainfall | District | 1901β2023 | CSV | π‘ Registration |
| Weather Station Data | Point | 1960βpresent | CSV | π‘ Registration |
| Cyclone Best Track | Point/Line | 1890βpresent | CSV/Shapefile | π’ Free |
| Drought Atlas | District | 1870βpresent | π’ Free | |
| Seasonal Forecasts | State | Seasonal | π’ Free |
How to Access IMD Data¶
Method 1: IMD Open Data Portal π‘¶
- Go to mausam.imd.gov.in
- Navigate to "Climate Data" β "Data Online"
- Register with your name, institution, and purpose
- After login: search for your dataset β Add to cart β Download
Available at mausam.imd.gov.in: - Daily/monthly gridded rainfall (NetCDF) - Station-level observational data (CSV) - Extreme events database
Method 2: CHIRPS Rainfall (No Login β Alternative) π’¶
If IMD registration is slow, CHIRPS (Climate Hazards Group InfraRed Precipitation with Station data) provides high-quality alternative rainfall data for India:
- Resolution: 0.05Β° (~5.5 km) β much finer than IMD gridded
- Period: 1981βpresent
- Access: Free, no login
- Source: chc.ucsb.edu/data/chirps
Or access via Google Earth Engine (free):
// GEE JavaScript β CHIRPS Monthly Rainfall for India
var chirps = ee.ImageCollection("UCSB-CHG/CHIRPS/PENTAD")
.filterDate('2023-06-01', '2023-09-30') // Monsoon 2023
.filterBounds(ee.Geometry.Rectangle([68, 8, 97, 37])); // India bbox
var totalRain = chirps.sum(); // Total Jun-Sep rainfall
Map.centerObject(ee.Geometry.Point([78, 22]), 5);
Map.addLayer(totalRain, {min: 0, max: 2000, palette: ['white','blue','darkblue']},
'Monsoon Rainfall 2023 (mm)');
Method 3: District Monthly Rainfall CSV π‘¶
For district-level analysis without handling NetCDF:
- Register at mausam.imd.gov.in
- Download "District-wise Monthly Rainfall" CSV
- Each row: State, District, Year, Month, Rainfall (mm)
Python: Analyse Monsoon Rainfall from NetCDF¶
import xarray as xr
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
# Load IMD gridded rainfall NetCDF (annual files)
# Download from mausam.imd.gov.in after registration
ds = xr.open_dataset("RF25_IND_1901_2023.nc")
# Variable name is typically 'RAINFALL' or 'rf'
print(ds) # Check variable names
# Select June-September (monsoon season) for 2023
rain_2023 = ds.sel(TIME=slice('2023-06-01', '2023-09-30'))
monsoon_2023 = rain_2023['RAINFALL'].sum(dim='TIME') # Total monsoon rainfall
# Seasonal anomaly: compare to 1981-2010 baseline
baseline = ds.sel(TIME=slice('1981-01-01', '2010-12-31'))
baseline_jjas = baseline['RAINFALL'].where(
baseline['TIME.month'].isin([6,7,8,9])
).groupby('TIME.year').sum('TIME').mean('year')
anomaly_2023 = monsoon_2023 - baseline_jjas
# Plot anomaly map
fig, ax = plt.subplots(1, 1, figsize=(10, 8),
subplot_kw={'projection': ccrs.PlateCarree()})
anomaly_2023.plot(ax=ax, transform=ccrs.PlateCarree(),
cmap='RdBu', center=0,
cbar_kwargs={'label': 'Rainfall Anomaly (mm)'})
ax.coastlines()
ax.set_title('Monsoon 2023 Rainfall Anomaly vs 1981-2010 Baseline')
plt.savefig('monsoon_anomaly_2023.png', dpi=150, bbox_inches='tight')
plt.show()
βοΈ Practice Exercise¶
Exercise 3.1 β Monsoon Trend in Your State
Goal: Find average monsoon rainfall for your state and see if it has changed.
Using IMD district data (CSV):
- Download District Monthly Rainfall CSV from mausam.imd.gov.in
- Open in Python or Excel
- Filter for your state β Sum June to September for each year
- Plot a line chart: Year (x-axis) vs Total Monsoon Rainfall (y-axis)
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("district_monthly_rainfall.csv")
# Filter your state
state_df = df[df['STATE'] == 'MAHARASHTRA']
# Monsoon months: June=6, July=7, August=8, September=9
monsoon = state_df[state_df['MONTH'].isin([6, 7, 8, 9])]
# Annual monsoon total (average across all districts)
annual = monsoon.groupby('YEAR')['RAINFALL'].mean()
annual.plot(figsize=(12,5), title="Average Monsoon Rainfall β Maharashtra")
plt.ylabel('Rainfall (mm)')
plt.grid(True, alpha=0.3)
plt.savefig('maharashtra_monsoon_trend.png')
Questions: - [ ] Has average monsoon rainfall increased or decreased over 50 years? - [ ] Were there any notable drought years? (significantly below average) - [ ] Which decade had the most reliable monsoon (least variation)?
Next Dataset: Land Use Land Cover β