lu.lippmann.cdb.datasetview.tasks.FillShortGapsInTimeSeriesByInterpolationTask.java Source code

Java tutorial

Introduction

Here is the source code for lu.lippmann.cdb.datasetview.tasks.FillShortGapsInTimeSeriesByInterpolationTask.java

Source

/**
 * Copyright 2014-2016 LIST (Luxembourg Institute of Science and Technology), all right reserved.
 * Authorship : Olivier PARISOT, Yoanne DIDRY
 * Licensed under GNU General Public License version 3
 */
package lu.lippmann.cdb.datasetview.tasks;

import lu.lippmann.cdb.weka.*;
import weka.core.Instances;

/**
 * Task.
 * 
 * @author the WP1 team
 */
public final class FillShortGapsInTimeSeriesByInterpolationTask extends Task {
    /**
     * {@inheritDoc}
     */
    @Override
    String getName() {
        return "Fill short gaps by interpolation";
    }

    /**
     * {@inheritDoc}
     */
    @Override
    String getIconPath() {
        return "menu/replace-missing.png";
    }

    /**
     * {@inheritDoc}
     */
    @Override
    Instances process0(final Instances dataSet) throws Exception {
        final int dateIdx = WekaDataStatsUtil.getFirstDateAttributeIdx(dataSet);
        if (dateIdx == -1) {
            throw new Exception("No date attribute in this dataset!");
        }

        Instances newds = dataSet;
        for (int i = 0; i < dataSet.numAttributes(); i++) {
            System.out.println("Fill gaps for " + i);

            if (i == dateIdx)
                continue;
            final java.util.List<double[]> gaps = WekaTimeSeriesUtil.findGaps(newds, i);
            for (final double[] dd : gaps) {
                if (dd[3] > 1)
                    continue;
                newds = WekaTimeSeriesUtil.fillGapWithInterpolation(newds, newds.attribute(i), (int) dd[2],
                        (int) dd[3], 1);
            }
        }

        return newds;
    }
}