Skip to content

CubeDynamics: a composable grammar of operations for spatiotemporal data cubes.

Keep spatial and temporal dimensions together so you can reason about space, time, scale, and events without breaking your workflow apart. Use it to build reproducible pipelines that stream or analyze cubes in memory.

If the interactive view doesn’t load, open it in a new tab.

Jump into the docs

Looking for specific interfaces? Jump to the API Reference or the Contributing / Development guidelines.

If you feel lost, start with the Documentation Overview or pick a path from Reading Paths.

Need dataset attribution? See Dataset citations.

Why CubeDynamics Exists

Most environmental datasets already are data cubes: - climate grids evolving through time - vegetation indices measured repeatedly over landscapes - disturbance footprints (fires, droughts, floods) unfolding in space and time

But most workflows break the cube apart: - spatial analysis happens in GIS - temporal analysis happens in tables - statistics happen elsewhere - visualization happens last

CubeDynamics keeps these dimensions together.

The result is a framework that lets you ask questions like: - How does climate variability change inside vs. outside an event? - Where and when does synchrony emerge across a landscape? - How does variance propagate through space over time?

These are fundamentally spatiotemporal questions—and they require spatiotemporal tools.

What Is a Climate Data Cube?

A climate data cube is a 3-dimensional object:

value(x, y, time)

Instead of treating space and time separately, CubeDynamics treats them as co-equal axes of analysis.

This allows operations like: - computing statistics through time at every pixel - aggregating space through time - extracting volumes rather than slices - defining events as regions in space–time

The cube is not just a storage format. It is the unit of reasoning.

What CubeDynamics Enables

Spatiotemporal Operations

Operations are defined on the cube itself—not on slices or tables derived from it.

Examples: - anomalies - rolling statistics - variance and synchrony - trends and seasonality

Grammar-Based Pipelines

Analyses are expressed as composable pipelines:

from cubedynamics import pipe, verbs as v

result = (
    pipe(cube)
    | v.anomaly()
    | v.variance()
    | v.plot(title="Spatiotemporal Variance")
)

This makes workflows readable, reproducible, inspectable, and easy to extend.

Streaming-First by Design

Large datasets are handled via VirtualCubes that stream data chunk-by-chunk instead of loading everything into memory.

The same code works for: - small local datasets - continental-scale climate archives - cloud-hosted data

Event-Based Analysis

Events like fires, droughts, or phenological windows are treated as volumes in space–time, not just polygons or date ranges. This enables:

  • inside vs. outside comparisons
  • event-aligned climate analysis
  • causal framing of spatiotemporal patterns

Who This Is For

CubeDynamics is designed for:

  • Climate & Earth system scientists
  • Ecologists and macrosystems researchers
  • Environmental data scientists
  • Anyone working with gridded time series data

If your data has space and time, and your questions involve structure, scale, or dynamics, this framework is for you.

A Minimal Example

from cubedynamics import pipe, verbs as v

result = (
    pipe(cube)
    | v.anomaly()
    | v.variance()
    | v.plot(title="Spatiotemporal Variance")
)

Canonical Example

A typical analysis computes climate anomalies within an event footprint and compares them to surrounding conditions while preserving space–time structure. The example below summarizes that workflow.

Fire-related climate cube example

Next Steps