-
Notifications
You must be signed in to change notification settings - Fork 18
/
series_fit_poly.csl
69 lines (63 loc) · 2.06 KB
/
series_fit_poly.csl
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
//
// series_fit_poly_sf() - Fit a polynomial of a specified degree to a series using numpy.polyfit
//
// The function appends the fitted series column to the original input table\n'
//
.create function with (folder = "Packages\\Series", docstring = "Fit a polynomial of a specified degree to a series")
series_fit_poly_sf(tbl:(*), in_series:string, out_series:string, degree:int)
{
let kwargs = pack('in_series', in_series, 'out_series', out_series, 'degree', degree);
let code=
'\n'
'in_series = kargs["in_series"]\n'
'out_series = kargs["out_series"]\n'
'degree = kargs["degree"]\n'
'\n'
'def fit(s, deg):\n'
' x = np.arange(len(s))\n'
' coeff = np.polyfit(x, s, deg)\n'
' p = np.poly1d(coeff)\n'
' z = p(x)\n'
' return z\n'
'\n'
'result = df\n'
'result[out_series] = df[in_series].apply(fit, args=(degree,))\n'
;
tbl
| evaluate python(typeof(*), code, kwargs)
}
#connect cluster('demo11.westus.kusto.windows.net').database('ML')
//
// lambda - for debugging
//
let series_fit_poly_sf=(tbl:(*), in_series:string, out_series:string, degree:int)
{
let kwargs = pack('in_series', in_series, 'out_series', out_series, 'degree', degree);
let code=
'\n'
'in_series = kargs["in_series"]\n'
'out_series = kargs["out_series"]\n'
'degree = kargs["degree"]\n'
'\n'
'def fit(s, deg):\n'
' x = np.arange(len(s))\n'
' coeff = np.polyfit(x, s, deg)\n'
' p = np.poly1d(coeff)\n'
' z = p(x)\n'
' return z\n'
'\n'
'result = df\n'
'result[out_series] = df[in_series].apply(fit, args=(degree,))\n'
;
tbl
| evaluate python(typeof(*), code, kwargs) // new plugin syntax
};
//
// Test it
//
let max_t = datetime(2016-09-03);
demo_make_series1
| make-series num=count() on TimeStamp from max_t-1d to max_t step 5m by OsVer
| extend fnum = dynamic(null)
| invoke series_fit_poly_sf('num', 'fnum', 5)
| render timechart