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.datasetview.tabs.MDSTabView.java

License:Open Source License

/**
 * {@inheritDoc}/*  w w  w  . j a v  a  2  s.com*/
 */
@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}/*from   ww w  .  ja va 2 s  . com*/
 */
@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  www  . jav  a2 s  .com
        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.StatsTabView.java

License:Open Source License

public static Instances buildStatsForNumericalAttributes(final Instances dataset) throws Exception {
    final StringBuilder sb = new StringBuilder("@relation blabla\n");
    sb.append("@attribute 'name' string\n");
    sb.append("@attribute 'min' string\n");
    sb.append("@attribute 'max' string\n");
    sb.append("@attribute 'mean' string\n");
    sb.append("@attribute 'stdDev' string\n");
    sb.append("@attribute 'missing values count' string\n");
    sb.append("@attribute 'missing values %' string\n");
    sb.append("@attribute 'values repartition' string\n");
    sb.append("@data\n");

    for (int i = 0; i < dataset.numAttributes(); i++) {
        if (dataset.attribute(i).isNumeric() && !dataset.attribute(i).isDate()) {
            sb.append(dataset.attribute(i).name()).append(",")
                    .append(FormatterUtil.DECIMAL_FORMAT.format(dataset.attributeStats(i).numericStats.min))
                    .append(",")
                    .append(FormatterUtil.DECIMAL_FORMAT.format(dataset.attributeStats(i).numericStats.max))
                    .append(",")
                    .append(FormatterUtil.DECIMAL_FORMAT.format(dataset.attributeStats(i).numericStats.mean))
                    .append(",")
                    .append(FormatterUtil.DECIMAL_FORMAT.format(dataset.attributeStats(i).numericStats.stdDev))
                    .append(",").append(dataset.attributeStats(i).missingCount).append(",")
                    .append(FormatterUtil.DECIMAL_FORMAT
                            .format(100d * dataset.attributeStats(i).missingCount / dataset.numInstances()))
                    .append(",").append("''").append("\n");
        } else if (dataset.attribute(i).isNominal()) {
            sb.append(dataset.attribute(i).name()).append(",'','','','','','','");

            final Map<Object, String> nominalRep = WekaDataStatsUtil
                    .getNominalRepartitionForDescription(dataset, i);
            for (Map.Entry<Object, String> e : nominalRep.entrySet()) {
                sb.append(e.getKey()).append("=").append(e.getValue()).append(" ");
            }/*w ww  .  j  a v a  2 s. com*/

            sb.append("'\n");
        }
    }

    final Instances newds = WekaDataAccessUtil.loadInstancesFromARFFString(sb.toString(), false, false);

    if (WekaDataStatsUtil.getNominalAttributesIndexes(dataset).length == 0) {
        newds.deleteAttributeAt(newds.numAttributes() - 1);
    }
    return newds;
}

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

License:Open Source License

/**
 * Constructor./*from  w  ww.j  a va 2  s.  c  om*/
 */
public TableTabView(final EventPublisher eventPublisher) {
    super();

    this.instanceTable = new JXTable();

    this.instanceTable.setModel(new InstanceTableModel());

    this.instanceTable.setEditable(true);
    this.instanceTable.setShowHorizontalLines(false);
    this.instanceTable.setShowVerticalLines(false);
    this.instanceTable.setVisibleRowCount(5);
    this.instanceTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

    //Render of numbers
    this.instanceTable.setDefaultRenderer(Number.class, new TableTabCellRenderer());

    this.instanceTable.addMouseListener(new MouseAdapter() {
        public void mouseReleased(final MouseEvent e) {
            if (e.isPopupTrigger()) {
                final InstanceTableModel instanceTableModel = (InstanceTableModel) instanceTable.getModel();
                final Instances dataSet = instanceTableModel.getDataSet();
                final int row = instanceTable.rowAtPoint(e.getPoint());
                final int column = instanceTable.columnAtPoint(e.getPoint());
                final int modelColumn = instanceTable.convertColumnIndexToModel(column);
                final int modelRow = instanceTable.convertRowIndexToModel(row);

                final JPopupMenu jPopupMenu = new JPopupMenu("feur");

                if (modelColumn > 0 && dataSet.classIndex() != modelColumn - 1) {
                    final JMenuItem removeColumnMenuItem = new JMenuItem(
                            "Remove this column ('" + instanceTableModel.getColumnName(modelColumn) + "')");
                    removeColumnMenuItem.addActionListener(new ActionListener() {
                        @Override
                        public void actionPerformed(final ActionEvent e) {
                            final Instances newdataSet = new Instances(dataSet);
                            newdataSet.deleteAttributeAt(modelColumn - 1);
                            pushDataChange(new DataChange(newdataSet, TabView.DataChangeTypeEnum.Deletion));
                        }
                    });
                    jPopupMenu.add(removeColumnMenuItem);
                }

                if (modelColumn > 0 && dataSet.attribute(modelColumn - 1).isNumeric()
                        && !dataSet.attribute(modelColumn - 1).isDate()) {
                    final JMenuItem discrColumnMenuItem = new JMenuItem(
                            "Discretize this column ('" + instanceTableModel.getColumnName(modelColumn) + "')");
                    discrColumnMenuItem.addActionListener(new ActionListener() {
                        @Override
                        public void actionPerformed(final ActionEvent e) {
                            try {
                                final Instances newdataSet = WekaDataProcessingUtil
                                        .buildDiscretizedDataSetUnsupervisedForOne(dataSet, modelColumn - 1);
                                pushDataChange(new DataChange(newdataSet, TabView.DataChangeTypeEnum.Update));
                            } catch (Exception e1) {
                                eventPublisher.publish(new ErrorOccuredEvent("Error during discretization of '"
                                        + instanceTableModel.getColumnName(modelColumn) + "'", e1));
                            }
                        }
                    });
                    jPopupMenu.add(discrColumnMenuItem);

                    for (final int c : new int[] { 5, 10, 20, 40, 80 }) {
                        final JMenuItem discrColumnMenuItemN = new JMenuItem("Discretize this column ('"
                                + instanceTableModel.getColumnName(modelColumn) + "') bins=" + c);
                        discrColumnMenuItemN.addActionListener(new ActionListener() {
                            @Override
                            public void actionPerformed(final ActionEvent e) {
                                try {
                                    final Instances newdataSet = WekaDataProcessingUtil
                                            .buildDiscretizedDataSetUnsupervised(dataSet, modelColumn - 1, c);
                                    pushDataChange(
                                            new DataChange(newdataSet, TabView.DataChangeTypeEnum.Update));
                                } catch (Exception e1) {
                                    eventPublisher
                                            .publish(new ErrorOccuredEvent("Error during discretization of '"
                                                    + instanceTableModel.getColumnName(modelColumn) + "'", e1));
                                }
                            }
                        });
                        jPopupMenu.add(discrColumnMenuItemN);
                    }

                }

                if (column > 0 && dataSet.attribute(column - 1)
                        .isNumeric()/*WekaDataStatsUtil.isInteger(dataSet,column-1)*/) {
                    final JMenuItem nominalizeColumnMenuItem = new JMenuItem(
                            "Nominalize this column ('" + instanceTableModel.getColumnName(column) + "')");
                    nominalizeColumnMenuItem.addActionListener(new ActionListener() {
                        @Override
                        public void actionPerformed(final ActionEvent e) {
                            try {
                                final Instances newdataSet = WekaDataProcessingUtil
                                        .buildNominalizedDataSet(dataSet, new int[] { modelColumn - 1 });
                                pushDataChange(new DataChange(newdataSet, TabView.DataChangeTypeEnum.Update));
                            } catch (Exception e1) {
                                eventPublisher.publish(new ErrorOccuredEvent("Error during nominalization of '"
                                        + instanceTableModel.getColumnName(modelColumn) + "'", e1));
                            }
                        }
                    });
                    jPopupMenu.add(nominalizeColumnMenuItem);
                }

                if (column > 0 && (dataSet.attribute(column - 1).isNominal()
                        || dataSet.attribute(column - 1).isString())) {
                    final JMenuItem numColumnMenuItem = new JMenuItem(
                            "Numerize this column ('" + instanceTableModel.getColumnName(column) + "')");
                    numColumnMenuItem.addActionListener(new ActionListener() {
                        @Override
                        public void actionPerformed(final ActionEvent e) {
                            try {
                                final Instances newdataSet = WekaDataProcessingUtil
                                        .buildDataSetWithNumerizedStringAttribute(dataSet, column - 1);
                                pushDataChange(new DataChange(newdataSet, TabView.DataChangeTypeEnum.Update));
                            } catch (Exception e1) {
                                eventPublisher.publish(new ErrorOccuredEvent("Error during numerization of '"
                                        + instanceTableModel.getColumnName(column) + "'", e1));
                            }
                        }
                    });
                    jPopupMenu.add(numColumnMenuItem);
                }

                final JMenuItem removeRowMenuItem = new JMenuItem(
                        "Remove this row (id='" + instanceTableModel.getValueAt(row, 0) + "')");
                removeRowMenuItem.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(final ActionEvent e) {
                        final Instances newdataSet = new Instances(dataSet);
                        newdataSet.remove(modelRow);
                        instanceTableModel.removeRow(modelRow);
                        pushDataChange(new DataChange(newdataSet, TabView.DataChangeTypeEnum.Deletion));
                    }
                });
                jPopupMenu.add(removeRowMenuItem);

                final JMenuItem selectKNNMenuItem = new JMenuItem("Select nearest neighbours of this row (id='"
                        + instanceTableModel.getValueAt(modelRow, 0) + "')");
                selectKNNMenuItem.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(final ActionEvent e) {
                        try {
                            final Instances knnResult = WekaMachineLearningUtil
                                    .computeNearestNeighbours(dataSet, instanceTableModel.getRow(modelRow), 10);
                            pushDataChange(new DataChange(knnResult, TabView.DataChangeTypeEnum.Selection));
                        } catch (Exception e1) {
                            eventPublisher.publish(new ErrorOccuredEvent(
                                    "Error when selecting nearest neighbours of this row!", e1));
                        }
                    }
                });
                jPopupMenu.add(selectKNNMenuItem);

                jPopupMenu.show(instanceTable, e.getX(), e.getY());
            }
        }
    });

    this.instanceTable.packAll();
    final int tableWidth = (int) this.instanceTable.getPreferredSize().getWidth() + 30;
    this.scrollPane = new JScrollPane(this.instanceTable);
    this.scrollPane.setPreferredSize(new Dimension(Math.min(tableWidth, 500), 500));
    this.scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
}

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  .  j  av  a 2s.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.TimeSeriesClusteringPanel.java

License:Open Source License

public void refresh0(final Instances dataSet, final int dateIdx) {
    if (this.currentChartPanel != null) {
        this.jxp.remove(this.currentChartPanel);
        this.currentChartPanel = null;
        this.jxp.updateUI();
    }/* w  w w .j  a  v a  2s. c o m*/

    if (this.cl != null)
        this.slider.removeChangeListener(cl);

    this.cl = new ChangeListener() {
        @Override
        public void stateChanged(final ChangeEvent e) {
            if (!slider.getValueIsAdjusting()) {
                refresh(dataSet, dateIdx);
            }
        }
    };
    this.slider.addChangeListener(cl);

    Instances clusterAssignementDataSet0 = dataSet;
    try {
        clusterAssignementDataSet0 = buildClusteredDataSet(dataSet, slider.getValue());
        final Attribute clusterAttr = clusterAssignementDataSet0
                .attribute(CLUSTER_ATTRIBUTE_NAME + CLUTERING_IDX);
        this.currentChartPanel = TimeSeriesChartUtil
                .buildChartPanelForNominalAttribute(clusterAssignementDataSet0, clusterAttr, dateIdx);
        this.jxp.add(this.currentChartPanel, BorderLayout.CENTER);
    } catch (Exception e1) {
        e1.printStackTrace();
    }
    final Instances clusterAssignementDataSet = clusterAssignementDataSet0;

    if (this.al != null)
        addClustButton.removeActionListener(this.al);

    this.al = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            atv.pushDataChange(new DataChange(clusterAssignementDataSet, DataChangeTypeEnum.Update));
        }
    };
    this.addClustButton.addActionListener(al);
}

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

License:Open Source License

private Instances buildFeatureDS(final Instances dataSet) throws Exception {
    final int numAttributes = dataSet.numAttributes();

    final java.util.List<String> namesOfFeaturesToConsider = new ArrayList<String>();
    namesOfFeaturesToConsider.addAll(WekaDataStatsUtil.getAttributeNames(dataSet));
    namesOfFeaturesToConsider.removeAll(WekaDataStatsUtil.getDateAttributeNames(dataSet));

    final double[][] simMatrix = new double[numAttributes][numAttributes];
    for (int i = 0; i < numAttributes; i++) {
        final double[] arrayI = dataSet.attributeToDoubleArray(i);
        if (this.withNormalization)
            MathsUtil.normalize(arrayI);
        simMatrix[i][i] = 0d;//  w ww .  ja  v a  2  s . c  om
        ;
        for (int j = i + 1; j < numAttributes; j++) {
            final double[] arrayJ = dataSet.attributeToDoubleArray(j);
            if (this.withNormalization)
                MathsUtil.normalize(arrayJ);
            simMatrix[i][j] = new DynamicTimeWarping(arrayI, arrayJ).getDistance();
            //System.out.println(i+" "+j);
        }

    }
    for (int i = 0; i < numAttributes; i++) {
        for (int j = 0; j < i + 1; j++) {
            simMatrix[i][j] = simMatrix[j][i];
        }
    }

    /*for (int i=0;i<numAttributes;i++)
    {
       System.out.println(i+" -> "+FormatterUtil.buildStringFromArrayOfDoubles(simMatrix[i]));
    }*/

    final ArrayList<Attribute> attrs = new ArrayList<Attribute>(numAttributes + 1);
    for (int i = 0; i < numAttributes; i++) {
        attrs.add(new Attribute(dataSet.attribute(i).name() + "-feat"));
    }
    attrs.add(new Attribute(FEATUREDESC_ATTRNAME, namesOfFeaturesToConsider));
    final Instances ds = new Instances("featuresComparisonDs", attrs, 0);
    ds.setClassIndex(attrs.size() - 1);

    for (int i = 0; i < simMatrix.length; i++) {
        final DenseInstance di = new DenseInstance(1.0d, ArraysUtil.concat(simMatrix[i], new double[] { 0d }));
        di.setDataset(ds);
        di.setValue(simMatrix.length, dataSet.attribute(i).name());
        ds.add(di);
    }
    return ds;
}

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

License:Open Source License

private void fillTabs(final Instances dataSet) {
    if (dataSet.numInstances() > MAX_SIZE) {
        throw new IllegalStateException("Time series are too long (" + dataSet.numInstances()
                + "), and records count should be > " + MAX_SIZE + ": please filter data before using it.");
    }/*  w  ww .  ja va 2 s  .  c o m*/

    final int dateIdx = dataSet.attribute(dateAttributeField.getSelectedItem().toString()).index();

    if (this.oneGraphOneAxisPanel != null) {
        //EXECUTOR.execute(new Runnable()
        //SwingUtilities.invokeLater(new Runnable()
        //{
        //@Override
        //public void run() 
        {
            System.out.println("TimeSeriesTabView: building 'one graph one axis' subpanel ...");
            oneGraphOneAxisPanel.removeAll();
            final ChartPanel oneGraphOneAxisChartPanel = TimeSeriesChartUtil
                    .buildChartPanelForAllAttributes(dataSet, false, dateIdx, null);
            oneGraphOneAxisPanel.add(oneGraphOneAxisChartPanel, BorderLayout.CENTER);
        }
        //});
    }

    /*System.out.println("TimeSeriesTabView: building 'one graph multiple axis' subpanel ...");      
    this.oneGraphMultipleAxisPanel.removeAll();
    final ChartPanel oneGraphMultipleAxisChartPanel=TimeSeriesChartUtil.buildChartPanelForAllAttributes(dataSet,true,dateIdx);
    this.oneGraphMultipleAxisPanel.add(oneGraphMultipleAxisChartPanel,BorderLayout.CENTER);*/

    if (this.multipleGraphsPanel != null) {
        //EXECUTOR.execute(new Runnable()
        //SwingUtilities.invokeLater(new Runnable()
        //{
        //@Override
        //public void run() 
        {
            System.out.println("TimeSeriesTabView: building 'multiple graphs' subpanel ...");
            multipleGraphsPanel.removeAll();
            multipleGraphsPanel.add(TimeSeriesChartUtil.buildPanelWithChartForEachAttribute(dataSet, dateIdx),
                    BorderLayout.CENTER);
        }
        //});         
    }

    if (this.clusteringPanel != null) {
        //EXECUTOR.execute(new Runnable()
        //SwingUtilities.invokeLater(new Runnable()
        //{
        //@Override
        //public void run() 
        {
            System.out.println("TimeSeriesTabView: building 'clustering' subpanel ...");
            clusteringPanel.refresh(dataSet, dateIdx);
        }
        //});   
    }

    if (this.similarityPanel != null) {
        //EXECUTOR.execute(new Runnable()
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                System.out.println("TimeSeriesTabView: building 'similarity' subpanel ...");
                similarityPanel.refresh(dataSet);
            }
        });
    }

    if (this.calendarPanel != null) {
        //EXECUTOR.execute(new Runnable()
        //SwingUtilities.invokeLater(new Runnable()
        //{
        //@Override
        //public void run() 
        {
            System.out.println("TimeSeriesTabView: building 'calendar' subpanel ...");
            calendarPanel.refresh(dataSet, dateIdx);
        }
        //});            
    }
}

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"));
    }//from  w w w .  jav  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;
}