1

我对这一切都很陌生,所以请耐心等待。

我已经初始化了一个新的 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, unspecifiedGLO空间范围的过程。但我不知道这个活动的关键,而且令人惊讶的是,它没有出现在搜索中

>>> Database('ei3.4 cutoff').search('market for transport, freight, lorry, unspecified')
[]
>>> Database('ei3.4 cutoff').search('market for transport')
[]

!!非常令人惊讶,没有运输市场?market for transport通过检查,我可以看到以 Ecoinvent 3.4 cutoff 中的短语开头的有 139 个活动。

事实上,虽然 EI 3.4 截止时有 3,966 个“市场”进程,但我的 Brightway 安装只知道大约两打:

>>> Database('ei3.4 cutoff').search('market')
['market for paris market carrot' (kilogram, GLO, None),
 'paris market carrot production' (kilogram, GLO, None),
 'market for acetonitrile' (kilogram, GLO, None),
 'market for sulfur' (kilogram, GLO, None),
 'market for whey' (kilogram, GLO, None),
 'market for heptane' (kilogram, GLO, None),
 'market for straw' (kilogram, GLO, None),
 'market for clay' (kilogram, CH, None),
 'market for pitch' (kilogram, CH, None),
 'market for brass' (kilogram, CH, None),
 'market for platinum' (kilogram, GLO, None),
 'market for polycarbonate' (kilogram, GLO, None),
 'market for pitch' (kilogram, RoW, None),
 'market for tetrafluoroethylene' (kilogram, GLO, None),
 'market for dimethenamide' (kilogram, GLO, None),
 'market for glyphosate' (kilogram, GLO, None),
 'market for styrene' (kilogram, GLO, None),
 'market for ferrite' (kilogram, GLO, None),
 'market for folpet' (kilogram, GLO, None),
 'market for magnetite' (kilogram, GLO, None),
 'market for metamitron' (kilogram, GLO, None),
 'market for nylon 6-6' (kilogram, GLO, None),
 'market for atrazine' (kilogram, GLO, None),
 'market for magnesium' (kilogram, GLO, None),
 'market for metaldehyde' (kilogram, GLO, None)]

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

所以——两个问题——

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

  2. 根据搜索,为什么我的数据库缺少大约 3,940 个市场?

提前致谢。

4

4 回答 4

1
  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 年在苏黎世举办的Brightway2 研讨会的教材。这对我来说真的很有帮助。

于 2018-09-07T06:56:54.383 回答
1

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

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

在我的版本中返回:

['transport, freight, lorry, all sizes, EURO3 to generic market for 
transport, freight, lorry, unspecified' (ton kilometer, RER, None), 
'transport, freight, lorry, all sizes, EURO3 to generic market for transport, 
freight, lorry, unspecified' (ton kilometer, RoW, None),
'transport, freight, lorry, all sizes, EURO4 to generic market for transport, 
freight, lorry, unspecified' (ton kilometer, RoW, None),
'transport, freight, lorry, all sizes, EURO5 to generic market for transport, 
freight, lorry, unspecified' (ton kilometer, RoW, None),
...

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

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

返回:

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

如果您想使搜索自动化(例如查找一系列流程的代码),不确定这是否会起作用。

于 2018-09-07T07:26:48.237 回答
1

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

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

该字段可用于区分市场和普通的转型活动

market_brandon_want = [act for act in db_bd
                if 'freight, lorry, unspecified' in act['name'] 
                and 'GLO' in act['location']
                and act['activity type']!='ordinary transforming activity'
 ]
market_brandon_want

2)搜索没有找到所有的市场,因为结果的数量是有限的。您可以使用参数限制(文档)更改它。

bw.Database('ei3.4 cutoff').search('market',limit=5)
于 2018-09-18T19:29:17.837 回答
0

因此,一种明显可行的方法是使用数据库的内置迭代器:

>>> m_t_f_l_u = next(_a for _a in Database('ei3.4 cutoff') \
                     if _a['name'] == 'market for transport, freight, lorry, unspecified' \
                     and _a['location'] == 'GLO')

这行得通。但是,它似乎效率不高,并且需要几秒钟才能运行。

于 2018-09-06T19:55:32.867 回答