Pyam (compat.pyam)¶
The “IAMC data structure” is a particular data structure with either 6 or 7 dimensions: model, scenario, region, variable, unit, either year or time, and optionally subannual.
Data with this structure are usually stored in a tablular “IAMC format,” wherein each dimension is stored as one column, and the remaining column, labeled value, contains observation values.
Using add_as_pyam() (Computer.add(..., "as_pyam", ...)):
modelandscenarioare populated from the attributes of the object returned by the Computer keyscenario;variablecontains the name(s) of each of the quantities, or others constructed by collapse (see below);unitcontains the units associated with each of the quantities; andyear,time, and optionallysubannualcan be created using rename or collapse operations.
A callback function (collapse) can be supplied that modifies the data before it is converted to an IamDataFrame; for instance, to concatenate extra dimensions into variable labels.
Other dimensions can simply be dropped (with drop).
Dimensions that are not collapsed or dropped will appear as additional columns in the resulting IamDataFrame; this is valid, but non-standard data per the IAMC format.
For example, here the labels for the MESSAGEix t (technology) and m (mode) dimensions are appended to a fixed string to construct variable labels:
c = Computer
def m_t(df):
"""Collapse `t` and `m` dimensions to an IAMC 'Variable' string."""
df["variable"] = "Activity|" + df["t"] + "|" + df["m"]
return df
ACT = c.full_key('ACT')
keys = c.add(ACT, "as_pyam", "ya", collapse=m_t, drop=["t", "m"])
- genno.compat.pyam.HAS_PYAM = False¶
boolindicating whetherpyam: analysis and visualization of integrated-assessment & macro-energy scenariosis available. If either the package is not installed, or it is installed but raises some exception on import, this will beFalse, and the operators and configuration handling in the current module will be unavailable.
- genno.compat.pyam.handle_config(c: Computer, info: MutableMapping) None[source]¶
Handle one entry from the
iamc:config section.
|
Return a |
|
|
This module also registers implementations of concat() and write_report() that handle pyam.IamDataFrame objects.
- genno.compat.pyam.operator.add_as_pyam(func: Callable, c: Computer, quantities: Key | str | Iterable[Key | str], tag: str = 'iamc', /, **kwargs: Any) Key | str | tuple[Key | str, ...][source]¶
Computer.add()helper foras_pyam().Add conversion of one or more quantities to the IAMC data structure.
- genno.compat.pyam.operator.as_pyam(scenario: HasScenarioIdentifiers, quantity: AnyQuantity, *, rename: Mapping[str, str] | None = None, collapse: Callable | None = None, replace: MutableMapping = {}, drop: Collection[str] | str = 'auto', unit: str | None = None, prepend_name: bool = True, model_name: str | None = None, scenario_name: str | None = None) IamDataFrame[source]¶
Return a
pyam.IamDataFramecontaining the data from quantity.Warnings are logged if the arguments result in additional, unhandled columns in the resulting data frame that are not part of the IAMC spec.
The conversion has the following steps:
quantity is converted to a temporary
pandas.DataFrame.Labels for the following IAMC dimensions are filled:
The actions specified by the optional arguments rename, collapse, replace, drop, and unit, if any, are applied in that order.
The resulting data frame is converted to
pyam.IamDataFrame.
- Parameters:
scenario – Any object with
modelandscenarioattributes of typestr, for instance anixmp.ScenarioorScenarioInfo; or astr, which is equivalent to scenario_name.quantity (
Quantity) – Quantity to convert to IAMC data structure.rename (
dict, optional) – Mapping from dimension names in quantity (str) to column names (str); either IAMC dimension names, or others that are consumed by collapse.collapse (
typing.Callable, optional) – Function that takes apandas.DataFrameand returns the same type. This function may collapse 2 or more dimensions, for example to construct labels for the IAMCvariabledimension, or any other.replace (optional) – Values to be replaced and their replaced. Passed directly to
pandas.DataFrame.replace().drop (
strorcollections.abc.Collectionofstr, optional) – Columns to drop. Passed toutil.drop(), so if not given, all non-IAMC columns are dropped.unit (
str, optional) – Label for the IAMCunitdimension. Passed toclean_units().prepend_name (
bool, optional) – IfTrue, theQuantity.nameof quantity is prepended to the IAMCvariabledimension.model_name (
str, optional) – Value for the IAMCmodeldimension.scenario_name (
str, optional) – Value for the IAMCscenariodimension.
- Raises:
ValueError – If the resulting data frame has duplicate keys in the IAMC dimensions.
pyam.IamDataFramecannot handle such data.TypeError – If both scenario and scenario_name are non-empty
str.
- genno.compat.pyam.operator.quantity_from_iamc(qty: TQuantity | IamDataFrame | pandas.DataFrame, variable: str, *, fail: int | str = 'warning') TQuantity[source]¶
Extract data for a single measure from qty with IAMC-like structure.
- Parameters:
qty – Must have at least 2 dimensions named ‘v’ (or ‘variable’, any case) and ‘u’ (or ‘unit’, any case).
variable (
str) – Regular expression to match full labels on thevdimension of qty. If the expression contains match groups, they are used to rewritevlabels: only the contents of the first match group are kept. This may be used to discard a portion of the label.
- Returns:
The ‘variable’ dimension contains reduced labels. The
Quantity.unitsattribute contains the unique units for the subset of data.- Return type:
See also
unique_units_from_dim
Configuration¶
compat.pyam adds a handler for a iamc: configuration file section.
Utilities¶
- genno.compat.pyam.util.IAMC_DIMS = frozenset({'model', 'region', 'scenario', 'time', 'unit', 'variable', 'year'})¶
Dimensions of the IAMC data structure used by
pyam: analysis and visualization of integrated-assessment & macro-energy scenarios.
- genno.compat.pyam.util.clean_units(df: DataFrame, unit: str | Unit | None = None) DataFrame[source]¶
Convert magnitudes and units of df to unit in
str.- Raises:
ValueError – if there is more than one unit.