Miso#

Module Contents#

Classes Summary#

MISO

Midcontinent Independent System Operator (MISO)

Functions#

add_interval_end(→ pandas.DataFrame)

Add an interval end column to a dataframe

Contents#

gridstatus.miso.add_interval_end(df: pandas.DataFrame, duration_min: int) pandas.DataFrame[source]#

Add an interval end column to a dataframe

Parameters:
  • df (pandas.DataFrame) – Dataframe with a time column

  • duration_min (int) – Interval duration in minutes

Returns:

Dataframe with an interval end column

Return type:

pandas.DataFrame

class gridstatus.miso.MISO[source]#

Bases: gridstatus.base.ISOBase

Midcontinent Independent System Operator (MISO)

Attributes

default_timezone

‘EST’

hubs

[‘ILLINOIS.HUB’, ‘INDIANA.HUB’, ‘LOUISIANA.HUB’, ‘MICHIGAN.HUB’, ‘MINN.HUB’, ‘MS.HUB’, ‘TEXAS.HUB’, ‘ARKANSAS.HUB’]

interconnection_homepage

https://www.misoenergy.org/planning/generator-interconnection/GI_Queue/

iso_id

‘miso’

markets

None

name

‘Midcontinent ISO’

solar_and_wind_forecast_cols

[‘Interval Start’, ‘Interval End’, ‘Publish Time’, ‘North’, ‘Central’, ‘South’, ‘MISO’]

solar_and_wind_forecast_region_cols

[‘North’, ‘Central’, ‘South’, ‘MISO’]

Methods

get_area_control_error(→ pandas.DataFrame)

Get the MISO Area Control Error (ACE).

get_binding_constraint_overrides_real_time_5_min(...)

get_binding_constraints_day_ahead_hourly(...)

get_binding_constraints_day_ahead_yearly_historical(...)

Get the day-ahead binding constraints data from MISO for a given year.

get_binding_constraints_real_time_5_min(→ pandas.DataFrame)

get_binding_constraints_real_time_intraday(...)

Get real-time binding constraints data from MISO's intraday API.

get_binding_constraints_real_time_yearly_historical(...)

Get the real-time binding constraints data from MISO for a given year.

get_binding_constraints_supplemental(→ pandas.DataFrame)

Get the supplemental binding constraints data from MISO.

get_fuel_mix(→ pandas.DataFrame)

Get the fuel mix for a given day for a provided MISO.

get_generation_outages_estimated(→ pandas.DataFrame)

Get the estimated generation outages published on the date for the past 30

get_generation_outages_forecast(→ pandas.DataFrame)

Get the forecasted generation outages published on the date for the next

get_historical_zonal_load_hourly(→ pandas.DataFrame)

get_interchange_5_min(→ pandas.DataFrame)

get_interconnection_queue(→ pandas.DataFrame)

Get the interconnection queue

get_lmp(→ pandas.DataFrame)

Deprecated. Use the per-dataset methods instead:

get_lmp_day_ahead_hourly(→ pandas.DataFrame)

Get ExPost day-ahead hourly LMPs for all nodes.

get_lmp_real_time_5_min(→ pandas.DataFrame)

Get prelim ExPost real-time 5-minute LMPs for all nodes.

get_lmp_real_time_5_min_final(→ pandas.DataFrame)

Retrieves real time final lmp data that includes price corrections to the

get_lmp_real_time_hourly_final(→ pandas.DataFrame)

Get final ExPost real-time hourly LMPs for all nodes.

get_lmp_real_time_hourly_prelim(→ pandas.DataFrame)

Get prelim ExPost real-time hourly LMPs for all nodes.

get_load(→ pandas.DataFrame)

get_load_forecast(→ pandas.DataFrame)

https://docs.misoenergy.org/marketreports/YYYYMMDD_df_al.xls

get_look_ahead_hourly(→ pandas.DataFrame)

get_multiday_operating_margin(→ pandas.DataFrame)

Get the multiday operating margin forecast.

get_multiday_operating_margin_regional(→ pandas.DataFrame)

Get the multiday operating margin forecast for all regions.

get_raw_interconnection_queue(→ BinaryIO)

get_reserve_product_binding_constraints_day_ahead_hourly(...)

get_reserve_product_binding_constraints_real_time_5_min(...)

get_solar_forecast(→ pandas.DataFrame)

get_subregional_power_balance_constraints_day_ahead_hourly(...)

get_subregional_power_balance_constraints_real_time_5_min(...)

get_wind_forecast(→ pandas.DataFrame)

get_zonal_load_hourly(→ pandas.DataFrame)

https://docs.misoenergy.org/marketreports/YYYYMMDD_df_al.xls

get_area_control_error(date: str | pandas.Timestamp = 'latest', end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#

Get the MISO Area Control Error (ACE).

Real-time system-level area control error in MW, published as instantaneous observations roughly every 30 seconds. The source endpoint only serves a rolling window of recent observations, so only “latest” is supported.

Parameters:
  • date – Only “latest” is supported.

  • end – Not supported.

  • verbose – If True, prints additional information during data retrieval.

Returns:

DataFrame with columns “Time” and “Area Control Error”.

get_binding_constraint_overrides_real_time_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
get_binding_constraints_day_ahead_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
get_binding_constraints_day_ahead_yearly_historical(year: int, verbose: bool = False) pandas.DataFrame[source]#

Get the day-ahead binding constraints data from MISO for a given year.

Parameters:
  • year (int) – Year

  • verbose (bool, optional) – Verbosity. Defaults to False.

Returns:

Historical day-ahead binding constraints data

Return type:

pandas.DataFrame

get_binding_constraints_real_time_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
get_binding_constraints_real_time_intraday(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#

Get real-time binding constraints data from MISO’s intraday API.

This provides active real-time constraint data updated every 5 minutes. Only supports “latest” data.

Parameters:
  • date – Must be “latest”.

  • end – Not used.

  • verbose – If True, prints additional information during data retrieval.

Returns:

DataFrame with real-time binding constraint data.

get_binding_constraints_real_time_yearly_historical(year: int, verbose: bool = False) pandas.DataFrame[source]#

Get the real-time binding constraints data from MISO for a given year.

Parameters:
  • year (int) – Year

  • verbose (bool, optional) – Verbosity. Defaults to False.

Returns:

Historical real-time binding constraints data

Return type:

pandas.DataFrame

get_binding_constraints_supplemental(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#

Get the supplemental binding constraints data from MISO.

Source URL: https://www.misoenergy.org/markets-and-operations/real-time–market-data/market-reports/#nt=%2FMarketReportType%3ADay-Ahead%2FMarketReportName%3ABinding Constraints Supplemental (xls)&t=10&p=0&s=MarketReportPublished&sd=desc

Parameters:
  • date (str | pd.Timestamp) – Start date

  • end (str | pd.Timestamp, optional) – End date. Defaults to None.

  • verbose (bool, optional) – Verbosity. Defaults to False.

Returns:

Supplemental binding constraints data

Return type:

pandas.DataFrame

get_fuel_mix(date: str | pandas.Timestamp, verbose: bool = False) pandas.DataFrame[source]#

Get the fuel mix for a given day for a provided MISO.

Parameters:
  • date (datetime.date, str) – “latest”, “today”, “yesterday”, or an object that can be parsed as a datetime for the day to return data.

  • verbose (bool, optional) – print verbose output. Defaults to False.

Returns:

DataFrame with columns “Time”, “Load”, “Fuel Mix”

Return type:

pandas.DataFrame

get_generation_outages_estimated(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#

Get the estimated generation outages published on the date for the past 30 days. NOTE: since these are estimates, they change with each file published.

get_generation_outages_forecast(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#

Get the forecasted generation outages published on the date for the next seven days.

get_historical_zonal_load_hourly(year: int) pandas.DataFrame[source]#
get_interchange_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
get_interconnection_queue(verbose: bool = False) pandas.DataFrame[source]#

Get the interconnection queue

Returns:

Interconnection queue

Return type:

pandas.DataFrame

get_lmp(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, market: str = Markets.REAL_TIME_5_MIN, locations: list = 'ALL', verbose: bool = False) pandas.DataFrame[source]#

Deprecated. Use the per-dataset methods instead: get_lmp_real_time_5_min(), get_lmp_day_ahead_hourly(), get_lmp_real_time_hourly_prelim(), get_lmp_real_time_hourly_final().

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, verbose: bool = False) pandas.DataFrame[source]#

Get ExPost day-ahead hourly LMPs for all nodes.

get_lmp_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 prelim ExPost real-time 5-minute LMPs for all nodes.

Only today, yesterday, and “latest” are supported.

get_lmp_real_time_5_min_final(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#

Retrieves real time final lmp data that includes price corrections to the preliminary real time data.

Data from: https://www.misoenergy.org/markets-and-operations/real-time–market-data/market-reports/#nt=%2FMarketReportType%3AHistorical%20LMP%2FMarketReportName%3AWeekly%20Real-Time%205-Min%20LMP%20(zip)&t=10&p=0&s=MarketReportPublished&sd=desc

get_lmp_real_time_hourly_final(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 final ExPost real-time hourly LMPs for all nodes.

get_lmp_real_time_hourly_prelim(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 prelim ExPost real-time hourly LMPs for all nodes.

Only 4 days of data available, with the most recent being yesterday.

get_load(date: str | pandas.Timestamp, verbose: bool = False) pandas.DataFrame[source]#
get_load_forecast(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#

https://docs.misoenergy.org/marketreports/YYYYMMDD_df_al.xls

get_look_ahead_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
get_multiday_operating_margin(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#

Get the multiday operating margin forecast.

This data comes from the Multiday Operating Margin Forecast (MOMF) report published daily by MISO. The operating margin represents the difference between available resources and system obligations.

Parameters:
  • date – The date to retrieve data for.

  • end – Optional end date for a date range.

  • verbose – If True, prints additional information during data retrieval.

Returns:

DataFrame with system-wide operating margin forecast data including committed/uncommitted resources, renewable forecasts, load projections, and operating margin calculations.

get_multiday_operating_margin_regional(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#

Get the multiday operating margin forecast for all regions.

This data comes from the Multiday Operating Margin Forecast (MOMF) report published daily by MISO. The operating margin represents the difference between available resources and system obligations for each region.

Parameters:
  • date – The date to retrieve data for.

  • end – Optional end date for a date range.

  • verbose – If True, prints additional information during data retrieval.

Returns:

DataFrame with regional operating margin forecast data for all regions (NORTH, CENTRAL, NORTH+CENTRAL, SOUTH) including committed/uncommitted resources, renewable forecasts, load projections, and regional metrics.

get_raw_interconnection_queue(verbose: bool = False) BinaryIO[source]#
get_reserve_product_binding_constraints_day_ahead_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
get_reserve_product_binding_constraints_real_time_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
get_solar_forecast(date: str | pandas.Timestamp, verbose: bool = False) pandas.DataFrame[source]#
get_subregional_power_balance_constraints_day_ahead_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
get_subregional_power_balance_constraints_real_time_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False) pandas.DataFrame[source]#
get_wind_forecast(date: str | pandas.Timestamp, verbose: bool = False) pandas.DataFrame[source]#
get_zonal_load_hourly(date: str | pandas.Timestamp | tuple[pandas.Timestamp, pandas.Timestamp], end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#

https://docs.misoenergy.org/marketreports/YYYYMMDD_df_al.xls