# -*- coding: utf-8 -*- """ Create aggregates for analysing results of scenarios """ import numpy as np import pandas as pd import random import matplotlib import matplotlib.pyplot as plt import itertools in_fn = "C:/Users/theot/Dropbox (Sense.)/2018-19 EA TPM CBA (Shared)/Step 3/AoB model/Output/Demand_major_capex/" out_fn="C:/Users/theot/Dropbox (Sense.)/2018-19 EA TPM CBA (Shared)/Step 3/AoB model/Output/Demand_major_capex/" # DG costs - assumed capital cost per MW and rate of growth dg_capex_per_mw=733000 dg_capex_g = 0.93 #Discount rate r=1.06 # Demand results rcpd = pd.read_csv(in_fn+"rcpd.csv") aob = pd.read_csv(in_fn+"aob.csv") gen_rcpd = pd.read_csv(in_fn+"gen_rcpd.csv") gen_aob = pd.read_csv(in_fn+"gen_aob.csv") # A. TRANSMISSION REVENUE # (i) Load load_revenue=rcpd[['bb','type','m_yr']].copy() load_revenue['rcpd']=rcpd.pk_rev+rcpd.dg_rev+rcpd.sh_rev+rcpd.off_rev load_revenue['aob']=aob.pk_rev+aob.dg_rev+aob.sh_rev+aob.off_rev load_revenue['change']=load_revenue.aob-load_revenue.rcpd load_revenue['percentage_change']=load_revenue.aob/load_revenue.rcpd-1 load_revenue.to_csv(out_fn+"load_revenue.csv") load_tot_rev=load_revenue[['m_yr','rcpd','aob']].groupby(['m_yr']).sum().reset_index() # (ii) Generation gen_revenue=gen_rcpd[['bb','m_yr']].copy() gen_revenue['gen_rcpd']=gen_rcpd.pk_rev+gen_rcpd.dg_rev+gen_rcpd.sh_rev+gen_rcpd.off_rev gen_revenue['gen_aob']=gen_aob.pk_rev+gen_aob.dg_rev+gen_aob.sh_rev+gen_aob.off_rev gen_revenue['change']=gen_revenue.gen_aob-gen_revenue.gen_rcpd gen_revenue['percentage_change']=gen_revenue.gen_aob/gen_revenue.gen_rcpd-1 gen_revenue.to_csv(out_fn+"gen_revenue.csv") gen_tot_rev = gen_revenue[['m_yr','gen_rcpd','gen_aob']].groupby(['m_yr']).sum().reset_index() # Totals total_revenue = load_tot_rev[['m_yr','rcpd','aob']] total_revenue = total_revenue.merge(gen_tot_rev) total_revenue.columns=['m_yr','load_rcpd','load_aob','gen_rcpd','gen_aob'] total_revenue['rcpd']=total_revenue.load_rcpd+total_revenue.gen_rcpd total_revenue['aob']=total_revenue.load_aob+total_revenue.gen_aob total_revenue.to_csv(out_fn+"total_revenue.csv") # B. DEMAND VOLUMES # (i) Demand load_q=rcpd[['bb','type','m_yr']].copy() load_q['rcpd']=rcpd.pk_q+rcpd.dg_q+rcpd.sh_q+rcpd.off_q load_q['aob']=aob.pk_q+aob.dg_q+aob.sh_q+aob.off_q load_q['change']=load_q.aob-load_q.rcpd load_q['percentage_change']=load_q.aob/load_q.rcpd-1 load_tot_q=load_q[['m_yr','rcpd','aob']].groupby(['m_yr']).sum().reset_index() load_tot_q['percentage_change']=load_tot_q.aob/load_tot_q.rcpd-1 load_q.to_csv(out_fn+"load.csv") load_tot_q.to_csv(out_fn+"total_load.csv") # (ii) Generation quantites gen_q=gen_rcpd[['bb','type','m_yr']].copy() gen_q['rcpd']=gen_rcpd.pk_q+gen_rcpd.dg_q+gen_rcpd.sh_q+gen_rcpd.off_q gen_q['aob']=gen_aob.pk_q+gen_aob.dg_q+gen_aob.sh_q+gen_aob.off_q gen_q['change']=gen_q.aob-gen_q.rcpd gen_q['percentage_change']=gen_q.aob/gen_q.rcpd-1 gen_tot_q=gen_q[['m_yr','rcpd','aob']].groupby(['m_yr']).sum().reset_index() gen_tot_q['percentage_change']=gen_tot_q.aob/gen_tot_q.rcpd-1 gen_q.to_csv(out_fn+"generation.csv") gen_tot_q.to_csv(out_fn+"total_generation.csv") # C. EXPENDITURE load_e=rcpd[['bb','type','m_yr']].copy() load_e['rcpd']=rcpd.pk_e+rcpd.dg_e+rcpd.sh_e+rcpd.off_e load_e['aob']=aob.pk_e+aob.dg_e+aob.sh_e+aob.off_e load_e['change']=load_e.aob-load_e.rcpd load_e['percentage_change']=load_e.aob/load_e.rcpd-1 load_e.to_csv(out_fn+"expenditure.csv") load_tot_e=load_e[['m_yr','rcpd','aob']].groupby(['m_yr']).sum().reset_index() load_tot_e.to_csv(out_fn+"total_expenditure.csv") # Average prices - inclusive of transmission costs load_p=rcpd[['bb','type','m_yr']].copy() load_p['rcpd']=load_e.rcpd/load_q.rcpd load_p['aob']=load_e.aob/load_q.aob load_p['change']=load_p.aob-load_p.rcpd load_p['percentage_change']=load_p.aob/load_p.rcpd-1 load_tot_p=pd.DataFrame(load_tot_e['m_yr'].copy()) load_tot_p['rcpd']=load_tot_e.rcpd/load_tot_q.rcpd load_tot_p['aob']=load_tot_e.aob/load_tot_q.aob load_tot_p['change']=load_tot_p.aob-load_tot_p.rcpd load_tot_p['percentage_change']=load_tot_p.aob/load_tot_p.rcpd-1 load_p.to_csv(out_fn+"average_prices.csv") load_tot_p.to_csv(out_fn+"total_average_prices.csv") # DG investment dg=pd.DataFrame(load_tot_e['m_yr'].copy()) dg['rcpd_mw']=rcpd.groupby(['m_yr'])['dg_max'].sum().reset_index()['dg_max'] dg['rcpd_inv']=dg.rcpd_mw.diff()*(dg_capex_per_mw*(dg_capex_g**(dg.m_yr-2017))) dg['rcpd_q']=rcpd.groupby(['m_yr'])['dg_q'].sum().reset_index()['dg_q'] dg['aob_mw']=aob.groupby(['m_yr'])['dg_max'].sum().reset_index()['dg_max'] dg['aob_inv']=dg.aob_mw.diff()*(dg_capex_per_mw*(dg_capex_g**(dg.m_yr-2017))) dg['aob_q']=aob.groupby(['m_yr'])['dg_q'].sum().reset_index()['dg_q'] dg['mw_change']=dg.aob_mw-dg.rcpd_mw dg['mw_percentage_change']=dg.aob_mw/dg.rcpd_mw-1 dg['mw_cost']=dg_capex_per_mw*(dg_capex_g**(dg.m_yr-2017)) dg['inv_change']=dg.aob_inv-dg.rcpd_inv dg['pv_inv_change']=dg.inv_change*(1/(r**(dg.m_yr-2019))) dg.to_csv(out_fn+'total_dg.csv') dg.pv_inv_change.sum()