update the csv file output code and add a progress bar in the code
This commit is contained in:
parent
3740136d7c
commit
df2f953678
598
main.ipynb
598
main.ipynb
File diff suppressed because one or more lines are too long
63
main.py
63
main.py
@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
|
|
||||||
# In[39]:
|
# In[83]:
|
||||||
|
|
||||||
|
|
||||||
import os
|
import os
|
||||||
@ -28,7 +28,7 @@ folder_path = 'plots'
|
|||||||
clear_folder_make_ess_pv(folder_path)
|
clear_folder_make_ess_pv(folder_path)
|
||||||
|
|
||||||
|
|
||||||
# In[40]:
|
# In[84]:
|
||||||
|
|
||||||
|
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
@ -39,7 +39,7 @@ from EnergySystem import EnergySystem
|
|||||||
from config import pv_config, grid_config, ess_config
|
from config import pv_config, grid_config, ess_config
|
||||||
|
|
||||||
|
|
||||||
# In[41]:
|
# In[85]:
|
||||||
|
|
||||||
|
|
||||||
import json
|
import json
|
||||||
@ -53,7 +53,7 @@ with open('config.json', 'r') as f:
|
|||||||
|
|
||||||
|
|
||||||
time_interval = js_data["time_interval"]["numerator"] / js_data["time_interval"]["denominator"]
|
time_interval = js_data["time_interval"]["numerator"] / js_data["time_interval"]["denominator"]
|
||||||
print(time_interval)
|
# print(time_interval)
|
||||||
|
|
||||||
pv_loss = js_data["pv"]["loss"]
|
pv_loss = js_data["pv"]["loss"]
|
||||||
pv_cost_per_kW = js_data["pv"]["cost_per_kW"]
|
pv_cost_per_kW = js_data["pv"]["cost_per_kW"]
|
||||||
@ -116,7 +116,7 @@ ess_capacities = np.linspace(ess_begin, ess_end, ess_groups)
|
|||||||
# overload_cnt = pd.DataFrame(index=pv_capacities, columns= ess_capacities)
|
# overload_cnt = pd.DataFrame(index=pv_capacities, columns= ess_capacities)
|
||||||
|
|
||||||
|
|
||||||
# In[42]:
|
# In[86]:
|
||||||
|
|
||||||
|
|
||||||
hour_demand = []
|
hour_demand = []
|
||||||
@ -132,7 +132,7 @@ plt.savefig('plots/demand.png')
|
|||||||
plt.close()
|
plt.close()
|
||||||
|
|
||||||
|
|
||||||
# In[43]:
|
# In[87]:
|
||||||
|
|
||||||
|
|
||||||
def draw_results(results, filename, title_benefit, annot_benefit=False, figure_size=(10, 10)):
|
def draw_results(results, filename, title_benefit, annot_benefit=False, figure_size=(10, 10)):
|
||||||
@ -171,7 +171,7 @@ def draw_results(results, filename, title_benefit, annot_benefit=False, figure_s
|
|||||||
plt.savefig(filename)
|
plt.savefig(filename)
|
||||||
|
|
||||||
|
|
||||||
# In[44]:
|
# In[88]:
|
||||||
|
|
||||||
|
|
||||||
def draw_roi(costs, results, filename, title_roi, days=365, annot_roi=False, figure_size=(10, 10)):
|
def draw_roi(costs, results, filename, title_roi, days=365, annot_roi=False, figure_size=(10, 10)):
|
||||||
@ -184,7 +184,7 @@ def draw_roi(costs, results, filename, title_roi, days=365, annot_roi=False, fig
|
|||||||
if 0 in df.index and 0 in df.columns:
|
if 0 in df.index and 0 in df.columns:
|
||||||
df.loc[0,0] = 100
|
df.loc[0,0] = 100
|
||||||
df[df > 80] = 100
|
df[df > 80] = 100
|
||||||
print(df)
|
# print(df)
|
||||||
|
|
||||||
df = df.astype(float)
|
df = df.astype(float)
|
||||||
df.index = df.index / 1000
|
df.index = df.index / 1000
|
||||||
@ -193,7 +193,7 @@ def draw_roi(costs, results, filename, title_roi, days=365, annot_roi=False, fig
|
|||||||
df.columns = df.columns.map(int)
|
df.columns = df.columns.map(int)
|
||||||
min_value = df.min().min()
|
min_value = df.min().min()
|
||||||
max_value = df.max().max()
|
max_value = df.max().max()
|
||||||
print(max_value)
|
# print(max_value)
|
||||||
max_scale = max(abs(min_value), abs(max_value))
|
max_scale = max(abs(min_value), abs(max_value))
|
||||||
|
|
||||||
df[df.columns[-1] + 1] = df.iloc[:, -1]
|
df[df.columns[-1] + 1] = df.iloc[:, -1]
|
||||||
@ -222,7 +222,7 @@ def draw_roi(costs, results, filename, title_roi, days=365, annot_roi=False, fig
|
|||||||
plt.close()
|
plt.close()
|
||||||
|
|
||||||
|
|
||||||
# In[45]:
|
# In[89]:
|
||||||
|
|
||||||
|
|
||||||
def draw_cost(costs, filename, title_cost, annot_cost=False, figure_size=(10, 10)):
|
def draw_cost(costs, filename, title_cost, annot_cost=False, figure_size=(10, 10)):
|
||||||
@ -257,17 +257,17 @@ def draw_cost(costs, filename, title_cost, annot_cost=False, figure_size=(10, 10
|
|||||||
plt.close()
|
plt.close()
|
||||||
|
|
||||||
|
|
||||||
# In[46]:
|
# In[90]:
|
||||||
|
|
||||||
|
|
||||||
def draw_overload(overload_cnt, filename, title_unmet, annot_unmet=False, figure_size=(10, 10), days=365, granularity=15):
|
def draw_overload(overload_cnt, filename, title_unmet, annot_unmet=False, figure_size=(10, 10), days=365, granularity=15):
|
||||||
df = overload_cnt
|
df = overload_cnt
|
||||||
print(days, granularity)
|
# print(days, granularity)
|
||||||
coef = 60 / granularity * days * 24
|
coef = 60 / granularity * days * 24
|
||||||
print(coef)
|
# print(coef)
|
||||||
print(df)
|
# print(df)
|
||||||
df = ( coef - df) / coef
|
df = ( coef - df) / coef
|
||||||
print(df)
|
# print(df)
|
||||||
|
|
||||||
df = df.astype(float)
|
df = df.astype(float)
|
||||||
df.index = df.index / 1000
|
df.index = df.index / 1000
|
||||||
@ -309,7 +309,7 @@ def draw_overload(overload_cnt, filename, title_unmet, annot_unmet=False, figure
|
|||||||
plt.close()
|
plt.close()
|
||||||
|
|
||||||
|
|
||||||
# In[47]:
|
# In[91]:
|
||||||
|
|
||||||
|
|
||||||
def cal_profit(es: EnergySystem, saved_money, days):
|
def cal_profit(es: EnergySystem, saved_money, days):
|
||||||
@ -317,7 +317,7 @@ def cal_profit(es: EnergySystem, saved_money, days):
|
|||||||
return profit
|
return profit
|
||||||
|
|
||||||
|
|
||||||
# In[48]:
|
# In[92]:
|
||||||
|
|
||||||
|
|
||||||
def generate_data(pv_capacity, pv_cost_per_kW, pv_lifetime, pv_loss, ess_capacity, ess_cost_per_kW, ess_lifetime, ess_loss, grid_capacity, grid_loss, sell_price, time_interval, data, days, storage=0):
|
def generate_data(pv_capacity, pv_cost_per_kW, pv_lifetime, pv_loss, ess_capacity, ess_cost_per_kW, ess_lifetime, ess_loss, grid_capacity, grid_loss, sell_price, time_interval, data, days, storage=0):
|
||||||
@ -357,9 +357,11 @@ def generate_data(pv_capacity, pv_cost_per_kW, pv_lifetime, pv_loss, ess_capacit
|
|||||||
energySystem.time)
|
energySystem.time)
|
||||||
|
|
||||||
|
|
||||||
# In[49]:
|
|
||||||
|
# In[93]:
|
||||||
|
|
||||||
|
|
||||||
|
from tqdm import tqdm
|
||||||
months_results = []
|
months_results = []
|
||||||
months_costs = []
|
months_costs = []
|
||||||
months_overload = []
|
months_overload = []
|
||||||
@ -368,7 +370,7 @@ months_gen_energy = []
|
|||||||
months_gen_energy2 = []
|
months_gen_energy2 = []
|
||||||
months_ess_rest = pd.DataFrame(30, index=pv_capacities, columns= ess_capacities)
|
months_ess_rest = pd.DataFrame(30, index=pv_capacities, columns= ess_capacities)
|
||||||
months_csv_data = {}
|
months_csv_data = {}
|
||||||
for index, month_data in enumerate(months_data):
|
for index, month_data in tqdm(enumerate(months_data), total=len(months_data), position=0, leave= True):
|
||||||
results = pd.DataFrame(index=pv_capacities, columns= ess_capacities)
|
results = pd.DataFrame(index=pv_capacities, columns= ess_capacities)
|
||||||
costs = pd.DataFrame(index=pv_capacities, columns= ess_capacities)
|
costs = pd.DataFrame(index=pv_capacities, columns= ess_capacities)
|
||||||
overload_cnt = pd.DataFrame(index=pv_capacities, columns= ess_capacities)
|
overload_cnt = pd.DataFrame(index=pv_capacities, columns= ess_capacities)
|
||||||
@ -381,7 +383,7 @@ for index, month_data in enumerate(months_data):
|
|||||||
pv_generates = {}
|
pv_generates = {}
|
||||||
grid_need_powers = {}
|
grid_need_powers = {}
|
||||||
times = {}
|
times = {}
|
||||||
for pv_capacity in pv_capacities:
|
for pv_capacity in tqdm(pv_capacities, total=len(pv_capacities), desc=f'generating pv for month {index + 1}',position=1, leave=False):
|
||||||
factory_demands[pv_capacity] = {}
|
factory_demands[pv_capacity] = {}
|
||||||
buy_prices[pv_capacity] = {}
|
buy_prices[pv_capacity] = {}
|
||||||
sell_prices[pv_capacity] = {}
|
sell_prices[pv_capacity] = {}
|
||||||
@ -496,7 +498,7 @@ draw_overload(overload_cnt=annual_overload,
|
|||||||
figure_size=figure_size)
|
figure_size=figure_size)
|
||||||
|
|
||||||
|
|
||||||
# In[50]:
|
# In[94]:
|
||||||
|
|
||||||
|
|
||||||
def collapse_months_csv_data(months_csv_data, column_name,pv_capacies, ess_capacities):
|
def collapse_months_csv_data(months_csv_data, column_name,pv_capacies, ess_capacities):
|
||||||
@ -513,7 +515,7 @@ def collapse_months_csv_data(months_csv_data, column_name,pv_capacies, ess_capac
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
# In[51]:
|
# In[102]:
|
||||||
|
|
||||||
|
|
||||||
annual_pv_gen = collapse_months_csv_data(months_csv_data, "pv_generate", pv_capacities, ess_capacities)
|
annual_pv_gen = collapse_months_csv_data(months_csv_data, "pv_generate", pv_capacities, ess_capacities)
|
||||||
@ -523,16 +525,21 @@ annual_sell_price = collapse_months_csv_data(months_csv_data, "sell_price", pv_c
|
|||||||
annual_factory_demand = collapse_months_csv_data(months_csv_data, "factory_demand", pv_capacities, ess_capacities)
|
annual_factory_demand = collapse_months_csv_data(months_csv_data, "factory_demand", pv_capacities, ess_capacities)
|
||||||
annual_grid_need_power = collapse_months_csv_data(months_csv_data, "grid_need_power", pv_capacities, ess_capacities)
|
annual_grid_need_power = collapse_months_csv_data(months_csv_data, "grid_need_power", pv_capacities, ess_capacities)
|
||||||
|
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
for pv_capacity in pv_capacities:
|
for pv_capacity in pv_capacities:
|
||||||
for ess_capacity in ess_capacities:
|
for ess_capacity in ess_capacities:
|
||||||
with open(f'data/annual_data-pv-{pv_capacity}-ess-{ess_capacity}.csv', 'w') as f:
|
with open(f'data/annual_data-pv-{pv_capacity}-ess-{ess_capacity}.csv', 'w') as f:
|
||||||
f.write("time,pv_generate,factory_demand,buy_price,sell_price,grid_need_power\n")
|
f.write("date, time,pv_generate (kW),factory_demand (kW),buy_price (USD/MWh),sell_price (USD/MWh),grid_need_power (kW)\n")
|
||||||
|
start_date = datetime(2023, 1, 1, 0, 0, 0)
|
||||||
for i in range(len(annual_time[pv_capacity][ess_capacity])):
|
for i in range(len(annual_time[pv_capacity][ess_capacity])):
|
||||||
f.write(f"{annual_time[pv_capacity][ess_capacity][i]}, {int(annual_pv_gen[pv_capacity][ess_capacity][i])}, {int(annual_factory_demand[pv_capacity][ess_capacity][i])}, {int(annual_buy_price[pv_capacity][ess_capacity][i]*1000)}, {int(annual_sell_price[pv_capacity][ess_capacity][i]*1000)}, {int(annual_grid_need_power[pv_capacity][ess_capacity][i])}\n")
|
current_date = start_date + timedelta(hours=i)
|
||||||
|
formate_date = current_date.strftime("%Y-%m-%d")
|
||||||
|
f.write(f"{formate_date},{annual_time[pv_capacity][ess_capacity][i]},{int(annual_pv_gen[pv_capacity][ess_capacity][i])},{int(annual_factory_demand[pv_capacity][ess_capacity][i])},{int(annual_buy_price[pv_capacity][ess_capacity][i]*1000)},{int(annual_sell_price[pv_capacity][ess_capacity][i]*1000)},{int(annual_grid_need_power[pv_capacity][ess_capacity][i])} \n")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# In[52]:
|
# In[96]:
|
||||||
|
|
||||||
|
|
||||||
def save_data(data, filename):
|
def save_data(data, filename):
|
||||||
@ -540,7 +547,7 @@ def save_data(data, filename):
|
|||||||
data.to_json(filename + '.json')
|
data.to_json(filename + '.json')
|
||||||
|
|
||||||
|
|
||||||
# In[53]:
|
# In[97]:
|
||||||
|
|
||||||
|
|
||||||
if not os.path.isdir('data'):
|
if not os.path.isdir('data'):
|
||||||
@ -551,13 +558,13 @@ save_data(annual_costs, f'data/{pv_begin}-{pv_end}-{pv_groups}-{ess_begin}-{ess_
|
|||||||
save_data(annual_overload, f'data/{pv_begin}-{pv_end}-{pv_groups}-{ess_begin}-{ess_end}-{ess_groups}-overload_cnt')
|
save_data(annual_overload, f'data/{pv_begin}-{pv_end}-{pv_groups}-{ess_begin}-{ess_end}-{ess_groups}-overload_cnt')
|
||||||
|
|
||||||
|
|
||||||
# In[54]:
|
# In[98]:
|
||||||
|
|
||||||
|
|
||||||
draw_results(annual_result, 'plots/test.png', 'test', False)
|
draw_results(annual_result, 'plots/test.png', 'test', False)
|
||||||
|
|
||||||
|
|
||||||
# In[55]:
|
# In[99]:
|
||||||
|
|
||||||
|
|
||||||
draw_roi(annual_costs, annual_nettos, 'plots/annual_roi.png', title_roi, 365, annot_benefit, figure_size)
|
draw_roi(annual_costs, annual_nettos, 'plots/annual_roi.png', title_roi, 365, annot_benefit, figure_size)
|
||||||
|
Loading…
Reference in New Issue
Block a user