Gridstatus
Contents
Gridstatus#
Subpackages#
Submodules#
Package Contents#
Classes Summary#
California Independent System Operator (CAISO) |
|
Electric Reliability Council of Texas (ERCOT) |
|
ISO New England (ISONE) |
|
Names of LMP Markets |
|
Midcontinent Independent System Operator (MISO) |
|
New York Independent System Operator (NYISO) |
|
PJM |
|
Southwest Power Pool (SPP) |
Exceptions Summary#
Functions#
Get interconnection queue data for all ISOs |
|
Get an ISO by its id |
|
List available ISOs |
|
Load a single dataframe for same schema csv files in a folder |
Contents#
- class gridstatus.CAISO[source]#
Bases:
gridstatus.base.ISOBaseCalifornia Independent System Operator (CAISO)
Attributes
default_timezone
US/Pacific
interconnection_homepage
iso_id
caiso
markets
None
name
California ISO
status_homepage
trading_hub_locations
[‘TH_NP15_GEN-APND’, ‘TH_SP15_GEN-APND’, ‘TH_ZP26_GEN-APND’]
Methods
Return AS prices for a given date for each region
Get ancillary services procurement data from CAISO.
Return curtailment data for a given date
Get fuel mix in 5 minute intervals for a provided day
Return gas prices at a previous date
Return ghg allowance at a previous date
Get day ahead LMP pricing starting at supplied date for a list of locations.
Return load at a previous date in 5 minute intervals
Returns load forecast for a previous date in 1 hour intervals
Get Current Status of the Grid. Only date="latest" is supported
Return storage charging or discharging for today in 5 minute intervals
- get_as_prices(date, end=None, sleep=4, verbose=False)#
Return AS prices for a given date for each region
- Arguments:
date: date to return data end: last date of range to return data. if None, returns only date. Defaults to None. verbose: print out url being fetched. Defaults to False.
- Returns:
dataframe of AS prices
- get_as_procurement(date, end=None, market='DAM', sleep=4, verbose=False)#
Get ancillary services procurement data from CAISO.
- Arguments:
date: date to return data end: last date of range to return data. if None, returns only date. Defaults to None. market: DAM or RTM. Defaults to DAM.
- Returns:
dataframe of ancillary services data
- get_curtailment(date, verbose=False)#
Return curtailment data for a given date
- Notes:
requires java to be installed in order to run
Data available from June 30, 2016 to present
- Arguments:
date: date to return data end: last date of range to return data. if None, returns only date. Defaults to None. verbose: print out url being fetched. Defaults to False.
- Returns:
dataframe of curtailment data
- get_fuel_mix(date, end=None, verbose=False)#
Get fuel mix in 5 minute intervals for a provided day
- Arguments:
date (datetime or str): “latest”, “today”, or an object that can be parsed as a datetime for the day to return data.
start (datetime or str): start of date range to return. alias for date parameter. Only specify one of date or start.
end (datetime or str): “today” or an object that can be parsed as a datetime for the day to return data. Only used if requesting a range of dates.
verbose (bool): print verbose output. Defaults to False.
- Returns:
pd.Dataframe: dataframe with columns: Time and columns for each fuel type
- get_gas_prices(date, end=None, fuel_region_id='ALL', sleep=4, verbose=False)#
Return gas prices at a previous date
- Arguments:
date: date to return data
end: last date of range to return data. if None, returns only date. Defaults to None.
fuel_region_id(str, or list): single fuel region id or list of fuel region ids to return data for. Defaults to ALL, which returns all fuel regions.
- Returns:
dataframe of gas prices
- get_ghg_allowance(date, end=None, sleep=4, verbose=False)#
Return ghg allowance at a previous date
- Arguments:
date: date to return data end: last date of range to return data. if None, returns only date. Defaults to None.
- get_interconnection_queue(verbose=False)#
- get_lmp(date, market: str, locations: list = None, sleep: int = 5, end=None, verbose=False)#
Get day ahead LMP pricing starting at supplied date for a list of locations.
- Arguments:
date: date to return data
market: market to return from. supports:
locations(list): list of locations to get data from. If no locations are provided, defaults to NP15, SP15, and ZP26, which are the trading hub locations. For a list of locations, call CAISO.get_pnodes()
sleep(int): number of seconds to sleep before returning to avoid hitting rate limit in regular usage. Defaults to 5 seconds.
- Returns
dataframe of pricing data
- get_load(date, end=None, verbose=False)#
Return load at a previous date in 5 minute intervals
- get_load_forecast(date, end=None, sleep=4, verbose=False)#
Returns load forecast for a previous date in 1 hour intervals
- Arguments:
date(datetime, pd.Timestamp, or str): day to return. if string, format should be YYYYMMDD e.g 20200623 sleep(int): number of seconds to sleep before returning to avoid hitting rate limit in regular usage. Defaults to 5 seconds.
- get_pnodes()#
- get_stats(verbose=False)#
- get_status(date='latest', verbose=False) str#
Get Current Status of the Grid. Only date=”latest” is supported
Known possible values: Normal, Restricted Maintenance Operations, Flex Alert
- get_storage(date, verbose=False)#
Return storage charging or discharging for today in 5 minute intervals
Negative means charging, positive means discharging
- Arguments:
date: date to return data
- class gridstatus.Ercot[source]#
Bases:
gridstatus.base.ISOBaseElectric Reliability Council of Texas (ERCOT)
Attributes
ACTUAL_LOADS_URL_FORMAT
https://www.ercot.com/content/cdr/html/{timestamp}_actual_loads_of_forecast_zones.html
BASE
default_timezone
US/Central
interconnection_homepage
http://mis.ercot.com/misapp/GetReports.do?reportTypeId=15933
iso_id
ercot
LOAD_HISTORICAL_MAX_DAYS
14
name
Electric Reliability Council of Texas
status_homepage
Methods
Get ancillary service clearing prices in hourly intervals in Day Ahead Market
Get fuel mix 5 minute intervals
Get interconnection queue for ERCOT
Returns load forecast
Get Historical RTM Settlement Point Prices(SPPs) for each of the Hubs and Load Zones
Returns status of grid
- get_as_prices(date, verbose=False)#
Get ancillary service clearing prices in hourly intervals in Day Ahead Market
- Arguments:
date(datetime or str): date of delivery for AS services verbose(bool): print verbose output. Defaults to False.
- Returns:
pd.Dataframe: dataframe with prices for “Non-Spinning Reserves”, “Regulation Up”, “Regulation Down”, “Responsive Reserves”,
- get_fuel_mix(date, verbose=False)#
Get fuel mix 5 minute intervals
- Arguments:
date(datetime or str): “latest”, “today”. historical data currently not supported
verbose(bool): print verbose output. Defaults to False.
- Returns:
pd.Dataframe: dataframe with columns: Time and columns for each fuel type (solar and wind)
- get_interconnection_queue(verbose=False)#
Get interconnection queue for ERCOT
Monthly historical data available here: http: // mis.ercot.com/misapp/GetReports.do?reportTypeId = 15933 & reportTitle = GIS % 20Report & showHTMLView = &mimicKey
- get_load(date, verbose=False)#
- get_load_forecast(date, verbose=False)#
Returns load forecast
Currently only supports today’s forecast
- get_rtm_spp(year)#
Get Historical RTM Settlement Point Prices(SPPs) for each of the Hubs and Load Zones
- Arguments:
year(int): year to get data for
Source: https: // www.ercot.com/mp/data-products/data-product-details?id = NP6-785-ER
- get_status(date, verbose=False)#
Returns status of grid
- class gridstatus.ISONE[source]#
Bases:
gridstatus.base.ISOBaseISO New England (ISONE)
Attributes
default_timezone
US/Eastern
hubs
None
interconnection_homepage
interfaces
None
iso_id
isone
markets
None
name
ISO New England
status_homepage
https://www.iso-ne.com/markets-operations/system-forecast-status/current-system-status
zones
None
Methods
Return fuel mix at a previous date
Get the interconnection queue. Contains active and withdrawm applications.
Find Node ID mapping: https://www.iso-ne.com/markets-operations/settlements/pricing-node-tables/
Return load at a previous date in 5 minute intervals
Return forecast at a previous date
Get latest status for ISO NE
- get_fuel_mix(date, end=None, verbose=False)#
Return fuel mix at a previous date
Provided at frequent, but irregular intervals by ISONE
- get_interconnection_queue(verbose=False)#
Get the interconnection queue. Contains active and withdrawm applications.
More information: https://www.iso-ne.com/system-planning/interconnection-service/interconnection-request-queue/
- Returns:
pd.DataFrame – interconnection queue
- get_lmp(date, end=None, market: str = None, locations: list = None, include_id=False, verbose=False)#
Find Node ID mapping: https://www.iso-ne.com/markets-operations/settlements/pricing-node-tables/
- get_load(date, verbose=False)#
Return load at a previous date in 5 minute intervals
- get_load_forecast(date, end=None, verbose=False)#
Return forecast at a previous date
- get_status(date, verbose=False)#
Get latest status for ISO NE
- gridstatus.load_folder(path, time_zone=None, verbose=True)[source]#
Load a single dataframe for same schema csv files in a folder
- Arguments:
path {str} – path to folder time_zone {str} – time zone to localize to timestamps. By default returns as UTC
- Returns:
pd.DataFrame – dataframe of all files
- class gridstatus.Markets[source]#
Bases:
enum.EnumNames of LMP Markets
Attributes
DAY_AHEAD_HOURLY
DAY_AHEAD_HOURLY
REAL_TIME_15_MIN
REAL_TIME_15_MIN
REAL_TIME_5_MIN
REAL_TIME_5_MIN
REAL_TIME_HOURLY
REAL_TIME_HOURLY
Methods
- __contains__(item)#
- class gridstatus.MISO[source]#
Bases:
gridstatus.base.ISOBaseMidcontinent Independent System Operator (MISO)
Attributes
BASE
https://api.misoenergy.org/MISORTWDDataBroker/DataBrokerServices.asmx
default_timezone
US/Central
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
Methods
Get fuel mix in 5 minute intervals for a provided day
Get the interconnection queue
Supported Markets:
- get_fuel_mix(date, verbose=False)#
Get fuel mix in 5 minute intervals for a provided day
- Arguments:
date (datetime or str): “latest”, “today”, or an object that can be parsed as a datetime for the day to return data.
start (datetime or str): start of date range to return. alias for date parameter. Only specify one of date or start.
end (datetime or str): “today” or an object that can be parsed as a datetime for the day to return data. Only used if requesting a range of dates.
verbose (bool): print verbose output. Defaults to False.
- Returns:
pd.Dataframe: dataframe with columns: Time and columns for each fuel type
- get_interconnection_queue(verbose=False)#
Get the interconnection queue
- Returns:
pd.DataFrame – Interconnection queue
- get_lmp(date, market: str, locations: list = None, verbose=False)#
Supported Markets:
REAL_TIME_5_MIN (FiveMinLMP) DAY_AHEAD_HOURLY (DayAheadExPostLMP)
- get_load(date, verbose=False)#
- get_load_forecast(date, verbose=False)#
- exception gridstatus.NotSupported[source]#
Bases:
ExceptionCommon base class for all non-exit exceptions.
Initialize self. See help(type(self)) for accurate signature.
- class gridstatus.NYISO[source]#
Bases:
gridstatus.base.ISOBaseNew York Independent System Operator (NYISO)
Attributes
default_timezone
US/Eastern
interconnection_homepage
iso_id
nyiso
markets
None
name
New York ISO
status_homepage
Methods
Pull the most recent capacity market report's market clearing prices
Get fuel mix in 5 minute intervals for a provided day
Get a list of generators in NYISO
Return NYISO interconnection queue
Supported Markets: REAL_TIME_5_MIN, DAY_AHEAD_HOURLY
Returns load at a previous date in 5 minute intervals
Get load forecast for a date in 1 hour intervals
Get a list of loads in NYISO
- get_capacity_prices(date=None, verbose=False)#
Pull the most recent capacity market report’s market clearing prices
- Parameters:
date (pd.Timestamp): date that will be used to pull latest capacity report (will refer to month and year) verbose (bool): print out requested url
- Returns:
pd.DataFrame: a dataframe of monthly capacity prices (all three auctions) for each of the four capacity localities within NYISO
- get_fuel_mix(date, end=None, verbose=False)#
Get fuel mix in 5 minute intervals for a provided day
- Arguments:
date (datetime or str): “latest”, “today”, or an object that can be parsed as a datetime for the day to return data.
start (datetime or str): start of date range to return. alias for date parameter. Only specify one of date or start.
end (datetime or str): “today” or an object that can be parsed as a datetime for the day to return data. Only used if requesting a range of dates.
verbose (bool): print verbose output. Defaults to False.
- Returns:
pd.Dataframe: dataframe with columns: Time and columns for each fuel type
- get_generators(verbose=False)#
Get a list of generators in NYISO
When possible return capacity and fuel type information
- Parameters:
verbose (bool): print out requested url
- Returns:
pd.DataFrame: a dataframe of generators and locations
Possible Columns
Generator Name
PTID
Subzone
Zone
Latitude
Longitude
Owner, Operator, and / or Billing Organization
Station Unit
Town
County
State
In-Service Date
Name Plate Rating (V) MW
2022 CRIS MW Summer
2022 CRIS MW Winter
2022 Capability MW Summer
2022 Capability MW Winter
Is Dual Fuel
Unit Type
Fuel Type 1
Fuel Type 2
2021 Net Energy GWh
Notes
Generator Type
- get_interconnection_queue(verbose=False)#
Return NYISO interconnection queue
Additional Non-NYISO queue info: https://www3.dps.ny.gov/W/PSCWeb.nsf/All/286D2C179E9A5A8385257FBF003F1F7E?OpenDocument
- Returns:
pd.DataFrame: Interconnection queue containing, active, withdrawn, and completed project
- get_lmp(date, end=None, market: str = None, locations: list = None, location_type: str = None, verbose=False)#
Supported Markets: REAL_TIME_5_MIN, DAY_AHEAD_HOURLY
Supported Location Types: “zone”, “generator”
- get_load(date, end=None, verbose=False)#
Returns load at a previous date in 5 minute intervals
- get_load_forecast(date, end=None, verbose=False)#
Get load forecast for a date in 1 hour intervals
- get_loads(verbose=False)#
Get a list of loads in NYISO
- Parameters:
verbose (bool): print out requested url
- Returns:
pd.DataFrame: a dataframe of loads and locations
- get_status(date, end=None, verbose=False)#
- class gridstatus.PJM[source]#
Bases:
gridstatus.base.ISOBasePJM
Attributes
default_timezone
US/Eastern
hub_node_ids
[‘51217’, ‘116013751’, ‘35010337’, ‘34497151’, ‘34497127’, ‘34497125’, ‘33092315’, ‘33092313’, ‘33092311’, ‘4669664’, ‘51288’, ‘51287’]
interconnection_queue_homepage
https://www.pjm.com/planning/services-requests/interconnection-queues.aspx
iso_id
pjm
location_types
[‘ZONE’, ‘LOAD’, ‘GEN’, ‘AGGREGATE’, ‘INTERFACE’, ‘EXT’, ‘HUB’, ‘EHV’, ‘TIE’, ‘RESIDUAL_METERED_EDC’]
markets
None
name
PJM
Methods
Get fuel mix for a date or date range in hourly intervals
Returns LMP at a previous date
Returns load at a previous date at 5 minute intervals
Get forecast for today in hourly intervals.
- get_fuel_mix(date, end=None, verbose=False)#
Get fuel mix for a date or date range in hourly intervals
- get_interconnection_queue()#
- get_lmp(date, market: str, end=None, locations='hubs', location_type=None, verbose=False)#
Returns LMP at a previous date
- Notes:
If start date is prior to the PJM archive date, all data must be downloaded before location filtering can be performed due to limitations of PJM API. The archive date is 186 days (~6 months) before today for the 5 minute real time market and 731 days (~2 years) before today for the Hourly Real Time and Day Ahead Hourly markets. Node type filter can be performed for Real Time Hourly and Day Ahead Hourly markets.
If location_type is provided, it is filtered after data is retrieved for Real Time 5 Minute market regardless of the date. This is due to PJM api limitations
- Args:
date (str or datetime.date): date to get LMPs for
end (str or datetime.date): end date to get LMPs for
market (str): Supported Markets: REAL_TIME_5_MIN, REAL_TIME_HOURLY, DAY_AHEAD_HOURLY
locations (list, optional): list of pnodeid to get LMPs for. Defaults to “hubs”. Use get_pnode_ids() to get a list of possible pnode ids. If “all”, will return data from all p nodes (warning there are over 10,000 unique pnodes, so expect millions or billions of rows!)
location_type (str, optional): If specified, will only return data for nodes of this type. Defaults to None. Possible location types are: ‘ZONE’, ‘LOAD’, ‘GEN’, ‘AGGREGATE’, ‘INTERFACE’, ‘EXT’,
‘HUB’, ‘EHV’, ‘TIE’, ‘RESIDUAL_METERED_EDC’.
- get_load(date, end=None, verbose=False)#
Returns load at a previous date at 5 minute intervals
- Args:
date (str or datetime.date): date to get load for. must be in last 30 days
- get_load_forecast(date, verbose=False)#
Get forecast for today in hourly intervals.
Updates every Every half hour on the quarter E.g. 1:15 and 1:45
- get_pnode_ids()#
- class gridstatus.SPP[source]#
Bases:
gridstatus.base.ISOBaseSouthwest Power Pool (SPP)
Attributes
default_timezone
US/Central
interconnection_homepage
iso_id
spp
name
Southwest Power Pool
status_homepage
https://www.spp.org/markets-operations/current-grid-conditions/
Methods
Get fuel mix in 5 minute intervals for a provided day
Get interconnection queue
Returns load for last 24hrs in 5 minute intervals
type (str): MID_TERM is hourly for next 7 days or SHORT_TERM is every five minutes for a few hours
- get_fuel_mix(date, verbose=False)#
Get fuel mix in 5 minute intervals for a provided day
- Arguments:
date (datetime or str): “latest”, “today”, or an object that can be parsed as a datetime for the day to return data.
start (datetime or str): start of date range to return. alias for date parameter. Only specify one of date or start.
end (datetime or str): “today” or an object that can be parsed as a datetime for the day to return data. Only used if requesting a range of dates.
verbose (bool): print verbose output. Defaults to False.
- Returns:
pd.Dataframe: dataframe with columns: Time and columns for each fuel type
- get_interconnection_queue(verbose=False)#
Get interconnection queue
- Returns:
pd.DataFrame: Interconnection queue
- get_load(date, verbose=False)#
Returns load for last 24hrs in 5 minute intervals
- get_load_forecast(date, forecast_type='MID_TERM', verbose=False)#
type (str): MID_TERM is hourly for next 7 days or SHORT_TERM is every five minutes for a few hours
- get_status(date=None, verbose=False)#