simple-pv-simulator/main.ipynb

1459 lines
231 KiB
Plaintext
Raw Normal View History

2024-05-04 09:59:27 +02:00
{
"cells": [
{
"cell_type": "code",
2024-05-07 20:20:09 +02:00
"execution_count": 2,
2024-05-06 19:23:42 +02:00
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import glob\n",
"import shutil\n",
"\n",
"def clear_folder_make_ess_pv(folder_path):\n",
2024-05-07 20:20:09 +02:00
" if os.path.isdir(folder_path):\n",
" shutil.rmtree(folder_path)\n",
2024-05-06 19:23:42 +02:00
" os.makedirs(folder_path)\n",
" os.makedirs(os.path.join(folder_path,'ess'))\n",
" os.makedirs(os.path.join(folder_path,'pv'))\n",
"\n",
"folder_path = 'plots'\n",
"clear_folder_make_ess_pv(folder_path)"
]
},
{
"cell_type": "code",
2024-05-07 20:20:09 +02:00
"execution_count": 3,
2024-05-04 09:59:27 +02:00
"metadata": {},
2024-05-04 16:35:55 +02:00
"outputs": [],
2024-05-04 09:59:27 +02:00
"source": [
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import numpy as np\n",
"import pandas as pd\n",
"from EnergySystem import EnergySystem\n",
2024-05-07 20:20:09 +02:00
"from config import pv_config, grid_config, ess_config\n"
2024-05-06 19:23:42 +02:00
]
},
{
"cell_type": "code",
2024-05-07 20:20:09 +02:00
"execution_count": 13,
2024-05-06 19:23:42 +02:00
"metadata": {},
"outputs": [],
"source": [
2024-05-07 10:27:45 +02:00
"import json\n",
"\n",
"with open('config.json', 'r') as f:\n",
" js_data = json.load(f)\n",
"\n",
2024-05-04 09:59:27 +02:00
"data = pd.read_csv('combined_data.csv')\n",
2024-05-07 10:27:45 +02:00
"time_interval = js_data[\"time_interval\"][\"numerator\"] / js_data[\"time_interval\"][\"denominator\"]\n",
"\n",
"pv_loss = js_data[\"pv\"][\"loss\"]\n",
"pv_cost_per_kW = js_data[\"pv\"][\"cost_per_kW\"]\n",
"pv_lifetime = js_data[\"pv\"][\"lifetime\"]\n",
2024-05-04 09:59:27 +02:00
"\n",
2024-05-07 10:27:45 +02:00
"ess_loss = js_data[\"ess\"][\"loss\"]\n",
"ess_cost_per_kW = js_data[\"ess\"][\"cost_per_kW\"]\n",
"ess_lifetime = js_data[\"ess\"][\"lifetime\"]\n",
2024-05-04 09:59:27 +02:00
"\n",
2024-05-07 10:27:45 +02:00
"grid_loss = js_data[\"grid\"][\"loss\"]\n",
"sell_price = js_data[\"grid\"][\"sell_price\"] #kWh\n",
"grid_capacity = js_data[\"grid\"][\"capacity\"] #kWh\n",
2024-05-04 09:59:27 +02:00
"\n",
2024-05-07 10:27:45 +02:00
"pv_begin = js_data[\"pv_capacities\"][\"begin\"]\n",
"pv_end = js_data[\"pv_capacities\"][\"end\"]\n",
"pv_groups = js_data[\"pv_capacities\"][\"groups\"]\n",
2024-05-04 09:59:27 +02:00
"\n",
2024-05-07 10:27:45 +02:00
"ess_begin = js_data[\"ess_capacities\"][\"begin\"]\n",
"ess_end = js_data[\"ess_capacities\"][\"end\"]\n",
"ess_groups = js_data[\"ess_capacities\"][\"groups\"]\n",
2024-05-07 20:20:09 +02:00
"\n",
"annot_unmet = js_data[\"annotated\"][\"unmet_prob\"]\n",
"annot_benefit = js_data[\"annotated\"][\"benefit\"]\n",
"annot_cost = js_data[\"annotated\"][\"cost\"]\n",
"\n",
"title_unmet = js_data[\"plot_title\"][\"unmet_prob\"]\n",
"title_cost = js_data[\"plot_title\"][\"cost\"]\n",
"title_benefit = js_data[\"plot_title\"][\"benefit\"]\n",
"\n",
"figure_size = (js_data[\"figure_size\"][\"length\"], js_data[\"figure_size\"][\"height\"])\n",
"\n",
2024-05-07 10:27:45 +02:00
"pv_capacities = np.linspace(pv_begin, pv_end, pv_groups)\n",
"ess_capacities = np.linspace(ess_begin, ess_end, ess_groups)\n",
2024-05-06 19:23:42 +02:00
"results = pd.DataFrame(index=pv_capacities, columns= ess_capacities)\n",
"affords = pd.DataFrame(index=pv_capacities, columns= ess_capacities)\n",
2024-05-07 10:27:45 +02:00
"costs = pd.DataFrame(index=pv_capacities, columns= ess_capacities)\n",
2024-05-06 19:23:42 +02:00
"overload_cnt = pd.DataFrame(index=pv_capacities, columns= ess_capacities)\n"
]
},
{
"cell_type": "code",
2024-05-07 20:20:09 +02:00
"execution_count": 5,
2024-05-06 19:23:42 +02:00
"metadata": {},
"outputs": [],
"source": [
"hour_demand = []\n",
"for index, row in data.iterrows():\n",
" time = row['time']\n",
" demand = row['demand']\n",
" if time.endswith('00'):\n",
" hour_demand.append(demand)\n",
"plt.figure(figsize=(10,8))\n",
"plt.plot(hour_demand)\n",
"plt.ylabel('Demand Power / kW')\n",
"plt.savefig('plots/demand.png')\n",
"plt.close()"
]
},
{
"cell_type": "code",
2024-05-07 20:20:09 +02:00
"execution_count": 6,
2024-05-06 19:23:42 +02:00
"metadata": {},
"outputs": [],
"source": [
"def cal_profit(es: EnergySystem, saved_money):\n",
" profit = saved_money - es.ess.get_cost_per_year() - es.pv.get_cost_per_year()\n",
" return profit"
]
},
{
"cell_type": "code",
2024-05-07 20:20:09 +02:00
"execution_count": 7,
2024-05-06 19:23:42 +02:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2024-05-07 20:20:09 +02:00
"pv_capacity:5000.0\n",
"ess_capacity:5000.0\n",
"ess_capacity:27500.0\n",
2024-05-07 10:27:45 +02:00
"ess_capacity:50000.0\n",
2024-05-07 20:20:09 +02:00
"pv_capacity:27500.0\n",
"ess_capacity:5000.0\n",
"ess_capacity:27500.0\n",
2024-05-07 10:27:45 +02:00
"ess_capacity:50000.0\n",
"pv_capacity:50000.0\n",
2024-05-07 20:20:09 +02:00
"ess_capacity:5000.0\n",
"ess_capacity:27500.0\n",
"ess_capacity:50000.0\n"
2024-05-06 19:23:42 +02:00
]
}
],
"source": [
2024-05-04 09:59:27 +02:00
"for pv_capacity in pv_capacities:\n",
" print(f\"pv_capacity:{pv_capacity}\")\n",
" for ess_capacity in ess_capacities:\n",
" print(f\"ess_capacity:{ess_capacity}\")\n",
" pv = pv_config(capacity=pv_capacity, \n",
" cost_per_kW=pv_cost_per_kW,\n",
" lifetime=pv_lifetime, \n",
" loss=pv_loss)\n",
" ess = ess_config(capacity=ess_capacity, \n",
" cost_per_kW=ess_cost_per_kW, \n",
" lifetime=ess_lifetime, \n",
" loss=ess_loss,\n",
" charge_power=ess_capacity,\n",
" discharge_power=ess_capacity)\n",
" grid = grid_config(capacity=grid_capacity, \n",
" grid_loss=grid_loss,\n",
" sell_price= sell_price)\n",
" energySystem = EnergySystem(pv_type=pv, \n",
" ess_type=ess, \n",
" grid_type= grid)\n",
" benefit = energySystem.simulate(data, time_interval)\n",
2024-05-06 19:23:42 +02:00
" results.loc[pv_capacity,ess_capacity] = cal_profit(energySystem, benefit)\n",
" affords.loc[pv_capacity,ess_capacity] = energySystem.afford\n",
" overload_cnt.loc[pv_capacity,ess_capacity] = energySystem.overload_cnt\n",
2024-05-07 10:27:45 +02:00
" costs.loc[pv_capacity,ess_capacity] = energySystem.ess.capacity * energySystem.ess.cost_per_kW + energySystem.pv.capacity * energySystem.pv.cost_per_kW\n",
2024-05-06 19:23:42 +02:00
" pv_generated = energySystem.day_generated\n",
" ess_generated = energySystem.hour_stored\n",
" ess_generated_2 = energySystem.hour_stored_2\n",
" plt.figure(figsize=(10,8));\n",
" plt.plot(ess_generated)\n",
" plt.xlabel('day #')\n",
" plt.ylabel('SoC %')\n",
" plt.title(f'14:00 ESS SoC \\n PV cap:{pv_capacity}, ESS cap:{ess_capacity}')\n",
" plt.savefig(f'plots/ess/1400-{pv_capacity}-{ess_capacity}.png')\n",
" plt.close()\n",
" plt.figure(figsize=(10,8));\n",
" plt.plot(ess_generated_2)\n",
2024-05-04 16:35:55 +02:00
" plt.xlabel('day #')\n",
2024-05-06 19:23:42 +02:00
" plt.ylabel('SoC%')\n",
" plt.title(f'08:00 ESS SoC \\n PV cap:{pv_capacity}, ESS cap:{ess_capacity}')\n",
" plt.savefig(f'plots/ess/0800-{pv_capacity}-{ess_capacity}.png')\n",
" plt.close()\n",
2024-05-07 20:20:09 +02:00
" # print(energySystem.unmet)\n",
2024-05-06 19:23:42 +02:00
" spring_week_start = energySystem.season_start\n",
" spring_week_end = spring_week_start + energySystem.week_length\n",
2024-05-07 10:27:45 +02:00
" # summer_week_start = energySystem.season_start + 1 * energySystem.season_step\n",
" # summer_week_end = summer_week_start + energySystem.week_length\n",
" # autumn_week_start = energySystem.season_start + 2 * energySystem.season_step\n",
" # autumn_week_end = autumn_week_start + energySystem.week_length\n",
" # winter_week_start = energySystem.season_start + 3 * energySystem.season_step\n",
" # winter_week_end = winter_week_start+ energySystem.week_length\n",
2024-05-06 19:23:42 +02:00
"\n",
" spring_consume_data = []\n",
2024-05-07 10:27:45 +02:00
" # summer_consume_data = []\n",
" # autumn_consume_data = []\n",
" # winter_consume_data = []\n",
2024-05-06 19:23:42 +02:00
" for index, row in data.iterrows():\n",
" if index in range(spring_week_start, spring_week_end):\n",
" spring_consume_data.append(row['demand'])\n",
2024-05-07 10:27:45 +02:00
" # elif index in range(summer_week_start, summer_week_end):\n",
" # summer_consume_data.append(row['demand'])\n",
" # elif index in range(autumn_week_start, autumn_week_end):\n",
" # autumn_consume_data.append(row['demand'])\n",
" # elif index in range(winter_week_start, winter_week_end):\n",
" # winter_consume_data.append(row['demand'])\n",
2024-05-06 19:23:42 +02:00
"\n",
" spring_week_time = list(range(spring_week_start, spring_week_end))\n",
2024-05-07 10:27:45 +02:00
" # summer_week_time = list(range(summer_week_start, summer_week_end))\n",
" # autumn_week_time = list(range(autumn_week_start, autumn_week_end))\n",
" # winter_week_time = list(range(winter_week_start, winter_week_end))\n",
2024-05-06 19:23:42 +02:00
"\n",
" spring_pv_generated = energySystem.spring_week_gen\n",
2024-05-07 10:27:45 +02:00
" # summer_pv_generated = energySystem.summer_week_gen\n",
" # autumn_pv_generated = energySystem.autumn_week_gen\n",
" # winter_pv_generated = energySystem.winter_week_gen\n",
"\n",
" # spring_soc = energySystem.spring_week_soc\n",
" # summer_soc = energySystem.summer_week_soc\n",
" # autumn_soc = energySystem.autumn_week_soc\n",
" # winter_soc = energySystem.winter_week_soc\n",
"\n",
"\n",
" # fig, ax1 = plt.subplots()\n",
2024-05-06 19:23:42 +02:00
"\n",
" plt.plot(spring_week_time, spring_pv_generated, label = 'pv generation')\n",
" plt.plot(spring_week_time, spring_consume_data, label = 'factory consume')\n",
" plt.ylabel('Power / kW')\n",
" plt.xlabel('15 min #')\n",
" plt.title(f'ess: {energySystem.ess.capacity/1000 } MWh pv: {energySystem.pv.capacity/1000 } MW spring week generate condition')\n",
" plt.legend()\n",
" plt.savefig(f'plots/{energySystem.ess.capacity}-{energySystem.pv.capacity}-spring.png')\n",
" plt.close()\n",
"\n",
2024-05-07 10:27:45 +02:00
" # plt.plot(summer_week_time, summer_pv_generated, label = 'pv generation')\n",
" # plt.plot(summer_week_time, summer_consume_data, label = 'factory consume')\n",
" # plt.ylabel('Power / kW')\n",
" # plt.xlabel('15 min #')\n",
" # plt.title(f'ess: {energySystem.ess.capacity/1000 } MWh pv: {energySystem.pv.capacity/1000 } MW summer week generate condition')\n",
" # plt.legend()\n",
" # plt.savefig(f'plots/{energySystem.ess.capacity}-{energySystem.pv.capacity}-summer.png')\n",
" # plt.close()\n",
2024-05-06 19:23:42 +02:00
"\n",
2024-05-07 10:27:45 +02:00
" # plt.plot(autumn_week_time, autumn_pv_generated, label = 'pv generation')\n",
" # plt.plot(autumn_week_time, autumn_consume_data, label = 'factory consume')\n",
" # plt.ylabel('Power / kW')\n",
" # plt.xlabel('15 min #')\n",
" # plt.title(f'ess: {energySystem.ess.capacity/1000 } MWh pv: {energySystem.pv.capacity/1000 } MW autumn week generate condition')\n",
" # plt.legend()\n",
" # plt.savefig(f'plots/{energySystem.ess.capacity}-{energySystem.pv.capacity}-autumn.png')\n",
" # plt.close()\n",
2024-05-06 19:23:42 +02:00
"\n",
2024-05-07 10:27:45 +02:00
" # plt.plot(winter_week_time, winter_pv_generated, label = 'pv generation')\n",
" # plt.plot(winter_week_time, winter_consume_data, label = 'factory consume')\n",
" # plt.ylabel('Power / kW')\n",
" # plt.xlabel('15 min #')\n",
" # plt.title(f'ess: {energySystem.ess.capacity/1000 } MWh pv: {energySystem.pv.capacity/1000 } MW winter week generate condition')\n",
" # plt.legend()\n",
" # plt.savefig(f'plots/{energySystem.ess.capacity}-{energySystem.pv.capacity}-winter.png')\n",
" # plt.close()\n",
2024-05-06 19:23:42 +02:00
"\n",
" plt.figure();\n",
" plt.plot(pv_generated)\n",
" plt.xlabel('day #')\n",
" plt.ylabel('Electricity kWh')\n",
" plt.title(f'PV generated pv cap:{pv_capacity}, ess cap:{ess_capacity}')\n",
" plt.savefig(f'plots/pv/{pv_capacity}-{ess_capacity}.png')\n",
" plt.close()\n",
"\n",
"\n",
2024-05-04 16:35:55 +02:00
" # plt.show()\n",
"\n",
2024-05-06 19:23:42 +02:00
"\n",
2024-05-04 16:35:55 +02:00
" \n",
"\n",
"# results = results.astype(float)\n",
2024-05-04 09:59:27 +02:00
"\n",
"\n",
"# pv = pv_config(capacity=100000,cost_per_kW=200,lifetime=25,loss=0.95)\n",
"# ess = ess_config(capacity=100000,cost_per_kW=300,lifetime=25,loss=0.95,charge_power=100000,discharge_power=100000)\n",
"# grid = grid_config(price_schedule=price_schedule, capacity=5000, grid_loss=0.95, sell_price=0.4)\n",
"# grid = grid_config(capacity=50000, grid_loss=0.95, sell_price=0.4)\n",
"\n",
"\n",
" # print(benefit)\n"
]
},
{
"cell_type": "code",
2024-05-07 20:20:09 +02:00
"execution_count": 8,
2024-05-06 19:23:42 +02:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2024-05-07 20:20:09 +02:00
"[(304, '04:00', 5051.76, 0.0),\n",
" (308, '05:00', 5968.200000000001, 0.0),\n",
" (309, '05:15', 6522.599999999999, 0.0),\n",
" (310, '05:30', 11083.8, 0.0),\n",
" (311, '05:45', 12341.28, 0.0),\n",
" (312, '06:00', 10764.18, 0.0),\n",
" (313, '06:15', 12213.6, 0.0),\n",
" (314, '06:30', 12746.58, 0.0),\n",
" (315, '06:45', 13044.78, 0.0),\n",
" (316, '07:00', 12341.28, 0.0),\n",
" (317, '07:15', 11936.4, 0.0),\n",
" (318, '07:30', 12256.02, 0.0),\n",
" (319, '07:45', 13321.98, 0.0),\n",
" (320, '08:00', 13812.12, 0.0),\n",
" (321, '08:15', 12746.58, 267.655913103615),\n",
" (322, '08:30', 13599.179999999998, 535.31182620723),\n",
" (323, '08:45', 12511.8, 802.9677393108449),\n",
" (324, '09:00', 12703.74, 1070.6236524144651),\n",
" (325, '09:15', 13471.08, 1900.7160001627249),\n",
" (326, '09:30', 13279.14, 2730.808347910985),\n",
" (327, '09:45', 13599.179999999998, 3560.900695659245),\n",
" (328, '10:00', 14664.72, 4390.993043407505),\n",
" (329, '10:15', 13854.96, 4974.472153289125),\n",
" (330, '10:30', 13449.660000000002, 5557.95126317074),\n",
" (331, '10:45', 13940.22, 6141.430373052355),\n",
" (332, '11:00', 13897.38, 6724.90948293397),\n",
" (333, '11:15', 14323.68, 6494.599487408969),\n",
" (334, '11:30', 13599.179999999998, 6264.289491883975),\n",
" (335, '11:45', 14835.240000000002, 6033.979496358975),\n",
" (336, '12:00', 12789.0, 5803.669500833975),\n",
" (337, '12:15', 12511.8, 5947.734022212275),\n",
" (338, '12:30', 13534.92, 6091.798543590575),\n",
" (339, '12:45', 13066.2, 6235.863064968875),\n",
" (340, '13:00', 12917.1, 6379.927586347176),\n",
" (341, '13:15', 12980.94, 7545.970464993285),\n",
" (349, '15:15', 10145.94, 4078.5159269354353),\n",
" (350, '15:30', 10060.68, 3077.90569952402),\n",
" (351, '15:45', 9719.64, 2077.2954721126052),\n",
" (352, '16:00', 9847.74, 1076.68524470119),\n",
" (353, '16:15', 8611.26, 807.51393352589),\n",
" (354, '16:30', 8717.94, 538.342622350595),\n",
" (355, '16:45', 8781.779999999999, 269.171311175295),\n",
" (356, '17:00', 9037.56, 0.0),\n",
" (357, '17:15', 8867.039999999999, 0.0),\n",
" (358, '17:30', 8248.800000000001, 0.0),\n",
" (359, '17:45', 7716.24, 0.0),\n",
" (360, '18:00', 7588.14, 0.0),\n",
" (361, '18:15', 7417.620000000001, 0.0),\n",
" (362, '18:30', 7694.820000000001, 0.0),\n",
" (363, '18:45', 7225.68, 0.0),\n",
" (364, '19:00', 7502.88, 0.0),\n",
" (365, '19:15', 7097.999999999999, 0.0),\n",
" (366, '19:30', 7481.459999999999, 0.0),\n",
" (367, '19:45', 7076.58, 0.0),\n",
" (368, '20:00', 5691.0, 0.0),\n",
" (369, '20:15', 5541.900000000001, 0.0),\n",
" (406, '05:30', 8121.119999999999, 0.0),\n",
" (407, '05:45', 9314.76, 0.0),\n",
" (408, '06:00', 10465.56, 0.0),\n",
" (409, '06:15', 11829.72, 0.0),\n",
" (410, '06:30', 13641.6, 0.0),\n",
" (411, '06:45', 13726.86, 0.0),\n",
" (412, '07:00', 13641.6, 0.0),\n",
" (413, '07:15', 14238.420000000002, 0.0),\n",
" (414, '07:30', 14856.66, 0.0),\n",
" (415, '07:45', 14089.32, 0.0),\n",
" (416, '08:00', 14472.78, 0.0),\n",
" (417, '08:15', 13897.38, 229.05902933159499),\n",
" (418, '08:30', 14046.48, 458.11805866319503),\n",
" (419, '08:45', 14387.52, 687.17708799479),\n",
" (420, '09:00', 14515.62, 916.2361173263901),\n",
" (421, '09:15', 14771.4, 2529.6061999105),\n",
" (422, '09:30', 14451.78, 4142.97628249461),\n",
" (423, '09:45', 14537.04, 5756.34636507872),\n",
" (424, '10:00', 14067.9, 7369.716447662825),\n",
" (425, '10:15', 14004.06, 8532.759041536145),\n",
" (442, '14:30', 13641.6, 7509.560229445506),\n",
" (443, '14:45', 11893.98, 5278.721370163945),\n",
" (444, '15:00', 12043.08, 3047.882510882385),\n",
" (445, '15:15', 11680.62, 2397.4512835116548),\n",
" (446, '15:30', 10486.98, 1747.02005614092),\n",
" (447, '15:45', 9783.48, 1096.588828770185),\n",
" (448, '16:00', 9506.7, 446.15760139945),\n",
" (449, '16:15', 9847.74, 334.61820104958997),\n",
" (450, '16:30', 9186.66, 223.078800699725),\n",
" (451, '16:45', 9570.54, 111.53940034986),\n",
" (452, '17:00', 9208.08, 0.0),\n",
" (453, '17:15', 9549.12, 0.0),\n",
" (454, '17:30', 8270.22, 0.0),\n",
" (455, '17:45', 8760.36, 0.0),\n",
" (456, '18:00', 8057.280000000001, 0.0),\n",
" (457, '18:15', 8398.32, 0.0),\n",
" (458, '18:30', 7673.4, 0.0),\n",
" (459, '18:45', 7716.24, 0.0),\n",
" (460, '19:00', 7886.759999999999, 0.0),\n",
" (461, '19:15', 7588.14, 0.0),\n",
" (462, '19:30', 7310.94, 0.0),\n",
" (463, '19:45', 7332.36, 0.0),\n",
" (464, '20:00', 5670.0, 0.0),\n",
" (465, '20:15', 5797.68, 0.0),\n",
" (502, '05:30', 8440.74, 0.0),\n",
" (503, '05:45', 9527.7, 0.0),\n",
" (504, '06:00', 10700.34, 0.0),\n",
" (505, '06:15', 11531.52, 0.0),\n",
" (506, '06:30', 11083.8, 0.0),\n",
" (507, '06:45', 13385.82, 0.0),\n",
" (508, '07:00', 14046.48, 0.0),\n",
" (509, '07:15', 13577.760000000002, 0.0),\n",
" (510, '07:30', 13108.62, 0.0),\n",
" (511, '07:45', 13897.38, 0.0),\n",
" (512, '08:00', 14408.94, 0.0),\n",
" (513, '08:15', 13620.18, 288.61722468573),\n",
" (514, '08:30', 14217.0, 577.2344493714651),\n",
" (515, '08:45', 14131.74, 865.851674057195),\n",
" (516, '09:00', 13258.14, 1154.4688987429302),\n",
" (517, '09:15', 13151.46, 1695.3541353077549),\n",
" (518, '09:30', 13577.760000000002, 2236.23937187258),\n",
" (519, '09:45', 13726.86, 2777.12460843741),\n",
" (520, '10:00', 13066.2, 3318.009845002235),\n",
" (521, '10:15', 13748.28, 3084.699564704445),\n",
" (522, '10:30', 13556.34, 2851.389284406655),\n",
" (523, '10:45', 13940.22, 2618.07900410886),\n",
" (524, '11:00', 14771.4, 2384.7687238110702),\n",
" (525, '11:15', 14323.68, 2531.7826776778797),\n",
" (526, '11:30', 14067.9, 2678.7966315446847),\n",
" (527, '11:45', 15133.86, 2825.810585411495),\n",
" (528, '12:00', 13385.82, 2972.8245392783),\n",
" (529, '12:15', 13300.56, 3152.994182498675),\n",
" (530, '12:30', 14067.9, 3333.1638257190502),\n",
" (531, '12:45', 13407.24, 3513.3334689394196),\n",
" (532, '13:00', 13492.5, 3693.503112159795),\n",
" (533, '13:15', 13300.56, 3468.481754200395),\n",
" (534, '13:30', 13641.6, 3243.460396240995),\n",
" (535, '13:45', 13748.28, 3018.439038281595),\n",
" (536, '14:00', 13513.92, 2793.417680322195),\n",
" (537, '14:15', 14025.48, 2432.000325454615),\n",
" (538, '14:30', 13172.88, 2070.582970587035),\n",
" (539, '14:45', 13961.22, 1709.165615719455),\n",
" (540, '15:00', 12746.58, 1347.748260851875),\n",
" (541, '15:15', 10977.12, 1085.57930922257),\n",
" (542, '15:30', 11275.74, 823.41035759326),\n",
" (543, '15:45', 10550.82, 561.241405963955),\n",
" (544, '16:00', 9186.66, 299.072454334645),\n",
" (545, '16:15', 9421.44, 224.30434075098503),\n",
" (546, '16:30', 8888.460000000001, 149.53622716732002),\n",
" (547, '16:45', 9122.82, 74.76811358366001),\n",
" (548, '17:00', 8824.619999999999, 0.0),\n",
" (549, '17:15', 9378.6, 0.0),\n",
" (550, '17:30', 8163.540000000001, 0.0),\n",
" (551, '17:45', 8313.06, 0.0),\n",
" (552, '18:00', 7780.08, 0.0),\n",
" (553, '18:15', 7566.719999999999, 0.0),\n",
" (554, '18:30', 7481.459999999999, 0.0),\n",
" (555, '18:45', 7310.94, 0.0),\n",
" (556, '19:00', 7396.2, 0.0),\n",
" (557, '19:15', 7183.26, 0.0),\n",
" (558, '19:30', 7417.620000000001, 0.0),\n",
" (559, '19:45', 6884.639999999999, 0.0),\n",
" (560, '20:00', 5861.52, 0.0),\n",
" (561, '20:15', 5627.16, 0.0),\n",
" (598, '05:30', 8078.280000000001, 0.0),\n",
" (599, '05:45', 9250.92, 0.0),\n",
" (600, '06:00', 10572.24, 0.0),\n",
" (601, '06:15', 11403.42, 0.0),\n",
" (602, '06:30', 11446.26, 0.0),\n",
" (603, '06:45', 12384.12, 0.0),\n",
" (604, '07:00', 14025.48, 0.0),\n",
" (605, '07:15', 14323.68, 0.0),\n",
" (606, '07:30', 13258.14, 0.0),\n",
" (607, '07:45', 13343.4, 0.0),\n",
" (608, '08:00', 13513.92, 0.0),\n",
" (609, '08:15', 13385.82, 254.271591879905),\n",
" (610, '08:30', 13236.72, 508.54318375981),\n",
" (611, '08:45', 13599.179999999998, 762.81477563972),\n",
" (612, '09:00', 13471.08, 1017.086367519625),\n",
" (613, '09:15', 14941.92, 2806.313819616775),\n",
" (614, '09:30', 14430.36, 4595.541271713925),\n",
" (615, '09:45', 15069.6, 6384.76872381107),\n",
" (616, '10:00', 14025.48, 8173.99617590822),\n",
" (632, '14:00', 14558.04, 2563.36194621862),\n",
" (633, '14:15', 13258.14, 1922.5214596639648),\n",
" (634, '14:30', 12256.02, 1281.68097310931),\n",
" (635, '14:45', 11446.26, 640.840486554655),\n",
" (636, '15:00', 10764.18, 0.0),\n",
" (637, '15:15', 10486.98, 289.75123062527496),\n",
" (638, '15:30', 9868.74, 579.502461250555),\n",
" (639, '15:45', 9591.96, 869.253691875835),\n",
" (640, '16:00', 9101.4, 1159.004922501115),\n",
" (641, '16:15', 9357.18, 911.6146617306),\n",
" (642, '16:30', 9783.48, 664.2244009600901),\n",
" (643, '16:45', 9612.96, 416.834140189575),\n",
" (644, '17:00', 9485.28, 169.44387941905998),\n",
" (645, '17:15', 9357.18, 127.082909564295),\n",
" (646, '17:30', 9165.66, 84.72193970952999),\n",
" (647, '17:45', 8227.8, 42.360969854764996),\n",
" (648, '18:00', 8035.86, 0.0),\n",
" (649, '18:15', 7289.94, 0.0),\n",
" (650, '18:30', 6778.38, 0.0),\n",
" (651, '18:45', 6842.22, 0.0),\n",
" (652, '19:00', 6693.12, 0.0),\n",
" (653, '19:15', 6543.6, 0.0),\n",
" (654, '19:30', 6948.900000000001, 0.0),\n",
" (655, '19:45', 6223.9800000000005, 0.0),\n",
" (656, '20:00', 5243.7, 0.0),\n",
" (694, '05:30', 8227.8, 0.0),\n",
" (695, '05:45', 9698.22, 0.0),\n",
" (696, '06:00', 10423.14, 0.0),\n",
" (697, '06:15', 10678.92, 0.0),\n",
" (698, '06:30', 11872.56, 0.0),\n",
" (699, '06:45', 11936.4, 0.0),\n",
" (700, '07:00', 13300.56, 0.0),\n",
" (701, '07:15', 14899.079999999998, 0.0),\n",
" (702, '07:30', 13982.64, 0.0),\n",
" (703, '07:45', 13726.86, 0.0),\n",
" (704, '08:00', 13343.4, 0.0),\n",
" (705, '08:15', 13215.3, 251.12892071111503),\n",
" (706, '08:30', 13641.6, 502.257841422235),\n",
" (707, '08:45', 12639.9, 753.38676213335),\n",
" (708, '09:00', 13193.88, 1004.51568284447),\n",
" (709, '09:15', 14110.74, 1496.796306090065),\n",
" (710, '09:30', 14110.74, 1989.076929335665),\n",
" (711, '09:45', 13279.14, 2481.35755258126),\n",
" (712, '10:00', 13044.78, 2973.6381758268553),\n",
" (713, '10:15', 13705.44, 3111.295309385295),\n",
" (714, '10:30', 13769.7, 3248.952442943735),\n",
" (715, '10:45', 14004.06, 3386.6095765021755),\n",
" (716, '11:00', 13748.28, 3524.2667100606145),\n",
" (717, '11:15', 14238.420000000002, 3887.7588381270048),\n",
" (718, '11:30', 14749.98, 4251.2509661934),\n",
" (719, '11:45', 14728.56, 4614.74309425979),\n",
" (720, '12:00', 13130.04, 4978.235222326185),\n",
" (721, '12:15', 13790.7, 4934.19714413571),\n",
" (722, '12:30', 13215.3, 4890.1590659452395),\n",
" (723, '12:45', 12959.52, 4846.12098775477),\n",
" (724, '13:00', 12980.94, 4802.082909564296),\n",
" (725, '13:15', 13726.86, 5125.859403604405),\n",
" (726, '13:30', 13321.98, 5449.63589764452),\n",
" (727, '13:45', 12789.0, 5773.412391684635),\n",
" (728, '14:00', 12170.76, 6097.188885724745),\n",
" (729, '14:15', 11147.64, 5670.894186566859),\n",
" (730, '14:30', 10145.94, 5244.59948740897),\n",
" (731, '14:45', 10209.78, 4818.304788251085),\n",
" (732, '15:00', 10401.72, 4392.0100890932),\n",
" (733, '15:15', 9016.14, 3778.360318945525),\n",
" (734, '15:30', 8930.88, 3164.71054879785),\n",
" (735, '15:45', 7993.019999999999, 2551.060778650175),\n",
" (736, '16:00', 8398.32, 1937.4110085025002),\n",
" (737, '16:15', 8206.380000000001, 1488.678755949715),\n",
" (738, '16:30', 8334.06, 1039.94650339693),\n",
" (739, '16:45', 8313.06, 591.214250844145),\n",
" (740, '17:00', 8184.96, 142.48199829136001),\n",
" (741, '17:15', 7588.14, 106.86149871852),\n",
" (742, '17:30', 7225.68, 71.24099914568001),\n",
" (743, '17:45', 6991.320000000001, 35.620499572840004),\n",
" (744, '18:00', 7332.36, 0.0),\n",
" (745, '18:15', 7034.160000000001, 0.0),\n",
" (746, '18:30', 7140.42, 0.0),\n",
" (747, '18:45', 7097.999999999999, 0.0),\n",
" (748, '19:00', 7289.94, 0.0),\n",
" (749, '19:15', 6650.28, 0.0),\n",
" (750, '19:30', 6394.5, 0.0),\n",
" (751, '19:45', 5946.780000000001, 0.0),\n",
" (752, '20:00', 5137.02, 0.0),\n",
" (997, '09:15', 14366.52, 2673.385948496805),\n",
" (998, '09:30', 13684.44, 4182.213905048615),\n",
" (999, '09:45', 13961.22, 5691.04186160042),\n",
" (1000, '10:00', 13684.44, 7199.8698181522295),\n",
" (1001, '10:15', 13897.38, 8306.669785606766),\n",
" (1002, '10:30', 14387.52, 9413.469753061305),\n",
" (1018, '14:30', 12874.26, 7988.58874740653),\n",
" (1019, '14:45', 12917.1, 6465.81709450388),\n",
" (1020, '15:00', 11531.52, 4943.045441601234),\n",
" (1021, '15:15', 10913.28, 4300.526829665185),\n",
" (1022, '15:30', 10870.86, 3658.0082177291397),\n",
" (1023, '15:45', 10465.56, 3015.48960579309),\n",
" (1024, '16:00', 9954.0, 2372.97099385704),\n",
" (1025, '16:15', 9847.74, 1834.8266954151552),\n",
" (1026, '16:30', 9570.54, 1296.68239697327),\n",
" (1027, '16:45', 9996.84, 758.538098531385),\n",
" (1028, '17:00', 9804.9, 220.39380008950002),\n",
" (1029, '17:15', 9506.7, 165.295350067125),\n",
" (1030, '17:30', 8824.619999999999, 110.19690004475001),\n",
" (1031, '17:45', 8803.2, 55.098450022375005),\n",
" (1032, '18:00', 8184.96, 0.0),\n",
" (1033, '18:15', 8376.9, 0.0),\n",
" (1034, '18:30', 8291.640000000001, 0.0),\n",
" (1035, '18:45', 7439.04, 0.0),\n",
" (1036, '19:00', 7843.919999999999, 0.0),\n",
" (1037, '19:15', 7651.98, 0.0),\n",
" (1038, '19:30', 8248.800000000001, 0.0),\n",
" (1039, '19:45', 7609.559999999999, 0.0),\n",
" (1040, '20:00', 6394.5, 0.0),\n",
" (1041, '20:15', 5797.68, 0.0),\n",
" (1078, '05:30', 8483.58, 0.0),\n",
" (1079, '05:45', 9080.4, 0.0),\n",
" (1080, '06:00', 10742.76, 0.0),\n",
" (1081, '06:15', 12106.92, 0.0),\n",
" (1082, '06:30', 11723.46, 0.0),\n",
" (1083, '06:45', 12639.9, 0.0),\n",
" (1084, '07:00', 13002.36, 0.0),\n",
" (1085, '07:15', 15048.6, 0.0),\n",
" (1086, '07:30', 14110.74, 0.0),\n",
" (1087, '07:45', 14025.48, 0.0),\n",
" (1088, '08:00', 12576.06, 0.0),\n",
" (1089, '08:15', 13407.24, 280.62324559619),\n",
" (1090, '08:30', 13130.04, 561.24649119238),\n",
" (1091, '08:45', 12810.42, 841.8697367885751),\n",
" (1092, '09:00', 13130.04, 1122.492982384765),\n",
" (1093, '09:15', 12980.94, 2986.51397420772),\n",
" (1094, '09:30', 13087.62, 4850.53496603067),\n",
" (1095, '09:45', 13620.18, 6714.555957853626),\n",
" (1096, '10:00', 13641.6, 8578.576949676575),\n",
" (1120, '16:00', 9847.74, 3525.69057402058),\n",
" (1121, '16:15', 9719.64, 2722.30076075017),\n",
" (1122, '16:30', 9101.4, 1918.91094747976),\n",
" (1123, '16:45', 9804.9, 1115.521134209345),\n",
" (1124, '17:00', 9954.0, 312.131320938935),\n",
" (1125, '17:15', 8973.72, 234.0984907042),\n",
" (1126, '17:30', 8142.54, 156.065660469465),\n",
" (1127, '17:45', 8099.7, 78.03283023473),\n",
" (1128, '18:00', 8121.119999999999, 0.0),\n",
" (1129, '18:15', 8078.280000000001, 0.0),\n",
" (1130, '18:30', 8654.1, 0.0),\n",
" (1131, '18:45', 8121.119999999999, 0.0),\n",
" (1132, '19:00', 7758.66, 0.0),\n",
" (1133, '19:15', 7289.94, 0.0),\n",
" (1134, '19:30', 7439.04, 0.0),\n",
" (1135, '19:45', 6927.48, 0.0),\n",
" (1136, '20:00', 5989.62, 0.0),\n",
" (1137, '20:15', 5286.12, 0.0),\n",
" (1174, '05:30', 7843.919999999999, 0.0),\n",
" (1175, '05:45', 9677.22, 0.0),\n",
" (1176, '06:00', 10721.34, 0.0),\n",
" (1177, '06:15', 11552.94, 0.0),\n",
" (1178, '06:30', 12469.38, 0.0),\n",
" (1179, '06:45', 12895.68, 0.0),\n",
" (1180, '07:00', 14451.78, 0.0),\n",
" (1181, '07:15', 13364.4, 0.0),\n",
" (1182, '07:30', 13982.64, 0.0),\n",
" (1183, '07:45', 13385.82, 0.0),\n",
" (1184, '08:00', 13641.6, 0.0),\n",
" (1185, '08:15', 13172.88, 339.250844147915),\n",
" (1186, '08:30', 13748.28, 678.501688295835),\n",
" (1187, '08:45', 13769.7, 1017.752532443755),\n",
" (1188, '09:00', 14515.62, 1357.003376591675),\n",
" (1189, '09:15', 15453.48, 1721.14132866848),\n",
" (1190, '09:30', 14537.04, 2085.27928074529),\n",
" (1191, '09:45', 14878.08, 2449.417232822095),\n",
" (1192, '10:00', 14025.48, 2813.5551848989053),\n",
" (1193, '10:15', 13982.64, 3200.9478865790647),\n",
" (1194, '10:30', 14899.079999999998, 3588.34058825922),\n",
" (1195, '10:45', 14941.92, 3975.73328993938),\n",
" (1196, '11:00', 15282.96, 4363.12599161954),\n",
" (1197, '11:15', 14856.66, 4262.336764167445),\n",
" (1198, '11:30', 14984.34, 4161.547536715345),\n",
" (1199, '11:45', 15240.12, 4060.7583092632503),\n",
" (1200, '12:00', 14153.16, 3959.969081811155),\n",
" (1201, '12:15', 14195.999999999998, 3433.9632236280054),\n",
" (1202, '12:30', 15282.96, 2907.957365444855),\n",
" (1203, '12:45', 14110.74, 2381.951507261705),\n",
" (1204, '13:00', 14046.48, 1855.9456490785549),\n",
" (1205, '13:15', 13812.12, 1970.8616411049152),\n",
" (1206, '13:30', 13236.72, 2085.7776331312803),\n",
" (1207, '13:45', 13151.46, 2200.69362515764),\n",
" (1208, '14:00', 13471.08, 2315.609617184),\n",
" (1209, '14:15', 12874.26, 2374.750823807005),\n",
" (1210, '14:30', 12554.64, 2433.892030430005),\n",
" (1211, '14:45', 11638.2, 2493.033237053005),\n",
" (1212, '15:00', 10828.02, 2552.17444367601),\n",
" (1213, '15:15', 11126.64, 2204.904194296405),\n",
" (1214, '15:30', 10615.08, 1857.6339449168051),\n",
" (1215, '15:45', 10401.72, 1510.3636955372),\n",
" (1216, '16:00', 10060.68, 1163.0934461576),\n",
" (1217, '16:15', 9634.38, 895.97097351613),\n",
" (1218, '16:30', 9804.9, 628.848500874655),\n",
" (1219, '16:45', 9933.0, 361.726028233185),\n",
" (1220, '17:00', 10295.04, 94.603555591715),\n",
" (1221, '17:15', 9612.96, 70.952666693785),\n",
" (1222, '17:30', 9400.02, 47.301777795855),\n",
" (1223, '17:45', 8440.74, 23.650888897925),\n",
" (1224, '18:00', 7972.02, 0.0),\n",
" (1225, '18:15', 7737.240000000001, 0.0),\n",
" (1226, '18:30', 7972.02, 0.0),\n",
" (1227, '18:45', 7651.98, 0.0),\n",
" (1228, '19:00', 7332.36, 0.0),\n",
" (1229, '19:15', 7950.599999999999, 0.0),\n",
" (1230, '19:30', 7439.04, 0.0),\n",
" (1231, '19:45', 7651.98, 0.0),\n",
" (1232, '20:00', 5605.74, 0.0),\n",
" (1233, '20:15', 5584.740000000001, 0.0),\n",
" (1270, '05:30', 7929.18, 0.0),\n",
" (1271, '05:45', 8888.460000000001, 0.0),\n",
" (1272, '06:00', 10742.76, 0.0),\n",
" (1273, '06:15', 11275.74, 0.0),\n",
" (1274, '06:30', 11275.74, 0.0),\n",
" (1275, '06:45', 13534.92, 0.0),\n",
" (1276, '07:00', 14323.68, 0.0),\n",
" (1277, '07:15', 14004.06, 0.0),\n",
" (1278, '07:30', 13854.96, 0.0),\n",
" (1279, '07:45', 14749.98, 0.0),\n",
" (1280, '08:00', 14302.259999999998, 0.0),\n",
" (1281, '08:15', 14707.56, 325.23086937065),\n",
" (1282, '08:30', 15069.6, 650.4617387413),\n",
" (1283, '08:45', 14110.74, 975.692608111955),\n",
" (1284, '09:00', 14856.66, 1300.923477482605),\n",
" (1285, '09:15', 14472.78, 1962.938855213375),\n",
" (1286, '09:30', 14643.3, 2624.9542329441397),\n",
" (1287, '09:45', 14835.240000000002, 3286.9696106749097),\n",
" (1288, '10:00', 14643.3, 3948.9849884056753),\n",
" (1289, '10:15', 14558.04, 4219.417436231235),\n",
" (1290, '10:30', 14622.3, 4489.84988405679),\n",
" (1291, '10:45', 14707.56, 4760.282331882345),\n",
" (1292, '11:00', 14856.66, 5030.7147797079),\n",
" (1293, '11:15', 14025.48, 5045.9704649932855),\n",
" (1294, '11:30', 15027.180000000002, 5061.22615027867),\n",
" (1295, '11:45', 15197.7, 5076.48183556405),\n",
" (1296, '12:00', 13407.24, 5091.737520849435),\n",
" (1297, '12:15', 14004.06, 4001.123835482685),\n",
" (1298, '12:30', 14408.94, 2910.51015011594),\n",
" (1299, '12:45', 14984.34, 1819.896464749195),\n",
" (1300, '13:00', 14302.259999999998, 729.282779382445),\n",
" (1301, '13:15', 14153.16, 546.9620845368349),\n",
" (1302, '13:30', 14089.32, 364.64138969122),\n",
" (1303, '13:45', 13577.760000000002, 182.32069484561),\n",
" (1304, '14:00', 13726.86, 0.0),\n",
" (1305, '14:15', 13492.5, 1128.36133599121),\n",
" (1306, '14:30', 13940.22, 2256.7226719824253),\n",
" (1307, '14:45', 12639.9, 3385.084007973635),\n",
" (1308, '15:00', 13130.04, 4513.4453439648505),\n",
" (1309, '15:15', 11957.82, 4051.7066026605903),\n",
" (1310, '15:30', 11531.52, 3589.96786135633),\n",
" (1311, '15:45', 10700.34, 3128.22912005207),\n",
" (1312, '16:00', 10401.72, 2666.49037874781),\n",
" (1313, '16:15', 10018.26, 2059.247996419995),\n",
" (1314, '16:30', 9804.9, 1452.00561409218),\n",
" (1315, '16:45', 9442.44, 844.76323176437),\n",
" (1316, '17:00', 9165.66, 237.520849436555),\n",
" (1317, '17:15', 8717.94, 178.140637077415),\n",
" (1318, '17:30', 8504.58, 118.760424718275),\n",
" (1319, '17:45', 7950.599999999999, 59.380212359135),\n",
" (1320, '18:00', 8121.119999999999, 0.0),\n",
" (1321, '18:15', 7886.759999999999, 0.0),\n",
" (1322, '18:30', 8057.280000000001, 0.0),\n",
" (1323, '18:45', 7375.2, 0.0),\n",
" (1324, '19:00', 7353.78, 0.0),\n",
" (1325, '19:15', 7481.459999999999, 0.0),\n",
" (1326, '19:30', 7524.299999999999, 0.0),\n",
" (1327, '19:45', 6927.48, 0.0),\n",
" (1328, '20:00', 5946.780000000001, 0.0),\n",
" (1329, '20:15', 5200.86, 0.0),\n",
" (1366, '05:30', 7673.4, 0.0),\n",
" (1367, '05:45', 8717.94, 0.0),\n",
" (1368, '06:00', 9847.74, 0.0),\n",
" (1369, '06:15', 10998.54, 0.0),\n",
" (1370, '06:30', 11062.38, 0.0),\n",
" (1371, '06:45', 11914.98, 0.0),\n",
" (1372, '07:00', 13364.4, 0.0),\n",
" (1373, '07:15', 12320.28, 0.0),\n",
" (1374, '07:30', 12320.28, 0.0),\n",
" (1375, '07:45', 12703.74, 0.0),\n",
" (1376, '08:00', 13748.28, 0.0),\n",
" (1377, '08:15', 14430.36, 345.91757861763),\n",
" (1378, '08:30', 14067.9, 691.83515723526),\n",
" (1379, '08:45', 12831.84, 1037.75273585289),\n",
" (1380, '09:00', 12938.1, 1383.670314470525),\n",
" (1381, '09:15', 13790.7, 1999.2677271062998),\n",
" (1382, '09:30', 13556.34, 2614.865139742075),\n",
" (1383, '09:45', 13130.04, 3230.4625523778504),\n",
" (1384, '10:00', 13258.14, 3846.059965013625),\n",
" (1385, '10:15', 13023.36, 3628.2596314226403),\n",
" (1386, '10:30', 13790.7, 3410.459297831655),\n",
" (1387, '10:45', 13300.56, 3192.6589642406702),\n",
" (1388, '11:00', 13918.8, 2974.858630649685),\n",
" (1389, '11:15', 14281.26, 2997.0302265977753),\n",
" (1390, '11:30', 13577.760000000002, 3019.201822545865),\n",
" (1391, '11:45', 14899.079999999998, 3041.373418493955),\n",
" (1392, '12:00', 13172.88, 3063.545014442045),\n",
" (1393, '12:15', 13215.3, 2989.70749766079),\n",
" (1394, '12:30', 12703.74, 2915.86998087954),\n",
" (1395, '12:45', 12789.0, 2842.032464098285),\n",
" (1396, '13:00', 12810.42, 2768.19494731703),\n",
" (1397, '13:15', 13641.6, 2736.056303649155),\n",
" (1398, '13:30', 12938.1, 2703.917659981285),\n",
" (1399, '13:45', 13258.14, 2671.77901631341),\n",
" (1400, '14:00', 13875.96, 2639.640372645535),\n",
" (1401, '14:15', 12938.1, 2558.124160937305),\n",
" (1402, '14:30', 11297.16, 2476.607949229075),\n",
" (1403, '14:45', 11254.32, 2395.091737520845),\n",
" (1404, '15:00', 10721.34, 2313.575525812615),\n",
" (1405, '15:15', 10550.82, 2001.38318213254),\n",
" (1406, '15:30', 9783.48, 1689.19083845246),\n",
" (1407, '15:45', 9293.34, 1376.998494772385),\n",
" (1408, '16:00', 8760.36, 1064.806151092305),\n",
" (1409, '16:15', 8995.140000000001, 820.597209226635),\n",
" (1410, '16:30', 8973.72, 576.3882673609651),\n",
" (1411, '16:45', 8632.679999999998, 332.1793254953),\n",
" (1412, '17:00', 8483.58, 87.97038362963),\n",
" (1413, '17:15', 8270.22, 65.97778772222),\n",
" (1414, '17:30', 7758.66, 43.985191814815),\n",
" (1415, '17:45', 7673.4, 21.992595907404997),\n",
" (1416, '18:00', 7950.599999999999, 0.0),\n",
" (1417, '18:15', 7843.919999999999, 0.0),\n",
" (1418, '18:30', 7843.919999999999, 0.0),\n",
" (1419, '18:45', 7268.52, 0.0),\n",
" (1420, '19:00', 7865.34, 0.0),\n",
" (1421, '19:15', 7460.460000000001, 0.0),\n",
" (1422, '19:30', 6863.639999999999, 0.0),\n",
" (1423, '19:45', 5840.52, 0.0),\n",
" (1667, '08:45', 15261.54, 321.284732110165),\n",
" (1668, '09:00', 16242.239999999998, 428.379642813555),\n",
" (1669, '09:15', 15666.42, 1813.59586672633),\n",
" (1670, '09:30', 15282.96, 3198.8120906391105),\n",
" (1671, '09:45', 16391.34, 4584.02831455189),\n",
" (1672, '10:00', 15901.2, 5969.244538464665),\n",
" (1673, '10:15', 15346.8, 5730.79817745413),\n",
" (1674, '10:30', 15069.6, 5492.35181644359),\n",
" (1675, '10:45', 14920.5, 5253.905455433055),\n",
" (1676, '11:00', 14899.079999999998, 5015.45909442252),\n",
" (1677, '11:15', 15304.38, 4342.886782474266),\n",
" (1678, '11:30', 14835.240000000002, 3670.3144705260147),\n",
" (1679, '11:45', 15538.74, 2997.74215857776),\n",
" (1680, '12:00', 14707.56, 2325.16984662951),\n",
" (1681, '12:15', 15176.28, 2299.641999918635),\n",
" (1682, '12:30', 15069.6, 2274.11415320776),\n",
" (1683, '12:45', 14622.3, 2248.5863064968853),\n",
" (1684, '13:00', 14600.88, 2223.0584597860097),\n",
" (1685, '13:15', 14558.04, 2867.2043448191653),\n",
" (1686, '13:30', 14643.3, 3511.35022985232),\n",
" (1687, '13:45', 14515.62, 4155.49611488548),\n",
" (1688, '14:00', 14600.88, 4799.641999918635),\n",
" (1689, '14:15', 13364.4, 3973.98905658842),\n",
" (1690, '14:30', 13321.98, 3148.336113258205),\n",
" (1691, '14:45', 13258.14, 2322.68316992799),\n",
" (1692, '15:00', 13854.96, 1497.030226597775),\n",
" (1693, '15:15', 13726.86, 1507.85667792197),\n",
" (1694, '15:30', 12320.28, 1518.683129246165),\n",
" (1695, '15:45', 11702.04, 1529.509580570355),\n",
" (1696, '16:00', 10678.92, 1540.33603189455),\n",
" (1697, '16:15', 9677.22, 1208.0010984093399),\n",
" (1698, '16:30', 10167.36, 875.666164924125),\n",
" (1699, '16:45', 10039.26, 543.331231438915),\n",
" (1700, '17:00', 10401.72, 210.9962979537),\n",
" (1701, '17:15', 9527.7, 158.247223465275),\n",
" (1702, '17:30', 10231.2, 105.49814897685),\n",
" (1703, '17:45', 9037.56, 52.749074488425),\n",
" (1704, '18:00', 9421.44, 0.0),\n",
" (1705, '18:15', 9400.02, 0.0),\n",
" (1706, '18:30', 9357.18, 0.0),\n",
" (1707, '18:45', 8739.36, 0.0),\n",
" (1708, '19:00', 9357.18, 0.0),\n",
" (1709, '19:15', 8803.2, 0.0),\n",
" (1710, '19:30', 8078.280000000001, 0.0),\n",
" (1711, '19:45', 8057.280000000001, 0.0),\n",
" (1712, '20:00', 6607.860000000001, 0.0),\n",
" (1713, '20:15', 6352.08, 0.0),\n",
" (1750, '05:30', 9378.6, 0.0),\n",
" (1751, '05:45', 10615.08, 0.0),\n",
" (1752, '06:00', 12298.86, 0.0),\n",
" (1753, '06:15', 12618.48, 0.0),\n",
" (1754, '06:30', 12170.76, 0.0),\n",
" (1755, '06:45', 13599.179999999998, 0.0),\n",
" (1756, '07:00', 13875.96, 0.0),\n",
" (1757, '07:15', 14046.48, 0.0),\n",
" (1758, '07:30', 14856.66, 0.0),\n",
" (1759, '07:45', 15986.46, 0.0),\n",
" (1760, '08:00', 16028.88, 0.0),\n",
" (1761, '08:15', 16710.96, 387.65204833001),\n",
" (1762, '08:30', 17499.719999999998, 775.30409666002),\n",
" (1763, '08:45', 16220.820000000002, 1162.95614499003),\n",
" (1764, '09:00', 17797.92, 1550.60819332004),\n",
" (1765, '09:15', 17158.68, 2405.32830234734),\n",
" (1766, '09:30', 16881.48, 3260.048411374635),\n",
" (1767, '09:45', 16476.6, 4114.768520401935),\n",
" (1768, '10:00', 16966.739999999998, 4969.48862942923),\n",
" (1769, '10:15', 17670.24, 5754.85130792075),\n",
" (1770, '10:30', 16924.32, 6540.213986412265),\n",
" (1771, '10:45', 16412.760000000002, 7325.576664903785),\n",
" (1772, '11:00', 16817.64, 8110.9393433953),\n",
" (1773, '11:15', 17030.579999999998, 8940.340100077294),\n",
" (1774, '11:30', 16774.8, 9769.740856759285),\n",
" (1775, '11:45', 17989.86, 10599.141613441276),\n",
" (1782, '13:30', 15901.2, 9109.06797933363),\n",
" (1783, '13:45', 15197.7, 7713.681298563931),\n",
" (1784, '14:00', 15453.48, 6318.29461779423),\n",
" (1785, '14:15', 14749.98, 5610.02400227818),\n",
" (1786, '14:30', 14558.04, 4901.7533867621305),\n",
" (1787, '14:45', 13492.5, 4193.48277124608),\n",
" (1788, '15:00', 13343.4, 3485.212155730035),\n",
" (1789, '15:15', 12703.74, 3164.38509417843),\n",
" (1790, '15:30', 12298.86, 2843.558032626825),\n",
" (1791, '15:45', 11552.94, 2522.73097107522),\n",
" (1792, '16:00', 11510.1, 2201.903909523615),\n",
" (1793, '16:15', 11297.16, 1714.99328749847),\n",
" (1794, '16:30', 11361.0, 1228.08266547333),\n",
" (1795, '16:45', 10508.4, 741.17204344819),\n",
" (1796, '17:00', 10998.54, 254.26142142305),\n",
" (1797, '17:15', 10380.3, 190.69606606728502),\n",
" (1798, '17:30', 10018.26, 127.130710711525),\n",
" (1799, '17:45', 9442.44, 63.56535535576),\n",
" (1800, '18:00', 9378.6, 0.0),\n",
" (1801, '18:15', 8952.300000000001, 0.0),\n",
" (1802, '18:30', 8462.16, 0.0),\n",
" (1803, '18:45', 8483.58, 0.0),\n",
" (1804, '19:00', 8440.74, 0.0),\n",
" (1805, '19:15', 8419.32, 0.0),\n",
" (1806, '19:30', 8099.7, 0.0),\n",
" (1807, '19:45', 7972.02, 0.0),\n",
" (1808, '20:00', 6415.92, 0.0),\n",
" (1809, '20:15', 6309.24, 0.0),\n",
" (1846, '05:30', 8995.140000000001, 0.0),\n",
" (1847, '05:45', 9634.38, 0.0),\n",
" (1848, '06:00', 11765.88, 0.0),\n",
" (1849, '06:15', 12554.64, 0.0),\n",
" (1850, '06:30', 12341.28, 0.0),\n",
" (1851, '06:45', 12490.8, 0.0),\n",
" (1852, '07:00', 13066.2, 0.0),\n",
" (1853, '07:15', 13130.04, 0.0),\n",
" (1854, '07:30', 13471.08, 0.0),\n",
" (1855, '07:45', 15261.54, 0.0),\n",
" (1856, '08:00', 14941.92, 0.0),\n",
" (1857, '08:15', 14537.04, 248.723607664455),\n",
" (1858, '08:30', 13875.96, 497.44721532891),\n",
" (1859, '08:45', 13833.54, 746.170822993365),\n",
" (1860, '09:00', 14813.82, 994.8944306578251),\n",
" (1861, '09:15', 14941.92, 1172.7909767706751),\n",
" (1862, '09:30', 14813.82, 1350.687522883525),\n",
" (1863, '09:45', 16071.72, 1528.584068996375),\n",
" (1864, '10:00', 15666.42, 1706.48061510923),\n",
" (1865, '10:15', 15048.6, 2040.50892966112),\n",
" (1866, '10:30', 15965.04, 2374.53724421301),\n",
" (1867, '10:45', 16284.660000000002, 2708.5655587649),\n",
" (1868, '11:00', 16710.96, 3042.593873316785),\n",
" (1869, '11:15', 15879.78, 3291.3632480370998),\n",
" (1870, '11:30', 15176.28, 3540.1326227574104),\n",
" (1871, '11:45', 15261.54, 3788.9019974777248),\n",
" (1872, '12:00', 15069.6, 4037.671372198035),\n",
" (1873, '12:15', 13684.44, 4224.197550953985),\n",
" (1874, '12:30', 15091.02, 4410.7237297099355),\n",
" (1875, '12:45', 14387.52, 4597.249908465885),\n",
" (1876, '13:00', 14878.08, 4783.776087221835),\n",
" (1877, '13:15', 15538.74, 3763.3436393962797),\n",
" (1878, '13:30', 15005.76, 2742.911191570725),\n",
" (1879, '13:45', 14920.5, 1722.478743745165),\n",
" (1880, '14:00', 14430.36, 702.04629591961),\n",
" (1881, '14:15', 14067.9, 1247.823522232615),\n",
" (1882, '14:30', 13705.44, 1793.60074854562),\n",
" (1883, '14:45', 12810.42, 2339.37797485863),\n",
" (1884, '15:00', 11979.24, 2885.155201171635),\n",
" (1885, '15:15', 12426.54, 2794.89239656645),\n",
" (1886, '15:30', 12298.86, 2704.62959196127),\n",
" (1887, '15:45', 11019.96, 2614.3667873560853),\n",
" (1888, '16:00', 11595.36, 2524.1039827509053),\n",
" (1889, '16:15', 11403.42, 1969.1326634392399),\n",
" (1890, '16:30', 10678.92, 1414.161344127575),\n",
" (1891, '16:45', 10145.94, 859.1900248159101),\n",
" (1892, '17:00', 9783.48, 304.21870550425),\n",
" (1893, '17:15', 9698.22, 228.16402912818498),\n",
" (1894, '17:30', 9719.64, 152.109352752125),\n",
" (1895, '17:45', 9144.24, 76.05467637606),\n",
" (1896, '18:00', 8739.36, 0.0),\n",
" (1897, '18:15', 8760.36, 0.0),\n",
" (1898, '18:30', 8313.06, 0.0),\n",
" (1899, '18:45', 9037.56, 0.0),\n",
" (1900, '19:00', 8291.640000000001, 0.0),\n",
" (1901, '19:15', 8504.58, 0.0),\n",
" (1902, '19:30', 8142.54, 0.0),\n",
" (1903, '19:45', 8078.280000000001, 0.0),\n",
" (1904, '20:00', 6948.900000000001, 0.0),\n",
" (1905, '20:15', 6628.86, 0.0),\n",
" (1942, '05:30', 8973.72, 0.0),\n",
" (1943, '05:45', 9996.84, 0.0),\n",
" (1944, '06:00', 12213.6, 0.0),\n",
" (1945, '06:15', 12149.76, 0.0),\n",
" (1946, '06:30', 11638.2, 0.0),\n",
" (1947, '06:45', 12682.320000000002, 0.0),\n",
" (1948, '07:00', 13321.98, 0.0),\n",
" (1949, '07:15', 15624.000000000002, 0.0),\n",
" (1950, '07:30', 14813.82, 0.0),\n",
" (1951, '07:45', 14430.36, 0.0),\n",
" (1952, '08:00', 14494.2, 0.0),\n",
" (1953, '08:15', 14600.88, 177.769415402135),\n",
" (1954, '08:30', 14707.56, 355.538830804275),\n",
" (1955, '08:45', 15836.94, 533.308246206415),\n",
" (1956, '09:00', 14878.08, 711.077661608555),\n",
" (1957, '09:15', 15282.96, 922.72995402953),\n",
" (1958, '09:30', 14600.88, 1134.38224645051),\n",
" (1959, '09:45', 15602.58, 1346.034538871485),\n",
" (1960, '10:00', 14281.26, 1557.68683129246),\n",
" (1961, '10:15', 13918.8, 1727.996216590045),\n",
" (1962, '10:30', 14472.78, 1898.305601887635),\n",
" (1963, '10:45', 15410.64, 2068.61498718522),\n",
" (1964, '11:00', 15432.06, 2238.92437248281),\n",
" (1965, '11:15', 15069.6, 2091.961270900285),\n",
" (1966, '11:30', 14387.52, 1944.998169317765),\n",
" (1967, '11:45', 14643.3, 1798.0350677352399),\n",
" (1968, '12:00', 14238.420000000002, 1651.0719661527148),\n",
" (1969, '12:15', 14302.259999999998, 1690.563850128145),\n",
" (1970, '12:30', 14600.88, 1730.0557341035749),\n",
" (1971, '12:45', 13748.28, 1769.547618079),\n",
" (1972, '13:00', 13407.24, 1809.0395020544302),\n",
" (1973, '13:15', 13428.66, 1835.83865587242),\n",
" (1974, '13:30', 13130.04, 1862.6378096904098),\n",
" (1975, '13:45', 13748.28, 1889.4369635084001),\n",
" (1976, '14:00', 13300.56, 1916.2361173263898),\n",
" (1977, '14:15', 12298.86, 1685.56507058297),\n",
" (1978, '14:30', 12426.54, 1454.8940238395498),\n",
" (1979, '14:45', 12405.54, 1224.22297709613),\n",
" (1980, '15:00', 11744.46, 993.55193035271),\n",
" (1981, '15:15', 10380.3, 936.4804117000899),\n",
" (1982, '15:30', 10572.24, 879.408893047475),\n",
" (1983, '15:45', 10145.94, 822.3373743948549),\n",
" (1984, '16:00', 9527.7, 765.265855742235),\n",
" (1985, '16:15', 9868.74, 593.497518408525),\n",
" (1986, '16:30', 9804.9, 421.72918107481),\n",
" (1987, '16:45', 9463.86, 249.9608437411),\n",
" (1988, '17:00', 9421.44, 78.192506407385),\n",
" (1989, '17:15', 9186.66, 58.644379805540005),\n",
" (1990, '17:30', 8803.2, 39.096253203690004),\n",
" (1991, '17:45', 8867.039999999999, 19.548126601845002),\n",
" (1992, '18:00', 8867.039999999999, 0.0),\n",
" (1993, '18:15', 8206.380000000001, 0.0),\n",
" (1994, '18:30', 8291.640000000001, 0.0),\n",
" (1995, '18:45', 7737.240000000001, 0.0),\n",
" (1996, '19:00', 8803.2, 0.0),\n",
" (1997, '19:15', 7801.5, 0.0),\n",
" (1998, '19:30', 8163.540000000001, 0.0),\n",
" (1999, '19:45', 8014.44, 0.0),\n",
" (2000, '20:00', 6586.4400000000005, 0.0),\n",
" (2001, '20:15', 7076.58, 0.0),\n",
" (2022, '01:30', 5414.22, 0.0),\n",
" (2023, '01:45', 5243.7, 0.0),\n",
" (2024, '02:00', 5115.599999999999, 0.0),\n",
" (2025, '02:15', 5755.259999999999, 0.0),\n",
" (2026, '02:30', 5158.44, 0.0),\n",
" (2027, '02:45', 5691.0, 0.0),\n",
" (2028, '03:00', 5392.8, 0.0),\n",
" (2038, '05:30', 9229.5, 0.0),\n",
" (2039, '05:45', 9954.0, 0.0),\n",
" (2040, '06:00', 10785.6, 0.0),\n",
" (2041, '06:15', 11829.72, 0.0),\n",
" (2042, '06:30', 12490.8, 0.0),\n",
" (2043, '06:45', 13364.4, 0.0),\n",
" (2044, '07:00', 12661.32, 0.0),\n",
" (2045, '07:15', 14025.48, 0.0),\n",
" (2046, '07:30', 16263.24, 0.0),\n",
" (2047, '07:45', 15901.2, 0.0),\n",
" (2048, '08:00', 15261.54, 0.0),\n",
" (2049, '08:15', 15773.1, 375.61531263984),\n",
" (2050, '08:30', 16881.48, 751.230625279685),\n",
" (2051, '08:45', 16369.92, 1126.84593791953),\n",
" (2052, '09:00', 15368.22, 1502.46125055937),\n",
" (2053, '09:15', 15389.64, 1950.602091045925),\n",
" (2054, '09:30', 15389.64, 2398.74293153248),\n",
" (2055, '09:45', 16007.46, 2846.883772019035),\n",
" (2056, '10:00', 15219.12, 3295.02461250559),\n",
" (2057, '10:15', 16135.56, 3178.4203246409797),\n",
" (2058, '10:30', 16199.4, 3061.81603677637),\n",
" (2059, '10:45', 15624.000000000002, 2945.21174891176),\n",
" (2060, '11:00', 15858.36, 2828.60746104715),\n",
" (2061, '11:15', 15368.22, 2968.654651966965),\n",
" (2062, '11:30', 14878.08, 3108.70184288678),\n",
" (2063, '11:45', 16199.4, 3248.749033806595),\n",
" (2064, '12:00', 14856.66, 3388.796224726415),\n",
" (2065, '12:15', 13982.64, 3260.03824091778),\n",
" (2066, '12:30', 14153.16, 3131.280257109145),\n",
" (2067, '12:45', 14195.999999999998, 3002.522273300515),\n",
" (2068, '13:00', 14451.78, 2873.76428949188),\n",
" (2069, '13:15', 14622.3, 2752.53244375737),\n",
" (2070, '13:30', 13897.38, 2631.30059802286),\n",
" (2071, '13:45', 14281.26, 2510.06875228835),\n",
" (2072, '14:00', 13620.18, 2388.83690655384),\n",
" (2073, '14:15', 13343.4, 2232.994996135225),\n",
" (2074, '14:30', 13492.5, 2077.15308571661),\n",
" (2075, '14:45', 12106.92, 1921.3111752979898),\n",
" (2076, '15:00', 11552.94, 1765.469264879375),\n",
" (2077, '15:15', 10167.36, 1601.948659533785),\n",
" (2078, '15:30', 9783.48, 1438.42805418819),\n",
" (2079, '15:45', 9677.22, 1274.9074488426),\n",
" (2080, '16:00', 9336.18, 1111.386843497005),\n",
" (2081, '16:15', 9762.48, 861.397013953865),\n",
" (2082, '16:30', 9016.14, 611.40718441072),\n",
" (2083, '16:45', 9336.18, 361.41735486758),\n",
" (2084, '17:00', 9058.98, 111.42752532443501),\n",
" (2085, '17:15', 8867.039999999999, 83.57064399332499),\n",
" (2086, '17:30', 8184.96, 55.713762662215),\n",
" (2087, '17:45', 8206.380000000001, 27.856881331105),\n",
" (2088, '18:00', 7758.66, 0.0),\n",
" (2089, '18:15', 7822.5, 0.0),\n",
" (2090, '18:30', 7843.919999999999, 0.0),\n",
" (2091, '18:45', 8291.640000000001, 0.0),\n",
" (2092, '19:00', 7843.919999999999, 0.0),\n",
" (2093, '19:15', 8014.44, 0.0),\n",
" (2094, '19:30', 7865.34, 0.0),\n",
" (2095, '19:45', 7737.240000000001, 0.0),\n",
" (2096, '20:00', 6501.179999999999, 0.0),\n",
" (2097, '20:15', 5819.1, 0.0),\n",
" (2340, '09:00', 14472.78, 1230.584597860135),\n",
" (2341, '09:15', 14771.4, 3551.1879093608854),\n",
" (2342, '09:30', 14195.999999999998, 5871.79122086164),\n",
" (2343, '09:45', 15282.96, 8192.39453236239),\n",
" (2344, '10:00', 16774.8, 10512.997843863144),\n",
" (2359, '13:45', 14707.56, 5190.54350921443),\n",
" (2360, '14:00', 14430.36, 3261.8689231520248),\n",
" (2361, '14:15', 13961.22, 3351.6740571986447),\n",
" (2362, '14:30', 13087.62, 3441.4791912452697),\n",
" (2363, '14:45', 13620.18, 3531.2843252918897),\n",
" (2364, '15:00', 13769.7, 3621.0894593385096),\n",
" (2365, '15:15', 13875.96, 3541.607339001665),\n",
" (2366, '15:30', 12618.48, 3462.1252186648203),\n",
" (2367, '15:45', 12170.76, 3382.6430983279747),\n",
" (2368, '16:00', 12874.26, 3303.16097799113),\n",
" (2369, '16:15', 11829.72, 2585.523371709855),\n",
" (2370, '16:30', 11552.94, 1867.8857654285798),\n",
" (2371, '16:45', 11147.64, 1150.248159147305),\n",
" (2372, '17:00', 10956.12, 432.61055286603),\n",
" (2373, '17:15', 10295.04, 324.457914649525),\n",
" (2374, '17:30', 9485.28, 216.305276433015),\n",
" (2375, '17:45', 9357.18, 108.152638216505),\n",
" (2376, '18:00', 8760.36, 0.0),\n",
" (2377, '18:15', 9314.76, 0.0),\n",
" (2378, '18:30', 8930.88, 0.0),\n",
" (2379, '18:45', 8973.72, 0.0),\n",
" (2380, '19:00', 9016.14, 0.0),\n",
" (2381, '19:15', 8462.16, 0.0),\n",
" (2382, '19:30', 8504.58, 0.0),\n",
" (2383, '19:45', 8014.44, 0.0),\n",
" (2384, '20:00', 7140.42, 0.0),\n",
" (2385, '20:15', 6501.179999999999, 0.0),\n",
" (2422, '05:30', 8803.2, 0.0),\n",
" (2423, '05:45', 9549.12, 0.0),\n",
" (2424, '06:00', 11510.1, 0.0),\n",
" (2425, '06:15', 11872.56, 0.0),\n",
" (2426, '06:30', 12256.02, 0.0),\n",
" (2427, '06:45', 12852.84, 0.0),\n",
" (2428, '07:00', 13002.36, 0.0),\n",
" (2429, '07:15', 13258.14, 0.0),\n",
" (2430, '07:30', 14984.34, 0.0),\n",
" (2431, '07:45', 15709.26, 0.0),\n",
" (2432, '08:00', 15687.839999999998, 0.0),\n",
" (2433, '08:15', 15346.8, 181.82742768805),\n",
" (2434, '08:30', 15325.38, 363.6548553761),\n",
" (2435, '08:45', 15836.94, 545.482283064155),\n",
" (2436, '09:00', 15410.64, 727.3097107522051),\n",
" (2437, '09:15', 15154.86, 2085.747121760705),\n",
" (2438, '09:30', 15240.12, 3444.18453276921),\n",
" (2439, '09:45', 15666.42, 4802.62194377771),\n",
" (2440, '10:00', 14835.240000000002, 6161.059354786215),\n",
" (2441, '10:15', 15197.7, 7090.588259224604),\n",
" (2442, '10:30', 15219.12, 8020.117163662991),\n",
" (2443, '10:45', 15836.94, 8949.646068101374),\n",
" (2444, '11:00', 15581.16, 9879.174972539766),\n",
" (2445, '11:15', 16369.92, 8768.154265489606),\n",
" (2446, '11:30', 15304.38, 7657.13355843944),\n",
" (2447, '11:45', 15581.16, 6546.11285138928),\n",
" (2448, '12:00', 13897.38, 5435.09214433912),\n",
" (2449, '12:15', 13748.28, 4940.096009112725),\n",
" (2450, '12:30', 13556.34, 4445.099873886335),\n",
" (2451, '12:45', 14408.94, 3950.10373865994),\n",
" (2452, '13:00', 14515.62, 3455.107603433545),\n",
" (2453, '13:15', 14004.06, 5151.69236402099),\n",
" (2454, '13:30', 14025.48, 6848.277124608435),\n",
" (2455, '13:45', 14089.32, 8544.86188519588),\n",
" (2464, '16:00', 10764.18, 5377.323949391805),\n",
" (2465, '16:15', 10572.24, 4190.360440991005),\n",
" (2466, '16:30', 10529.820000000002, 3003.3969325902103),\n",
" (2467, '16:45', 10209.78, 1816.4334241894098),\n",
" (2468, '17:00', 9719.64, 629.469915788615),\n",
" (2469, '17:15', 10572.24, 472.10243684146),\n",
" (2470, '17:30', 9314.76, 314.734957894305),\n",
" (2471, '17:45', 9506.7, 157.36747894715),\n",
" (2472, '18:00', 8909.88, 0.0),\n",
" (2473, '18:15', 9378.6, 0.0),\n",
" (2474, '18:30', 8419.32, 0.0),\n",
" (2475, '18:45', 8419.32, 0.0),\n",
" (2476, '19:00', 8206.380000000001, 0.0),\n",
" (2477, '19:15', 8547.42, 0.0),\n",
" (2478, '19:30', 7865.34, 0.0),\n",
" (2479, '19:45', 7716.24, 0.0),\n",
" (2480, '20:00', 7055.159999999999, 0.0),\n",
" (2481, '20:15', 6693.12, 0.0),\n",
" (2518, '05:30', 8867.039999999999, 0.0),\n",
" (2519, '05:45', 9826.32, 0.0),\n",
" (2520, '06:00', 11872.56, 0.0),\n",
" (2521, '06:15', 11979.24, 0.0),\n",
" (2522, '06:30', 12000.24, 0.0),\n",
" (2523, '06:45', 13002.36, 0.0),\n",
" (2524, '07:00', 14792.819999999998, 0.0),\n",
" (2525, '07:15', 14813.82, 0.0),\n",
" (2526, '07:30', 13513.92, 0.0),\n",
" (2527, '07:45', 13705.44, 0.0),\n",
" (2528, '08:00', 13961.22, 0.0),\n",
" (2529, '08:15', 14174.580000000002, 1176.77271063016),\n",
" (2530, '08:30', 14323.68, 2353.54542126032),\n",
" (2531, '08:45', 14025.48, 3530.3181318904803),\n",
" (2532, '09:00', 14366.52, 4707.090842520644),\n",
" (2533, '09:15', 15048.6, 6307.25967210447),\n",
" (2534, '09:30', 13982.64, 7907.428501688295),\n",
" (2535, '09:45', 14472.78, 9507.597331272114),\n",
" (2562, '16:30', 10252.62, 2065.88421951914),\n",
" (2563, '16:45', 9996.84, 1413.6833326552999),\n",
" (2564, '17:00', 10018.26, 761.48244579146),\n",
" (2565, '17:15', 9954.0, 571.111834343595),\n",
" (2566, '17:30', 8995.140000000001, 380.74122289573),\n",
" (2567, '17:45', 9144.24, 190.370611447865),\n",
" (2568, '18:00', 9016.14, 0.0),\n",
" (2569, '18:15', 9080.4, 0.0),\n",
" (2570, '18:30', 8867.039999999999, 0.0),\n",
" (2571, '18:45', 8824.619999999999, 0.0),\n",
" (2572, '19:00', 8526.0, 0.0),\n",
" (2573, '19:15', 8462.16, 0.0),\n",
" (2574, '19:30', 8227.8, 0.0),\n",
" (2575, '19:45', 8313.06, 0.0),\n",
" (2576, '20:00', 6522.599999999999, 0.0),\n",
" (2577, '20:15', 6479.76, 0.0),\n",
" (2614, '05:30', 8930.88, 0.0),\n",
" (2615, '05:45', 9570.54, 0.0),\n",
" (2616, '06:00', 11403.42, 0.0),\n",
" (2617, '06:15', 12405.54, 0.0),\n",
" (2618, '06:30', 12725.16, 0.0),\n",
" (2619, '06:45', 13321.98, 0.0),\n",
" (2620, '07:00', 13364.4, 0.0),\n",
" (2621, '07:15', 13726.86, 0.0),\n",
" (2622, '07:30', 14664.72, 0.0),\n",
" (2623, '07:45', 14707.56, 0.0),\n",
" (2624, '08:00', 14515.62, 0.0),\n",
" (2625, '08:15', 14728.56, 1038.505349660305),\n",
" (2626, '08:30', 14792.819999999998, 2077.01069932061),\n",
" (2627, '08:45', 14494.2, 3115.516048980915),\n",
" (2628, '09:00', 14622.3, 4154.021398641225),\n",
" (2629, '09:15', 16156.98, 5845.41922623164),\n",
" (2630, '09:30', 14899.079999999998, 7536.817053822055),\n",
" (2631, '09:45', 14323.68, 9228.21488141247),\n",
" (2660, '17:00', 9933.0, 653.492534884665),\n",
" (2661, '17:15', 10508.4, 490.11940116349996),\n",
" (2662, '17:30', 9591.96, 326.74626744233),\n",
" (2663, '17:45', 9911.58, 163.373133721165),\n",
" (2664, '18:00', 8995.140000000001, 0.0),\n",
" (2665, '18:15', 8632.679999999998, 0.0),\n",
" (2666, '18:30', 8184.96, 0.0),\n",
" (2667, '18:45', 8611.26, 0.0),\n",
" (2668, '19:00', 8014.44, 0.0),\n",
" (2669, '19:15', 7929.18, 0.0),\n",
" (2670, '19:30', 7396.2, 0.0),\n",
" (2671, '19:45', 7289.94, 0.0),\n",
" (2672, '20:00', 5968.200000000001, 0.0),\n",
" (2673, '20:15', 5755.259999999999, 0.0),\n",
" (2710, '05:30', 10231.2, 0.0),\n",
" (2711, '05:45', 10018.26, 0.0),\n",
" (2712, '06:00', 11872.56, 0.0),\n",
" (2713, '06:15', 12235.02, 0.0),\n",
" (2714, '06:30', 12213.6, 0.0),\n",
" (2715, '06:45', 13982.64, 0.0),\n",
" (2716, '07:00', 13534.92, 0.0),\n",
" (2717, '07:15', 13407.24, 0.0),\n",
" (2718, '07:30', 15154.86, 0.0),\n",
" (2719, '07:45', 15495.9, 0.0),\n",
" (2720, '08:00', 15453.48, 0.0),\n",
" (2721, '08:15', 14878.08, 1089.255929376345),\n",
" (2722, '08:30', 15112.44, 2178.511858752695),\n",
" (2723, '08:45', 14579.46, 3267.7677881290397),\n",
" (2724, '09:00', 15069.6, 4357.02371750539),\n",
" (2725, '09:15', 15581.16, 5878.320654163785),\n",
" (2726, '09:30', 14878.08, 7399.61759082218),\n",
" (2727, '09:45', 15304.38, 8920.914527480576),\n",
" (2728, '10:00', 15389.64, 10442.211464138965),\n",
" (2757, '17:15', 9016.14, 629.4495748749),\n",
" (2758, '17:30', 8504.58, 419.6330499166),\n",
" (2759, '17:45', 8248.800000000001, 209.8165249583),\n",
" (2760, '18:00', 8909.88, 0.0),\n",
" (2761, '18:15', 8355.48, 0.0),\n",
" (2762, '18:30', 8334.06, 0.0),\n",
" (2763, '18:45', 7716.24, 0.0),\n",
" (2764, '19:00', 7268.52, 0.0),\n",
" (2765, '19:15', 7161.84, 0.0),\n",
" (2766, '19:30', 7034.160000000001, 0.0),\n",
" (2767, '19:45', 5712.42, 0.0),\n",
" (2792, '02:00', 5222.28, 0.0),\n",
" (2797, '03:15', 5073.18, 0.0),\n",
" (3013, '09:15', 14664.72, 7279.911313616205),\n",
" (3014, '09:30', 14131.74, 9153.004352955535),\n",
" (3045, '17:15', 9144.24, 576.6649037874749),\n",
" (3046, '17:30', 8526.0, 384.44326919164996),\n",
" (3047, '17:45', 8014.44, 192.22163459582498),\n",
" (3048, '18:00', 8568.84, 0.0),\n",
" (3049, '18:15', 8163.540000000001, 0.0),\n",
" (3050, '18:30', 8248.800000000001, 0.0),\n",
" (3051, '18:45', 7630.98, 0.0),\n",
" (3052, '19:00', 7843.919999999999, 0.0),\n",
" (3053, '19:15', 7801.5, 0.0),\n",
" (3054, '19:30', 7972.02, 0.0),\n",
" (3055, '19:45', 7268.52, 0.0),\n",
" (3056, '20:00', 6373.08, 0.0),\n",
" (3057, '20:15', 5499.48, 0.0),\n",
" (3094, '05:30', 8547.42, 0.0),\n",
" (3095, '05:45', 9378.6, 0.0),\n",
" (3096, '06:00', 10572.24, 0.0),\n",
" (3097, '06:15', 11190.48, 0.0),\n",
" (3098, '06:30', 11211.9, 0.0),\n",
" (3099, '06:45', 12085.5, 0.0),\n",
" (3100, '07:00', 12533.22, 0.0),\n",
2024-05-07 10:27:45 +02:00
" ...]"
2024-05-06 19:23:42 +02:00
]
},
2024-05-07 20:20:09 +02:00
"execution_count": 8,
2024-05-06 19:23:42 +02:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
2024-05-07 10:27:45 +02:00
"energySystem.unmet"
2024-05-06 19:23:42 +02:00
]
},
{
"cell_type": "code",
2024-05-07 20:20:09 +02:00
"execution_count": 9,
2024-05-06 19:23:42 +02:00
"metadata": {},
"outputs": [
{
"data": {
2024-05-07 20:20:09 +02:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAABeIAAAW/CAYAAADAb4MbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACfzUlEQVR4nOzdd3hUZdo/8HuSQCgaLBCKharSVBRXxYaogIp11VVs2Bs27L66YlkXe1d0dxVs2MvaERRUBHvvgCD7rgIqAjZacn5/+GNehwRMMIcJ+Plc17kucuaZM/ecPIz4zZ3nySRJkgQAAAAAAJCKgnwXAAAAAAAAKzJBPAAAAAAApEgQDwAAAAAAKRLEAwAAAABAigTxAAAAAACQIkE8AAAAAACkSBAPAAAAAAApEsQDAAAAAECKBPEAAAAAAJAiQTwALMEPP/wQRxxxRDRr1iwymUycfPLJMXny5MhkMjF06NB8l8dyqlWrVnHIIYfku4wVmntcO2QymTj//POrNDZf37P//Oc/Ua9evXj55Zez57bddtvo3LnzMq9lRTd//vxYa6214qabbsp3KQAAy5wgHoBlbujQoZHJZHKO0tLS6NGjRzz99NP5Li/H3//+9xg6dGgce+yxceedd8ZBBx1U6binnnqqymFTxJJDnoVB/xVXXLE0JVfZ3//+93j00UdTfY00jR49usI8Wm211WLzzTePu+++O9/lLTcWzreFR2FhYay99tqx5557xjvvvBMREQ8//HBkMpn417/+tdjrjBgxIjKZTFx33XXLqPKasegc+vVxzDHH5Ix9/PHHo3v37lFaWhoNGjSINm3axF/+8pd45plncsZ9/fXXcdJJJ0X79u2jfv36UVpaGptuummceeaZ8cMPP1SprokTJ8bRRx8dbdq0iXr16kVJSUlsueWWce2118bPP/9cY+9/WRs7dmycf/75MXPmzHyXknXhhRfGZpttFltuuWW1n9uqVavFzp8dd9wxO+6QQw6JlVZaabHXWWmllXJ+CLHo51thYWGUlpbG3nvvHR9//PFir/P+++9HJpOJ1157rdrvZVmoU6dOnHLKKXHxxRfHnDlz8l0OAMAyVZTvAgD447rwwgujdevWkSRJTJs2LYYOHRo777xzPP7447HLLrvku7yIiHj++edj8803j4EDB2bPJUkSP//8c9SpUyd77qmnnoobb7yxWmF8vv3973+PvffeO/bYY498l/K7nHjiifGnP/0pIiK+/fbbuO++++LAAw+MmTNnRv/+/fNc3fKjb9++sfPOO0dZWVl8/PHHMXjw4Hj66afjlVdeiT59+kSjRo1i2LBhccQRR1T6/GHDhkVhYWHst99+y7jy369nz55x8MEHVzi/7rrrZv98xRVXxOmnnx7du3ePs88+Oxo0aBATJkyIkSNHxr333psNXWfMmBGbbLJJzJ49Ow477LBo3759fPvtt/Hee+/F4MGD49hjj11iIBsR8eSTT8Y+++wTxcXFcfDBB0fnzp1j3rx5MWbMmDj99NPjww8/jH/84x81exNS8vPPP0dR0f/9L8fYsWPjggsuiEMOOSRWWWWVnLGffvppFBQs2z6hr7/+Om6//fa4/fbbl/oaXbp0iVNPPbXC+RYtWvye0iLi/z7f5s+fH++9917cfPPNMXr06Pjggw+iWbNmFcY/+eSTUVpamv1MrI0OPfTQOOuss2LYsGFx2GGH5bscAIBlRhAPQN7stNNOsckmm2S/Pvzww6Np06Zxzz331Jogfvr06dGxY8ecc5lMJurVq5eniljU1ltvHXvvvXf262OPPTbatGkTw4YNE8RXw8YbbxwHHnhg9ustt9wydttttxg8eHDccsstsffee8eQIUPiyy+/rBAwzpkzJx555JHo2bNnlJaWLuvSf7d11103570vasGCBXHRRRdFz54949lnn63w+PTp07N/vvXWW2PKlCnx8ssvxxZbbJEzbvbs2VG3bt0l1jJp0qTYb7/9omXLlvH8889H8+bNs4/1798/JkyYEE8++WRV31reVeezsri4OMVKKnfXXXdFUVFR7Lrrrkt9jTXWWGOJ8+f3WPTzbb311otjjz027rjjjjjjjDMqjH/qqadip512ikwmk0o9SytJkpgzZ07Ur18/VllllejVq1cMHTpUEA8A/KFYmgaAWmOVVVaJ+vXr53RPRkSUl5fHNddcE506dYp69epF06ZN4+ijj47vvvsuZ1yrVq1il112iTFjxsSmm24a9erVizZt2sQdd9xR4bVmzpwZJ598cqy11lpRXFwc7dq1i0svvTTKy8sj4v+WBZg0aVI8+eST2eUBJk+eXGGN+EMOOSRuvPHGiMhd5qKm/VbNC11xxRWxxRZbxOqrrx7169ePrl27xoMPPpgzJpPJxI8//hi33357tt6FyyKcf/75kclk4rPPPosDDzwwGjVqFE2aNIm//vWvkSRJ/Oc//4ndd989SkpKolmzZnHllVfmXHvevHlx3nnnRdeuXaNRo0bRsGHD2HrrrWPUqFE54369BM/VV18dLVu2jPr160f37t3jgw8+WOr7VLdu3Vh11VUrzKMhQ4bEdtttF6WlpVFcXBwdO3aMwYMHV3j+G2+8Eb17947GjRtH/fr1o3Xr1hXCoqrOySRJ4m9/+1usueaa0aBBg+jRo0d8+OGHVX4vP/74Y5x66qnZ7/l6660XV1xxRSRJkjMuk8nE8ccfH48++mh07tw5iouLo1OnThWWTKmO7bbbLiJ+CYYjIg488MAoLy+Pe++9t8LYJ598MmbNmhUHHHDAEq/5xRdfxHHHHRfrrbde1K9fP1ZfffXYZ599YvLkyTnjFi5f9fLLL8cpp5wSTZo0iYYNG8aee+4ZX3/9dc7Y33uPq+Kbb76J2bNnL3bpkl//8GHixIlRWFgYm2++eYVxJSUlvxlMX3bZZfHDDz/ErbfemhPCL9SuXbs46aSTsl9XdV4v/Hx89tlno0uXLlGvXr3o2LFjPPzwwznjZsyYEaeddlqsv/76sdJKK0VJSUnstNNO8e6771a45pw5c+L888+PddddN+rVqxfNmzePP//5zzFx4sTsmF+vEX/++efH6aefHhERrVu3zvlcXVjjomvEV/Vz7957742uXbvGyiuvHCUlJbH++uvHtddeu/gb/f89+uijsdlmm/3mbylERDz77LPRoEGD6Nu3byxYsOA3x6dh6623jojIuccLzZw5M8aOHRt9+vSJJEmiVatWsfvuu1cYN2fOnGjUqFEcffTR2XNz586NgQMHRrt27aK4uDjWWmutOOOMM2Lu3Lk5z63ufBs+fHhssskmUb9+/bjllluyj/fs2TPGjBkTM2bMWOp7AQCwvNERD0DezJo1K7755ptIkiSmT58e119/ffzwww8VOguPPvroGDp0aBx66KFx4oknxqRJk+KGG26It99+O15++eWcJWImTJgQe++9dxx++OHRr1+/uO222+KQQw6Jrl27RqdOnSIi4qefforu3bvHf//73zj66KNj7bXXjrFjx8bZZ58dX331VVxzzTXRoUOHuPPOO2PAgAGx5pprZpcdaNKkSYUg8Oijj44vv/wyRowYEXfeeWeV339ZWVl88803Fc4vGuZWteaFrr322thtt93igAMOiHnz5sW9994b++yzTzzxxBPRp0+fiIi4884744gjjohNN900jjrqqIiIaNu2bc5r7rvvvtGhQ4e45JJL4sknn4y//e1vsdpqq8Utt9wS2223XVx66aVx9913x2mnnRZ/+tOfYptttomIX7p+//Wvf0Xfvn3jyCOPjO+//z5uvfXW6N27d7z22mvRpUuXnNe544474vvvv4/+/fvHnDlz4tprr43tttsu3n///WjatOlv3sfvv/8+ex9nzJgRw4YNiw8++CBuvfXWnHGDBw+OTp06xW677RZFRUXx+OOPx3HHHRfl5eXZzvnp06dHr169okmTJnHWWWfFKqusEpMnT64QVlZ1Tp533nnxt7/9LXbeeefYeeed46233opevXrFvHnzfvN9JUkSu+22W4waNSoOP/zw6NKlSwwfPjxOP/30+O9
2024-05-06 19:23:42 +02:00
"text/plain": [
2024-05-07 20:20:09 +02:00
"<Figure size 2000x1800 with 2 Axes>"
2024-05-06 19:23:42 +02:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
2024-05-04 09:59:27 +02:00
"source": [
2024-05-07 20:20:09 +02:00
"import matplotlib.ticker as ticker\n",
2024-05-04 09:59:27 +02:00
"df=results\n",
2024-05-04 16:35:55 +02:00
"df = df.astype(float)\n",
2024-05-06 19:23:42 +02:00
"df.index = df.index / 1000\n",
"df.columns = df.columns / 1000\n",
2024-05-07 10:27:45 +02:00
"min_value = df.min().min()\n",
"max_value = df.max().max()\n",
"max_scale = max(abs(min_value/1000), abs(max_value/1000))\n",
2024-05-06 19:23:42 +02:00
"plt.figure(figsize=figure_size)\n",
2024-05-07 10:27:45 +02:00
"cmap = sns.color_palette(\"coolwarm\", as_cmap=True)\n",
2024-05-07 20:20:09 +02:00
"ax = sns.heatmap(df/1000, fmt=\".1f\", cmap=cmap, vmin=-max_scale, vmax=max_scale, annot=annot_benefit)\n",
"ax.xaxis.set_major_formatter(ticker.FuncFormatter(lambda x, _: f\"{x:.2f}\"))\n",
"# ax.yaxis.set_major_formatter(ticker.FormatStrFormatter('%.1f'))\n",
"plt.title(title_benefit)\n",
2024-05-06 19:23:42 +02:00
"plt.gca().invert_yaxis()\n",
"plt.xlabel('ESS Capacity (MWh)')\n",
2024-05-07 10:27:45 +02:00
"plt.ylabel('PV Capacity (MW)')\n",
"plt.savefig('plots/benefit.png')"
2024-05-04 09:59:27 +02:00
]
},
{
"cell_type": "code",
2024-05-07 20:20:09 +02:00
"execution_count": 10,
2024-05-04 09:59:27 +02:00
"metadata": {},
"outputs": [
{
"data": {
2024-05-07 20:20:09 +02:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAABdIAAAW/CAYAAAConAEjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACkbklEQVR4nOzdd5hdZbk34N9OhkxCSIN0ShqHGooiTVpCCxylCShFQ+giRZogHiVwUCKgyAEVjgKhowIGEBSkhCDSm0gLCSTkAOmkkJA++/uDj9EhyWIGZthhct/XtS6y37XWu581ezD4m2fet1Qul8sBAAAAAACWqUWlCwAAAAAAgBWZIB0AAAAAAAoI0gEAAAAAoIAgHQAAAAAACgjSAQAAAACggCAdAAAAAAAKCNIBAAAAAKCAIB0AAAAAAAoI0gEAAAAAoIAgHQDgE3jqqafy5S9/OW3btk2pVMrzzz/f4Dl69+6dr371q41fHM1GqVTKOeecU/v6mmuuSalUyvjx42vHBgwYkAEDBtS+Hj9+fEqlUq655prPrE4AAGjuBOkAQKN4/fXXc+yxx6Zv375p3bp12rdvn+222y7/8z//k3nz5jX6+73//vs555xz8tBDDzX63B9n0aJFOfDAA/Puu+/mF7/4Ra6//vr06tVrmde+/PLLOeecc+oEn5+1AQMGpFQq1R6rr756ttxyy1x99dWpqanJokWL0rlz52y//fbLnaNcLmfttdfOF7/4xcL3mjNnToYOHZr+/funbdu2WWONNbL55pvnu9/9bt55553GfrQkyfnnn5/bb7+9SeZuqMsuuywdOnTIokWLKl1KRQwZMqTO99q/H61bt650eQAA8IlVVboAAODz7+67786BBx6Y6urqDB48OP3798/ChQvzyCOP5Hvf+15eeuml/OY3v2nU93z//fdz7rnnJkmdbtzPwuuvv54333wzv/3tb3PUUUcVXvvyyy/n3HPPzYABA9K7d+/PpsBlWGuttTJs2LAkydSpU3PdddflyCOPzGuvvZaf/vSnOfDAA/O///u/efPNN5f5Q4GHH344b731Vk455ZTlvseiRYuy44475tVXX81hhx2WE088MXPmzMlLL72Um266Kfvtt1969uzZ6M92/vnn54ADDsi+++7b6HM31N13353dd989q6yySqPMN2/evFRVNew/2Xv16pV58+Y1Wg0NVV1dnSuvvHKp8ZYtW1agGgAAaByCdADgUxk3blwOOuig9OrVKw8++GB69OhRe+7444/P2LFjc/fdd1ewwsY3ZcqUJEnHjh0rW0gDdOjQId/85jdrXx977LFZf/3188tf/jLnnXdeDj300FxxxRW5+eab8/3vf3+p+2+66aa0aNEiBx100HLf4/bbb89zzz2XG2+8MYccckidc/Pnz8/ChQsb74FWQO+//35GjRqVyy+/vNHm/CRd3JXu/q6qqqrzvdbYyuVy5s+fnzZt2jTZewAAwEdZ2gUA+FQuvPDCzJkzJ1dddVWdEP1D6667br773e/Wvl68eHHOO++89OvXL9XV1endu3d+8IMfZMGCBXXue/rppzNo0KB07tw5bdq0SZ8+fXLEEUck+WAN6C5duiRJzj333NqlIz5cS3rSpEk5/PDDs9Zaa6W6ujo9evTIPvvsU6/lVR588MHssMMOadu2bTp27Jh99tknr7zySu35IUOGZKeddkqSHHjggSmVSsvtiL/mmmty4IEHJkkGDhxYW+dHl6N55JFHstVWW6V169bp27dvrrvuuqXmmjlzZk4++eSsvfbaqa6uzrrrrpsLLrggNTU1H/tMy7Lqqqtmm222ydy5czN16tRst9126d27d2666aalrl20aFFuvfXWDBw4sLCj/PXXX0+SbLfddkud+3C5nyQZPnx4SqVSnnvuuaWuO//889OyZcu8/fbbSZIxY8Zk//33T/fu3dO6deustdZaOeiggzJr1qwkH4TGc+fOzbXXXlv79R0yZEjtfG+//XaOOOKIdOvWLdXV1dl4441z9dVX13nPhx56KKVSKX/4wx9y7rnnZs0110y7du1ywAEHZNasWVmwYEFOPvnkdO3aNauttloOP/zwpb5fk+SBBx7IggULsueeeyb513rmjzzySE466aR06dIlHTt2zLHHHpuFCxdm5syZGTx4cDp16pROnTrljDPOSLlcrjPnR9dIr4/lrZH+cd/bSXLOOeekVCpl7NixGTJkSDp27JgOHTrk8MMPz/vvv9+gOop8+D4ftaw14D/cS+Dee+/Nl770pbRp0yb/+7//22i1AABAfehIBwA+lT/96U/p27dvvvzlL9fr+qOOOirXXnttDjjggJx22ml54oknMmzYsLzyyisZMWJEkg86vnffffd06dIl3//+99OxY8eMHz8+f/zjH5MkXbp0yeWXX57jjjsu++23X772ta8lSTbddNMkyf7775+XXnopJ554Ynr37p0pU6bkvvvuy4QJEwqXV7n//vuz5557pm/fvjnnnHMyb968XHbZZdluu+3y7LPPpnfv3jn22GOz5ppr5vzzz89JJ52ULbfcMt26dVvmfDvuuGNOOumkXHrppfnBD36QDTfcMElq/5kkY8eOzQEHHJAjjzwyhx12WK6++uoMGTIkW2yxRTbeeOMkH3Q677TTTnn77bdz7LHHZp111smjjz6as846KxMnTswll1xSr6/9R73xxhtp2bJlOnbsmFKplEMOOSTnn39+Xnrppdr3TpJ77rkn7777bg499NDC+T5cEua6667LD3/4w2UGpUlywAEH5Pjjj8+NN96YL3zhC3XO3XjjjRkwYEDWXHPNLFy4MIMGDcqCBQty4oknpnv37nn77bdz1113ZebMmenQoUOuv/76HHXUUdlqq61yzDHHJEn69euXJJk8eXK22WablEqlnHDCCenSpUv+8pe/5Mgjj8zs2bNz8skn13nvYcOGpU2bNvn+97+fsWPH5rLLLssqq6ySFi1aZMaMGTnnnHPy+OOP55prrkmfPn1y9tln17n/z3/+c7bYYoulvh8+rP3cc8/N448/nt/85jfp2LFjHn300ayzzjo5//zz8+c//zkXXXRR+vfvn8GDBxd+nT+J+nxv/7uvf/3r6dOnT4YNG5Znn302V155Zbp27ZoLLrigXu83bdq0pcZatWpV+8OUhho9enQOPvjgHHvssTn66KOz/vrrf6J5AADgEysDAHxCs2bNKicp77PPPvW6/vnnny8nKR911FF1xk8//fRykvKDDz5YLpfL5REjRpSTlJ966qnlzjV16tRykvLQoUPrjM+YMaOcpHzRRRc16FnK5XJ58803L3ft2rU8ffr02rF//OMf5RYtWpQHDx5cOzZy5MhykvItt9zysXPecsst5STlkSNHLnWuV69e5STlhx9+uHZsypQp5erq6vJpp51WO3beeeeV27ZtW37ttdfq3P/973+/3LJly/KECRMKa9hpp53KG2ywQXnq1KnlqVOnll955ZXySSedVE5S3muvvWqve+mll8pJymeddVad+w866KBy69aty7NmzSp8n/fff7+8/vrrl5OUe/XqVR4yZEj5qquuKk+ePHmpaw8++OByz549y0uWLKkde/bZZ8tJysOHDy+Xy+Xyc889V6+vc9u2bcuHHXbYUuNHHnlkuUePHuVp06Yt9TwdOnQov//+++Vy+V+fZ//+/csLFy6sU2OpVCrvueeede7fdttty7169Vrq/dZZZ50634/Dhw8vJykPGjSoXFNTU+f+UqlU/va3v107tnjx4vJaa61V3mmnnerM+dHv8Q/nHDduXO3YTjvtVOe+cePG1fk6lsv1/94eOnRoOUn5iCOOqFPHfvvtV15jjTWWeuaPOuyww8pJlnkMGjRoqff5qGU934f/ntxzzz0f+/4AANBULO0CAHxis2fPTpK0a9euXtf/+c9/TpKceuqpdcZPO+20JKldS/3DtcfvuuuuLFq0qEE1tWnTJq1atcpDDz2UGTNm1Pu+iRMn5vnnn8+QIUOy+uqr145vuumm2W233Wprb2wbbbRRdthhh9rXXbp0yfrrr5833ni
2024-05-04 09:59:27 +02:00
"text/plain": [
2024-05-07 20:20:09 +02:00
"<Figure size 2000x1800 with 2 Axes>"
2024-05-04 09:59:27 +02:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
2024-05-06 19:23:42 +02:00
"\n",
2024-05-07 10:27:45 +02:00
"df = costs\n",
"df = df.astype(int)\n",
2024-05-06 19:23:42 +02:00
"df.index = df.index / 1000\n",
"df.columns = df.columns / 1000\n",
"\n",
"plt.figure(figsize=figure_size)\n",
2024-05-07 20:20:09 +02:00
"sns.heatmap(df/1000000, fmt=\".1f\", cmap='viridis', annot=annot_cost)\n",
"plt.title(title_cost)\n",
2024-05-04 09:59:27 +02:00
"plt.gca().invert_yaxis()\n",
"plt.xlabel('ESS Capacity (MWh)')\n",
"plt.ylabel('PV Capacity (MW)')\n",
2024-05-07 10:27:45 +02:00
"plt.savefig('plots/costs.png')\n",
2024-05-04 09:59:27 +02:00
"\n",
" # pv = pv_config(capacity=100000,cost_per_kW=200,lifetime=25,loss=0.95)\n",
" # ess = ess_config(capacity=100000,cost_per_kW=300,lifetime=25,loss=0.95,charge_power=100000,discharge_power=100000)\n",
" # grid = grid_config(price_schedule=price_schedule, capacity=5000, grid_loss=0.95, sell_price=0.4)\n",
" # grid = grid_config(capacity=50000, grid_loss=0.95, sell_price=0.4)\n",
"\n",
"\n",
" # print(benefit)"
]
2024-05-06 19:23:42 +02:00
},
{
"cell_type": "code",
2024-05-07 10:27:45 +02:00
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
2024-05-07 20:20:09 +02:00
"execution_count": 11,
2024-05-06 19:23:42 +02:00
"metadata": {},
"outputs": [
{
"data": {
2024-05-07 20:20:09 +02:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAABdsAAAW/CAYAAABUiSrpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACf9UlEQVR4nOzdd5jU9bk/7tfA0qt0sACiothFJXasoIkltmBUUCPYWzTH+MsxqNGYGDUeTTTxq6IhaGI39ljAEhHU6EliRQWsCBELilLn98ceNq6ggp+FQfa+r2sumU/bZ2YHxn3tM++nVC6XywEAAAAAAL62BpUuAAAAAAAAvumE7QAAAAAAUJCwHQAAAAAAChK2AwAAAABAQcJ2AAAAAAAoSNgOAAAAAAAFCdsBAAAAAKAgYTsAAAAAABQkbAcAAAAAgIKE7QBAYaVSKccee2ydXe/qq69OqVTKk08++ZXH9u/fP/3796+5P2nSpJRKpVx99dU1284444yUSqU6q68uvPPOO9l3333Tvn37lEqlXHTRRZUu6RtlefyeLuq1tzgWvN4nTZq0VOr6KmPGjEmpVMqYMWMq8vWXlUMOOSQ9evSodBkAAKzAhO0AsIJaEOAtuDVt2jRrrbVWjj322LzzzjuVLq/ifv7zn+fWW2+t2Nc/6aSTcu+99+a0007LyJEjM3DgwIrVsjTdddddOeOMMypdxhKrdN2XXnrpEof2AABAZQnbAWAFd9ZZZ2XkyJH5zW9+ky233DKXXXZZtthii8ycObPSpdWJv/71r/nrX//6pcf893//dz755JNa2yodtj/44IPZc889c8opp+Sggw7K2muvXbFalqa77rorZ555ZqXLWGJfp+7u3bvnk08+ycEHH7xE5x188MH55JNP0r1795ptwnYAAPjmqap0AQDA0rXrrrtm0003TZIcfvjhad++fS688MLcdtttOeCAAxZ5zscff5wWLVosyzK/tsaNG3/lMVVVVamqWr7+t2fq1Klp27ZtpcugDsydOzfz589P48aN07Rp0yU+v2HDhmnYsOFSqAwAAFiWdLYDQD2zww47JEkmTpyYpHod45YtW+aVV17JbrvtllatWuXAAw9MUh26n3zyyVl11VXTpEmT9O7dO+eff37K5fIirz1q1Kj07t07TZs2Td++ffPwww/X2j958uQcffTR6d27d5o1a5b27dtnv/32+8K1qmfOnJkjjjgi7du3T+vWrTN48OC89957tY75/Jrti/L59b1LpVI+/vjjXHPNNTXL7BxyyCEZPXp0SqVSbrnlloWuce2116ZUKmXs2LFf+rVeffXV7LfffmnXrl2aN2+eb33rW7nzzjtr9i9Y3qdcLue3v/1tzdf/Il+0nvai1gdf8L188803s9dee6Vly5bp2LFjTjnllMybN2+hc88///z89re/zeqrr57mzZtnl112yeuvv55yuZyf/exnWWWVVdKsWbPsueeemT59+kK13X333dlmm23SokWLtGrVKt/+9rfz7LPP1qrnt7/9bc1z/lWPdXGv+2X++Mc/pm/fvmnWrFnatWuXQYMG5fXXX1/ouHHjxmW33XbLSiutlBYtWmSDDTbI//zP/3xl3Z997i666KL06tUrTZo0yXPPPfeFa7a/8MIL2X///dOxY8c0a9YsvXv3zk9+8pOa/Z9fs71Hjx559tln89BDD9V87f79++fVV19NqVTKr3/964Uez2OPPZZSqZTrrrvuS5+fN954I3vttVdatGiRTp065aSTTsqsWbMWeey4ceMycODAtGnTJs2bN892222Xv/3tb7WOWfB366WXXspBBx2UNm3apGPHjjn99NNTLpfz+uuvZ88990zr1q3TpUuXXHDBBbXOnz17dn7605+mb9++adOmTVq0aJFtttkmo0ePrnXcZ5/3yy+/vOZ532yzzfLEE08sVPutt96a9dZbL02bNs166623yL/TSfKnP/0pffv2TatWrdK6deusv/76Na8DAABYUstXixcAsNS98sorSZL27dvXbJs7d24GDBiQrbfeOueff36aN2+ecrmcPfbYI6NHj84PfvCDbLTRRrn33nvzox/9KG+++eZCgd9DDz2UP//5zzn++OPTpEmTXHrppRk4cGDGjx+f9dZbL0nyxBNP5LHHHsugQYOyyiqrZNKkSbnsssvSv3//PPfcc2nevHmtax577LFp27ZtzjjjjLz44ou57LLLMnny5JoA+usaOXJkDj/88Gy++eYZNmxYkqRXr1751re+lVVXXTWjRo3Kd7/73VrnjBo1Kr169coWW2zxhdd95513suWWW2bmzJk5/vjj0759+1xzzTXZY489cuONN+a73/1utt1224wcOTIHH3xwdt555wwePPhrP45FmTdvXgYMGJB+/frl/PPPz/33358LLrggvXr1ylFHHbXQY5o9e3aOO+64TJ8+Peedd17233//7LDDDhkzZkxOPfXUvPzyy7nkkktyyimn5Kqrrqo5d+TIkRkyZEgGDBiQX/7yl5k5c2Yuu+yybL311nn66afTo0ePHHHEEXnrrbdy3333ZeTIkYtV/+Jc94ucc845Of3007P//vvn8MMPz7Rp03LJJZdk2223zdNPP13zSYL77rsv3/nOd9K1a9eccMIJ6dKlS55//vnccccdOeGEExar7hEjRuTTTz/NsGHD0qRJk7Rr1y7z589f6Lh//OMf2WabbdKoUaMMGzYsPXr0yCuvvJLbb78955xzziKvfdFFF+W4445Ly5Yta0L5zp07Z/XVV89WW22VUaNG5aSTTqp1zqhRo9KqVavsueeeX/j8fPLJJ9lxxx3z2muv5fjjj0+3bt0ycuTIPPjggwsd++CDD2bXXXdN3759M3z48DRo0CAjRozIDjvskEceeSSbb755reO/973vZZ111skvfvGL3HnnnTn77LPTrl27/P73v88OO+yQX/7ylxk1alROOeWUbLbZZtl2222TJB9++GGuuOKKHHDAARk6dGhmzJiRK6+8MgMGDMj48eOz0UYb1fo61157bWbMmJEjjjgipVIp5513Xvbee++8+uqradSoUZLqpaX22Wef9OnTJ+eee27efffdHHrooVlllVVqXeu+++7LAQcckB133DG//OUvkyTPP/98/va3v+WEE074wucRAAC+UBkAWCGNGDGinKR8//33l6dNm1Z+/fXXy3/605/K7du3Lzdr1qz8xhtvlMvlcnnIkCHlJOUf//jHtc6/9dZby0nKZ599dq3t++67b7lUKpVffvnlmm1JyknKTz75ZM22yZMnl5s2bVr+7ne/W7Nt5syZC9U5duzYcpLyH/7wh4Vq79u3b3n27Nk1288777xykvJtt91Ws2277bYrb7fddjX3J06cWE5SHjFiRM224cOHlz//vz0tWrQoDxkyZKF6TjvttHKTJk3K77//fs22qVOnlquqqsrDhw9f6PjPOvHEE8tJyo888kjNthkzZpR79uxZ7tGjR3nevHk125OUjznmmC+9XrlcLo8ePbqcpDx69Oha2xf1OBd8L88666xax2688cblvn37LnRux44daz3O0047rZykvOGGG5bnzJlTs/2AAw4oN27cuPzpp5/WPKa2bduWhw4dWuvrTJkypdymTZta24855piFnvsvsiTX/fz3dNKkSeWGDRuWzznnnFrn/vOf/yxXVVXVbJ87d265Z8+e5e7du5ffe++9WsfOnz//K+te8Ny1bt26PHXq1EXu++z3ZNttty23atWqPHny5C/8Wgte7xMnTqzZtu6669Z6XS/w+9//vpyk/Pzzz9dsmz17drlDhw6LfD1/1kUXXVROUr7++utrtn388cflNdZYo9ZrbP78+eU111yzPGDAgFp1zpw5s9yzZ8/yzjvvXLNtwfdh2LBhNdvmzp1bXmWVVcqlUqn8i1/8omb7e++9V27WrFmtOufOnVueNWtWrTrfe++9cufOncuHHXZYzbYFz2379u3L06dPr9l+2223lZOUb7/99pptG220Ublr1661Xtt//etfy0nK3bt3r9l2wgknlFu3bl2eO3fulz5vAACwuCw
2024-05-06 19:23:42 +02:00
"text/plain": [
2024-05-07 20:20:09 +02:00
"<Figure size 2000x1800 with 2 Axes>"
2024-05-06 19:23:42 +02:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
2024-05-07 10:27:45 +02:00
"from matplotlib.colors import LinearSegmentedColormap\n",
2024-05-06 19:23:42 +02:00
"df = overload_cnt\n",
"df = df.astype(int)\n",
"df.index = df.index / 1000\n",
"df.columns = df.columns / 1000\n",
2024-05-07 10:27:45 +02:00
"min_value = df.min().min()\n",
"max_value = df.max().max()\n",
"max_scale = max(abs(min_value/1000), abs(max_value/1000))\n",
2024-05-06 19:23:42 +02:00
"\n",
"plt.figure(figsize=figure_size)\n",
2024-05-07 10:27:45 +02:00
"cmap = LinearSegmentedColormap.from_list(\"\", [\"white\", \"blue\"])\n",
2024-05-07 20:20:09 +02:00
"ax = sns.heatmap(df/(4*24*365), fmt=\".00%\", cmap=cmap, vmin=0, vmax=1, annot=annot_unmet)\n",
"cbar = ax.collections[0].colorbar\n",
"cbar.set_ticks([0, 0.25, 0.5, 0.75, 1])\n",
"cbar.set_ticklabels(['0%', '25%', '50%', '75%', '100%'])\n",
"cbar.ax.yaxis.set_major_formatter(ticker.FuncFormatter(lambda x, pos: f'{x:.0%}'))\n",
"\n",
"plt.title(title_unmet)\n",
2024-05-06 19:23:42 +02:00
"plt.gca().invert_yaxis()\n",
"plt.xlabel('ESS Capacity (MWh)')\n",
2024-05-07 10:27:45 +02:00
"plt.ylabel('PV Capacity (MW)')\n",
"plt.savefig('plots/unmet.png')"
2024-05-06 19:23:42 +02:00
]
2024-05-04 09:59:27 +02:00
}
],
"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",
2024-05-07 20:20:09 +02:00
"version": "3.11.9"
2024-05-04 09:59:27 +02:00
}
},
"nbformat": 4,
"nbformat_minor": 2
}