Sector_coupling/flexibility_analysis/seasonal flexibility.ipynb

1281 lines
2.4 MiB
Plaintext
Raw Normal View History

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"%matplotlib inline\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import os\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"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>AT_total</th>\n",
" <th>BE_total</th>\n",
" <th>BG_total</th>\n",
" <th>CZ_total</th>\n",
" <th>DE_total</th>\n",
" <th>DK_total</th>\n",
" <th>EE_total</th>\n",
" <th>ES_total</th>\n",
" <th>FI_total</th>\n",
" <th>FR_total</th>\n",
" <th>...</th>\n",
" <th>RO_usolar</th>\n",
" <th>ES_usolar</th>\n",
" <th>PT_usolar</th>\n",
" <th>NO_usolar</th>\n",
" <th>SE_usolar</th>\n",
" <th>FI_usolar</th>\n",
" <th>DK_usolar</th>\n",
" <th>IE_usolar</th>\n",
" <th>LU_usolar</th>\n",
" <th>MA_usolar</th>\n",
" </tr>\n",
" <tr>\n",
" <th>UTC</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2018-01-01 00:00:00</th>\n",
" <td>30.907469</td>\n",
" <td>36.313481</td>\n",
" <td>10.400939</td>\n",
" <td>25.566075</td>\n",
" <td>207.377555</td>\n",
" <td>13.906968</td>\n",
" <td>3.620307</td>\n",
" <td>81.854783</td>\n",
" <td>31.926282</td>\n",
" <td>144.456166</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-01-01 01:00:00</th>\n",
" <td>30.303309</td>\n",
" <td>36.349154</td>\n",
" <td>10.302227</td>\n",
" <td>25.010636</td>\n",
" <td>203.273983</td>\n",
" <td>13.646207</td>\n",
" <td>3.632257</td>\n",
" <td>81.714458</td>\n",
" <td>32.017459</td>\n",
" <td>151.752907</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-01-01 02:00:00</th>\n",
" <td>30.230933</td>\n",
" <td>36.615313</td>\n",
" <td>10.251960</td>\n",
" <td>24.856255</td>\n",
" <td>202.762926</td>\n",
" <td>13.538320</td>\n",
" <td>3.478149</td>\n",
" <td>81.976657</td>\n",
" <td>32.155874</td>\n",
" <td>152.133556</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-01-01 03:00:00</th>\n",
" <td>31.586080</td>\n",
" <td>36.834050</td>\n",
" <td>10.387979</td>\n",
" <td>24.824960</td>\n",
" <td>203.086188</td>\n",
" <td>13.540221</td>\n",
" <td>3.557765</td>\n",
" <td>82.551277</td>\n",
" <td>32.435982</td>\n",
" <td>152.316397</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-01-01 04:00:00</th>\n",
" <td>32.051912</td>\n",
" <td>37.147452</td>\n",
" <td>10.753465</td>\n",
" <td>23.648323</td>\n",
" <td>207.157800</td>\n",
" <td>13.774787</td>\n",
" <td>3.669802</td>\n",
" <td>84.717832</td>\n",
" <td>32.798338</td>\n",
" <td>156.382365</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 91 columns</p>\n",
"</div>"
],
"text/plain": [
" AT_total BE_total BG_total CZ_total DE_total \\\n",
"UTC \n",
"2018-01-01 00:00:00 30.907469 36.313481 10.400939 25.566075 207.377555 \n",
"2018-01-01 01:00:00 30.303309 36.349154 10.302227 25.010636 203.273983 \n",
"2018-01-01 02:00:00 30.230933 36.615313 10.251960 24.856255 202.762926 \n",
"2018-01-01 03:00:00 31.586080 36.834050 10.387979 24.824960 203.086188 \n",
"2018-01-01 04:00:00 32.051912 37.147452 10.753465 23.648323 207.157800 \n",
"\n",
" DK_total EE_total ES_total FI_total FR_total \\\n",
"UTC \n",
"2018-01-01 00:00:00 13.906968 3.620307 81.854783 31.926282 144.456166 \n",
"2018-01-01 01:00:00 13.646207 3.632257 81.714458 32.017459 151.752907 \n",
"2018-01-01 02:00:00 13.538320 3.478149 81.976657 32.155874 152.133556 \n",
"2018-01-01 03:00:00 13.540221 3.557765 82.551277 32.435982 152.316397 \n",
"2018-01-01 04:00:00 13.774787 3.669802 84.717832 32.798338 156.382365 \n",
"\n",
" ... RO_usolar ES_usolar PT_usolar NO_usolar \\\n",
"UTC ... \n",
"2018-01-01 00:00:00 ... 0.0 0.0 0.0 0.0 \n",
"2018-01-01 01:00:00 ... 0.0 0.0 0.0 0.0 \n",
"2018-01-01 02:00:00 ... 0.0 0.0 0.0 0.0 \n",
"2018-01-01 03:00:00 ... 0.0 0.0 0.0 0.0 \n",
"2018-01-01 04:00:00 ... 0.0 0.0 0.0 0.0 \n",
"\n",
" SE_usolar FI_usolar DK_usolar IE_usolar LU_usolar \\\n",
"UTC \n",
"2018-01-01 00:00:00 0.0 0.0 0.0 0.0 0.0 \n",
"2018-01-01 01:00:00 0.0 0.0 0.0 0.0 0.0 \n",
"2018-01-01 02:00:00 0.0 0.0 0.0 0.0 0.0 \n",
"2018-01-01 03:00:00 0.0 0.0 0.0 0.0 0.0 \n",
"2018-01-01 04:00:00 0.0 0.0 0.0 0.0 0.0 \n",
"\n",
" MA_usolar \n",
"UTC \n",
"2018-01-01 00:00:00 0.0 \n",
"2018-01-01 01:00:00 0.0 \n",
"2018-01-01 02:00:00 0.0 \n",
"2018-01-01 03:00:00 0.0 \n",
"2018-01-01 04:00:00 0.0 \n",
"\n",
"[5 rows x 91 columns]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_master=pd.read_csv('master_subsector_2018_eurostat_based.csv')\n",
"df_master['UTC']=pd.to_datetime(df_master['UTC'])\n",
"df_master=df_master.set_index('UTC')\n",
"df_master=df_master[[col for col in df_master if any(x in col for x in ['total', 'off', 'on','usolar'])]]\n",
"df_master.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"demand 26 ['AT', 'BE', 'BG', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GR', 'HR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'NL', 'PL', 'PT', 'RO', 'SE', 'SI', 'SK', 'UK']\n",
"offshore 9 ['IT', 'GR', 'NL', 'DE', 'ES', 'FR', 'UK', 'LT', 'DK']\n",
"onshore 26 ['EE', 'IT', 'BE', 'HR', 'RO', 'DE', 'LU', 'FR', 'UK', 'LT', 'HU', 'IE', 'SE', 'DK', 'BG', 'FI', 'LV', 'SK', 'GR', 'CZ', 'ES', 'PT', 'AT', 'NL', 'SI', 'PL']\n",
"solar 26 ['EE', 'IT', 'BE', 'HR', 'RO', 'DE', 'LU', 'FR', 'UK', 'LT', 'HU', 'IE', 'SE', 'DK', 'BG', 'FI', 'LV', 'SK', 'GR', 'CZ', 'ES', 'PT', 'AT', 'NL', 'SI', 'PL']\n"
]
}
],
"source": [
"demand_countries=[col[:2] for col in df_master.columns if 'total' in col]\n",
"off_countries = list(set([col[:2] for col in df_master.columns if 'off' in col]).intersection(set(demand_countries)))\n",
"on_countries = list(set([col[:2] for col in df_master.columns if 'on' in col]).intersection(set(demand_countries)))\n",
"solar_countries=list(set([col[:2] for col in df_master.columns if 'usolar' in col]).intersection(set(demand_countries)))\n",
"print('demand ', len(demand_countries), demand_countries)\n",
"print('offshore ', len(off_countries), off_countries)\n",
"print('onshore ',len(on_countries), on_countries)\n",
"print('solar ',len(solar_countries), solar_countries)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"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>TWh</th>\n",
" </tr>\n",
" <tr>\n",
" <th>country</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>AT</th>\n",
" <td>289.611423</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BE</th>\n",
" <td>371.321477</td>\n",
" </tr>\n",
" <tr>\n",
" <th>BG</th>\n",
" <td>109.006827</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CZ</th>\n",
" <td>270.227702</td>\n",
" </tr>\n",
" <tr>\n",
" <th>DE</th>\n",
" <td>2263.612028</td>\n",
" </tr>\n",
" <tr>\n",
" <th>DK</th>\n",
" <td>151.322582</td>\n",
" </tr>\n",
" <tr>\n",
" <th>EE</th>\n",
" <td>31.733618</td>\n",
" </tr>\n",
" <tr>\n",
" <th>ES</th>\n",
" <td>873.960773</td>\n",
" </tr>\n",
" <tr>\n",
" <th>FI</th>\n",
" <td>277.389456</td>\n",
" </tr>\n",
" <tr>\n",
" <th>FR</th>\n",
" <td>1530.912724</td>\n",
" </tr>\n",
" <tr>\n",
" <th>GR</th>\n",
" <td>160.078809</td>\n",
" </tr>\n",
" <tr>\n",
" <th>HR</th>\n",
" <td>73.842359</td>\n",
" </tr>\n",
" <tr>\n",
" <th>HU</th>\n",
" <td>197.302950</td>\n",
" </tr>\n",
" <tr>\n",
" <th>IE</th>\n",
" <td>125.761005</td>\n",
" </tr>\n",
" <tr>\n",
" <th>IT</th>\n",
" <td>1261.879423</td>\n",
" </tr>\n",
" <tr>\n",
" <th>LT</th>\n",
" <td>43.753223</td>\n",
" </tr>\n",
" <tr>\n",
" <th>LU</th>\n",
" <td>42.863528</td>\n",
" </tr>\n",
" <tr>\n",
" <th>LV</th>\n",
" <td>60.846997</td>\n",
" </tr>\n",
" <tr>\n",
" <th>NL</th>\n",
" <td>472.015180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>PL</th>\n",
" <td>758.512089</td>\n",
" </tr>\n",
" <tr>\n",
" <th>PT</th>\n",
" <td>178.831021</td>\n",
" </tr>\n",
" <tr>\n",
" <th>RO</th>\n",
" <td>260.394537</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SE</th>\n",
" <td>339.569251</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SI</th>\n",
" <td>55.992635</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SK</th>\n",
" <td>111.206060</td>\n",
" </tr>\n",
" <tr>\n",
" <th>UK</th>\n",
" <td>1353.314483</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" TWh\n",
"country \n",
"AT 289.611423\n",
"BE 371.321477\n",
"BG 109.006827\n",
"CZ 270.227702\n",
"DE 2263.612028\n",
"DK 151.322582\n",
"EE 31.733618\n",
"ES 873.960773\n",
"FI 277.389456\n",
"FR 1530.912724\n",
"GR 160.078809\n",
"HR 73.842359\n",
"HU 197.302950\n",
"IE 125.761005\n",
"IT 1261.879423\n",
"LT 43.753223\n",
"LU 42.863528\n",
"LV 60.846997\n",
"NL 472.015180\n",
"PL 758.512089\n",
"PT 178.831021\n",
"RO 260.394537\n",
"SE 339.569251\n",
"SI 55.992635\n",
"SK 111.206060\n",
"UK 1353.314483"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"annual=pd.read_excel('eurostat_annual_18.xlsx', sheet_name='Sheet 1', skiprows=9, usecols=[0,1,3,5,7], index_col=0)\n",
"annual.index.name='country'\n",
"annual_demand=pd.DataFrame(columns=['country', 'TWh'])\n",
"for country in demand_countries:\n",
" _annual_demand=annual.loc[country].sum()*11.63/1000\n",
" annual_demand=annual_demand.append({'country':country, 'TWh':_annual_demand}, ignore_index=True)\n",
"annual_demand=annual_demand.set_index('country')\n",
"annual_demand"
]
},
{
"cell_type": "code",
"execution_count": 5,
"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>EU_demand</th>\n",
" <th>nuclear</th>\n",
" <th>offshore_CF</th>\n",
" <th>onshore_CF</th>\n",
" <th>solar_CF</th>\n",
" <th>offshore</th>\n",
" <th>onshore</th>\n",
" <th>solar</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>8760.000000</td>\n",
" <td>8.760000e+03</td>\n",
" <td>8760.000000</td>\n",
" <td>8760.000000</td>\n",
" <td>8760.000000</td>\n",
" <td>8760.000000</td>\n",
" <td>8760.000000</td>\n",
" <td>8760.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>1331.650932</td>\n",
" <td>1.997476e+02</td>\n",
" <td>0.399863</td>\n",
" <td>0.362706</td>\n",
" <td>0.203929</td>\n",
" <td>377.301097</td>\n",
" <td>377.301097</td>\n",
" <td>377.301097</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>399.254971</td>\n",
" <td>5.684666e-14</td>\n",
" <td>0.179676</td>\n",
" <td>0.140623</td>\n",
" <td>0.249004</td>\n",
" <td>169.538125</td>\n",
" <td>146.281480</td>\n",
" <td>460.697145</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>433.541746</td>\n",
" <td>1.997476e+02</td>\n",
" <td>0.037394</td>\n",
" <td>0.074668</td>\n",
" <td>0.000000</td>\n",
" <td>35.283879</td>\n",
" <td>77.673073</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>1067.356853</td>\n",
" <td>1.997476e+02</td>\n",
" <td>0.260658</td>\n",
" <td>0.257549</td>\n",
" <td>0.000000</td>\n",
" <td>245.951011</td>\n",
" <td>267.912569</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>1342.500462</td>\n",
" <td>1.997476e+02</td>\n",
" <td>0.380575</td>\n",
" <td>0.346048</td>\n",
" <td>0.048864</td>\n",
" <td>359.101997</td>\n",
" <td>359.972949</td>\n",
" <td>90.406982</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>1602.726970</td>\n",
" <td>1.997476e+02</td>\n",
" <td>0.520107</td>\n",
" <td>0.451747</td>\n",
" <td>0.420266</td>\n",
" <td>490.761038</td>\n",
" <td>469.925439</td>\n",
" <td>777.559668</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>2775.065402</td>\n",
" <td>1.997476e+02</td>\n",
" <td>0.929582</td>\n",
" <td>0.847565</td>\n",
" <td>0.812906</td>\n",
" <td>877.131947</td>\n",
" <td>881.671132</td>\n",
" <td>1504.005623</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" EU_demand nuclear offshore_CF onshore_CF solar_CF \\\n",
"count 8760.000000 8.760000e+03 8760.000000 8760.000000 8760.000000 \n",
"mean 1331.650932 1.997476e+02 0.399863 0.362706 0.203929 \n",
"std 399.254971 5.684666e-14 0.179676 0.140623 0.249004 \n",
"min 433.541746 1.997476e+02 0.037394 0.074668 0.000000 \n",
"25% 1067.356853 1.997476e+02 0.260658 0.257549 0.000000 \n",
"50% 1342.500462 1.997476e+02 0.380575 0.346048 0.048864 \n",
"75% 1602.726970 1.997476e+02 0.520107 0.451747 0.420266 \n",
"max 2775.065402 1.997476e+02 0.929582 0.847565 0.812906 \n",
"\n",
" offshore onshore solar \n",
"count 8760.000000 8760.000000 8760.000000 \n",
"mean 377.301097 377.301097 377.301097 \n",
"std 169.538125 146.281480 460.697145 \n",
"min 35.283879 77.673073 0.000000 \n",
"25% 245.951011 267.912569 0.000000 \n",
"50% 359.101997 359.972949 90.406982 \n",
"75% 490.761038 469.925439 777.559668 \n",
"max 877.131947 881.671132 1504.005623 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df=pd.DataFrame(index=df_master.index)\n",
"df.index.name='UTC'\n",
"df['EU_demand']=df_master[[col for col in df_master.columns if 'total' in col]].sum(axis=1) # in GW\n",
"GWh_2018=df['EU_demand'].sum()\n",
"df['nuclear']=np.full((8760,1), GWh_2018*0.15/8760 )\n",
"\n",
"off_base=annual_demand.loc[off_countries, 'TWh'].sum()\n",
"df['offshore_CF']=0\n",
"for country in off_countries:\n",
" df['offshore_CF']=df['offshore_CF']+df_master['%s_off' %country]/100*annual_demand.loc[country, 'TWh']/off_base\n",
"\n",
"df['onshore_CF']=0\n",
"df['solar_CF']=0\n",
"for country in on_countries:\n",
" df['onshore_CF']=df['onshore_CF']+df_master['%s_on' %country]/100*annual_demand.loc[country, 'TWh']*1000/GWh_2018\n",
" df['solar_CF']=df['solar_CF']+df_master['%s_usolar' %country]/100*annual_demand.loc[country, 'TWh']*1000/GWh_2018\n",
"\n",
"IC_offshore=GWh_2018/8760*0.85/3/df['offshore_CF'].mean() # offshore wind installed capacity in GW\n",
"IC_onshore=GWh_2018/8760*0.85/3/df['onshore_CF'].mean() # onshore wind installed capacity in GW\n",
"IC_solar=GWh_2018/8760*0.85/3/df['solar_CF'].mean() # onshore wind installed capacity in GW\n",
"\n",
"\n",
"df['offshore']=df['offshore_CF']*IC_offshore\n",
"df['onshore']=df['onshore_CF']*IC_onshore\n",
"df['solar']=df['solar_CF']*IC_solar\n",
" \n",
" \n",
"df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"solar installed capacity = 1850.1596889099628 GW\n",
"offshore installed capacity = 943.5766806425966 GW\n",
"onshore installed capacity = 1040.2395566214755 GW\n"
]
}
],
"source": [
"print('solar installed capacity = ' , IC_solar , 'GW')\n",
"print('offshore installed capacity = ', IC_offshore, 'GW')\n",
"print('onshore installed capacity = ', IC_onshore, 'GW')"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1331.6509315068515"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['nuclear'].mean()+df['offshore'].mean()+df['onshore'].mean()+df['solar'].mean()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"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>EU_demand</th>\n",
" <th>nuclear</th>\n",
" <th>offshore_CF</th>\n",
" <th>onshore_CF</th>\n",
" <th>solar_CF</th>\n",
" <th>offshore</th>\n",
" <th>onshore</th>\n",
" <th>solar</th>\n",
" </tr>\n",
" <tr>\n",
" <th>UTC</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2018-01-01 00:00:00</th>\n",
" <td>1144.947181</td>\n",
" <td>199.74764</td>\n",
" <td>0.708406</td>\n",
" <td>0.759499</td>\n",
" <td>0.0</td>\n",
" <td>668.435470</td>\n",
" <td>790.060699</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-01-01 01:00:00</th>\n",
" <td>1132.042655</td>\n",
" <td>199.74764</td>\n",
" <td>0.747232</td>\n",
" <td>0.752009</td>\n",
" <td>0.0</td>\n",
" <td>705.071029</td>\n",
" <td>782.269316</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-01-01 02:00:00</th>\n",
" <td>1129.987387</td>\n",
" <td>199.74764</td>\n",
" <td>0.780887</td>\n",
" <td>0.753773</td>\n",
" <td>0.0</td>\n",
" <td>736.827124</td>\n",
" <td>784.104426</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-01-01 03:00:00</th>\n",
" <td>1132.673800</td>\n",
" <td>199.74764</td>\n",
" <td>0.773395</td>\n",
" <td>0.750711</td>\n",
" <td>0.0</td>\n",
" <td>729.757327</td>\n",
" <td>780.919662</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-01-01 04:00:00</th>\n",
" <td>1142.915227</td>\n",
" <td>199.74764</td>\n",
" <td>0.767901</td>\n",
" <td>0.743725</td>\n",
" <td>0.0</td>\n",
" <td>724.573068</td>\n",
" <td>773.652314</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" EU_demand nuclear offshore_CF onshore_CF \\\n",
"UTC \n",
"2018-01-01 00:00:00 1144.947181 199.74764 0.708406 0.759499 \n",
"2018-01-01 01:00:00 1132.042655 199.74764 0.747232 0.752009 \n",
"2018-01-01 02:00:00 1129.987387 199.74764 0.780887 0.753773 \n",
"2018-01-01 03:00:00 1132.673800 199.74764 0.773395 0.750711 \n",
"2018-01-01 04:00:00 1142.915227 199.74764 0.767901 0.743725 \n",
"\n",
" solar_CF offshore onshore solar \n",
"UTC \n",
"2018-01-01 00:00:00 0.0 668.435470 790.060699 0.0 \n",
"2018-01-01 01:00:00 0.0 705.071029 782.269316 0.0 \n",
"2018-01-01 02:00:00 0.0 736.827124 784.104426 0.0 \n",
"2018-01-01 03:00:00 0.0 729.757327 780.919662 0.0 \n",
"2018-01-01 04:00:00 0.0 724.573068 773.652314 0.0 "
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.to_csv('2018_EU_hourly_generation_demand.csv')\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 19,
"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>EU_demand</th>\n",
" <th>nuclear</th>\n",
" <th>offshore_CF</th>\n",
" <th>onshore_CF</th>\n",
" <th>solar_CF</th>\n",
" <th>offshore</th>\n",
" <th>onshore</th>\n",
" <th>solar</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>8760.000000</td>\n",
" <td>8.760000e+03</td>\n",
" <td>8760.000000</td>\n",
" <td>8760.000000</td>\n",
" <td>8760.000000</td>\n",
" <td>8760.000000</td>\n",
" <td>8760.000000</td>\n",
" <td>8760.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>1331.650932</td>\n",
" <td>1.997476e+02</td>\n",
" <td>0.399863</td>\n",
" <td>0.362706</td>\n",
" <td>0.203929</td>\n",
" <td>377.301097</td>\n",
" <td>377.301097</td>\n",
" <td>377.301097</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>399.254971</td>\n",
" <td>5.684666e-14</td>\n",
" <td>0.179676</td>\n",
" <td>0.140623</td>\n",
" <td>0.249004</td>\n",
" <td>169.538125</td>\n",
" <td>146.281480</td>\n",
" <td>460.697145</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>433.541746</td>\n",
" <td>1.997476e+02</td>\n",
" <td>0.037394</td>\n",
" <td>0.074668</td>\n",
" <td>0.000000</td>\n",
" <td>35.283879</td>\n",
" <td>77.673073</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>1067.356853</td>\n",
" <td>1.997476e+02</td>\n",
" <td>0.260658</td>\n",
" <td>0.257549</td>\n",
" <td>0.000000</td>\n",
" <td>245.951011</td>\n",
" <td>267.912569</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>1342.500462</td>\n",
" <td>1.997476e+02</td>\n",
" <td>0.380575</td>\n",
" <td>0.346048</td>\n",
" <td>0.048864</td>\n",
" <td>359.101997</td>\n",
" <td>359.972949</td>\n",
" <td>90.406982</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>1602.726970</td>\n",
" <td>1.997476e+02</td>\n",
" <td>0.520107</td>\n",
" <td>0.451747</td>\n",
" <td>0.420266</td>\n",
" <td>490.761038</td>\n",
" <td>469.925439</td>\n",
" <td>777.559668</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>2775.065402</td>\n",
" <td>1.997476e+02</td>\n",
" <td>0.929582</td>\n",
" <td>0.847565</td>\n",
" <td>0.812906</td>\n",
" <td>877.131947</td>\n",
" <td>881.671132</td>\n",
" <td>1504.005623</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" EU_demand nuclear offshore_CF onshore_CF solar_CF \\\n",
"count 8760.000000 8.760000e+03 8760.000000 8760.000000 8760.000000 \n",
"mean 1331.650932 1.997476e+02 0.399863 0.362706 0.203929 \n",
"std 399.254971 5.684666e-14 0.179676 0.140623 0.249004 \n",
"min 433.541746 1.997476e+02 0.037394 0.074668 0.000000 \n",
"25% 1067.356853 1.997476e+02 0.260658 0.257549 0.000000 \n",
"50% 1342.500462 1.997476e+02 0.380575 0.346048 0.048864 \n",
"75% 1602.726970 1.997476e+02 0.520107 0.451747 0.420266 \n",
"max 2775.065402 1.997476e+02 0.929582 0.847565 0.812906 \n",
"\n",
" offshore onshore solar \n",
"count 8760.000000 8760.000000 8760.000000 \n",
"mean 377.301097 377.301097 377.301097 \n",
"std 169.538125 146.281480 460.697145 \n",
"min 35.283879 77.673073 0.000000 \n",
"25% 245.951011 267.912569 0.000000 \n",
"50% 359.101997 359.972949 90.406982 \n",
"75% 490.761038 469.925439 777.559668 \n",
"max 877.131947 881.671132 1504.005623 "
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 2880x1080 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(40,15))\n",
"\n",
"plt.plot(df['EU_demand'], color='grey', label='demand')\n",
"plt.stackplot(df.index , df[['nuclear', 'offshore', 'onshore', 'solar']].values.T, labels=['nuclear', 'offshore', 'onshore', 'solar'])\n",
"\n",
"\n",
"plt.xlabel('date', size=28)\n",
"plt.ylabel('GWh', size=28)\n",
"plt.title('EU 2018 hourly generation and demand', size=36, pad=20)\n",
"plt.xlim(df.index[0], df.index[-1])\n",
"plt.xticks(size=24)\n",
"plt.yticks(size=24)\n",
"plt.legend(prop={'size': 22})\n",
"\n",
"plt.savefig('generation_demand.png')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 2880x1080 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(40,15))\n",
"\n",
"plt.stackplot(pd.date_range(start='2018-01-01', end='2018-12-31', freq='1D') , (df[['nuclear', 'offshore', 'onshore', 'solar']].groupby(df.index.date).mean()).values.T, labels=['nuclear', 'offshore', 'onshore', 'solar'])\n",
"plt.plot(df['EU_demand'].groupby(df.index.date).mean(), color='grey', label='demand', linewidth=3)\n",
"\n",
"\n",
"plt.xlabel('date', size=28)\n",
"plt.ylabel('GWh/h', size=28)\n",
"plt.title('EU 2018 daily average generation and demand', size=36, pad=20)\n",
"plt.xlim(df.index[0], df.index[-1])\n",
"plt.xticks(size=24)\n",
"plt.yticks(size=24)\n",
"plt.legend(prop={'size': 22})\n",
"\n",
"plt.savefig('generation_demand_daily_average.png')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"df['residual_demand']=df['EU_demand']-df['nuclear']-df['offshore']-df['onshore']-df['solar']"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1440x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(20,10))\n",
"\n",
"plt.plot(df['residual_demand'])\n",
"plt.hlines(y=0, xmax=df.index[-1], xmin=df.index[0])\n",
"plt.xlim(df.index[0], df.index[-1])\n",
"plt.xlabel('date', size=16)\n",
"plt.ylabel('GWh' , size=16)\n",
"plt.xticks(size=16)\n",
"plt.yticks(size=16)\n",
"\n",
"plt.title('EU 2018 hourly residual demand', size=20, pad=10)\n",
"\n",
"\n",
"plt.savefig('residual_demand.png')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAACSoAAAOrCAYAAABaiio+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nOzdeZwU5bX/8e+ZGRhAdgEVXMAECRp3CEo07kajxjXRRGNwN4smGnLRaxI1elU0Gpe43ESNJmridQuJO4ioEY0i4k9Ro8gihEVkZ1gGhvP746lmqnt6qZ7ppgf4vF+velld/dRTp2vrljpzHnN3AQAAAAAAAAAAAAAAAEA5VVU6AAAAAAAAAAAAAAAAAACbPhKVAAAAAAAAAAAAAAAAAJQdiUoAAAAAAAAAAAAAAAAAyo5EJQAAAAAAAAAAAAAAAABlR6ISAAAAAAAAAAAAAAAAgLIjUQkAAAAAAAAAAAAAAABA2ZGoBAAAAADYYMzsfDPzaPqw0vGg9TGzdrFzxM1sn0rHtLEys+ti+/HZSscDlJKZzY2d36dUOh6UV2s53txXNz9m9nrsmF9S6XgAAACATQGJSgAAAAA2OWZ2RUaiQ3Omvln67ZvR5opmxHZfvI8SfNxUv9Nb8Fn3KFUcGxsz62Fm3zKz35nZy2Y2x8xWm9kKM/uPmY2Ozqd+LdzOoWb2RzP7wMyWmNkyM/vQzB4ws6PMzIrsr8rMvmRmp5rZb6PYl5UywcfMhpjZLdEDus+i/VJnZrPM7Dkz+4WZbdeSbQAAAAAAAADYvNRUOgAAAAAAADY0M/uapCskfU1SdY5m7SX1lnSopF+a2R8lXezuS4vYztaS7pZ0VJa3B0TTqZLGmtkwd5+ZoM8LJP2PpE5J4yhGlHz0B0lfz/J2W0kdJPWRdLiky83st5J+4e715YgHwKbLzNpJWhlbtK+7v16peAAAAAAAQPmRqAQAAABgc/BcM9ZZWbhJqzVb0rtFtE+ceLMJ+ZqkgzKWNUj6RNK86HV/SVtH81WSzpI0xMwOcvfPC23AzLpLGqeQjJSyQtIHkuolDZTUNVp+sKRXzGwfd59boOs+Kl+S0g6SXpEUr5Tkkj5SOK/aSNpJUq/ovRpJP5e0s5kd6+4N5YgLAAAAAAAAwKaBRCUAAAAAmzx3P6LSMWxgo919WKWD2EisljRK0p8lvZxZLcnM9pd0m6Tdo0VflvSQQjWhQv6i9CSlWyRd4e6Lo75rJf1A0g0K/3++g6S/mdm+7p5kWECX9LGkt6KpVqHSUkvco/Qkpb9KusTdZ8QbmdnBku5Q4+c7StJPJN3Uwu0DQCLuvnXhVgAAAAAAoLWpqnQAAAAAAABUwHJJv5G0vbuf7O5PZhvSzd1fkTRU0puxxYeZ2WH5Ojezo5WezHSTu/80laQU9b3a3W+WdHas3RBJ3ykQ++OSDpTUxd0HuPt33f1GSRMLrJeXme0q6ZDYokfc/TuZSUpR7GMl7a/G6lOSdGFLtg8AAAAAAABg00eiEgAAAABgs+PuN7v7z939swRtV0g6L2PxSQVWuyw2PzvjdWb/90saG1v0iwLxvOHuL7n7sgIxFOuAjNdXFYhjvkJVpZQdzGy7XO0BAAAAAAAAgEQlAAAAAEBBZradmY0wsxfM7FMzW2lmS83sIzO738yOaWH/XzKzG8zs/5nZQjOri/r+XzMbXKrP0Vzu/rakmbFFA3O1NbNtFSojpdzt7qsKbOL2eN9mtkvxUbZYr9j8OkmTE6zz/zJe9yhdOOnMrI2ZnWJmT5nZdDNbbWafm9l4M7vUzDo1o889o/Nuopl9Zmb1ZjbPzCaY2XVRlakk/VxnZh5NzyZc54jYOjnPj1x9m9neZvZbM3vHzOab2bp8/eTo++5Y35nHspj43cy+VMz6Bfrex8x+H90D6sxskZm9Z2a3xI+Jmb0e2/4lCfs2M/ummf3BzCZH59BqM5tjZq+Y2S/MbJuEfc2Nbf+UWP9Hm9mjZvZJdK9caGZvmdn/mFmvQv1m2U4bM/uumT1gZv+O9scqM5tlZqPN7GIz65Kgn3YZx2yfaHlHMzvLzJ4xs6lRzFn3qZn1NrMzzOyPZvZmtP/qzWy5mc0wsyejeLoViOV8M3NJKzPeei0jxtT0YZY+muz/BPugt5ldYmbjov23Ktqf70fnXKKhYvPsy5LfpxLGUxtdk9eZ2RgL39N11nhPe8PMbjKzPYvoM+v1ZWZfs/C9/+9oG0ui6/NmM+vXjNj3j86nKWa2Itpfb0fXy47F9tdcZra1mf3Kwv1/QfTZPjazvyY9Lwr0P8jMRkbXzZzYuTGpmGMTxZM6LnfFlu8X7ccPzWxZFP8kM7vczDpn6afazE4zs6eja6newnfJC2Y2zMwsYTzVZnaAmV0Zu4csN7M1UX+TzOwOMzuwiH2V6zPuaWa3R9fr0mg7H0XX7m5J+4/1t7uZ/S7aZ8stx3cNAAAAgNKrqXQAAAAAAIDWy8zaSrpaYViv2oy320nqJKm/pNPN7F+SvuPu04rcxkWSRkpqk/FW/2g628xuk/Qzd28o/lOUzAJJqYpBTR76xXxTUvwB35MJ+n5O0lo1/n/6N5UsUaiU4hWaqhSOx+oC67TLeL2opBFFzOwLkv4iKTNpbUtJ+0bTBWZ2pLu/k6C/TpLulPRdpR8rKSRs9ZK0t6Sfm9l9ki6IKmtVXHRNXifpp2oae7Ful3RWNL+rmQ119/EJ1z03Nv+SuzdJJCmWmbWR9DtJ5yj9s3WQ1FXSLpJ+bGZXKNyXiu1/X4UqYHtkeXvraNpP0qVmdrm7/6bI/ntJul9SZlJDO0ndJO2lEP+J7j4mYZ9HS7pFUraEjT7RdKiky8zsJ+7+QJExf0Xh2iqYEGJmD0o6Rdn/8LGNpC0kbS/pKElXmNlF7n5PMfGUS5R0calCdbsOGW/XKpxfAyWdY2avSBrm7lOL3EZJ71NFbPdESfdIypWslrqnDZZ0kZn9n6Sz3H15kdvpqHDPOD3L27tE0/lmdo67/zlBf7UK9+EzMt5qr7DP9pB0sZld6O5/KCbWYpnZtyXdpXCdxn0xmk42s8clndmMvnsr7Lfjsry9ZTTtLumnZvZnSee7e2YCX77+2yncI87N8vbu0TTMzA5w90+jdfpKelThey6uh6SDo+lUMzs233efmQ2V9ITSE50z++sRxfADM3tR4XfivBztc22njaT/kTRcTb/3Ur8VzzKzy9z9ugT9maRrJP1cUnXG2y3+rgEAAABQGIlKAAAAAICsor/AHyXpwIy3pkj6j8KD6S9J6h4tHyLpdTM70N0/SLiNCyXdFL1cK+ldSUsUHnanHpxXSfqJpC3N7HR392Z9oBaIHmrtEFuUb8i4eFWElZLeLtS/u9eZ2SRJg7L0saG8nvH6QIUEqnwOis1/6u7TSxlQpLekx6L/StJ0STMUkgt2U2PSwTaSRpvZzu7+ea7OzGxLSaOVvo9d0gcKx7WXQsKCKZx7ZypUuTrC3ZeW6DO1RCqRR5JWKSS0LVPYP9sX05G7vx0lGKYqgJ0nqWCikoWKQ/EqanflapuUmVVJeljS8RlvTVM43h0lfVkh6efXKjJJy8y+JenPSk+4XKZw3JdL2krSzlG/HSTdYGbbu/uFCTfRSdIYSakqHLMlfaJwDu2i8PBbCkmO/zCzPdz93wVi/qmkG5WeGLRQ0kcK95ZtFR7QS+E+/Gcz28rdb0wY8wBJt0WxS+Ha+lQhUWSnLO13j8XiUds5CvuvY7RO6vugk6S7zayzu/82S1+fKtxfqiQdFlv+usJ3QKaZWZYlEt2//yjp+1limKbGcyt1buwvabyZHebu7ybcTEnvU0Xqp/QkpSUK39NLFP7tt7ekL6jxmvm2pH5mtp+71yfcRo1CQsqh0esFCufhGoXfAalElVpJ95vZTHcfl6szM6tRSJQ5OuOtjxV+X3RX4/X+eyuyWlwxzOy7CveGzOvsg2jZQIXr9wSF83pSEX3vIukZNSY5S+G3zvuSPle4H+yqsN9MIQlsgJkdXERy7H2STo7m5yscF1c471JJ1X0lvRBVCeom6eVYTKl
"text/plain": [
"<Figure size 2880x1080 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(40,15))\n",
"\n",
"plt.stackplot([idx for idx in df.index if idx.month==2] , df.loc[df.index.month==2, ['nuclear', 'offshore', 'onshore', 'solar']].values.T, labels=['nuclear', 'offshore', 'onshore', 'solar'])\n",
"plt.plot(df.loc[df.index.month==2, 'EU_demand'], color='grey', label='demand', linewidth=3)\n",
"\n",
"\n",
"plt.xlabel('date', size=28)\n",
"plt.ylabel('GWh', size=28)\n",
"plt.title('EU Feb 2018 hourly generation and demand', size=36, pad=20)\n",
"\n",
"plt.xticks(size=24)\n",
"plt.yticks(size=24)\n",
"plt.legend(prop={'size': 24})\n",
"\n",
"plt.xlim(pd.to_datetime('2018-02-01 00:00:00'), pd.to_datetime('2018-02-28 23:00:00'))\n",
"\n",
"\n",
"plt.savefig('generation_demand_winter.png')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 2880x1080 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(40,15))\n",
"\n",
"plt.stackplot(pd.date_range(start='2018-02-27 00:00:00' , end='2018-03-01 23:00:00', freq='60min'), df.loc[(df.index>=pd.to_datetime('2018-02-27 00:00:00')) & (df.index<=pd.to_datetime('2018-03-01 23:00:00')), ['nuclear', 'offshore', 'onshore', 'solar']].values.T, labels=['nuclear', 'offshore', 'onshore', 'solar'])\n",
"plt.plot(df.loc[(df.index>=pd.to_datetime('2018-02-27 00:00:00')) & (df.index<=pd.to_datetime('2018-03-01 23:00:00')) , 'EU_demand'], color='grey', label='demand', linewidth=3)\n",
"\n",
"\n",
"plt.xlabel('date', size=28)\n",
"plt.ylabel('GWh', size=28)\n",
"plt.title('EU 2018 hourly generation and demand on peak days', size=36, pad=20)\n",
"\n",
"plt.xticks(size=24)\n",
"plt.yticks(size=24)\n",
"plt.legend(prop={'size': 24})\n",
"\n",
"plt.xlim(pd.to_datetime('2018-02-27 00:00:00'), pd.to_datetime('2018-03-01 23:00:00'))\n",
"\n",
"\n",
"plt.savefig('generation_demand_peak.png')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 2880x1080 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(40,15))\n",
"\n",
"plt.stackplot(pd.date_range(start='2018-06-15 00:00:00' , end='2018-07-15 23:00:00', freq='60min'), df.loc[(df.index>=pd.to_datetime('2018-06-15 00:00:00')) & (df.index<=pd.to_datetime('2018-07-15 23:00:00')), ['nuclear', 'offshore', 'onshore', 'solar']].values.T, labels=['nuclear', 'offshore', 'onshore', 'solar'])\n",
"plt.plot(df.loc[(df.index>=pd.to_datetime('2018-06-15 00:00:00')) & (df.index<=pd.to_datetime('2018-07-15 23:00:00')) , 'EU_demand'], color='grey', label='demand', linewidth=3)\n",
"\n",
"\n",
"plt.xlabel('date', size=28)\n",
"plt.ylabel('GWh', size=28)\n",
"plt.title('EU summer 2018 hourly generation and demand', size=36, pad=20)\n",
"\n",
"plt.xticks(size=24)\n",
"plt.yticks(size=24)\n",
"plt.legend(prop={'size': 24})\n",
"\n",
"plt.xlim(pd.to_datetime('2018-06-15 00:00:00'), pd.to_datetime('2018-07-15 23:00:00'))\n",
"\n",
"\n",
"plt.savefig('generation_demand_summer.png')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"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",
"version": "3.8.2"
}
},
"nbformat": 4,
"nbformat_minor": 4
}