pypsa-eur/notebooks/entsoe_data.ipynb

1463 lines
5.8 MiB
Plaintext
Raw Normal View History

{
"cells": [
{
"cell_type": "code",
2023-04-26 17:00:23 +00:00
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"from entsoe import EntsoePandasClient\n",
2023-04-26 17:00:23 +00:00
"from entsoe.exceptions import NoMatchingDataError\n",
"import pandas as pd\n",
"from pathlib import Path\n",
"import os\n",
"\n",
"Path.cwd()\n",
"os.listdir()\n",
"\n",
"api_key = \"b45ffb86-fea3-49e7-9c01-9ad6429d3ec9\"\n",
"client = EntsoePandasClient(api_key=api_key)\n",
"\n",
"start = pd.Timestamp('20190101', tz='Europe/Brussels')\n",
"end = pd.Timestamp('20200101', tz='Europe/Brussels')\n",
"\n",
"countries = ['AL', 'AT', 'BA', 'BE', 'BG', 'CH', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'ME', 'MK', 'NL', 'NO', 'PL', 'PT', 'RO', 'RS', 'SE', 'SI', 'SK']\n",
"\n",
"for country in countries:\n",
" print(f\"Trying country {country}.\")\n",
"\n",
" country_code = country\n",
" # generation_country = client.query_generation(country_code, start=start,end=end, psr_type=None)\n",
" try:\n",
" gen = client.query_generation(country, start=start, end=end, psr_type=None)\n",
" except NoMatchingDataError:\n",
" continue\n",
" \n",
" gen.to_csv(Path.cwd() / \"generation_data\" / f\"{country}.csv\")\n",
"\n",
" #generation.append(generation_country)\n",
" #day_ahead_prices_country = client.query_day_ahead_prices(country_code, start, end)\n",
"\n",
"#generation = pd.concat(generation, keys=countries, axis=1)\n",
"\n",
"#client.query_crossborder_flows(country_code_from, country_code_to, start, end)"
]
},
{
"cell_type": "code",
2023-04-26 17:00:23 +00:00
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
2023-04-26 17:00:23 +00:00
"gen = generation_country"
]
},
{
"cell_type": "code",
2023-04-26 17:00:23 +00:00
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>2019-01-01 00:00:00+01:00</th>\n",
" <th>2019-01-01 00:15:00+01:00</th>\n",
" <th>2019-01-01 00:30:00+01:00</th>\n",
" <th>2019-01-01 00:45:00+01:00</th>\n",
" <th>2019-01-01 01:00:00+01:00</th>\n",
" <th>2019-01-01 01:15:00+01:00</th>\n",
" <th>2019-01-01 01:30:00+01:00</th>\n",
" <th>2019-01-01 01:45:00+01:00</th>\n",
" <th>2019-01-01 02:00:00+01:00</th>\n",
" <th>2019-01-01 02:15:00+01:00</th>\n",
" <th>...</th>\n",
" <th>2019-01-01 21:30:00+01:00</th>\n",
" <th>2019-01-01 21:45:00+01:00</th>\n",
" <th>2019-01-01 22:00:00+01:00</th>\n",
" <th>2019-01-01 22:15:00+01:00</th>\n",
" <th>2019-01-01 22:30:00+01:00</th>\n",
" <th>2019-01-01 22:45:00+01:00</th>\n",
" <th>2019-01-01 23:00:00+01:00</th>\n",
" <th>2019-01-01 23:15:00+01:00</th>\n",
" <th>2019-01-01 23:30:00+01:00</th>\n",
" <th>2019-01-01 23:45:00+01:00</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Fossil Gas</th>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>...</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Hydro Pumped Storage</th>\n",
" <td>1827.0</td>\n",
" <td>1335.0</td>\n",
" <td>1120.0</td>\n",
" <td>1218.0</td>\n",
" <td>999.0</td>\n",
" <td>1104.0</td>\n",
" <td>1853.0</td>\n",
" <td>2178.0</td>\n",
" <td>2112.0</td>\n",
" <td>2372.0</td>\n",
" <td>...</td>\n",
" <td>1936.0</td>\n",
" <td>2519.0</td>\n",
" <td>1818.0</td>\n",
" <td>1832.0</td>\n",
" <td>1799.0</td>\n",
" <td>2129.0</td>\n",
" <td>2438.0</td>\n",
" <td>3601.0</td>\n",
" <td>3590.0</td>\n",
" <td>4294.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2 rows × 96 columns</p>\n",
"</div>"
],
"text/plain": [
" 2019-01-01 00:00:00+01:00 2019-01-01 00:15:00+01:00 \\\n",
"Fossil Gas 1.0 1.0 \n",
"Hydro Pumped Storage 1827.0 1335.0 \n",
"\n",
" 2019-01-01 00:30:00+01:00 2019-01-01 00:45:00+01:00 \\\n",
"Fossil Gas 1.0 1.0 \n",
"Hydro Pumped Storage 1120.0 1218.0 \n",
"\n",
" 2019-01-01 01:00:00+01:00 2019-01-01 01:15:00+01:00 \\\n",
"Fossil Gas 1.0 1.0 \n",
"Hydro Pumped Storage 999.0 1104.0 \n",
"\n",
" 2019-01-01 01:30:00+01:00 2019-01-01 01:45:00+01:00 \\\n",
"Fossil Gas 1.0 1.0 \n",
"Hydro Pumped Storage 1853.0 2178.0 \n",
"\n",
" 2019-01-01 02:00:00+01:00 2019-01-01 02:15:00+01:00 \\\n",
"Fossil Gas 1.0 1.0 \n",
"Hydro Pumped Storage 2112.0 2372.0 \n",
"\n",
" ... 2019-01-01 21:30:00+01:00 \\\n",
"Fossil Gas ... 1.0 \n",
"Hydro Pumped Storage ... 1936.0 \n",
"\n",
" 2019-01-01 21:45:00+01:00 2019-01-01 22:00:00+01:00 \\\n",
"Fossil Gas 1.0 1.0 \n",
"Hydro Pumped Storage 2519.0 1818.0 \n",
"\n",
" 2019-01-01 22:15:00+01:00 2019-01-01 22:30:00+01:00 \\\n",
"Fossil Gas 1.0 1.0 \n",
"Hydro Pumped Storage 1832.0 1799.0 \n",
"\n",
" 2019-01-01 22:45:00+01:00 2019-01-01 23:00:00+01:00 \\\n",
"Fossil Gas 1.0 1.0 \n",
"Hydro Pumped Storage 2129.0 2438.0 \n",
"\n",
" 2019-01-01 23:15:00+01:00 2019-01-01 23:30:00+01:00 \\\n",
"Fossil Gas 1.0 1.0 \n",
"Hydro Pumped Storage 3601.0 3590.0 \n",
"\n",
" 2019-01-01 23:45:00+01:00 \n",
"Fossil Gas 1.0 \n",
"Hydro Pumped Storage 4294.0 \n",
"\n",
"[2 rows x 96 columns]"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gen.transpose().xs(\"Actual Consumption\", level=1)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\s2216495\\AppData\\Local\\Temp\\ipykernel_18784\\2339226854.py:7: DtypeWarning: Columns (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22) have mixed types. Specify dtype option on import or set low_memory=False.\n",
" gen = pd.read_csv(data_path / \"DE.csv\", parse_dates=True)\n"
]
}
],
"source": [
"import os\n",
"from pathlib import Path\n",
"import pandas as pd\n",
"\n",
"data_path =Path.cwd() / \"..\" / \"..\" / \"generation_data\"\n",
"\n",
"gen = pd.read_csv(data_path / \"DE.csv\", parse_dates=True)"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Series([], dtype: float64)"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gen = pd.read_csv(data_path / \"AT.csv\", parse_dates=True, index_col=0).iloc[1:]"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['Biomass', 'Biomass.1', 'Fossil Gas', 'Fossil Gas.1',\n",
" 'Fossil Hard coal', 'Fossil Hard coal.1', 'Fossil Oil', 'Fossil Oil.1',\n",
" 'Geothermal', 'Geothermal.1', 'Hydro Pumped Storage',\n",
" 'Hydro Pumped Storage.1', 'Hydro Run-of-river and poundage',\n",
" 'Hydro Run-of-river and poundage.1', 'Hydro Water Reservoir',\n",
" 'Hydro Water Reservoir.1', 'Other', 'Other.1', 'Other renewable',\n",
" 'Other renewable.1', 'Solar', 'Solar.1', 'Waste', 'Waste.1',\n",
" 'Wind Onshore', 'Wind Onshore.1'],\n",
" dtype='object')"
]
},
"execution_count": 76,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gen.columns"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"ename": "KeyError",
"evalue": "\"['Fossil Coalderived gas'] not in index\"",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[75], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m gen[[\u001b[39m\"\u001b[39;49m\u001b[39mFossil Coalderived gas\u001b[39;49m\u001b[39m\"\u001b[39;49m, \u001b[39m\"\u001b[39;49m\u001b[39mFossil Gas\u001b[39;49m\u001b[39m\"\u001b[39;49m]]\u001b[39m.\u001b[39mastype(\u001b[39mfloat\u001b[39m)\u001b[39m.\u001b[39msum()\n\u001b[1;32m 2\u001b[0m \u001b[39m# \"Gas\": [\"Fossil Coalderived gas\", \"Fossil Gas\"],\u001b[39;00m\n",
"File \u001b[0;32m~/mambaforge/envs/pypsa-eur/lib/python3.10/site-packages/pandas/core/frame.py:3813\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3811\u001b[0m \u001b[39mif\u001b[39;00m is_iterator(key):\n\u001b[1;32m 3812\u001b[0m key \u001b[39m=\u001b[39m \u001b[39mlist\u001b[39m(key)\n\u001b[0;32m-> 3813\u001b[0m indexer \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcolumns\u001b[39m.\u001b[39;49m_get_indexer_strict(key, \u001b[39m\"\u001b[39;49m\u001b[39mcolumns\u001b[39;49m\u001b[39m\"\u001b[39;49m)[\u001b[39m1\u001b[39m]\n\u001b[1;32m 3815\u001b[0m \u001b[39m# take() does not accept boolean indexers\u001b[39;00m\n\u001b[1;32m 3816\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mgetattr\u001b[39m(indexer, \u001b[39m\"\u001b[39m\u001b[39mdtype\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39mNone\u001b[39;00m) \u001b[39m==\u001b[39m \u001b[39mbool\u001b[39m:\n",
"File \u001b[0;32m~/mambaforge/envs/pypsa-eur/lib/python3.10/site-packages/pandas/core/indexes/base.py:6070\u001b[0m, in \u001b[0;36mIndex._get_indexer_strict\u001b[0;34m(self, key, axis_name)\u001b[0m\n\u001b[1;32m 6067\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 6068\u001b[0m keyarr, indexer, new_indexer \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_reindex_non_unique(keyarr)\n\u001b[0;32m-> 6070\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_raise_if_missing(keyarr, indexer, axis_name)\n\u001b[1;32m 6072\u001b[0m keyarr \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mtake(indexer)\n\u001b[1;32m 6073\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(key, Index):\n\u001b[1;32m 6074\u001b[0m \u001b[39m# GH 42790 - Preserve name from an Index\u001b[39;00m\n",
"File \u001b[0;32m~/mambaforge/envs/pypsa-eur/lib/python3.10/site-packages/pandas/core/indexes/base.py:6133\u001b[0m, in \u001b[0;36mIndex._raise_if_missing\u001b[0;34m(self, key, indexer, axis_name)\u001b[0m\n\u001b[1;32m 6130\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mKeyError\u001b[39;00m(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mNone of [\u001b[39m\u001b[39m{\u001b[39;00mkey\u001b[39m}\u001b[39;00m\u001b[39m] are in the [\u001b[39m\u001b[39m{\u001b[39;00maxis_name\u001b[39m}\u001b[39;00m\u001b[39m]\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[1;32m 6132\u001b[0m not_found \u001b[39m=\u001b[39m \u001b[39mlist\u001b[39m(ensure_index(key)[missing_mask\u001b[39m.\u001b[39mnonzero()[\u001b[39m0\u001b[39m]]\u001b[39m.\u001b[39munique())\n\u001b[0;32m-> 6133\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mKeyError\u001b[39;00m(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m{\u001b[39;00mnot_found\u001b[39m}\u001b[39;00m\u001b[39m not in index\u001b[39m\u001b[39m\"\u001b[39m)\n",
"\u001b[0;31mKeyError\u001b[0m: \"['Fossil Coalderived gas'] not in index\""
]
}
],
"source": [
"# \"Gas\": [\"Fossil Coalderived gas\", \"Fossil Gas\"],\n",
"gen[[\"Fossil Coalderived gas\", \"Fossil Gas\"]].astype(float).sum()"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"##### Scout datasets available in pypsa-eur and entsoe"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from AT; 1/32\n",
"Gathering techs from BA; 2/32\n",
"Gathering techs from BE; 3/32\n",
"Gathering techs from BG; 4/32\n",
"Gathering techs from CH; 5/32\n",
"Gathering techs from CZ; 6/32\n",
"Gathering techs from DE; 7/32\n",
"Gathering techs from DK; 8/32\n",
"Gathering techs from EE; 9/32\n",
"Gathering techs from ES; 10/32\n",
"Gathering techs from FI; 11/32\n",
"Gathering techs from FR; 12/32\n",
"Gathering techs from GB; 13/32\n",
"Gathering techs from GR; 14/32\n",
"Gathering techs from HR; 15/32\n",
"Gathering techs from HU; 16/32\n",
"Gathering techs from IE; 17/32\n",
"Gathering techs from IT; 18/32\n",
"Gathering techs from LT; 19/32\n",
"Gathering techs from LU; 20/32\n",
"Gathering techs from LV; 21/32\n",
"Gathering techs from ME; 22/32\n",
"Gathering techs from MK; 23/32\n",
"Gathering techs from NL; 24/32\n",
"Gathering techs from NO; 25/32\n",
"Gathering techs from PL; 26/32\n",
"Gathering techs from PT; 27/32\n",
"Gathering techs from RO; 28/32\n",
"Gathering techs from RS; 29/32\n",
"Gathering techs from SE; 30/32\n",
"Gathering techs from SI; 31/32\n",
"Gathering techs from SK; 32/32\n"
]
}
],
"source": [
"import numpy as np\n",
"import re\n",
"import warnings\n",
"\n",
"warnings.filterwarnings(\"ignore\")\n",
"\n",
"\n",
"def scout_techs():\n",
" \n",
" techs = set()\n",
" valid_consumption_types = [\"Hydro Pumped Storage\"]\n",
"\n",
" def two_columns_analysis(df, all_techs, country_techs, col_types):\n",
"\n",
" for i, (col, col_type) in enumerate(zip(country_techs, col_types)):\n",
" \n",
" col = re.sub('[^A-Za-z ]+', '', col)\n",
" \n",
" if col_type == \"Actual Consumption\":\n",
"\n",
" if not col in valid_consumption_types:\n",
" continue\n",
" \n",
" if col in valid_consumption_types:\n",
" all_techs.add(col + \" Charging\") \n",
" \n",
" else:\n",
" all_techs.add(col)\n",
" \n",
" return all_techs\n",
" \n",
" def is_country_generation(filename):\n",
" return filename.endswith(\".csv\") and len(filename) == 6 \n",
"\n",
" generation_files = [file for file in os.listdir(data_path) if is_country_generation(file)]\n",
"\n",
" for i, country in enumerate(generation_files):\n",
" print(f\"Gathering techs from {country[:2]}; {i+1}/{len(generation_files)}\")\n",
" \n",
" gen = pd.read_csv(data_path / \"DE.csv\", parse_dates=True, index_col=0) \n",
"\n",
" if np.isnan(gen.index[0]):\n",
" col_types = gen.iloc[0].tolist()\n",
" gen = gen.iloc[1:] \n",
" else:\n",
" col_types = [\"Actual Aggregated\" for _ in range(gen.shape[1])]\n",
"\n",
" techs = two_columns_analysis(gen.iloc[1:], techs, gen.columns, col_types)\n",
"\n",
" return techs \n",
"\n",
"\n",
"techs = scout_techs()"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'Biomass',\n",
" 'Fossil Brown coalLignite',\n",
" 'Fossil Coalderived gas',\n",
" 'Fossil Gas',\n",
" 'Fossil Hard coal',\n",
" 'Fossil Oil',\n",
" 'Geothermal',\n",
" 'Hydro Pumped Storage',\n",
" 'Hydro Pumped Storage Charging',\n",
" 'Hydro Runofriver and poundage',\n",
" 'Hydro Water Reservoir',\n",
" 'Nuclear',\n",
" 'Other',\n",
" 'Other renewable',\n",
" 'Solar',\n",
" 'Waste',\n",
" 'Wind Offshore',\n",
" 'Wind Onshore'}"
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"techs"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING:pypsa.io:Importing network from PyPSA version v0.20.1 while current version is v0.22.1. Read the release notes at https://pypsa.readthedocs.io/en/latest/release_notes.html to prepare your network for import.\n",
"INFO:pypsa.io:Imported network elec_s_37.nc has buses, carriers, generators, lines, links, loads, storage_units\n"
]
}
],
"source": [
"import pypsa\n",
"from pathlib import Path\n",
"import pandas as pd\n",
"\n",
"data_path =Path.cwd() / \"..\" / \"..\" / \"generation_data\"\n",
"\n",
"n = pypsa.Network(data_path / \"elec_s_37.nc\")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"onwind 37\n",
"solar 37\n",
"ror 29\n",
"offwind-ac 28\n",
"offwind-dc 23\n",
"CCGT 20\n",
"coal 20\n",
"nuclear 15\n",
"lignite 13\n",
"oil 12\n",
"biomass 11\n",
"OCGT 10\n",
"Name: carrier, dtype: int64"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"n.generators.carrier.value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {},
"outputs": [],
"source": [
2023-04-26 17:00:23 +00:00
"generation_mapper_entsoe = {\n",
" \"Wind Onshore\": [\"Wind Onshore\"],\n",
" \"Wind Offshore\": [\"Wind Offshore\"],\n",
" \"Solar\": [\"Solar\"],\n",
" \"Biomass\": [\"Waste\", \"Biomass\"],\n",
" \"Hydro\": [\"Hydro Pumped Storage\", \"Hydro Water Reservoir\"],\n",
" \"Run of River\": [\"Hydro Run-of-river and poundage\"],\n",
" \"Nuclear\": [\"Nuclear\"],\n",
" \"Gas\": [\"Fossil Coal-derived gas\", \"Fossil Gas\"],\n",
" \"Oil\": [\"Fossil Oil\"],\n",
" \"Lignite\": [\"Fossil Brown coal/Lignite\"],\n",
" \"Hard Coal\": [\"Fossil Hard coal\"],\n",
"}\n",
"\n",
2023-04-26 17:00:23 +00:00
"generation_mapper_pypsa = {\n",
" \"Solar\": [\"solar\"],\n",
" \"Wind Onshore\": [\"onwind\"],\n",
" \"Wind Offshore\": [\"offwind\"],\n",
" \"Biomass\": [\"biomass\"],\n",
" \"Hydro\": [],\n",
" \"Run of River\": [\"ror\"],\n",
" \"Nuclear\": [\"nuclear\"],\n",
" \"Gas\": [\"OCGT\", \"CCGT\"],\n",
" \"Oil\": [\"oil\"],\n",
" \"Lignite\": [\"lignite\"],\n",
" \"Hard Coal\": [\"coal\"],\n",
"}"
]
},
{
"cell_type": "code",
2023-04-26 17:00:23 +00:00
"execution_count": 115,
"metadata": {},
"outputs": [],
"source": [
2023-04-26 17:00:23 +00:00
"import json \n",
"\n",
"with open(data_path / \"generation_mapper_entsoe.json\", \"w\") as f:\n",
" json.dump(generation_mapper_entsoe, f)\n",
"\n",
"with open(data_path / \"generation_mapper_pypsa.json\", \"w\") as f:\n",
" json.dump(generation_mapper_pypsa, f)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"##### Harmonize Data"
]
},
{
"cell_type": "code",
"execution_count": 137,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'Biomass': ['Waste', 'Biomass'],\n",
" 'Gas': ['Fossil Coal-derived gas', 'Fossil Gas'],\n",
" 'Hard Coal': ['Fossil Hard coal'],\n",
" 'Hydro': ['Hydro Pumped Storage', 'Hydro Water Reservoir'],\n",
" 'Lignite': ['Fossil Brown coal/Lignite'],\n",
" 'Nuclear': ['Nuclear'],\n",
" 'Oil': ['Fossil Oil'],\n",
" 'Run of River': ['Hydro Run-of-river and poundage'],\n",
" 'Solar': ['Solar'],\n",
" 'Wind Offshore': ['Wind Offshore'],\n",
" 'Wind Onshore': ['Wind Onshore']}\n",
"Gathering techs from AT; 1/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from BA; 2/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from BE; 3/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from BG; 4/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from CH; 5/32\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABWgAAAGnCAYAAAAqgr42AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydeXwTdf7Gn5kkvW9oKRQKLW2RQw6B5RIBEUVBWJRFF1SwqKDI4SL6E1hPFNAFURRFWUHRRRC5FA8UqHLJIZeKUg6Rq6UUeidpkpn5/ZHMZGaSSdKLJO3n/XoVkpnvfOczV9o888zzZQRBEEAQBEEQBEEQBEEQBEEQBEFcc1h/F0AQBEEQBEEQBEEQBEEQBNFQIYGWIAiCIAiCIAiCIAiCIAjCT5BASxAEQRAEQRAEQRAEQRAE4SdIoCUIgiAIgiAIgiAIgiAIgvATJNASBEEQBEEQBEEQBEEQBEH4CRJoCYIgCIIgCIIgCIIgCIIg/AQJtARBEARBEARBEARBEARBEH6CBFqCIAiCIAiCIAiCIAiCIAg/QQItQRAEQRAEQRAEQRAEQRCEnyCBliCIegXDMOjfv7+/y/CZFStWgGEYrFixwt+lKHj++efBMAxycnL8XQpBEARBEARBEARB1GtIoCUIok7hOA7vv/8++vXrh4SEBBgMBiQlJaFjx4546KGHsGnTpjqvgcRGgiAIgiAIgiAIgiACFb2/CyAIov7CcRyGDh2Kb775BnFxcRgyZAiaN2+Oq1ev4uTJk1i5ciX++OMPDBs2rNbW+fvvvyMiIqLW+iMIgiAIgiAIgiAIgqhLSKAlCKLOWLVqFb755ht06tQJP/zwA2JjYxXzi4qK8PPPP9fqOq+77rpa7Y8gCIIgCIIgCIIgCKIuoYgDgiDqjF27dgEAxo0b5yLOAkB8fDxuueUWAMC3334LhmEwe/ZsRZstW7aAYRgwDINz584p5o0aNQoMw+D06dPSNHUGbatWrfDCCy8AAAYMGCD1xTAMAGcGrKefM2fOKNa7d+9ejBw5EsnJyQgJCUGLFi0wYcIEXLx40WUb+/fvD4ZhUFlZiWeffRaZmZkICQnBuHHjPO677du345FHHkG7du0QExOD8PBwtG/fHs899xxMJpNLe3mMw9q1a/G3v/0NERERSEhIwD333IPz58+7Xc/PP/+MwYMHIzo6GjExMbjllluwe/duj7URBEEQBEEQBEEQBFF7kIOWIIg6IzExEQCQm5vrtW3fvn0REhKCrVu3Ys6cOdL0bdu2Sa+3bt0qCZuCICAnJwetWrVCenq6Zr/Tpk3Dhg0b8MMPP2Ds2LFo1aqVYn7nzp3x3HPPuSxXUlKCN954AwzDICwsTJq+fPlyPPzwwwgLC8OwYcPQvHlznDhxAsuWLcMXX3yBn376CampqS793X333Thw4ABuv/12/P3vf0eTJk087o/58+fjjz/+QO/evTFkyBCYTCbs2rULL774IrZv345t27ZBr3f9CF+yZAk2bdqEYcOGoV+/fti7dy/WrFmDw4cP4+jRowgNDZXa7t69G7fccgssFgvuuusuZGRk4PDhwxgwYABuvvlmj/URBEEQBEEQBEEQBFE7kEBLEESdcffdd2PevHl49913UVpaiuHDh6Nbt25IS0tzaRsREYEePXpg9+7dKC0tRUxMDAC7KNutWzecOnVKIdAePXoUly9fxp133umxhmnTpqG4uBg//PADxo0bp3DXAnaBtnPnzoppVqsVt99+OwRBwOuvv47k5GQAdqF5woQJSE9Pxw8//ICmTZtKy2zbtg2DBg3ClClTsGHDBpc6zp49i19//RWNGzf2stfsLFmyBGlpaZLTV2TmzJmYO3cu1q5di3vvvddluW+++Qb79+/H9ddfL00bPXo0Vq1ahQ0bNuCee+4BYBe4s7OzYTKZsGHDBgwfPlxq/8Ybb2DatGk+1UkQBEEQBEEQBEEQRM2giAOCIOqMTp064X//+x+Sk5PxySefYNSoUUhPT0fjxo1x991346uvvlK0HzhwIDiOww8//AAAKC4uxsGDB3Hrrbeif//+2Lp1q9RWfD1w4MBar3vixInYunUrJk+ejKlTp0rT33nnHVitVixatEghzgLAzTffjGHDhuGLL75AaWmpS58vvviiz+IsAKSnp7uIswAwffp0APboB3dMnTpVIc4CwMMPPwwA2L9/vzRt9+7dOH78OG666SaFOAsAjz/+OFq3bu1zrQRBEARBEARBEARBVB9y0BIEUaeMHDkSw4cPx/bt27Fz504cOnQIO3fuxLp167Bu3TpkZ2dj2bJlYBgGN998M55//nls27YNd955J3JycsDzPAYOHIhmzZph/fr1+P3339G2bVsp+qC2H8V/+eWX8cEHH+DOO+/EokWLFPP27NkDAMjJycG+fftcli0oKADP8zhx4gS6du2qmNejR48q1VFRUYE33ngD69evR25uLsrKyiAIgjT/woULbpfr1q2by7QWLVoAsA/KJnLw4EEAQL9+/Vza63Q63HjjjTh16lSVaiYIgiAIgiAIgiAIouqQQEsQRJ1jMBhw66234tZbbwUAcByHzz//HNnZ2fjggw8wbNgwDB8+HD179kRkZKTkjt26dSvCwsLQu3dvNGvWTJqWmZmJH3/8Ee3atZPiB2qDVatW4d///je6du2KVatWgWWVDxlcuXIFAPDaa6957Ke8vNxlWlXqtFqtuPnmm7Fv3z506NAB99xzDxITE2EwGAAAL7zwAiorK90u624wNjGrluM4aVpJSQkAaGbh1uZ+JQiCIAiCIAiCIAhCGxJoCYK45uh0OowaNQq//PIL5syZg61bt2L48OEwGAy48cYbsWXLFhQUFGDr1q3o06cPwsLCcN1116FZs2b4/vvvccMNN6CsrKxW3bM7duzAgw8+iBYtWuCLL75AZGSkSxtR/CwpKZEycn3FXVyBFhs3bsS+ffswduxYrFixQjEvLy8PL7zwQpXW7Q5xWy5duuR2fn5+fo3XQRAEQRAEQRAEQRCEdyiDliAIvxEdHQ0Aikf3Bw4cCEEQ8L///Q+///67ImN24MCByMnJwXfffSe99wWdTgdA6SCVc+LECYwYMQKhoaHYvHmzS76sSM+ePQHYxdy65OTJkwDsg6ypEfN5a8oNN9yg2R/Hcdi5c2etrIcgCIIgCIIgCIIgCM+QQEsQRJ2xatUqfPfdd+B53mVefn4+3n//fQDATTfdJE0XXbFz584FABeBtqSkBEuWLAHLsujfv79PdTRq1AgAcO7cOZd5hYWFuOOOO1BSUoK1a9eiQ4cOmv08/vjjMBgMeOKJJ5Cbm+sy32Kx1Ip426pVKwDA9u3bFdNPnz6Np59+usb9A0Dv3r3Rpk0b/Pjjj9i4caNi3ltvvUX5swRBEARBEARBEARxjaCIA4Ig6oy9e/fijTfeQHJyMm688UakpaUBAP78809s3rwZJpMJw4cPx8iRI6VlunTpgoSEBBQUFCA2NlYx2JYo1hYUFKBbt26Ii4vzqY4BAwaAZVk888wz+OWXXxAfHw8AmD17Np599lmcPHkSN9xwA3bt2oVdu3a5LD9t2jTExcXhuuuuwwcffIDs7Gy0b98egwcPRlZWFqxWK86ePYsdO3YgMTERf/zxR3V3GQDgzjvvREZGBl5//XX8+uuv6NKlC86ePYsvv/wSQ4YMwdmzZ2vUP2CPXPjvf/+LQYMG4e6778Zdd92FjIwMHDlyBN9//z0GDx6Mb775psbrIQiCIAiCIAiCIAjCMyTQEgRRZ0yfPh2ZmZn4/vvvcfToUXz77bcwm81o1KgR+vfvj9GjR2P06NGKfFbRGbtu3Tr069dPiicAgObNmyMrKwu5ublVyp9t27YtPvzwQ/znP//BkiVLYDabAdgFWqPRCAA4ePAgDh486Hb5cePGSWLwfffdh06dOmHBggXYvn07tmzZgsjISDRr1gwjR47EPffcU9Xd5EJkZCS2bduG//u//0NOTg527NiB9PR0/Pvf/8a//vUvrF69usbrAIA+ffpgx44dmDVrFr7++msAQI8ePZCTk4Nvv/2WBFqCIAi
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from CZ; 6/32\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABWgAAAGnCAYAAAAqgr42AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3wUdfoH8M/M9k3vjQCBJFTpXQQRC0XFzilW7OehcuhZ8BQpllNPVH4qVmynnL0jZ4lU6U16LyE92WT77pTfH7MzW5Pspm1CnvfrlRfJ7OzMd2c3G/YzzzxfRhRFEYQQQgghhBBCCCGEEELaHBvtARBCCCGEEEIIIYQQQkhnRQEtIYQQQgghhBBCCCGERAkFtIQQQgghhBBCCCGEEBIlFNASQgghhBBCCCGEEEJIlFBASwghhBBCCCGEEEIIIVFCAS0hhBBCCCGEEEIIIYRECQW0hBBCCCGEEEIIIYQQEiUU0BJCCCGEEEIIIYQQQkiUUEBLCCGEEEIIIYQQQgghUUIBLSGEtLKioiIwDIN58+aFfZ958+aBYRgUFRW12rgIIYQQQgghhBASfRTQEkI6nH379mHWrFno378/EhISoNVqkZ2djalTp+Ltt9+Gw+GI9hAJIYQQQgghhBBCwkIBLSGkQ5k/fz769euHJUuWIC4uDjfddBMefPBBTJkyBQcPHsRtt92GsWPHRnuYzfa3v/0Ne/fuxYgRI6I9FEIIIYQQQgghhLQidbQHQAgh4Vq0aBGeeOIJ5Obm4tNPP8XIkSOD1lmxYgX+9a9/RWF0LSs1NRWpqanRHgYhhBBCCCGEEEJaGVXQEkI6hGPHjuHJJ5+ERqPBDz/8EDKcBYBJkybhxx9/BAB0794dDMPU+3XzzTf73ddms+Hpp5/GoEGDEBMTg9jYWIwePRoff/xxveNauXIlLrnkEqSnp0On0yE3NxfTpk3Dzz//HHL97du3Y+rUqUhMTITRaMS4ceOwdu3aoPXq60H71Vdf4frrr0dhYaEyxiFDhmDx4sXgeb6BI0gIIYQQQgghhJD2iCpoCSEdwrvvvgu3242//OUv6N+/f4Pr6nQ6AMD9998Pk8kUdPu3336LrVu3wmg0KstMJhPOO+88bNu2DUOHDsXMmTMhCAJ++uknXHfdddi9ezcWLlzot50nnngC8+fPR2xsLC677DLk5ubi9OnTWLt2LT788EOcf/75futv3rwZ//rXvzB69GjcdtttOHHiBD7//HNMnDgR27ZtQ58+fRo9Dg8//DBYlsXIkSORk5MDk8mEX375BbNnz8bGjRvxn//8p9FtEEIIIYQQQgghpP2ggJYQ0iGsXr0aADBx4sSw73P//fcHLfvf//6HRYsWIT8/H/Pnz/dbd9u2bXj++ecxZ84cZbnD4cBll12Gp556CldeeSUGDx4MQKqcnT9/Pnr06IFVq1YhJydHuY8oiiguLg7a9/fff49ly5bhpptuUpYtXboUd911F15++WW89tprjT6m77//Hj179vRbJggCbrzxRnz00Ue49957MWrUqEa3QwghhBBCCCGEkPaBWhwQQjqE0tJSAECXLl2avI0///wTV111FRISEvDDDz8oPV6rqqrw4YcfYvjw4X7hLADo9Xo8++yzEEXRrzr1lVdeAQA8//zzfuEsADAME3KcY8eO9QtnAWDmzJlQq9XYtGlTWI8hMJwFAJZlMXv2bABScEwIIYQQQgghhJCOgypoCSEdgiiKAKTwsylKSkowdepUOJ1OfPfddygoKFBu27Rpk9K/dd68eUH3dbvdAIB9+/Ypy/744w8wDINJkyaFPYZhw4YFLdNoNMjIyEBNTU1Y26iqqsJzzz2HH374AUeOHIHVavW7PVTlLiGEEEIIIYQQQtovCmgJIR1CdnY29u3bh1OnTkV8X6vViosvvhgnT57ERx99hHPOOcfv9qqqKgBSUNtQJavFYlG+N5lMSEpKgsFgCHscCQkJIZer1eqwJvgymUwYPnw4jh49ihEjRuDGG29EcnIy1Go1TCYTXnrpJTidzrDHQwghhBBCCCGEkOijFgeEkA5h7NixAIBffvklovsJgoBrr70WW7duxcKFC3HttdcGrSMHp7Nnz4YoivV+/fbbb8p9EhMTUVNTA7vd3oxHFZm33noLR48exRNPPIENGzbg1VdfxcKFCzFv3jxMnz69zcZBCCGEEEIIIYSQlkMBLSGkQ7jlllug0Wjw+eefY8+ePQ2u61tFev/99+Pbb7/FzJkz8eijj4Zcf8SIEWBZVpmILByjRo2CKIpt2vP10KFDAIArr7wy6Lbff/+9zcZBCCGEEEIIIYSQlkMBLSGkQ+jevTvmzZsHl8uFqVOnYvPmzSHXW7FiBSZPngwAWLx4MV555RVMnDgRr7/+er3bTk9Px4wZM7B582YsWLAAHMcFrXP48GEcPXpU+XnWrFkAgDlz5qCkpCRo/dboBdu9e3cA8KvkBYBt27bh6aefbvH9EUIIIYQQQgghpPVRD1pCSIfx6KOPguM4PPnkkxg+fDjGjBmDYcOGITY2FmVlZVi1ahUOHjyIYcOGobS0FHPmzAHDMDjrrLOwaNGioO0NGjQIl112GQBgyZIlOHjwIB5//HF88MEHGDt2LDIyMnD69Gns3bsXmzZtwscff4y8vDwAwIUXXoh//vOfWLBgAXr16oXLLrsMubm5KC0txdq1azFq1CgsW7asRR//jTfeiOeeew6zZ89GUVERCgoKcPDgQXz33Xe44oorsHz58hbdHyGEEEIIIYQQQlofBbSEkA7l8ccfx9VXX41XX30Vv/32G9599104HA6kpKRg0KBBeOihh3D99dejpKQEgiAAkCppQ7npppuUgDY+Ph6///473njjDfznP//B559/DofDgYyMDBQUFODFF1/EBRdc4Hf/+fPnY9SoUXj55Zfx3XffwWq1Ij09HcOGDcONN97Y4o89Ozsbq1evxsMPP4w1a9bgp59+Qu/evfHqq6/i/PPPp4CWEEIIIYQQQgjpgBhRFMVoD4IQQgghhBBCCCGEEEI6I+pBSwghhBBCCCGEEEIIIVFCAS0hhBBCCCGEEEIIIYRECQW0hBBCCCGEEEIIIYQQEiUU0BJCCCGEEEIIIYQQQkiUUEBLCCGEEEIIIYQQQgghUUIBLSGEEEIIIYQQQgghhEQJBbSEEEIIIYQQQgghhBASJRTQEkIIIYQQQgghhBBCSJSooz2AtlBRURHtIRBCCCGknUtLS2t3/2dQq9VISkqK9jAIIYQQQgghrahTBLQcx0EUxWgPgxBCCCHtFMMwAOj/DIQQQgghhJC2Ry0OCCGEEEIIIYQQQgghJEoooCWEEEIIIYQQQgghhJAooYCWEEIIIYQQQgghhBBCooQCWkIIIYQQQgghhBBCCImSTjFJWH2cTiecTme0h0HOADqdDjqdLtrDIIQQQgghhBBCCCEdTKcNaK1WKxiGQVxcnDJzMyFNIYoi7HY7rFYrYmJioj0cQgghhBBCCCGEENKBdNoWBxzHwWg0UjhLmo1hGBiNRnAcF+2hEEIIIYQQQgghhJAOptMGtBTMkpZGrylCCCGEEEIIIYQQEqlOG9ASQgghhBBCCCGEEEJItFFA20GJogi3W4AoiNEeCiGEEEIIIYQQQgghpIkooG0HRDHykNXtFmE1C7BahUbXXbduHXJyclBbW9uU4Snuv/9+zJw5s1nbaCntaSyEEEIIIYQQQgghhDQVBbRRIggirGYepmoOtTU8HHZv0OpyCbCaebjd/uHr+++/j8LCQnAcB5dDCnVray3o1q0bLr/8cr91N2zYgJycHBw+fBjDhg3Dtm3bEB8f3+qPi+d5vPHGGzj//PPRo0cP9OnTB9dffz02bdrU6vsmhBBCCCGEEEIIIaSjoYA2Suw2AW63t3LWYRfAcSI4ToTNIigVspzPOmPGjIHVasWOHTsgeLLbrVs2Ii01DTt27IDdblfWXbduHTIzM9GzZ09otVqkp6e3+iRWoiji7rvvxuLFizFz5kwUFRXhs88+Q3Z2Nq666iqsWLGiVfffXDzPQxAar0gmhBBCCCGEEEIIIaS
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from DE; 7/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from DK; 8/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from EE; 9/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from ES; 10/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from FI; 11/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from FR; 12/32\n"
]
},
{
"data": {
"image/png": "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IiIHjSphRURERERERERERA4hJWFFREREREREREREDiElYUVEREREREREREQOISVhRURERERERERERA4hJWFFREREREREREREDiElYUVEREREREREREQOISVhRURERERERERERA4hJWFFREREREREREREDiFbpAM4Umzfvj3SIYiIiMgRLi0t7Yj7zGCz2UhJSYl0GCIiIiIishdKwpbz+/2YphnpMEREROQIZRgGoM8MIiIiIiJSe2pHICIiIiIiIiIiInIIKQkrIiIiIiIiIiIicggpCSsiIiIiIiIiIiJyCCkJKyIiIiIiIiIiInIIaWKuffB4PHg8nkiHIceAqKgooqKiIh2GiIiIiIiIiIgcZkrC7kVZWRmGYZCQkBCeEVlkf5imicvloqysjLi4uEiHIyIiIiIiIiIih5HaEeyF3+8nNjZWCVg5YIZhEBsbi9/vj3QoIiIiIiIiIiJymCkJuxdKvsrBpteUiIiIiIiIiMjxR0lYERERERERERERkUNIPWGPdMFg6L+GEXocCNPcua3dlx/pFZqmWTn+ingrzo9F1xNEREREREREROTIpCTsoWKaGIEgEEocmhbLzuShaWIEg5gVP1eXADVNrF4flkCoh6iJgWkxwGIhaLFgWixYAgFMwwhtu7okZDCI1efDCJpgENpn+XYMM7wjZv3vf/S9+mqWLl1KUlLSfh/yXXfdRXFxMW+++WaN1zH8fqxeH6bNSsBqwwBM627HEgxic3swqAjaKD93oWMCCFqsmFYLQZsNDGO/YhERERERERERETkUVD54KJgmNrcHm9eDzevF5vVid7uxud1YPR5sLjc2jye0zOXGCAR2VnmWr79rAhbAwMQSDGLx+8Pbs/p8O7ftcjHlrbfIycnB7/NhBALY3B6cxcVkntCSC6+4otJ25sydQ70WzVm9ejWdOnTg91mzSIyPP+SnJhAI8Nprr3HWWWfRrFkzTmjThn/eMIB5c+Zg97ixedxYPd6dFa6A1eevlIAFE8MMhhOwAJZgoDzhHERERORoZAQCWHz+Sv8GRhcWkbxuA4Y/EMHIRERERETkQKkStrbKq1gxTUyrtdoqVovfj2EGAYOgxYJhlicNTTOUcN2FgYnN4yFgtxO02ULJU683/Lzf4Qjtp3y/lkBwZ3WsEcqhV2z79E6dKCsr448FCzj5b20xMJn966+kp6Wx6LffKTZNYqOjwTT5+ddfqV+vHk1OaIXF76Oew0EgECRotR7CU2dy22238csvv/Dwww9zWufOOAsKePPf/6bv1Vcz8cUXOa9XLywBP0YggD86KnQ+y8+ZPyoqVPVrmhjB0DkNJa8NLMEARjCIzePBHxV1SOIP+P1YAwGsJhimiWkxMC3WUBzBYKjiGMCAoM1O0K4/LxERqRlHSSmpq9ZgAEGLBWedFHxxsaSs2wBAbEEhpXVTCdqseOPj8cbHRTZgERERERGpFVXCArhcNRpmmiZGWSnW4iKsJcUYZWWYHnflh9sVXu4zA/gNE58FvBYDfzBIwOcjEPDjtRj4MMPrWUpLsBUWYi0pDi/zmUGCAX+oBtRiwbTZCEQ58EdFhR7RUfhjokMJXKuVZi2yqV+vHrNnzcLAxLRYmDl/Pmefcw5NmjZh3q+/YlqtmDYbs/73P7qeeiqm1cLMOXNJz86muLAQgPf
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from GB; 13/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from GR; 14/32\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABVgAAAGnCAYAAABCcTwOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd3gU1fvFz2xJT0ioKbQEAlIUEFCKCoqoYMH2FSsiWEBFrFiwIKKgqPjDBoKCigVFURQLKqBIR6oivROSkN43uzv398eUndmdmZ3ZLCzB9/M8ebI75c6dspPsmXPPyzHGGAiCIAiCIAiCIAiCIAiCIAjL2CLdAYIgCIIgCIIgCIIgCIIgiPoKCawEQRAEQRAEQRAEQRAEQRAhQgIrQRAEQRAEQRAEQRAEQRBEiJDAShAEQRAEQRAEQRAEQRAEESIksBIEQRAEQRAEQRAEQRAEQYQICawEQRAEQRAEQRAEQRAEQRAhQgIrQRAEQRAEQRAEQRAEQRBEiJDAShAEQRAEQRAEQRAEQRAEESIksBIEQRAEQRAEQRAEQRAEQYQICawEQRAEQRAEQRAEQRAEQRAhQgIrQRD1mn///Rdjx45F165dkZKSAqfTiUaNGqFPnz546qmnsH379kh3kSAIgiAIgiAIgiCI0xiOMcYi3QmCIAirMMbw7LPP4sUXXwRjDOeccw569uyJBg0aoLS0FJs2bcLatWvB8zzmz5+P//3vf5HuMkEQBEEQBEEQBEEQpyGOSHeAIAgiFCZMmIBJkyYhMzMT8+fPR8+ePQOWOXz4MKZMmYKSkpKT30GCIAiCIAiCIAiCIP4TUEQAQRD1jr179+Kll15CdHQ0fvzxR01xFQBatGiBt99+G3fccYc8rX///uA4Di6XC88++yyys7MRFRWF4cOHy8scOXIE999/P7KyshAdHY1GjRrhqquuwvr16zW34/F48M4776BXr15ISkpCXFwcunXrhrfeegs8z2uus27dOgwdOhQZGRmIjo5GWloaLrnkEnzxxRcBy65duxbXX389UlNTERUVhRYtWuCee+5BTk6OhaNGEARBEARBEARBEMSJgBysBEHUO+bOnQuPx4Mbb7wR7du3D7q8wxF4q7vuuuuwYcMGDBo0CFdffTWaNWsGANi4cSMuueQSFBUV4dJLL8W1116LgoICfPPNNzjvvPOwcOFCDB48WG7H7XbjyiuvxM8//4wzzjgDN998M2JiYrBs2TKMGTMGa9aswbx581TbnjVrFkaPHg273Y6rrroK2dnZyM/Px/r16/HOO+/ghhtukJedM2cO7rrrLsTExOCqq65C8+bNsXv3bsyePRvfffcd1qxZg5YtW4Z6KAmCIAiCIAiCIAiCqCMksBIEUe9YuXIlAODCCy8MuY1Dhw7h77//RuPGjeVpHo8HN9xwAyorK/HHH3/gvPPOk+fl5OSgZ8+eGDFiBA4cOICYmBgAwIsvvoiff/4ZY8eOxWuvvQa73Q4A8Hq9uPvuu/HBBx/g+uuvx9VXXw0A2L59O+69914kJSVhxYoV6NSpk6pfhw8fll/v2rUL99xzD7KysvD7778jLS1Nnrd06VIMHDgQDzzwAL755puQjwNBEARBEARBEARBEHWDBFaCIOodubm5AID09PSAeTt27MDnn3+umtayZUuMGDFCNW3ixIkqcRUAFi9ejL179+Kxxx5TiavStsaNG4cHH3wQv/32Gy6//HLwPI+33noLaWlpKnEVAOx2O1577TXMmTMHn3zyiSywvvvuu/B4PHjmmWcCxFVAiDWQePfdd+F2u/HGG2+oxFUAuOiii3DVVVdh0aJFKCsrQ1JSkt7hIgiCIAiCIAiCIAjiBEICK0EQ9Q7GGACA47iAeTt27MDzzz+vmta3b98AgfXcc88NWHf16tUAgAMHDmDChAkB83fv3i1v4/LLL8euXbtQWFiI7OxsvPDCC5p9jY2NxY4dO+T3a9asAQAMGjRIb/cC+rN8+XKsW7cuYH5+fj54nsfu3bvRvXv3oO0RBEEQBEEQBEEQBBF+SGAlCKLekZqaih07duDo0aMB866++mpZgD1w4AAyMzN12/CnsLAQAPDll18abr+iokK1/O7duwNEXa3lAaCkpAQAkJGRYbgNZftTp0411R+CIAiCIAiCIAiCIE4+tkh3gCAIwip9+/YFIOSQhoqW+7VBgwYAgG+//RaMMd2f5557TrX8NddcY7j8/v375W0kJycDgKY4rNef0tJSw/b79esX8nEgCIIgCIIgCIIgCKJukMBKEES9Y/jw4bDb7ViwYAF27twZtnZ79eoFAFixYoWp5c844wwkJydjzZo1cLvdlrbx888/h70/BEEQBEEQBEEQBEGcfEhgJQii3tG2bVs89dRTcLlcGDRoENavX6+5nDQc3yxDhgxBmzZt8Pbbb+OHH37QXGb16tWoqqoCADgcDowZMwbHjh3DAw88gOrq6oDljx07hu3bt8vvR48eDYfDgYkTJ6qyWSWOHDkiv77//vvhdDrx0EMPYdeuXQHL1tbWkvhKEARBEARBEARBEBGGY1JYIUEQRD2CMYZnnnkGL730EhhjOOecc9CzZ08kJyejqKgIe/bswdKlS8HzPMaNG4cpU6YAAPr374/ff/8dere+rVu34tJLL0Vubi769OmDrl27Ii4uDocPH8b69euxb98+HDt2TM5wdbvduP7667Fo0SJkZGTgoosuQkZGBvLz87F7926sXLkSL774Ip544gl5G7NmzcKoUaPgdDpx1VVXITs7GwUFBVi/fj0aNGiAZcuWycvOmzcPI0aMAGMMl112Gdq1awe3241Dhw5hxYoVaNKkiaZQSxAEQRAEQRAEQRDEyYEEVoIg6jXbt2/HjBkzsHz5chw8eBBVVVVISkpCu3bt0K9fPwwbNgwdO3aUlw8msAJAfn4+Xn/9dXz//ffYt28fbDYb0tLS0KVLF1x99dW48cYb4XD4agQyxjBv3jzMnTsXmzZtQkVFBZo0aYLMzEwMHjwYt912G1q0aKHaxurVq/Hqq69ixYoVKCkpQePGjXHWWWfhzjvvxPXXX69adtu2bXjttdewbNky5ObmIj4+Hunp6ejbty+GDh2Kiy66KExHkyAIgiAIgiAIgiAIq5DAShAEQRAEQRAEQRAEQRAEESKUwUoQBEEQBEEQBEEQBEEQBBEiJLASBEEQBEEQBEEQBEEQBEGECAmsBEEQBEEQBEEQBEEQBEEQIUICK0EQBEEQBEEQBEEQBEEQRIiQwEoQBEEQBEEQBEEQBEEQBBEiJLASBEEQBEEQBEEQBEEQBEGECAmsBEEQBEEQBEEQBEEQBEEQIUICK0EQBEEQBEEQBEEQBEEQRIg4It2Bk8Hx48cj3QWCIAiCIE5xmjRpcsr9z+BwOJCSkhLpbhAEQRAEQRAEYcB/QmD1eDxgjEW6GwRBEARBnKJwHAeA/mcgCIIgCIIgCMI6FBFAEARBEARBEARBEARBEAQRIiSwEgRBEARBEARBEARBEARBhAgJrARBEARBEARBEARBEARBECFCAitBEARBEARBEARBEARBEESI/CeKXBEEERoulwsulyvS3SDqORzHISEhQS4iRBAEQRAEQRAEQRCnEySwEgShSWVlJTiOQ2JiIgljRJ2ora1FRUUFEhMTI90VgiAIgiAIgiAIggg7FBFAEIQmHo8HcXFxJK4SdSYqKgqMsUh3gyAIgiAIgiAIgiBOCCSwEgShCQmrBEEQBEEQBEEQBEEQwSGBlSAIgiAIgiAIgiAIgiAIIkRIYCVOe9jeHWCVFZHuBkEQBEEQBEEQBEEQBHEaQgIrcVrD9u4AP2Uc+IljI90V4hRl1apVyMjIQGlpaZ3aefDBBzFixIgw9apunEp9IQiCIAiCIAiCIIjTHRJYidMa9u9m4UXRcbDyugloxKnNRx99hHbt2sHj8cjTKisr0apVK1xzzTWqZdeuXYuMjAzs3bsX3bt2wcbfliAxOuqE99Hr9eK9997DxRdfjKysLHTo0AG33nor1q9ff8K3TRAEQRAEQRAEQRDEiYEEVuL0JjZefsm2/RXBjtQdVpA
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from HR; 15/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from HU; 16/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from IE; 17/32\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABVgAAAGXCAYAAABGCzujAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hT5fvH8fdJ96ItGwqlBVqmyBBlyfwpCiriRHGiIiBTREUQmQoqgiAqCDIUFURRHF9FhSJL9hKQsjeU7pGOjPP7I6NJm7ZJVwq9X9fF1eTMJ0lbmk/ucz+KqqoqQgghhBBCCCGEEEIIIVymcfcAhBBCCCGEEEIIIYQQ4nolAasQQgghhBBCCCGEEEIUkwSsQgghhBBCCCGEEEIIUUwSsAohhBBCCCGEEEIIIUQxScAqhBBCCCGEEEIIIYQQxSQBqxBCCCGEEEIIIYQQQhSTBKxCCCGEEEIIIYQQQghRTBKwCiGEEEIIIYQQQgghRDFJwCqEEEIIIYQQQgghhBDFJAGrEEIUISIigoiICHcPIx9FUejevbu7hyGEEEIIIYQQQlRqErAKIa5biqKgKIq7hyGEEEIIIYQQQohKTAJWIYQQQgghhBBCCCGEKCYJWIUQQgghhBBCCCGEEKKYJGAVQtxQzpw5g6IoPPPMM/z333889NBD1KhRA41GQ0xMjHW733//nT59+lC9enV8fHxo1KgR48aNIzk52anzpKSk8N5779GzZ0/q1auHt7c3NWrU4L777mPbtm0O97H0TI2Pj2fw4MHUqVMHHx8fWrRowZIlSxzuk5OTw7Rp02jUqBE+Pj5ERkYyceJEsrOzXX1qhBBCCCGEEEIIUQY83T0AIYQoCydOnKBDhw40adKEJ554gvT0dIKCggCYOnUqb731FtWqVaNv377UrFmTgwcP8v777/Prr7+ybds2goODCz3+0aNHmTBhAl27dqVv376EhoZy9uxZfvzxR3799VfWrVtHnz598u2XnJxM586d8fb25qGHHiIrK4s1a9bw/PPPo9FoePbZZ63bqqrKI488wo8//kijRo0YPnw4OTk5fP755xw8eLB0nzAhhBBCCCGEEEIUi6KqquruQQghRHFYJriy/TV25swZIiMjARg/fjxvv/223T4bN26kZ8+edO7cmV9++cUuSF22bBnPPvsso0aNYu7cudblERER1mNbpKSkoNPpqF69ut3xz549y2233UZISAj//fefw/E+99xzLFy4EA8PDwCOHDlCq1atiIqK4ujRo9btv/rqKwYOHEiHDh3YuHEjvr6+ACQmJtK+fXtOnTpFt27d7CpzhRBCCCGEEEIIUb6kRYAQ4oZUq1Yt3nrrrXzL582bB8CiRYvyVak+88wztG7dmq+++qrI4wcHB+cLVwEaNGjAww8/zLFjxzh37ly+9f7+/syZM8cargI0b96czp07899//5GWlmZdvnTpUgDefvtta7gKULVqVd58880ixyiEEEIIIYQQQoiyJy0ChBA3pJtvvhkfH598y7dv346XlxerV692uF9OTg7Xrl0jISGBatWqFXqOrVu38uGHH7J9+3bi4uLIycmxW3/x4kXCw8PtlkVHR1tbFdiqX78+YGohYFm/d+9eNBoNXbp0ybd99+7dCx2bEEIIIYQQQgghyocErEKIG1Lt2rUdLk9ISECv1zNlypRC909PTy80YF27di0PPfQQvr6+3HHHHTRq1IiAgADrZFqbNm1yOBFVQb1dPT1Nv44NBoN1WUpKClWrVsXLy8vpxyeEEEIIIYQQQojyJQGrEOKGZOl3mldwcDBGo5HExMQSHf/NN9/E29ub3bt306xZM7t1L774Ips2bSrR8cE01sTERHQ6Xb6Q9cqVKyU+vhBCCCGEEEIIIUpOerAKISqVDh06kJSUxOHDh0t0nBMnTtC8efN84arRaGTLli0lOrZF27ZtCzyeTGwlhBBCCCGEEEJUDBKwCiEqlTFjxgDwwgsvcOnSpXzrMzIy+Oeff4o8TkREBMePH+fixYvWZaqqMmXKFI4cOVIqY3322WcBmDBhAllZWdbliYmJTJ8+vVTOIYQQQgghhBBCiJKRFgFCiEqlV69ezJw5k/HjxxMVFUWfPn2IjIwkPT2ds2fPsmnTJrp06cJvv/1W6HHGjBnDkCFDaNu2LQ8++CBeXl5s3bqVI0eOcO+99/LTTz+VeKyPPfYYq1atYt26dbRs2ZJ+/fqh0+lYs2YN7du35+TJkyU+hxBCCCGEEEIIIUpGKliFEJXOa6+9xt9//03fvn3ZunUrc+fO5dtvv+XixYsMHjzYqerQF198kaVLl1KnTh2WL1/OypUrqV+/Pjt27KBt27alMk5FUfj222+ZMmUKRqORjz76iHXr1vHss8+yevXqUjmHEEIIIYQQQgghSkZRVVV19yCEEEIIIYQQQgghhBDieiQVrEIIIYQQQgghhBBCCFFMErAKIYQQQgghhBBCCCFEMUnAKoQQQgghhBBCCCGEEMUkAasQQgghhBBCCCGEEEIUkwSsQgghhBBCCCGEEEIIUUwSsAohhBBCCCGEEEIIIUQxScAqhBBCCCGEEEIIIYQQxSQBqxBCCCGEEEIIIYQQQhSTp7sHUNaSkpIIDQ3l2rVr7h6KEEIIIYRLPD09CQ0NdfcwhBBCCCGEEIW44QNWg8EAgF6vR1VVN49GCCGEEEIIIYQQQghxI5EWAUIIIYQQQgghhBBCCFFMErAKIYQQQgghhBBCCCFEMUnAKoQQQgghhBBCCCGEEMUkAasQQgghhBBCCCGEEEIU0w0/yZUQovj0ej1ardbdwxDXMVVV8fT0JCAgwN1DEUIIIYQQQgghyoQErEIIh/R6PRkZGQQFBaHRSLG7KL6MjAyys7Px8fFx91CEEEIIIYQQQohSJ6mJEMIhrVYr4aooFf7+/mRnZ7t7GEIIIYQQQgghRJmQ5EQIUSAJV0VpUBTF3UMQQgghhBBCCCHKjKQnQgghhBBCCCGEEEIIUUwSsAohhBAVjJqRhqqq7h6GEEIIIYQQQggnSMAqhKjUtm3bRlhYGCkpKSU6zujRoxk0aFApjapkKtJYhOvUY4cwjh6Iumapu4cihBBCCCGEEMIJErAKIW4IK1asIDo6Gr1eb12WkZFBgwYN6N+/v922O3bsICwsjJMnT3LLLbewb98+qlSpUuZjNBgMLFq0iP/7v/+jYcOGNGvWjCeeeIJdu3aV+bnF9cO4+nMA1PU/uHcgQgghhBBCCCGcIgGrEOKG0KlTJzIyMjhw4IB12Y4dO6hRowYHDhwgMzPTunzbtm3Url2bRo0a4e3tTc2aNct8IiZVVRk6dChz585l0KBBxMTEsGbNGurWrctDDz3Eb7/9VqbnLymDwYDRaHT3MIQQQgghxHUqJiYGRVFITk4u0XGeeeYZ7r///lIZU0lVpLGIyiciIoK5c+e6exjCTAJWIcQNoXHjxtSuXZvt27dbl23fvp3evXvToEEDuyrR7du306lTJyB/i4BVq1bRrFkzYmJi6NatG1FRUQwcOJCrV69a9zcYDEyePJlmzZrRokULpk+fXmS/zHXr1vHLL78wd+5cHn/8ccLDw2nRogXvvvsud955J6+88gparRaA2bNnc8cdd7BmzRpuu+02mjZtytChQ0lPT7ce7+eff6ZXr140atSIFi1a8Oijj1r3t/j0009p06YNLVq04I033kCn01nXJScnM3LkSJo3b06jRo144oknOHXqlHW95Xn4448/6N69O5GRkVy4cIGcnBymT59Ou3btaNy4Mffccw/btm1z+nUSzpDeq0IIIYSouD799FOCgoLsrhxLT0/Hy8uL22+/3W7bzZs3oygKsbGxdOrUicuXLxMcHFzmYzQYDMyZM4dWrVrh6+tLSEgId999N1u3bi3zc1dUJ06cICgoiJCQELvlW7ZsoXPnzlSrVg0/Pz+aNm3KnDlznD5uQkIC9erVyxeeHzt2jB49elCrVi18fX1p2LAhEydOtHtPsm/fPtq0aUNgYCD33XcfSUlJ1nV6vZ62bduW+Gq/b775BkVRigzCJ0+ejKIo+f4FBAQ
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from IT; 18/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from LT; 19/32\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABU8AAAGnCAYAAACHA6afAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3wT9f8H8NclTRdtaRmlAwottExBlkAZZcjmK4IKCDKdbLCiIqgoiCBDcCBLtj+WDBERkFFmRTYIyBRZLdC9m3W/P9JckzZp0zZt0vb1fDwKyeVy976sNu97f94fQRRFEURERERERERERERkRGbrAIiIiIiIiIiIiIjsEZOnRERERERERERERCYweUpERERERERERERkApOnRERERERERERERCYweUpERERERERERERkApOnRERERERERERERCYweUpERERERERERERkApOnRERERERERERERCYweUpERERERERERERkApOnRGSXBEFAx44dC3SfESNGQBAE3L17t1hiKkmFOX4iIiIiIiIisi4mT4moxAiCAEEQCn3/GTNmQBAEREREWC8oIiIiIiIiIiIzHGwdABGRKdeuXYOrq6utw7CZ8n78RERERERERPaAyVMiskv16tWzdQg2Vd6Pn4iIiIiIiMgecNg+EdmlnD0/a9Wqhc8++wwA0KlTJ6kFgLk2AMuWLcMzzzwDZ2dnVKtWDW+++SYSEhLy3Y8hcz1U16xZg5deeglBQUFwcXGBh4cH2rZti3Xr1pncTseOHSEIAtRqNWbPno3g4GA4OTmhRo0amDJlCjIzMy2K69GjR/j888/Rtm1b+Pj4wNHREX5+fnj11Vdx5coVk/smIiIiIiIiosJj5SkRlQqTJk3Czp07ceTIEQwfPhy1atUyu+7777+Pffv24X//+x+6deuGw4cPY+XKlbhx4waOHDlS5FhGjx6NBg0aoEOHDvD19UVMTAx+++03DB8+HP/88w9mz55t8n6DBw/GsWPH0LNnT3h4eGDPnj2YP38+njx5grVr1+a736NHj2LOnDno1KkTXnrpJVSoUAE3b97Ezz//jF27duHEiRN49tlni3x8RERERERERKTD5CkRlQqTJk1CQkICjhw5ghEjRuQ5E/2pU6dw+fJlBAQEAADUajU6d+6Mo0eP4tSpU2jVqlWRYvn7779Ru3Zto2WZmZno0aMH5s2bhzFjxqB69eq57nf79m1cuXIFlSpVAgB88cUXaNKkCTZs2IA5c+bA19c3z/127twZjx8/hru7u9Hyc+fOoX379vjwww+xd+/eIh0bEREREREREWXjsH0iKnM++eQTKXEKAA4ODhg5ciQA4PTp00Xefs7EKQA4OTlh3LhxUKvVOHTokMn7ffXVV1LiFAAqVKiAIUOGQKvV4uzZs/nu19vbO1fiFACaNWuGzp07IyIiAiqVqgBHQkRERERERER5YeUpEZU5LVq0yLWsRo0aAID4+Pgib//evXuYO3cuDh48iHv37iE9Pd3o9ocPHxZbXL/99huWLl2KM2fOICYmBmq12uj2mJiYfCtYiYiIiIiIiMgyTJ4SUZlTsWLFXMscHHQfdxqNpkjbvnPnDp577jnEx8ejffv26NatGypWrAi5XI67d+9i7dq1JieAskZc33zzDSZOnAgvLy907doVAQEBcHV1hSAI2LlzJy5evGh230RERERERERUcEyeElG5JghCrupNvYSEhFzLFi5ciNjYWKxevRojRowwum3jxo0WTfxUGGq1Gp9++il8fHxw7ty5XNWlkZGRxbJfIiIiIiIiovKMPU+JqNSQy+UAil49asjLywv379/PtVyj0eDChQu5lt+6dQsA8NJLL+W67ciRI1aLK6eYmBgkJCQgNDQ0V+I0JSUF586dK7Z9ExEREREREZVXTJ4SUalRuXJlADCZ7CysVq1a4d69e9i/f7/R8lmzZuG///7LtX6tWrUAAIcPHzZavm/fPqxcudJqceXk7e0NV1dXnDlzBikpKdJylUqFiRMnIiYmptj2TURERERERFRecdg+EZW4nMPdDS1ZsgSurq4mb+vUqRNkMhmmTp2Ky5cvw8vLCwAwffr0Qsfy3nvvYd++fejbty8GDhyISpUq4eTJk/j333/RsWNHREREGK0/ZswYrF69GgMGDMBLL70Ef39//P3339i7dy8GDBiAzZs3FzqWvMhkMkyYMAFz5szBM888g759+0KpVOLw4cOIi4tDp06dciV0iYiIiIiIiKhomDwlohKXV1/QRYsWmU2e1q9fH2vXrsX8+fOxZMkSZGRkACha8rRz587YuXMnPvvsM2zatAkVKlRA165dsXnzZnz66ae51m/cuDEOHz6M6dOnY8+ePVCr1WjSpAm2b98OT0/PYkueAsDMmTNRtWpVrFy5EsuWLUPFihXRtWtXzJo1y2SsRERERERERFQ0giiKoq2DICIiIiIiIiIiIrI37HlKREREREREREREZAKTp0REREREREREREQmMHlKREREREREREREZAKTp0REREREREREREQmMHlKREREREREREREZAKTp0REREREREREREQmMHlKREREREREREREZAKTp0REREREREREREQmONg6gKJ6+vSprUMgIiIiO1e1alW7+5vBwcEBXl5etg6DiIiIiIjyUOqTp2q1GqIo2joMIiIislOCIADg3wxERERERFRwHLZPREREREREREREZAKTp0REREREREREREQmMHlKREREREREREREZAKTp0REREREREREREQmlPoJo4iIiKwtMzMTmZmZtg6DrCg9PR1KpbLE9+vk5AQnJ6cS3y8REREREVkHk6dEREQGUlNTIQgC3N3dpVnaqfRTKBRQqVQluk9RFJGeno7U1FRUqFChRPdNRERERETWwWH7REREBtRqNVxdXZk4pSITBAGurq5Qq9W2DoWIiIiIiAqJyVMiIiIDTJqStfE1RURERERUejF5SkRERERERERERGQCk6dERFQmCdpMKNJuA6LW1qEQERERERFRKcXkKRERlUmej1bB69FKuMYftXUoduvkyZPw9/dHYmJikbYzadIkjBo1ykpRFY09xUJERERERKUfk6dERFQmKTLuAQCck8/YOJLit27dOoSEhBhNTJSamoqaNWuiX79+RuueOnUK/v7+uH37Nlq0aIHz58/Dw8Oj2GPUaDRYvnw5nn/+eQQFBaF+/fp47bXXcPr06WLfNxERERERUWExeUpERFTKhYaGIjU1FRcvXpSWnTp1ClWrVsXFixeRnp4uLT958iR8fHxQu3ZtODo6wtvbu9gnNBJFEaNHj8aiRYswatQoRERE4Oeff4afnx9efvll7N27t1j3X1QajQZaLds/EBERERGVR0yeEhER5UEURYiZGbb5EUWLYqxTpw58fHwQGRkpLYuMjET37t1Rs2ZNo+rOyMhIhIaGAsg9bH/z5s2oX78+IiIiEBYWhuDgYAwZMgSPHz+W7q/RaDBjxgzUr18fDRs2xKxZs/KNc9euXfjtt9+waNEiDB48GAEBAWjYsCG++uordOvWDe+99x7S0tIAAAsWLEDXrl3x888/o1WrVqhXrx5Gjx6NlJQUaXu7d+9Gly5dULt2bTRs2BADBw6U7q+3dOlSNG3aFA0bNsRHH30ElUol3ZaQkIAJEyagQYMGqF27Nl577TXcuXNHul3/OPzxxx/o2LEjAgMD8eDBAyiVSsyaNQvNmzdHnTp10KdPH5w8edKi54iIiKg8i4iIgCAISEhIKNJ2RowYgRdffNEqMRWVPcVC5U+tWrWwaNEiW4dRbjB5SkREZZxlCUizlJnQjhtgkx8oMy0Os02bNkaJvJMnT6JNmzZo3bq1tFypVOLs2bNS8tSU9PR0LF26FN988w22b9+Ohw8fYubMmdLty5Ytw+bNmzF//nzs3LkTCQkJ+VaO7ty5E0FBQejWrVuu29566y3Ex8fj6NHs3rT//fcf9u3bh7Vr12Lt2rX4888/8d133wEAHj9+jLFjx2LgwIFSBWvPnj2NErgnT57E3bt3sXXrVixatAhbtmzBpk2bpNsnT56
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from LU; 20/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from LV; 21/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from ME; 22/32\n"
]
},
{
"data": {
"image/png": "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ALB48WLddvn5+UHH4NnHV199ZWgfnuP1eKsq0VruQW08QxlrgiAIgiAIgiAIgiCMQ9YBBEGEzIgRI2CxWDBixAhkZ2dj9OjRuu09QuWFCxdU16enp8valQWevvfv3w/GmObPiBEjQt7HN998o7uP//znPwCAGjVqAAAuXryo2p/Wcg8cx2nGEM6xJgiCIAiCIAiCIIjqAAmtBEGETGJiIm699VacPXsWderUwaBBg3Tbd+zYEQCwefNmn3UOhwNbtmwBAFx77bUhxWUymTSzXLt06QIA+O2330Lahx6B7uPqq69GVFQUDhw4gLy8PJ/1nnEJhPIaa4IgCIIgCIIgCIKo7pDQShBEqfD6669j9erVWLt2LaxWq27bO+64A7Vq1cLnn3+O//3vf7J18+fPx/Hjx3HLLbfo2g8YoXbt2rh8+TKKi4t91j344INISEjA888/j507d/qsFwRBVZwMhEGDBqFZs2ZYuHAh1q1bp9pm+/btKCwsBABYrVYMHToUOTk5mD17tqzd/v37xYJjgVBeY00QBEEQBEEQBEEQ1R3yaCUIolRISUlBSkqKobaxsbH48MMPcc8996BHjx645557kJycjN9//x0bNmxA/fr1sWjRopBjuvnmm7Fr1y70798f3bt3h9VqRfv27XHbbbehdu3aWLlyJQYPHowuXbrg5ptvRps2bcDzPE6fPo3t27cjMzNTVaQ1isViwddff42+ffti4MCBSEtLQ4cOHRAdHY0zZ85g165dOH78ONLT0xEdHQ0AePnll7Fx40a88sor2LFjB9LS0pCeno4vv/wSAwYMwJo1a8Dzxp+RlddYEwRBEARBEARBEER1h4RWgiDCwqBBg7B161a89NJL+PHHH5GTk4P69evj4YcfxrPPPouGDRuGvI8ZM2YgOzsb3333HX777Tc4nU6MGDECt912GwCXEHvgwAG89tpr+PHHH/Hbb7/BarWiYcOG6NWrF+66666QY2jXrh3279+PefPm4fvvv8dHH30EnufRoEEDdOzYEc8//zzq1Kkjtq9Xrx62bduGadOmYd26ddixYwdatmyJd955BzExMVizZk3AfqrlMdYEQRAEQRAEQRAEUd3hGGMs3EEQBEEQ/pk+fTpeeuklrF+/Hn379g13OARBEARBEARBEARBSCChlSAIooJx/vx5nyzTP/74A2lpaYiIiMDZs2cRGRkZpugIgiAIgiAIgiAIglCDrAMIgiAqGJ07d0Zqairatm2LmJgYHD16FGvXroUgCFi8eDGJrARBEARBEARBEARRAaGMVoIgiArGCy+8gG+//RYnT55ETk4O4uPj0bVrV0yePBk9evQId3gEQRAEQRAEQRAEQahAQitBEARBEARBEARBEARBEESI8OEOgCAIgiAIgiAIgiAIgiAIorJDQitBEARBEARBEARBEARBEESIkNBKEARBEARBEARBEARBEAQRIiS0EgRBEARBEARBEARBEARBhIg53AGEyuXLl8MdAkEQBEEQFZy6detWuL8ZzGYzatasGe4wCIIgCIIgCIIoJSq90OpwOMAYC3cYBEEQBEFUUDiOA0B/MxAEQRAEQRAEUbaQdQBBEARBEARBEARBEARBEESIkNBKEARBEARBEARBEARBEAQRIiS0EgRBEARBEARBEARBEARBhAgJrQR
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from MK; 23/32\n"
]
},
{
"data": {
"image/png": "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EQRBEARBEARBEERzgaIGCIII45JLLsHw4cPxxRdfYNWqVVHLvvPOOwCABx98EG3btpW2m0wmvPjiizAYDFiwYIFq3eeffx4pKSlx9/Phhx9Gx44dFW1ed911ABBxCn40UlNTMX36dHzzzTc4efIkAOCtt94CwzCYNWtWxHpWqxXt27cP256VlYXrr78elZWViv58/fXXKCoqwkUXXYTLL788rF6HDh2kn5cuXYoDBw7g1ltvxahRoxTl2rVrh3vuuQcnT57ETz/9BADw+Xz44IMPkJaWpnC0AsDgwYNxxRVXhLW3evVq7NmzByNHjsSMGTMUr11++eUYMWIE9u7dq3ot3H777ejbt69i24033ghA3zmIdewIgiAIgiAIgiAIorlAwitBEKq88MILAIA777xTMTU8lM2bNwMQ8lhD6dGjB9q3b49Dhw6F5a5arVb079+/Tn0cPHhw2DZRtKysrIxrnzfccAN8Ph/effddeDwevPfeezj33HPRuXPnqPV27NiBa6+9Fp07d0ZycrKUS3vXXXcBAIqLi6Wyf/zxBwDg/PPP1+zPmjVrAABFRUWYO3du2Ne6desAALt375a+O51ODBgwABkZGWH7GzNmTNi2aOcQAM477zwAQuRBKPVxDmIZO4IgCIIgCIIgCIJoLpi0ixAEcToyfPhwXHLJJfj000/x8ccfhzkhRaqrqwEAubm5qq/n5eXhyJEjqK6uRmZmprQ9Jycn4oJZelETFsXs2dAFsvQyfPhwnHHGGViwYAHat2+PioqKiItqifzxxx8499xz4ff7MW7cOFx00UVIT0+HwWDAli1b8OWXX8Lj8UjlRRE6Pz9fsz/l5eUAgE8++SRqObvdDiB4PnJyclTLqZ0nPedQXk5OXc9BrGNHEARBEARBEARBEM0FEl4JgojI008/jS+//BL3338/pk2bplpGFN5OnDiBLl26hL1eUlKiKCdSV9G1Ibn++utx55134p577kF2dnbEYxeZN28eXC4XVqxYEeYofeqpp/Dll18qtokCtB4npzhuX375JS666CLd5cWohFBOnDgRsY7aa0Dkc1gfxDp2BEEQBEEQBEEQBNFcoKgBgiAi0qVLF9xyyy04dOgQ/vOf/6iWGThwIABg5cqVYa/t378fx44dQ2FhocLtqoXRaAQQv2u1rlx99dWwWCw4duwYrrzySlit1qjl9+/fj+zsbNVp/L/88kvYtmHDhgEAvv/+e82+iGV/++03HT0HevbsCZvNhi1btqg6VNXOU7RzKN9+5pln6upDLMQ6dgRBEARBEARBEATRXCDhlSCIqDz88MPIzMzEE088IU1nlyMuOjVv3jyUlpZK21mWxV133QWO43D99dfH1GarVq0AAEePHq1Dz+OndevW+OGHH/DFF1/g/vvv1yxfUFCAiooKbN26VbF9wYIFquLqlClTUFBQgCVLluDjjz8Oe13uhJ06dSq6dOmC1157DcuWLVNtf82aNXA6nQAAs9mMK664ArW1tWGLa23YsAEffPBBWP2RI0eiR48eWLVqFT799FPFa59++il+/fVXdO/ePWxxr/og1rEjCIIgCIIgCIIgiOYCRQ0QBBGV7Oxs/Otf/8I999yj+vqIESNwzz334Nlnn0WfPn1wySWXICUlBd9++y22b9+OUaNG4e67746pzbF
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from NL; 24/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from NO; 25/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from PL; 26/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from PT; 27/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from RO; 28/32\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABVgAAAGnCAYAAABCcTwOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3wT9R/H8dcl3YO2jLKhFChThoCyh6iACwfugaIioIAIuPCnKIiIIqigIiIKoqIouBFFKlP2EpQhu7SU0t2mzbj7/XGZbTppaQuf5+PBg+RyuftekqbNO5/7fBVN0zSEEEIIIYQQQgghhBBClJihogcghBBCCCGEEEIIIYQQVZUErEIIIYQQQgghhBBCCFFKErAKIYQQQgghhBBCCCFEKUnAKoQQQgghhBBCCCGEEKUkAasQQgghhBBCCCGEEEKUkgSsQgghhBBCCCGEEEIIUUoSsAohhBBCCCGEEEIIIUQpScAqhBBCCCGEEEIIIYQQpSQBqxBCCCGEEEIIIYQQQpSSBKxCCFFFHDt2DEVRePDBByt6KEIIIYQQQgghhLCTgFUIUSkpiuLxz2g0UqNGDfr168fixYvRNK2ihyiEEEIIIYQQQgiBoklKIYSohBRFAeCll14CwGKxcPjwYZYvX47FYmHMmDG8/fbbFTnEC85isfDff/8RFhZG3bp1K3o4QgghhBBCCCGEQAJWIUQl5QhY875Fbdiwgd69e6NpGkeOHCEqKqoCRieEEEIIIYQQQgihkxYBQogqpUePHrRq1QpN09i2bVu+25cuXUqvXr0ICwsjMDCQtm3bMm3aNHJycvKtGxUVRVRUFJmZmYwbN46GDRsSGBhIhw4dWLFiBaBXjb7yyis0b96cgIAAmjZtyty5c/Nty2w2M2fOHK677joaN26Mv78/ERER9O/fn59++snrsTj2n52dzcSJE2nUqBH+/v40a9aM6dOn5wuXC+rBevDgQZ599lk6d+5MrVq18Pf3p3Hjxjz66KOcOHGimI+sEEIIIYQQQgghSsOnogcghBAlpaoqAD4+nm9hzzzzDDNmzKBWrVrce++9BAcH8/PPPzNp0iRWrlzJ77//jp+fn8d9LBYL11xzDcnJyQwePBiz2cwXX3zBbbfdxqpVq3j77bfZsWMHgwYNwt/fn2XLlvHEE09Qs2ZN7rzzTud2kpOTGTt2LN27d+eaa66hVq1axMfH891333HDDTcwb948hg8fnu9YLBYL1157LadPn2bQoEH4+PiwYsUKnnvuOUwmEy+//HKRj8e3337LBx98QL9+/ejevTt+fn78/fffLFiwgO+//57t27fToEGD0jzUQgghhBBCCCGEKIK0CBBCVEoFtQhYv349ffr0wcfHh6NHj1KvXj1Abx3Qs2dPGjduzJYtW4iMjATAarUyePBgfv75Z6ZOncqkSZOc24qKiuL48ePccMMNLFu2DH9/fwDWrVtH7969CQsLo3nz5vz222+Eh4cDehVpTEwMbdq0YefOnc5t5ebmcvbs2XxBZkpKCj169CAhIYG4uDgCAwPz7X/QoEF88803ztsSExOJiYlB0zSSkpLw9fV17rtJkyYMHTqUTz75xLmduLg4atas6Ry/wy+//MINN9zAo48+ygcffFCyJ0AIIYQQQgghhBDFIi0ChBCV2uTJk5k8eTKTJk3irrvuon///miaxowZM5zhKsDChQsBeOGFF5zhKuhVrm+99RYGg4EFCxZ43cfbb7/tEU726tWLJk2akJaWxuuvv+4MV0EPRXv27MnevXux2WzO5f7+/l6rRCMiInj44YdJSUlh69atXvf/7rvvegSvkZGRDB48mPT0dA4cOFDEIwT169fPF64CDBo0iNatW7Nq1aoityGEEEIIIYQQQojSkRYBQohKLe8p8oqi8PHHH+frQ+qoJu3Xr1++bbRo0YIGDRpw9OhRUlNTPQLT8PBwoqOj892nXr16HD16lE6dOnm9zWazkZCQQP369Z3L9+3bxxtvvMHatWuJj4/P1/c1Li4u37bCw8Np2rRpvuUNGzYE9ArYomiaxpIlS/jkk0/YvXs3KSkpHuFv3rYIQgghhBBCCCGEKDsSsAohKjVHi4CsrCw2btzIsGHDGDFiBE2aNKFPnz7O9dLS0gCoU6eO1+3UrVuXEydOkJaW5hGwhoWFeV3f0d/V2+2O2ywWi3PZX3/9xVVXXYXVaqV///7cdNNNVKtWDYPBwK5du/juu+/Izc3Nt62i9u8elBbkqaeeYvbs2dStW5cBAwZQv359Z0XsJ598wvHjx4vchhBCCCGEEEIIIUpHAlYhRJUQHBzMNddcw48//kinTp247777OHDgAEFBQYArqExISPBaERofH++xXlmbOnUqJpOJNWvW0LdvX4/bXnvtNb777rty2W9iYiLvvPMObdu2ZePGjYSGhnrc/sUXX5TLfoUQQgghhBBCCKGTHqxCiCqlffv2PProo5w6dYpZs2Y5l3fs2BGA2NjYfPc5fPgwp06dokmTJh7Vq2Xp8OHDVK9ePV+4CvDnn3+Wyz4Bjhw5gqqqXHvttfnC1VOnTnHkyJFy27cQQgghhBBCCCEkYBVCVEEvvPACAQEBvPnmm84epcOGDQP0StKzZ88617XZbEyYMAFVVXn44YfLbUxRUVEkJyezZ88ej+ULFizg119/Ldf9Aqxfv96jnUBmZiaPPvooVqu13PYthBBCCCGEEEIICViFEFVQ/fr1eeyxx0hNTWXGjBkAdO/enaeffppjx47Rtm1bHn/8cZ5++mk6dOjAd999R8+ePZk4cWK5jenJJ58EoGfPnjzyyCOMHz+ePn36MHz4cIYMGVJu+61Tpw533XUXW7ZsoUOHDowfP55HHnmENm3acOTIETp06FBu+xZCCCGEEEIIIYQErEKIKuq5554jKCiId955hzNnzgDw+uuv88UXX9C8eXMWLVrEO++8g6qqTJ06ld9++w0/P79yG8/AgQP54YcfaN26NUuXLmXBggX4+/uzZs0arr/++nLbL+hVss8//zwmk4m5c+fy66+/csMNN7Bx48Zy6zkrhBBCCCGEEEIInaI5pugWQgghhBBCCCGEEEIIUSJSwSqEEEIIIYQQQgghhBClJAGrEEIIIYQQQgghhBBClJIErEIIIYQQQgghhBBCCFFKErAKIYQQQgghhBBCCCFEKUnAKoQQQgghhBBCCCGEEKUkAasQQgghhBBCCCGEEEKUkgSsQgghhBBCCCGEEEIIUUoSsAohhBBCCCGEEEIIIUQp+VT0AC6Es2fPVvQQhBBCCFHJ1apVq9L9zeDj40NERERFD0MIIYQQQghRiEsiYLVarWiaVtHDEEIIIUQlpSgKIH8zCCGEEEIIIUpOWgQIIYQQQgghhBBCCCFEKUnAKoQQQgghhBBCCCGEEKUkAasQQgghhBBCCCGEEEKUkgSsQgghhBBCCCGEEEIIUUqXxCRXQgghRFnLzc0lNze3oochypDJZMJsNl/w/fr7++Pv73/B9yuEEEIIIYQoGxKwCiGEECWUlZWFoiiEhoY6Z58XVZ+vry8Wi+WC7lPTNEwmE1lZWQQHB1/QfQshhBBCCCHKhrQIEEIIIUrIarUSFBQk4ao4b4qiEBQUhNVqreihCCGEEEIIIUpJAlYhhBCihCRYFWVNXlNCCCGEEEJUXRKwCiGEEEIIIYQQQgghRClJwFrFaEcPoqWeq+hhCCGEEEIIIYQQQgghkIC1StES4lBfm4j6wkgJWYUQQlwQGzdupH79+qSlpZ3Xdp588kmGDRtWRqM6P5VpLEIIIYQQQoiqTwLWKkQ7ehA0DXJz0H7/vqKHI4QQogpZtGgRMTExHpMpZWVl0bhxY2655RaPdTdv3kz9+vX577//6Ny5Mzt37qRatWrlPkabzcaHH37I1VdfTXR0NK1ateK+++5j69at5b5vIYQQQgghhCgtCVirkrjjzota0pkKHIgQQoiqpnv37mRlZbF7927nss2bN1OrVi12796NyWRyLt+4cSN16tShadOm+Pn5ERkZWe6TMGmaxsiRI5k9ezbDhg0jNjaWZcuWUa9ePYYMGcL
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from RS; 29/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from SE; 30/32\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABW8AAAGnCAYAAADIXqVPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd5zUdPrH38mU7bBLb9LBglIElaKicupZ0VOxngX7KaKneCqKqNjrqSei/NTDs6BYznZ2sYFioSiogIBIb9vLlCS/P2Ym05JMZtllV3jerxe6O/nmmydlZnc/+eTzKIZhGAiCIAiCIAiCIAiCIAiCIAjNCrWpCxAEQRAEQRAEQRAEQRAEQRDSEfFWEARBEARBEARBEARBEAShGSLirSAIgiAIgiAIgiAIgiAIQjNExFtBEARBEARBEARBEARBEIRmiIi3giAIgiAIgiAIgiAIgiAIzRARbwVBEARBEARBEARBEARBEJohIt4KgiAIgiAIgiAIgiAIgiA0Q0S8FQRBEARBEARBEARBEARBaIaIeCsIgiAIgiAIgiAIgiAIgtAMEfFWEAShmfDMM8+gKArPPPNMU5ciCIIgCIIgCIIgCEIzQMRbQRB2KjRN48knn2TkyJG0atUKn89Hu3bt6N+/PxdccAFvvPFGU5coCIIgCIIgCIIgCILgCm9TFyAIgtBQaJrGsccey7vvvktxcTHHHHMMXbp0Ydu2bSxfvpxnn32Wn3/+meOPP76pSxUEQRAEQRAEQRAEQciIiLeCIOw0vPDCC7z77rsMGDCATz/9lJYtWyYtLy0t5bvvvmui6gRBEARBEARBEARBELJDYhMEQdhp+PLLLwE499xz04RbgJKSEv70pz8B8N5776EoCjfeeGPSmPfffx9FUVAUhd9//z1p2ZgxY1AUhRUrViS9/vPPP3Puueey2267kZOTQ/v27TnjjDP45ZdfLOtcvnw5p5xyCiUlJRQUFDB8+HDeeustx31bs2YNl19+OT179iQnJ4fWrVtz/PHH880336SNnTx5MoqiMHv2bGbNmsX+++9Pfn4+rVq14tRTT2XNmjWO2xIEQRAEQRAEQRAEoXkg4q0gCDsNbdu2BWDp0qUZxx500EH4/X4++uijpNc//vhj8+vEZYZhMHv2bLp3707Pnj3N199991323Xdfnn/+efbbbz/Gjx/PqFGjePXVV9l///35/vvvk+ZftmwZQ4cOZdasWQwbNozx48fTpUsXTjjhBF599VXLWr///nsGDhzIY489xu677864ceM47rjj+OyzzzjwwAN55513LNd77LHHOOuss+jevTuXXXYZe++9Ny+99BKjRo0iEAhkPEaCIAiCIAiCIAiCIDQtEpsgCMJOw0knncRdd93F448/TkVFBaNHj2bIkCH06NEjbWx+fj4HHHAAc+bMoaKighYtWgARwXbIkCH8+uuvfPTRR5x77rkALFq0iM2bN3PccceZc5SWlnL66adTUFDA559/zh577GEuW7x4MQcccADnn38+8+fPN1+/7LLL2Lp1Kw899BDjx483X//vf//LCSeckFZnOBxmzJgxVFdXm2JtjHXr1rHffvsxduxYVq1aRW5ubtK67777Lt988w377LOP+doZZ5zBCy+8wOuvv86pp57q8sgKgiAIgiAIgiAIgtAUiPNWEISdhgEDBvD888/ToUMHnnvuOcaMGUPPnj1p06YNJ510UppDddSoUWiaxqeffgpAWVkZ33//PUcccQSHHHJIkvM29vWoUaPM12bMmEFZWRm33HJLknAL0K9fPy688EIWLFjA4sWLgUj0wQcffECPHj24/PLLk8aPHj2akSNHpu3T22+/za+//sq4ceOShFuATp06ce2117Jx48Y0BzHA+PHjk4RbgAsvvBDAMm5BEARBEARBEARBEITmhThvBUHYqTj55JMZPXo0n3zyCV988QXz58/niy++4NVXX+XVV19l7NixTJ8+HUVROOyww5g8eTIff/wxxx13HLNnz0bXdUaNGkWnTp147bXX+Omnn9hzzz3NOIXDDjvM3NbcuXMBWLBgAZMnT06rJRbf8PPPP9OvXz/TgXvggQfi8XjSxh9yyCGmkJy6jVWrVlluY9myZeY2jjnmmKRlQ4YMSRu/2267ARHXsCAIgiAIgiAIgiAIzRsRbwVB2Onw+XwcccQRHHHEEQBomsYrr7zC2LFjeeqppzj++OMZPXo0Q4cOpaCgwHStfvTRR+Tm5jJ8+HA6depkvtanTx8+++wz9tprLzp06GBuZ+vWrQA8+eSTjvVUVVUBUF5eDkD79u0txyXOnbqNl19+2dU2ErFq2ub1Rj72NU1znE8QBEEQBEEQBEEQhKZHYhMEQdjp8Xg8jBkzhquuugqIRyD4fD4OPPBAfvzxRzZt2sRHH33EiBEjyM3NZY899qBTp058+OGHzJs3j8rKyiTXLcTF0YULF2IYhu2/c845J2n8xo0bLevcsGFD2muxdf773/86buPmm29ugCMlCIIgCIIgCIIgCEJzQsRbQRB2GYqKigAwDMN8bdSoURiGwfPPP89PP/2UlGk7atQoZs+ezQcffGB+n8jQoUMB+Pzzz11tf9CgQQB88cUXls7X2bNnp72W7TYEQRAEQRAEQRAEQdh5EPFWEISdhhdeeIEPPvgAXdfTlm3YsMGMNzj44IPN12Nu2jvvvBMgTbwtLy/nscceQ1VVDjnkkKQ5zzvvPIqLi7nllluYN29e2jZ1XU8SZLt06cLhhx/OypUrefTRR5PG/ve//03Lu4VII7NevXrxr3/9K63hWoy5c+dSU1NjuUwQBEEQBEEQBEEQhD8uknkrCMJOw9dff80///lPOnTowIEHHkiPHj0AWLlyJW+//Ta1tbWMHj2ak08+2Vxn0KBBtGrVik2bNtGyZUsGDx5sLosJuZs2bWLIkCEUFxcnba9169bMmjWLE088kaFDhzJq1Cj69euHqqqsXr2auXPnsnXrVurq6sx1/vWvfzFs2DCuvPJK3n//fQYMGMDy5ct57bXXOO6443jzzTeTtuHz+Xj11Vc58sgjOeaYYxg+fDgDBw4kPz+f33//nW+++YYVK1awfv168vPzG/qQCoIgCIIgCIIgCILQhIh4KwjCTsPVV19Nnz59+PDDD1m0aBHvvfcedXV1tG7dmkMOOYQzzjiDM844A0VRzHVijtpXX32VkSNH4vF4zGVdunShb9++LF26NC3vNsaoUaNYtGgR9913H++99x6ff/45fr+fTp06cdhhh3HSSSclje/Tpw9fffUV1113HR9++CGzZ8+mf//+vP7662zevDlNvAXo378/Cxcu5IEHHuCtt97i6aefRlVVOnbsyKBBg7jlllto06ZNAx1FQRAEQRAEQRAEQRCaC4qRGP4oCIIgCIIgCIIgCIIgCIIgNAsk81YQBEEQBEEQBEEQBEEQBKEZIuKtIAiCIAiCIAiCIAiCIAhCM0TEW0EQBEEQBEEQBEEQBEEQhGaIiLeCIAiCIAiCIAiCIAiCIAjNEBFvBUEQBEEQBEEQBEEQBEEQmiEi3gqCIAiCIAiCIAiCIAiCIDRDRLwVBEEQBEEQBEEQBEEQBEFohoh4KwiCIAiCIAiCIAiCIAiC0AzxNnUBzYXNmzc3dQmCIAiCIDRz2rZt2+x+Z/B6vZSUlDR1GYIgCIIgCIIgNAIi3kYJh8MYhtHUZQiCIAiC0ExRFAWQ3xkEQRAEQRAEQdhxSGyCIAiCIAiCIAiCIAiCIAhCM0TEW0EQBEEQBEEQBEEQBEEQhGaIiLeCIAiCIAiCIAiCIAiCIAjNEBFvBUEQBEEQBEEQBEEQBEEQmiHSsEwQBEEQGolAIEAgEGjqMoQGpLa2lmAwuMO3m5OTQ05Ozg7friAIgiAIgiAITYuIt4IgCILQCFRXV6MoCkVFRSiK0tTlCA2Ez+cjFArt0G0ahkFtbS3V1dUUFBTs0G0LgiAIgiAIgtC0SGyCIAiCIDQC4XCY/Px8EW6F7UZRFPLz8wmHw01diiAIgiAIgiAIOxgRbwVBEAShERDRVmho5JoSBEEQBEEQhF0PEW8FQRA
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from SI; 31/32\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gathering techs from SK; 32/32\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABV8AAAGnCAYAAACgrSd3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeZxN9R/H8de5y+xjZqwzCMMYa3ZlK1srChWJlFCWskWllFRaVCSkpBBaFCmlXVSi7MsPWULWwYzZt7v+/rjmZswMxtI1vJ+Px32Ye873nPM599657nzu53y+htvtdiMiIiIiIiIiIiIiF5TJ1wGIiIiIiIiIiIiIXI6UfBURERERERERERG5CJR8FREREREREREREbkIlHwVERERERERERERuQiUfBURERERERERERG5CJR8FREREREREREREbkIlHwVERERERERERERuQiUfBURERERERERERG5CJR8FREREREREREREbkIlHwVkcvGrFmzMAyDWbNm+TqU0ypsnK1atcIwjIsblIiIiIiIiIhccEq+isglzel0Mn36dFq2bEnx4sWxWq2ULl2aOnXq0LdvXxYtWuTrEEVERERERERE8mXxdQAiIgVxOp106NCB7777jvDwcNq3b0/58uU5fvw4u3btYs6cOfz111/cfvvtvg71opo9ezYZGRm+DkNERERERERECknJVxG5ZH388cd899131K1bl19++YWwsLBc6xMTE1m7dq2PovvvVKhQwdchiIiIiIiIiMg5UNsBEblk/f777wD06tUrT+IVICIightuuOGs9rVmzRruuOMOSpcujb+/PxUrVmTAgAEcOnQo17ibb74ZwzDYuHFjvvuZO3cuhmHw2GOPeZetXbuWIUOGULduXYoXL05AQABVq1bl0Ucf5fjx42d7uiQmJnLddddhMpl4+eWXvcvz6/lqs9mYMmUK7dq1o2LFivj7+xMREUHbtm1ZvHjxWR9TRERERERERC4eJV9F5JJVqlQpAHbs2HFe+/nyyy9p1qwZixcv5sYbb+TRRx8lNjaWd955h0aNGrF7927v2F69egGeS/3zk7P8/vvv9y6bPn06n3zyCdWqVeOBBx6gf//+lClThjfeeINmzZqRmpp6xhj37dtH8+bN+fPPP5k9ezZPPvnkaccfP36cIUOGkJqa6j2njh07sm7dOjp06MC77757xmOKiIiIiIiIyMWltgMicsm68847eeWVV3jnnXdISUmhY8eONGrUiOjo6LPeR1paGr1798blcvHrr7/SrFkz77qXX36Zp556in79+vHjjz8C0KlTJ4oVK8aHH37IuHHjsFj+fZs8ePAgS5YsoUGDBtSuXdu7/Mknn+Stt97CbDbnOva0adPo378/b731FiNHjiwwxo0bN3LrrbeSnp7ON998c1bVvBEREfzzzz+UL18+1/LExESaN2/OyJEj6dmzJ4GBgWfcl4iIiIiIiIhcHKp8FZFLVt26dfnoo4+IjIzkww8/pGvXrlSuXJmSJUty55138s0335xxH1988QXHjx+nW7duuRKvACNGjKBixYr89NNP/PPPPwAEBgbStWtXjhw5wvfff59r/Ny5c3G5XLmqXgEqVqyYJ/EK8NBDD1GsWDF++OGHAuP76aefuO666wD49ddfz7qNgr+/f57EK3iSsn369CExMZHVq1ef1b5ERERERERE5OJQ8lVELml33XUX//zzD99//z3PPPMMHTp0wOl08vnnn9O+fXv69OmD2+0ucPv169cD0Lp16zzrrFYrLVu2zDUO/m098MEHH+QaP2fOHKxWK927d8+13G63M2XKFFq0aEHx4sUxm80YhoHJZCIlJYWDBw/mG9v8+fNp164d5cuX548//qBu3bpnfkBOsmXLFnr16kXlypUJDAzEMAwMw2DEiBEABR5XRERERERERP4bajsgIpc8q9XKTTfdxE033QSA0+lkwYIF9O7dmxkzZnD77bfTsWPHfLdNTk4GIDIyMt/1UVFRucYBNG/enJiYGBYtWkRiYiIRERGsWbOGLVu20KlTJ0qWLJlrH3fffTcLFy6kcuXKdOzYkcjISPz9/QGYOHEi2dnZ+R575cqV2O12mjRpwlVXXVWIRwT++OMP2rRpg8PhoG3bttx+++0UK1YMk8nEhg0b+PLLLws8roiIiIiIiIj8N5R8FZEix2w207VrVzZv3szYsWNZsmRJgcnXsLAwAOLi4vJdf/jw4Vzjctx3332MHj2aefPm0b9//3wn2gJYs2YNCxcupG3btnz77bdYrVbvOpfLxauvvlrgebz00kssXryYmTNnAvDee+9hMp3dBQljx44lMzOTpUuX0qpVq1zrXn75Zb788suz2o+IiIiIiIiIXDxqOyAiRVZoaCjAadsO1K9fH4Bly5blWedwOFi+fDkADRo0yLXuvvvuwzAMPvjgA+x2Ox9//DElS5akffv2ucbt2rULgI4dO+ZKvAKsWrWKzMzMAmPz9/dnwYIF3HXXXcycOZOePXvidDoLHH/qcYsXL54n8Qrwyy+/nNU+REREREREROTiUvJVRC5ZH3/8MT/++CMulyvPuri4OKZPnw7A9ddfX+A+OnXqRPHixfn444/5448/cq2bOHEiu3fv5oYbbqBChQq51lWsWJFWrVrxxx9/MHHiROLj4+nevXueBGulSpWAvMndo0eP8vDDD5/xHK1WK5988gndu3fno48+olu3btjt9jNuV6lSJY4fP86mTZtyLX///ffzTBQmIiIiIiIiIr6htgMicsn6888/efPNN4mMjKRFixZER0cDsGfPHhYvXkxmZiYdO3bkrrvuKnAfISEhzJgxgy5dutCyZUu6dOlChQoVWLt2LT/88AORkZFMmzYt323vv/9+li5dyqhRo7z3T9W4cWOaN2/O559/TrNmzWjRogVHjhzh22+/pVq1apQtW/aM52k2m5kzZw7+/v7MnDkTm83GZ599hp+fX4HbDB06lO+//54WLVrQtWtXwsLCWLNmDcuXL+euu+5i/vz5ZzyuiIiIiIiIiFxcqnwVkUvW8OHDmTJlCk2aNGHTpk288847TJw4keXLl9OqVSvmzJnD559/jmEYp91Px44d+f3332nXrh3ff/89r7/+Otu2baN///6sXbuWypUr57vdnXfeSXBwMHa7ndq1a+dpTQCexOmiRYsYMGAAhw4dYtKkSSxfvpy+ffvy/fff56mULYjJZOL9999nwIABLFq0iI4dO5KVlVXg+FtuuYWvvvqKmjVrMm/ePN5//338/f1ZunRpntYIIiIiIiIiIuIbhvt0zRJFRERERERERERE5Jyo8lVERERERERERETkIlDyVUREREREREREROQiUPJVRERERERERERE5CJQ8lVERERERERERETkIlDyVUREREREREREROQiUPJVRERERERERERE5CJQ8lVERERERERERETkIlDyVUREREREREREROQisBRm8MKFC1m1ahUHDx7Ez8+P2NhY7r33XsqWLesd43a7+eyzz1iyZAlpaWlUrVqVPn36cNVVV3nH2O125syZw++//47NZqN27dr07duXEiVKeMekpaUxc+ZM1qxZA0CjRo3o3bs3wcHBhT7JY8eOFXobERERubKUKlXqkvvMYLFYiIiI8HUYIiIiIiJyjgy32+0+28EvvvgizZs3p0qVKjidTj755BP27dvHhAkTCAgIAOCLL75g4cKFDBw4kKioKD7//HO2bdvGxIkTCQwMBGD69OmsXbuWgQMHEhoayuzZs0lLS2PcuHGYTJ5i3JdeeomEhAT69esHwLRp0yhVqhQjR44s9EkePnyYQpymiIiIXGEMwyAqKuqS+8xgtVopVaqUr8MQEREREZFzVKi2A6NGjaJVq1ZcddVVVKpUiYEDBxIfH8/u3bsBT9XrN998Q+fOnbn22mupUKECDz/8MNnZ2SxfvhyAjIwMfv75Z+677z7q1KlDdHQ0gwYNYt++fWzatAmAAwcOsGHDBvr3709sbCyxsbH069ePdevWcejQoQv8EIiIiIiIiIiIiIhceIVqO3CqjIwMAEJCQgA
"text/plain": [
"<Figure size 1600x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import pycountry\n",
"plt.style.use(\"ggplot\")\n",
"\n",
"import os\n",
"from pathlib import Path\n",
"from pprint import pprint\n",
"import pandas as pd\n",
"import numpy as np\n",
"import json\n",
"import warnings\n",
"import datetime\n",
"\n",
2023-04-26 17:00:23 +00:00
"warnings.filterwarnings(\"ignore\")\n",
"\n",
"def intersection(a, b):\n",
" return [entry for entry in list(set(b)) if entry in a]\n",
"\n",
"\n",
"def harmonise_data(freq=\"h\", quiet=True):\n",
"\n",
" data_path = Path.cwd() / \"..\" / \"..\" / \"generation_data\"\n",
" target_path = Path.cwd() / \"..\" / \"..\" / \"harmonised_generation_data\"\n",
"\n",
" with open(data_path / \"generation_mapper_entsoe.json\", \"r\") as f:\n",
" mapper_to_entsoe = json.load(f)\n",
" pprint(mapper_to_entsoe)\n",
" \n",
" def is_country_generation(filename):\n",
" return filename.endswith(\".csv\") and len(filename) == 6 \n",
"\n",
" generation_files = [file for file in os.listdir(data_path) if is_country_generation(file)]\n",
" # generation_files = [\"DE.csv\"]\n",
"\n",
" for i, gen in enumerate(generation_files):\n",
" print(f\"Gathering techs from {gen[:2]}; {i+1}/{len(generation_files)}\")\n",
"\n",
" gen = pd.read_csv(data_path / gen, parse_dates=True, index_col=0)\n",
"\n",
" if not isinstance(gen.index[0], datetime.datetime):\n",
" gen = (\n",
" gen.iloc[1:]\n",
" .fillna(0)\n",
" .astype(np.float)\n",
" )\n",
"\n",
" def make_tz_time(time):\n",
" return pd.Timestamp(time).tz_convert(\"utc\")\n",
"\n",
" gen.index = pd.Series(gen.index).apply(lambda time: make_tz_time(time))\n",
"\n",
" clean_generation = pd.DataFrame(index=gen.index)\n",
"\n",
" taken_generators = list()\n",
" for generator, entsoe_names in mapper_to_entsoe.items():\n",
" \n",
" inter = intersection(entsoe_names, gen.columns)\n",
" taken_generators += inter\n",
" if len(inter) > 0:\n",
" clean_generation[generator] = gen[inter].sum(axis=1)\n",
" else:\n",
" clean_generation[generator] = np.zeros(gen.shape[0])\n",
"\n",
" if not quiet:\n",
"\n",
" fig, ax = plt.subplots(1, 2, figsize=(16, 4))\n",
" \n",
" clean_generation.iloc[:800].plot(ax=ax[0]) \n",
"\n",
" totals = clean_generation.sum(axis=0).sort_values(ascending=False)\n",
" \n",
" shares = totals/totals.sum()\n",
" ax[1].pie(totals.values, labels=\n",
" [f\"{name}: {np.around(share*100, decimals=2)}%, {np.around(value/4*1e-6, decimals=2)} TWh\" \n",
" for name, share, value in zip(totals.index, shares.tolist(), totals.values)])\n",
" ax[0].set_title(pycountry.countries.get(alpha_2=generation_files[i][:2].upper()).name) \n",
"\n",
" plt.show()\n",
" \n",
" clean_generation = clean_generation.resample(freq).mean()\n",
" clean_generation.columns = [col + \" (MWh)\" for col in clean_generation.columns]\n",
" clean_generation.to_csv(target_path / (\"prepared_\"+generation_files[i]))\n",
"\n",
" # return gen, clean_generation, taken_generators\n",
"\n",
"\n",
"# gen, proc, taken = harmonise_data()\n",
"harmonise_data(quiet=False)"
]
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.9686603685131582\n",
"Lignite 19.774918\n",
"Wind Onshore 19.230427\n",
"Nuclear 13.675373\n",
"Gas 10.890353\n",
"Hard Coal 9.204278\n",
"Biomass 8.914065\n",
"Solar 8.068449\n",
"Wind Offshore 4.693769\n",
"Run of River 2.795068\n",
"Hydro 1.988677\n",
"Oil 0.764622\n",
"dtype: float64\n"
]
}
],
"source": [
"print(proc.sum().sum() / gen.sum().sum())\n",
"\n",
2023-04-26 17:00:23 +00:00
"print(proc.sum().sort_values(ascending=False).round(decimals=3)*100 / proc.sum().sum())"
]
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Hydro Pumped Storage.1 48020719.0\n",
"Other 13313522.0\n",
"Other renewable 5132293.0\n",
"Geothermal 725222.0\n",
"Fossil Gas.1 25022.0\n",
"Nuclear.1 12141.0\n",
"Fossil Oil.1 488.0\n",
"Hydro Water Reservoir.1 11.0\n",
"dtype: float64"
]
},
"execution_count": 131,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gen.drop(columns=taken).sum().sort_values(ascending=False)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
2023-04-26 17:00:23 +00:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 2018-12-31 23:00:00+00:00\n",
"1 2018-12-31 23:15:00+00:00\n",
"2 2018-12-31 23:30:00+00:00\n",
"3 2018-12-31 23:45:00+00:00\n",
"4 2019-01-01 00:00:00+00:00\n",
"5 2019-01-01 00:15:00+00:00\n",
"6 2019-01-01 00:30:00+00:00\n",
"7 2019-01-01 00:45:00+00:00\n",
"8 2019-01-01 01:00:00+00:00\n",
"9 2019-01-01 01:15:00+00:00\n",
"dtype: datetime64[ns, UTC]\n",
"DatetimeIndex(['2018-12-31 23:00:00+00:00', '2018-12-31 23:15:00+00:00',\n",
" '2018-12-31 23:30:00+00:00', '2018-12-31 23:45:00+00:00',\n",
" '2019-01-01 00:00:00+00:00', '2019-01-01 00:15:00+00:00',\n",
" '2019-01-01 00:30:00+00:00', '2019-01-01 00:45:00+00:00',\n",
" '2019-01-01 01:00:00+00:00', '2019-01-01 01:15:00+00:00',\n",
" ...\n",
" '2019-12-31 20:30:00+00:00', '2019-12-31 20:45:00+00:00',\n",
" '2019-12-31 21:00:00+00:00', '2019-12-31 21:15:00+00:00',\n",
" '2019-12-31 21:30:00+00:00', '2019-12-31 21:45:00+00:00',\n",
" '2019-12-31 22:00:00+00:00', '2019-12-31 22:15:00+00:00',\n",
" '2019-12-31 22:30:00+00:00', '2019-12-31 22:45:00+00:00'],\n",
" dtype='datetime64[ns, UTC]', length=35040, freq=None)\n"
]
}
],
"source": [
2023-04-26 17:00:23 +00:00
"def make_tz_time(time):\n",
" return pd.Timestamp(time).tz_convert(\"utc\")\n",
"# type(pd.Timestamp(gen.index[4]).tz_convert(\"utc\"))\n",
"\n",
"index = pd.Series(gen.index).apply(lambda time: make_tz_time(time))\n",
"\n",
"#gen.index[4].tz_convert(\"utc\")\n",
"\n",
"print(index[:10])\n",
"print(pd.DatetimeIndex(index))\n"
]
2023-04-26 17:00:23 +00:00
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##### Day-Ahead Prices "
]
},
{
"cell_type": "code",
"execution_count": 143,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Trying country AL.\n",
"Trying country AT.\n",
"Trying country BA.\n",
"Trying country BE.\n",
"Trying country BG.\n",
"Trying country CH.\n",
"Trying country CZ.\n",
"Trying country DE.\n",
"Trying country DK.\n",
"Trying country EE.\n",
"Trying country ES.\n",
"Trying country FI.\n",
"Trying country FR.\n",
"Trying country GB.\n",
"Trying country GR.\n",
"Trying country HR.\n",
"Trying country HU.\n",
"Trying country IE.\n",
"Trying country IT.\n",
"Trying country LT.\n",
"Trying country LU.\n",
"Trying country LV.\n",
"Trying country ME.\n",
"Trying country MK.\n",
"Trying country NL.\n",
"Trying country NO.\n",
"Trying country PL.\n",
"Trying country PT.\n",
"Trying country RO.\n",
"Trying country RS.\n",
"Trying country SE.\n",
"Trying country SI.\n",
"Trying country SK.\n"
]
}
],
"source": [
"from entsoe import EntsoePandasClient\n",
"from entsoe.exceptions import NoMatchingDataError\n",
"import pandas as pd\n",
"from pathlib import Path\n",
"import os\n",
"\n",
"Path.cwd()\n",
"os.listdir()\n",
"\n",
"api_key = \"b45ffb86-fea3-49e7-9c01-9ad6429d3ec9\"\n",
"client = EntsoePandasClient(api_key=api_key)\n",
"\n",
"start = pd.Timestamp('20190101', tz='Europe/Brussels')\n",
"end = pd.Timestamp('20200101', tz='Europe/Brussels')\n",
"\n",
"countries = ['AL', 'AT', 'BA', 'BE', 'BG', 'CH', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'ME', 'MK', 'NL', 'NO', 'PL', 'PT', 'RO', 'RS', 'SE', 'SI', 'SK']\n",
"\n",
"for country in countries:\n",
" print(f\"Trying country {country}.\")\n",
"\n",
" country_code = country\n",
"\n",
" try:\n",
" day_ahead_prices_country = client.query_day_ahead_prices(country_code, start=start, end=end)\n",
" except NoMatchingDataError:\n",
" continue\n",
"\n",
" day_ahead_prices_country.to_csv(Path.cwd() / \"..\" / \"..\" / \"price_data\" / f\"{country}.csv\")\n",
"\n",
"#generation = pd.concat(generation, keys=countries, axis=1)\n",
"#client.query_crossborder_flows(country_code_from, country_code_to, start, end)"
]
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"PING google.com (172.217.19.78) 56(84) bytes of data.\n",
"64 bytes from ham02s17-in-f14.1e100.net (172.217.19.78): icmp_seq=1 ttl=118 time=13.2 ms\n",
"64 bytes from ham02s17-in-f14.1e100.net (172.217.19.78): icmp_seq=2 ttl=118 time=12.9 ms\n",
"64 bytes from ham02s17-in-f14.1e100.net (172.217.19.78): icmp_seq=3 ttl=118 time=12.0 ms\n",
"^C\n",
"\n",
"--- google.com ping statistics ---\n",
"3 packets transmitted, 3 received, 0% packet loss, time 2003ms\n",
"rtt min/avg/max/mdev = 12.006/12.685/13.189/0.498 ms\n"
]
}
],
"source": []
}
],
"metadata": {
"kernelspec": {
2023-04-26 17:00:23 +00:00
"display_name": "offwind",
"language": "python",
2023-04-26 17:00:23 +00:00
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
2023-04-26 17:00:23 +00:00
"version": "3.10.10"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}