List of usage examples for weka.core Instances attribute
publicAttribute attribute(String name)
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; }