识别导致非平方技术圈矩阵的活动或产品

时间:2018-09-20 09:32:52

标签: brightway

我使用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)

我收到的错误消息:

  

非正方形技术圈:技术圈矩阵不是正方形:16718个活动(列)和16717个产品(行)。使用LeastSquaresLCA解决此系统,或修复输入数据

然后,我尝试了以下操作,并推荐了here的一些变化:

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 :(得分:1)

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

要确定我的数据集,我做了:

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

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

要检查它们是否重合的其他有趣字段是数据集本身的['code']和位于字段['input'][1]中的生产交易的'code'

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