Extract time series from Bifrost BSX files as pandas DataFrame.
Compatible with Bifrost v6 "Sindri".
pip install bifrost_bsx_tools
from bifrost_bsx_tools import BsxArchive
bsx = BsxArchive('scenario_a.bsx')
bsx.get_settlement_id()
Output:
'MyFancySettlement'
Optinally, add the keyword argument named_runs_only=True
to get only runs with names.
bsx.get_runs_metadata()
Output:
{
'RUN:10601920-ac83-11ed-b4f1-0bee431b5633': {
'startTime': 5097600,
'timeHorizon': 7948800,
'prefetchStep': 900,
'description': 'run #1', # <- this is the name
'timestamp': 1676391443,
'tags': [],
'scenarioHash': 'e2889fdc93ffba3511598322cc13252f3e768c4826f31c400e739ee62a66475d',
'complete': True,
'persisted': True,
'historic': False
},
...
}
run_id = 'RUN:10601920-ac83-11ed-b4f1-0bee431b5633'
bsx.get_dynamics_metadata(run_id)
Output:
[
{
'id': 'SUN-ALTITUDE:0f2bf2d1-ac6b-11ed-9a57-2d85e0d4252e',
'cardinality': 1,
'type': 'number'
},
...
]
Checks if a file with the name SUN-ALTITUDE_0f2bf2d1-ac6b-11ed-9a57-2d85e0d4252e.csv
exists in the run folder. Bifrost sometimes does not create a file for every dynamic when it has not been stored in the InfluxDB.
dynamic_id = 'SUN-ALTITUDE:0f2bf2d1-ac6b-11ed-9a57-2d85e0d4252e'
bsx.dynamic_timeseries_exists(run_id, dynamic_id)
Output:
True
Returns a pandas DataFrame with the time series for the dynamic.
bsx.get_dynamic_timeseries(run_id, dynamic_id)
Output:
Time | Timestep | 0 |
---|---|---|
1970-03-01 00:00:00 | 5097600 | 138 |
1970-03-01 00:15:00 | 5098500 | 137 |
1970-03-01 00:30:00 | 5099400 | 135 |
1970-03-01 00:45:00 | 5100300 | 134 |
1970-03-01 01:00:00 | 5101200 | 132 |
... | ... | ... |
1970-05-31 23:00:00 | 13042800 | 109 |
1970-05-31 23:15:00 | 13043700 | 109 |
1970-05-31 23:30:00 | 13044600 | 109 |
1970-05-31 23:45:00 | 13045500 | 108 |
1970-06-01 00:00:00 | 13046400 | 108 |