How to list existing time series data¶
Suppose that you have added multiple time series arrays to your components using differing names and attributes. How can you see what is present?
This example uses a test module in the infrasys
repository.
The call to system.add_time_series
returns a key. You can store those keys yourself or look them
up later with system.list_time_series_keys
. Here’s how to do it.
from datetime import datetime, timedelta
import numpy as np
from infrasys import SingleTimeSeries
from tests.models.simple_system import SimpleSystem, SimpleGenerator, SimpleBus
system = SimpleSystem()
bus = SimpleBus(name="test-bus", voltage=1.1)
gen = SimpleGenerator(name="gen", active_power=1.0, rating=1.0, bus=bus, available=True)
system.add_components(bus, gen)
length = 10
initial_time = datetime(year=2020, month=1, day=1)
timestamps = [initial_time + timedelta(hours=i) for i in range(length)]
variable_name = "active_power"
ts1 = SingleTimeSeries.from_time_array(np.random.rand(length), variable_name, timestamps)
ts2 = SingleTimeSeries.from_time_array(np.random.rand(length), variable_name, timestamps)
key1 = system.add_time_series(ts1, gen, scenario="low")
key2 = system.add_time_series(ts2, gen, scenario="high")
# Use the keys directly.
ts1_b = system.get_time_series_by_key(gen, key1)
ts2_b = system.get_time_series_by_key(gen, key2)
# Identify the keys later.
for key in system.list_time_series_keys(gen):
print(f"{gen.label}: {key}")
SimpleGenerator.gen: variable_name='active_power' initial_time=datetime.datetime(2020, 1, 1, 0, 0) resolution=datetime.timedelta(seconds=3600) time_series_type=<class 'infrasys.time_series_models.SingleTimeSeries'> user_attributes={'scenario': 'high'} length=10
SimpleGenerator.gen: variable_name='active_power' initial_time=datetime.datetime(2020, 1, 1, 0, 0) resolution=datetime.timedelta(seconds=3600) time_series_type=<class 'infrasys.time_series_models.SingleTimeSeries'> user_attributes={'scenario': 'low'} length=10
You can also retrieve time series by specifying the parameters as shown here:
system.time_series.get(gen, variable_name="active_power", scenario="high")
SingleTimeSeries(variable_name='active_power', normalization=None, data=array([0.29276233, 0.97400382, 0.76499075, 0.95080431, 0.61749027,
0.73899945, 0.57877704, 0.3411286 , 0.80701393, 0.53051773]), resolution=datetime.timedelta(seconds=3600), initial_time=datetime.datetime(2020, 1, 1, 0, 0), length=10)