-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathexample.py
90 lines (70 loc) · 3.23 KB
/
example.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# -*- encoding: UTF-8 -*-
import os
import datetime
import argparse
from hydromet_forecasting.forecasting import RegressionModel, Forecaster
from hydromet_forecasting.timeseries import FixedIndexTimeseriesCSV
arg_parser = argparse.ArgumentParser()
arg_parser.add_argument(
'-f',
'--frequency',
help="Frequency",
choices=(
'fiveday',
'decade',
'monthly',
),
default='decade'
)
arg_parser.add_argument('-l', '--language', help='Language', choices=('en', 'ru'), default='en')
args = arg_parser.parse_args()
# ---------------- SETUP OF A REGRESSION MODEL ----------------
# Get a dict of available regression methods
print(RegressionModel.SupportedModels.list_models())
# Initialise a regression model class
reg_model = RegressionModel.build_regression_model(RegressionModel.SupportedModels(3))
# Print default model parameters:
print("Default parameters: %s" %reg_model.default_parameters)
# Print possible parameter choices:
print("Possible parameters or range: %s" %reg_model.selectable_parameters)
# Set parameter and configure the regression model from the model class
model=reg_model.configure() #{'n_estimators':20}
# ---------------- LOADING TIMESERIES DATA FROM A FILE ----------------
# modes: "m","d","p","dl" --> monthly, decadal, pentadal, daily
if args.frequency == 'fiveday':
discharge = FixedIndexTimeseriesCSV(
"example_data/fiveday/Ala_Archa/Q.csv", mode='p', label="D")
precipitation = FixedIndexTimeseriesCSV(
"example_data/fiveday/Ala_Archa/P.csv", mode='p', label="P")
temperature = FixedIndexTimeseriesCSV(
"example_data/fiveday/Ala_Archa/T.csv", mode='p', label="T")
elif args.frequency == 'decade':
discharge = FixedIndexTimeseriesCSV(
"example_data/decadal/Ala_Archa/Q.csv", mode='d', label="D")
precipitation = FixedIndexTimeseriesCSV(
"example_data/decadal/Ala_Archa/P.csv", mode='d', label="P")
temperature = FixedIndexTimeseriesCSV(
"example_data/decadal/Ala_Archa/T.csv", mode='d', label="T")
elif args.frequency == 'monthly':
discharge = FixedIndexTimeseriesCSV(
"example_data/monthly/Talas_Kluchevka/Q.csv", mode='m', label="D")
precipitation = FixedIndexTimeseriesCSV(
"example_data/monthly/Talas_Kluchevka/PREC_ERA.csv", mode='m', label="P")
temperature = FixedIndexTimeseriesCSV(
"example_data/monthly/Talas_Kluchevka/TEMP_ERA.csv", mode='m', label="T")
# ---------------- INITIALISING THE FORECASTING OBJECT ----------------
FC_obj = Forecaster(model=model,y=discharge,X=[discharge,temperature,precipitation],laglength=[3,3,3],lag=0,multimodel=True)
# ---------------- TRAIN & OUTPUT A PERFORMANCE ASSESSMENT OF THE MODEL SETUP ----------------
def print_progress(i, i_max): print(str(i) + ' of ' + str(int(i_max)))
PA_obj = FC_obj.train_and_evaluate(feedback_function=print_progress)
PA_obj.write_html(
username='User Name',
organization='Organization',
site_name=u'р.Чон-Кемин-устье',
site_code='15149',
filename='assessment_report_{}.html'.format(args.frequency),
language=args.language,
)
# ---------------- FORECAST ----------------
prediction=FC_obj.predict(targetdate=datetime.date(2011,6,1),X=[discharge,temperature,precipitation])
print(prediction)