Определите, какая деятельность или какой продукт ведут к неквадратной матрице техносферы - PullRequest
0 голосов
/ 20 сентября 2018

Я сделал несколько изменений в моей базе данных lci, используя пакет python Wurst.Затем я переписал свою базу данных, используя write_brightway2_database().

Получение 16718 наборов данных, 462812 обменов и 0 несвязанных обменов.

Затем один раз, когда я пытаюсь вычислить оценку LCA с измененной базой данных, я получаю матрицу техносферы, которая не является квадратной, со следующимизмерение: 16718 действий (столбцы) и 16717 продуктов (строки).

Вот как я пытаюсь вычислить оценку LCA:

lca = LCA({db.random(): 1}, method=lcia_methods['CC'])
lca.lci()
lca.lcia()
print(lca.score)

Полученное сообщение об ошибке:

Неквадратная Техносфера: матрица Техносферы не квадратная: 16718 действий (столбцы) и 16717 товаров (строки).Используйте LeastSquaresLCA для решения этой системы или исправьте входные данные

Затем я попробовал следующее, плюс некоторые варианты, как рекомендовано здесь :

for a in Database("database"):
     assert len(a.production()) == 1

Но нет всплывающего набора данных.

Я также пытался перед перезаписью своей базы данных из Wurst в формате BW2 сделать следующее:

producion = {}

for ds in db:
      key = ds['code']
      producion[key] = []
      for exc in ds['exchanges']:
           if exc['type'] == 'production':
                  producion[key].append(exc['name'])


for v in producion.values():
    if len(v) != 1:
        print(v)

Но, опять же, я не могу определить какой-либо проблемный набор данных, делающий это.

Существует ли простой способ определить, какое действие или какой продукт приводит к неквадратной матрице техносферы для исправления моих входных данных?

1 Ответ

0 голосов
/ 20 сентября 2018

Ошибка в том, что я создал набор данных, в котором поле «имя» в производственном обмене отличалось от «имени» самого набора данных.

Чтобы идентифицировать мой набор данных, я сделал:

for ds in Database("database"):
    for prod_exc in ds.production():
        assert (prod_exc['name']) == ds['name']

Вы можете выполнить тот же тест с ['location'], ['unit'] и другими важными полями.

Другие интересные поля для проверки на совпадение - это ['code'] из самого набора данных и 'code' производственного обмена, расположенного в поле ['input'][1]

for ds in Database("ecoinvent_2030_BAU"):
    for prod_exc in ds.production():
        if ((prod_exc['input'][1]) != ds['code']):
            print((ds['name'],ds['code'],ds['location'],prod_exc['input'], prod_exc['name']))
...