确定哪个 activity 或哪个产品导致非正方形技术圈矩阵

Identify which activity or which product is leading to a non-square technosphere matrix

我使用 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 matrix is not square: 16718 activities (columns) and 16717 products (rows). Use LeastSquaresLCA to solve this system, or fix the input data

然后,我尝试了以下方法,加上一些推荐的变体 here :

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)

但同样,我无法确定执行此操作的任何有问题的数据集。

是否有一种简单的方法来确定哪个 activity 或哪个产品导致非正方形技术圈矩阵以修复我的输入数据?

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

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

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'] 和位于字段 ['input'][1][=13= 中的生产交换的 'code' ]

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']))