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¶
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}")
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")
print(f"Processing steps: {len(processed_ts.processing_steps)}")
print(f"Step type: {processed_ts.processing_steps[0].type}")
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}")
See Also¶
- Working with Signals - Understanding signal containers
- Processing Steps - Available processing functions
- Visualization - Plotting time series data