@@ -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
3432def 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
6576def 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