2017-09-26 5 views
0

J'essaie de représenter un certain nombre de graphiques de séries temporelles en utilisant SAX afin que je puisse les exploiter pour des similitudes. J'utilise le paquet jmotif dans R:Représentation de séries temporelles SAX dans R en utilisant le paquetage jmotif

#Create an example dataframe 
example1 <- data.frame(flow=c(1.1,2.2,3.3,4.4,5.5,6.6), 
        weight1=c(7.1,7.2,7.3,7.4,7.5,7.6), 
        weight2=c(8.1,8.2,8.3,8.4,8.5,8.6)) 
# Create a timeseries object 
examplets1 <- ts(example1, start = 1, end = 6) 

#Analysis 
library(jmotif) 
#Normalise the data using Znorm 
examplezn <- znorm(examplets1, threshold = 0.01) 
#Perform piecewise aggregate approximation 
examplepaa <- paa(examplezn, 3) 
#Represent time series as SAX 
sax_via_window(examplepaa, 3, 3, 10, "mindist", 0.1) 

#This produces the result 
> sax_via_window(examplepaa, 3, 3, 10, "mindist", 0.1) 
$`0` 
[1] "bgh" 

J'ai de la difficulté à interpréter ces résultats. Ce à quoi je m'attendrais, c'est une représentation symbolique que je pourrais associer à chaque colonne, par exemple. Débit: acc, weight1: bgh et ainsi de suite. Le vrai Datset aurait environ 100 colonnes de données ts!

Est-ce que je n'applique pas correctement la méthode?

Toute aide est grandement appréciée

Répondre

0

Le problème ici est que je ne l'ai pas « vectoriser » jmotif, de sorte que ses fonctions applicables uniquement à une séquence ordonnée de nombres qui représente les timeseries d'entrée, à savoir, pas à la trame de données objets ou objets de séries temporelles. Discutable, mais je voulais juste garder les choses simples.

Je modifièrent votre code un peu pour effectuer la tâche, elle pourra être utile:

library(jmotif) 

# create an example dataframe, list works the best cause library is not "vectorized" 
example1 <- list(flow = c(1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9), 
      weight1 = c(7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 7.7, 8.8, 9.9), 
      weight2 = c(8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 8.7, 8.8, 8.9)) 

# this library makes working with not-vectorized code easier 
library(plyr) 

# z-normalize 
examplezn <- llply(example1, function(x){znorm(x, threshold = 0.01)}) 

# perform piecewise aggregate approximation, probably not needed for following up with SAX transform, so just for illustration ... 
llply(examplezn, function(x){paa(x, 3)}) 

# represent time series as SAX strings using via window SAX transform 
example_sax <- llply(example1, function(x){sax_via_window(x, 3, 2, 3, "none", 0.1)}) 

# convert the result to a data frame, by rows though 
df_by_row <- ldply(example_sax, unlist) 

# and finally obtain a column-oriented data frame 
df_by_column <- as.data.frame(t(df_by_row))