def check_csv(csvpath, split=None): try: period = int(csvpath.split(".")[-2]) except ValueError: period = None _, data, _ = read_csv(csvpath, split=split) seasons, trend = fit_seasons(data) assert seasons is None or len(seasons) == period, \ "expected period {}, got {}".format( period, len(seasons) if seasons else None)
def main(): import os.path from optparse import OptionParser from textwrap import dedent import matplotlib import matplotlib.pyplot as plt matplotlib.style.use('ggplot') from seasonal.application import read_csv parser = OptionParser( usage="usage: %prog [options] csv-files...", description="Holt-Winters demo using the seasonal package" ) parser.add_option("--column", default=-1, help="csv column to use (name or 0-based index, default rightmost)") parser.add_option("--split", type="float", default=None, help=("split data at the split*100% or int(split) " + "point for initialization")) parser.add_option("--demo", action="store_true", help="demonstrate with some air passenger data") (options, args) = parser.parse_args() if options.demo: args = [os.path.join(os.path.dirname(seasonal.__file__), "data/airPassengers.csv")] if options.split is None: options.split = 0.20 if not args: parser.print_help() exit(-1) if not plt: stderr.write( "Error: matplotlib must be installed\n") exit(-1) for csvpath in args: _, data, column = read_csv(csvpath, column=options.column) fcast, smoothed = hw(data, options.split) plt.figure() plt.title("Holt Winters demonstration") plt.plot(data, label=column) plt.plot(fcast, label="forecast") plt.plot(smoothed, label="smoothed") leg = plt.legend(loc='upper left') leg.get_frame().set_alpha(0.5) plt.show()
def main(): import os.path from optparse import OptionParser from textwrap import dedent import matplotlib import matplotlib.pyplot as plt matplotlib.style.use('ggplot') from seasonal.application import read_csv parser = OptionParser( usage="usage: %prog [options] csv-files...", description="Holt-Winters demo using the seasonal package") parser.add_option( "--column", default=-1, help="csv column to use (name or 0-based index, default rightmost)") parser.add_option("--split", type="float", default=None, help=("split data at the split*100% or int(split) " + "point for initialization")) parser.add_option("--params", help=("comma-separated list of alpha, beta, gamma. " + "default is to estimate these from ALL the data")) parser.add_option("--demo", action="store_true", help="demonstrate with some air passenger data") (options, args) = parser.parse_args() if options.demo: args = [ os.path.join(os.path.dirname(seasonal.__file__), "data/airPassengers.csv") ] if options.split is None: options.split = 0.20 if not args: parser.print_help() exit(-1) if not plt: stderr.write("Error: matplotlib must be installed\n") exit(-1) if options.params is not None: try: params = [float(p) for p in options.params.split(',')] options.params = HWParams(*params) except Exception: stderr.write("\nError: --params wants alpha,beta,gamma\n") parser.print_help() exit(-1) for csvpath in args: index, data, column = read_csv(csvpath, column=options.column) fcast, smoothed = hw(data, options.split, params=options.params) plt.figure(1) plt.subplot(211) plt.title("Holt Winters for " + os.path.basename(csvpath)) plt.plot(index, data, label=column) plt.plot(index, fcast, label="forecast") plt.plot(index, smoothed, label="smoothed") leg = plt.legend(loc='upper left') leg.get_frame().set_alpha(0.5) plt.subplot(212) plt.title("Forecast Error") plt.plot(index, fcast - data) plt.show()