Example usage for weka.core Instances attribute

List of usage examples for weka.core Instances attribute

Introduction

In this page you can find the example usage for weka.core Instances attribute.

Prototype

publicAttribute attribute(String name) 

Source Link

Document

Returns an attribute given its name.

Usage

From source file:lu.lippmann.cdb.common.gui.dataset.InstancesLoaderDialogFactory.java

License:Open Source License

private static Instances showDialog(final Component parent, final boolean setClass) throws Exception {
    final Preferences prefs = Preferences.userRoot().node("CadralDecisionBuild");
    final String path = prefs.get(REG_KEY, WekaDataAccessUtil.DEFAULT_SAMPLE_DIR);

    final JFileChooser fc = new JFileChooser();
    fc.setCurrentDirectory(new File(path));
    final int returnVal = fc.showOpenDialog(parent);
    if (returnVal == JFileChooser.APPROVE_OPTION) {
        final File file = fc.getSelectedFile();
        if (file != null) {
            prefs.put(REG_KEY, file.getPath());
            final Instances ds = WekaDataAccessUtil.loadInstancesFromARFFOrCSVFile(file);
            final Attribute defaultClassAttr = ds.classIndex() >= 0 ? ds.classAttribute() : ds.attribute(0);
            ds.setClassIndex(-1);//from  www. j  a  v  a2s. c om
            ds.setRelationName(file.getPath());
            final List<String> attributesNames = new ArrayList<String>();
            final Enumeration<?> e = ds.enumerateAttributes();
            while (e.hasMoreElements()) {
                final Attribute attr = (Attribute) e.nextElement();
                attributesNames.add(attr.name());
            }

            if (setClass) {
                final String s = (String) JOptionPane.showInputDialog(parent,
                        "Select the class attribute for '" + file.getName() + "' (default:'"
                                + defaultClassAttr.name() + "'): ",
                        "Class selection", JOptionPane.QUESTION_MESSAGE, null, // icon
                        attributesNames.toArray(), attributesNames.get(attributesNames.size() - 1));
                if (s != null) {
                    ds.setClass(ds.attribute(s));
                } else {
                    //Otherwise no class defined and CACHE attributeClass => No class index defined after cancel + retry
                    ds.setClass(defaultClassAttr);
                    return null;
                }
            } else {
                ds.setClass(defaultClassAttr);
            }
            return ds;
        } else
            throw new Exception();
    } else
        return null;
}

From source file:lu.lippmann.cdb.common.gui.ts.TimeSeriesChartUtil.java

License:Open Source License

private static void fillWithSingleAxis(final Instances dataSet, final int dateIdx,
        final TimeSeriesCollection tsDataset) {
    final int numInstances = dataSet.numInstances();

    final Calendar cal = Calendar.getInstance();
    for (final Integer i : WekaDataStatsUtil.getNumericAttributesIndexes(dataSet)) {
        if (dataSet.attributeStats(i).missingCount == dataSet.numInstances()) {
            System.out.println("TimeSeriesChartUtil: Only missing values for '" + dataSet.attribute(i).name()
                    + "', so skip it!");
            continue;
        }/*from  w w w .  j  ava2s.c o m*/
        final TimeSeries ts = new TimeSeries(dataSet.attribute(i).name());
        for (int k = 0; k < numInstances; k++) {
            final Instance instancek = dataSet.instance(k);
            final long timeInMilliSec = (long) instancek.value(dateIdx);
            cal.setTimeInMillis(timeInMilliSec);

            if (instancek.isMissing(i)) {
                ts.addOrUpdate(new Millisecond(cal.getTime()), null);
            } else {
                ts.addOrUpdate(new Millisecond(cal.getTime()), instancek.value(i));
            }
        }
        if (!ts.isEmpty())
            tsDataset.addSeries(ts);
    }
}

From source file:lu.lippmann.cdb.common.gui.ts.TimeSeriesChartUtil.java

License:Open Source License

private static void fillWithSingleAxisInterval(final Instances dataSet, final int dateIdx,
        final YIntervalSeriesCollection tsDataset, final double deviation, final int deviatedAttrIdx) {
    final int numInstances = dataSet.numInstances();

    for (final Integer i : WekaDataStatsUtil.getNumericAttributesIndexes(dataSet)) {
        if (dataSet.attributeStats(i).missingCount == dataSet.numInstances()) {
            System.out.println("TimeSeriesChartUtil: Only missing values for '" + dataSet.attribute(i).name()
                    + "', so skip it!");
            continue;
        }/*from w w  w .  j a v a 2  s. co m*/
        final YIntervalSeries ts = new YIntervalSeries(dataSet.attribute(i).name());
        for (int k = 0; k < numInstances; k++) {
            final Instance instancek = dataSet.instance(k);
            final long timeInMilliSec = (long) instancek.value(dateIdx);

            if (instancek.isMissing(i)) {
                //ts.add(timeInMilliSec,null,0d,0d);               
            } else {
                if (i == deviatedAttrIdx && k > 0 && k < (numInstances - 1)) {
                    System.out.println(numInstances + " " + k + " " + instancek.value(i) + " "
                            + (instancek.value(i) - deviation) + " " + (instancek.value(i) + deviation));
                    ts.add(timeInMilliSec, instancek.value(i), instancek.value(i) - deviation,
                            instancek.value(i) + deviation);
                } else {
                    ts.add(timeInMilliSec, instancek.value(i), instancek.value(i), instancek.value(i));
                }
                //System.out.println(instancek.value(i)+" "+(instancek.value(i)-deviation)+" "+(instancek.value(i)+deviation));
            }
        }
        if (!ts.isEmpty())
            tsDataset.addSeries(ts);
    }
}

From source file:lu.lippmann.cdb.common.gui.ts.TimeSeriesChartUtil.java

License:Open Source License

private static void fillWithMultipleAxis(final Instances dataSet, final int dateIdx,
        final TimeSeriesCollection tsDataset, final JFreeChart tsChart) {
    final int numInstances = dataSet.numInstances();

    int axisNumber = 0;
    final Calendar cal = Calendar.getInstance();
    for (final Integer i : WekaDataStatsUtil.getNumericAttributesIndexes(dataSet)) {
        final TimeSeries ts = new TimeSeries(dataSet.attribute(i).name());
        for (int k = 0; k < numInstances; k++) {
            final long timeInMilliSec = (long) dataSet.instance(k).value(dateIdx);
            cal.setTimeInMillis(timeInMilliSec);
            if (dataSet.instance(k).isMissing(i)) {
                ts.addOrUpdate(new Millisecond(cal.getTime()), null);
            } else {
                ts.addOrUpdate(new Millisecond(cal.getTime()), dataSet.instance(k).value(i));
            }//from ww  w .j a  v a  2  s .c  o  m
        }
        if (!ts.isEmpty()) {
            if (axisNumber == 0) {
                tsDataset.addSeries(ts);
            } else {
                final XYPlot plot = tsChart.getXYPlot();
                final NumberAxis axisToAdd = new NumberAxis(dataSet.attribute(i).name());
                axisToAdd.setAutoRangeIncludesZero(false);
                plot.setRangeAxis(axisNumber, axisToAdd);
                final TimeSeriesCollection t = new TimeSeriesCollection();
                t.addSeries(ts);
                plot.setDataset(axisNumber, t);
                plot.mapDatasetToRangeAxis(axisNumber, axisNumber);
                final StandardXYItemRenderer renderer2 = new StandardXYItemRenderer();
                renderer2.setSeriesPaint(0, ColorHelper.getColorForAString(dataSet.attribute(i).name()));
                plot.setRenderer(axisNumber, renderer2);
            }
            axisNumber++;
        }
    }
}

From source file:lu.lippmann.cdb.common.gui.ts.TimeSeriesChartUtil.java

License:Open Source License

public static ChartPanel buildChartPanelForAllAttributesInterval(final Instances dataSet, final int dateIdx,
        final double deviation, final int deviatedAttrIdx) {
    final YIntervalSeriesCollection tsDataset = new YIntervalSeriesCollection();
    final JFreeChart tsChart = ChartFactory.createTimeSeriesChart("", "Time", "Value", tsDataset, true, true,
            false);//from   ww  w.  ja va 2 s  . c o m
    tsChart.getXYPlot().setBackgroundPaint(Color.WHITE);

    double startgap0 = -1d;
    double endgap0 = -1d;
    try {
        java.util.List<double[]> gaps = WekaTimeSeriesUtil.findGaps(dataSet, deviatedAttrIdx);
        startgap0 = gaps.get(0)[2] + gaps.get(0)[3];
        //System.out.println("start -> "+startgap0);
        endgap0 = gaps.get(1)[2] - 1;
        //System.out.println("end -> "+endgap0);
    } catch (Exception e) {
        e.printStackTrace();
    }
    final double startgap = startgap0;
    final double endgap = endgap0;
    System.out.println("gap --> " + startgap + " " + endgap);

    tsChart.getXYPlot().setRenderer(/*deviatedAttrIdx,*/new DeviationRenderer(true, false) {
        /** */
        private static final long serialVersionUID = 1234L;

        private boolean inRange(final int item) {
            return (item >= startgap && item <= endgap);
        }

        @Override
        public boolean getItemShapeVisible(int series, int item) {
            return false;
        }

        @Override
        public boolean getItemLineVisible(int series, int item) {
            return inRange(item);
        }

    });
    for (int i = 0; i < dataSet.numAttributes() - 1; i++) {
        //final Color cc=ColorHelper.COLORBREWER_ALL_QUALITATIVE[i];
        final Color cc = ColorHelper.getColorForAString(dataSet.attribute(i).name());
        tsChart.getXYPlot().getRenderer().setSeriesPaint(i, cc);
        ((AbstractRenderer) tsChart.getXYPlot().getRenderer()).setSeriesFillPaint(i, cc.brighter());
    }

    fillWithSingleAxisInterval(dataSet, dateIdx, tsDataset, deviation, deviatedAttrIdx);

    final ChartPanel cp = new ChartPanel(tsChart, true);
    if (dataSet.numAttributes() <= 2)
        cp.setBorder(new TitledBorder(dataSet.attribute(0).name()));
    return cp;
}

From source file:lu.lippmann.cdb.common.gui.ts.TimeSeriesChartUtil.java

License:Open Source License

public static ChartPanel buildChartPanelForAllAttributes(final Instances dataSet, final boolean multAxis,
        final int dateIdx, final Color color, final Collection<XYAnnotation> annotations) {
    final TimeSeriesCollection tsDataset = new TimeSeriesCollection();
    final JFreeChart tsChart = ChartFactory.createTimeSeriesChart("", "Time", "Value", tsDataset, true, true,
            false);//ww w. ja v  a2 s . c  o  m
    tsChart.getXYPlot().setBackgroundPaint(Color.WHITE);

    // optimized renderer to avoid to print all points
    tsChart.getXYPlot().setRenderer(new SamplingXYLineRenderer());
    //tsChart.getXYPlot().setRenderer(new XYStepRenderer());

    if (color == null) {
        for (int i = 0; i < dataSet.numAttributes() - 1; i++) {
            final String attrName = dataSet.attribute(i).name();
            tsChart.getXYPlot().getRenderer().setSeriesPaint(i, ColorHelper.getColorForAString(attrName));
        }
    } else {
        tsChart.getXYPlot().getRenderer().setSeriesPaint(0, color);
    }

    if (annotations != null) {
        for (final XYAnnotation aa : annotations)
            tsChart.getXYPlot().addAnnotation(aa);
    }

    if (multAxis)
        fillWithMultipleAxis(dataSet, dateIdx, tsDataset, tsChart);
    else
        fillWithSingleAxis(dataSet, dateIdx, tsDataset);

    final ChartPanel cp = new ChartPanel(tsChart, true);
    if (dataSet.numAttributes() <= 2)
        cp.setBorder(new TitledBorder(dataSet.attribute(0).name()));
    return cp;
}

From source file:lu.lippmann.cdb.common.gui.ts.TimeSeriesChartUtil.java

License:Open Source License

public static JScrollPane buildPanelWithChartForEachAttribute(final Instances dataSet, final int dateIdx) {
    final JXPanel jxpm = new JXPanel();
    jxpm.setLayout(new GridBagLayout());
    jxpm.setScrollableHeightHint(ScrollableSizeHint.VERTICAL_STRETCH);
    final GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridx = 0;/* w ww  . j  ava2s . c  o m*/
    gbc.gridy = 0;
    gbc.weightx = 1;
    gbc.weighty = 1;
    gbc.fill = GridBagConstraints.BOTH;
    gbc.insets = new Insets(10, 10, 10, 10);
    final int numAttributes = dataSet.numAttributes();
    for (int i = 0; i < numAttributes; i++) {
        final Attribute attr = dataSet.attribute(i);
        System.out.println("Build chart panel for '" + attr.name() + "' time serie ...");
        if (attr.isNominal()) {
            jxpm.add(buildChartPanelForNominalAttribute(dataSet, attr, dateIdx), gbc);
            gbc.gridy++;
        } else if (attr.isNumeric() && !attr.isDate()) {
            try {
                final Instances filteredDs = WekaDataProcessingUtil.buildFilteredByAttributesDataSet(dataSet,
                        new int[] { attr.index(), dateIdx });
                jxpm.add(buildChartPanelForAllAttributes(filteredDs, false, 1, null), gbc);
                gbc.gridy++;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    return new JScrollPane(jxpm, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
}

From source file:lu.lippmann.cdb.datasetview.DatasetView.java

License:Open Source License

private void updateFiltersPane(final Instances instances) throws Exception {
    filterPanel.removeAll();//from   ww  w  . j  a  v a  2 s. co m
    gbc.gridx = 0;
    gbc.gridy = 0;

    final int numAttributes = instances.numAttributes();
    final RangeSlider[] rangeSliders = new RangeSlider[numAttributes];
    final JComboBox[] nominalCombos = new JComboBox[numAttributes];

    boolean hasNumeric = false;
    boolean hasDate = false;
    for (int i = 0; i < numAttributes; i++) {
        final int attrIdx = i;
        if ((WekaDataStatsUtil.isInteger(instances, i)) || instances.attribute(i).isDate()) {
            hasNumeric = hasNumeric || (instances.attribute(i).isNumeric() && !instances.attribute(i).isDate());
            hasDate = hasDate || instances.attribute(i).isDate();
            final long[] minmax = WekaDataStatsUtil.getMinMaxForAttribute(instances, i);
            if (Math.abs(minmax[1] - minmax[0]) < 0.00001)
                continue;

            if (instances.attribute(i).isDate()) {
                minmax[0] = (int) (minmax[0] / (1000l));
                minmax[1] = (int) (minmax[1] / (1000l));
            }

            long[] oldminmax;
            try {
                final Attribute goodAttr = notFilteredDataSet.attribute(instances.attribute(i).name());
                oldminmax = WekaDataStatsUtil.getMinMaxForAttribute(notFilteredDataSet, goodAttr.index());
                if (instances.attribute(i).isDate()) {
                    oldminmax[0] = (int) (oldminmax[0] / (1000l));
                    oldminmax[1] = (int) (oldminmax[1] / (1000l));
                }
            } catch (Throwable t) {
                oldminmax = minmax;
            }

            rangeSliders[i] = new RangeSlider();
            rangeSliders[i].setMinimum((int) oldminmax[0]);
            rangeSliders[i].setMaximum((int) oldminmax[1]);

            rangeSliders[i].setValue((int) minmax[0]);
            rangeSliders[i].setUpperValue((int) minmax[1]);
            //    hack...
            rangeSliders[i].setValue((int) minmax[0]);
            rangeSliders[i].setUpperValue((int) minmax[1]);

            if (!instances.attribute(i).isDate()) {
                rangeSliders[i].setPaintTicks(true);
                rangeSliders[i].setPaintLabels(true);
                final int rangeWidth = (int) (oldminmax[1] - oldminmax[0]);
                rangeSliders[i].setMinorTickSpacing(rangeWidth / 10);
                rangeSliders[i].setMajorTickSpacing(rangeWidth / 2);
            }

            rangeSliders[i].addChangeListener(new ChangeListener() {
                @Override
                public void stateChanged(final ChangeEvent e) {
                    if (!rangeSliders[attrIdx].getValueIsAdjusting()) {
                        processfilters(rangeSliders, nominalCombos, instances.attribute(attrIdx).name(),
                                attrIdx);
                    } else {
                        if (instances.attribute(attrIdx).isDate()) {
                            final Calendar cal = Calendar.getInstance();
                            cal.setTimeInMillis(rangeSliders[attrIdx].getValue() * 1000l);
                            final String minDate = FormatterUtil.DATE_FORMAT.format(cal.getTime());
                            cal.setTimeInMillis(rangeSliders[attrIdx].getUpperValue() * 1000l);
                            final String maxDate = FormatterUtil.DATE_FORMAT.format(cal.getTime());
                            rangeSliders[attrIdx].setBorder(new TitledBorder(instances.attribute(attrIdx).name()
                                    + " [" + minDate + " - " + maxDate + "]"));
                        } else {
                            rangeSliders[attrIdx].setBorder(new TitledBorder(instances.attribute(attrIdx).name()
                                    + " [" + rangeSliders[attrIdx].getValue() + " - "
                                    + rangeSliders[attrIdx].getUpperValue() + "]"));
                        }
                    }
                }
            });

            if (instances.attribute(i).isDate()) {
                filterPanel.add(rangeSliders[i], gbc);
                gbc.gridy++;
                final Calendar cal = Calendar.getInstance();
                cal.setTimeInMillis(rangeSliders[i].getValue() * 1000l);
                final String minDate = FormatterUtil.DATE_FORMAT.format(cal.getTime());
                cal.setTimeInMillis(rangeSliders[i].getUpperValue() * 1000l);
                final String maxDate = FormatterUtil.DATE_FORMAT.format(cal.getTime());
                rangeSliders[i].setBorder(new TitledBorder(
                        instances.attribute(i).name() + " [" + minDate + " - " + maxDate + "]"));
            } else {
                filterPanel.add(rangeSliders[i], gbc);
                gbc.gridy++;
                rangeSliders[i].setBorder(new TitledBorder(instances.attribute(i).name() + " ["
                        + rangeSliders[i].getValue() + " - " + rangeSliders[i].getUpperValue() + "]"));
            }
        } else {
            rangeSliders[i] = null;
        }
    }

    for (int i = 0; i < numAttributes; i++) {
        if (instances.attribute(i).isNominal()) {
            final ArrayList<String> possibleValuesList = new ArrayList<String>();
            final Enumeration<?> es = notFilteredDataSet
                    .attribute(notFilteredDataSet.attribute(instances.attribute(i).name()).index())
                    .enumerateValues();
            possibleValuesList.add(ALL_VAL);
            while (es.hasMoreElements()) {
                possibleValuesList.add(es.nextElement().toString().trim());
            }
            if (possibleValuesList.size() == 2)
                continue; // only one choice, no filter needed!

            nominalCombos[i] = new JComboBox(possibleValuesList.toArray());
            if (WekaDataStatsUtil.getPresentValuesForNominalAttribute(instances, i).size() == 1) {
                nominalCombos[i].setSelectedItem(instances.instance(0).stringValue(i));
            }
            nominalCombos[i].setBorder(new TitledBorder(instances.attribute(i).name()));
            final int nominalAttrIdx = i;
            nominalCombos[i].addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    processfilters(rangeSliders, nominalCombos, instances.attribute(nominalAttrIdx).name(),
                            nominalAttrIdx);
                }
            });
            filterPanel.add(nominalCombos[i], gbc);
            gbc.gridy++;
        }
    }

    filterPanel.setVisible(gbc.gridy > 0);
    filterPanel.updateUI();
    scrollPane.setVisible(gbc.gridy > 0);
    scrollPane.updateUI();
}

From source file:lu.lippmann.cdb.datasetview.DatasetView.java

License:Open Source License

private void processfilters(final RangeSlider[] rangeSliders, final JComboBox[] nominalCombos,
        final String name, final int idx) {
    Instances newds = new Instances(notFilteredDataSet);

    for (int k = 0; k < nominalCombos.length; k++) {
        if (k == idx && nominalCombos[k] != null
                && !nominalCombos[k].getSelectedItem().toString().equals(ALL_VAL)) {
            newds = WekaDataProcessingUtil.filterDataSetOnNominalValue(newds, k,
                    nominalCombos[k].getSelectedItem().toString());
            System.out.println("filter on '" + nominalCombos[k].getSelectedItem().toString() + "'");
        }//from w  ww  . j  av a2  s  .  com
    }
    for (int k = 0; k < rangeSliders.length; k++) {
        if (k == idx && rangeSliders[k] != null) {
            if (newds.attribute(k).isDate()) {
                newds = WekaDataProcessingUtil.filterDataSetOnNumericValue(newds, k,
                        rangeSliders[k].getValue() * 1000d, rangeSliders[k].getUpperValue() * 1000d);
                System.out.println("filter on '" + k + "'");
            } else {
                newds = WekaDataProcessingUtil.filterDataSetOnNumericValue(newds, k,
                        (double) rangeSliders[k].getValue(), (double) rangeSliders[k].getUpperValue());
                System.out.println("filter on '" + k + "'");
            }
        }
    }

    notifyFilter(newds, "Filtered on '" + name + "'");
}

From source file:lu.lippmann.cdb.datasetview.tabs.AttributesSummaryTabView.java

License:Open Source License

/**
 * {@inheritDoc}//from   w w w  . j a  va 2  s.c o  m
 */
@Override
public void update0(final Instances dataSet) throws Exception {
    final int numAttr = dataSet.numAttributes();

    final JTabbedPane tabbedPane = new JTabbedPane();

    this.as.setGridWidth(Math.min(3, numAttr));
    this.as.setColoringIndex(dataSet.classIndex());
    this.as.setInstances(dataSet);
    tabbedPane.addTab("All", this.as);

    for (int i = 0; i < numAttr; i++) {
        final Instances nds = WekaDataProcessingUtil.buildFilteredByAttributesDataSet(dataSet, new int[] { i });
        final AttributeSummarizer as0 = new AttributeSummarizer();
        as0.setGridWidth(1);
        as0.setColoringIndex(nds.classIndex());
        as0.setInstances(nds);
        tabbedPane.addTab(dataSet.attribute(i).name(), as0);
    }

    this.jxp.removeAll();
    this.jxp.add(tabbedPane, BorderLayout.CENTER);
    this.jxp.repaint();
}