Skip to main content

Collection of dynamic characterization functions for life cycle inventories with temporal information

Project description

dynamic_characterization

Read the Docs PyPI - Version Conda Version Conda - License

This is a package for the dynamic characterization of Life Cycle Inventories with temporal information. It includes a collection of dynamic characterization functions for various environmental flows. We also provide a simple interface to apply these functions to an existing dynamic LCI (coming from, e.g., bw_temporalis or bw_timex).

The following dynamic characterization functions are currently included:

module impact category metric covered emissions source
ipcc_ar6 climate change radiative forcing 247 GHGs radiative efficiencies & lifetimes from IPCC AR6 Ch.7
original_temporalis_functions climate change radiative forcing CO2, CH4 bw_temporalis

What do dynamic characterization functions do?

The functions are meant to work with a common input format of the dynamic inventory, collected in a pandas DataFrame that looks like this:

date amount flow activity
101 33 1 2
312 21 4 2

Each function takes one row of this dynamic inventory dataframe (i.e. one emission at one point in time) and transform it according to some metric. The output generated by applying a very simple function to both rows of the input dataframe could look like:

date amount flow activity
101 33 1 2
102 31 1 2
103 31 1 2
312 21 4 2
313 20 4 2
314 19 4 2

How do I use this package?

The workflow could look like this:

import pandas as pd
from dynamic_characterization import characterize
from dynamic_characterization.ipcc_ar6 import characterize_co2, characterize_ch4

# defining a dummy dynamic inventory that you somehow got
dynamic_inventory_df = pd.DataFrame(
        data={
            "date": pd.Series(
                data=[
                    "15-12-2020",
                    "20-12-2020",
                    "25-05-2022",
                ],
                dtype="datetime64[s]",
            ),
            "amount": pd.Series(data=[10.0, 20.0, 50.0], dtype="float64"),
            "flow": pd.Series(data=[1, 1, 3], dtype="int"),
            "activity": pd.Series(data=[2, 2, 4], dtype="int"),
        }
    )

df_characterized = characterize(
        dynamic_inventory_df,
        metric="radiative_forcing", # could also be GWP
        characterization_function_dict={
            1: characterize_co2,
            3: characterize_ch4,
        },
        time_horizon=2,
    )

If you use this package with Brightway, stuff can get even easier: if you have an impact assessment method at hand, you can pass it to the characterize function via the base_lcia_method attribute and we'll try to automatically match the flows that are characterized in that method to the flows we have characterization functions for. This matching is based on the names or the CAS numbers, depending on the flow. The function call could look like this then:

method = ('EF v3.1', 'climate change', 'global warming potential (GWP100)')

df_characterized = characterize(
        dynamic_inventory_df,
        metric="radiative_forcing", # could also be GWP
        base_lcia_method=method,
        time_horizon=2,

)

What do dynamic characterization functions look like?

Here's an example of what such a function could look like:

def example_characterization_function(series: namedtuple, period: int = 2) -> namedtuple:
    date_beginning: np.datetime64 = series.date.to_numpy()
    dates_characterized: np.ndarray = date_beginning + np.arange(
        start=0, stop=period, dtype="timedelta64[D]"
    ).astype("timedelta64[s]")

    amount_beginning: float = series.amount

    # in reality, this would probably something more complex like an exponential decay function
    amount_characterized: np.ndarray = amount_beginning - np.arange(
        start=0, stop=period, dtype="int"
    )

    return namedtuple("CharacterizedRow", ["date", "amount", "flow", "activity"])(
        date=np.array(dates_characterized, dtype="datetime64[s]"),
        amount=amount_characterized,
        flow=series.flow,
        activity=series.activity,
    )

Installation

You can install dynamic_characterization via [pip] from [PyPI]:

$ pip install dynamic_characterization

Alternatively, you can also use conda:

$ conda install -c diepers dynamic_characterization

Contributing

Contributions are very welcome. To learn more, see the Contributor Guide.

License

Distributed under the terms of the BSD 3 Clause license, dynamic_characterization is free and open source software.

Issues

If you encounter any problems, please file an issue along with a detailed description.

Support

If you have any questions or need help, do not hesitate to contact Timo Diepers (timo.diepers@ltt.rwth-aachen.de)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dynamic_characterization-1.0.3.tar.gz (953.8 kB view details)

Uploaded Source

Built Distribution

dynamic_characterization-1.0.3-py3-none-any.whl (960.0 kB view details)

Uploaded Python 3

File details

Details for the file dynamic_characterization-1.0.3.tar.gz.

File metadata

File hashes

Hashes for dynamic_characterization-1.0.3.tar.gz
Algorithm Hash digest
SHA256 ade49bc9b5599c0b564d99a0bf0d4a0591916f6ac4977f4f02b6ae3d90abca73
MD5 caee375cf223876b01088dfc2e6a496f
BLAKE2b-256 3d8be154a027b07d92781286606568b4a4590a92c4a3704b368520a907cc23aa

See more details on using hashes here.

File details

Details for the file dynamic_characterization-1.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for dynamic_characterization-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 8f2fb10d18be8576e2c2384173cead08503df78e73a159272c3e36279f1a7a7c
MD5 63adaad94c372ae534942636a935d0c7
BLAKE2b-256 2238e38112c15cb66f45e3404573d833f34ede89a5c4c4641169957e0723febf

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page