Проблема импорта базы данных в Brightway2 Excel .write_database () ecoinvent - PullRequest
1 голос
/ 07 марта 2020

Прежде всего, я довольно новичок в bw2 и LCA в целом, поэтому, пожалуйста, поймите.

В настоящее время я работаю над инструментом, который экспортирует обмены по экоинвентам в Excel-лист. На листе Excel я хотел бы изменить суммы и добавить новые или удалить обмены. После этого я планировал использовать этот лист Excel в качестве базы данных для LCA.

У меня есть два вопроса:

1) На данный момент у меня есть лист Excel с заданием и его обмены готовы загрузить в блокнот Jupyter. Я использовал структуру "excel_importer_example" из Maxkoslowski "Brightway2_Intro". Это работает нормально, пока я не буду использовать ".write_database ()". Как-то не получится. Я получаю сообщение об ошибке, которое мне совсем не помогает:

*InvalidExchange                           Traceback (most recent call last)
<ipython-input-149-0d0d7c5cd566> in <module>
----> 1 imp.write_database() #hier das Problem: Database wird nicht gespeichert, obwohl Datei in Zeile drüber gefunden wird
~\Miniconda3\envs\tomaten\lib\site-packages\bw2io\importers\excel.py in write_database(self, **kwargs)
    257         """Same as base ``write_database`` method, but ``activate_parameters`` is True by default."""
    258         kwargs['activate_parameters'] = kwargs.get('activate_parameters', True)
--> 259         super(ExcelImporter, self).write_database(**kwargs)
    260 
    261     def get_activity(self, sn, ws):
~\Miniconda3\envs\tomaten\lib\site-packages\bw2io\importers\base_lci.py in write_database(self, data, delete_existing, backend, activate_parameters, **kwargs)
    238 
    239         existing.update(data)
--> 240         db.write(existing)
    241 
    242         if activate_parameters:
~\Miniconda3\envs\tomaten\lib\site-packages\wrapt\wrappers.py in __call__(self, *args, **kwargs)
    604                 return self._self_wrapper(wrapped, instance, args, kwargs)
    605 
--> 606             return self._self_wrapper(self.__wrapped__, self._self_instance,
    607                     args, kwargs)
    608 
~\Miniconda3\envs\tomaten\lib\site-packages\bw2data\project.py in writable_project(wrapped, instance, args, kwargs)
    354     if projects.read_only:
    355         raise ReadOnlyProject(READ_ONLY_PROJECT)
--> 356     return wrapped(*args, **kwargs)
~\Miniconda3\envs\tomaten\lib\site-packages\bw2data\backends\peewee\database.py in write(self, data, process)
    258         if data:
    259             try:
--> 260                 self._efficient_write_many_data(data)
    261             except:
    262                 # Purge all data from database, then reraise
~\Miniconda3\envs\tomaten\lib\site-packages\bw2data\backends\peewee\database.py in _efficient_write_many_data(self, data, indices)
    202 
    203             for index, (key, ds) in enumerate(data.items()):
--> 204                 exchanges, activities = self._efficient_write_dataset(
    205                     index, key, ds, exchanges, activities
    206                 )
~\Miniconda3\envs\tomaten\lib\site-packages\bw2data\backends\peewee\database.py in _efficient_write_dataset(self, index, key, ds, exchanges, activities)
    154         for exchange in ds.get('exchanges', []):
    155             if 'input' not in exchange or 'amount' not in exchange:
--> 156                 raise InvalidExchange
    157             if 'type' not in exchange:
    158                 raise UntypedExchange
InvalidExchange:

Кто-нибудь знает, в чем может быть проблема?

2) Возможно ли, что мой план сработает? Следующая проблема, о которой я читал, заключается в том, что несвязанные обмены, похоже, представляют собой большую проблему, и все мои сообщения не связаны.

Заранее спасибо!

1 Ответ

1 голос
/ 09 марта 2020

Если у вас есть несвязанные обмены, вы не можете импортировать базу данных !

Brightway является фундаментом для проведения матричных вычислений. Чтобы правильно построить матрицы, для каждой точки данных нам нужно знать три вещи: строку, столбец и число для вставки.

В приведенной вами ошибке в самом конце вы видите следующее:

    155             if 'input' not in exchange or 'amount' not in exchange:
--> 156                 raise InvalidExchange

Это не очень информативно, но вы можете увидеть здесь, что либо input (это будет строка; столбец output), либо amount (это будет число) отсутствует. Как вы позже заявили, что «все мои не связаны», я предполагаю, что поле input является виновником.

Если ваши обмены не связаны, то у нас есть точки данных с числами, и мы знаем, индексы столбцов, но не знаю строк. Мы не можем использовать их для построения матриц, поэтому возникает ошибка. Чтобы это исправить, мы должны сообщить программе, как найти правильную строку.

Библиотека Brightway bw2io использует «стратегии» для этой связи. Поскольку мы поддерживаем несколько форматов файлов и ментальных моделей, не существует единого способа сделать что-то Data IO в Brightway - большая тема, но она описана в документации. Существует несколько примеров записных книжек о том, как связывать данные, и раздел в документации по импорту и экспорту .

...