能否将ecoinvent不确定性用于前台清单?导入匹配问题求助
Brightway Excel清单导入及不确定性参数关联解决方案
问题核心原因
match_database采用精确字段匹配逻辑,你的Excel清单中不确定性字段(如uncertainty type的命名、scale的数值格式)与ecoinvent/biosphere3数据库中的标准格式不一致,导致匹配失败,出现未关联交换。
分步解决方法
1. 先完成基础关联(避免不确定性字段干扰)
先仅使用核心匹配字段完成交换关联,确保所有流都能匹配到数据库条目:
bd.projects.migrate_project_25 fp = '<inventory_path>' enzymes = bi.ExcelImporter(fp) # 仅用核心字段匹配技术流与生物圈流 enzymes.match_database("ecoinvent 3.8 cutoff", fields=('name','unit','location')) enzymes.match_database("biosphere3", fields=('name','unit','loc')) enzymes.apply_strategies()
2. 从关联数据库中提取不确定性参数
基础匹配完成后,遍历已关联的交换,从对应的ecoinvent/biosphere3数据集中提取不确定性参数,覆盖到导入的清单中:
# 处理技术流(ecoinvent关联) db_ecoinvent = bi.Database('ecoinvent 3.8 cutoff') for exc in enzymes.data: if exc.get('database') == 'ecoinvent 3.8 cutoff': original_entry = db_ecoinvent.get(exc['code']) original_exc = original_entry.get(exc['input']) # 复制关键不确定性参数 exc['uncertainty type'] = original_exc.get('uncertainty type') exc['scale'] = original_exc.get('scale') # 按需补充其他参数(如loc、shape) for param in ['loc', 'shape', 'minimum', 'maximum']: if param in original_exc: exc[param] = original_exc[param] # 处理生物圈流(biosphere3关联) db_biosphere = bi.Database('biosphere3') for exc in enzymes.data: if exc.get('database') == 'biosphere3': original_entry = db_biosphere.get(exc['code']) original_exc = original_entry.get(exc['input']) exc['uncertainty type'] = original_exc.get('uncertainty type') exc['scale'] = original_exc.get('scale') for param in ['loc', 'shape', 'minimum', 'maximum']: if param in original_exc: exc[param] = original_exc[param]
3. 验证并写入数据库
# 检查未关联交换情况 enzymes.statistics() # 将带不确定性参数的清单写入数据库 enzymes.write_database()
额外注意事项
- 确保Excel中的
location/loc字段格式与数据库一致(如使用GLO、CH等大写区域代码) - 若需自定义不确定性参数,可在Excel中单独列字段,基础匹配后直接保留即可,无需从数据库提取
- 运行蒙特卡洛模拟前,可通过
bi.Database('your_database_name').random()验证不确定性采样功能是否正常
内容的提问来源于stack exchange,提问作者Genario Alves
相关产品推荐
相关产品推荐

