Пример #1
0
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)
Пример #2
0
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))
    ]
Пример #3
0
        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
Пример #4
0
    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
Пример #5
0
  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