Learning objectives
- Explain what a reducer does and when to use one.
- Calculate zonal statistics with
reduceRegion()andreduceRegions(). - Create temporal composites using collection reducers.
- Combine multiple reducers for efficient multi-statistic outputs.
Why it matters
Reducers are how you turn millions of pixels into actionable numbers: average temperature over a city, total burned area in a national park, or mean NDVI for each county. Every real-world analysis project depends on mastering reducers.
What Is a Reducer?
A reducer is an Earth Engine object that represents a way of aggregating data. It takes multiple values and produces a summary statistic.
Common reducers include:
ee.Reducer.mean()- Average valueee.Reducer.median()- Middle valueee.Reducer.max()/ee.Reducer.min()- Extreme valuesee.Reducer.sum()- Totalee.Reducer.count()- Number of valuesee.Reducer.stdDev()- Standard deviation
Spatial Reductions: reduceRegion()
Calculate statistics for pixels within a geometry:
// Calculate mean NDVI within a region
var stats = ndviImage.reduceRegion({
reducer: ee.Reducer.mean(),
geometry: roi,
scale: 30, // Always specify scale!
maxPixels: 1e9
});
print('Mean NDVI:', stats.get('NDVI'));
The output is a dictionary with one value per band:
// For multi-band images
{
"B1": 0.234,
"B2": 0.187,
"NDVI": 0.456
}
Multiple Features: reduceRegions()
Calculate statistics for many features at once:
// Calculate stats for each county
var countiesWithNDVI = ndviImage.reduceRegions({
collection: counties,
reducer: ee.Reducer.mean(),
scale: 30
});
// Each feature now has an 'NDVI' property
print(countiesWithNDVI.first());
Temporal Reductions: ImageCollection
Reduce a stack of images over time to create a composite:
// Get a year of Landsat images
var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.filterDate('2023-01-01', '2023-12-31')
.filterBounds(roi);
// Create a median composite
var medianComposite = collection.median();
// Or use reduce() for more control
var meanComposite = collection.reduce(ee.Reducer.mean());
collection.median() is a shortcut for
collection.reduce(ee.Reducer.median()), but the shortcut preserves band names.
Combining Reducers
Get multiple statistics at once:
// Calculate mean, min, max, and standard deviation
var combinedReducer = ee.Reducer.mean()
.combine(ee.Reducer.min(), null, true)
.combine(ee.Reducer.max(), null, true)
.combine(ee.Reducer.stdDev(), null, true);
var stats = ndviImage.reduceRegion({
reducer: combinedReducer,
geometry: roi,
scale: 30
});
print('Statistics:', stats);
Weighted Reducers
Account for pixel fractions at region edges:
var stats = image.reduceRegion({
reducer: ee.Reducer.mean(),
geometry: roi,
scale: 30,
crs: 'EPSG:4326',
crsTransform: null,
bestEffort: false,
maxPixels: 1e9,
tileScale: 1
// Fractional pixels at edges are automatically weighted
});
Common Reducer Patterns
| Goal | Reducer |
|---|---|
| Cloud-free composite | ee.Reducer.median() |
| Maximum greenness | .qualityMosaic('NDVI') |
| Zonal statistics | reduceRegion() or
reduceRegions()
|
| Count valid pixels | ee.Reducer.count() |
| Histogram | ee.Reducer.histogram() |
This module builds on
- Image Collections - filtering and selecting imagery
- Functions - mapping operations over collections
Next steps
- Temporal Compositing - create clean composites
- Exporting Data - save your aggregated results
- Batch Exports - export for multiple regions
- Cloud Masking - clean data before reducing
Key Takeaways
- Reducers aggregate many values into summary statistics
reduceRegion()for spatial stats,.reduce()for temporal- Always specify
scaleinreduceRegion() - Combine reducers to get multiple statistics efficiently