def dtwWrapper(data, rows, columns, k): ''' wrapper function for dynamic time warping. includes use of exponential adaptive tuning function with temporal correlation if k > 0 ''' # not explicitly called, but needs to be in R environment DTW = importr("dtw") # create a data frame of zeros of size number of ids x number of ids # fill it with the calculated distance metric for each pair wise comparison df_ = pd.DataFrame(index=rows, columns=columns) df_ = df_.fillna(0.0).astype(np.float64) # fill the array with dtw-distance values pandas2ri.activate() for i in rows: E.info("DTW %s" % i) for j in columns: series1 = data.loc[i].values.tolist() series2 = data.loc[j].values.tolist() DTW_value = (R.dtw(series1, series2)).rx('distance')[0][0] cort_value = temporalCorrelate(series1, series2) tuned_value = adaptiveTune(cort_value, k) time_dist = DTW_value * tuned_value df_.loc[i][j] = float(time_dist) df_[j][i] = float(time_dist) return df_
def dtw_wrapper(data, i, j): series1 = data.loc[i].tolist() series2 = data.loc[j].tolist() DTW_value = (R.dtw(series1, series2)).rx('distance')[0][0] cort_value = CORT(series1, series2) tuned_value = adaptiveTune(cort_value, k=int(options.k)) time_dist = DTW_value * tuned_value df_[i][j] = float(time_dist) df_[j][i] = float(time_dist)
def segmentationPoints(X, xIsFilename=False, windowSize=100, smoothing='blackman'): if xIsFilename == True: with open(X,'r') as fin: X = np.loadtxt(fin,delimiter=",") smoothX = sm.smooth(X,window_len=windowSize,window=smoothing) #(unsmoothedMins,unsmoothedMaxs) = mm.find_mins_and_maxs1D(X) (smoothedMins,smoothedMaxs) = mm.find_mins_and_maxs1D(smoothX) # Using Dynamic Time Warping to map the smoothed curve onto the original, noisy curve. alignmentOfSmoothedCurveAndOriginal = r.dtw(smoothX, X) warpIndexes=r.warp(alignmentOfSmoothedCurveAndOriginal,True) #pl.plot(warpIndexes,smoothX) #pl.plot(X) #pl.show() minsMappedToOriginal = sorted(list(set([warpIndexes[smoothedMins[i]] for i in range(len(smoothedMins))]))) maxsMappedToOriginal = sorted(list(set([warpIndexes[smoothedMaxs[i]] for i in range(len(smoothedMaxs))]))) #minsMappedToOriginal = mapToOriginalRecursive(X,smoothedMins,unsmoothedMins,"mins") #maxsMappedToOriginal = mapToOriginalRecursive(X,smoothedMaxs,unsmoothedMaxs,"maxs") return (minsMappedToOriginal,maxsMappedToOriginal)