Reducers and Aggregations

Learning objectives

  • Explain what a reducer does and when to use one.
  • Calculate zonal statistics with reduceRegion() and reduceRegions().
  • 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 value
  • ee.Reducer.median() - Middle value
  • ee.Reducer.max() / ee.Reducer.min() - Extreme values
  • ee.Reducer.sum() - Total
  • ee.Reducer.count() - Number of values
  • ee.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());
💡 Tip: 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

Next steps

Key Takeaways

  • Reducers aggregate many values into summary statistics
  • reduceRegion() for spatial stats, .reduce() for temporal
  • Always specify scale in reduceRegion()
  • Combine reducers to get multiple statistics efficiently