package edu.hawaii.jmotif.webexample; import java.util.Date; import weka.core.Instances; import weka.core.converters.ConverterUtils.DataSource; import edu.hawaii.jmotif.sax.SAXFactory; import edu.hawaii.jmotif.sax.datastructures.DiscordRecords; /** * The discords experiment code. see the example on the web and more detailed description in the * Keogh's article. * * @author Pavel Senin. * */ public class GetDiscordsTEK14 { private static final int windowSize = 128; private static final int alphabetSize = 5; private static final String attribute = "value0"; /** * Executable method. * * @param args None used. * @throws Exception if error occurs. */ public static void main(String[] args) throws Exception { // get the data first Instances tsData = readTSData(); Date start = new Date(); // now build the SAX data structure using sliding window of size 40 and alphabet of 3 DiscordRecords dr = SAXFactory.instances2Discords(tsData, attribute, windowSize, alphabetSize, 10); Date end = new Date(); // printout the discords occurrences System.out.println(dr.toString()); System.out.println(" Elapsed time: " + timeToString(start.getTime(), end.getTime())); } /** * Read the timeseries data into WEKA format. * * @return Timeseries. * @throws Exception If error occurs. */ private static Instances readTSData() throws Exception { Instances data = DataSource.read("data//ts_data//TEK16.arff"); return data; } private static String timeToString(long start, long finish) { long diff = finish - start; long secondInMillis = 1000; long minuteInMillis = secondInMillis * 60; long hourInMillis = minuteInMillis * 60; long dayInMillis = hourInMillis * 24; long yearInMillis = dayInMillis * 365; @SuppressWarnings("unused") long elapsedYears = diff / yearInMillis; diff = diff % yearInMillis; @SuppressWarnings("unused") long elapsedDays = diff / dayInMillis; diff = diff % dayInMillis; @SuppressWarnings("unused") long elapsedHours = diff / hourInMillis; diff = diff % hourInMillis; long elapsedMinutes = diff / minuteInMillis; diff = diff % minuteInMillis; long elapsedSeconds = diff / secondInMillis; diff = diff % secondInMillis; long elapsedMilliseconds = diff % secondInMillis; return elapsedMinutes + "m " + elapsedSeconds + "s " + elapsedMilliseconds + "ms"; } }