Beispiel #1
0
def get_dtw_wrapping_path(data, col1, col2):
    '''
    input: 
        data: dataframe 源数据
        col1: 列名
        col2:列名
    output: 输出图像,上方是col1,下方是col2 
    '''
    indicators = [i for i in data.columns if i not in 'date']
    array_subset = data[indicators].values
    array_subset_zscore = stats.zscore(array_subset)
    array_subset_zscore_T = array_subset_zscore.T
    x_idx = indicators.index(col1)
    y_idx = indicators.index(col2)
    #     x = array_for_dtw_zscore_T[col1,:]
    #     y = array_for_dtw_zscore_T[col2,:]
    x = array_subset_zscore_T[x_idx, :]
    y = array_subset_zscore_T[y_idx, :]
    path = dtw.warping_path(x, y)
    outname = col1 + 'vs' + col2
    ds_xy = dtw.distance(x, y)
    dtwvis.plot_warping(
        x,
        y,
        path,
        filename=
        "D:/Pythoncode/JD_mart/operation_flow_distribution/DTW_for_business/results/%s.png"
        % outname)
    print("%s 和 %s 的DTW距离: %2.4f" % (col1, col2, ds_xy))
Beispiel #2
0
def print_dtw(series_1, series_2, output_path):
    """
    Function to draw the DTW for two different time series

    :param series_1: First time serie to compare
    :param series_2: Second time serie to compare
    :param output_path: Path where the pictures will be stored
    """

    len1 = roundup(series_1.__len__())
    len2 = roundup(series_2.__len__())

    contador = 0
    series_1 = series_1
    series_2 = series_2
    series_1 = series_1[:len1]
    series_1 = np.split(series_1, int(len1 / 100))
    series_2 = series_2[:len2]
    series_2 = np.split(series_2, int(len2 / 100))

    for i in range(series_1.__len__()):
        path = dtw.warping_path(series_1[i], series_2[i])
        print(path)
        dtwvis.plot_warping(series_1[i],
                            series_2[i],
                            path,
                            filename=output_path % contador)
        contador += 1
Beispiel #3
0
def test_twoleadecg_1(directory=None):
    with util_numpy.test_uses_numpy() as np:
        s1 = np.array([1.8896,-0.23712,-0.23712,-0.20134,-0.16556,-0.20134,-0.16556,-0.12978,-0.058224,0.013335,0.031225,0.10278,0.013335,-0.094004,-0.058224,-0.11189,-0.14767,-0.16556,-0.14767,-0.094004,-0.14767,-0.16556,-0.16556,-0.21923,-0.21923,-0.25501,-0.20134,-0.20134,-0.18345,-0.23712,-0.20134,-0.23712,-0.12978,-0.11189,-0.46969,-1.2747,-2.3481,-2.8133,-2.7775,-2.5986,-2.3839,-2.0082,-1.8651,-1.6146,-1.3463,-1.1495,-0.88115,-0.55914,-0.34446,-0.16556,-0.0045548,0.2459,0.53214,0.65737,0.71104,0.74682,0.76471,0.76471,0.80049,0.81838,0.87204,0.88993,0.97938,0.97938,1.0152,1.0867,1.1583,1.1762,1.212,1.2656,1.2656,1.2477,1.2656,1.1762,1.0867,0.99727,0.88993,0.74682,0.63948,0.58581,0.47847,0.38902])
        s2 = np.array([1,0.93163,0.094486,0.094486,0.038006,0.080366,0.080366,0.052126,0.080366,0.12273,0.22157,0.29217,0.41925,0.48985,0.39101,0.39101,0.30629,0.24981,0.19333,0.080366,-0.0043544,-0.018474,-0.089075,-0.11731,-0.14555,-0.17379,-0.21615,-0.27263,-0.20203,-0.315,-0.25851,-0.17379,-0.28675,-0.24439,0.16509,-0.11731,-1.0069,-1.9812,-2.4895,-2.786,-2.9272,-2.4612,-2.0518,-1.8964,-1.8258,-1.7411,-1.6705,-1.2893,-0.99276,-0.65388,-0.37148,-0.30087,-0.046714,0.30629,0.53221,0.65929,0.65929,0.72989,0.74401,0.87109,0.89933,0.95581,0.96993,1.0546,1.1394,1.2523,1.2523,1.2947,1.3088,1.3512,1.2806,1.2806,1.1394,1.097,0.89933,0.72989,0.67341,0.54633,0.37689,0.23569,0.10861,0.080366,-0.074955])
        d, paths = dtw.warping_paths(s1, s2, psi=2, window=5)
        path = dtw.warping_path(s1, s2, psi=2)
        if directory:
            dtwvis.plot_warping(s1, s2, path, filename=str(directory / "warping.png"))
            path = dtw.best_path(paths)
            dtwvis.plot_warpingpaths(s1, s2, paths, path, filename=str(directory / "warpingpaths.png"))
def dtw_visual(x, y):  # shape X, Y np.array([0., 0, 1, 2, 1, 0, 2, 1, 0, 0])
    """
    Plot to show how dtw works
    :param x: time series
    :param y: time series
    :return:
    """
    from dtaidistance import dtw
    from dtaidistance import dtw_visualisation as dtwvis
    path = dtw.warping_path(x, y)
    dtwvis.plot_warping(x, y, path, filename="tmp.png")
Beispiel #5
0
def main():
    all_calculations = []

    for pattern in patterns:
        len_template = len(pattern.get_pattern())

        window_size = len_template
        while window_size < len_list_of_closes:
            start_window: int = 0
            end_window: int = window_size  # not -1 because thts not how array[x:y] works

            while end_window < len_list_of_closes:
                window = list_of_closes[start_window:end_window]
                minimum_close, maximum_close = _get_min_max_close(window)

                window_calculations = _calculate_dtw_over_time_window(
                    window=window,
                    minimum_close=minimum_close,
                    maximum_close=maximum_close,
                    pattern=pattern,
                    start_window=start_window,
                    end_window=end_window,
                    threshold=5)

                if window_calculations:
                    all_calculations = all_calculations + window_calculations

                start_window = start_window + 1
                end_window = end_window + 1
            window_size = window_size + len_template

    all_calculations_df = pd.DataFrame(all_calculations).sort_values(
        by=['distance'])
    csv = all_calculations_df.to_csv('data/output.csv', index=False)

    for i, row in all_calculations_df.iterrows():
        window = history_price_btc[
            (history_price_btc['date'] >= row['start_date'])
            & (history_price_btc['date'] <= row['end_date'])]

        plot_fig = window.plot(x='date', y='close').get_figure()
        plot_fig.savefig(
            f'data/imgs/{row["start_date"]}-{row["end_date"]}-{row["pattern_name"]}.png'
        )
        plt.close(plot_fig)

        dtwvis.plot_warping(
            row['normalized_data'],
            row['pattern'],
            row['path'],
            filename=
            f'data/imgs/{row["start_date"]}-{row["end_date"]}-{row["pattern_name"]}-dtw.png'
        )
Beispiel #6
0
def test_normalize():
    with util_numpy.test_uses_numpy() as np:
        s1 = np.array([0., 0, 1, 2, 1, 0, 1, 0, 0, 2, 1, 0, 0])
        s2 = np.array([0., 1, 2, 3, 1, 0, 0, 0, 2, 1, 0, 0, 0])
        r, path = dtw.warp(s1, s2)
        if directory:
            dtwvis.plot_warp(s1, s2, r, path, filename=str(directory / "test_normalize1.png"))
        r_c = np.array([0., 1., 2., 2., 1., 0.5, 0., 0., 2., 1., 0., 0., 0.])
        if directory:
            path = dtw.warping_path(s1, s2, psi=2)
            dtwvis.plot_warping(s1, s2, path, filename=str(directory / "test_normalize2.png"))
        np.testing.assert_almost_equal(r, r_c, decimal=4)
Beispiel #7
0
def test_bug4():
    with util_numpy.test_uses_numpy() as np:
        s1 = np.array([0., 0, 1, 2, 1, 0, 1, 0, 0, 2, 1, 0, 0])
        s2 = np.array([0., 1, 2, 3, 1, 0, 0, 0, 2, 1, 0, 0, 0])
        path = dtw.warping_path(s1, s2)

        if directory:
            fn = directory / "bug4.png"
        else:
            file = tempfile.NamedTemporaryFile()
            fn = Path(file.name + "_bug4.png")

        dtwvis.plot_warping(s1, s2, path, filename=str(fn))
Beispiel #8
0
    def compare_34dim(self, new_video_coordinates, reference_coordinates, i, j,
                      weights):
        # new_video_coordinates = self.normalize(new_video_coordinates)
        new_video_coordinates = new_video_coordinates.reshape(i, 34)
        reference_coordinates = reference_coordinates.reshape(j, 34)
        best_path = dtw.best_path(
            dtw_ndim.warping_paths(new_video_coordinates,
                                   reference_coordinates)[1])
        for body_part in range(17):
            dtw_visualisation.plot_warping(
                new_video_coordinates[:, 2 * body_part],
                reference_coordinates[:, 2 * body_part], best_path,
                "warp" + str(2 * body_part) + ".png")
            dtw_visualisation.plot_warping(
                new_video_coordinates[:, 2 * body_part + 1],
                reference_coordinates[:, 2 * body_part + 1], best_path,
                "warp" + str(2 * body_part + 1) + ".png")
        # Calculating euclidean distance per body part to apply weights
        # max_frames = max(i, j)
        body_part_scores = []
        for body_part_i in range(17):
            v1_part, v2_part = [False] * len(best_path) * 2, [
                False
            ] * len(best_path) * 2
            print(len(v1_part), len(v2_part), len(best_path))
            print(best_path)
            for k, t in enumerate(best_path):
                new_frame, reference_frame = t
                v1_part[k * 2] = new_video_coordinates[new_frame][body_part_i *
                                                                  2]
                v1_part[k * 2 +
                        1] = new_video_coordinates[new_frame][body_part_i * 2 +
                                                              1]
                v2_part[k *
                        2] = reference_coordinates[reference_frame][body_part_i
                                                                    * 2]
                v2_part[k * 2 + 1] = reference_coordinates[reference_frame][
                    body_part_i * 2 + 1]
            v1_part = v1_part / np.linalg.norm(v1_part)
            v2_part = v2_part / np.linalg.norm(v2_part)
            score = self.percentage_score(ed.distance(v1_part, v2_part))
            print(score)
            body_part_scores.append(score)

        return self.apply_weights(weights, body_part_scores), body_part_scores
Beispiel #9
0
    def dtw_(self, length_min, length_max):
        path = dtw.warping_path(self.new_real_normal[length_min:length_max],
                                self.ncsimul_y_normal[length_min:length_max])
        distance, paths = dtw.warping_paths(
            self.new_real_normal[length_min:length_max],
            self.ncsimul_y_normal[length_min:length_max])

        dtwvis.plot_warping(self.new_real_normal[length_min:length_max],
                            self.ncsimul_y_normal[length_min:length_max],
                            path,
                            filename="warp" + str(self.test) + ".png")

        best_path = dtw.best_path(paths)
        dtwvis.plot_warpingpaths(self.new_real_normal[length_min:length_max],
                                 self.ncsimul_y_normal[length_min:length_max],
                                 paths,
                                 best_path,
                                 filename="best_path" + str(self.test) +
                                 ".png")
Beispiel #10
0
def prep_dtw(y, y_, min, max, file_):
    try:
        len(y) >= max and len(y_) >= max
    except:
        raise NameError('the maximum lengh not respects lenght of inputs')
    else:
        path = dtw.warping_path(y[min:max], y_[min:max])
        distance, paths = dtw.warping_paths(y[min:max], y_[min:max])
        dtwvis.plot_warping(y[min:max],
                            y_[min:max],
                            path,
                            filename=file_ + "warp_results.png")

        best_path = dtw.best_path(paths)
        dtwvis.plot_warpingpaths(y[min:max],
                                 y_[min:max],
                                 paths,
                                 best_path,
                                 filename=file_ + "best_path_results.png")

    return path, distance
Beispiel #11
0
def main():
    s1 = np.array([0., 0, 1, 2, 1, 0, 1, 0, 0, 0, 2, 1, 0, 0])
    s2 = np.array([0., 1, 2, 3, 1, 0, 0, 0, 2, 1, 0, 0, 0])
    path = dtw.warping_path(s1, s2)
    dtwvis.plot_warping(s1, s2, path)
    
    plt.figure(1)
    plt.subplot(211)
    plt.title('Timeseries: s1 & s2')
    plt.plot(s1)
    plt.subplot(212)
    plt.plot(s2)
    plt.show()
    
    dist = dtw.distance(s1, s2)
    print(dist)
    
    plt.figure(2)
    d, paths = dtw.warping_paths(s1, s2, window=3, psi=2)
    best_path = dtw.best_path(paths)
    dtwvis.plot_warpingpaths(s1, s2, paths, best_path)
Beispiel #12
0
def test_twoleadecg_1():
    """Example from http://www.timeseriesclassification.com/description.php?Dataset=TwoLeadECG"""
    with util_numpy.test_uses_numpy() as np:
        s1 = np.array([1.8896,-0.23712,-0.23712,-0.20134,-0.16556,-0.20134,-0.16556,-0.12978,-0.058224,0.013335,0.031225,0.10278,0.013335,-0.094004,-0.058224,-0.11189,-0.14767,-0.16556,-0.14767,-0.094004,-0.14767,-0.16556,-0.16556,-0.21923,-0.21923,-0.25501,-0.20134,-0.20134,-0.18345,-0.23712,-0.20134,-0.23712,-0.12978,-0.11189,-0.46969,-1.2747,-2.3481,-2.8133,-2.7775,-2.5986,-2.3839,-2.0082,-1.8651,-1.6146,-1.3463,-1.1495,-0.88115,-0.55914,-0.34446,-0.16556,-0.0045548,0.2459,0.53214,0.65737,0.71104,0.74682,0.76471,0.76471,0.80049,0.81838,0.87204,0.88993,0.97938,0.97938,1.0152,1.0867,1.1583,1.1762,1.212,1.2656,1.2656,1.2477,1.2656,1.1762,1.0867,0.99727,0.88993,0.74682,0.63948,0.58581,0.47847,0.38902])
        s2 = np.array([1,0.93163,0.094486,0.094486,0.038006,0.080366,0.080366,0.052126,0.080366,0.12273,0.22157,0.29217,0.41925,0.48985,0.39101,0.39101,0.30629,0.24981,0.19333,0.080366,-0.0043544,-0.018474,-0.089075,-0.11731,-0.14555,-0.17379,-0.21615,-0.27263,-0.20203,-0.315,-0.25851,-0.17379,-0.28675,-0.24439,0.16509,-0.11731,-1.0069,-1.9812,-2.4895,-2.786,-2.9272,-2.4612,-2.0518,-1.8964,-1.8258,-1.7411,-1.6705,-1.2893,-0.99276,-0.65388,-0.37148,-0.30087,-0.046714,0.30629,0.53221,0.65929,0.65929,0.72989,0.74401,0.87109,0.89933,0.95581,0.96993,1.0546,1.1394,1.2523,1.2523,1.2947,1.3088,1.3512,1.2806,1.2806,1.1394,1.097,0.89933,0.72989,0.67341,0.54633,0.37689,0.23569,0.10861,0.080366,-0.074955])
        d, paths = dtw.warping_paths(s1, s2, psi=2, window=5)
        path = dtw.warping_path(s1, s2, psi=2)
        if not dtwvis.test_without_visualization():
            if directory:
                import matplotlib.pyplot as plt
                fig, axs = dtwvis.plot_warping(s1, s2, path)  # type: plt.Figure, plt.axes.Axes
                fig.set_size_inches(12, 10)
                fig.set_dpi(100)
                fig.savefig(str(directory / "warping.png"))
                plt.close(fig)
                path = dtw.best_path(paths)
                dtwvis.plot_warpingpaths(s1, s2, paths, path, filename=str(directory / "warpingpaths.png"))
Beispiel #13
0
#dynamic time warping
import stampProcessor
import numpy as np

mode = 'propagationDelayCorrection'
coarseTau = 10000
shift = -51318536.0
# We define two sequences x, y as numpy array
# where y is actually a sub-sequence from x
timeStampAlice = np.load('../data/aliceBobtimeStampAlice.npy')
timeStampBob = np.load('../data/aliceBobtimeStampBob.npy')
coarseTimebinAlice = stampProcessor.timebin(coarseTau, timeStampAlice)
coarseTimebinBob = stampProcessor.timebin(coarseTau, timeStampBob)

s1 = coarseTimebinAlice[500000:505000]
s2 = coarseTimebinAlice[500000:505000]
print('len(x)', len(s1))
print('len(y)', len(s2))

from dtaidistance import dtw
from dtaidistance import dtw_visualisation as dtwvis

path = dtw.warping_path(s1, s2)
dtwvis.plot_warping(s1, s2, path, filename="warp.png")

d, paths = dtw.warping_paths(s1, s2, window=25, psi=2)
best_path = dtw.best_path(paths)
dtwvis.plot_warpingpaths(s1, s2, paths, best_path, filename="path.png")
Beispiel #14
0
from dtaidistance import dtw
from dtaidistance import dtw_visualisation as dtwvis
import numpy as np
s1 = np.array([0., 0, 1, 2, 1, 0, 1, 0, 0, 2, 1, 0, 0])
s2 = np.array([0., 1, 2, 3, 1, 0, 0, 0, 2, 1, 0, 0, 0])
path = dtw.warping_path(s1, s2)
dtwvis.plot_warping(s1, s2, path, filename="img/dynamicwarping.png")
#Using point DTW
distanceRshoulX = dtw.distance(rshoul_bX[:250], rshoul_eX[:250])
distanceRshoulY = dtw.distance(rshoul_bY[:250], rshoul_eY[:250])

distanceRelbowX = dtw.distance(relbow_bX[:250], relbow_eX[:250])
distanceRelbowY = dtw.distance(relbow_bY[:250], relbow_eY[:250])

distanceRwristX = dtw.distance(rwrist_bX[:250], rwrist_eX[:250])
distanceRwristY = dtw.distance(rwrist_bY[:250], rwrist_eY[:250])

distance = distanceRshoulX + distanceRshoulY + distanceRelbowX + distanceRelbowY + distanceRwristX + distanceRwristY
distX = distanceRshoulX + distanceRelbowX + distanceRwristX
distY = distanceRshoulY + distanceRelbowY + distanceRwristY
print(distance)

print(dtw.distance(bdxy, exy))

d, paths = dtw.warping_paths(bdxy, exy)
best_path = dtw.best_path(paths)

dtwvis.plot_warping(bdxy,
                    exy,
                    best_path,
                    filename="Graphs/test_point_badX.png")
#print(paths)

dtwvis.plot_warpingpaths(bdxy,
                         exy,
                         paths,
                         path=best_path,
                         filename="Graphs/testXX.png")
from dtaidistance import dtw
from dtaidistance import dtw_visualisation as dtwvis
import pandas as pd

# 计算股票间的对数收益时间序列间的动态时间规整距离

path1,path2 = "000001.XSHE.csv","000063.XSHE.csv",
feature = "rclose"
length = 20
window,psi = 10,5

rc1,rc2 = pd.read_csv(path1)[feature][:length],pd.read_csv(path2)[feature][:length]
dis, paths = dtw.warping_paths(rc1, rc2, window=window, psi=psi)

# 动态时间规整距离
print(dis)

# 绘图(输出形式)
best_path = dtw.best_path(paths)
dtwvis.plot_warpingpaths(rc1, rc2, paths, best_path,shownumbers=True)

# 绘图(保存)
path = dtw.warping_path(rc1, rc2)
dtwvis.plot_warping(rc1, rc2, path, filename="wrapping.png")