Как вручную связать в Brightway2 импортированный обмен, если я нашел правильный в ecoinvent

Я связываю свои данные автоматически с

import functools
from bw2io.strategies import link_iterable_by_fields

sp.apply_strategy(functools.partial(
    link_iterable_by_fields, 
    other=Database("ecoinvent 3.2 cutoff"),
    kind="technosphere",
    fields=["reference product", "name", "unit", "location"]
))
sp.statistics()

Когда я перечисляю оставшиеся несвязанные наборы данных с

bw2io.importers.simapro_csv.SimaProCSVImporter

например, выводит:

Electricity, low voltage {ENTSO-E}| market group for | Alloc Rec, U kilowatt hour ('Electricity/heat',)

Учитывая, что я нашел набор данных в ecoinvent:

'market group for electricity, low voltage' (kilowatt hour, ENTSO-E, None)

Как связать эти наборы данных вместе?

1 ответ

Решение

Это набор данных из ecoinvent 3.2, для которого bw2io еще не имеет данных миграции для "специальных" имен SimaPro. Обычно преобразование из имен Simapro (например, Electricity, low voltage {ENTSO-E}| market group for | Alloc Rec, U) к названиям и экоинвентам видов деятельности и справочных продуктов будет относиться миграция simapro-ecoinvent-3, Но это не работает в этом случае:

In [4]: Migration('simapro-ecoinvent-3').load()['Electricity, low voltage {ENTSO-E}| market group for | Alloc Rec, U']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)

Вы можете написать свою собственную миграцию:

migration_data = {
    'fields': ['name'],
    'data': [
        (
            # First element is input data in the order of `fields` above
            ('Electricity, low voltage {ENTSO-E}| market group for | Alloc Rec, U',),
            # Second element is new values 
            {
                'name': 'market group for electricity, low voltage',
                'reference product': 'electricity, high voltage',
                'location': 'ENTSO-E',
            }
        )
    ]
}

Migration("new-ecoinvent").write(
    migration_data, 
    description="New datasets in ecoinvent 3.2"
)

И затем примените эту миграцию к вашим несвязанным данным:

sp.migrate("new-ecoinvent")

Миграция только изменяет данные, используемые для связи; вам все равно придется подать заявку link_iterable_by_fields на самом деле ссылка на экоинвент 3.2.

Другие вопросы по тегам