From 94532fc4dbfd8312e0a46c535e69d5a287e65e23 Mon Sep 17 00:00:00 2001 From: CarlosEpia Date: Sat, 12 Oct 2024 10:52:23 +0200 Subject: [PATCH 1/5] rename functions in electrical clustering strategies --- etrago/cluster/spatial.py | 74 +++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/etrago/cluster/spatial.py b/etrago/cluster/spatial.py index 9f782c1d..54e4a1e1 100755 --- a/etrago/cluster/spatial.py +++ b/etrago/cluster/spatial.py @@ -121,38 +121,38 @@ def strategies_lines(): def strategies_one_ports(): return { "StorageUnit": { - "marginal_cost": np.mean, - "capital_cost": np.mean, - "efficiency_dispatch": np.mean, - "standing_loss": np.mean, - "efficiency_store": np.mean, - "p_min_pu": np.min, + "marginal_cost": "mean", + "capital_cost": "mean", + "efficiency_dispatch": "mean", + "standing_loss": "mean", + "efficiency_store": "mean", + "p_min_pu": "min", "p_nom_extendable": ext_storage, "p_nom_max": sum_with_inf, }, "Store": { - "marginal_cost": np.mean, - "capital_cost": np.mean, - "standing_loss": np.mean, - "e_nom": np.sum, - "e_nom_min": np.sum, + "marginal_cost": "mean", + "capital_cost": "mean", + "standing_loss": "mean", + "e_nom": "sum", + "e_nom_min": "sum", "e_nom_max": sum_with_inf, - "e_initial": np.sum, - "e_min_pu": np.mean, - "e_max_pu": np.mean, + "e_initial": "sum", + "e_min_pu": "mean", + "e_max_pu": "mean", }, } def strategies_generators(): return { - "p_nom_min": np.min, + "p_nom_min": "min", "p_nom_max": sum_with_inf, - "weight": np.sum, - "p_nom": np.sum, - "p_nom_opt": np.sum, - "marginal_cost": np.mean, - "capital_cost": np.mean, + "weight": "sum", + "p_nom": "sum", + "p_nom_opt": "sum", + "marginal_cost": "mean", + "capital_cost": "mean", "e_nom_max": sum_with_inf, } @@ -163,30 +163,30 @@ def strategies_links(): "bus0": _make_consense_links, "bus1": _make_consense_links, "carrier": _make_consense_links, - "p_nom": np.sum, + "p_nom": "sum", "p_nom_extendable": _make_consense_links, "p_nom_max": sum_with_inf, - "capital_cost": np.mean, - "length": np.mean, + "capital_cost": "mean", + "length": "mean", "geom": nan_links, "topo": nan_links, "type": nan_links, - "efficiency": np.mean, - "p_nom_min": np.sum, - "p_set": np.mean, - "p_min_pu": np.min, - "p_max_pu": np.max, - "marginal_cost": np.mean, + "efficiency": "mean", + "p_nom_min": "sum", + "p_set": "mean", + "p_min_pu": "min", + "p_max_pu": "max", + "marginal_cost": "mean", "terrain_factor": _make_consense_links, - "p_nom_opt": np.mean, + "p_nom_opt": "mean", "country": nan_links, - "build_year": np.mean, - "lifetime": np.mean, - "min_up_time": np.mean, - "min_down_time": np.mean, - "up_time_before": np.mean, - "down_time_before": np.mean, - "committable": np.all, + "build_year": "mean", + "lifetime": "mean", + "min_up_time": "mean", + "min_down_time": "mean", + "up_time_before": "mean", + "down_time_before": "mean", + "committable": "all", } From 7da69d10dd99b9c99a81d852523e1bcbbd9d613f Mon Sep 17 00:00:00 2001 From: CarlosEpia Date: Sat, 12 Oct 2024 10:53:20 +0200 Subject: [PATCH 2/5] deal with axis=1 warning in groupby --- etrago/cluster/spatial.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/etrago/cluster/spatial.py b/etrago/cluster/spatial.py index 54e4a1e1..17479ffd 100755 --- a/etrago/cluster/spatial.py +++ b/etrago/cluster/spatial.py @@ -255,7 +255,7 @@ def arrange_dc_bus0_bus1(network): strategies.pop("topo") strategies.pop("geom") - new_df = links.groupby(grouper, axis=0).agg(strategies) + new_df = links.groupby(grouper).agg(strategies) new_df.index = flatten_multiindex(new_df.index).rename("name") new_df = pd.concat( [new_df, network.links.loc[~links_agg_b]], axis=0, sort=False @@ -275,7 +275,7 @@ def arrange_dc_bus0_bus1(network): df_agg = df_agg.multiply( weighting.loc[df_agg.columns], axis=1 ) - pnl_df = df_agg.groupby(grouper, axis=1).sum() + pnl_df = df_agg.T.groupby(grouper).sum().T pnl_df.columns = flatten_multiindex(pnl_df.columns).rename( "name" ) From 26cbf1f1d022cb0878c502d5b40e156414a3ec1e Mon Sep 17 00:00:00 2001 From: CarlosEpia Date: Sat, 12 Oct 2024 10:54:18 +0200 Subject: [PATCH 3/5] deal with features names warning in kmeans --- etrago/cluster/spatial.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etrago/cluster/spatial.py b/etrago/cluster/spatial.py index 17479ffd..e7cf8c19 100755 --- a/etrago/cluster/spatial.py +++ b/etrago/cluster/spatial.py @@ -759,7 +759,7 @@ def kmedoids_dijkstra_clustering( kmeans.fit(points) busmap = pd.Series( - data=kmeans.predict(buses.loc[buses_i, ["x", "y"]]), + data=kmeans.predict(buses.loc[buses_i, ["x", "y"]].values), index=buses_i, dtype=object, ) From 1f66b0e95d9bea7bf8ad7b25cee7aa5f66c301fb Mon Sep 17 00:00:00 2001 From: CarlosEpia Date: Sat, 12 Oct 2024 17:30:12 +0200 Subject: [PATCH 4/5] rename functions in gas clustering strategies --- etrago/cluster/gas.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/etrago/cluster/gas.py b/etrago/cluster/gas.py index b31f4e1e..e59d9c8b 100644 --- a/etrago/cluster/gas.py +++ b/etrago/cluster/gas.py @@ -417,20 +417,20 @@ def gas_postprocessing(etrago, busmap, medoid_idx=None): }, one_port_strategies={ "Generator": { - "marginal_cost": np.mean, - "capital_cost": np.mean, - "p_nom_max": np.sum, - "p_nom_min": np.sum, - "e_nom_max": np.sum, + "marginal_cost": "mean", + "capital_cost": "mean", + "p_nom_max": "sum", + "p_nom_min": "sum", + "e_nom_max": "sum", }, "Store": { - "marginal_cost": np.mean, - "capital_cost": np.mean, - "e_nom": np.sum, + "marginal_cost": "mean", + "capital_cost": "mean", + "e_nom": "sum", "e_nom_max": sum_with_inf, }, "Load": { - "p_set": np.sum, + "p_set": "sum", }, }, ) From a5468e2f44f158baad107380eec0549787c4ead8 Mon Sep 17 00:00:00 2001 From: CarlosEpia Date: Wed, 16 Oct 2024 10:55:53 +0200 Subject: [PATCH 5/5] solve geopandas deprecation warning about naturalearth_lowres --- etrago/tools/shapes_europe/shapes_europe.cpg | 1 + etrago/tools/shapes_europe/shapes_europe.dbf | Bin 0 -> 3225 bytes etrago/tools/shapes_europe/shapes_europe.prj | 1 + etrago/tools/shapes_europe/shapes_europe.shp | Bin 0 -> 34664 bytes etrago/tools/shapes_europe/shapes_europe.shx | Bin 0 -> 412 bytes etrago/tools/utilities.py | 8 +++++--- 6 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 etrago/tools/shapes_europe/shapes_europe.cpg create mode 100644 etrago/tools/shapes_europe/shapes_europe.dbf create mode 100644 etrago/tools/shapes_europe/shapes_europe.prj create mode 100644 etrago/tools/shapes_europe/shapes_europe.shp create mode 100644 etrago/tools/shapes_europe/shapes_europe.shx diff --git a/etrago/tools/shapes_europe/shapes_europe.cpg b/etrago/tools/shapes_europe/shapes_europe.cpg new file mode 100644 index 00000000..cd89cb97 --- /dev/null +++ b/etrago/tools/shapes_europe/shapes_europe.cpg @@ -0,0 +1 @@ +ISO-8859-1 \ No newline at end of file diff --git a/etrago/tools/shapes_europe/shapes_europe.dbf b/etrago/tools/shapes_europe/shapes_europe.dbf new file mode 100644 index 0000000000000000000000000000000000000000..1a2f3f2f8e26dab864ac6a4d8c014c68a34ec302 GIT binary patch literal 3225 zcmb`J&1%Ci5QGiA6$(A~q+4%&ha_!&$PZ~u9$;fHwy>-%E6Hg?AHFi_sXb)kIJQ^Cpw!-r#?+95l~{h{4FIEM&`R@`LhgW7BnSMGjd^9?lXf`KM{gt7 zW^H{_3&K6C3f#le$-u~jom-Ec@>n5tz_^)RxN3nsGnFuQaP;<)_40DFfASw}Y|WM` ft})xMWIZ7jo2~fBo*R{$#a;nx2{NEy8Ts@B9?0Pd literal 0 HcmV?d00001 diff --git a/etrago/tools/shapes_europe/shapes_europe.prj b/etrago/tools/shapes_europe/shapes_europe.prj new file mode 100644 index 00000000..f45cbadf --- /dev/null +++ b/etrago/tools/shapes_europe/shapes_europe.prj @@ -0,0 +1 @@ +GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]] \ No newline at end of file diff --git a/etrago/tools/shapes_europe/shapes_europe.shp b/etrago/tools/shapes_europe/shapes_europe.shp new file mode 100644 index 0000000000000000000000000000000000000000..443b060ef857ee96c30f96fafdf78c54752391b2 GIT binary patch literal 34664 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 J{9nQH`yZ$dd&K|% literal 0 HcmV?d00001 diff --git a/etrago/tools/shapes_europe/shapes_europe.shx b/etrago/tools/shapes_europe/shapes_europe.shx new file mode 100644 index 0000000000000000000000000000000000000000..be514f84f944489a29d1f6b42929b6a1704e8cab GIT binary patch literal 412 zcmaKnJxD@P97oT4QA4x^ks)MBT4HJz6n)_3(XNA#YYChHz*Q zC%2*@LL8)_slh269700+$;B=lj{c62=|G{GxfP zRWHVJc{42ehiRCs>2|>VfT@Of2mueA0?gcsJ_P4MOPP&W58aCf=Dx&f2oK(>8R5SC z1Qt%^6^JCnXR&8J`k;IpmTu(V5WAAUK>R@7f@LE=g2bcsFtn zNE@*Nt6lVSSkrE|3G3?N9X7Pz5jQ8~RZ(x@4z`XJFTnPjowK8UCk2^Bt08!{{nb(J_7&% literal 0 HcmV?d00001 diff --git a/etrago/tools/utilities.py b/etrago/tools/utilities.py index b5f73f92..8d3436af 100755 --- a/etrago/tools/utilities.py +++ b/etrago/tools/utilities.py @@ -24,6 +24,7 @@ from collections.abc import Mapping from copy import deepcopy +from pathlib import Path import json import logging import math @@ -287,9 +288,10 @@ def buses_by_country(self, apply_on="grid_model"): con = self.engine germany_sh = gpd.read_postgis(query, con, geom_col="geometry") - path = gpd.datasets.get_path("naturalearth_lowres") - shapes = gpd.read_file(path) - shapes = shapes[shapes.name.isin([*countries])].set_index(keys="name") + # read Europe borders. Original data downloaded from naturalearthdata.com/ + # under Public Domain license + path = Path(".") / "tools" / "shapes_europe" + shapes = gpd.read_file(path).set_index("name") # Use Germany borders from egon-data if not using the SH test case if len(germany_sh.gen.unique()) > 1: