Get CAISO Ancillary Services#
import gridstatus
import pandas as pd
import plotly.express as px
iso = gridstatus.CAISO()
Ancillary Services Prices#
df = iso.get_as_prices(date="Oct 15, 2022")
df
Time | Region | Market | Non-Spinning Reserves | Regulation Down | Regulation Mileage Down | Regulation Mileage Up | Regulation Up | Spinning Reserves | |
---|---|---|---|---|---|---|---|---|---|
0 | 2022-10-15 00:00:00-07:00 | AS_CAISO | DAM | 0.00 | 0.00 | 0.0 | 0.0 | 0.00 | 0.0 |
1 | 2022-10-15 00:00:00-07:00 | AS_CAISO_EXP | DAM | 0.12 | 8.01 | 0.0 | 0.0 | 4.90 | 1.0 |
2 | 2022-10-15 00:00:00-07:00 | AS_NP26 | DAM | 0.00 | 0.00 | 0.0 | 0.0 | 0.00 | 0.0 |
3 | 2022-10-15 00:00:00-07:00 | AS_NP26_EXP | DAM | 0.00 | 0.00 | 0.0 | 0.0 | 0.00 | 0.0 |
4 | 2022-10-15 00:00:00-07:00 | AS_SP26 | DAM | 0.00 | 0.00 | 0.0 | 0.0 | 0.00 | 0.0 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
139 | 2022-10-15 23:00:00-07:00 | AS_CAISO_EXP | DAM | 0.13 | 6.49 | 0.0 | 0.0 | 4.75 | 1.0 |
140 | 2022-10-15 23:00:00-07:00 | AS_NP26 | DAM | 0.00 | 0.00 | 0.0 | 0.0 | 0.00 | 0.0 |
141 | 2022-10-15 23:00:00-07:00 | AS_NP26_EXP | DAM | 0.00 | 2.51 | 0.0 | 0.0 | 0.00 | 0.0 |
142 | 2022-10-15 23:00:00-07:00 | AS_SP26 | DAM | 0.00 | 0.00 | 0.0 | 0.0 | 0.00 | 0.0 |
143 | 2022-10-15 23:00:00-07:00 | AS_SP26_EXP | DAM | 0.00 | 0.00 | 0.0 | 0.0 | 0.00 | 0.0 |
144 rows × 9 columns
df = iso.get_as_prices(start="Jan 1, 2022", end="Feb 1, 2022")
df
100%|██████████| 31/31 [02:47<00:00, 5.41s/it]
Time | Region | Market | Non-Spinning Reserves | Regulation Down | Regulation Mileage Down | Regulation Mileage Up | Regulation Up | Spinning Reserves | |
---|---|---|---|---|---|---|---|---|---|
0 | 2022-01-01 00:00:00-08:00 | AS_CAISO | DAM | 0.00 | 0.00000 | 0.0 | 0.0 | 0.00 | 0.0 |
1 | 2022-01-01 00:00:00-08:00 | AS_CAISO_EXP | DAM | 0.15 | 6.34527 | 0.0 | 0.0 | 1.70 | 1.7 |
2 | 2022-01-01 00:00:00-08:00 | AS_NP26 | DAM | 0.00 | 0.00000 | 0.0 | 0.0 | 0.00 | 0.0 |
3 | 2022-01-01 00:00:00-08:00 | AS_NP26_EXP | DAM | 0.00 | 0.75473 | 0.0 | 0.0 | 3.00 | 0.0 |
4 | 2022-01-01 00:00:00-08:00 | AS_SP26 | DAM | 0.00 | 0.00000 | 0.0 | 0.0 | 0.00 | 0.0 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
4459 | 2022-01-31 23:00:00-08:00 | AS_CAISO_EXP | DAM | 0.15 | 9.15403 | 0.0 | 0.0 | 1.50 | 1.5 |
4460 | 2022-01-31 23:00:00-08:00 | AS_NP26 | DAM | 0.00 | 0.00000 | 0.0 | 0.0 | 0.00 | 0.0 |
4461 | 2022-01-31 23:00:00-08:00 | AS_NP26_EXP | DAM | 0.00 | 0.98700 | 0.0 | 0.0 | 2.24 | 0.0 |
4462 | 2022-01-31 23:00:00-08:00 | AS_SP26 | DAM | 0.00 | 0.00000 | 0.0 | 0.0 | 0.00 | 0.0 |
4463 | 2022-01-31 23:00:00-08:00 | AS_SP26_EXP | DAM | 0.00 | 0.00000 | 0.0 | 0.0 | 0.00 | 0.0 |
4464 rows × 9 columns
region = df[df["Region"] == "AS_CAISO_EXP"]
region.set_index("Time", inplace=True)
columns = [
"Non-Spinning Reserves",
"Spinning Reserves",
"Regulation Up",
"Regulation Down",
]
fig = px.line(
region,
x=region.index,
y=columns,
title="Ancillary Services Prices for CAISO, Jan 2022",
)
fig.show("svg", width=1200, height=600)
Additional Ancillary Services Data#
There is also data about the amount of AS procured
date = "Oct 15, 2022"
market = "DAM" # or "RTM"
df = iso.get_as_procurement(date, market=market)
df.head()
Time | Region | Market | Non-Spinning Reserves Procured (MW) | Non-Spinning Reserves Self-Provided (MW) | Non-Spinning Reserves Total (MW) | Non-Spinning Reserves Total Cost | Regulation Down Procured (MW) | Regulation Down Self-Provided (MW) | Regulation Down Total (MW) | ... | Regulation Mileage Up Total (MW) | Regulation Mileage Up Total Cost | Regulation Up Procured (MW) | Regulation Up Self-Provided (MW) | Regulation Up Total (MW) | Regulation Up Total Cost | Spinning Reserves Procured (MW) | Spinning Reserves Self-Provided (MW) | Spinning Reserves Total (MW) | Spinning Reserves Total Cost | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2022-10-15 00:00:00-07:00 | AS_CAISO | DAM | 710.75 | 5.92 | 716.67 | 0.00 | 690.00 | 0.0 | 690.00 | ... | NaN | NaN | 450.00 | 0.0 | 450.00 | 0.0 | 713.67 | 3.0 | 716.67 | 0.00 |
1 | 2022-10-15 00:00:00-07:00 | AS_CAISO_EXP | DAM | 710.75 | 5.92 | 716.67 | 85.29 | 690.00 | 0.0 | 690.00 | ... | 1709.08 | 0.0 | 460.00 | 0.0 | 460.00 | 2254.0 | 713.67 | 3.0 | 716.67 | 713.67 |
2 | 2022-10-15 00:00:00-07:00 | AS_NP26 | DAM | 499.71 | 2.92 | 502.63 | 0.00 | 270.51 | 0.0 | 270.51 | ... | NaN | NaN | 213.91 | 0.0 | 213.91 | 0.0 | 504.14 | 0.0 | 504.14 | 0.00 |
3 | 2022-10-15 00:00:00-07:00 | AS_NP26_EXP | DAM | 499.71 | 2.92 | 502.63 | 0.00 | 270.51 | 0.0 | 270.51 | ... | NaN | NaN | 223.91 | 0.0 | 223.91 | 0.0 | 504.14 | 0.0 | 504.14 | 0.00 |
4 | 2022-10-15 00:00:00-07:00 | AS_SP26 | DAM | 211.04 | 3.00 | 214.04 | 0.00 | 419.49 | 0.0 | 419.49 | ... | NaN | NaN | 236.09 | 0.0 | 236.09 | 0.0 | 209.53 | 3.0 | 212.53 | 0.00 |
5 rows × 27 columns
Available columns#
df.columns.tolist()
['Time',
'Region',
'Market',
'Non-Spinning Reserves Procured (MW)',
'Non-Spinning Reserves Self-Provided (MW)',
'Non-Spinning Reserves Total (MW)',
'Non-Spinning Reserves Total Cost',
'Regulation Down Procured (MW)',
'Regulation Down Self-Provided (MW)',
'Regulation Down Total (MW)',
'Regulation Down Total Cost',
'Regulation Mileage Down Procured (MW)',
'Regulation Mileage Down Self-Provided (MW)',
'Regulation Mileage Down Total (MW)',
'Regulation Mileage Down Total Cost',
'Regulation Mileage Up Procured (MW)',
'Regulation Mileage Up Self-Provided (MW)',
'Regulation Mileage Up Total (MW)',
'Regulation Mileage Up Total Cost',
'Regulation Up Procured (MW)',
'Regulation Up Self-Provided (MW)',
'Regulation Up Total (MW)',
'Regulation Up Total Cost',
'Spinning Reserves Procured (MW)',
'Spinning Reserves Self-Provided (MW)',
'Spinning Reserves Total (MW)',
'Spinning Reserves Total Cost']