0

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'forを変更して'exchanges'も、何も生成されない (最初の構文) または重要なエラーが発生する (2 番目の構文)。

それでも、Brightway コードで次の構文見たことがあります。

exchanges = ds.get('exchanges', [])

今のところ、交換データにアクセスする唯一の方法は.load、データベース (データベース全体をディクショナリにロードする) にアクセスし、アクティビティ キーを作成して、次のように交換を呼び出すことです。

[In]  ei32Loaded = ei32.load()
      activities = sorted(ei32Loaded.keys())
      ei32Loaded[activities[42]]['exchanges']
[Out] [{'activity': '0fb6238a-e252-4d19-a417-c569ce5e2729', 'amount': xx,       
         ...}]

正常に動作しますが、交換データがデータベースにあることはわかっているので、ロードせずにデータにアクセスする方法が存在するはずです。少なくとも、なぜsomeActivity.get('exchanges', [])うまくいかないのか知りたいです。ありがとう!

4

1 に答える 1

1

Brightway2 は SQLite データベースを使用して LCI データを保存します (少なくともほとんどの場合 - 他のバックエンドも可能ですが、SQLite がデフォルトのオプションです)。SQLite データベースには、 と の 2 つのテーブルがActivityDatasetありExchangeDatasetます。AnActivityDatasetは、サプライ チェーン グラフ内のオブジェクトを記述し (変換アクティビティに厳密には限定されません)、ExchangeDataset2 つの の間の数値的関係を記述しActivityDatasetます。それらのスキーマ定義を参照してください。

Database('foo').get('bar')またはget_activity(('foo', 'bar')), you create an [Activity][2], which is a proxy object for interacting with the database. TheActivity ActivityDataset``を使用するobject exposes a number of useful methods, and handles some "magic" - for example, updating anと、完全に別のデータベースである検索インデックスも更新する必要があります。

をインスタンス化すると、行Activityにあるデータがロードされます。ActivityDataset含めることができるものに実際の要件や制限はありませんが、含まれていないものの 1 つに交換があります。交換は遅延してロードされます。つまり、必要な場合にのみロードされます。

含まれている便利なメソッドのいくつかActivityは交換フィルターです。たとえば、.technosphere()Activityは、これがoutputであり、交換タイプが であるすべての交換に対して反復子を返しますtechnosphere。LCA 用語で.technosphere()は、アクティビティのテクノスフィア インプットです。同様に、.upstream()は、このアクティビティを消費する取引所を公開します。Activity以下も含まれます:

  • .exchanges(): このアクティビティがアウトプットであるすべての取引所。
  • .biosphere(): このアクティビティがアウトプットであり、タイプが であるすべての交換biosphere
  • .production(): このアクティビティがアウトプットであり、タイプが であるすべての交換production

これらのメソッドはすべて反復子です。反復されるまでデータベースからデータを取得しません。これらもメソッドであり、アクティビティのデータ属性ではありません。つまり、 のようにアクセスするのではなく、 のようfoo['technosphere']にアクセスしますfoo.technosphere()

交換タイプは、LCA 計算中に数値交換値が配置される場所と行列を決定するために使用されます。

exchanges = ds.get('exchanges', [])データがインポートおよび処理されているが、まだExchangeDatasets によってリンクされておらず、SQLite データベースにまったく格納されていない IO ライブラリに表示される参照ケース- インベントリ データをインポートおよび処理する場合、データはプレーンな Python ディクショナリです。 、およびActivitys、Exchanges などの派手な組み合わせではありません。

于 2016-04-11T07:32:53.367 に答える