#!/usr/bin/python import sys import argparse import time import datetime argparser = argparse.ArgumentParser() argparser.add_argument('--verbose', '-v', action='store_true') argparser.add_argument('--alpha', '-a', type=float, default=0.1) args = argparser.parse_args() if args.alpha < 0.0 or args.alpha > 1.0: raise ValueError, "you suck" ewma = 0.0 def update(weight): global ewma ewma = args.alpha*weight + (1.0 - args.alpha)*ewma last_ordinal = None last_weight = None for ln in sys.stdin: date, weight = ln.split() date = datetime.datetime.strptime(date, '%Y-%m-%d') weight = float(weight) ordinal = date.toordinal() if args.verbose: print (date.toordinal(), weight) if last_ordinal is None: last_ordinal = ordinal last_weight = weight ewma = weight else: last_ordinal += 1 while last_ordinal < ordinal: if args.verbose: print 'Missing day, using', last_weight update(last_weight) last_ordinal += 1 if args.verbose: print 'Update with', weight update(weight) last_weight = weight print date.strftime('%Y-%m-%d'), ewma