reVX.plexos.rev_reeds_plexos.PlexosAggregation

class PlexosAggregation(plexos_nodes, rev_sc, reeds_build, cf_fpath, forecast_fpath=None, build_year=2050, plexos_columns=None, force_full_build=False, force_shape_map=False, plant_name_col=None, tech_tag=None, res_class=None, timezone='UTC', dset_tag=None, max_workers=None)[source]

Bases: BaseProfileAggregation

Framework to aggregate reV gen profiles to PLEXOS node power profiles. This class takes as input the plexos nodes meta data (lat/lon or shape files), rev supply curve table, and reeds buildout table (specifying which rev sc points were built and at what capacity). The class will build power profiles for each supply curve point and then aggregate the sc point profiles to the nearest neighbor plexos node (if plexos nodes are defined by lat/lon) or the shape intersect plexos node (if plexos nodes are defined by shape file).

Parameters:
  • plexos_nodes (str | pd.DataFrame) – Plexos node meta data including gid, latitude, longitude, voltage. Or file path to .csv containing plexos node meta data, or a file path to a .shp file that contains plexos nodes defined as shapes.

  • rev_sc (str | pd.DataFrame) – reV supply curve results table including SC gid, latitude, longitude, res_gids, gid_counts. Or file path to reV supply curve table.

  • reeds_build (str | pd.DataFrame) – ReEDS buildout with rows for built capacity (MW) at each reV SC point. This should have columns: reeds_year, built_capacity, and sc_gid (corresponding to the reV supply curve point gid). Some cleaning of the column names will be performed for legacy tables but these are the column headers that are desired. This input can also include “plexos_node_gid” which will explicitly assign a supply curve point buildout to a single plexos node. If included, all points must be assigned to plexos nodes.

  • cf_fpath (str) – File path to capacity factor file (reV gen output) to get profiles from.

  • forecast_fpath (str | None) – Forecasted capacity factor .h5 file path (reV results). If not None, the supply curve res_gids are mapped to sites in the cf_fpath, then the coordinates from cf_fpath are mapped to the nearest neighbor sites in the forecast_fpath, where the final generation profiles are retrieved from.

  • build_year (int, optional) – REEDS year of interest, by default 2050

  • plexos_columns (list | None) – Additional columns from the plexos_nodes input to pass through to the output meta data.

  • force_full_build (bool) – Flag to ensure the full requested buildout is built at each SC point. If True, the remainder of the requested build will always be built at the last resource gid in the sc point.

  • force_shape_map (bool) – Flag to force the mapping of supply curve points to the plexos node shape file input (if a shape file is input) via nearest neighbor to shape centroid.

  • plant_name_col (str | None) – Column in plexos_table that has the plant name that should be used in the plexos output csv column headers.

  • tech_tag (str | None) – Optional technology tag to include as a suffix in the plexos output csv column headers.

  • res_class (int | None) – Optional resource class to use to filter supply curve points. For example, if res_class = 3 then only supply curve points with class 3 will be kept in the sc_build table. This filters the on the ‘class’ column in the reeds_build table.

  • timezone (str) – Timezone for output generation profiles. This is a string that will be passed to pytz.timezone() e.g. US/Pacific, US/Mountain, US/Central, US/Eastern, or UTC. For a list of all available timezones, see pytz.all_timezones

  • dset_tag (str) – Dataset tag to append to dataset names in cf profile file. e.g. If the cf profile file is a multi year file using dset_tag=”-2008” will enable us to select the corresponding datasets (cf_mean-2008, cf_profile-2008, etc)

  • max_workers (int | None) – Max workers for parallel profile aggregation. None uses all available workers. 1 will run in serial.

Methods

export(meta, time_index, profiles, out_fpath)

Export generation profiles to h5 and plexos-formatted csv

get_unique_plant_names(table, name_col[, ...])

Get a list of ordered unique plant names

make_profiles()

Make a 2D array of aggregated plexos gen profiles.

run(plexos_nodes, rev_sc, reeds_build, cf_fpath)

Run plexos aggregation.

tz_convert_profiles(profiles, timezone)

Convert profiles to local time and forward/back fill missing data.

Attributes

available_res_gids

Resource gids available in the cf file.

forecast_map

An array mapping the reV "actuals" generation data to forecast data of a different resolution (if input).

n_plexos_nodes

Get the number of unique plexos nodes in this buildout.

node_map

Nearest neighbor output mapping rev supply curve points to plants or plexos nodes.

plexos_meta

Get plexos node meta data for the nodes included in this problem.

sc_build

Get the reV supply curve table reduced to just those points built by reeds including a built_capacity column in MW.

sc_res_gids

List of unique resource GIDS in the REEDS build out.

time_index

Get the generation profile time index.

tz_alias

Get a short 3-char tz alias if the timezone is common in the US (pst, mst, cst, est)

property plexos_meta

Get plexos node meta data for the nodes included in this problem.

Returns:

plexos_meta (pd.DataFrame) – Plexos meta dataframe reduced to the nodes in this problem.

property n_plexos_nodes

Get the number of unique plexos nodes in this buildout.

Returns:

n (int) – Number of unique plexos nodes in this buildout

property sc_res_gids

List of unique resource GIDS in the REEDS build out.

Returns:

sc_res_gids (np.ndarray) – Array of resource GIDs associated with this REEDS buildout.

property sc_build

Get the reV supply curve table reduced to just those points built by reeds including a built_capacity column in MW.

Returns:

pd.DataFrame

make_profiles()[source]

Make a 2D array of aggregated plexos gen profiles.

Returns:

profiles (np.ndarray) – (t, n) array of Plexos node generation profiles where t is the timeseries length and n is the number of plexos nodes.

classmethod run(plexos_nodes, rev_sc, reeds_build, cf_fpath, forecast_fpath=None, build_year=2050, plexos_columns=None, force_full_build=False, force_shape_map=False, plant_name_col=None, tech_tag=None, res_class=None, timezone='UTC', dset_tag=None, out_fpath=None, max_workers=None)[source]

Run plexos aggregation.

Parameters:
  • plexos_nodes (str | pd.DataFrame) – Plexos node meta data including gid, latitude, longitude, voltage. Or file path to .csv containing plexos node meta data, or a file path to a .shp file that contains plexos nodes defined as shapes.

  • rev_sc (str | pd.DataFrame) – reV supply curve results table including SC gid, latitude, longitude, res_gids, gid_counts. Or file path to reV supply curve table. Note that the gen_gids column in the rev_sc is ignored and only the res_gids from rev_sc are mapped to the corresponding “gid” column in the cf_fpath meta data.

  • reeds_build (pd.DataFrame) – ReEDS buildout with rows for built capacity (MW) at each reV SC point. This should have columns: reeds_year, built_capacity, and sc_gid (corresponding to the reV supply curve point gid). Some cleaning of the column names will be performed for legacy tables but these are the column headers that are desired. This input can also include “plexos_node_gid” which will explicitly assign a supply curve point buildout to a single plexos node. If included, all points must be assigned to plexos nodes.

  • cf_fpath (str) – File path to capacity factor file (reV gen output) to get profiles from.

  • forecast_fpath (str | None) – Forecasted capacity factor .h5 file path (reV results). If not None, the supply curve res_gids are mapped to sites in the cf_fpath, then the coordinates from cf_fpath are mapped to the nearest neighbor sites in the forecast_fpath, where the final generation profiles are retrieved from.

  • build_year (int) – REEDS year of interest.

  • plexos_columns (list | None) – Additional columns from the plexos_nodes input to pass through to the output meta data.

  • force_full_build (bool) – Flag to ensure the full requested buildout is built at each SC point. If True, the remainder of the requested build will always be built at the last resource gid in the sc point.

  • force_shape_map (bool) – Flag to force the mapping of supply curve points to the plexos node shape file input (if a shape file is input) via nearest neighbor to shape centroid.

  • plant_name_col (str | None) – Column in plexos_table that has the plant name that should be used in the plexos output csv column headers.

  • tech_tag (str | None) – Optional technology tag to include as a suffix in the plexos output csv column headers.

  • res_class (int | None) – Optional resource class to use to filter supply curve points. For example, if res_class = 3 then only supply curve points with class 3 will be kept in the sc_build table.

  • timezone (str) – Timezone for output generation profiles. This is a string that will be passed to pytz.timezone() e.g. US/Pacific, US/Mountain, US/Central, US/Eastern, or UTC. For a list of all available timezones, see pytz.all_timezones

  • dset_tag (str) – Dataset tag to append to dataset names in cf profile file. e.g. If the cf profile file is a multi year file using dset_tag=”-2008” will enable us to select the corresponding datasets (cf_mean-2008, cf_profile-2008, etc)

  • out_fpath (str, optional) – Path to .h5 file into which plant buildout should be saved. A plexos-formatted csv will also be written in the same directory. By default None.

  • max_workers (int | None) – Max workers for parallel profile aggregation. None uses all available workers. 1 will run in serial.

Returns:

  • plexos_meta (pd.DataFrame) – Plexos node meta data with built capacities.

  • time_index (pd.datetimeindex) – Time index for the profiles.

  • profiles (np.ndarray) – Generation profile timeseries at each plexos node.

property available_res_gids

Resource gids available in the cf file.

Returns:

res_gids (np.ndarray) – Array of resource GIDs available in the cf file.

export(meta, time_index, profiles, out_fpath)

Export generation profiles to h5 and plexos-formatted csv

Parameters:
  • plant_meta (pd.DataFrame) – Plant / plexos node meta data with built capacities and mappings to the resource used.

  • time_index (pd.datetimeindex) – Time index for the profiles.

  • profiles (np.ndarray) – Generation profile timeseries in MW at each plant / plexos node.

  • out_fpath (str, optional) – Path to .h5 file into which plant buildout should be saved. A plexos-formatted csv will also be written in the same directory. By default None.

property forecast_map

An array mapping the reV “actuals” generation data to forecast data of a different resolution (if input). This is an (n, 1) array where n is the number of “actuals” generation data points. So self.forecast_map[9] yields the forecast index that corresponds to index 9 in the cf_fpath reV generation output.

Returns:

np.ndarray | None

static get_unique_plant_names(table, name_col, tech_tag=None)

Get a list of ordered unique plant names

Parameters:
  • table (pd.DataFrame) – Plexos / plant meta data table where every row is a plant

  • name_col (str) – Column label in table. Exception will be raised if not found.

  • tech_tag (str) – Technology tag to append to plant names like “pv” or “wind”

Returns:

names (list | None) – List of unique plant names

property node_map

Nearest neighbor output mapping rev supply curve points to plants or plexos nodes.

Returns:

np.ndarray

property time_index

Get the generation profile time index.

Returns:

time_index (pd.Datetimeindex) – Pandas datetime index sourced from the capacity factor data.

property tz_alias

Get a short 3-char tz alias if the timezone is common in the US (pst, mst, cst, est)

Returns:

str

static tz_convert_profiles(profiles, timezone)

Convert profiles to local time and forward/back fill missing data.

Parameters:
  • profiles (np.ndarray) – Profiles of shape (time, n_plants) in UTC

  • timezone (str) – Timezone for output generation profiles. This is a string that will be passed to pytz.timezone() e.g. US/Pacific, US/Mountain, US/Central, US/Eastern, or UTC. For a list of all available timezones, see pytz.all_timezones

Returns:

profiles (np.ndarray) – Profiles of shape (time, n_plants) in timezone