【问题标题】:Assign an activity from ecoinvent to a variable and access the activity's properties将 ecoinvent 中的活动分配给变量并访问活动的属性
【发布时间】:2021-09-03 18:40:46
【问题描述】:

我想检索活动的所有输入和输出的名称(可能还有其他信息)。据我了解,这将使我能够例如查看电力生产组合包含哪些单独的投入。

首先,我通过ecoinvent_db = bw.Database('ecoinvent 3.7.1_cutoff') 选择一个数据库并搜索可能与我的目标相关的活动。

输入:

ecoinvent_db.search('electricity production mix')

输出:

['electricity, high voltage, production mix' (kilowatt hour, CH, None),
 'electricity, high voltage, production mix' (kilowatt hour, AU, None),
 'electricity, high voltage, production mix' (kilowatt hour, TZ, None),
 'electricity, high voltage, production mix' (kilowatt hour, TH, None),
 'electricity, high voltage, production mix' (kilowatt hour, MT, None),
 'electricity, high voltage, production mix' (kilowatt hour, RU, None),
 'electricity, high voltage, production mix' (kilowatt hour, PE, None),
 'electricity, high voltage, production mix' (kilowatt hour, IR, None),
 'electricity, high voltage, production mix' (kilowatt hour, MX, None),
 'electricity, high voltage, production mix' (kilowatt hour, JP, None),
 'electricity, high voltage, production mix' (kilowatt hour, CL, None),
 'electricity, high voltage, production mix' (kilowatt hour, CY, None),
 'electricity, high voltage, production mix' (kilowatt hour, MY, None),
 'electricity, high voltage, production mix' (kilowatt hour, UA, None),
 'electricity, high voltage, production mix' (kilowatt hour, IS, None),
 'electricity, high voltage, production mix' (kilowatt hour, TW, None),
 'electricity, high voltage, production mix' (kilowatt hour, KR, None),
 'electricity, high voltage, production mix' (kilowatt hour, SA, None),
 'electricity, high voltage, production mix' (kilowatt hour, ID, None),
 'electricity, high voltage, production mix' (kilowatt hour, ZA, None),
 'electricity, high voltage, production mix' (kilowatt hour, CA-YK, None),
 'electricity, high voltage, production mix' (kilowatt hour, CA-ON, None),
 'electricity, high voltage, production mix' (kilowatt hour, CA-PE, None),
 'electricity, high voltage, production mix' (kilowatt hour, CA-NF, None),
 'electricity, high voltage, production mix' (kilowatt hour, CA-NS, None)]

接下来,我想将这些活动之一分配给一个变量(我可以稍后在循环中执行此操作)。在其中一个示例笔记本中,通过database.get() 将活动分配给变量。然而,在笔记本给出的示例中,活动的名称只是一个字符串。在 ecoinvent 的情况下,活动的名称不是唯一的,db.search(str) 将给定的活动返回为'activity_name' (unit, region, None)'

如果我使用ecoinvent_db.get(),然后使用括号中的上述输出之一,我会收到ActivityDatasetDoesNotExist 错误。

我可以选择一个随机活动并通过以下方式打印名称:

activity = bw.Database("ecoinvent 3.7.1_cutoff").random()

for exchange in activity.exchanges():
    print(exchange)

但是,activity_exchanges = list(activity.exchanges()) 只会产生以下结果。

如何将来自 ecoinvent 的活动分配给变量并访问或将其属性(例如名称、交换等)添加到列表或字典?

【问题讨论】:

    标签: brightway


    【解决方案1】:

    假设您分配给 ecoinvent 的名称是

    MY_DB_NAME == 'ecoinvent 3.7.1_cutoff'
    

    我建议您循环浏览活动以查找您想要的内容,而不是使用搜索。例如,这会返回一个活动对象:

    elec_example = next(act for act in bw2data.Database(MY_DB_NAME) if act['name'] == 'electricity, high voltage, production mix')
    

    从列表中选择一个值也可以。

    活动的键是一个包含数据库名称和唯一(在数据库内)代码的元组。您可以使用get_activity 函数与活动的密钥或使用数据库的get 方法来检索活动(如果您知道密钥或代码)。

    assert bw2data.get_activity(elec_example.key) == elec_example
    assert bw2data.Database(MY_DB_NAME).get(elec_example['code']) == elec_example
    

    您可以访问与活动对象关联的不同数据。例如elec_example['name']

    .exchanges() 方法返回一个可迭代对象。您可以简单地使用 list(elec_example.exchanges()) 获得交换列表,或者使用 for 循环遍历交换。

    【讨论】:

    • 非常感谢您的回答!在您的帮助下,我设法通过bw2data.get() 访问活动。我现在使用bw2data.get_activity(('ecoinvent 3.7.1_cutoff',elec_example['code'])),对我来说,作为一个 Python 外行,它看起来“更容易”;-) 无论如何,我怎样才能访问该活动的交流?我对正确的术语不是很熟悉,但显然elec_example 可以与elec_example.exchanges() 一起使用,但这只会返回<bw2data.backends.peewee.proxies.Exchanges at 0x21bf531a7c8>。我想检索的是带有交易所的列表/数据框。
    • 对不起。我刚刚注意到你也给出了这个答案! ...list(elec_example.exchanges()) 谢谢!
    • 没问题,我编辑了回复来回答您的评论。
    • 谢谢,帮了大忙!!我期待着更熟悉 Brightway ...
    猜你喜欢
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多