from coad.plexos2hdf5 import plexos2hdf5
import numpy as np
import json
import networkx as nx
import tdsvis
import pandas as pd
import re
tdsvis.offline()
def json_to_networkx(filename):
""" Converts a json file into nx graph + pos """
data = json.loads(open(filename).read())
g = nx.DiGraph()
for node in data['nodes']:
g.add_node(node['name'], data=node)
for edge in data['edges']:
g.add_edge(edge['source'], edge['target'])
pos = { x['name']: (x['x'], x['y']) for x in data['pos']}
return g, pos
g, pos = json_to_networkx("data/system/rts.json")
def read_rts(filename):
df = pd.read_csv(filename)
df = df.rename(columns={"Unnamed: 0": 'timestamp'})
df = df.rename(columns={"x": 'timestamp'})
df['timestamp'] = pd.to_datetime(df['timestamp'])
df.set_index('timestamp', inplace=True)
return df
RT_Solution_zip = "data/pcm/Model Interesting Week RT Solution/Model Interesting Week RT Solution.zip"
RT_Solution = plexos2hdf5(RT_Solution_zip)
DA_Solution_zip = "data/pcm/Model Interesting Week DA Solution/Model Interesting Week DA Solution.zip"
DA_Solution = plexos2hdf5(DA_Solution_zip)
generator_list=list(RT_Solution["/Generator"])
print generator_list
print len(generator_list)
index= pd.date_range('2024-07-14 00:00:00','2024-7-20 23:55:00', freq='5min')
df_commitment=pd.DataFrame(data=0,index=index,columns=[])
count=0
for i in generator_list:
if str(i)[-1]=='d':
df_commitment[str(i)]=list(RT_Solution["/Generator/" +str(i)+ "/Units Generating/period_0/phase_4"])
else:
if count<10:
gen_name='gen_'+ '0'+ str(count)
df_commitment[gen_name]=list(RT_Solution["/Generator/" +str(i)+ "/Units Generating/period_0/phase_4"])
else:
gen_name='gen_'+ str(count)
df_commitment[gen_name]=list(RT_Solution["/Generator/" +str(i)+ "/Units Generating/period_0/phase_4"])
count=count+1
df_commitment=df_commitment['2024-07-14 00:00:00':'2024-7-14 23:55:00']
df_commitment.head()
generator_list=list(RT_Solution["/Generator"])
index= pd.date_range('2024-07-14 00:00:00','2024-7-20 23:55:00', freq='5min')
df_real_power_gen=pd.DataFrame(data=0,index=index,columns=[])
count=0
for i in generator_list:
if str(i)[-1]=='d':
df_real_power_gen[str(i)]=list(RT_Solution["/Generator/" +str(i)+ "/Generation/period_0/phase_4"])
else:
if count<10:
gen_name='gen_'+ '0'+ str(count)
df_real_power_gen[gen_name]=list(RT_Solution["/Generator/" +str(i)+ "/Generation/period_0/phase_4"])
else:
gen_name='gen_'+ str(count)
df_real_power_gen[gen_name]=list(RT_Solution["/Generator/" +str(i)+ "/Generation/period_0/phase_4"])
count=count+1
df_real_power_gen=df_real_power_gen['2024-07-14 00:00:00':'2024-7-14 23:55:00']
df_real_power_gen.head()
max_wind={'309_wind':159.999756,'317_wind':769.274353,'303_wind':847.488953,'122_wind':715.493347}
df_real_power_gen_norm=df_real_power_gen.copy()
gens_not_found=[]
for i in df_real_power_gen_norm.columns:
try:
rating=g.node[str(i)].get('data').get('Pmax')
df_real_power_gen_norm[str(i)]=df_real_power_gen_norm[str(i)]/float(rating)
except KeyError:
#df_real_line_flow_norm=df_real_line_flow_norm.drop(str(i), 1)
gens_not_found.append(i)
rating=max_wind[str(i)]
df_real_power_gen_norm[str(i)]=df_real_power_gen_norm[str(i)]/float(rating)
print gens_not_found
df_real_power_gen_norm.head()
generator_list=list(DA_Solution["/Generator"])
index= pd.date_range('2024-07-14 00:00:00','2024-7-20 23:00:00', freq='H')
df_commitment_DA=pd.DataFrame(data=0,index=index,columns=[])
count=0
for i in generator_list:
if str(i)[-1]=='d':
df_commitment_DA[str(i)]=list(DA_Solution["/Generator/" +str(i)+ "/Units Generating/period_0/phase_4"])
else:
if count<10:
gen_name='gen_'+ '0'+ str(count)
df_commitment_DA[gen_name]=list(DA_Solution["/Generator/" +str(i)+ "/Units Generating/period_0/phase_4"])
else:
gen_name='gen_'+ str(count)
df_commitment_DA[gen_name]=list(DA_Solution["/Generator/" +str(i)+ "/Units Generating/period_0/phase_4"])
count=count+1
#df_commitment=df_commitment['2024-07-14 00:00:00':'2024-7-15 00:00:00']
df_commitment_DA=df_commitment_DA.resample('5min').ffill()
df_commitment_DA=df_commitment_DA['2024-07-14 00:00:00':'2024-7-14 23:55:00']
df_commitment_DA.head()
generator_list=list(DA_Solution["/Generator"])
index= pd.date_range('2024-07-14 00:00:00','2024-7-20 23:00:00', freq='H')
df_real_power_gen_DA=pd.DataFrame(data=0,index=index,columns=[])
count=0
for i in generator_list:
if str(i)[-1]=='d':
df_real_power_gen_DA[str(i)]=list(DA_Solution["/Generator/" +str(i)+ "/Generation/period_0/phase_4"])
else:
if count<10:
gen_name='gen_'+ '0'+ str(count)
df_real_power_gen_DA[gen_name]=list(DA_Solution["/Generator/" +str(i)+ "/Generation/period_0/phase_4"])
else:
gen_name='gen_'+ str(count)
df_real_power_gen_DA[gen_name]=list(DA_Solution["/Generator/" +str(i)+ "/Generation/period_0/phase_4"])
count=count+1
df_real_power_gen_DA=df_real_power_gen_DA.resample('5min').ffill()
df_real_power_gen_DA=df_real_power_gen_DA['2024-07-14 00:00:00':'2024-7-14 23:55:00']
df_real_power_gen_DA.head()
max_wind={'309_wind':159.999756,'317_wind':769.274353,'303_wind':847.488953,'122_wind':715.493347}
df_real_power_gen_norm_DA=df_real_power_gen_DA.copy()
gens_not_found=[]
for i in df_real_power_gen_norm_DA.columns:
try:
rating=g.node[str(i)].get('data').get('Pmax')
df_real_power_gen_norm_DA[str(i)]=df_real_power_gen_norm_DA[str(i)]/float(rating)
except KeyError:
#df_real_line_flow_norm=df_real_line_flow_norm.drop(str(i), 1)
gens_not_found.append(i)
rating=max_wind[str(i)]
df_real_power_gen_norm_DA[str(i)]=df_real_power_gen_norm_DA[str(i)]/float(rating)
print gens_not_found
df_real_power_gen_norm_DA.head()
line_list=list(RT_Solution["/Line"])
index=pd.date_range('2024-07-14 00:00:00','2024-7-20 23:55:00', freq='5min')
df_real_line_flow=pd.DataFrame(data=0,index=index,columns=[])
for i in line_list:
if str(i)[-1]==2:
continue
else:
duplicate=str(i)[:-1] + '2'
line_name='branch_' + str(i)[:-2]
if duplicate in line_list:
line_1=np.array(list(RT_Solution["/Line/"+str(i)+"/Flow/period_0/phase_4"]))
line_2=np.array(list(RT_Solution["/Line/"+duplicate+"/Flow/period_0/phase_4"]))
df_real_line_flow[line_name]=line_1+line_2
else:
df_real_line_flow[line_name]=list(RT_Solution["/Line/"+str(i)+"/Flow/period_0/phase_4"])
df_real_line_flow=df_real_line_flow['2024-07-14 00:00:00':'2024-7-14 23:55:00']
df_real_line_flow.head()
df_real_line_flow_norm=df_real_line_flow.copy()
branches_not_found=[]
for i in df_real_line_flow_norm.columns:
try:
rating=g.node[str(i)].get('data').get('rateA')
df_real_line_flow_norm[str(i)]=df_real_line_flow_norm[str(i)]/float(rating)
except KeyError:
df_real_line_flow_norm=df_real_line_flow_norm.drop(str(i), 1)
branches_not_found.append(i)
print branches_not_found
df_real_line_flow_norm.head()
line_list=list(DA_Solution["/Line"])
index=pd.date_range('2024-07-14 00:00:00','2024-7-20 23:00:00', freq='H')
df_real_line_flow_DA=pd.DataFrame(data=0,index=index,columns=[])
for i in line_list:
if str(i)[-1]==2:
continue
else:
duplicate=str(i)[:-1] + '2'
line_name='branch_' + str(i)[:-2]
if duplicate in line_list:
line_1=np.array(list(DA_Solution["/Line/"+str(i)+"/Flow/period_0/phase_4"]))
line_2=np.array(list(DA_Solution["/Line/"+duplicate+"/Flow/period_0/phase_4"]))
df_real_line_flow_DA[line_name]=line_1+line_2
else:
df_real_line_flow_DA[line_name]=list(DA_Solution["/Line/"+str(i)+"/Flow/period_0/phase_4"])
df_real_line_flow_DA=df_real_line_flow_DA.resample('5min').ffill()
df_real_line_flow_DA=df_real_line_flow_DA['2024-07-14 00:00:00':'2024-7-14 23:55:00']
df_real_line_flow_DA.head()
df_real_line_flow_norm_DA=df_real_line_flow_DA.copy()
branches_not_found=[]
for i in df_real_line_flow_norm_DA.columns:
try:
rating=g.node[str(i)].get('data').get('rateA')
df_real_line_flow_norm_DA[str(i)]=df_real_line_flow_norm_DA[str(i)]/float(rating)
except KeyError:
df_real_line_flow_norm_DA=df_real_line_flow_norm_DA.drop(str(i), 1)
branches_not_found.append(i)
print branches_not_found
df_real_line_flow_norm_DA.head()
bus_list=list(RT_Solution["/Node"])
index=pd.date_range('2024-07-14 00:00:00','2024-7-20 23:55:00', freq='5min')
df_bus_voltage=pd.DataFrame(data=0,index=index,columns=bus_list)
for i in bus_list:
df_bus_voltage[str(i)]=list(RT_Solution["/Node/"+str(i)+"/Voltage/period_0/phase_4"])
df_bus_voltage=df_bus_voltage.rename(columns={str(i):'bus_'+ str(i)})
df_bus_voltage=df_bus_voltage['2024-07-14 00:00:00':'2024-7-14 23:55:00']
df_bus_voltage.head()
bus_list=list(RT_Solution["/Node"])
index=pd.date_range('2024-07-14 00:00:00','2024-7-20 23:55:00', freq='5min')
df_bus_real_demand=pd.DataFrame(data=0,index=index,columns=bus_list)
for i in bus_list:
df_bus_real_demand[str(i)]=list(RT_Solution["/Node/"+str(i)+"/Load/period_0/phase_4"])
df_bus_real_demand=df_bus_real_demand.rename(columns={str(i):'bus_'+ str(i)})
df_bus_real_demand=df_bus_real_demand['2024-07-14 00:00:00':'2024-7-14 23:55:00']
df_bus_real_demand.head()
network = tdsvis.network(g, pos=pos, table=True, color='power flow', scale=2, width=400,
legend=False, node_size={'bus': 2, 'line': 0.25, 'gen': 0.5})
va_line = tdsvis.line(df_bus_real_demand, color='lightgrey',
scale=1.5, xlab="Time", ylab='Real Power Demand',
margin={'top': 10, 'left': 60, 'right': 10, 'bottom': 50})
vb_line = tdsvis.line(df_real_power_gen, color='lightgrey',
scale=1.5, xlab="Time", ylab='Real Power Generation',
margin={'top': 10, 'left': 60, 'right': 10, 'bottom': 50})
vc_line = tdsvis.line(df_real_line_flow, color='lightgrey',
scale=1.5, xlab="Time", ylab='Real Power Flow', emit='power flow',
margin={'top': 10, 'left': 60, 'right': 10, 'bottom': 50})
#tdsvis.plot([network, vm_line, va_line], emit=True, title="Bus data as a function of time")
tdsvis.plot([network, va_line,vb_line,vc_line], emit=True, title="RTS System Over Time")
network = tdsvis.network(g, pos=pos, table=True, color='power flow', scale=2, width=400,
legend=False, node_size={'bus': 2, 'line': 0.25, 'gen': 0.5})
va_line = tdsvis.line(df_bus_real_demand, color='lightgrey',
scale=1.5, xlab="Time", ylab='Real Power Demand',
margin={'top': 10, 'left': 60, 'right': 10, 'bottom': 50})
vb_line = tdsvis.line(df_real_power_gen_norm, color='lightgrey',
scale=1.5, xlab="Time", ylab='Real Power Generation',
margin={'top': 10, 'left': 60, 'right': 10, 'bottom': 50})
vc_line = tdsvis.line(df_real_line_flow_norm, color='lightgrey',
scale=1.5, xlab="Time", ylab='Real Power Flow', emit='power flow',
margin={'top': 10, 'left': 60, 'right': 10, 'bottom': 50})
#tdsvis.plot([network, vm_line, va_line], emit=True, title="Bus data as a function of time")
tdsvis.plot([network, va_line,vb_line,vc_line], emit=True, title="Normalized RTS System Over Time")
network = tdsvis.network(g, pos=pos, table=True, color='power generation', scale=2, width=400,
legend=False, node_size={'bus': 2, 'line': 0.25, 'gen': 0.5})
va_line = tdsvis.line(df_real_power_gen, color='lightgrey',
scale=1.5, xlab="Time", ylab='Real Power Generation', emit='power generation',
margin={'top': 10, 'left': 60, 'right': 10, 'bottom': 50})
vs_line = tdsvis.line(df_real_power_gen_DA, color='lightgrey',
scale=1.5, xlab="Time", ylab='DA Real Power Generation',
margin={'top': 10, 'left': 60, 'right': 10, 'bottom': 50})
vm_line = tdsvis.line(df_commitment_DA, color='lightgrey',
scale=1.5, xlab="Time", ylab='DA Generator Commitment',
margin={'top': 10, 'left': 60, 'right': 10, 'bottom': 50})
tdsvis.plot([network, vm_line, vs_line,va_line], emit=True, title="Generator Data Over Time")