Skip to content

Time Series Processing

Time series are the individual data arrays within signals. Each time series has data, metadata, and processing history.

Working with Time Series

import numpy as np
import pandas as pd
from meteaudata import Signal, DataProvenance
from meteaudata import resample, linear_interpolation, subset, replace_ranges

# Set random seed for reproducible examples
np.random.seed(42)

# Create a standard provenance for examples
provenance = DataProvenance(
    source_repository="Example System",
    project="Documentation Example",
    location="Demo Location",
    equipment="Temperature Sensor v2.1",
    parameter="Temperature",
    purpose="Documentation example",
    metadata_id="doc_example_001"
)

# Create simple time series data
timestamps = pd.date_range('2024-01-01', periods=100, freq='h')
data = pd.Series(np.random.randn(100) * 10 + 20, index=timestamps, name="RAW")

# Create a simple signal
signal = Signal(
    input_data=data,
    name="Temperature",
    provenance=provenance,
    units="°C"
)

ts = signal.time_series["Temperature#1_RAW#1"] # Recover the formatted TimeSeries object

print(f"Time series: {ts.series.name}")
print(f"Data points: {len(ts.series)}")
print(f"Data type: {ts.series.dtype}")
print(f"Date range: {ts.series.index.min()} to {ts.series.index.max()}")
print(f"Processing steps: {len(ts.processing_steps)}") # Has no processing steps yet.
Time series: Temperature#1_RAW#1
Data points: 100
Data type: float64
Date range: 2024-01-01 00:00:00 to 2024-01-05 03:00:00
Processing steps: 0

Accessing Data

# Get the pandas Series
data = ts.series
print(f"First 5 values:\n{data.head()}")
First 5 values:
2024-01-01 00:00:00    24.967142
2024-01-01 01:00:00    18.617357
2024-01-01 02:00:00    26.476885
2024-01-01 03:00:00    35.230299
2024-01-01 04:00:00    17.658466
Freq: h, Name: Temperature#1_RAW#1, dtype: float64
print(f"\nBasic statistics:")
print(f"Mean: {data.mean():.2f}")
print(f"Std: {data.std():.2f}")
print(f"Min: {data.min():.2f}")
print(f"Max: {data.max():.2f}")
Basic statistics:
Mean: 18.96
Std: 9.08
Min: -6.20
Max: 38.52

Processing Time Series

# Apply processing to create new time series
from meteaudata import linear_interpolation
signal.process(["Temperature#1_RAW#1"], linear_interpolation)

# Check the new time series
processed_name = signal.all_time_series[-1]
processed_ts = signal.time_series[processed_name]
print(f"Processed time series name: {processed_name}")
print(f"Original: {len(ts.series)} points")
print(f"Processed: {len(processed_ts.series)} points")
Processed time series name: Temperature#1_LIN-INT#1
Original: 100 points
Processed: 100 points
print(f"Processing steps: {len(processed_ts.processing_steps)}")
print(f"Step type: {processed_ts.processing_steps[0].type}")
Processing steps: 1
Step type: ProcessingType.GAP_FILLING

Time Series Metadata

# Explore processing history
step = processed_ts.processing_steps[0]
print(f"Processing step:")
print(f"  Type: {step.type}")
print(f"  Function: {step.function_info.name}")
print(f"  Applied on: {step.run_datetime}")
print(f"  Parameters: {step.parameters}")
Processing step:
  Type: ProcessingType.GAP_FILLING
  Function: linear interpolation
  Applied on: 2025-12-10 19:11:08.577833
  Parameters: 
# Index information
print(f"\nIndex metadata:")
print(f"  Type: {processed_ts.index_metadata.type}")
print(f"  Frequency: {processed_ts.index_metadata.frequency}")
Index metadata:
  Type: DatetimeIndex
  Frequency: h

See Also