Skip to main content

Economic assessment module for the DTOcean tools

Project description

dtocean-economics actions codecov PyPI - Python Version

dtocean-economics

The DTOcean Economics Module provides functions to assess and compare the economic performance of arrays designed by DTOcean. It generates metrics such as the levelised cost of energy (LCOE). The module can accept multiple operational expenditure and energy production records to generate statistical analysis.

Part of the DTOcean suite of tools.

Installation

pip install dtocean-economics

Usage

An example of calculating the LCOE from a bill of materials, and two different operational expenditure (OPEX) and energy histories.

Create the bill of materials first (in Euro):

>>> import pandas as pd

>>> bom_dict = {'phase': ["One", "One", "One", "Two", "Two", "Two"],
...             'unitary_cost': [0.0, 100000.0, 100000.0, 1, 1, 1],
...             'project_year': [0, 1, 2, 0, 1, 2],
...             'quantity': [1, 1, 1, 1, 10, 20]}
>>> bom_df = pd.DataFrame(bom_dict, columns=["phase",
...                                          "project_year",
...                                          "quantity",
...                                          "unitary_cost"])
>>> bom_df
  phase  project_year  quantity  unitary_cost
0   One             0         1           0.0
1   One             1         1      100000.0
2   One             2         1      100000.0
3   Two             0         1           1.0
4   Two             1        10           1.0
5   Two             2        20           1.0

Now build two independent OPEX records (in Euro):

>>> opex_dict = {'project_year': [0, 1, 2, 3, 4, 5],
...              'cost 0': [0.0, 100000.0, 100000.0, 1, 1, 1],
...              'cost 1': [0.0, 100000.0, 0, 1, 1, 100000.0]}
>>> opex_df = pd.DataFrame(opex_dict, columns=["project_year",
...                                            "cost 0",
...                                            "cost 1"])
>>> opex_df
   project_year    cost 0    cost 1
0             0       0.0       0.0
1             1  100000.0  100000.0
2             2  100000.0       0.0
3             3       1.0       1.0
4             4       1.0       1.0
5             5       1.0  100000.0

And the related energy production records (in Wh):

>>> energy_dict = {'project_year': [0, 1, 2, 3, 4, 5],
...                'energy 0': [0, 1e6, 2e6, 0, 10e6, 20e6],
...                'energy 1': [0, 1e6, 32e6, 0, 0, 20e6]}
>>> energy_df = pd.DataFrame(energy_dict, columns=["project_year",
...                                                "energy 0",
...                                                "energy 1"])
>>> energy_df
   project_year    energy 0    energy 1
0             0         0.0         0.0
1             1   1000000.0   1000000.0
2             2   2000000.0  32000000.0
3             3         0.0         0.0
4             4  10000000.0         0.0
5             5  20000000.0  20000000.0

Process the inputs to calculate the discounted values:

>>> from dtocean_economics import add_costs_to_bom, get_discounted_values
>>> discount_rate = 1 / 5
>>> add_costs_to_bom(bom_df, discount_rate)
>>> bom_df
  phase  project_year  quantity  unitary_cost     costs  discounted_costs
0   One             0         1           0.0       0.0          0.000000
1   One             1         1      100000.0  100000.0      83333.333333
2   One             2         1      100000.0  100000.0      69444.444444
3   Two             0         1           1.0       1.0          1.000000
4   Two             1        10           1.0      10.0          8.333333
5   Two             2        20           1.0      20.0         13.888889

>>> discounted_opex = get_discounted_values(opex_df, discount_rate)
>>> discounted_opex
0    152779.240612
1    123522.151492
dtype: float64

>>> discounted_energy = get_discounted_values(energy_df, discount_rate)
>>> discounted_energy
0    1.508230e+07
1    3.109311e+07
dtype: float64

Now calculate the mean of the LCOE (in Euro/kWh):

>>> discounted_capex = bom_df['discounted_costs'].sum()
>>> discounted_costs = discounted_opex + discounted_capex
>>> lcoe = discounted_costs / discounted_energy * 1000
>>> lcoe
0    20.260845
1     8.886958
dtype: float64

>>> float(lcoe.mean())
14.573901960338254

Development

Development of dtocean-economics uses the Poetry dependency manager. Poetry must be installed and available on the command line.

To install:

poetry install

Tests

A test suite is provided with the source code that uses pytest.

Install the testing dependencies:

poetry install --with test

Additional tests are available for the plugins to dtocean-core. Enable these tests by installing the test-extras group:

poetry install --with test --with test-extras

Run the tests:

poetry run pytest

Code quality can also be audited using the ruff and pyright tools. Install the dependencies:

poetry install --with audit

Run the audit:

poetry run ruff
poetry run pyright src

The above tests can be run across all compatible Python versions using tox and tox-uv. To install:

poetry install --with test --with test-extras --with audit --with tox

To run the tests:

poetry run tox

Contributing

Please see the dtocean GitHub repository for contributing guidelines.

Credits

This package was initially created as part of the EU DTOcean project by:

It is now maintained by Mathew Topper at Data Only Greater.

License

GPL-3.0

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

dtocean_economics-4.0.1.tar.gz (27.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dtocean_economics-4.0.1-py3-none-any.whl (29.5 kB view details)

Uploaded Python 3

File details

Details for the file dtocean_economics-4.0.1.tar.gz.

File metadata

  • Download URL: dtocean_economics-4.0.1.tar.gz
  • Upload date:
  • Size: 27.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dtocean_economics-4.0.1.tar.gz
Algorithm Hash digest
SHA256 041feb0993cb082139c84e896f6479a5606ed6421b2d058d8962cb03f66071e1
MD5 11673b17826bb209d495df61965fbe33
BLAKE2b-256 9a459fc4d93fe7baae399ce80fe60b3306a62fcde96e189c8b3dfb644a4336a4

See more details on using hashes here.

Provenance

The following attestation bundles were made for dtocean_economics-4.0.1.tar.gz:

Publisher: release.yml on DTOcean/dtocean

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dtocean_economics-4.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for dtocean_economics-4.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 31c453b2373fe8ce76d3f59d8160759fde195929337e7d33c443b30f005104f5
MD5 604591b363f3d34f72f371ed440bcb7c
BLAKE2b-256 3c2490f8f90c199ae766d811e629da0cb9421585a09ef5336a0d7108f725330e

See more details on using hashes here.

Provenance

The following attestation bundles were made for dtocean_economics-4.0.1-py3-none-any.whl:

Publisher: release.yml on DTOcean/dtocean

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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