0

我使用 Wurst python 包对我的 lci 数据库进行了一些更改。然后我使用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)

我得到的错误信息:

NonsquareTechnosphere:Technosphere 矩阵不是方形的:16718 个活动(列)和 16717 个产品(行)。使用 LeastSquaresLCA 解决这个系统,或者修复输入数据

然后,我尝试了以下方法,以及此处推荐的一些变体:

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

但是没有弹出数据集。

在以 BW2 格式从 Wurst 重写我的数据库之前,我还尝试过执行以下操作:

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)

但同样,我无法识别任何有问题的数据集这样做。

是否有一种简单的方法可以识别哪些活动或哪些产品导致了非方形技术领域矩阵,以修复我的输入数据?

4

1 回答 1

1

错误是我创建了一个数据集,其中我的生产交换中的“名称”字段与数据集本身的“名称”不同。

为了识别我的数据集,我做了:

for ds in Database('distribution and use'):
    for prod_exc in ds.production():
        try : assert (prod_exc['name'] == ds['name'])
        except : print(ds['name'])

您可以对 ['location']、['unit'] 和其他重要字段进行相同的测试。

检查它们是否一致的其他有趣字段是来自数据集本身的 ['code'] 和位于该字段中的生产交换的'code'['input'][1]

for ds in Database("db_name"):
    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']))
于 2018-09-20T15:39:46.797 回答