访问 Brightway2 数据库对象中的交换数据
Accessing exchange data in Brightway2 database object
我对使用 Brightway 数据库对象访问交换数据有疑问。假设我有 import Brightway2 as bw
并且在一个有 LCI 数据库的项目中:
[In] bw.databases
[Out] Brightway2 databases metadata with 2 objects:
biosphere3
ecoinvent 3_2 APOS
我可以获取活动信息:
[In] ei32 = bw.Database('ecoinvent 3_2 APOS')
someActivity = ei32.get('00c71af952a1248552fc2bfa727bb6b5')
someActivity
[Out] 'market for transport, freight, inland waterways, barge with reefer, cooling' (ton kilometer, GLO, None)
我似乎可以访问以下数据:
[In] list(someActivity)
[Out] ['database',
'production amount',
'name',
'reference product',
'classifications',
'activity',
'location',
'filename',
'parameters',
'code',
'authors',
'paramters',
'comment',
'flow',
'type',
'unit',
'activity type']
注意没有 'exchanges'
。事实上,虽然这有效:
[In] someActivity.get('location')
[Out] 'GLO'
或者,等价地:
[In] someActivity['location']
[Out] 'GLO'
将 'location'
更改为 'exchanges'
不会产生任何结果(第一种语法)或键错误(第二种语法)。
然而 I have seen this syntax 在 Brightway 代码中:
exchanges = ds.get('exchanges', [])
目前,我访问交换数据的唯一方法是 .load
数据库(将整个数据库加载到字典中),创建一个 activity 键,然后按如下方式调用交换:
[In] ei32Loaded = ei32.load()
activities = sorted(ei32Loaded.keys())
ei32Loaded[activities[42]]['exchanges']
[Out] [{'activity': '0fb6238a-e252-4d19-a417-c569ce5e2729', 'amount': xx,
...}]
它工作正常,但我知道交换数据在数据库中,所以我确定一定有一种方法可以在不加载的情况下获取它。至少,我想知道为什么 someActivity.get('exchanges', [])
对我不起作用。
谢谢!
Brightway2 使用 SQLite 数据库来存储 LCI 数据(至少在大多数情况下 - 其他后端也是可能的,但 SQLite 是默认选项)。在 SQLite 数据库中,有两个表,ActivityDataset
和 ExchangeDataset
。一个 ActivityDataset
描述了供应链图中的一个对象(不严格限于转换活动),而 ExchangeDataset
描述了两个 ActivityDataset
之间的数值关系。查看他们的 schema definition.
当你使用Database('foo').get('bar')
或get_activity(('foo', 'bar')), you create an [Activity][2], which is a proxy object for interacting with the database. The
Activityobject exposes a number of useful methods, and handles some "magic" - for example, updating an
Activity数据集时``也应该更新搜索索引,这是一个完全独立的数据库.
实例化 Activity
加载 ActivityDataset
行中的数据。对于可以包含的内容没有真正的要求或限制,但绝对不包含的一件事是交换。交易所延迟加载,即仅在需要时加载。
Activity
包含的一些有用方法是交换过滤器。例如,.technosphere() returns an iterator over all exchanges for which this Activity
is the output
, and the exchange type is technosphere
. In LCA parlance, .technosphere()
are the technosphere inputs for the activity. Similarly, .upstream() 公开了 消耗 这个 activity 的交换。 Activity
还包括:
.exchanges()
:此activity为输出的所有交易所。
.biosphere()
:此 activity 为输出的所有交换,类型为 biosphere
.
.production()
:此 activity 为输出的所有交换,类型为 production
.
所有这些方法都是迭代器 - 它们在迭代之前不会从数据库中检索数据。这些也是 方法 ,而不是 activity 的 数据属性 ,即它们不像 foo['technosphere']
那样被访问,而是foo.technosphere()
.
交换类型用于确定在 LCA 计算期间将数字交换值放置在矩阵中的位置和位置。
exchanges = ds.get('exchanges', [])
出现在 IO 库中的参考案例,数据正在导入和处理,但尚未被 ExchangeDataset
链接或存储在 SQLite 数据库中- 导入和处理库存数据时,数据是普通的 Python 字典,而不是 Activity
、Exchange
等的花哨组合
我对使用 Brightway 数据库对象访问交换数据有疑问。假设我有 import Brightway2 as bw
并且在一个有 LCI 数据库的项目中:
[In] bw.databases
[Out] Brightway2 databases metadata with 2 objects:
biosphere3
ecoinvent 3_2 APOS
我可以获取活动信息:
[In] ei32 = bw.Database('ecoinvent 3_2 APOS')
someActivity = ei32.get('00c71af952a1248552fc2bfa727bb6b5')
someActivity
[Out] 'market for transport, freight, inland waterways, barge with reefer, cooling' (ton kilometer, GLO, None)
我似乎可以访问以下数据:
[In] list(someActivity)
[Out] ['database',
'production amount',
'name',
'reference product',
'classifications',
'activity',
'location',
'filename',
'parameters',
'code',
'authors',
'paramters',
'comment',
'flow',
'type',
'unit',
'activity type']
注意没有 'exchanges'
。事实上,虽然这有效:
[In] someActivity.get('location')
[Out] 'GLO'
或者,等价地:
[In] someActivity['location']
[Out] 'GLO'
将 'location'
更改为 'exchanges'
不会产生任何结果(第一种语法)或键错误(第二种语法)。
然而 I have seen this syntax 在 Brightway 代码中:
exchanges = ds.get('exchanges', [])
目前,我访问交换数据的唯一方法是 .load
数据库(将整个数据库加载到字典中),创建一个 activity 键,然后按如下方式调用交换:
[In] ei32Loaded = ei32.load()
activities = sorted(ei32Loaded.keys())
ei32Loaded[activities[42]]['exchanges']
[Out] [{'activity': '0fb6238a-e252-4d19-a417-c569ce5e2729', 'amount': xx,
...}]
它工作正常,但我知道交换数据在数据库中,所以我确定一定有一种方法可以在不加载的情况下获取它。至少,我想知道为什么 someActivity.get('exchanges', [])
对我不起作用。
谢谢!
Brightway2 使用 SQLite 数据库来存储 LCI 数据(至少在大多数情况下 - 其他后端也是可能的,但 SQLite 是默认选项)。在 SQLite 数据库中,有两个表,ActivityDataset
和 ExchangeDataset
。一个 ActivityDataset
描述了供应链图中的一个对象(不严格限于转换活动),而 ExchangeDataset
描述了两个 ActivityDataset
之间的数值关系。查看他们的 schema definition.
当你使用Database('foo').get('bar')
或get_activity(('foo', 'bar')), you create an [Activity][2], which is a proxy object for interacting with the database. The
Activityobject exposes a number of useful methods, and handles some "magic" - for example, updating an
Activity数据集时``也应该更新搜索索引,这是一个完全独立的数据库.
实例化 Activity
加载 ActivityDataset
行中的数据。对于可以包含的内容没有真正的要求或限制,但绝对不包含的一件事是交换。交易所延迟加载,即仅在需要时加载。
Activity
包含的一些有用方法是交换过滤器。例如,.technosphere() returns an iterator over all exchanges for which this Activity
is the output
, and the exchange type is technosphere
. In LCA parlance, .technosphere()
are the technosphere inputs for the activity. Similarly, .upstream() 公开了 消耗 这个 activity 的交换。 Activity
还包括:
.exchanges()
:此activity为输出的所有交易所。.biosphere()
:此 activity 为输出的所有交换,类型为biosphere
..production()
:此 activity 为输出的所有交换,类型为production
.
所有这些方法都是迭代器 - 它们在迭代之前不会从数据库中检索数据。这些也是 方法 ,而不是 activity 的 数据属性 ,即它们不像 foo['technosphere']
那样被访问,而是foo.technosphere()
.
交换类型用于确定在 LCA 计算期间将数字交换值放置在矩阵中的位置和位置。
exchanges = ds.get('exchanges', [])
出现在 IO 库中的参考案例,数据正在导入和处理,但尚未被 ExchangeDataset
链接或存储在 SQLite 数据库中- 导入和处理库存数据时,数据是普通的 Python 字典,而不是 Activity
、Exchange
等的花哨组合