update the format
This commit is contained in:
		| @@ -21,6 +21,13 @@ class EnergySystem: | |||||||
|         self.summer_week_soc = [] |         self.summer_week_soc = [] | ||||||
|         self.autumn_week_soc = [] |         self.autumn_week_soc = [] | ||||||
|         self.winter_week_soc = [] |         self.winter_week_soc = [] | ||||||
|  |         self.factory_demand = [] | ||||||
|  |         self.buy_price_kWh = [] | ||||||
|  |         self.sell_price_kWh = [] | ||||||
|  |         self.pv_generated_kWh = [] | ||||||
|  |         self.grid_need_power_kW = [] | ||||||
|  |         self.time = [] | ||||||
|  |         self.ess_rest = 0 | ||||||
|         self.granularity = 4 |         self.granularity = 4 | ||||||
|         self.season_step = self.granularity * 24 * 7 * 12 |         self.season_step = self.granularity * 24 * 7 * 12 | ||||||
|         self.season_start= self.granularity * 24 * 7 * 2 |         self.season_start= self.granularity * 24 * 7 * 2 | ||||||
| @@ -37,8 +44,10 @@ class EnergySystem: | |||||||
|         total_benefit = 0 |         total_benefit = 0 | ||||||
|         total_netto_benefit = 0 |         total_netto_benefit = 0 | ||||||
|         total_gen = 0 |         total_gen = 0 | ||||||
|  |         net_grid = 0. | ||||||
|         for index, row in data.iterrows(): |         for index, row in data.iterrows(): | ||||||
|             time = row['time'] |             time = row['time'] | ||||||
|  |             self.time.append(time) | ||||||
|             # sunlight_intensity = row['sunlight'] |             # sunlight_intensity = row['sunlight'] | ||||||
|             pv_yield = row['PV yield[kW/kWp]'] |             pv_yield = row['PV yield[kW/kWp]'] | ||||||
|             factory_demand = row['demand'] |             factory_demand = row['demand'] | ||||||
| @@ -58,6 +67,11 @@ class EnergySystem: | |||||||
|  |  | ||||||
|             generated_pv_power = self.pv.capacity * pv_yield# 生成的功率,单位 kW |             generated_pv_power = self.pv.capacity * pv_yield# 生成的功率,单位 kW | ||||||
|             generated_pv_energy = generated_pv_power * time_interval * self.pv.loss  # 生成的能量,单位 kWh |             generated_pv_energy = generated_pv_power * time_interval * self.pv.loss  # 生成的能量,单位 kWh | ||||||
|  |             self.pv_generated_kWh.append(generated_pv_energy) | ||||||
|  |             self.factory_demand.append(factory_demand) | ||||||
|  |             self.buy_price_kWh.append(electricity_price) | ||||||
|  |             self.sell_price_kWh.append(sell_price) | ||||||
|  |  | ||||||
|             self.generated += generated_pv_energy |             self.generated += generated_pv_energy | ||||||
|             # pv生成的能量如果比工厂的需求要大 |             # pv生成的能量如果比工厂的需求要大 | ||||||
|             if generated_pv_energy >= factory_demand * time_interval: |             if generated_pv_energy >= factory_demand * time_interval: | ||||||
| @@ -75,6 +89,7 @@ class EnergySystem: | |||||||
|                 # 节省的能量 = 工厂需求的能量 * 时间段 |                 # 节省的能量 = 工厂需求的能量 * 时间段 | ||||||
|                 # total_energy = factory_demand * time_interval |                 # total_energy = factory_demand * time_interval | ||||||
|                 saved_energy = factory_demand * time_interval |                 saved_energy = factory_demand * time_interval | ||||||
|  |                 self.grid_need_power_kW.append(0) | ||||||
|             # pv比工厂的需求小 |             # pv比工厂的需求小 | ||||||
|             else: |             else: | ||||||
|                 # 从ess中需要的电量 = 工厂需要的电量 - pv中的电量 |                 # 从ess中需要的电量 = 工厂需要的电量 - pv中的电量 | ||||||
| @@ -90,6 +105,7 @@ class EnergySystem: | |||||||
|                     self.ess.storage -= discharging_power |                     self.ess.storage -= discharging_power | ||||||
|                     # 节省下来的能量 = pv的能量 + 放出来的能量 |                     # 节省下来的能量 = pv的能量 + 放出来的能量 | ||||||
|                     saved_energy = generated_pv_energy + discharging_power * self.ess.loss |                     saved_energy = generated_pv_energy + discharging_power * self.ess.loss | ||||||
|  |                     self.grid_need_power_kW.append(0) | ||||||
|                 else: |                 else: | ||||||
|                     # 如果存的电量不够 |                     # 如果存的电量不够 | ||||||
|                     # 需要把ess中的所有电量释放出来 |                     # 需要把ess中的所有电量释放出来 | ||||||
| @@ -106,6 +122,7 @@ class EnergySystem: | |||||||
|                     self.ess.storage = 0 |                     self.ess.storage = 0 | ||||||
|                     needed_from_grid = factory_demand * time_interval - saved_energy |                     needed_from_grid = factory_demand * time_interval - saved_energy | ||||||
|                     net_grid = min(self.grid.capacity * time_interval, needed_from_grid) * self.grid.loss |                     net_grid = min(self.grid.capacity * time_interval, needed_from_grid) * self.grid.loss | ||||||
|  |                     self.grid_need_power_kW.append(needed_from_grid * 4) | ||||||
|                     # grid_energy += net_grid |                     # grid_energy += net_grid | ||||||
|                     # total_energy += net_grid |                     # total_energy += net_grid | ||||||
|             # print(total_energy) |             # print(total_energy) | ||||||
| @@ -124,6 +141,7 @@ class EnergySystem: | |||||||
|             if index in range(week_start, week_end): |             if index in range(week_start, week_end): | ||||||
|                 self.spring_week_gen.append(generated_pv_power) |                 self.spring_week_gen.append(generated_pv_power) | ||||||
|                 self.spring_week_soc.append(self.ess.storage / self.ess.capacity) |                 self.spring_week_soc.append(self.ess.storage / self.ess.capacity) | ||||||
|  |             self.ess_rest = self.ess.storage | ||||||
|             # summer |             # summer | ||||||
|             # week_start += self.season_step |             # week_start += self.season_step | ||||||
|             # week_end += self.season_step |             # week_end += self.season_step | ||||||
|   | |||||||
| @@ -17,12 +17,12 @@ | |||||||
|     "pv_capacities":{ |     "pv_capacities":{ | ||||||
|         "begin": 0, |         "begin": 0, | ||||||
|         "end": 50000, |         "end": 50000, | ||||||
|         "groups": 11  |         "groups":  3 | ||||||
|     }, |     }, | ||||||
|     "ess_capacities":{ |     "ess_capacities":{ | ||||||
|         "begin": 0, |         "begin": 0, | ||||||
|         "end": 100000, |         "end": 100000, | ||||||
|         "groups":  11 |         "groups":  3 | ||||||
|     }, |     }, | ||||||
|     "time_interval":{ |     "time_interval":{ | ||||||
|         "numerator": 15, |         "numerator": 15, | ||||||
|   | |||||||
| @@ -10,12 +10,12 @@ class pv_config: | |||||||
|     def get_cost_per_year(self): |     def get_cost_per_year(self): | ||||||
|         return self.capacity * self.cost_per_kW / self.lifetime |         return self.capacity * self.cost_per_kW / self.lifetime | ||||||
| class ess_config: | class ess_config: | ||||||
|     def __init__(self, capacity, cost_per_kW, lifetime, loss, charge_power, discharge_power): |     def __init__(self, capacity, cost_per_kW, lifetime, loss, charge_power, discharge_power, storage=0): | ||||||
|         self.capacity = capacity |         self.capacity = capacity | ||||||
|         self.cost_per_kW = cost_per_kW |         self.cost_per_kW = cost_per_kW | ||||||
|         self.lifetime = lifetime |         self.lifetime = lifetime | ||||||
|         self.loss = loss |         self.loss = loss | ||||||
|         self.storage = 0 |         self.storage = storage | ||||||
|         self.charge_power = charge_power |         self.charge_power = charge_power | ||||||
|         self.discharge_power = discharge_power |         self.discharge_power = discharge_power | ||||||
|     def get_cost(self): |     def get_cost(self): | ||||||
|   | |||||||
							
								
								
									
										807
									
								
								main.ipynb
									
									
									
									
									
								
							
							
						
						
									
										807
									
								
								main.ipynb
									
									
									
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										162
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										162
									
								
								main.py
									
									
									
									
									
								
							| @@ -1,5 +1,9 @@ | |||||||
| #!/usr/bin/env python | #!/usr/bin/env python | ||||||
| # coding: utf-8 | # coding: utf-8 | ||||||
|  |  | ||||||
|  | # In[39]: | ||||||
|  |  | ||||||
|  |  | ||||||
| import os | import os | ||||||
| import glob | import glob | ||||||
| import shutil | import shutil | ||||||
| @@ -24,6 +28,9 @@ folder_path = 'plots' | |||||||
| clear_folder_make_ess_pv(folder_path) | clear_folder_make_ess_pv(folder_path) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # In[40]: | ||||||
|  |  | ||||||
|  |  | ||||||
| import matplotlib.pyplot as plt | import matplotlib.pyplot as plt | ||||||
| import seaborn as sns | import seaborn as sns | ||||||
| import numpy as np | import numpy as np | ||||||
| @@ -31,6 +38,10 @@ import pandas as pd | |||||||
| from EnergySystem import EnergySystem | from EnergySystem import EnergySystem | ||||||
| from config import pv_config, grid_config, ess_config | from config import pv_config, grid_config, ess_config | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # In[41]: | ||||||
|  |  | ||||||
|  |  | ||||||
| import json | import json | ||||||
|  |  | ||||||
| print("Version 0.0.5") | print("Version 0.0.5") | ||||||
| @@ -38,6 +49,9 @@ print("Version 0.0.5") | |||||||
| with open('config.json', 'r') as f: | with open('config.json', 'r') as f: | ||||||
|     js_data = json.load(f) |     js_data = json.load(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) | ||||||
|  |  | ||||||
| @@ -102,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[ ]: | # In[42]: | ||||||
|  |  | ||||||
|  |  | ||||||
| hour_demand = [] | hour_demand = [] | ||||||
| @@ -118,6 +132,9 @@ plt.savefig('plots/demand.png') | |||||||
| plt.close() | plt.close() | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # In[43]: | ||||||
|  |  | ||||||
|  |  | ||||||
| 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)): | ||||||
|     df=results |     df=results | ||||||
|     df = df.astype(float) |     df = df.astype(float) | ||||||
| @@ -154,7 +171,7 @@ def draw_results(results, filename, title_benefit, annot_benefit=False, figure_s | |||||||
|     plt.savefig(filename) |     plt.savefig(filename) | ||||||
|  |  | ||||||
|  |  | ||||||
| # In[ ]: | # In[44]: | ||||||
|  |  | ||||||
|  |  | ||||||
| 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)): | ||||||
| @@ -202,6 +219,11 @@ def draw_roi(costs, results, filename, title_roi, days=365, annot_roi=False, fig | |||||||
|     plt.xlabel('ESS Capacity (MWh)') |     plt.xlabel('ESS Capacity (MWh)') | ||||||
|     plt.ylabel('PV Capacity (MW)') |     plt.ylabel('PV Capacity (MW)') | ||||||
|     plt.savefig(filename) |     plt.savefig(filename) | ||||||
|  |     plt.close() | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # In[45]: | ||||||
|  |  | ||||||
|  |  | ||||||
| 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)): | ||||||
|     df = costs |     df = costs | ||||||
| @@ -232,6 +254,10 @@ def draw_cost(costs, filename, title_cost, annot_cost=False, figure_size=(10, 10 | |||||||
|     plt.xlabel('ESS Capacity (MWh)') |     plt.xlabel('ESS Capacity (MWh)') | ||||||
|     plt.ylabel('PV Capacity (MW)') |     plt.ylabel('PV Capacity (MW)') | ||||||
|     plt.savefig(filename) |     plt.savefig(filename) | ||||||
|  |     plt.close() | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # In[46]: | ||||||
|  |  | ||||||
|  |  | ||||||
| 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): | ||||||
| @@ -280,12 +306,21 @@ def draw_overload(overload_cnt, filename, title_unmet, annot_unmet=False, figure | |||||||
|     plt.xlabel('ESS Capacity (MWh)') |     plt.xlabel('ESS Capacity (MWh)') | ||||||
|     plt.ylabel('PV Capacity (MW)') |     plt.ylabel('PV Capacity (MW)') | ||||||
|     plt.savefig(filename) |     plt.savefig(filename) | ||||||
|  |     plt.close() | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # In[47]: | ||||||
|  |  | ||||||
|  |  | ||||||
| def cal_profit(es: EnergySystem, saved_money, days): | def cal_profit(es: EnergySystem, saved_money, days): | ||||||
|     profit = saved_money - es.ess.get_cost_per_year() / 365 * days - es.pv.get_cost_per_year() / 365 * days |     profit = saved_money - es.ess.get_cost_per_year() / 365 * days - es.pv.get_cost_per_year() / 365 * days | ||||||
|     return profit |     return profit | ||||||
|  |  | ||||||
| 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): |  | ||||||
|  | # In[48]: | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 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): | ||||||
|     pv = pv_config(capacity=pv_capacity,  |     pv = pv_config(capacity=pv_capacity,  | ||||||
|                     cost_per_kW=pv_cost_per_kW, |                     cost_per_kW=pv_cost_per_kW, | ||||||
|                     lifetime=pv_lifetime,  |                     lifetime=pv_lifetime,  | ||||||
| @@ -295,7 +330,8 @@ def generate_data(pv_capacity, pv_cost_per_kW, pv_lifetime, pv_loss, ess_capacit | |||||||
|                         lifetime=ess_lifetime,  |                         lifetime=ess_lifetime,  | ||||||
|                         loss=ess_loss, |                         loss=ess_loss, | ||||||
|                         charge_power=ess_capacity, |                         charge_power=ess_capacity, | ||||||
|                         discharge_power=ess_capacity) |                         discharge_power=ess_capacity, | ||||||
|  |                         storage=storage) | ||||||
|     grid = grid_config(capacity=grid_capacity,  |     grid = grid_config(capacity=grid_capacity,  | ||||||
|                         grid_loss=grid_loss, |                         grid_loss=grid_loss, | ||||||
|                         sell_price= sell_price) |                         sell_price= sell_price) | ||||||
| @@ -306,7 +342,22 @@ def generate_data(pv_capacity, pv_cost_per_kW, pv_lifetime, pv_loss, ess_capacit | |||||||
|     results = cal_profit(energySystem, benefit, days) |     results = cal_profit(energySystem, benefit, days) | ||||||
|     overload_cnt = energySystem.overload_cnt |     overload_cnt = energySystem.overload_cnt | ||||||
|     costs = energySystem.ess.capacity * energySystem.ess.cost_per_kW + energySystem.pv.capacity * energySystem.pv.cost_per_kW |     costs = energySystem.ess.capacity * energySystem.ess.cost_per_kW + energySystem.pv.capacity * energySystem.pv.cost_per_kW | ||||||
|     return (results, overload_cnt, costs, netto_benefit, gen_energy, energySystem.generated) |     return (results,  | ||||||
|  |             overload_cnt, | ||||||
|  |             costs,  | ||||||
|  |             netto_benefit,  | ||||||
|  |             gen_energy,  | ||||||
|  |             energySystem.generated, | ||||||
|  |             energySystem.ess_rest, | ||||||
|  |             energySystem.factory_demand, | ||||||
|  |             energySystem.buy_price_kWh, | ||||||
|  |             energySystem.sell_price_kWh, | ||||||
|  |             energySystem.pv_generated_kWh, | ||||||
|  |             energySystem.grid_need_power_kW, | ||||||
|  |             energySystem.time) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # In[49]: | ||||||
|  |  | ||||||
|  |  | ||||||
| months_results = [] | months_results = [] | ||||||
| @@ -315,6 +366,8 @@ months_overload = [] | |||||||
| months_nettos = [] | months_nettos = [] | ||||||
| months_gen_energy = [] | months_gen_energy = [] | ||||||
| months_gen_energy2 = [] | months_gen_energy2 = [] | ||||||
|  | months_ess_rest = pd.DataFrame(30, index=pv_capacities, columns= ess_capacities) | ||||||
|  | months_csv_data = {} | ||||||
| for index, month_data in enumerate(months_data): | for index, month_data in enumerate(months_data): | ||||||
|     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) | ||||||
| @@ -322,15 +375,61 @@ for index, month_data in enumerate(months_data): | |||||||
|     nettos = pd.DataFrame(index=pv_capacities, columns= ess_capacities) |     nettos = pd.DataFrame(index=pv_capacities, columns= ess_capacities) | ||||||
|     gen_energies = pd.DataFrame(index=pv_capacities, columns= ess_capacities) |     gen_energies = pd.DataFrame(index=pv_capacities, columns= ess_capacities) | ||||||
|     gen_energies2 = pd.DataFrame(index=pv_capacities, columns= ess_capacities) |     gen_energies2 = pd.DataFrame(index=pv_capacities, columns= ess_capacities) | ||||||
|  |     factory_demands = {} | ||||||
|  |     buy_prices= {} | ||||||
|  |     sell_prices = {} | ||||||
|  |     pv_generates = {} | ||||||
|  |     grid_need_powers = {} | ||||||
|  |     times = {} | ||||||
|     for pv_capacity in pv_capacities: |     for pv_capacity in pv_capacities: | ||||||
|  |         factory_demands[pv_capacity] = {} | ||||||
|  |         buy_prices[pv_capacity] = {} | ||||||
|  |         sell_prices[pv_capacity] = {} | ||||||
|  |         pv_generates[pv_capacity] = {} | ||||||
|  |         grid_need_powers[pv_capacity] = {} | ||||||
|  |         times[pv_capacity] = {} | ||||||
|         for ess_capacity in ess_capacities: |         for ess_capacity in ess_capacities: | ||||||
|             (result, overload, cost, netto, gen_energy, gen_energy2) = generate_data(pv_capacity=pv_capacity,pv_cost_per_kW=pv_cost_per_kW, pv_lifetime=pv_lifetime, pv_loss=pv_loss, ess_capacity=ess_capacity, ess_cost_per_kW=ess_cost_per_kW, ess_lifetime=ess_lifetime, ess_loss=ess_loss, grid_capacity=grid_capacity, grid_loss=grid_loss, sell_price=sell_price, time_interval=time_interval, data=month_data, days=months_days[index]) |             (result,  | ||||||
|  |              overload,  | ||||||
|  |              cost,  | ||||||
|  |              netto, | ||||||
|  |              gen_energy, | ||||||
|  |              gen_energy2, | ||||||
|  |              ess_rest, | ||||||
|  |              factory_demand, | ||||||
|  |              buy_price, | ||||||
|  |              sell_price, | ||||||
|  |              pv_generate, | ||||||
|  |              grid_need_power, | ||||||
|  |              time) = generate_data(pv_capacity=pv_capacity, | ||||||
|  |                         pv_cost_per_kW=pv_cost_per_kW, | ||||||
|  |                         pv_lifetime=pv_lifetime,  | ||||||
|  |                         pv_loss=pv_loss,  | ||||||
|  |                         ess_capacity=ess_capacity,  | ||||||
|  |                         ess_cost_per_kW=ess_cost_per_kW,  | ||||||
|  |                         ess_lifetime=ess_lifetime,  | ||||||
|  |                         ess_loss=ess_loss,  | ||||||
|  |                         grid_capacity=grid_capacity,  | ||||||
|  |                         grid_loss=grid_loss,  | ||||||
|  |                         sell_price=sell_price,  | ||||||
|  |                         time_interval=time_interval,  | ||||||
|  |                         data=month_data,  | ||||||
|  |                         days=months_days[index], | ||||||
|  |                         storage=months_ess_rest.loc[pv_capacity, ess_capacity]) | ||||||
|             results.loc[pv_capacity,ess_capacity] = result |             results.loc[pv_capacity,ess_capacity] = result | ||||||
|             overload_cnt.loc[pv_capacity,ess_capacity] = overload |             overload_cnt.loc[pv_capacity,ess_capacity] = overload | ||||||
|             costs.loc[pv_capacity,ess_capacity] = cost |             costs.loc[pv_capacity,ess_capacity] = cost | ||||||
|             nettos.loc[pv_capacity,ess_capacity] = netto |             nettos.loc[pv_capacity,ess_capacity] = netto | ||||||
|             gen_energies.loc[pv_capacity, ess_capacity] = gen_energy |             gen_energies.loc[pv_capacity, ess_capacity] = gen_energy | ||||||
|             gen_energies2.loc[pv_capacity, ess_capacity] = gen_energy2 |             gen_energies2.loc[pv_capacity, ess_capacity] = gen_energy2 | ||||||
|  |             months_ess_rest.loc[pv_capacity, ess_capacity] = ess_rest | ||||||
|  |             factory_demands[pv_capacity][ess_capacity] = factory_demand | ||||||
|  |             buy_prices[pv_capacity][ess_capacity] = buy_price | ||||||
|  |             sell_prices[pv_capacity][ess_capacity] = sell_price | ||||||
|  |             pv_generates[pv_capacity][ess_capacity] = pv_generate | ||||||
|  |             grid_need_powers[pv_capacity][ess_capacity] = grid_need_power | ||||||
|  |             times[pv_capacity][ess_capacity] = time | ||||||
|  |     months_csv_data[index] = {"factory_demand": factory_demands, "buy_price": buy_prices, "sell_price": sell_prices, "pv_generate": pv_generates, "grid_need_power": grid_need_powers, "time": times} | ||||||
|     months_results.append(results) |     months_results.append(results) | ||||||
|     months_costs.append(costs) |     months_costs.append(costs) | ||||||
|     months_overload.append(overload_cnt) |     months_overload.append(overload_cnt) | ||||||
| @@ -349,7 +448,6 @@ for index, month_data in enumerate(months_data): | |||||||
|                     figure_size=figure_size, |                     figure_size=figure_size, | ||||||
|                     days=months_days[index], |                     days=months_days[index], | ||||||
|                     granularity=granularity) |                     granularity=granularity) | ||||||
|  |  | ||||||
| annual_result = pd.DataFrame(index=pv_capacities, columns= ess_capacities) | annual_result = pd.DataFrame(index=pv_capacities, columns= ess_capacities) | ||||||
| annual_costs = pd.DataFrame(index=pv_capacities, columns= ess_capacities) | annual_costs = pd.DataFrame(index=pv_capacities, columns= ess_capacities) | ||||||
| annual_overload = pd.DataFrame(index=pv_capacities, columns= ess_capacities) | annual_overload = pd.DataFrame(index=pv_capacities, columns= ess_capacities) | ||||||
| @@ -358,7 +456,6 @@ annual_gen = pd.DataFrame(index=pv_capacities, columns= ess_capacities) | |||||||
| annual_gen2 = pd.DataFrame(index=pv_capacities, columns= ess_capacities) | annual_gen2 = pd.DataFrame(index=pv_capacities, columns= ess_capacities) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # get the yearly results | # get the yearly results | ||||||
| for pv_capacity in pv_capacities: | for pv_capacity in pv_capacities: | ||||||
|     for ess_capacity in ess_capacities: |     for ess_capacity in ess_capacities: | ||||||
| @@ -399,11 +496,53 @@ draw_overload(overload_cnt=annual_overload, | |||||||
|                 figure_size=figure_size) |                 figure_size=figure_size) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # In[50]: | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def collapse_months_csv_data(months_csv_data, column_name,pv_capacies, ess_capacities): | ||||||
|  |     data = {} | ||||||
|  |     for pv_capacity in pv_capacities: | ||||||
|  |         data[pv_capacity] = {} | ||||||
|  |         for ess_capacity in ess_capacities: | ||||||
|  |             annual_data = [] | ||||||
|  |             for index, month_data in enumerate(months_data): | ||||||
|  |                 annual_data.extend(months_csv_data[index][column_name][pv_capacity][ess_capacity]) | ||||||
|  |                 # months_csv_data[index][column_name][pv_capacity][ess_capacity] = months_csv_data[index][column_name][pv_capacity][ess_capacity].tolist() | ||||||
|  |  | ||||||
|  |             data[pv_capacity][ess_capacity] = annual_data | ||||||
|  |     return data  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # In[51]: | ||||||
|  |  | ||||||
|  |  | ||||||
|  | annual_pv_gen = collapse_months_csv_data(months_csv_data, "pv_generate", pv_capacities, ess_capacities) | ||||||
|  | annual_time = collapse_months_csv_data(months_csv_data, "time", pv_capacities, ess_capacities) | ||||||
|  | annual_buy_price = collapse_months_csv_data(months_csv_data, "buy_price",pv_capacities, ess_capacities) | ||||||
|  | annual_sell_price = collapse_months_csv_data(months_csv_data, "sell_price", 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) | ||||||
|  |  | ||||||
|  | for pv_capacity in pv_capacities: | ||||||
|  |     for ess_capacity in ess_capacities: | ||||||
|  |         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") | ||||||
|  |             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") | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # In[52]: | ||||||
|  |  | ||||||
|  |  | ||||||
| def save_data(data, filename): | def save_data(data, filename): | ||||||
|     data.to_csv(filename+'.csv') |     data.to_csv(filename+'.csv') | ||||||
|     data.to_json(filename + '.json') |     data.to_json(filename + '.json') | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # In[53]: | ||||||
|  |  | ||||||
|  |  | ||||||
| if not os.path.isdir('data'): | if not os.path.isdir('data'): | ||||||
|     os.makedirs('data') |     os.makedirs('data') | ||||||
|  |  | ||||||
| @@ -411,8 +550,15 @@ save_data(annual_result, f'data/{pv_begin}-{pv_end}-{pv_groups}-{ess_begin}-{ess | |||||||
| save_data(annual_costs, f'data/{pv_begin}-{pv_end}-{pv_groups}-{ess_begin}-{ess_end}-{ess_groups}-costs') | save_data(annual_costs, f'data/{pv_begin}-{pv_end}-{pv_groups}-{ess_begin}-{ess_end}-{ess_groups}-costs') | ||||||
| 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]: | ||||||
|  |  | ||||||
|  |  | ||||||
| draw_results(annual_result, 'plots/test.png', 'test', False) | draw_results(annual_result, 'plots/test.png', 'test', False) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # In[55]: | ||||||
|  |  | ||||||
|  |  | ||||||
| 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) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user