-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsimplifications.py
119 lines (106 loc) · 4.84 KB
/
simplifications.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import numpy as np
from matplotlib import pyplot as plt
from rdp import rdp
import logging
from Utils.load_data import load_dataset
from ORSalgorithm.ORS_algorithm import get_simplifications
from ORSalgorithm.Perturbations.dataTypes import SegmentedTS
from SimplificationMethods.BottumUp.bottomUp import get_swab_approx
from SimplificationMethods.Visvalingam_whyattt.Visvalingam_Whyatt import simplify as VC_simplify
def get_OS_simplification(dataset_name, datset_type, alpha):
"""
Apply OS algorithm to simplify all time series in the dataset.
"""
all_time_series = load_dataset(dataset_name, data_type=datset_type)
all_simplifications = []
first = False
logging.debug(alpha)
for ts_y in all_time_series:
ts_x = [i for i in range(len(ts_y))]
my_k = 1
beta = 1/(len(ts_x)-1)*(1-alpha)
selcted_xs, selectd_ys = get_simplifications(X=ts_x, Y=ts_y, K=my_k, alpha=alpha, beta=beta)
if first:
plt.figure()
plt.plot(ts_x, ts_y, label="Original")
plt.plot(selcted_xs[0], selectd_ys[0], label="Simplified")
plt.plot(ts_x, SegmentedTS(x_pivots=selcted_xs[0], y_pivots=selectd_ys[0], ts_length=len(ts_y)).line_version, label="Line Simplified", linestyle="--")
plt.legend()
plt.show()
first = False
segTS = SegmentedTS(x_pivots=selcted_xs[0], y_pivots=selectd_ys[0], ts_length=len(ts_y))
all_simplifications.append(segTS)
return all_time_series, all_simplifications
def get_RDP_simplification(dataset_name,datset_type, epsilon):
"""
Apply Ramer-Douglas-Peucker (RDP) algorithm to simplify all time series in the dataset.
"""
all_time_series = load_dataset(dataset_name, data_type=datset_type)
all_simplifications = []
first = False
epsilon = epsilon
logging.debug("epis:", epsilon)
for ts_y in all_time_series:
ts_x = list(range(len(ts_y)))
simp_mask = rdp(np.array(list(zip(ts_x,ts_y))), epsilon=epsilon, return_mask=True)
simp_y = [y for y,bool in zip(ts_y, simp_mask) if bool]
simp_x = [x for x,bool in zip(ts_x, simp_mask) if bool]
if first:
plt.figure()
plt.plot(ts_x, ts_y, label="Original")
plt.plot(simp_x, simp_y, label="Simplified")
plt.plot(ts_x, SegmentedTS(x_pivots=simp_x, y_pivots=simp_y, ts_length=len(ts_y)).line_version, label="Line Simplified", linestyle="--")
plt.show()
first = False
all_simplifications.append(SegmentedTS(x_pivots=simp_x, y_pivots=simp_y, ts_length=len(ts_y)))
return all_time_series, all_simplifications
def get_bottom_up_simplification(dataset_name, datset_type, max_error):
"""
Apply Bottom Up algorithm to simplify all time series in the dataset.
"""
all_time_series = load_dataset(dataset_name, data_type=datset_type)
all_simplifications = []
first = False
max_error = max_error
logging.debug("max_error:", max_error)
for ts_y in all_time_series:
ts_x = list(range(len(ts_y)))
simplification = get_swab_approx(ts_y, max_error=max_error)
simp_x = simplification.x_pivots
simp_y = simplification.y_pivots
if first:
plt.figure()
plt.title("Simplification using SWAB")
plt.plot(ts_x, ts_y, label="Original")
plt.plot(simp_x, simp_y, label="Simplified")
plt.plot(ts_x, SegmentedTS(x_pivots=simp_x, y_pivots=simp_y, ts_length=len(ts_y)).line_version,
label="Line Simplified", linestyle="--")
plt.show()
first = False
all_simplifications.append(SegmentedTS(x_pivots=simp_x, y_pivots=simp_y, ts_length=len(ts_y)))
return all_time_series, all_simplifications
def get_VC_simplification(dataset_name, datset_type, alpha):
"""
Apply Visvalingam Whyatt algorithm to simplify all time series in the dataset.
"""
all_time_series = load_dataset(dataset_name, data_type=datset_type)
all_simplifications = []
first = False
alpha = alpha
logging.debug("alpha:", alpha)
for ts_y in all_time_series:
ts_x = list(range(len(ts_y)))
simplification = VC_simplify(ts_y, alpha=alpha)
simp_x = simplification.x_pivots
simp_y = simplification.y_pivots
if first:
plt.figure()
plt.title("Simplification using VC")
plt.plot(ts_x, ts_y, label="Original")
plt.plot(simp_x, simp_y, label="Simplified")
plt.plot(ts_x, SegmentedTS(x_pivots=simp_x, y_pivots=simp_y, ts_length=len(ts_y)).line_version,
label="Line Simplified", linestyle="--")
plt.show()
first = False
all_simplifications.append(SegmentedTS(x_pivots=simp_x, y_pivots=simp_y, ts_length=len(ts_y)))
return all_time_series, all_simplifications