Brightway2:如何通过nam检索特定活动

2024-06-16 14:04:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我对这一切都不熟悉,所以请耐心点。在

我已经初始化了一个新的BW2安装,并添加了一个Ecoinvent数据库(为清晰起见,对一些输出进行了修剪):

>>> from brightway2 import bw2setup, Database, SingleOutputEcospold2Importer
>>> bw2setup()
>>> ei = SingleOutputEcospold2Importer('/path/to/datasets', 'ei3.4 cutoff')
>>> ei.apply_strategies()
>>> ei.statistics()
14889 datasets
520205 exchanges
0 unlinked exchanges
>>> ei.write_database()

到目前为止,还不错(特别注意加载的数据集的数量)。但现在-我该如何使用它?具体地说,我想检索名为market for transport, freight, lorry, unspecified的进程,其空间范围是GLO。但我不知道这个活动的关键,而且令人惊讶的是,它没有出现在搜索中

^{pr2}$

!!很奇怪,没有运输市场?通过检查,我可以看到在ecoinvent3.4cutoff中有139个以短语market for transport开头的活动。在

事实上,虽然在EI 3.4截止期中有3966个“市场”过程,但我的brightway安装程序只知道大约两打:

^{3}$

如何查找在搜索中未显示的数据集?相当没有帮助的是,文档似乎严格地使用random()来检索活动(例如这里:http://nbviewer.jupyter.org/urls/bitbucket.org/cmutel/brightway2/raw/default/notebooks/Databases.ipynb),这无助于我回答这个问题。在

所以-两个问题-

  1. 如何找到感兴趣的活动market for transport, freight, lorry, unspecified [GLO]

  2. 根据搜索结果,为什么我的数据库丢失了大约3940个市场?

提前谢谢。在


Tags: 数据数据库for市场marketexchangesdatasetscutoff
3条回答

尝试在搜索字段中包含更多的关键字,不使用逗号。在

Database("ecoinvent 3.4 conseq").search('market transport freight lorry unspecified')

在我的版本中返回:

^{pr2}$

您也可以使用过滤器来查找位置:

Database("ecoinvent 3.4 conseq").search('market transport freight lorry unspecified', filter={"location" : 'GLO'})

退货:

['market for transport, freight, lorry, unspecified' (ton kilometer, GLO, None)]

如果您想自动搜索(例如查找一系列进程的代码),则不确定这是否有效。在

1)我总是像劳伦特一样使用列表理解。请注意,活动有一个名为活动类型的字段。可能值为“市场活动”、“市场群体”、“普通转化活动”

db_bd = bw.Database('ei3.4 cutoff')
set([ds['activity type'] for ds in bd_db])

这一领域有助于区分市场和普通的转型活动

^{pr2}$

2)搜索无法找到所有市场,因为搜索结果的数量有限。您可以用参数限制(documentation)来更改它。在

bw.Database('ei3.4 cutoff').search('market',limit=5)
  1. 你可以使用列表理解来实现你的搜索。它应该很有效率。在

db_bd = bw.Database('ei3.4 cutoff')

market_brandon_want = [act for act in db_bd 
                    if 'market for transport, freight, lorry, unspecified' in act['name'] 
                    and 'GLO' in act['location']
     ][0]
  1. 如果你这样做了:

len([act for act in db_bd if 'market' in act['name'] ])

你应该得到4183,这似乎是一个更准确的数字。我相信你可以改进你的过滤器,以接近你的数字。在

您可以参考2017年在Zürich举办的Brightway2 seminar的教材。这对我很有帮助。在

相关问题 更多 >