1818"""
1919
2020import pandas as pd
21- import numpy as np
21+ #import pdb
22+
2223
2324class AlignData ():
25+
26+ @staticmethod
27+ def get_typical_year ():
28+ # Construct a dummy TimeStamp index for the typical year
29+ return pd .date_range ('2015-01-01' , periods = 8760 , freq = 'H' )
30+
2431 def __init__ (self , price_data = None , met_data = None ):
2532 self .pricing = price_data
2633 self .met = met_data
2734
2835 def resample_timeseries (self , timestep = '60min' ):
2936 """
3037 Resample met, generation, and power pricing data to hourly
38+ TO DO: Handle missing vals introduced by re-indexing better
3139 """
32- self .power_hour = self .pricing .get_pricing_field ().resample (timestep ).mean ()
33- self .met_hour = self .met .get_wind_and_generation ().resample (timestep ).mean ()
40+ repwr = self .pricing .get_pricing_field ().resample (timestep ).mean ()
41+ self .power_hour = repwr .bfill ()
42+ remet = self .met .get_wind_and_generation ().resample (timestep ).mean ()
43+ self .met_hour = remet .bfill ()
3444
3545 def determine_overlap (self ):
3646 # Check if there of overlap between generation and pricing data
@@ -82,17 +92,19 @@ def calculate_typical_year(self):
8292 At this point, the datetime axis is no longer available.
8393 We will deal with leap-years then re-create the TimeStamp index.
8494 """
95+ #pdb.set_trace()
8596 self .met_yr = self .met_hour .groupby ([self .met_hour .index .month ,
8697 self .met_hour .index .day ,
8798 self .met_hour .index .hour ]).mean ()
8899 self .pwr_yr = self .power_hour .groupby ([self .power_hour .index .month ,
89100 self .power_hour .index .day ,
90101 self .power_hour .index .hour ]).mean ()
91- self .met_yr = self .met_yr .remove_leap_day ()
92- self .pwr_yr = self .pwr_yr .remove_leap_day ()
102+ self .remove_leap_day ()
93103 typical_year = self .get_typical_year ()
94- self .met_yr .index , self .met_yr .index .names = typical_year , ["TimeStamp" ]
95- self .pwr_yr .index , self .pwr_yr .index .names = typical_year , ["TimeStamp" ]
104+ self .met_yr .index = typical_year
105+ self .met_yr .index .names = ["TimeStamp" ]
106+ self .pwr_yr .index = typical_year
107+ self .pwr_yr .index .names = ["TimeStamp" ]
96108
97109
98110 def remove_leap_day (self ):
@@ -103,28 +115,26 @@ def remove_leap_day(self):
103115 Drop all Feb 29 rows:
104116 temp2 = temp.drop(temp.index[1416:1440], axis = 0)
105117 """
106- if len (self .met_hour .index ) == 8784 :
118+ if len (self .met_yr .index ) == 8784 :
107119 print ("removing leap day from met year" )
108- self .met_yr = self .met_hour .drop (self .met_hour .index [1416 :1440 ], axis = 0 )
109- if len (self .power_hour .index ) == 8784 :
120+ self .met_yr = self .met_yr .drop (self .met_yr .index [1416 :1440 ], axis = 0 )
121+ if len (self .pwr_yr .index ) == 8784 :
110122 print ("removing leap day from power year" )
111- self .pwr_yr = self .power_hour .drop (self .power_hour .index [1416 :1440 ], axis = 0 )
112-
113- def get_typical_year (self ):
114- # Construct a dummy TimeStamp index for the typical year
115- typical_year = pd .date_range ('2015-01-01' , periods = 8760 , freq = 'H' )
123+ self .pwr_yr = self .pwr_yr .drop (self .pwr_yr .index [1416 :1440 ], axis = 0 )
116124
117125 def align_data (self ):
118126 """
119- Determine if there is a year of overlapping data, else,
127+ Determine if there is a year of overlapping data, else,
120128 calculate a typical year of data. Return single data frame
121129 of met and power on same time axis.
122130 """
123131 self .resample_timeseries ()
124- self .remove_leap_day ()
125132 if self .determine_overlap () and self .determine_amt_overlap ():
133+ print ("Calcuating Concurrent Year" )
126134 self .calculate_same_year ()
135+ self .calculate_typical_year ()
127136 else :
137+ print ("Calcutating Typical Year" )
128138 self .calculate_typical_year ()
129- return pd .concat ([self .met_hour , self .power_hour ], axis = 1 )
139+ return pd .concat ([self .met_yr , self .pwr_yr ], axis = 1 )
130140
0 commit comments