Skip to content

Commit 70ac1e5

Browse files
committed
New db tables
1 parent 5f262bd commit 70ac1e5

1 file changed

Lines changed: 83 additions & 28 deletions

File tree

src/muse/new_input/readers.py

Lines changed: 83 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,26 @@ def read_inputs(data_dir):
77
data = {}
88
con = duckdb.connect(":memory:")
99

10-
with open(data_dir / "regions.csv") as f:
11-
regions = read_regions_csv(f, con) # noqa: F841
12-
1310
with open(data_dir / "commodities.csv") as f:
1411
commodities = read_commodities_csv(f, con)
1512

13+
with open(data_dir / "commodity_trade.csv") as f:
14+
commodity_trade = read_commodity_trade_csv(f, con) # noqa: F841
15+
16+
with open(data_dir / "commodity_costs.csv") as f:
17+
commodity_costs = read_commodity_costs_csv(f, con) # noqa: F841
18+
1619
with open(data_dir / "demand.csv") as f:
1720
demand = read_demand_csv(f, con) # noqa: F841
1821

19-
data["global_commodities"] = calculate_global_commodities(commodities)
20-
return data
22+
with open(data_dir / "demand_slicing.csv") as f:
23+
demand_slicing = read_demand_slicing_csv(f, con) # noqa: F841
2124

25+
with open(data_dir / "regions.csv") as f:
26+
regions = read_regions_csv(f, con) # noqa: F841
2227

23-
def read_regions_csv(buffer_, con):
24-
sql = """CREATE TABLE regions (
25-
name VARCHAR PRIMARY KEY,
26-
);
27-
"""
28-
con.sql(sql)
29-
rel = con.read_csv(buffer_, header=True, delimiter=",") # noqa: F841
30-
con.sql("INSERT INTO regions SELECT name FROM rel;")
31-
return con.sql("SELECT name from regions").fetchnumpy()
28+
data["global_commodities"] = calculate_global_commodities(commodities)
29+
return data
3230

3331

3432
def read_commodities_csv(buffer_, con):
@@ -41,25 +39,38 @@ def read_commodities_csv(buffer_, con):
4139
con.sql(sql)
4240
rel = con.read_csv(buffer_, header=True, delimiter=",") # noqa: F841
4341
con.sql("INSERT INTO commodities SELECT name, type, unit FROM rel;")
44-
4542
return con.sql("select name, type, unit from commodities").fetchnumpy()
4643

4744

48-
def calculate_global_commodities(commodities):
49-
names = commodities["name"].astype(np.dtype("str"))
50-
types = commodities["type"].astype(np.dtype("str"))
51-
units = commodities["unit"].astype(np.dtype("str"))
52-
53-
type_array = xr.DataArray(
54-
data=types, dims=["commodity"], coords=dict(commodity=names)
55-
)
45+
def read_commodity_trade_csv(buffer_, con):
46+
sql = """CREATE TABLE commodity_trade (
47+
commodity VARCHAR REFERENCES commodities(name),
48+
region VARCHAR REFERENCES regions(name),
49+
year BIGINT,
50+
import DOUBLE,
51+
export DOUBLE,
52+
);
53+
"""
54+
con.sql(sql)
55+
rel = con.read_csv(buffer_, header=True, delimiter=",") # noqa: F841
56+
con.sql("""INSERT INTO commodity_trade SELECT
57+
commodity, region, year, import, export FROM rel;""")
58+
return con.sql("SELECT * from commodity_trade").fetchnumpy()
5659

57-
unit_array = xr.DataArray(
58-
data=units, dims=["commodity"], coords=dict(commodity=names)
59-
)
6060

61-
data = xr.Dataset(data_vars=dict(type=type_array, unit=unit_array))
62-
return data
61+
def read_commodity_costs_csv(buffer_, con):
62+
sql = """CREATE TABLE commodity_costs (
63+
year BIGINT,
64+
region VARCHAR REFERENCES regions(name),
65+
commodity VARCHAR REFERENCES commodities(name),
66+
value DOUBLE,
67+
);
68+
"""
69+
con.sql(sql)
70+
rel = con.read_csv(buffer_, header=True, delimiter=",") # noqa: F841
71+
con.sql("""INSERT INTO commodity_costs SELECT
72+
year, region, commodity_name, value FROM rel;""")
73+
return con.sql("SELECT * from commodity_costs").fetchnumpy()
6374

6475

6576
def read_demand_csv(buffer_, con):
@@ -74,3 +85,47 @@ def read_demand_csv(buffer_, con):
7485
rel = con.read_csv(buffer_, header=True, delimiter=",") # noqa: F841
7586
con.sql("INSERT INTO demand SELECT year, commodity_name, region, demand FROM rel;")
7687
return con.sql("SELECT * from demand").fetchnumpy()
88+
89+
90+
def read_demand_slicing_csv(buffer_, con):
91+
sql = """CREATE TABLE demand_slicing (
92+
commodity VARCHAR REFERENCES commodities(name),
93+
region VARCHAR REFERENCES regions(name),
94+
timeslice VARCHAR,
95+
fraction DOUBLE CHECK (fraction >= 0 AND fraction <= 1),
96+
year BIGINT,
97+
);
98+
"""
99+
con.sql(sql)
100+
rel = con.read_csv(buffer_, header=True, delimiter=",") # noqa: F841
101+
con.sql("""INSERT INTO demand_slicing SELECT
102+
commodity, region, timeslice, fraction, year FROM rel;""")
103+
return con.sql("SELECT * from demand_slicing").fetchnumpy()
104+
105+
106+
def read_regions_csv(buffer_, con):
107+
sql = """CREATE TABLE regions (
108+
name VARCHAR PRIMARY KEY,
109+
);
110+
"""
111+
con.sql(sql)
112+
rel = con.read_csv(buffer_, header=True, delimiter=",") # noqa: F841
113+
con.sql("INSERT INTO regions SELECT name FROM rel;")
114+
return con.sql("SELECT name from regions").fetchnumpy()
115+
116+
117+
def calculate_global_commodities(commodities):
118+
names = commodities["name"].astype(np.dtype("str"))
119+
types = commodities["type"].astype(np.dtype("str"))
120+
units = commodities["unit"].astype(np.dtype("str"))
121+
122+
type_array = xr.DataArray(
123+
data=types, dims=["commodity"], coords=dict(commodity=names)
124+
)
125+
126+
unit_array = xr.DataArray(
127+
data=units, dims=["commodity"], coords=dict(commodity=names)
128+
)
129+
130+
data = xr.Dataset(data_vars=dict(type=type_array, unit=unit_array))
131+
return data

0 commit comments

Comments
 (0)