wurst 代理人的新活动

new activities from proxies with wurst

我正在尝试根据来自其他地区的代理在 brightway 中创建一个新的 activity。我希望 wurst 能完成繁重的工作并将数据集连接到适当的市场。

在这个例子中,我尝试使用瑞士数据集作为代理在魁北克创建一个低压天然气市场。魁北克有一个 高压天然气 市场。还有一个中间过程(减压)link 低压和高压市场活动。这就是我所做的:

 #db_name is the name of my consequential version of ecoinvent 3.4
 data= w.extract_brightway2_databases([db_name])

 CH_location = [w.equals('location','CH')]
 pressure_red=[w.equals('name','natural gas pressure reduction from high to low pressure')]

 ch_pressure_red_filter=CH_location+pressure_red
 ch_pred=w.get_one(data,*ch_pressure_red_filter)

 ch_market_lp_ng_filter=CH_location+[w.equals('name','market for natural gas, low pressure')]
 ch_mlp_ng=w.get_one(data,*ch_market_lp_ng_filter)

 #create a copy of the datasets and change location
 qc_mlp_ng=ch_mlp_ng.copy()
 qc_mlp_ng['location']='CA-QC'
 qc_pred=ch_pred.copy()
 qc_pred['location']='CA-QC'
 new_data=[qc_mlp_ng,qc_pred]

 w.write_brightway2_database(data+[qc_mlp_ng,qc_pred],'expanded_ecoinvent')

这引发了一个 NonuniqueCode 错误,我猜这是因为当我创建副本时,我有几个具有相同代码的数据集。应该如何做才能避免这个错误?该程序会重新link魁北克省所有消耗低压天然气的活动到我的低压天然气新市场吗?

您正在创建数据集的多个副本,同时在数据集的元数据中保留相同的唯一标识符。

为避免这种情况,您可以使用 Wurst python 包中的内置函数 copy_dataset()。这会复制数据集并为每个副本生成唯一的 uuid 代码。

from wurst.transformations.utils import copy_dataset

qc_mlp_ng= copy_dataset(ch_mlp_ng)

qc_pred=copy_dataset(ch_pred)