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)
../../_images/7a5e5c3cfe0a0d77ab2c010174dfac9310fa79f3999c25a2956799f09f342758.png

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']