Spp#
Module Contents#
Classes Summary#
Functions#
|
Adds Interval Start and Interval End columns to df |
|
Fill missing BAA values based on load magnitude. |
|
Parse SPP generation mix data from |
Attributes Summary#
Contents#
- gridstatus.spp.add_interval(df: pandas.DataFrame, interval_min: int) pandas.DataFrame[source]#
Adds Interval Start and Interval End columns to df
- class gridstatus.spp.BAAEnum[source]#
Bases:
enum.StrEnumEnum where members are also (and must be) strings
Initialize self. See help(type(self)) for accurate signature.
Attributes
SPP
‘SPP’
SWPW
‘SWPW’
- gridstatus.spp.BASE_LOAD_FORECAST_MID_TERM_URL = 'https://portal.spp.org/file-browser-api/download/mtlf-vs-actual?path='[source]#
- gridstatus.spp.BASE_LOAD_FORECAST_SHORT_TERM_URL = 'https://portal.spp.org/file-browser-api/download/stlf-vs-actual?path='[source]#
- gridstatus.spp.BASE_SOLAR_AND_WIND_MID_TERM_URL = 'https://portal.spp.org/file-browser-api/download/midterm-resource-forecast?path='[source]#
- gridstatus.spp.BASE_SOLAR_AND_WIND_SHORT_TERM_URL = 'https://portal.spp.org/file-browser-api/download/shortterm-resource-forecast?path='[source]#
- gridstatus.spp.FILE_BROWSER_DOWNLOAD_URL = 'https://portal.spp.org/file-browser-api/download'[source]#
- gridstatus.spp.fill_baa_column(df, load_col)[source]#
Fill missing BAA values based on load magnitude.
If the BAA column doesn’t exist, creates it. If it exists but has NaN values, fills only the missing entries. Uses BAA_LOAD_THRESHOLD_MW to distinguish between SWPW (small loads) and SPP (large loads).
- Parameters:
df – DataFrame with a load column to use for BAA inference.
load_col – Name of the column containing load values.
- Returns:
The DataFrame with BAA column filled in-place.
- gridstatus.spp.process_gen_mix(df: pandas.DataFrame, detailed: bool = False) pandas.DataFrame[source]#
Parse SPP generation mix data from https://marketplace.spp.org/pages/generation-mix-historical
- Parameters:
df (pd.DataFrame) – raw data
detailed (bool) – whether to combine market and self columns
- Returns:
processed data
- Return type:
pd.DataFrame
- gridstatus.spp.QUERY_RTM5_HUBS_URL = 'https://pricecontourmap.spp.org/arcgis/rest/services/MarketMaps/RTBM_FeatureData/MapServer/1/query'[source]#
- gridstatus.spp.QUERY_RTM5_INTERFACES_URL = 'https://pricecontourmap.spp.org/arcgis/rest/services/MarketMaps/RTBM_FeatureData/MapServer/2/query'[source]#
- gridstatus.spp.RELIABILITY_LEVELS = ['Normal Operations', 'Weather Advisory', 'Resource Advisory', 'Conservative Operations...[source]#
- class gridstatus.spp.SPP[source]#
Bases:
gridstatus.base.ISOBaseSouthwest Power Pool (SPP)
Attributes
default_timezone
‘US/Central’
interconnection_homepage
‘https://www.spp.org/engineering/generator-interconnection/’
iso_id
‘spp’
location_types
None
markets
None
name
‘Southwest Power Pool’
status_homepage
‘https://www.spp.org/markets-operations/current-grid-conditions/’
Methods
get_as_prices_real_time_5_min(→ pandas.DataFrame)Provides Marginal Clearing Price information by Reserve Zone for each
Get Day-Ahead Binding Constraints
get_binding_constraints_real_time_5_min(→ pandas.DataFrame)Get Real-Time Binding Constraints
get_capacity_of_generation_on_outage(→ pandas.DataFrame)Get Capacity of Generation on Outage.
Get VER Curtailments for a year. Starting 2014.
get_day_ahead_operating_reserve_prices(→ pandas.DataFrame)Provides Marginal Clearing Price information by Reserve Zone for each
get_fuel_mix(→ pandas.DataFrame)Get combined fuel mix summed across SPP and SWPW BAAs
get_fuel_mix_by_baa(→ pandas.DataFrame)Get fuel mix for both SPP and SWPW BAAs with a BAA column
get_fuel_mix_by_baa_detailed(→ pandas.DataFrame)Get detailed fuel mix for both SPP and SWPW BAAs with a BAA column
get_fuel_mix_detailed(→ pandas.DataFrame)Get combined detailed fuel mix summed across SPP and SWPW BAAs
get_hourly_load(→ pandas.DataFrame)Get Hourly Load in the long format (on or after 2026-03-24).
get_hourly_load_annual(→ pandas.DataFrame)Get Hourly Load for a year. Starting 2011.
get_hourly_load_historical(→ pandas.DataFrame)Get Hourly Load in the legacy wide format (before 2026-03-24).
get_interchange_real_time(→ pandas.DataFrame)Get real-time interchange (tie flow) data.
get_interconnection_queue(→ pandas.DataFrame)Get interconnection queue
get_lmp_day_ahead_hourly(→ pandas.DataFrame)Get day ahead hourly LMP data
get_lmp_day_ahead_hourly_by_bus(→ pandas.DataFrame)Get day ahead hourly LMP data by bus (pnode-level).
get_lmp_real_time_5_min_by_bus(→ pandas.DataFrame)Get LMP data by bus for the Real-Time 5 Minute Market
get_lmp_real_time_5_min_by_location(→ pandas.DataFrame)Get LMP data by location for the Real-Time 5 Minute Market
get_lmp_real_time_weis(→ pandas.DataFrame)Get LMP data for real time WEIS
get_load(→ pandas.DataFrame)Returns total RTO load in 5 minute intervals from STLF data.
get_load_by_baa(→ pandas.DataFrame)Returns actual load by BAA from short-term load forecast data.
get_load_by_baa_hourly(→ pandas.DataFrame | None)Returns hourly actual load by BAA from mid-term load forecast data.
get_load_forecast(→ pandas.DataFrame)Returns total RTO load forecast in hourly intervals from MTLF data.
get_load_forecast_by_baa(→ pandas.DataFrame)Returns hourly load forecast by BAA from MTLF data.
get_load_forecast_mid_term(→ pandas.DataFrame | None)Returns load forecast for +7 days in hourly intervals. Includes actual load
get_load_forecast_short_term(→ pandas.DataFrame | None)5-minute load forecast data for the SPP footprint (system-wide) for +/- 10
get_market_clearing_day_ahead(→ pandas.DataFrame)Get Market Clearing Day Ahead
get_market_clearing_real_time(→ pandas.DataFrame)Get Market Clearing Real Time
get_operating_reserves(→ pandas.DataFrame)get_raw_interconnection_queue(→ BinaryIO)Returns solar and wind generation forecast for +7 days in hourly intervals.
Returns solar and wind generation forecast for +4 hours in 5 minute intervals.
get_ver_curtailments(→ pandas.DataFrame)Get VER Curtailments summed across BAAs.
get_ver_curtailments_annual(→ pandas.DataFrame)Get VER Curtailments summed across BAAs for a year. Starting 2014.
get_ver_curtailments_by_baa(→ pandas.DataFrame)Get VER Curtailments broken down by BAA.
get_ver_curtailments_by_baa_annual(→ pandas.DataFrame)Get VER Curtailments broken down by BAA for a year. Starting 2014.
get_west_interchange_real_time(→ pandas.DataFrame)Get real-time interchange (tie flow) data for SPP West (SWPW).
now()- get_as_prices_real_time_5_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False, use_daily_files: bool = False) pandas.DataFrame[source]#
Provides Marginal Clearing Price information by Reserve Zone for each Real-Time 5-minute Market solution.
- Parameters:
date – date to get data for. Supports “latest” for most recent interval.
end – end date
verbose – print url
use_daily_files – if True, use daily files instead of 5 minute files.
- Returns:
Real-Time 5-minute Marginal Clearing Prices
- Return type:
pd.DataFrame
- get_binding_constraints_day_ahead_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Day-Ahead Binding Constraints
- Parameters:
date – date to get data for. Supports “latest” for most recently available data.
end – end date
verbose – print url
- Returns:
Day-Ahead Binding Constraints
- Return type:
pd.DataFrame
- get_binding_constraints_real_time_5_min(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Real-Time Binding Constraints
- Parameters:
date – date to get data for. Supports “latest” for most recent interval.
end – end date
verbose – print url
- Returns:
Real-Time Binding Constraints
- Return type:
pd.DataFrame
- get_capacity_of_generation_on_outage(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Capacity of Generation on Outage.
Published daily at 8am CT for next 7 days
- Parameters:
date – start date
end – end date
- get_capacity_of_generation_on_outage_annual(year: int, verbose: bool = True) pandas.DataFrame[source]#
Get VER Curtailments for a year. Starting 2014. Recent data use get_capacity_of_generation_on_outage
- Parameters:
year – year to get data for
verbose – print url
- Returns:
VER Curtailments
- Return type:
pd.DataFrame
- get_day_ahead_operating_reserve_prices(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Provides Marginal Clearing Price information by Reserve Zone for each Day-Ahead Market solution for each Operating Day. Posting is updated each day after the DA Market results are posted. Available at https://portal.spp.org/pages/da-mcp#
- Parameters:
date – date to get data for
end – end date
verbose – print url
- Returns:
Day Ahead Marginal Clearing Prices
- Return type:
pd.DataFrame
- get_fuel_mix(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get combined fuel mix summed across SPP and SWPW BAAs
- Parameters:
date – “latest”, “today”, a timestamp, or a date range tuple
end – optional end date for range queries
- Returns:
fuel mix summed across both BAAs
- Return type:
pd.DataFrame
- get_fuel_mix_by_baa(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get fuel mix for both SPP and SWPW BAAs with a BAA column
- Parameters:
date – “latest”, “today”, a timestamp, or a date range tuple
end – optional end date for range queries
- Returns:
fuel mix with BAA column differentiating SPP and SWPW
- Return type:
pd.DataFrame
- get_fuel_mix_by_baa_detailed(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get detailed fuel mix for both SPP and SWPW BAAs with a BAA column
Breaks out self scheduled and market scheduled generation.
- Parameters:
date – “latest”, “today”, a timestamp, or a date range tuple
end – optional end date for range queries
- Returns:
detailed fuel mix with BAA column
- Return type:
pd.DataFrame
- get_fuel_mix_detailed(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get combined detailed fuel mix summed across SPP and SWPW BAAs
Breaks out self scheduled and market scheduled generation.
- Parameters:
date – “latest”, “today”, a timestamp, or a date range tuple
end – optional end date for range queries
- Returns:
detailed fuel mix summed across both BAAs
- Return type:
pd.DataFrame
- get_hourly_load(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Hourly Load in the long format (on or after 2026-03-24).
- Parameters:
date – start date (must be on or after 2026-03-24)
end – end date
- Returns:
- Hourly Load with columns Time, Interval Start,
Interval End, Balancing Area Name, Control Zone Name, Forecast Area Type, Load
- Return type:
pd.DataFrame
- get_hourly_load_annual(year: int, verbose: bool = True) pandas.DataFrame[source]#
Get Hourly Load for a year. Starting 2011. For recent data use get_hourly_load
- Parameters:
year – year to get data for
verbose – print url
- Returns:
Hourly Load
- Return type:
pd.DataFrame
- get_hourly_load_historical(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Hourly Load in the legacy wide format (before 2026-03-24).
Deprecated: SPP changed the hourly load data format on 2026-03-24. Use get_hourly_load for data on or after 2026-03-24.
- Parameters:
date – start date (must be before 2026-03-24)
end – end date
- Returns:
Hourly Load in wide format
- Return type:
pd.DataFrame
- get_interchange_real_time(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get real-time interchange (tie flow) data.
For “latest” and “today”, returns ~2 days of 1-minute interchange data from the real-time endpoint.
For historical dates, downloads monthly CSV files from the historical tie flow archive.
Data from: - Real-time: https://portal.spp.org/pages/integrated-marketplace-interchange-trend - Historical: https://portal.spp.org/pages/historical-tie-flow
- Parameters:
date – supports “latest”, “today”, or a historical date/date range
end – end date for historical range queries
verbose – print info
- Returns:
interchange data
- Return type:
pd.DataFrame
- get_interconnection_queue(verbose: bool = False) pandas.DataFrame[source]#
Get interconnection queue
- Returns:
Interconnection queue
- Return type:
pandas.DataFrame
- get_lmp_day_ahead_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, location_type: str = LOCATION_TYPE_ALL, verbose: bool = False) pandas.DataFrame[source]#
Get day ahead hourly LMP data
- Supported Location Types:
HubInterfaceALL
- get_lmp_day_ahead_hourly_by_bus(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get day ahead hourly LMP data by bus (pnode-level).
- Parameters:
date – date to get data for
end – end date
verbose – print url
NOTE: does not take a location_type argument because it always returns LOCATION_TYPE_BUS.
- get_lmp_real_time_5_min_by_bus(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get LMP data by bus for the Real-Time 5 Minute Market
- Parameters:
date – date to get data for
end – end date
verbose – print url
NOTE: does not take a location_type argument because it always returns LOCATION_TYPE_BUS.
- get_lmp_real_time_5_min_by_location(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, location_type: str = LOCATION_TYPE_ALL, verbose: bool = False, use_daily_files: bool = False) pandas.DataFrame[source]#
Get LMP data by location for the Real-Time 5 Minute Market
- Parameters:
date – date to get data for
end – end date
location_type – location type to get data for. Options are: -
ALL(LOCATION_TYPE_ALL) -Hub(LOCATION_TYPE_HUB) -Interface(LOCATION_TYPE_INTERFACE) -Settlement Location(LOCATION_TYPE_SETTLEMENT_LOCATION)verbose – print url
use_daily_files – if True, use daily files instead of 5 minute files.
- get_lmp_real_time_weis(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get LMP data for real time WEIS
- Parameters:
date – date to get data for. if end is not provided, will get data for 5 minute interval that date is in.
end – end date
verbose – print url
- get_load(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Returns total RTO load in 5 minute intervals from STLF data.
- get_load_by_baa(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Returns actual load by BAA from short-term load forecast data.
- get_load_by_baa_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame | None[source]#
Returns hourly actual load by BAA from mid-term load forecast data.
- get_load_forecast(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Returns total RTO load forecast in hourly intervals from MTLF data.
- get_load_forecast_by_baa(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Returns hourly load forecast by BAA from MTLF data.
- get_load_forecast_mid_term(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame | None[source]#
Returns load forecast for +7 days in hourly intervals. Includes actual load for the past 24 hours. Data from https://portal.spp.org/pages/mtlf-vs-actual
- Parameters:
date (pd.Timestamp|str) – date to get data for. Supports “latest” and “today”
verbose (bool) – print info
- Returns:
forecast as dataframe.
- Return type:
pd.DataFrame
- get_load_forecast_short_term(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False, drop_null_forecast_rows: bool = True) pandas.DataFrame | None[source]#
5-minute load forecast data for the SPP footprint (system-wide) for +/- 10 minutes. Also includes actual load.
Data from https://portal.spp.org/pages/stlf-vs-actual
- Parameters:
date (pd.Timestamp|str) – date to get data for. Supports “latest” and “today”
verbose (bool) – print info
end (pd.Timestamp|str) – end date
drop_null_forecast_rows (bool) – if True, drop rows with null forecast values
- Returns:
forecast as dataframe.
- Return type:
pd.DataFrame
- get_market_clearing_day_ahead(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Market Clearing Day Ahead
- Parameters:
date – start date
end – end date
- Returns:
Market Clearing Day Ahead
- Return type:
pd.DataFrame
- get_market_clearing_real_time(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get Market Clearing Real Time
- Parameters:
date – start date
end – end date
- Returns:
Market Clearing Real Time
- Return type:
pd.DataFrame
- get_operating_reserves(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
- get_solar_and_wind_forecast_mid_term(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame | None[source]#
Returns solar and wind generation forecast for +7 days in hourly intervals.
Data from https://portal.spp.org/pages/midterm-resource-forecast.
- Parameters:
date (pd.Timestamp|str) – date to get data for. Supports “latest” and “today”
verbose (bool) – print info
- Returns:
forecast as dataframe.
- Return type:
pd.DataFrame
- get_solar_and_wind_forecast_short_term(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame | None[source]#
Returns solar and wind generation forecast for +4 hours in 5 minute intervals. Include actuals for past day in 5 minute intervals.
Data from https://portal.spp.org/pages/shortterm-resource-forecast
- Parameters:
date (pd.Timestamp|str) – date to get data for. Supports “latest” and “today”
verbose (bool) – print info
- Returns:
forecast as dataframe.
- Return type:
pd.DataFrame
- get_ver_curtailments(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get VER Curtailments summed across BAAs.
Supports recent data. For historical annual data use get_ver_curtailments_annual. For data broken down by BAA use get_ver_curtailments_by_baa.
- Parameters:
date – start date
end – end date
- get_ver_curtailments_annual(year: int, verbose: bool = True) pandas.DataFrame[source]#
Get VER Curtailments summed across BAAs for a year. Starting 2014.
Recent data use get_ver_curtailments. For data broken down by BAA use get_ver_curtailments_by_baa_annual.
- Parameters:
year – year to get data for
verbose – print url
- Returns:
VER Curtailments
- Return type:
pd.DataFrame
- get_ver_curtailments_by_baa(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get VER Curtailments broken down by BAA.
Supports recent data. For historical annual data use get_ver_curtailments_by_baa_annual.
- Parameters:
date – start date
end – end date
- get_ver_curtailments_by_baa_annual(year: int, verbose: bool = True) pandas.DataFrame[source]#
Get VER Curtailments broken down by BAA for a year. Starting 2014.
Recent data use get_ver_curtailments_by_baa.
- Parameters:
year – year to get data for
verbose – print url
- Returns:
VER Curtailments
- Return type:
pd.DataFrame
- get_west_interchange_real_time(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp] | None = None, verbose: bool = False) pandas.DataFrame[source]#
Get real-time interchange (tie flow) data for SPP West (SWPW).
For “latest” and “today”, returns ~2 days of 1-minute interchange data from the real-time endpoint.
For historical dates, downloads monthly CSV files from the historical tie flow archive.
Data from: - Real-time: https://portal.spp.org/pages/integrated-marketplace-interchange-trend - Historical: https://portal.spp.org/pages/historical-tie-flow
- Parameters:
date – supports “latest”, “today”, or a historical date/date range
end – end date for historical range queries
verbose – print info
- Returns:
interchange data
- Return type:
pd.DataFrame