|
| 1 | +using Pkg |
| 2 | +Pkg.activate("..") |
| 3 | +using TSML |
| 4 | +using TSML.TSMLTransformers |
| 5 | +using DataFrames |
| 6 | +using Dates |
| 7 | +using CSV |
| 8 | +using Plots |
| 9 | + |
| 10 | +fname ="testdata.csv" |
| 11 | +dat = CSV.read(fname) |
| 12 | +rename!(dat,names(dat)[1]=>:Date,names(dat)[2]=>:Value) |
| 13 | +dat[:Date] = DateTime.(dat[:Date],"d/m/y H:M") |
| 14 | +orig = deepcopy(dat) |
| 15 | +filter1 = DateValgator() |
| 16 | +filter2 = DateValNNer(Dict(:nnsize=>1)) |
| 17 | + |
| 18 | +fit!(filter1,dat,[]) |
| 19 | +res1=transform!(filter1,dat) |
| 20 | + |
| 21 | +fit!(filter2,res1,[]) |
| 22 | +res2=transform!(filter2,res1) |
| 23 | + |
| 24 | +mypipeline = Pipeline(Dict( |
| 25 | + :transformers => [csvreader,filter1,filter2] |
| 26 | + ) |
| 27 | +) |
| 28 | + |
| 29 | +fit!(mypipeline) |
| 30 | +res = transform!(mypipeline) |
| 31 | + |
| 32 | +Plots.plot(res[:Value][end-3000:end]) |
| 33 | + |
| 34 | +rfname = replace(fname,".csv"=>"-result.csv") |
| 35 | +res |> CSV.write(rfname) |
| 36 | + |
| 37 | +using TSML.TSMLTypes |
| 38 | +import TSML.TSMLTypes.fit! |
| 39 | +import TSML.TSMLTypes.transform! |
| 40 | + |
| 41 | +mutable struct CSVDateValReader <: Transformer |
| 42 | + model |
| 43 | + args |
| 44 | + function CSVDateValReader(args=Dict()) |
| 45 | + default_args = Dict( |
| 46 | + :filename => "", |
| 47 | + :dateformat => "" |
| 48 | + ) |
| 49 | + new(nothing,mergedict(default_args,args)) |
| 50 | + end |
| 51 | +end |
| 52 | + |
| 53 | +function fit!(csvrdr::CSVDateValReader,x::T=[],y::Vector=[]) where {T<:Union{DataFrame,Vector,Matrix}} |
| 54 | + fname = csvrdr.args[:filename] |
| 55 | + fmt = csvrdr.args[:dateformat] |
| 56 | + (fname != "" && fmt != "") || error("missing filename or date format") |
| 57 | + model = csvrdr.args |
| 58 | +end |
| 59 | + |
| 60 | +function transform!(csvrdr::CSVDateValReader,x::T=[]) where {T<:Union{DataFrame,Vector,Matrix}} |
| 61 | + fname = csvrdr.args[:filename] |
| 62 | + fmt = csvrdr.args[:dateformat] |
| 63 | + df = CSV.read(fname) |
| 64 | + ncol(df) == 2 || error("dataframe should have only two columns: Date,Value") |
| 65 | + rename!(df,names(df)[1]=>:Date,names(df)[2]=>:Value) |
| 66 | + df[:Date] = DateTime.(df[:Date],fmt) |
| 67 | + df |
| 68 | +end |
| 69 | + |
| 70 | +csvreader = CSVDateValReader(Dict(:filename=>"testdata.csv",:dateformat=>"d/m/y H:M")) |
| 71 | + |
| 72 | +fit!(csvreader) |
| 73 | +transform!(csvreader) |
0 commit comments