def parse_amazon_date_to_range(d): ''' Convert an AMAZON.DATE into a start/end date pair. the payload from Amazon is one of the following: specific date --> 20XX-XX-XX week --> 20XX-WXX (i.e year-week_number) month --> 20XX-XX (i.e. year-month_number) ''' d = d.split('-') if len(d) == 3: # Specific date d = map(int, d) start = date(d[0], d[1], d[2]) return start, start + timedelta(hours=24) if d[1].startswith('W'): # A week number c = Calendar() # A list of weeks. Each week is a list of datetime.date instances weeks = sum(c.yeardatescalendar(int(d[0]), 55)[0], []) week_num = int(d[1][1:]) w = weeks[week_num] return w[0], w[-1] else: # A month y, m = map(int, d) month_cal = sum(monthcalendar(y, m)) end = len([d for d in month_cal if d != 0]) return date(y, m, 1), date(y, m, end)
def most_frequent_days(year): """ List of most frequent days of the week in the given year """ calendar = Calendar(firstweekday=0) i = calendar.yeardatescalendar(year, 1) result = [ x.isoweekday() for x in i[0][0][0] + i[-1][-1][-1] if x.year == year ] return [ day_name[x - 1] for x in set(result) if result.count(x) == result.count(max(result, key=result.count)) ]
open('generation_demand_full.csv', 'w'), [ 'timestamp', 'demand', 'forecast', 'programmed', 'nuclear', 'coal', 'fuel_gas', 'combined_cycle', 'hydroelectric', 'solar', 'eolic', 'autoproduction', 'balearic_link', 'international_exchange' ]) generationDemandWriter.writeheader() all_data = {} now = datetime.now() calendar = Calendar() for year in range(2007, now.year + 1): for date in filter( lambda x: x.year == year, chain(*chain(*calendar.yeardatescalendar(year, 12)[0]))): if datetime(date.year, date.month, date.day) > now: break d = date.strftime('%Y-%m-%d') filename = 'data/generation_demand_%s.json' % d if not os.path.exists(filename): data = r.generation_demand(d) json.dump(data, open(filename, 'w')) else: data = json.load(open(filename, 'r')) for datum in data: if datum['timestamp'] not in all_data: all_data[datum['timestamp']] = datum filename = 'data/forecast_programmed_%s.json' % d
def get_months(date): calendar = Calendar() month_rows = calendar.yeardatescalendar(date.year, 1) months = [month_row[0] for month_row in month_rows] return months
import os.path import csv if not os.path.exists('data'): os.mkdir('data') generationDemandWriter = csv.DictWriter(open('generation_demand_full.csv', 'w'), ['timestamp', 'demand', 'forecast', 'programmed', 'nuclear', 'coal', 'fuel_gas', 'combined_cycle', 'hydroelectric', 'solar', 'eolic', 'autoproduction', 'balearic_link', 'international_exchange']) generationDemandWriter.writeheader() all_data = {} now = datetime.now() calendar = Calendar() for year in range(2007, now.year + 1): for date in filter(lambda x: x.year == year, chain(*chain(*calendar.yeardatescalendar(year, 12)[0]))): if datetime(date.year, date.month, date.day) > now: break d = date.strftime('%Y-%m-%d') filename = 'data/generation_demand_%s.json' % d if not os.path.exists(filename): data = r.generation_demand(d) json.dump(data, open(filename, 'w')) else: data = json.load(open(filename, 'r')) for datum in data: if datum['timestamp'] not in all_data: all_data[datum['timestamp']] = datum filename = 'data/forecast_programmed_%s.json' % d