List of usage examples for weka.core Instances attribute
publicAttribute attribute(String name)
From source file:lu.lippmann.cdb.common.gui.dataset.InstancesLoaderDialogFactory.java
License:Open Source License
private static Instances showDialog(final Component parent, final boolean setClass) throws Exception { final Preferences prefs = Preferences.userRoot().node("CadralDecisionBuild"); final String path = prefs.get(REG_KEY, WekaDataAccessUtil.DEFAULT_SAMPLE_DIR); final JFileChooser fc = new JFileChooser(); fc.setCurrentDirectory(new File(path)); final int returnVal = fc.showOpenDialog(parent); if (returnVal == JFileChooser.APPROVE_OPTION) { final File file = fc.getSelectedFile(); if (file != null) { prefs.put(REG_KEY, file.getPath()); final Instances ds = WekaDataAccessUtil.loadInstancesFromARFFOrCSVFile(file); final Attribute defaultClassAttr = ds.classIndex() >= 0 ? ds.classAttribute() : ds.attribute(0); ds.setClassIndex(-1);//from www. j a v a2s. c om ds.setRelationName(file.getPath()); final List<String> attributesNames = new ArrayList<String>(); final Enumeration<?> e = ds.enumerateAttributes(); while (e.hasMoreElements()) { final Attribute attr = (Attribute) e.nextElement(); attributesNames.add(attr.name()); } if (setClass) { final String s = (String) JOptionPane.showInputDialog(parent, "Select the class attribute for '" + file.getName() + "' (default:'" + defaultClassAttr.name() + "'): ", "Class selection", JOptionPane.QUESTION_MESSAGE, null, // icon attributesNames.toArray(), attributesNames.get(attributesNames.size() - 1)); if (s != null) { ds.setClass(ds.attribute(s)); } else { //Otherwise no class defined and CACHE attributeClass => No class index defined after cancel + retry ds.setClass(defaultClassAttr); return null; } } else { ds.setClass(defaultClassAttr); } return ds; } else throw new Exception(); } else return null; }
From source file:lu.lippmann.cdb.common.gui.ts.TimeSeriesChartUtil.java
License:Open Source License
private static void fillWithSingleAxis(final Instances dataSet, final int dateIdx, final TimeSeriesCollection tsDataset) { final int numInstances = dataSet.numInstances(); final Calendar cal = Calendar.getInstance(); for (final Integer i : WekaDataStatsUtil.getNumericAttributesIndexes(dataSet)) { if (dataSet.attributeStats(i).missingCount == dataSet.numInstances()) { System.out.println("TimeSeriesChartUtil: Only missing values for '" + dataSet.attribute(i).name() + "', so skip it!"); continue; }/*from w w w . j ava2s.c o m*/ final TimeSeries ts = new TimeSeries(dataSet.attribute(i).name()); for (int k = 0; k < numInstances; k++) { final Instance instancek = dataSet.instance(k); final long timeInMilliSec = (long) instancek.value(dateIdx); cal.setTimeInMillis(timeInMilliSec); if (instancek.isMissing(i)) { ts.addOrUpdate(new Millisecond(cal.getTime()), null); } else { ts.addOrUpdate(new Millisecond(cal.getTime()), instancek.value(i)); } } if (!ts.isEmpty()) tsDataset.addSeries(ts); } }
From source file:lu.lippmann.cdb.common.gui.ts.TimeSeriesChartUtil.java
License:Open Source License
private static void fillWithSingleAxisInterval(final Instances dataSet, final int dateIdx, final YIntervalSeriesCollection tsDataset, final double deviation, final int deviatedAttrIdx) { final int numInstances = dataSet.numInstances(); for (final Integer i : WekaDataStatsUtil.getNumericAttributesIndexes(dataSet)) { if (dataSet.attributeStats(i).missingCount == dataSet.numInstances()) { System.out.println("TimeSeriesChartUtil: Only missing values for '" + dataSet.attribute(i).name() + "', so skip it!"); continue; }/*from w w w . j a v a 2 s. co m*/ final YIntervalSeries ts = new YIntervalSeries(dataSet.attribute(i).name()); for (int k = 0; k < numInstances; k++) { final Instance instancek = dataSet.instance(k); final long timeInMilliSec = (long) instancek.value(dateIdx); if (instancek.isMissing(i)) { //ts.add(timeInMilliSec,null,0d,0d); } else { if (i == deviatedAttrIdx && k > 0 && k < (numInstances - 1)) { System.out.println(numInstances + " " + k + " " + instancek.value(i) + " " + (instancek.value(i) - deviation) + " " + (instancek.value(i) + deviation)); ts.add(timeInMilliSec, instancek.value(i), instancek.value(i) - deviation, instancek.value(i) + deviation); } else { ts.add(timeInMilliSec, instancek.value(i), instancek.value(i), instancek.value(i)); } //System.out.println(instancek.value(i)+" "+(instancek.value(i)-deviation)+" "+(instancek.value(i)+deviation)); } } if (!ts.isEmpty()) tsDataset.addSeries(ts); } }
From source file:lu.lippmann.cdb.common.gui.ts.TimeSeriesChartUtil.java
License:Open Source License
private static void fillWithMultipleAxis(final Instances dataSet, final int dateIdx, final TimeSeriesCollection tsDataset, final JFreeChart tsChart) { final int numInstances = dataSet.numInstances(); int axisNumber = 0; final Calendar cal = Calendar.getInstance(); for (final Integer i : WekaDataStatsUtil.getNumericAttributesIndexes(dataSet)) { final TimeSeries ts = new TimeSeries(dataSet.attribute(i).name()); for (int k = 0; k < numInstances; k++) { final long timeInMilliSec = (long) dataSet.instance(k).value(dateIdx); cal.setTimeInMillis(timeInMilliSec); if (dataSet.instance(k).isMissing(i)) { ts.addOrUpdate(new Millisecond(cal.getTime()), null); } else { ts.addOrUpdate(new Millisecond(cal.getTime()), dataSet.instance(k).value(i)); }//from ww w .j a v a 2 s .c o m } if (!ts.isEmpty()) { if (axisNumber == 0) { tsDataset.addSeries(ts); } else { final XYPlot plot = tsChart.getXYPlot(); final NumberAxis axisToAdd = new NumberAxis(dataSet.attribute(i).name()); axisToAdd.setAutoRangeIncludesZero(false); plot.setRangeAxis(axisNumber, axisToAdd); final TimeSeriesCollection t = new TimeSeriesCollection(); t.addSeries(ts); plot.setDataset(axisNumber, t); plot.mapDatasetToRangeAxis(axisNumber, axisNumber); final StandardXYItemRenderer renderer2 = new StandardXYItemRenderer(); renderer2.setSeriesPaint(0, ColorHelper.getColorForAString(dataSet.attribute(i).name())); plot.setRenderer(axisNumber, renderer2); } axisNumber++; } } }
From source file:lu.lippmann.cdb.common.gui.ts.TimeSeriesChartUtil.java
License:Open Source License
public static ChartPanel buildChartPanelForAllAttributesInterval(final Instances dataSet, final int dateIdx, final double deviation, final int deviatedAttrIdx) { final YIntervalSeriesCollection tsDataset = new YIntervalSeriesCollection(); final JFreeChart tsChart = ChartFactory.createTimeSeriesChart("", "Time", "Value", tsDataset, true, true, false);//from ww w. ja va 2 s . c o m tsChart.getXYPlot().setBackgroundPaint(Color.WHITE); double startgap0 = -1d; double endgap0 = -1d; try { java.util.List<double[]> gaps = WekaTimeSeriesUtil.findGaps(dataSet, deviatedAttrIdx); startgap0 = gaps.get(0)[2] + gaps.get(0)[3]; //System.out.println("start -> "+startgap0); endgap0 = gaps.get(1)[2] - 1; //System.out.println("end -> "+endgap0); } catch (Exception e) { e.printStackTrace(); } final double startgap = startgap0; final double endgap = endgap0; System.out.println("gap --> " + startgap + " " + endgap); tsChart.getXYPlot().setRenderer(/*deviatedAttrIdx,*/new DeviationRenderer(true, false) { /** */ private static final long serialVersionUID = 1234L; private boolean inRange(final int item) { return (item >= startgap && item <= endgap); } @Override public boolean getItemShapeVisible(int series, int item) { return false; } @Override public boolean getItemLineVisible(int series, int item) { return inRange(item); } }); for (int i = 0; i < dataSet.numAttributes() - 1; i++) { //final Color cc=ColorHelper.COLORBREWER_ALL_QUALITATIVE[i]; final Color cc = ColorHelper.getColorForAString(dataSet.attribute(i).name()); tsChart.getXYPlot().getRenderer().setSeriesPaint(i, cc); ((AbstractRenderer) tsChart.getXYPlot().getRenderer()).setSeriesFillPaint(i, cc.brighter()); } fillWithSingleAxisInterval(dataSet, dateIdx, tsDataset, deviation, deviatedAttrIdx); final ChartPanel cp = new ChartPanel(tsChart, true); if (dataSet.numAttributes() <= 2) cp.setBorder(new TitledBorder(dataSet.attribute(0).name())); return cp; }
From source file:lu.lippmann.cdb.common.gui.ts.TimeSeriesChartUtil.java
License:Open Source License
public static ChartPanel buildChartPanelForAllAttributes(final Instances dataSet, final boolean multAxis, final int dateIdx, final Color color, final Collection<XYAnnotation> annotations) { final TimeSeriesCollection tsDataset = new TimeSeriesCollection(); final JFreeChart tsChart = ChartFactory.createTimeSeriesChart("", "Time", "Value", tsDataset, true, true, false);//ww w. ja v a2 s . c o m tsChart.getXYPlot().setBackgroundPaint(Color.WHITE); // optimized renderer to avoid to print all points tsChart.getXYPlot().setRenderer(new SamplingXYLineRenderer()); //tsChart.getXYPlot().setRenderer(new XYStepRenderer()); if (color == null) { for (int i = 0; i < dataSet.numAttributes() - 1; i++) { final String attrName = dataSet.attribute(i).name(); tsChart.getXYPlot().getRenderer().setSeriesPaint(i, ColorHelper.getColorForAString(attrName)); } } else { tsChart.getXYPlot().getRenderer().setSeriesPaint(0, color); } if (annotations != null) { for (final XYAnnotation aa : annotations) tsChart.getXYPlot().addAnnotation(aa); } if (multAxis) fillWithMultipleAxis(dataSet, dateIdx, tsDataset, tsChart); else fillWithSingleAxis(dataSet, dateIdx, tsDataset); final ChartPanel cp = new ChartPanel(tsChart, true); if (dataSet.numAttributes() <= 2) cp.setBorder(new TitledBorder(dataSet.attribute(0).name())); return cp; }
From source file:lu.lippmann.cdb.common.gui.ts.TimeSeriesChartUtil.java
License:Open Source License
public static JScrollPane buildPanelWithChartForEachAttribute(final Instances dataSet, final int dateIdx) { final JXPanel jxpm = new JXPanel(); jxpm.setLayout(new GridBagLayout()); jxpm.setScrollableHeightHint(ScrollableSizeHint.VERTICAL_STRETCH); final GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0;/* w ww . j ava2s . c o m*/ gbc.gridy = 0; gbc.weightx = 1; gbc.weighty = 1; gbc.fill = GridBagConstraints.BOTH; gbc.insets = new Insets(10, 10, 10, 10); final int numAttributes = dataSet.numAttributes(); for (int i = 0; i < numAttributes; i++) { final Attribute attr = dataSet.attribute(i); System.out.println("Build chart panel for '" + attr.name() + "' time serie ..."); if (attr.isNominal()) { jxpm.add(buildChartPanelForNominalAttribute(dataSet, attr, dateIdx), gbc); gbc.gridy++; } else if (attr.isNumeric() && !attr.isDate()) { try { final Instances filteredDs = WekaDataProcessingUtil.buildFilteredByAttributesDataSet(dataSet, new int[] { attr.index(), dateIdx }); jxpm.add(buildChartPanelForAllAttributes(filteredDs, false, 1, null), gbc); gbc.gridy++; } catch (Exception e) { e.printStackTrace(); } } } return new JScrollPane(jxpm, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); }
From source file:lu.lippmann.cdb.datasetview.DatasetView.java
License:Open Source License
private void updateFiltersPane(final Instances instances) throws Exception { filterPanel.removeAll();//from ww w . j a v a 2 s. co m gbc.gridx = 0; gbc.gridy = 0; final int numAttributes = instances.numAttributes(); final RangeSlider[] rangeSliders = new RangeSlider[numAttributes]; final JComboBox[] nominalCombos = new JComboBox[numAttributes]; boolean hasNumeric = false; boolean hasDate = false; for (int i = 0; i < numAttributes; i++) { final int attrIdx = i; if ((WekaDataStatsUtil.isInteger(instances, i)) || instances.attribute(i).isDate()) { hasNumeric = hasNumeric || (instances.attribute(i).isNumeric() && !instances.attribute(i).isDate()); hasDate = hasDate || instances.attribute(i).isDate(); final long[] minmax = WekaDataStatsUtil.getMinMaxForAttribute(instances, i); if (Math.abs(minmax[1] - minmax[0]) < 0.00001) continue; if (instances.attribute(i).isDate()) { minmax[0] = (int) (minmax[0] / (1000l)); minmax[1] = (int) (minmax[1] / (1000l)); } long[] oldminmax; try { final Attribute goodAttr = notFilteredDataSet.attribute(instances.attribute(i).name()); oldminmax = WekaDataStatsUtil.getMinMaxForAttribute(notFilteredDataSet, goodAttr.index()); if (instances.attribute(i).isDate()) { oldminmax[0] = (int) (oldminmax[0] / (1000l)); oldminmax[1] = (int) (oldminmax[1] / (1000l)); } } catch (Throwable t) { oldminmax = minmax; } rangeSliders[i] = new RangeSlider(); rangeSliders[i].setMinimum((int) oldminmax[0]); rangeSliders[i].setMaximum((int) oldminmax[1]); rangeSliders[i].setValue((int) minmax[0]); rangeSliders[i].setUpperValue((int) minmax[1]); // hack... rangeSliders[i].setValue((int) minmax[0]); rangeSliders[i].setUpperValue((int) minmax[1]); if (!instances.attribute(i).isDate()) { rangeSliders[i].setPaintTicks(true); rangeSliders[i].setPaintLabels(true); final int rangeWidth = (int) (oldminmax[1] - oldminmax[0]); rangeSliders[i].setMinorTickSpacing(rangeWidth / 10); rangeSliders[i].setMajorTickSpacing(rangeWidth / 2); } rangeSliders[i].addChangeListener(new ChangeListener() { @Override public void stateChanged(final ChangeEvent e) { if (!rangeSliders[attrIdx].getValueIsAdjusting()) { processfilters(rangeSliders, nominalCombos, instances.attribute(attrIdx).name(), attrIdx); } else { if (instances.attribute(attrIdx).isDate()) { final Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(rangeSliders[attrIdx].getValue() * 1000l); final String minDate = FormatterUtil.DATE_FORMAT.format(cal.getTime()); cal.setTimeInMillis(rangeSliders[attrIdx].getUpperValue() * 1000l); final String maxDate = FormatterUtil.DATE_FORMAT.format(cal.getTime()); rangeSliders[attrIdx].setBorder(new TitledBorder(instances.attribute(attrIdx).name() + " [" + minDate + " - " + maxDate + "]")); } else { rangeSliders[attrIdx].setBorder(new TitledBorder(instances.attribute(attrIdx).name() + " [" + rangeSliders[attrIdx].getValue() + " - " + rangeSliders[attrIdx].getUpperValue() + "]")); } } } }); if (instances.attribute(i).isDate()) { filterPanel.add(rangeSliders[i], gbc); gbc.gridy++; final Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(rangeSliders[i].getValue() * 1000l); final String minDate = FormatterUtil.DATE_FORMAT.format(cal.getTime()); cal.setTimeInMillis(rangeSliders[i].getUpperValue() * 1000l); final String maxDate = FormatterUtil.DATE_FORMAT.format(cal.getTime()); rangeSliders[i].setBorder(new TitledBorder( instances.attribute(i).name() + " [" + minDate + " - " + maxDate + "]")); } else { filterPanel.add(rangeSliders[i], gbc); gbc.gridy++; rangeSliders[i].setBorder(new TitledBorder(instances.attribute(i).name() + " [" + rangeSliders[i].getValue() + " - " + rangeSliders[i].getUpperValue() + "]")); } } else { rangeSliders[i] = null; } } for (int i = 0; i < numAttributes; i++) { if (instances.attribute(i).isNominal()) { final ArrayList<String> possibleValuesList = new ArrayList<String>(); final Enumeration<?> es = notFilteredDataSet .attribute(notFilteredDataSet.attribute(instances.attribute(i).name()).index()) .enumerateValues(); possibleValuesList.add(ALL_VAL); while (es.hasMoreElements()) { possibleValuesList.add(es.nextElement().toString().trim()); } if (possibleValuesList.size() == 2) continue; // only one choice, no filter needed! nominalCombos[i] = new JComboBox(possibleValuesList.toArray()); if (WekaDataStatsUtil.getPresentValuesForNominalAttribute(instances, i).size() == 1) { nominalCombos[i].setSelectedItem(instances.instance(0).stringValue(i)); } nominalCombos[i].setBorder(new TitledBorder(instances.attribute(i).name())); final int nominalAttrIdx = i; nominalCombos[i].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { processfilters(rangeSliders, nominalCombos, instances.attribute(nominalAttrIdx).name(), nominalAttrIdx); } }); filterPanel.add(nominalCombos[i], gbc); gbc.gridy++; } } filterPanel.setVisible(gbc.gridy > 0); filterPanel.updateUI(); scrollPane.setVisible(gbc.gridy > 0); scrollPane.updateUI(); }
From source file:lu.lippmann.cdb.datasetview.DatasetView.java
License:Open Source License
private void processfilters(final RangeSlider[] rangeSliders, final JComboBox[] nominalCombos, final String name, final int idx) { Instances newds = new Instances(notFilteredDataSet); for (int k = 0; k < nominalCombos.length; k++) { if (k == idx && nominalCombos[k] != null && !nominalCombos[k].getSelectedItem().toString().equals(ALL_VAL)) { newds = WekaDataProcessingUtil.filterDataSetOnNominalValue(newds, k, nominalCombos[k].getSelectedItem().toString()); System.out.println("filter on '" + nominalCombos[k].getSelectedItem().toString() + "'"); }//from w ww . j av a2 s . com } for (int k = 0; k < rangeSliders.length; k++) { if (k == idx && rangeSliders[k] != null) { if (newds.attribute(k).isDate()) { newds = WekaDataProcessingUtil.filterDataSetOnNumericValue(newds, k, rangeSliders[k].getValue() * 1000d, rangeSliders[k].getUpperValue() * 1000d); System.out.println("filter on '" + k + "'"); } else { newds = WekaDataProcessingUtil.filterDataSetOnNumericValue(newds, k, (double) rangeSliders[k].getValue(), (double) rangeSliders[k].getUpperValue()); System.out.println("filter on '" + k + "'"); } } } notifyFilter(newds, "Filtered on '" + name + "'"); }
From source file:lu.lippmann.cdb.datasetview.tabs.AttributesSummaryTabView.java
License:Open Source License
/** * {@inheritDoc}//from w w w . j a va 2 s.c o m */ @Override public void update0(final Instances dataSet) throws Exception { final int numAttr = dataSet.numAttributes(); final JTabbedPane tabbedPane = new JTabbedPane(); this.as.setGridWidth(Math.min(3, numAttr)); this.as.setColoringIndex(dataSet.classIndex()); this.as.setInstances(dataSet); tabbedPane.addTab("All", this.as); for (int i = 0; i < numAttr; i++) { final Instances nds = WekaDataProcessingUtil.buildFilteredByAttributesDataSet(dataSet, new int[] { i }); final AttributeSummarizer as0 = new AttributeSummarizer(); as0.setGridWidth(1); as0.setColoringIndex(nds.classIndex()); as0.setInstances(nds); tabbedPane.addTab(dataSet.attribute(i).name(), as0); } this.jxp.removeAll(); this.jxp.add(tabbedPane, BorderLayout.CENTER); this.jxp.repaint(); }