Historical Data

This section covers access to historical weather data (hindcasts) for comprehensive backtesting and model evaluation.

File Access

Jua hindcasts are available as xarray-compatible Zarr files through our data.jua.ai platform.

To gain access to the file server, you may use the same API key details used for the API. This consists of both an ID and a secret. The file server makes use of HTTP Basic authentication, where the username is your API key ID, and the password is the secret.

Please see our Getting Started guide for help on configuring an API key.

Jua has different hindcast variants, each with its own region and forecast horizon. Please get in touch if we are missing the data you need.

Hindcast Coverage

By default, most of our models provide 2 years of hindcast data. Custom time periods are available upon request. Please contact us for more information on extended historical data access.

Available Hindcast Products

  • EPT-1.5 Hindcasts - Our primary hindcast product with European and North American coverage

    • Also includes EPT-1.5 Early hindcasts for Europe (2024)

  • EPT-2 Hindcasts - Our latest global hindcast product

    • Global coverage with higher resolution

    • Includes standard and Early variants

  • AIFS Hindcasts - ECMWF AIFS hindcasts

    • Global coverage at 0.25° resolution

    • 6-hourly forecasts up to 20 days

  • Historical ECMWF IFS - Historical ECMWF IFS forecast data

    • Available upon request

    • Contact our support team for access details

  • Microsoft Aurora - Microsoft Aurora hindcast dataset

    • Available upon request

    • Contact our support team for access details

Reading Hindcast Data

You can read and visualize our hindcast data with Python and xarray. See our examples below.

Examples

Basic Data Access

import xarray as xr
from aiohttp import BasicAuth
import os
import matplotlib.pyplot as plt

# Authentication
API_KEY_ID = os.environ["JUA_API_KEY_ID"]
API_SECRET = os.environ["JUA_API_SECRET"]
AUTH = BasicAuth(login=API_KEY_ID, password=API_SECRET)

# Open the dataset
ds = xr.open_dataset(
    "https://data.jua.ai/hindcasts/ept-2/v2/global/2023-01-01-to-2024-12-28.zarr",
    engine="zarr",
    decode_timedelta=False,
    consolidated=False,
    storage_options={"auth": AUTH},
)

print(ds)

Visualization Example

import xarray as xr
from aiohttp import BasicAuth
import os
import matplotlib.pyplot as plt

# Authentication
API_KEY_ID = os.environ["JUA_API_KEY_ID"]
API_SECRET = os.environ["JUA_API_SECRET"]
AUTH = BasicAuth(login=API_KEY_ID, password=API_SECRET)

# Open the dataset
ds = xr.open_dataset(
    "https://data.jua.ai/hindcasts/ept-2/v2/global/2023-01-01-to-2024-12-28.zarr",
    engine="zarr",
    decode_timedelta=False,
    consolidated=False,
    storage_options={"auth": AUTH},
)

# Select a specific latitude, longitude, and time
latitude = 50.0  # Example: 50°N
longitude = 10.0  # Example: 10°E
time = "2023-06-01T12:00:00"  # Example: Specific time

# Filter the dataset for the specific location and time
ds_filtered = ds.sel(latitude=latitude, longitude=longitude, time=time, method="nearest")

# Get temperature data (convert from Kelvin to Celsius)
temp_data = ds_filtered['air_temperature_at_height_level_2m'] - 273.15

# Extract prediction_timedelta and temperature values
timedeltas = ds_filtered['prediction_timedelta'].values
temperatures = temp_data.values

# Plot the evolution of temperature over prediction_timedelta
plt.figure(figsize=(10, 6))
plt.plot(timedeltas, temperatures, marker='o', label='Temperature (°C)')

# Add labels and title
plt.xlabel('Prediction Timedelta (hours)')
plt.ylabel('Temperature (°C)')
plt.title(f'Temperature Evolution at {latitude}°N, {longitude}°E on {time}')
plt.grid()
plt.legend()

# Save and show the plot
plt.tight_layout()
plt.savefig('temperature_evolution.png')
plt.show()

Last updated