Spp

Contents

Spp#

Module Contents#

Classes Summary#

BAAEnum

Enum where members are also (and must be) strings

SPP

Southwest Power Pool (SPP)

Functions#

add_interval(→ pandas.DataFrame)

Adds Interval Start and Interval End columns to df

fill_baa_column(df, load_col)

Fill missing BAA values based on load magnitude.

process_gen_mix(→ pandas.DataFrame)

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

gridstatus.spp.BAA_LOAD_THRESHOLD_MW = 5000[source]#
class gridstatus.spp.BAAEnum[source]#

Bases: enum.StrEnum

Enum 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.DA_BINDING_CONSTRAINTS = 'da-binding-constraints'[source]#
gridstatus.spp.FILE_BROWSER_API_URL = 'https://portal.spp.org/file-browser-api/'[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.FS_DAM_LMP_BY_LOCATION = 'da-lmp-by-settlement-location'[source]#
gridstatus.spp.FS_RTBM_LMP_BY_LOCATION = 'rtbm-lmp-by-location'[source]#
gridstatus.spp.HOURLY_LOAD_WIDE_FORMAT_END_DATE[source]#
gridstatus.spp.LAST_UPDATED_KEYWORDS = ['last updated', 'as of'][source]#
gridstatus.spp.LMP_BY_SETTLEMENT_LOCATION_WEIS = 'lmp-by-settlement-location-weis'[source]#
gridstatus.spp.LMP_HUBS_AND_INTERFACES[source]#
gridstatus.spp.LOCATION_TYPE_ALL = 'ALL'[source]#
gridstatus.spp.LOCATION_TYPE_BUS = 'Bus'[source]#
gridstatus.spp.LOCATION_TYPE_HUB = 'Hub'[source]#
gridstatus.spp.LOCATION_TYPE_INTERFACE = 'Interface'[source]#
gridstatus.spp.LOCATION_TYPE_SETTLEMENT_LOCATION = 'Settlement Location'[source]#
gridstatus.spp.MARKETPLACE_BASE_URL = 'https://portal.spp.org'[source]#
gridstatus.spp.OPERATING_RESERVES = 'operating-reserves'[source]#
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]#
gridstatus.spp.RELIABILITY_LEVELS_ALIASES[source]#
gridstatus.spp.RTBM_BINDING_CONSTRAINTS = 'rtbm-binding-constraints'[source]#
gridstatus.spp.RTBM_LMP_BY_BUS = 'rtbm-lmp-by-bus'[source]#
gridstatus.spp.RTBM_MCP = 'rtbm-mcp'[source]#
class gridstatus.spp.SPP[source]#

Bases: gridstatus.base.ISOBase

Southwest 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_binding_constraints_day_ahead_hourly(...)

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_capacity_of_generation_on_outage_annual(...)

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_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)

get_solar_and_wind_forecast_mid_term(...)

Returns solar and wind generation forecast for +7 days in hourly intervals.

get_solar_and_wind_forecast_short_term(...)

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:
  • Hub

  • Interface

  • ALL

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_raw_interconnection_queue(verbose: bool = False) BinaryIO[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

static now()[source]#
gridstatus.spp.STATUS_STOP_WORDS = ['as', 'at', 'ct', 'eea', 'of', 'on'][source]#