Pjm#
Module Contents#
Classes Summary#
PJM |
Attributes Summary#
Contents#
- class gridstatus.pjm.PJM(api_key=None, retries=DEFAULT_RETRIES)[source]#
Bases:
gridstatus.base.ISOBasePJM
- Parameters:
api_key (str, optional) – PJM API key. Alternatively, can be set in PJM_API_KEY environment variable. Register for an API key at https://www.pjm.com/
Attributes
default_timezone
US/Eastern
hub_node_ids
[‘51217’, ‘116013751’, ‘35010337’, ‘34497151’, ‘34497127’, ‘34497125’, ‘33092315’, ‘33092313’, ‘33092311’, ‘4669664’, ‘51288’, ‘51287’]
interconnection_homepage
https://www.pjm.com/planning/service-requests/services-request-status
iso_id
pjm
load_forecast_endpoint_name
load_frcstd_7_day
load_forecast_historical_endpoint_name
load_frcstd_hist
locale_abbreviated_to_full
None
location_types
[‘ZONE’, ‘LOAD’, ‘GEN’, ‘AGGREGATE’, ‘INTERFACE’, ‘EXT’, ‘HUB’, ‘EHV’, ‘TIE’, ‘RESIDUAL_METERED_EDC’]
markets
None
name
PJM
price_node_ids
[‘5021703’, ‘5021704’, ‘5021723’, ‘5021724’, ‘93354015’, ‘93354017’, ‘93354019’, ‘34887765’, ‘34887767’, ‘34887769’, ‘34887771’, ‘34887773’, ‘34887775’, ‘34887777’, ‘2156111970’, ‘34887779’, ‘34887781’, ‘34887783’, ‘34887787’, ‘34887789’, ‘34887791’, ‘34887793’, ‘74008711’, ‘34887819’, ‘34887821’, ‘34887823’, ‘2156112027’, ‘34887845’, ‘1439658151’, ‘34887847’, ‘34887849’, ‘74008743’, ‘34887851’, ‘34887853’, ‘1123180720’, ‘34887857’, ‘1123180722’, ‘34887859’, ‘1123180723’, ‘34887861’, ‘1123180721’, ‘34887871’, ‘34887873’, ‘34887887’, ‘34887889’, ‘34887891’, ‘34887893’, ‘34887895’, ‘1207075032’, ‘34887897’, ‘34887899’, ‘34887901’, ‘34887911’, ‘34887913’, ‘34887915’, ‘34887917’, ‘34887923’, ‘1097732340’, ‘34887925’, ‘34887927’, ‘34887929’, ‘34887935’, ‘34887937’, ‘34887939’, ‘34887941’, ‘34887949’, ‘34887951’, ‘34887953’, ‘34887955’, ‘1552845076’, ‘34887957’, ‘1552845077’, ‘34887959’, ‘1552845078’, ‘34887961’, ‘34887963’, ‘34887965’, ‘34887967’, ‘34887969’, ‘34887971’, ‘1305131304’, ‘34887977’, ‘1305131306’, ‘34887993’, ‘34887997’, ‘34887999’, ‘34888001’, ‘119118151’, ‘2156114262’, ‘1379266905’, ‘1379266906’, ‘1097732449’, ‘1292915048’, ‘1132294512’, ‘1132294513’, ‘1132294514’, ‘1132294515’, ‘1552845186’, ‘106856851’, ‘2156112284’, ‘1305131444’, ‘119118263’, ‘119118265’, ‘119118267’, ‘119118269’, ‘119118271’, ‘106856905’, ‘2156110343’, ‘40243747’, ‘71856675’, ‘40243749’, ‘71856677’, ‘40243751’, ‘40243753’, ‘40243755’, ‘40243757’, ‘40243759’, ‘40243761’, ‘40243763’, ‘40243765’, ‘40243767’, ‘40243769’, ‘40243771’, ‘40243773’, ‘40243775’, ‘40243777’, ‘40243779’, ‘1248991825’, ‘1248991826’, ‘1248991827’, ‘40243801’, ‘40243803’, ‘40243805’, ‘40243807’, ‘135389793’, ‘135389819’, ‘40243837’, ‘1666116222’, ‘1666116223’, ‘1666116224’, ‘1666116225’, ‘40243839’, ‘1356163765’, ‘38367965’, ‘38367967’, ‘38367969’, ‘1218915048’, ‘1218915049’, ‘1218915050’, ‘1218915051’, ‘1388614399’, ‘2156110624’, ‘32418611’, ‘32418613’, ‘32418615’, ‘32418617’, ‘1388614460’, ‘1084390238’, ‘1218915186’, ‘1218915187’, ‘1369011076’, ‘1369011077’, ‘1369011078’, ‘1268571042’, ‘98370477’, ‘1084390354’, ‘93140’, ‘93141’, ‘93142’, ‘93143’, ‘93144’, ‘93145’, ‘98370523’, ‘98370525’, ‘98370527’, ‘98370529’, ‘98370531’, ‘98370533’, ‘98370535’, ‘1552843818’, ‘57967665’, ‘1552843913’, ‘1552843915’, ‘1552843916’, ‘1356162213’, ‘1356162214’, ‘50401’, ‘48934161’, ‘48934163’, ‘48934165’, ‘48934167’, ‘48934169’, ‘36181299’, ‘50488’, ‘50489’, ‘50490’, ‘36181325’, ‘2156113262’, ‘50542’, ‘50543’, ‘50557’, ‘50558’, ‘2156113284’, ‘50578’, ‘50579’, ‘50581’, ‘50621’, ‘50622’, ‘87901631’, ‘50628’, ‘50629’, ‘50654’, ‘50655’, ‘50659’, ‘50660’, ‘50661’, ‘50662’, ‘2156111333’, ‘1048047’, ‘1048049’, ‘1048050’, ‘1048051’, ‘1048052’, ‘21601782’, ‘21601783’, ‘21601784’, ‘21601785’, ‘21601786’, ‘50695’, ‘50696’, ‘50697’, ‘50698’, ‘50699’, ‘2041990671’, ‘123901459’, ‘123901461’, ‘123901463’, ‘123901465’, ‘123901467’, ‘50715’, ‘50716’, ‘50717’, ‘50727’, ‘50728’, ‘50729’, ‘50730’, ‘2156113457’, ‘2156113469’, ‘50764’, ‘2156113488’, ‘50769’, ‘50770’, ‘50771’, ‘50777’, ‘50778’, ‘50779’, ‘123901537’, ‘123901539’, ‘123901543’, ‘31020649’, ‘123901545’, ‘31020651’, ‘31020653’, ‘50809’, ‘50810’, ‘50811’, ‘50812’, ‘50813’, ‘50814’, ‘50817’, ‘50818’, ‘1165479564’, ‘2156109456’, ‘50887’, ‘50888’, ‘50893’, ‘50894’, ‘50911’, ‘50915’, ‘32417525’, ‘32417527’, ‘2156111608’, ‘1218914041’, ‘1218914042’, ‘1218914043’, ‘32417545’, ‘32417547’, ‘1183231801’, ‘32417599’, ‘32417601’, ‘32417603’, ‘32417605’, ‘51019’, ‘51020’, ‘51021’, ‘1348263767’, ‘32417625’, ‘32417627’, ‘32417629’, ‘32417631’, ‘32417633’, ‘32417635’, ‘1379268471’, ‘1379268472’, ‘1379268473’, ‘1379268474’, ‘1379268475’, ‘1379268476’, ‘63381383’, ‘63381385’, ‘2156111770’, ‘2156109760’, ‘2156109763’, ‘2156109765’, ‘2156109768’, ‘2156109772’, ‘2156109777’, ‘5021665’, ‘5021666’, ‘5021667’, ‘2156111847’, ‘93353961’, ‘93353963’, ‘93353965’]
service_type_abbreviated_to_full
None
zone_node_ids
[‘1’, ‘3’, ‘51291’, ‘51292’, ‘51293’, ‘51295’, ‘51296’, ‘51297’, ‘51298’, ‘51299’, ‘51300’, ‘51301’, ‘7633629’, ‘8394954’, ‘8445784’, ‘33092371’, ‘34508503’, ‘34964545’, ‘37737283’, ‘116013753’, ‘124076095’, ‘970242670’, ‘1709725933’]
Methods
Retrieves the day-ahead ancillary service market results from :
Retrieves the day ahead demand bids data from:
Retrieves the forecasted generation outages for the next 90 days from:
Get fuel mix for a date or date range in hourly intervals
Retrieves the generation outage data
Get 5 minute LMPs from the Integrated Forward Market (IFM)
Returns LMP at a previous date
Returns load at a previous date at 5 minute intervals
Load forecast made today extending for six days in hourly intervals.
Historical load forecast in hourly intervals. Historical forecasts include all
Retrieves the hourly metered load data from:
Retrieves the marginal value data from:
Retrieves the marginal value data from:
Retrieves the reserve market quantities in Megawatts from:
Area projected data for the peak of the day
RTO-wide projected data for the peak of the day
Retrieves the real-time ancillary service market results from :
Retrieves the 5-min solar forecast including behind the meter solar forecast.
Retrieves the hourly solar forecast including behind the meter solar forecast.
Retrieves the 5 min solar generation data from:
Retrieves the current solar generation information from:
Retrieves the transfer interface information from:
Retrieves the transmission constraints data from:
Retrieves the current transmission limit information from:
Retrieves the 5-min wind forecast
Retrieves the hourly wind forecast
Retrieves the current wind generation information from:
Retrieves the instantaneous wind generation data from:
- get_dam_as_market_results(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool | None = False)[source]#
Retrieves the day-ahead ancillary service market results from : https://dataminer2.pjm.com/feed/da_reserve_market_results/definition Data is published daily.
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with day-ahead ancillary service market results.
- Return type:
pandas.DataFrame
- get_day_ahead_demand_bids(date, end=None, verbose=False)[source]#
Retrieves the day ahead demand bids data from: https://dataminer2.pjm.com/feed/hrl_dmd_bids/definition
- get_forecasted_generation_outages(date, end=None, verbose=False)[source]#
Retrieves the forecasted generation outages for the next 90 days from:
https://dataminer2.pjm.com/feed/frcstd_gen_outages/definition
- get_fuel_mix(date, end=None, verbose=False)[source]#
Get fuel mix for a date or date range in hourly intervals
- get_gen_outages_by_type(date, end=None, verbose=False)[source]#
Retrieves the generation outage data From: https://dataminer2.pjm.com/feed/gen_outages_by_type/definition
- get_it_sced_lmp_5_min(date, end=None, verbose=False)[source]#
Get 5 minute LMPs from the Integrated Forward Market (IFM)
- get_lmp(date, market: str, end=None, locations='hubs', location_type=None, verbose=False)[source]#
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
Return Location Id, Location Name, Location Short Name.
- Parameters:
date (datetime.date, str) – date to get LMPs for
end (datetime.date, str) – 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)[source]#
Returns load at a previous date at 5 minute intervals
- Parameters:
date (datetime.date, str) – date to get load for. must be in last 30 days
- Returns:
Load data time series. Columns: Time, Load, and all areas
Load columns represent PJM-wide load
Returns data for the following areas: AE, AEP, APS, ATSI,
BC, COMED, DAYTON, DEOK, DOM, DPL, DUQ, EKPC, JC, ME, PE, PEP, PJM MID ATLANTIC REGION, PJM RTO, PJM SOUTHERN REGION, PJM WESTERN REGION, PL, PN, PS, RECO
- Return type:
pd.DataFrame
- get_load_forecast(date, end=None, verbose=False)[source]#
Load forecast made today extending for six days in hourly intervals.
Today’s forecast updates every every half hour on the quarter E.g. 1:15 and 1:45
- get_load_forecast_historical(date, end=None, verbose=False)[source]#
Historical load forecast in hourly intervals. Historical forecasts include all vintages of the forecast but has fewer regions than the current forecast.
- get_load_metered_hourly(date, end=None, verbose=False)[source]#
Retrieves the hourly metered load data from:
- get_marginal_value_day_ahead_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False)[source]#
Retrieves the marginal value data from: https://dataminer2.pjm.com/feed/da_marginal_value/definition
- get_marginal_value_real_time_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False)[source]#
Retrieves the marginal value data from: https://dataminer2.pjm.com/feed/rt_marginal_value/definition
- get_operational_reserves(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool | None = False)[source]#
Retrieves the reserve market quantities in Megawatts from: https://dataminer2.pjm.com/feed/operational_reserves/definition Only available in past 15 days.
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
- A DataFrame with reserve market quantities
in 15 second intervals.
- Return type:
pandas.DataFrame
- get_projected_area_statistics_at_peak(date, end=None, verbose=False)[source]#
Area projected data for the peak of the day
https://dataminer2.pjm.com/feed/ops_sum_frcst_peak_area/definition
- get_projected_rto_statistics_at_peak(date, end=None, verbose=False)[source]#
RTO-wide projected data for the peak of the day
https://dataminer2.pjm.com/feed/ops_sum_frcst_peak_rto/definition
- get_real_time_as_market_results(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool | None = False)[source]#
Retrieves the real-time ancillary service market results from : https://dataminer2.pjm.com/feed/reserve_market_results/definition Data for the previous day is published daily on business days, typically between 11am and 12pm market time.
Data granularity changed on Sep 1, 2022 so when querying data, start and end dates must both be before or both after that date.
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with real-time ancillary service market results.
- Return type:
pandas.DataFrame
- get_solar_forecast_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the 5-min solar forecast including behind the meter solar forecast. From: https://dataminer2.pjm.com/feed/five_min_solar_power_forecast/definition Only available in past 30 days
- Parameters:
date (str | pd.Timestamp) – Start datetime for data
end (str | pd.Timestamp | None, optional) – End datetime for data. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with the solar forecast data.
- Return type:
pd.DataFrame
- get_solar_forecast_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the hourly solar forecast including behind the meter solar forecast. From: https://dataminer2.pjm.com/feed/hourly_solar_power_forecast/definition Only available in past 30 days
- Parameters:
date (str | pd.Timestamp) – Start datetime for data
end (str | pd.Timestamp | None, optional) – End datetime for data. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with the solar forecast data.
- Return type:
pd.DataFrame
- get_solar_generation_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool | None = False)[source]#
Retrieves the 5 min solar generation data from: https://dataminer2.pjm.com/feed/five_min_solar_generation/definition Only available in past 30 days.
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with 5 minute solar generation data.
- Return type:
pandas.DataFrame
- get_solar_generation_by_area(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool | None = False)[source]#
Retrieves the current solar generation information from: https://dataminer2.pjm.com/feed/solar_gen/definition Data is published daily around 7am market time.
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with solar generation information.
- Return type:
pandas.DataFrame
- get_transfer_interface_information_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool | None = False)[source]#
Retrieves the transfer interface information from: https://dataminer2.pjm.com/feed/transfer_interface_infor/definition Only available in past 30 days.
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with transfer interface information in 5 minute intervals.
- Return type:
pandas.DataFrame
- get_transmission_constraints_day_ahead_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp = None, verbose: bool = False)[source]#
Retrieves the transmission constraints data from: https://dataminer2.pjm.com/feed/da_transconstraints/definition
- get_transmission_limits(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool | None = False)[source]#
Retrieves the current transmission limit information from: https://dataminer2.pjm.com/feed/transfer_interface_infor/definition Only available in past 30 days. Data is published only when constraints exist for that five minute interval.
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with transmission limit information in 5 minute intervals, when data is available.
- Return type:
pandas.DataFrame
- get_wind_forecast_5_min(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the 5-min wind forecast From: https://dataminer2.pjm.com/feed/five_min_wind_power_forecast/definition Only available in past 30 days
- Parameters:
date (str | pd.Timestamp) – Start datetime for data
end (Optional[str | pd.Timestamp], optional) – End datetime for data. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with the wind forecast data.
- Return type:
pd.DataFrame
- get_wind_forecast_hourly(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool = False) pandas.DataFrame[source]#
Retrieves the hourly wind forecast From: https://dataminer2.pjm.com/feed/hourly_wind_power_forecast/definition Only available in past 30 days
- Parameters:
date (str | pd.Timestamp) – Start datetime for data
end (Optional[str | pd.Timestamp], optional) – End datetime for data. Defaults to None.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with the wind forecast data.
- Return type:
pd.DataFrame
- get_wind_generation_by_area(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool | None = False)[source]#
Retrieves the current wind generation information from: https://dataminer2.pjm.com/feed/wind_gen/definition Data is published daily around 7am market time.
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
A DataFrame with wind generation information.
- Return type:
pandas.DataFrame
- get_wind_generation_instantaneous(date: str | pandas.Timestamp, end: str | pandas.Timestamp | None = None, verbose: bool | None = False)[source]#
Retrieves the instantaneous wind generation data from: https://dataminer2.pjm.com/feed/instantaneous_wind_gen/definition Only available in past 30 days.
- Parameters:
date (str or pandas.Timestamp) – Start datetime for data
end – (str or pandas.Timestamp, optional): End datetime for data. Defaults to one day past date if not specified.
verbose (bool, optional) – print verbose output. Defaults to False.
- Returns:
- A DataFrame with instantaneous wind generation data
in 15 second intervals.
- Return type:
pandas.DataFrame