Source code for bw2io.data.exiopol
import csv
import os
import numpy as np
from bw2data import Database, databases
from stats_arrays import UndefinedUncertainty
from tqdm import tqdm
[docs]
def import_exiopol_IO_table(database_name, dir_path):
assert os.path.exists(dir_path) and os.path.isdir(
dir_path
), "Problem with given directory path"
assert database_name not in databases, "Database {} already exists".format(
database_name
)
assert "mrIot_version2.2.2.txt" in os.listdir(
dir_path
), "Directory path must contain `mrIot_version2.2.2.txt` file."
print("Loading and processing data")
fp = os.path.join(dir_path, "mrIot_version2.2.2.txt")
data = [line for line in csv.reader(open(fp, "r"), delimiter="\t")]
labels = [tuple(x[:3]) for x in data[2:]]
labels_dict = {i: obj for i, obj in enumerate(labels)}
data = np.array([[float(x) for x in row[3:]] for row in data[2:]])
codify = lambda x: ":".join(x[:2])
def get_column_tech_exchanges(index, obj):
excs = []
for row_i, value in enumerate(data[:, index]):
if not value:
continue
elif row_i == index:
excs.append(
{
"type": "production",
"uncertainty_type": UndefinedUncertainty.id,
"amount": float(1 - value),
"loc": float(1 - value),
"input": (database_name, obj),
"output": (database_name, obj),
}
)
else:
excs.append(
{
"type": "technosphere",
"uncertainty_type": UndefinedUncertainty.id,
"amount": float(value),
"loc": float(value),
"input": (database_name, codify(labels_dict[row_i])),
"output": (database_name, obj),
}
)
return excs
print("Creating LCA datasets")
db = []
for index, ds in enumerate(tqdm(labels)):
db.append(
{
"location": ds[0],
"name": ds[1],
"unit": ds[2],
"exchanges": get_column_tech_exchanges(index, codify(ds)),
"type": "process",
"database": database_name,
"code": codify(ds),
}
)
print("Writing datasets")
db_obj = Database(database_name)
db_obj.register(directory=dir_path)
# db_obj.write({(ds['database'], ds['code']): ds for ds in db})
return db_obj