Example usage for weka.core Instances instance

List of usage examples for weka.core Instances instance

Introduction

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

Prototype



publicInstance instance(int index) 

Source Link

Document

Returns the instance at the given position.

Usage

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;
        }//  w  ww  .j  a va2s . com
        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  w ww .j av a 2s.  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.datasetview.DatasetView.java

License:Open Source License

private void updateFiltersPane(final Instances instances) throws Exception {
    filterPanel.removeAll();//from  w ww .j  av a 2s .  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.tabs.MDSTabView.java

License:Open Source License

/**
 * {@inheritDoc}/*ww  w .  ja  v a 2 s . c  om*/
 */
@Override
public void update0(final Instances dataSet) throws Exception {
    this.jxp.removeAll();

    if (this.distComboListener != null)
        distCombo.removeActionListener(this.distComboListener);
    this.distComboListener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (!currentDist.equals(distCombo.getSelectedItem()))
                update(dataSet);
            currentDist = distCombo.getSelectedItem();

            final MDSDistancesEnum mde = MDSDistancesEnum.valueOf(currentDist.toString());
            boolean showDistanceParameters = (mde.equals(MDSDistancesEnum.MINKOWSKI));
            distanceParameters.setVisible(showDistanceParameters);
            distanceParametersLabel.setVisible(showDistanceParameters);
        }
    };
    this.distCombo.addActionListener(this.distComboListener);

    if (this.distanceParametersListener != null)
        distanceParameters.removeActionListener(this.distanceParametersListener);
    this.distanceParameters.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            if (!currentParameter.equals(distanceParameters.getText()))
                update(dataSet);
            currentParameter = distanceParameters.getText();
        }
    });
    this.distanceParameters.addActionListener(this.distanceParametersListener);

    if (this.shihListener != null)
        shihCheckbox.removeActionListener(this.shihListener);
    this.shihListener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            update(dataSet);
        }
    };
    this.shihCheckbox.addActionListener(this.shihListener);
    this.shihCheckbox.setEnabled(!WekaDataStatsUtil.areAllAttributesNominal(dataSet));

    if (this.ignoreListener != null)
        ignoreClassCheckbox.removeActionListener(this.ignoreListener);
    this.ignoreListener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            update(dataSet);
        }
    };
    this.ignoreClassCheckbox.addActionListener(this.ignoreListener);
    this.ignoreClassCheckbox.setEnabled(dataSet.classIndex() != -1);

    if (this.maxInstancesListener != null)
        maxInstances.removeKeyListener(this.maxInstancesListener);
    this.maxInstancesListener = new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            final int cCode = e.getKeyCode();
            if (cCode == KeyEvent.VK_ENTER) {
                update(dataSet);
                e.consume();
            }
        }
    };
    this.maxInstances.addKeyListener(maxInstancesListener);

    if (this.normalizeListener != null)
        normalizeCheckbox.removeActionListener(this.normalizeListener);
    this.normalizeListener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            update(dataSet);
        }
    };
    this.normalizeCheckbox.addActionListener(this.normalizeListener);

    //TODO : use proper layout ...
    final JXPanel northPanel = new JXPanel();
    northPanel.setLayout(new GridBagLayout());
    final GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.gridwidth = 2;
    gbc.weightx = 1;
    gbc.fill = GridBagConstraints.BOTH;
    northPanel.add(this.distCombo, gbc);
    gbc.weightx = 0;
    gbc.gridwidth = 1;
    gbc.gridy = 1;
    northPanel.add(this.distanceParametersLabel, gbc);
    gbc.gridx = 1;
    northPanel.add(this.distanceParameters, gbc);

    this.jxp.add(northPanel, BorderLayout.NORTH);

    final MDSDistancesEnum mde = MDSDistancesEnum.valueOf(distCombo.getSelectedItem().toString());
    final String strOrder = distanceParameters.getText();
    if (mde.equals(MDSDistancesEnum.MINKOWSKI)) {
        mde.setParameters(new String[] { strOrder });
    }
    Instances usedDataSet = dataSet;
    if (shihCheckbox.isSelected()) {
        //Modify instance using SHIH Algorithm
        final Shih2010 shih = new Shih2010(dataSet);
        usedDataSet = shih.getModifiedInstances();
    }

    this.kmeansButton = new JButton("K-means");
    this.maxKField = new JTextField("10");

    //Create whole panel
    final JXPanel southPanel = new JXPanel();
    southPanel.add(shihCheckbox);
    southPanel.add(ignoreClassCheckbox);
    southPanel.add(normalizeCheckbox);
    southPanel.add(maxInstances);
    southPanel.add(new JLabel("Maximum K"));
    southPanel.add(maxKField);
    southPanel.add(kmeansButton);
    this.jxp.add(southPanel, BorderLayout.SOUTH);

    //Compute MDS
    final MDSResult mdsResult = ClassicMDS.doMDS(usedDataSet, mde, 2, Integer.valueOf(maxInstances.getText()),
            ignoreClassCheckbox.isSelected(), normalizeCheckbox.isSelected());

    final JXPanel mdsView = MDSViewBuilder.buildMDSViewFromDataSet(dataSet, mdsResult,
            Integer.valueOf(maxInstances.getText()), new Listener<Instances>() {
                @Override
                public void onAction(final Instances parameter) {
                    pushDataChange(new DataChange(parameter, TabView.DataChangeTypeEnum.Selection));
                }
            });
    this.jxp.add(mdsView, BorderLayout.CENTER);

    this.kmeansButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                //List of coordinates (x,y) of collapsed instances
                final Instances coordsInstances = mdsResult.buildInstancesFromMatrix();
                //FIXME dangerous : K-means on ordered collapsedInstance coordinates
                final KmeansImproved km = new KmeansImproved(coordsInstances,
                        Integer.valueOf(maxKField.getText()));
                final double[] ass = km.getClusteredInstances();
                int usedK = km.getUsedKmeans().getNumClusters();
                final StringBuilder labels = new StringBuilder();
                for (int i = 0; i < usedK; i++) {
                    labels.append("cluster").append((i + 1));
                    if (i < usedK - 1)
                        labels.append(",");
                }

                //Build modified dataset
                String attributeName = "cluster_proj";
                while (dataSet.attribute(attributeName) != null)
                    attributeName += "_proj";
                final Add addFilter = new Add();
                addFilter.setAttributeIndex("last");
                addFilter.setAttributeName(attributeName);
                addFilter.setNominalLabels(labels.toString());
                addFilter.setInputFormat(dataSet);
                final Instances modDataset = Filter.useFilter(dataSet, addFilter);
                final int nbInstances = modDataset.numInstances();
                final int nbAttributes = modDataset.numAttributes();

                if (mdsResult.getCInstances().isCollapsed()) {
                    //
                    final KmeansResult kmr = mdsResult.getCInstances().getCentroidMap();
                    final List<Instances> clusters = kmr.getClusters();
                    int nbClusters = clusters.size();

                    //Build a map between any instance and it's cluster's centroid
                    final Map<ComparableInstance, Integer> mapCentroid = new HashMap<ComparableInstance, Integer>();
                    for (int i = 0; i < nbClusters; i++) {
                        final Instances cluster = clusters.get(i);
                        final int clusterSize = cluster.size();
                        for (int k = 0; k < clusterSize; k++) {
                            mapCentroid.put(new ComparableInstance(cluster.instance(k)), i);
                        }
                    }

                    //Use the previous map to add the additionnal feature for every element !
                    for (int i = 0; i < nbInstances; i++) {
                        final int centroidIndex = mapCentroid.get(new ComparableInstance(dataSet.instance(i)));
                        final String value = "cluster" + (int) (ass[centroidIndex] + 1);
                        modDataset.instance(i).setValue(nbAttributes - 1, value);
                    }
                } else {
                    for (int i = 0; i < nbInstances; i++) {
                        final String value = "cluster" + (int) (ass[i] + 1);
                        modDataset.instance(i).setValue(nbAttributes - 1, value);
                    }
                }
                pushDataChange(new DataChange(modDataset, TabView.DataChangeTypeEnum.Update));
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    });

    this.jxp.repaint();
}

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

License:Open Source License

/**
 * {@inheritDoc}//w w  w.  j ava2  s .  c o  m
 */
@Override
public void update0(final Instances dataSet) throws Exception {
    this.panel.removeAll();

    final Object[] attrNames = WekaDataStatsUtil.getAttributeNames(dataSet).toArray();
    final JComboBox xCombo = new JComboBox(attrNames);
    xCombo.setBorder(new TitledBorder("Attribute to evaluate"));

    final JXPanel comboPanel = new JXPanel();
    comboPanel.setLayout(new GridLayout(1, 2));
    comboPanel.add(xCombo);
    final JXButton jxb = new JXButton("Compute");
    comboPanel.add(jxb);
    this.panel.add(comboPanel, BorderLayout.NORTH);

    jxb.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                final Regression reg = new Regression(dataSet, xCombo.getSelectedIndex());

                final Instances newds = new Instances(dataSet);
                newds.insertAttributeAt(new Attribute("_regEval_"), newds.numAttributes());

                final double[] estims = reg.getEstims();
                for (int i = 0; i < estims.length; i++) {
                    newds.instance(i).setValue(newds.numAttributes() - 1, estims[i]);
                }

                final ScatterPlotTabView scatterPlotView = new ScatterPlotTabView();
                scatterPlotView.update0(newds);
                panel.add(scatterPlotView.getComponent(), BorderLayout.CENTER);

                final JXPanel tblpanel = new JXPanel();
                tblpanel.setLayout(new BorderLayout());
                tblpanel.setBorder(new TitledBorder("Coefficients"));
                final JXTable tbl = new JXTable();
                final SingleColumnTableModel mdl = new SingleColumnTableModel("Coeffs");
                final java.util.List<String> l = new ArrayList<String>();
                l.add("R2: " + reg.getR2());
                int ii = 0;
                for (final double d : reg.getCoe()) {
                    if (ii == 0)
                        l.add(" -> " + d);
                    else
                        l.add(dataSet.attribute(ii - 1).name() + " -> " + d);
                    ii++;
                }
                mdl.setData(l);
                tbl.setModel(mdl);
                tbl.setEditable(true);
                tbl.setShowHorizontalLines(false);
                tbl.setShowVerticalLines(false);
                tbl.setVisibleRowCount(5);
                tbl.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                tblpanel.add(tbl, BorderLayout.CENTER);
                panel.add(tblpanel, BorderLayout.SOUTH);
                //panel.add(new JXLabel("R2: "+reg.getR2()+", "+reg.getCoeDesc()),BorderLayout.SOUTH);
            } catch (Exception e1) {
                e1.printStackTrace();
                panel.add(new JXLabel("Error during computation: " + e1.getMessage()), BorderLayout.CENTER);
            }

        }
    });
}

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

License:Open Source License

private static ChartPanel buildChartPanel(final Instances dataSet, final int xidx, final int yidx,
        final int coloridx, final boolean asSerie) {
    final XYSeriesCollection data = new XYSeriesCollection();
    final Map<Integer, List<Instance>> filteredInstances = new HashMap<Integer, List<Instance>>();
    final int classIndex = dataSet.classIndex();
    if (classIndex < 0) {
        final XYSeries series = new XYSeries("Serie", false);
        for (int i = 0; i < dataSet.numInstances(); i++) {
            series.add(dataSet.instance(i).value(xidx), dataSet.instance(i).value(yidx));

        }/*from ww w  .  j av  a  2s . c o m*/
        data.addSeries(series);
    } else {
        final Set<String> pvs = WekaDataStatsUtil.getPresentValuesForNominalAttribute(dataSet, classIndex);
        int p = 0;
        for (final String pv : pvs) {
            final XYSeries series = new XYSeries(pv, false);
            for (int i = 0; i < dataSet.numInstances(); i++) {
                if (dataSet.instance(i).stringValue(classIndex).equals(pv)) {
                    if (!filteredInstances.containsKey(p)) {
                        filteredInstances.put(p, new ArrayList<Instance>());
                    }
                    filteredInstances.get(p).add(dataSet.instance(i));

                    series.add(dataSet.instance(i).value(xidx), dataSet.instance(i).value(yidx));
                }
            }
            data.addSeries(series);

            p++;
        }

    }

    final JFreeChart chart = ChartFactory.createScatterPlot("Scatter Plot", // chart title
            dataSet.attribute(xidx).name(), // x axis label
            dataSet.attribute(yidx).name(), // y axis label
            data, // data
            PlotOrientation.VERTICAL, true, // include legend
            true, // tooltips
            false // urls
    );

    final XYPlot xyPlot = (XYPlot) chart.getPlot();
    final XYToolTipGenerator gen = new XYToolTipGenerator() {
        @Override
        public String generateToolTip(final XYDataset dataset, final int series, final int item) {
            if (classIndex < 0) {
                return InstanceFormatter.htmlFormat(dataSet.instance(item), true);
            } else {
                return InstanceFormatter.htmlFormat(filteredInstances.get(series).get(item), true);
            }
        }
    };

    int nbSeries;
    if (classIndex < 0) {
        nbSeries = 1;
    } else {
        nbSeries = filteredInstances.keySet().size();
    }

    final XYItemRenderer renderer = new XYLineAndShapeRenderer(asSerie, true) {
        /** */
        private static final long serialVersionUID = 1L;

        @Override
        public Paint getItemPaint(final int row, final int col) {
            //System.out.println(row+" "+col);
            if (classIndex < 0) {
                final double v = dataSet.instance(col).value(coloridx);
                final double[] minmax = WekaDataStatsUtil.getMinMaxForAttributeAsArrayOfDoubles(dataSet,
                        coloridx);

                final double rated = (v - minmax[0]) / (minmax[1] - minmax[0]);
                System.out.println("rated -> " + rated + " min=" + minmax[0] + "max=" + minmax[1]);
                final int colorIdx = (int) Math.round((ColorHelper.YlGnBu_9_COLORS.length - 1) * rated);

                //System.out.println(minmax[0]+" "+minmax[1]+" "+v+" "+rated+" "+colorIdx);
                return ColorHelper.YlGnBu_9_COLORS[colorIdx];
            } else
                return super.getItemPaint(row, col);
        }
    };
    xyPlot.setRenderer(renderer);

    for (int i = 0; i < nbSeries; i++) {
        renderer.setSeriesToolTipGenerator(i, gen);
    }

    return new ChartPanel(chart);
}

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

License:Open Source License

public void refresh(final Instances dataSet, final int dateIdx, final int attrToHighlightIdx,
        final Mode calendarMode) {
    this.jxp.removeAll();

    final SimpleDateFormat f = new SimpleDateFormat(dataSet.attribute(dateIdx).getDateFormat());

    final LinkedHashMap<Date, Color> map = new LinkedHashMap<Date, Color>();
    final AttributeStats attributeStats = (attrToHighlightIdx < 0) ? null
            : dataSet.attributeStats(attrToHighlightIdx);
    for (int i = 0; i < dataSet.numInstances(); i++) {
        //System.out.println(i+" "+dataSet.instance(i).value(dateIdx));
        final String val = dataSet.instance(i).stringValue(dateIdx);

        try {/*from   w w w  . ja  v  a2s . co  m*/
            final Date d = f.parse(val);
            if (attrToHighlightIdx < 0) {
                map.put(d, Color.BLACK);
            } else if (dataSet.attribute(attrToHighlightIdx).isNominal()) {
                final int idxOfColor = ((int) dataSet.instance(i).value(attrToHighlightIdx)
                        * (this.colors.length - 1 - this.firstColorIdx)) / attributeStats.nominalCounts.length;
                map.put(d, this.colors[idxOfColor + this.firstColorIdx]);
            } else {
                final double normalizedValue = (dataSet.instance(i).value(attrToHighlightIdx)
                        - attributeStats.numericStats.min)
                        / (attributeStats.numericStats.max - attributeStats.numericStats.min);
                final int idxOfColor = (int) (normalizedValue * (this.colors.length - 1 - this.firstColorIdx));
                //System.out.println(normalizedValue+" "+idxOfColor);
                map.put(d, this.colors[idxOfColor + this.firstColorIdx]);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

    final JScrollPane scrollp = new JScrollPane(
            MonthCalendarView.buildMultPanel(map, calendarMode, (int) jxp.getSize().getWidth()),
            JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

    scrollp.setPreferredSize(new Dimension((int) jxp.getSize().getWidth() * 95 / 100,
            (int) jxp.getSize().getHeight() * 95 / 100));

    this.jxp.add(scrollp, BorderLayout.CENTER);

    if (attrToHighlightIdx >= 0) {
        final JXPanel legendPanel = new JXPanel();
        legendPanel.setBorder(new TitledBorder("Legend"));
        legendPanel.setBackground(Color.WHITE);
        legendPanel.setLayout(new GridLayout(0, 1));

        if (dataSet.attribute(attrToHighlightIdx).isNominal()) {
            int c = 0;
            final Map<Object, Integer> pv = WekaDataStatsUtil.getNominalRepartition(dataSet,
                    attrToHighlightIdx);
            for (final Map.Entry<Object, Integer> entry : pv.entrySet()) {
                final JXLabel comp = new JXLabel(entry.getKey().toString());
                final int idxOfColor = (c * (this.colors.length - this.firstColorIdx))
                        / attributeStats.nominalCounts.length;
                comp.setForeground(this.colors[idxOfColor + this.firstColorIdx]);
                legendPanel.add(comp);
                c++;
            }
        } else if (dataSet.attribute(attrToHighlightIdx).isNumeric()) {
            final JXLabel compMin = new JXLabel("Min: " + attributeStats.numericStats.min);
            compMin.setForeground(this.colors[this.firstColorIdx]);
            legendPanel.add(compMin);
            final JXLabel compMax = new JXLabel("Max: " + attributeStats.numericStats.max);
            compMax.setForeground(this.colors[this.colors.length - 1]);
            legendPanel.add(compMax);
        }
        this.jxp.add(legendPanel, BorderLayout.NORTH);
    }

    final JXPanel settingsPanel = new JXPanel();
    settingsPanel.setLayout(new GridLayout(1, 0));
    final JComboBox calendarModeCombo = new JComboBox(Mode.values());
    calendarModeCombo.setBorder(new TitledBorder("Mode"));
    final JComboBox attrToHighlightCombo = new JComboBox(
            WekaDataStatsUtil.getAttributeNames(dataSet).toArray());
    attrToHighlightCombo.setBorder(new TitledBorder("Attribute to highlight"));

    calendarModeCombo.setSelectedItem(calendarMode);
    calendarModeCombo.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            refresh(dataSet, dateIdx, attrToHighlightCombo.getSelectedIndex(),
                    Mode.valueOf(calendarModeCombo.getSelectedItem().toString()));
        }
    });
    settingsPanel.add(calendarModeCombo);

    attrToHighlightCombo.setSelectedIndex(attrToHighlightIdx);
    attrToHighlightCombo.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            refresh(dataSet, dateIdx, attrToHighlightCombo.getSelectedIndex(),
                    Mode.valueOf(calendarModeCombo.getSelectedItem().toString()));
        }
    });
    settingsPanel.add(attrToHighlightCombo);
    this.jxp.add(settingsPanel, BorderLayout.SOUTH);
}

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

License:Open Source License

private static Instances buildDerivatedDataset(final Instances dataSet, final List<String> possibleValues,
        final List<Integer> valueForEachFeature) throws Exception {
    final int numInstances = dataSet.numInstances();
    final ArrayList<Attribute> attrs = new ArrayList<Attribute>(numInstances + 2);
    attrs.add(new Attribute(FEATUREDESC_ATTRNAME, (java.util.List<String>) null));
    for (int i = 0; i < numInstances; i++) {
        attrs.add(new Attribute(i + "_eval"));
    }/* w  ww .  j a v a 2s .co  m*/
    attrs.add(new Attribute("__", possibleValues));

    final Instances newds = new Instances("unsupervisedFeaturesEval", attrs, 0);
    final int numAttributes = dataSet.numAttributes();
    for (int j = 0; j < numAttributes; j++) {
        double[] val = ArraysUtil.concat(dataSet.attributeToDoubleArray(j), new double[] { 0.0d });
        val = ArraysUtil.concat(new double[] { 0.0d }, val);
        newds.add(new DenseInstance(1.0d, val));
    }
    for (int j = 0; j < numAttributes; j++) {
        newds.instance(j).setValue(0, dataSet.attribute(j).name());
        newds.instance(j).setValue(numInstances + 1, possibleValues.get(valueForEachFeature.get(j)));
    }
    newds.setClassIndex(numInstances + 1);
    return newds;
}

From source file:lu.lippmann.cdb.datasetview.tasks.SetAttributeAsTimestampTask.java

License:Open Source License

/**
 * {@inheritDoc}/*from   w ww .  j a va  2  s .  c  o  m*/
 */
@Override
Instances process0(final Instances dataSet) throws Exception {
    final String s = (String) JOptionPane.showInputDialog(null, "Select an attribute:\n", "Attribute selection",
            JOptionPane.PLAIN_MESSAGE, null, WekaDataStatsUtil.getNumericAttributesNames(dataSet).toArray(),
            "");

    if (s != null) {
        final Instances newds = new Instances(dataSet);
        newds.insertAttributeAt(new Attribute("date", "dd-MM-yyyy HH:mm"), newds.numAttributes());

        final int sidx = newds.attribute(s).index();

        for (int i = 0; i < newds.numInstances(); i++) {
            newds.instance(i).setValue(newds.numAttributes() - 1, newds.instance(i).value(sidx));
        }

        return newds;
    } else
        return dataSet;
}

From source file:lu.lippmann.cdb.ext.hydviga.cbr.GapFillingKnowledgeDB.java

License:Open Source License

public static Instances findSimilarCases(final String attrname, final double x, final double y, final int year,
        final String season, final int gapSize, final int gapPosition, final boolean isDuringRising,
        final boolean hasDownstream, final boolean hasUpstream, final String flow) throws Exception {
    /* build the current case */
    final StringBuilder newsb = new StringBuilder(DATABASE_AS_STRINGBUILDER);
    newsb.append(attrname).append(",").append(x).append(",").append(y).append(",")

            .append(gapSize).append(",").append(gapPosition).append(",")

            .append(season).append(",").append(year).append(",")

            .append(isDuringRising).append(",").append(flow).append(",")

            .append(hasDownstream).append(",").append(hasUpstream).append(",")

            .append("?").append(",").append("?").append(",").append("?").append(",").append("?").append(",")
            .append("?").append(",").append("?").append(",").append(0) // MAE
            .append(",").append(0) // RMSE
            .append(",").append(0) // RSR
            .append(",").append(0) // PBIAS
            .append(",").append(1) // NS
            .append(",").append(1) // IOA
            .append(",").append(true) // BEST SOLUTION          
            .append("\n");
    final Instances tmpDB = WekaDataAccessUtil.loadInstancesFromCSVString(newsb.toString(), false);

    final Instance newcase = tmpDB.instance(tmpDB.numInstances() - 1);

    /* compute NN for the current case */
    final Instances knn = WekaMachineLearningUtil.computeNearestNeighbours(tmpDB, newcase, 10,
            "2,3,4,6,7,8,9,10,23");
    knn.add(0, newcase);//from   w w  w . j  av  a2 s  . com

    System.out.println(knn.toSummaryString());

    return knn;

}