[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
This commit is contained in:
parent
eae92c837c
commit
399907c1f4
@ -12,10 +12,12 @@
|
||||
"import os\n",
|
||||
"from pathlib import Path\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"\n",
|
||||
"plt.style.use(\"ggplot\")\n",
|
||||
"import pycountry\n",
|
||||
"import json\n",
|
||||
"import warnings\n",
|
||||
"\n",
|
||||
"warnings.filterwarnings(\"ignore\")"
|
||||
]
|
||||
},
|
||||
@ -116,13 +118,11 @@
|
||||
"gen = set([col[6:] for col in n.generators_t.p.columns])\n",
|
||||
"\n",
|
||||
"for i, country in enumerate(countries):\n",
|
||||
"\n",
|
||||
" df = pd.DataFrame(index=n.generators_t.p.index)\n",
|
||||
" # country_generation = [col for col in n.generators_t.p.columns if col.startswith(country)]\n",
|
||||
" country_generation = n.generators.loc[n.generators.bus.str.contains(country)]\n",
|
||||
"\n",
|
||||
" for key, gens in pypsa_generation_mapper.items():\n",
|
||||
"\n",
|
||||
" # curr_gen = country_generation.loc[\n",
|
||||
" # (country_generation.carrier.str.contains(tech) for tech in gens).astype(bool)].index\n",
|
||||
" curr_gen = country_generation.loc[\n",
|
||||
@ -134,8 +134,7 @@
|
||||
" else:\n",
|
||||
" df[key] = np.zeros(len(df))\n",
|
||||
"\n",
|
||||
" df.to_csv(data_path / \"pypsa_data\" / (country+\".csv\"))\n",
|
||||
" "
|
||||
" df.to_csv(data_path / \"pypsa_data\" / (country + \".csv\"))"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -144,8 +143,22 @@
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"total_inflow_cols = ['Solar', 'Wind Onshore', 'Nuclear', 'Lignite', 'Inflow Lines', 'Inflow Links', 'Wind Offshore', 'Biomass', 'Run of River', 'Hydro', 'Hard Coal', 'Gas', 'Oil']\n",
|
||||
"total_outflow_cols = ['Outflow Links', 'Outflow Lines', 'Storage Charge']"
|
||||
"total_inflow_cols = [\n",
|
||||
" \"Solar\",\n",
|
||||
" \"Wind Onshore\",\n",
|
||||
" \"Nuclear\",\n",
|
||||
" \"Lignite\",\n",
|
||||
" \"Inflow Lines\",\n",
|
||||
" \"Inflow Links\",\n",
|
||||
" \"Wind Offshore\",\n",
|
||||
" \"Biomass\",\n",
|
||||
" \"Run of River\",\n",
|
||||
" \"Hydro\",\n",
|
||||
" \"Hard Coal\",\n",
|
||||
" \"Gas\",\n",
|
||||
" \"Oil\",\n",
|
||||
"]\n",
|
||||
"total_outflow_cols = [\"Outflow Links\", \"Outflow Lines\", \"Storage Charge\"]"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -169,23 +182,35 @@
|
||||
"\n",
|
||||
"index = n.generators_t.p.index\n",
|
||||
"\n",
|
||||
"pypsa_total_inflow = pd.DataFrame(np.zeros((len(index), len(total_inflow_cols))),\n",
|
||||
" index=index, columns=total_inflow_cols)\n",
|
||||
"entsoe_df = pd.read_csv(data_path / \"harmonised_generation_data\" / (\"prepared_DE.csv\"),\n",
|
||||
"pypsa_total_inflow = pd.DataFrame(\n",
|
||||
" np.zeros((len(index), len(total_inflow_cols))),\n",
|
||||
" index=index,\n",
|
||||
" columns=total_inflow_cols,\n",
|
||||
")\n",
|
||||
"entsoe_df = pd.read_csv(\n",
|
||||
" data_path / \"harmonised_generation_data\" / (\"prepared_DE.csv\"),\n",
|
||||
" parse_dates=True,\n",
|
||||
" index_col=0)\n",
|
||||
"entsoe_total_inflow = pd.DataFrame(np.zeros((len(entsoe_df), len(total_inflow_cols))),\n",
|
||||
" index=entsoe_df.index, columns=total_inflow_cols)\n",
|
||||
"pypsa_total_outflow = pd.DataFrame(np.zeros((len(index), len(total_outflow_cols))),\n",
|
||||
" index=index, columns=total_outflow_cols)\n",
|
||||
" index_col=0,\n",
|
||||
")\n",
|
||||
"entsoe_total_inflow = pd.DataFrame(\n",
|
||||
" np.zeros((len(entsoe_df), len(total_inflow_cols))),\n",
|
||||
" index=entsoe_df.index,\n",
|
||||
" columns=total_inflow_cols,\n",
|
||||
")\n",
|
||||
"pypsa_total_outflow = pd.DataFrame(\n",
|
||||
" np.zeros((len(index), len(total_outflow_cols))),\n",
|
||||
" index=index,\n",
|
||||
" columns=total_outflow_cols,\n",
|
||||
")\n",
|
||||
"total_load = pd.Series(index=index)\n",
|
||||
"\n",
|
||||
"for num, country in enumerate(os.listdir(data_path / \"pypsa_data\")):\n",
|
||||
"\n",
|
||||
" # country = \"DE.csv\"\n",
|
||||
" cc = country[:2]\n",
|
||||
"\n",
|
||||
" country_buses = np.unique(n.generators.loc[n.generators.bus.str.contains(cc)].bus.values)\n",
|
||||
" country_buses = np.unique(\n",
|
||||
" n.generators.loc[n.generators.bus.str.contains(cc)].bus.values\n",
|
||||
" )\n",
|
||||
" print(f\"Buses for country {country[:-4]}: \", country_buses)\n",
|
||||
"\n",
|
||||
" if not len(country_buses) == 1:\n",
|
||||
@ -199,9 +224,11 @@
|
||||
" pypsa_df = pd.read_csv(data_path / \"pypsa_data\" / country, parse_dates=True, index_col=0)\n",
|
||||
" \"\"\"\n",
|
||||
" try:\n",
|
||||
" entsoe_df = pd.read_csv(data_path / \"harmonised_generation_data\" / (\"prepared_\"+country),\n",
|
||||
" entsoe_df = pd.read_csv(\n",
|
||||
" data_path / \"harmonised_generation_data\" / (\"prepared_\" + country),\n",
|
||||
" parse_dates=True,\n",
|
||||
" index_col=0)\n",
|
||||
" index_col=0,\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" entsoe_df.columns = [col[:-6] for col in entsoe_df.columns]\n",
|
||||
" entsoe_df = entsoe_df.iloc[1:]\n",
|
||||
@ -226,7 +253,9 @@
|
||||
" country_gen = n.generators.loc[n.generators.bus == bus]\n",
|
||||
"\n",
|
||||
" for tech, pypsa_carrier in pypsa_generation_mapper.items():\n",
|
||||
" gens = country_gen.loc[country_gen.carrier.apply(lambda c: c in pypsa_carrier)].index\n",
|
||||
" gens = country_gen.loc[\n",
|
||||
" country_gen.carrier.apply(lambda c: c in pypsa_carrier)\n",
|
||||
" ].index\n",
|
||||
" energy_inflow[tech] = n.generators_t.p[gens].sum(axis=1)\n",
|
||||
"\n",
|
||||
" # add inflows from lines\n",
|
||||
@ -249,10 +278,16 @@
|
||||
"\n",
|
||||
" links_flow = np.zeros(energy_inflow.shape[0])\n",
|
||||
" if not links0.empty:\n",
|
||||
" links_flow = - n.links_t.p0[links0].multiply(n.links.loc[links0, \"efficiency\"]).sum(axis=1)\n",
|
||||
" links_flow = (\n",
|
||||
" -n.links_t.p0[links0]\n",
|
||||
" .multiply(n.links.loc[links0, \"efficiency\"])\n",
|
||||
" .sum(axis=1)\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" if not links1.empty:\n",
|
||||
" links_flow -= n.links_t.p1[links1].multiply(n.links.loc[links1, \"efficiency\"]).sum(axis=1)\n",
|
||||
" links_flow -= (\n",
|
||||
" n.links_t.p1[links1].multiply(n.links.loc[links1, \"efficiency\"]).sum(axis=1)\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" energy_inflow[\"Inflow Links\"] = np.maximum(np.zeros_like(links_flow), links_flow)\n",
|
||||
" energy_outflow[\"Outflow Links\"] = np.minimum(np.zeros_like(links_flow), links_flow)\n",
|
||||
@ -261,8 +296,12 @@
|
||||
" if not storage.empty:\n",
|
||||
" storage_p = n.storage_units_t.p[storage].sum(axis=1).values\n",
|
||||
" # energy_inflow[\"Storage Discharge\"] = np.maximum(np.zeros_like(links_flow), storage_p)\n",
|
||||
" energy_inflow[\"Hydro\"] = energy_inflow[\"Hydro\"].values + np.maximum(np.zeros_like(links_flow), storage_p)\n",
|
||||
" energy_outflow[\"Storage Charge\"] = np.minimum(np.zeros_like(links_flow), storage_p)\n",
|
||||
" energy_inflow[\"Hydro\"] = energy_inflow[\"Hydro\"].values + np.maximum(\n",
|
||||
" np.zeros_like(links_flow), storage_p\n",
|
||||
" )\n",
|
||||
" energy_outflow[\"Storage Charge\"] = np.minimum(\n",
|
||||
" np.zeros_like(links_flow), storage_p\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" energy_inflow = energy_inflow.iloc[:-1].multiply(1e-3)\n",
|
||||
" energy_outflow = energy_outflow.iloc[:-1].multiply(1e-3)\n",
|
||||
@ -282,12 +321,22 @@
|
||||
" )\n",
|
||||
"\n",
|
||||
" entsoe_total_inflow = entsoe_total_inflow.loc[entsoe_df.index]\n",
|
||||
" entsoe_total_inflow[entsoe_df.columns] = (\n",
|
||||
" entsoe_total_inflow[entsoe_df.columns] + entsoe_df.fillna(0.)\n",
|
||||
" )\n",
|
||||
" entsoe_total_inflow[entsoe_df.columns] = entsoe_total_inflow[\n",
|
||||
" entsoe_df.columns\n",
|
||||
" ] + entsoe_df.fillna(0.0)\n",
|
||||
"\n",
|
||||
" show_techs = energy_inflow.sum().sort_values(ascending=False).iloc[:num_techs_shown].index.tolist()\n",
|
||||
" others = energy_inflow.sum().sort_values(ascending=False).iloc[num_techs_shown:].index.tolist()\n",
|
||||
" show_techs = (\n",
|
||||
" energy_inflow.sum()\n",
|
||||
" .sort_values(ascending=False)\n",
|
||||
" .iloc[:num_techs_shown]\n",
|
||||
" .index.tolist()\n",
|
||||
" )\n",
|
||||
" others = (\n",
|
||||
" energy_inflow.sum()\n",
|
||||
" .sort_values(ascending=False)\n",
|
||||
" .iloc[num_techs_shown:]\n",
|
||||
" .index.tolist()\n",
|
||||
" )\n",
|
||||
" # show_techs = entsoe_df.sum().sort_values(ascending=False).iloc[:num_techs_shown].index.tolist()\n",
|
||||
"\n",
|
||||
" show_techs = intersection(show_techs, entsoe_df.columns.tolist())\n",
|
||||
@ -301,24 +350,45 @@
|
||||
" energy_inflow[\"Others\"] = energy_inflow.drop(columns=show_techs).sum(axis=1)\n",
|
||||
"\n",
|
||||
" # plot timeframe\n",
|
||||
" axs[0,0].plot(index, load.loc[index].values, linestyle=\"--\", color=\"k\", linewidth=2, label=\"PyPSA Load\")\n",
|
||||
" axs[0,1].plot(index, load.loc[index].values, linestyle=\"--\", color=\"k\", linewidth=2)\n",
|
||||
" axs[0, 0].plot(\n",
|
||||
" index,\n",
|
||||
" load.loc[index].values,\n",
|
||||
" linestyle=\"--\",\n",
|
||||
" color=\"k\",\n",
|
||||
" linewidth=2,\n",
|
||||
" label=\"PyPSA Load\",\n",
|
||||
" )\n",
|
||||
" axs[0, 1].plot(\n",
|
||||
" index, load.loc[index].values, linestyle=\"--\", color=\"k\", linewidth=2\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" axs[0,1].stackplot(index,\n",
|
||||
" axs[0, 1].stackplot(\n",
|
||||
" index,\n",
|
||||
" *[energy_inflow[col].loc[index].values for col in show_techs + [\"Others\"]],\n",
|
||||
" colors=color_mapper.loc[show_techs + [\"Others\"]].tolist()\n",
|
||||
" colors=color_mapper.loc[show_techs + [\"Others\"]].tolist(),\n",
|
||||
" )\n",
|
||||
" axs[0,1].stackplot(index, *[energy_outflow[col].loc[index].values for col in energy_outflow.columns],\n",
|
||||
" axs[0, 1].stackplot(\n",
|
||||
" index,\n",
|
||||
" *[energy_outflow[col].loc[index].values for col in energy_outflow.columns],\n",
|
||||
" colors=color_mapper.loc[energy_outflow.columns].tolist(),\n",
|
||||
" labels=energy_outflow.columns\n",
|
||||
" labels=energy_outflow.columns,\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" axs[0,0].stackplot(index, *[entsoe_df[col].loc[index].values for col in show_techs + [\"Others\"]],\n",
|
||||
" axs[0, 0].stackplot(\n",
|
||||
" index,\n",
|
||||
" *[entsoe_df[col].loc[index].values for col in show_techs + [\"Others\"]],\n",
|
||||
" labels=show_techs + [\"Others\"],\n",
|
||||
" colors=color_mapper.loc[show_techs + [\"Others\"]].tolist())\n",
|
||||
" axs[0,1].plot(index,\n",
|
||||
" energy_inflow.loc[index][show_techs + [\"Others\"]].sum(axis=1).values + energy_outflow.loc[index].sum(axis=1).values,\n",
|
||||
" color=\"brown\", linestyle=\":\", linewidth=2, label=\"Accum Gen\")\n",
|
||||
" colors=color_mapper.loc[show_techs + [\"Others\"]].tolist(),\n",
|
||||
" )\n",
|
||||
" axs[0, 1].plot(\n",
|
||||
" index,\n",
|
||||
" energy_inflow.loc[index][show_techs + [\"Others\"]].sum(axis=1).values\n",
|
||||
" + energy_outflow.loc[index].sum(axis=1).values,\n",
|
||||
" color=\"brown\",\n",
|
||||
" linestyle=\":\",\n",
|
||||
" linewidth=2,\n",
|
||||
" label=\"Accum Gen\",\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" axs[0, 0].legend()\n",
|
||||
" axs[0, 1].legend()\n",
|
||||
@ -327,34 +397,70 @@
|
||||
"\n",
|
||||
" index = load.resample(coarse_freq).mean().index\n",
|
||||
"\n",
|
||||
" axs[1,0].plot(index, load.resample(coarse_freq).mean().values, linestyle=\"--\", color=\"k\", linewidth=2, label=\"PyPSA Load\")\n",
|
||||
" axs[1,1].plot(index, load.resample(coarse_freq).mean().values, linestyle=\"--\", color=\"k\", linewidth=2)\n",
|
||||
"\n",
|
||||
" axs[1,1].stackplot(index, *[energy_inflow[col].resample(coarse_freq).mean().values for col in show_techs + [\"Others\"]],\n",
|
||||
" colors=color_mapper.loc[show_techs + [\"Others\"]].tolist())\n",
|
||||
" axs[1,1].stackplot(index, *[energy_outflow[col].resample(coarse_freq).mean().values for col in energy_outflow.columns],\n",
|
||||
" colors=color_mapper.loc[energy_outflow.columns].tolist(),\n",
|
||||
" labels=energy_outflow.columns\n",
|
||||
" axs[1, 0].plot(\n",
|
||||
" index,\n",
|
||||
" load.resample(coarse_freq).mean().values,\n",
|
||||
" linestyle=\"--\",\n",
|
||||
" color=\"k\",\n",
|
||||
" linewidth=2,\n",
|
||||
" label=\"PyPSA Load\",\n",
|
||||
" )\n",
|
||||
" axs[1, 1].plot(\n",
|
||||
" index,\n",
|
||||
" load.resample(coarse_freq).mean().values,\n",
|
||||
" linestyle=\"--\",\n",
|
||||
" color=\"k\",\n",
|
||||
" linewidth=2,\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" axs[1,0].stackplot(index, *[entsoe_df[col].resample(coarse_freq).mean().values for col in show_techs + [\"Others\"]],\n",
|
||||
" axs[1, 1].stackplot(\n",
|
||||
" index,\n",
|
||||
" *[\n",
|
||||
" energy_inflow[col].resample(coarse_freq).mean().values\n",
|
||||
" for col in show_techs + [\"Others\"]\n",
|
||||
" ],\n",
|
||||
" colors=color_mapper.loc[show_techs + [\"Others\"]].tolist(),\n",
|
||||
" labels=show_techs+[\"Others\"])\n",
|
||||
" )\n",
|
||||
" axs[1, 1].stackplot(\n",
|
||||
" index,\n",
|
||||
" *[\n",
|
||||
" energy_outflow[col].resample(coarse_freq).mean().values\n",
|
||||
" for col in energy_outflow.columns\n",
|
||||
" ],\n",
|
||||
" colors=color_mapper.loc[energy_outflow.columns].tolist(),\n",
|
||||
" labels=energy_outflow.columns,\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" axs[1,1].plot(index,\n",
|
||||
" energy_inflow.resample(coarse_freq).mean()[show_techs + [\"Others\"]].sum(axis=1).values + \n",
|
||||
" energy_outflow.resample(coarse_freq).mean().sum(axis=1).values,\n",
|
||||
" color=\"brown\", linestyle=\":\", linewidth=2, label=\"Accum Gen\")\n",
|
||||
" axs[1, 0].stackplot(\n",
|
||||
" index,\n",
|
||||
" *[\n",
|
||||
" entsoe_df[col].resample(coarse_freq).mean().values\n",
|
||||
" for col in show_techs + [\"Others\"]\n",
|
||||
" ],\n",
|
||||
" colors=color_mapper.loc[show_techs + [\"Others\"]].tolist(),\n",
|
||||
" labels=show_techs + [\"Others\"],\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" axs[1, 1].plot(\n",
|
||||
" index,\n",
|
||||
" energy_inflow.resample(coarse_freq)\n",
|
||||
" .mean()[show_techs + [\"Others\"]]\n",
|
||||
" .sum(axis=1)\n",
|
||||
" .values\n",
|
||||
" + energy_outflow.resample(coarse_freq).mean().sum(axis=1).values,\n",
|
||||
" color=\"brown\",\n",
|
||||
" linestyle=\":\",\n",
|
||||
" linewidth=2,\n",
|
||||
" label=\"Accum Gen\",\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" axs[1, 0].legend()\n",
|
||||
" axs[1, 1].legend()\n",
|
||||
"\n",
|
||||
"\n",
|
||||
" y_min = pd.concat([\n",
|
||||
" energy_outflow.sum(axis=1)]).min()\n",
|
||||
" y_max = pd.concat([\n",
|
||||
" energy_inflow.sum(axis=1), entsoe_df.sum(axis=1)], ignore_index=True).max()\n",
|
||||
" y_min = pd.concat([energy_outflow.sum(axis=1)]).min()\n",
|
||||
" y_max = pd.concat(\n",
|
||||
" [energy_inflow.sum(axis=1), entsoe_df.sum(axis=1)], ignore_index=True\n",
|
||||
" ).max()\n",
|
||||
"\n",
|
||||
" for ax in axs[:2, :2].flatten():\n",
|
||||
" ax.set_ylim(y_min, y_max)\n",
|
||||
@ -368,7 +474,9 @@
|
||||
" axs[2, 1].set_ylabel(\"PyPSA Gen and Load [GW]\")\n",
|
||||
"\n",
|
||||
" # -------------------------- electricity prices comparison ----------------------------------\n",
|
||||
" prices_col = [col for col in n.buses_t.marginal_price.columns if col.startswith(country[:2])]\n",
|
||||
" prices_col = [\n",
|
||||
" col for col in n.buses_t.marginal_price.columns if col.startswith(country[:2])\n",
|
||||
" ]\n",
|
||||
" pypsa_prices = n.buses_t.marginal_price[prices_col].mean(axis=1)\n",
|
||||
"\n",
|
||||
" full_index = pypsa_prices.index\n",
|
||||
@ -376,27 +484,48 @@
|
||||
" coarse_pypsa_prices = pypsa_prices.resample(coarse_freq).mean()\n",
|
||||
" pypsa_prices = pypsa_prices.loc[start:end]\n",
|
||||
"\n",
|
||||
" axs[0,2].plot(pypsa_prices.index, pypsa_prices.values, label=\"PyPSA prices\", color=\"royalblue\")\n",
|
||||
" axs[1,2].plot(coarse_pypsa_prices.index, coarse_pypsa_prices.values, label=\"PyPSA prices\", color=\"royalblue\")\n",
|
||||
" axs[0, 2].plot(\n",
|
||||
" pypsa_prices.index, pypsa_prices.values, label=\"PyPSA prices\", color=\"royalblue\"\n",
|
||||
" )\n",
|
||||
" axs[1, 2].plot(\n",
|
||||
" coarse_pypsa_prices.index,\n",
|
||||
" coarse_pypsa_prices.values,\n",
|
||||
" label=\"PyPSA prices\",\n",
|
||||
" color=\"royalblue\",\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" try:\n",
|
||||
" entsoe_prices = pd.read_csv(data_path / \"price_data\" / country,\n",
|
||||
" entsoe_prices = pd.read_csv(\n",
|
||||
" data_path / \"price_data\" / country,\n",
|
||||
" index_col=0,\n",
|
||||
" parse_dates=True,\n",
|
||||
" ).iloc[:-1]\n",
|
||||
"\n",
|
||||
" def make_tz_time(time):\n",
|
||||
" return pd.Timestamp(time).tz_convert(\"utc\")\n",
|
||||
"\n",
|
||||
" # entsoe_prices.index = pd.Series(entsoe_prices.index).apply(lambda time: make_tz_time(time))\n",
|
||||
" entsoe_prices.index = full_index\n",
|
||||
" mean_abs_error = mean_absolute_error(entsoe_prices.values,\n",
|
||||
" n.buses_t.marginal_price[prices_col].mean(axis=1).values)\n",
|
||||
" mean_abs_error = mean_absolute_error(\n",
|
||||
" entsoe_prices.values,\n",
|
||||
" n.buses_t.marginal_price[prices_col].mean(axis=1).values,\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" coarse_prices = entsoe_prices.resample(coarse_freq).mean()\n",
|
||||
" entsoe_prices = entsoe_prices.loc[start:end]\n",
|
||||
"\n",
|
||||
" axs[0,2].plot(entsoe_prices.index, entsoe_prices.values, label=\"ENTSOE prices\", color=\"darkred\")\n",
|
||||
" axs[1,2].plot(coarse_prices.index, coarse_prices.values, label=\"ENTSOE prices\", color=\"darkred\")\n",
|
||||
" axs[0, 2].plot(\n",
|
||||
" entsoe_prices.index,\n",
|
||||
" entsoe_prices.values,\n",
|
||||
" label=\"ENTSOE prices\",\n",
|
||||
" color=\"darkred\",\n",
|
||||
" )\n",
|
||||
" axs[1, 2].plot(\n",
|
||||
" coarse_prices.index,\n",
|
||||
" coarse_prices.values,\n",
|
||||
" label=\"ENTSOE prices\",\n",
|
||||
" color=\"darkred\",\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" except FileNotFoundError:\n",
|
||||
" mean_abs_error = None\n",
|
||||
@ -418,33 +547,54 @@
|
||||
"\n",
|
||||
" entsoe_ddf = entsoe_df[show_techs + [\"Others\"]].reset_index(drop=True)\n",
|
||||
"\n",
|
||||
" entsoe_ddf = pd.concat([\n",
|
||||
" entsoe_ddf[col].sort_values(ascending=False).reset_index(drop=True) for col in entsoe_ddf.columns\n",
|
||||
" ], axis=1)\n",
|
||||
" entsoe_ddf = pd.concat(\n",
|
||||
" [\n",
|
||||
" entsoe_ddf[col].sort_values(ascending=False).reset_index(drop=True)\n",
|
||||
" for col in entsoe_ddf.columns\n",
|
||||
" ],\n",
|
||||
" axis=1,\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" axs[2,0].stackplot(range(len(entsoe_ddf)), *[entsoe_ddf[col].values for col in entsoe_ddf.columns],\n",
|
||||
" axs[2, 0].stackplot(\n",
|
||||
" range(len(entsoe_ddf)),\n",
|
||||
" *[entsoe_ddf[col].values for col in entsoe_ddf.columns],\n",
|
||||
" colors=color_mapper.loc[entsoe_ddf.columns].tolist(),\n",
|
||||
" labels=entsoe_ddf.columns)\n",
|
||||
" labels=entsoe_ddf.columns,\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" pypsa_ddf = energy_inflow[show_techs + [\"Others\"]].reset_index(drop=True)\n",
|
||||
" pypsa_ddf = pd.concat([\n",
|
||||
" pypsa_ddf[col].sort_values(ascending=False).reset_index(drop=True) for col in pypsa_ddf.columns\n",
|
||||
" ], axis=1)\n",
|
||||
" pypsa_ddf = pd.concat(\n",
|
||||
" [\n",
|
||||
" pypsa_ddf[col].sort_values(ascending=False).reset_index(drop=True)\n",
|
||||
" for col in pypsa_ddf.columns\n",
|
||||
" ],\n",
|
||||
" axis=1,\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" axs[2,1].stackplot(range(len(pypsa_ddf)), *[pypsa_ddf[col].values for col in pypsa_ddf.columns],\n",
|
||||
" axs[2, 1].stackplot(\n",
|
||||
" range(len(pypsa_ddf)),\n",
|
||||
" *[pypsa_ddf[col].values for col in pypsa_ddf.columns],\n",
|
||||
" colors=color_mapper.loc[pypsa_ddf.columns].tolist(),\n",
|
||||
" labels=pypsa_ddf.columns)\n",
|
||||
" labels=pypsa_ddf.columns,\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" ylim_max = max([pypsa_ddf.max(axis=0).sum(), entsoe_ddf.max(axis=0).sum()])\n",
|
||||
"\n",
|
||||
" pypsa_ddf = energy_outflow.reset_index(drop=True)\n",
|
||||
" pypsa_ddf = pd.concat([\n",
|
||||
" pypsa_ddf[col].sort_values(ascending=True).reset_index(drop=True) for col in pypsa_ddf.columns\n",
|
||||
" ], axis=1)\n",
|
||||
" pypsa_ddf = pd.concat(\n",
|
||||
" [\n",
|
||||
" pypsa_ddf[col].sort_values(ascending=True).reset_index(drop=True)\n",
|
||||
" for col in pypsa_ddf.columns\n",
|
||||
" ],\n",
|
||||
" axis=1,\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" axs[2,1].stackplot(range(len(pypsa_ddf)), *[pypsa_ddf[col].values for col in pypsa_ddf.columns],\n",
|
||||
" axs[2, 1].stackplot(\n",
|
||||
" range(len(pypsa_ddf)),\n",
|
||||
" *[pypsa_ddf[col].values for col in pypsa_ddf.columns],\n",
|
||||
" colors=color_mapper.loc[pypsa_ddf.columns].tolist(),\n",
|
||||
" labels=energy_outflow.columns)\n",
|
||||
" labels=energy_outflow.columns,\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" ylim_min = energy_outflow.min(axis=0).sum()\n",
|
||||
"\n",
|
||||
@ -452,53 +602,74 @@
|
||||
" ax.legend()\n",
|
||||
" ax.set_ylim(ylim_min, ylim_max)\n",
|
||||
"\n",
|
||||
" pypsa_totals = pd.concat([energy_inflow[show_techs + [\"Others\"]], energy_outflow], axis=1).sum() \n",
|
||||
" pypsa_totals = pd.concat(\n",
|
||||
" [energy_inflow[show_techs + [\"Others\"]], energy_outflow], axis=1\n",
|
||||
" ).sum()\n",
|
||||
"\n",
|
||||
" entsoe_totals = entsoe_df.sum()\n",
|
||||
" totals = pd.DataFrame(index=pypsa_totals.index)\n",
|
||||
"\n",
|
||||
" for tech in pypsa_totals.index:\n",
|
||||
" if tech not in entsoe_totals.index:\n",
|
||||
" entsoe_totals.loc[tech] = 0.\n",
|
||||
" entsoe_totals.loc[tech] = 0.0\n",
|
||||
"\n",
|
||||
" totals[\"Pypsa\"] = pypsa_totals\n",
|
||||
" totals[\"Entsoe\"] = entsoe_totals\n",
|
||||
" totals[\"Technology\"] = totals.index\n",
|
||||
"\n",
|
||||
" totals = pd.concat([\n",
|
||||
" pd.DataFrame({\"Source\": [\"PyPSA\" for _ in range(len(pypsa_totals))],\n",
|
||||
" totals = pd.concat(\n",
|
||||
" [\n",
|
||||
" pd.DataFrame(\n",
|
||||
" {\n",
|
||||
" \"Source\": [\"PyPSA\" for _ in range(len(pypsa_totals))],\n",
|
||||
" \"Technology\": pypsa_totals.index,\n",
|
||||
" \"Total Generation\": pypsa_totals.values,\n",
|
||||
" }),\n",
|
||||
" pd.DataFrame({\"Source\": [\"ENTSO-E\" for _ in range(len(entsoe_totals))],\n",
|
||||
" }\n",
|
||||
" ),\n",
|
||||
" pd.DataFrame(\n",
|
||||
" {\n",
|
||||
" \"Source\": [\"ENTSO-E\" for _ in range(len(entsoe_totals))],\n",
|
||||
" \"Technology\": entsoe_totals.index,\n",
|
||||
" \"Total Generation\": entsoe_totals.values,\n",
|
||||
" }),], axis=0\n",
|
||||
" }\n",
|
||||
" ),\n",
|
||||
" ],\n",
|
||||
" axis=0,\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" sns.barplot(data=totals, x=\"Technology\", y=\"Total Generation\", hue=\"Source\", ax=axs[2,2],\n",
|
||||
" palette=\"dark\", alpha=.6, edgecolor=\"k\")\n",
|
||||
" sns.barplot(\n",
|
||||
" data=totals,\n",
|
||||
" x=\"Technology\",\n",
|
||||
" y=\"Total Generation\",\n",
|
||||
" hue=\"Source\",\n",
|
||||
" ax=axs[2, 2],\n",
|
||||
" palette=\"dark\",\n",
|
||||
" alpha=0.6,\n",
|
||||
" edgecolor=\"k\",\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" axs[2, 0].set_xlabel(\"Hours\")\n",
|
||||
" axs[2, 1].set_xlabel(\"Hours\")\n",
|
||||
" axs[2, 2].set_ylabel(\"Total Generation [GWh]\")\n",
|
||||
" axs[2,2].set_xticks(axs[2,2].get_xticks(), axs[2,2].get_xticklabels(), rotation=45, ha='right')\n",
|
||||
" axs[2, 2].set_xticks(\n",
|
||||
" axs[2, 2].get_xticks(), axs[2, 2].get_xticklabels(), rotation=45, ha=\"right\"\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" corrs = (\n",
|
||||
" energy_inflow\n",
|
||||
" .corrwith(entsoe_df)\n",
|
||||
" energy_inflow.corrwith(entsoe_df)\n",
|
||||
" .drop(index=\"Others\")\n",
|
||||
" .dropna()\n",
|
||||
" .sort_values(ascending=False)\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" for col, ax in zip(corrs.index[:2].tolist() + [corrs.index[-1]], axs[3]):\n",
|
||||
" ax.scatter(entsoe_df[col].values,\n",
|
||||
" ax.scatter(\n",
|
||||
" entsoe_df[col].values,\n",
|
||||
" energy_inflow[col].values,\n",
|
||||
" color=\"darkred\",\n",
|
||||
" alpha=0.5,\n",
|
||||
" s=20,\n",
|
||||
" edgecolor=\"k\" \n",
|
||||
" edgecolor=\"k\",\n",
|
||||
" )\n",
|
||||
" ax.set_title(f\"{col}; Pearson Corr {np.around(corrs.loc[col], decimals=4)}\")\n",
|
||||
" ax.set_xlabel(\"ENTSO-E Generation [GW]\")\n",
|
||||
@ -507,7 +678,6 @@
|
||||
" for ax in axs[:2].flatten():\n",
|
||||
" ax.set_xlabel(\"Datetime\")\n",
|
||||
"\n",
|
||||
"\n",
|
||||
" plt.tight_layout()\n",
|
||||
" plt.savefig(plot_path / (cc + \".pdf\"))\n",
|
||||
"\n",
|
||||
@ -536,52 +706,82 @@
|
||||
"from tqdm import tqdm\n",
|
||||
"import pandas as pd\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"\n",
|
||||
"plt.style.use(\"ggplot\")\n",
|
||||
"import seaborn as sns\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"entsoe_total_inflow = pd.read_csv(\"total_inflow_entsoe.csv\", index_col=0, parse_dates=True)\n",
|
||||
"pypsa_total_inflow = pd.read_csv(\"total_inflow_pypsa.csv\", index_col=0, parse_dates=True)\n",
|
||||
"pypsa_total_outflow = pd.read_csv(\"total_outflow_pypsa.csv\", index_col=0, parse_dates=True)\n",
|
||||
"entsoe_total_inflow = pd.read_csv(\n",
|
||||
" \"total_inflow_entsoe.csv\", index_col=0, parse_dates=True\n",
|
||||
")\n",
|
||||
"pypsa_total_inflow = pd.read_csv(\n",
|
||||
" \"total_inflow_pypsa.csv\", index_col=0, parse_dates=True\n",
|
||||
")\n",
|
||||
"pypsa_total_outflow = pd.read_csv(\n",
|
||||
" \"total_outflow_pypsa.csv\", index_col=0, parse_dates=True\n",
|
||||
")\n",
|
||||
"total_load = pd.read_csv(\"total_load.csv\", index_col=0, parse_dates=True)\n",
|
||||
"\n",
|
||||
"fig, ax = plt.subplots(1, 1, figsize=(10, 6))\n",
|
||||
"\n",
|
||||
"# pypsa_totals = pd.concat([pypsa_total_inflow, pypsa_total_outflow], axis=1).sum() * 1e-3\n",
|
||||
"pypsa_totals = pypsa_total_inflow.drop(columns=[\"Inflow Lines\", \"Inflow Links\"]).sum() * 1e-3\n",
|
||||
"pypsa_totals = (\n",
|
||||
" pypsa_total_inflow.drop(columns=[\"Inflow Lines\", \"Inflow Links\"]).sum() * 1e-3\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"entsoe_totals = entsoe_total_inflow.drop(columns=[\"Inflow Lines\", \"Inflow Links\"]).sum() * 1e-3\n",
|
||||
"entsoe_totals = (\n",
|
||||
" entsoe_total_inflow.drop(columns=[\"Inflow Lines\", \"Inflow Links\"]).sum() * 1e-3\n",
|
||||
")\n",
|
||||
"totals = pd.DataFrame(index=pypsa_totals.index)\n",
|
||||
"\n",
|
||||
"for tech in pypsa_totals.index:\n",
|
||||
" if tech not in entsoe_totals.index:\n",
|
||||
" entsoe_totals.loc[tech] = 0.\n",
|
||||
" entsoe_totals.loc[tech] = 0.0\n",
|
||||
"\n",
|
||||
"totals[\"Pypsa\"] = pypsa_totals\n",
|
||||
"totals[\"Entsoe\"] = entsoe_totals\n",
|
||||
"totals[\"Technology\"] = totals.index\n",
|
||||
"\n",
|
||||
"totals = pd.concat([\n",
|
||||
" pd.DataFrame({\"Source\": [\"PyPSA\" for _ in range(len(pypsa_totals))],\n",
|
||||
"totals = pd.concat(\n",
|
||||
" [\n",
|
||||
" pd.DataFrame(\n",
|
||||
" {\n",
|
||||
" \"Source\": [\"PyPSA\" for _ in range(len(pypsa_totals))],\n",
|
||||
" \"Technology\": pypsa_totals.index,\n",
|
||||
" \"Total Generation\": pypsa_totals.values,\n",
|
||||
" }),\n",
|
||||
" pd.DataFrame({\"Source\": [\"ENTSO-E\" for _ in range(len(entsoe_totals))],\n",
|
||||
" }\n",
|
||||
" ),\n",
|
||||
" pd.DataFrame(\n",
|
||||
" {\n",
|
||||
" \"Source\": [\"ENTSO-E\" for _ in range(len(entsoe_totals))],\n",
|
||||
" \"Technology\": entsoe_totals.index,\n",
|
||||
" \"Total Generation\": entsoe_totals.values,\n",
|
||||
" }),], axis=0\n",
|
||||
" }\n",
|
||||
" ),\n",
|
||||
" ],\n",
|
||||
" axis=0,\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"sns.barplot(data=totals, x=\"Technology\", y=\"Total Generation\", hue=\"Source\", ax=ax,\n",
|
||||
" palette=\"dark\", alpha=.6, edgecolor=\"k\")\n",
|
||||
"sns.barplot(\n",
|
||||
" data=totals,\n",
|
||||
" x=\"Technology\",\n",
|
||||
" y=\"Total Generation\",\n",
|
||||
" hue=\"Source\",\n",
|
||||
" ax=ax,\n",
|
||||
" palette=\"dark\",\n",
|
||||
" alpha=0.6,\n",
|
||||
" edgecolor=\"k\",\n",
|
||||
")\n",
|
||||
"ax.set_ylabel(\"Total Generation [TWh]\")\n",
|
||||
"ax.set_xticks(ax.get_xticks(), ax.get_xticklabels(), rotation=45, ha='right')\n",
|
||||
"ax.set_xticks(ax.get_xticks(), ax.get_xticklabels(), rotation=45, ha=\"right\")\n",
|
||||
"plt.savefig(plot_path / \"EuropeTotalGeneration.pdf\")\n",
|
||||
"plt.show()\n",
|
||||
"\n",
|
||||
"pypsa_total_inflow = pypsa_total_inflow.drop(columns=[\"Inflow Links\", \"Inflow Lines\"])\n",
|
||||
"pypsa_total_outflow = pypsa_total_outflow.drop(columns=[\"Outflow Links\", \"Outflow Lines\"])\n",
|
||||
"pypsa_total_outflow = pypsa_total_outflow.drop(\n",
|
||||
" columns=[\"Outflow Links\", \"Outflow Lines\"]\n",
|
||||
")\n",
|
||||
"entsoe_total_inflow = entsoe_total_inflow.drop(columns=[\"Inflow Links\", \"Inflow Lines\"])\n",
|
||||
"\n",
|
||||
"start = pd.Timestamp(\"2019-01-01\") # for small time frame\n",
|
||||
@ -594,14 +794,20 @@
|
||||
"\n",
|
||||
"fig, axs = plt.subplots(4, 2, figsize=(20, 30))\n",
|
||||
"\n",
|
||||
"axs[0,0].stackplot(index, *[entsoe_total_inflow[col].loc[start:end].values for col in cols],\n",
|
||||
"axs[0, 0].stackplot(\n",
|
||||
" index,\n",
|
||||
" *[entsoe_total_inflow[col].loc[start:end].values for col in cols],\n",
|
||||
" colors=color_mapper.loc[cols].tolist(),\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"axs[0,1].stackplot(index, *[pypsa_total_inflow[col].loc[start:end].values for col in cols],\n",
|
||||
"axs[0, 1].stackplot(\n",
|
||||
" index,\n",
|
||||
" *[pypsa_total_inflow[col].loc[start:end].values for col in cols],\n",
|
||||
" colors=color_mapper.loc[cols].tolist(),\n",
|
||||
")\n",
|
||||
"axs[0,1].stackplot(index, *[pypsa_total_outflow[col].loc[start:end].values for col in cols_out],\n",
|
||||
"axs[0, 1].stackplot(\n",
|
||||
" index,\n",
|
||||
" *[pypsa_total_outflow[col].loc[start:end].values for col in cols_out],\n",
|
||||
" colors=color_mapper.loc[cols_out].tolist(),\n",
|
||||
")\n",
|
||||
"\n",
|
||||
@ -611,14 +817,20 @@
|
||||
"\n",
|
||||
"index = pypsa_total_inflow.index\n",
|
||||
"\n",
|
||||
"axs[1,0].stackplot(index, *[entsoe_total_inflow[col].values for col in cols],\n",
|
||||
"axs[1, 0].stackplot(\n",
|
||||
" index,\n",
|
||||
" *[entsoe_total_inflow[col].values for col in cols],\n",
|
||||
" colors=color_mapper.loc[cols].tolist(),\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"axs[1,1].stackplot(index, *[pypsa_total_inflow[col].values for col in cols],\n",
|
||||
"axs[1, 1].stackplot(\n",
|
||||
" index,\n",
|
||||
" *[pypsa_total_inflow[col].values for col in cols],\n",
|
||||
" colors=color_mapper.loc[cols].tolist(),\n",
|
||||
")\n",
|
||||
"axs[1,1].stackplot(index, *[pypsa_total_outflow[col].values for col in cols_out],\n",
|
||||
"axs[1, 1].stackplot(\n",
|
||||
" index,\n",
|
||||
" *[pypsa_total_outflow[col].values for col in cols_out],\n",
|
||||
" colors=color_mapper.loc[cols_out].tolist(),\n",
|
||||
")\n",
|
||||
"\n",
|
||||
@ -626,39 +838,53 @@
|
||||
" ax.set_ylim(-100, 400)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"total_entsoe_ddf = pd.concat([\n",
|
||||
" entsoe_total_inflow[col]\n",
|
||||
" .sort_values(ascending=False)\n",
|
||||
" .reset_index(drop=True) for col in entsoe_total_inflow.columns\n",
|
||||
"], axis=1)\n",
|
||||
"axs[2,0].stackplot(range(len(total_entsoe_ddf)), *[total_entsoe_ddf[col].values for col in total_entsoe_ddf.columns],\n",
|
||||
"total_entsoe_ddf = pd.concat(\n",
|
||||
" [\n",
|
||||
" entsoe_total_inflow[col].sort_values(ascending=False).reset_index(drop=True)\n",
|
||||
" for col in entsoe_total_inflow.columns\n",
|
||||
" ],\n",
|
||||
" axis=1,\n",
|
||||
")\n",
|
||||
"axs[2, 0].stackplot(\n",
|
||||
" range(len(total_entsoe_ddf)),\n",
|
||||
" *[total_entsoe_ddf[col].values for col in total_entsoe_ddf.columns],\n",
|
||||
" colors=color_mapper.loc[total_entsoe_ddf.columns].tolist(),\n",
|
||||
" labels=total_entsoe_ddf.columns)\n",
|
||||
" labels=total_entsoe_ddf.columns,\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"total_pypsa_ddf = pd.concat([\n",
|
||||
" pypsa_total_inflow[col]\n",
|
||||
" .sort_values(ascending=False)\n",
|
||||
" .reset_index(drop=True) for col in pypsa_total_inflow.columns\n",
|
||||
"], axis=1)\n",
|
||||
"axs[2,1].stackplot(range(len(total_pypsa_ddf)), *[total_pypsa_ddf[col].values for col in total_pypsa_ddf.columns],\n",
|
||||
"total_pypsa_ddf = pd.concat(\n",
|
||||
" [\n",
|
||||
" pypsa_total_inflow[col].sort_values(ascending=False).reset_index(drop=True)\n",
|
||||
" for col in pypsa_total_inflow.columns\n",
|
||||
" ],\n",
|
||||
" axis=1,\n",
|
||||
")\n",
|
||||
"axs[2, 1].stackplot(\n",
|
||||
" range(len(total_pypsa_ddf)),\n",
|
||||
" *[total_pypsa_ddf[col].values for col in total_pypsa_ddf.columns],\n",
|
||||
" colors=color_mapper.loc[total_pypsa_ddf.columns].tolist(),\n",
|
||||
" labels=total_pypsa_ddf.columns)\n",
|
||||
" labels=total_pypsa_ddf.columns,\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"total_pypsa_ddf = pd.concat([\n",
|
||||
" pypsa_total_outflow[col]\n",
|
||||
" .sort_values(ascending=False)\n",
|
||||
" .reset_index(drop=True) for col in pypsa_total_outflow.columns\n",
|
||||
"], axis=1)\n",
|
||||
"axs[2,1].stackplot(range(len(total_pypsa_ddf)), *[total_pypsa_ddf[col].values for col in total_pypsa_ddf.columns],\n",
|
||||
"total_pypsa_ddf = pd.concat(\n",
|
||||
" [\n",
|
||||
" pypsa_total_outflow[col].sort_values(ascending=False).reset_index(drop=True)\n",
|
||||
" for col in pypsa_total_outflow.columns\n",
|
||||
" ],\n",
|
||||
" axis=1,\n",
|
||||
")\n",
|
||||
"axs[2, 1].stackplot(\n",
|
||||
" range(len(total_pypsa_ddf)),\n",
|
||||
" *[total_pypsa_ddf[col].values for col in total_pypsa_ddf.columns],\n",
|
||||
" colors=color_mapper.loc[total_pypsa_ddf.columns].tolist(),\n",
|
||||
" labels=total_pypsa_ddf.columns)\n",
|
||||
"axs[2,0].legend(loc='upper center', bbox_to_anchor=(0.5, -0.05),\n",
|
||||
" fancybox=True, shadow=True, ncol=5)\n",
|
||||
" labels=total_pypsa_ddf.columns,\n",
|
||||
")\n",
|
||||
"axs[2, 0].legend(\n",
|
||||
" loc=\"upper center\", bbox_to_anchor=(0.5, -0.05), fancybox=True, shadow=True, ncol=5\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"total_prices = (\n",
|
||||
" n.buses_t.marginal_price\n",
|
||||
" .multiply(n.loads_t.p_set)\n",
|
||||
" n.buses_t.marginal_price.multiply(n.loads_t.p_set)\n",
|
||||
" .sum(axis=1)\n",
|
||||
" .divide(n.loads_t.p_set.sum(axis=1))\n",
|
||||
")\n",
|
||||
@ -666,9 +892,10 @@
|
||||
"total_entsoe_prices = None\n",
|
||||
"\n",
|
||||
"for num, country in tqdm(enumerate(os.listdir(data_path / \"pypsa_data\"))):\n",
|
||||
"\n",
|
||||
" cc = country[:2]\n",
|
||||
" country_buses = np.unique(n.generators.loc[n.generators.bus.str.contains(cc)].bus.values)\n",
|
||||
" country_buses = np.unique(\n",
|
||||
" n.generators.loc[n.generators.bus.str.contains(cc)].bus.values\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" if not len(country_buses) == 1:\n",
|
||||
" continue\n",
|
||||
@ -676,11 +903,13 @@
|
||||
" bus = country_buses[0]\n",
|
||||
"\n",
|
||||
" try:\n",
|
||||
" entsoe_prices = pd.read_csv(data_path / \"price_data\" / country,\n",
|
||||
" entsoe_prices = pd.read_csv(\n",
|
||||
" data_path / \"price_data\" / country,\n",
|
||||
" index_col=0,\n",
|
||||
" parse_dates=True,\n",
|
||||
" ).iloc[:-1]\n",
|
||||
" entsoe_prices.index = n.loads_t.p_set.index\n",
|
||||
"\n",
|
||||
" def make_tz_time(time):\n",
|
||||
" return pd.Timestamp(time).tz_convert(\"utc\")\n",
|
||||
"\n",
|
||||
@ -688,19 +917,28 @@
|
||||
" continue\n",
|
||||
"\n",
|
||||
" if total_entsoe_prices is None:\n",
|
||||
" total_entsoe_prices = pd.Series(np.zeros(len(entsoe_prices)), index=entsoe_prices.index)\n",
|
||||
" total_entsoe_prices = pd.Series(\n",
|
||||
" np.zeros(len(entsoe_prices)), index=entsoe_prices.index\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" total_entsoe_prices += entsoe_prices.iloc[:, 0] * n.loads_t.p_set[bus]\n",
|
||||
"\n",
|
||||
"total_entsoe_prices /= n.loads_t.p_set.sum(axis=1)\n",
|
||||
"\n",
|
||||
"error = np.around(mean_absolute_error(total_entsoe_prices.values, total_prices.values),\n",
|
||||
" decimals=2)\n",
|
||||
"error = np.around(\n",
|
||||
" mean_absolute_error(total_entsoe_prices.values, total_prices.values), decimals=2\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"axs[3,0].plot(total_prices.loc[start:end].index, total_prices.loc[start:end].values,\n",
|
||||
" label=\"PyPSA Marginal Price\")\n",
|
||||
"axs[3,0].plot(total_prices.loc[start:end].index, total_entsoe_prices.loc[start:end].values, \n",
|
||||
" label=\"ENTSO-E\")\n",
|
||||
"axs[3, 0].plot(\n",
|
||||
" total_prices.loc[start:end].index,\n",
|
||||
" total_prices.loc[start:end].values,\n",
|
||||
" label=\"PyPSA Marginal Price\",\n",
|
||||
")\n",
|
||||
"axs[3, 0].plot(\n",
|
||||
" total_prices.loc[start:end].index,\n",
|
||||
" total_entsoe_prices.loc[start:end].values,\n",
|
||||
" label=\"ENTSO-E\",\n",
|
||||
")\n",
|
||||
"axs[3, 1].set_title(f\"Mean Abs Error {error} [Euro/MWh]\")\n",
|
||||
"axs[3, 0].legend()\n",
|
||||
"\n",
|
||||
@ -725,7 +963,7 @@
|
||||
" ax.set_xlabel(\"Hour\")\n",
|
||||
"\n",
|
||||
"plt.savefig(plot_path / \"EuropeDashboard.pdf\")\n",
|
||||
"plt.show()\n"
|
||||
"plt.show()"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -745,9 +983,9 @@
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "pypsa-eur",
|
||||
"display_name": "",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
"name": ""
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
|
Loading…
Reference in New Issue
Block a user