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.ext.hydviga.ui.HydroDatasetView.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() + "'");
        }/*  w  w  w  . j  a v  a 2s . c o m*/
    }
    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 + "': " + rangeSliders[k].getValue() + " -> "
                        + rangeSliders[k].getUpperValue());
            } 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.ext.hydviga.ui.SimilarCasesFrame.java

License:Open Source License

/**
 * Constructor./*from   ww  w  .  j  a  va 2  s . c  o  m*/
 */
SimilarCasesFrame(final Instances ds, final int dateIdx, final StationsDataProvider gcp, String attrname,
        final int gapsize, final int position, final double x, final double y, final int year,
        final String season, final boolean isDuringRising) throws Exception {
    LogoHelper.setLogo(this);
    this.setTitle("KnowledgeDB: Suggested configurations / similar cases");

    this.inputCaseTablePanel = new JXPanel();
    this.inputCaseTablePanel.setBorder(new TitledBorder("Present case"));
    this.inputCaseChartPanel = new JXPanel();
    this.inputCaseChartPanel.setBorder(new TitledBorder("Profile of the present case"));
    this.outputCasesTablePanel = new JXPanel();
    this.outputCasesTablePanel.setBorder(new TitledBorder("Suggested cases"));
    this.outputCasesChartPanel = new JXPanel();
    this.outputCasesChartPanel.setBorder(new TitledBorder("Profile of the selected suggested case"));

    getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
    getContentPane().add(inputCaseTablePanel);
    getContentPane().add(inputCaseChartPanel);
    getContentPane().add(outputCasesTablePanel);
    getContentPane().add(outputCasesChartPanel);

    final Instances res = GapFillingKnowledgeDB.findSimilarCases(attrname, x, y, year, season, gapsize,
            position, isDuringRising, gcp.findDownstreamStation(attrname) != null,
            gcp.findUpstreamStation(attrname) != null,
            GapsUtil.measureHighMiddleLowInterval(ds, ds.attribute(attrname).index(), position - 1));

    final Instances inputCase = new Instances(res);
    while (inputCase.numInstances() > 1)
        inputCase.remove(1);
    final JXTable inputCaseTable = buidJXTable(inputCase);
    final JScrollPane inputScrollPane = new JScrollPane(inputCaseTable);
    //System.out.println(inputScrollPane.getPreferredSize());
    inputScrollPane.setPreferredSize(
            new Dimension(COMPONENT_WIDTH, (int) (50 + inputScrollPane.getPreferredSize().getHeight())));
    this.inputCaseTablePanel.add(inputScrollPane);

    final ChartPanel inputcp = GapsUIUtil.buildGapChartPanel(ds, dateIdx, ds.attribute(attrname), gapsize,
            position);
    inputcp.getChart().removeLegend();
    inputcp.setPreferredSize(CHART_DIMENSION);
    this.inputCaseChartPanel.add(inputcp);

    final Instances outputCases = new Instances(res);
    outputCases.remove(0);
    final JXTable outputCasesTable = buidJXTable(outputCases);
    final JScrollPane outputScrollPane = new JScrollPane(outputCasesTable);
    outputScrollPane.setPreferredSize(
            new Dimension(COMPONENT_WIDTH, (int) (50 + outputScrollPane.getPreferredSize().getHeight())));
    this.outputCasesTablePanel.add(outputScrollPane);

    outputCasesTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    outputCasesTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
        @Override
        public void valueChanged(ListSelectionEvent e) {
            if (!e.getValueIsAdjusting()) {
                final int modelRow = outputCasesTable.getSelectedRow();

                final String attrname = outputCasesTable.getModel().getValueAt(modelRow, 1).toString();
                final int gapsize = (int) Double
                        .valueOf(outputCasesTable.getModel().getValueAt(modelRow, 4).toString()).doubleValue();
                final int position = (int) Double
                        .valueOf(outputCasesTable.getModel().getValueAt(modelRow, 5).toString()).doubleValue();

                try {
                    final ChartPanel cp = GapsUIUtil.buildGapChartPanel(ds, dateIdx, ds.attribute(attrname),
                            gapsize, position);
                    cp.getChart().removeLegend();
                    cp.setPreferredSize(CHART_DIMENSION);
                    outputCasesChartPanel.removeAll();
                    outputCasesChartPanel.add(cp);
                    getContentPane().repaint();
                    pack();
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
        }
    });

    outputCasesTable.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseReleased(final MouseEvent e) {
            final InstanceTableModel instanceTableModel = (InstanceTableModel) outputCasesTable.getModel();
            final int row = outputCasesTable.rowAtPoint(e.getPoint());
            final int modelRow = outputCasesTable.convertRowIndexToModel(row);

            final String attrname = instanceTableModel.getValueAt(modelRow, 1).toString();
            final int gapsize = (int) Double.valueOf(instanceTableModel.getValueAt(modelRow, 4).toString())
                    .doubleValue();
            final int position = (int) Double.valueOf(instanceTableModel.getValueAt(modelRow, 5).toString())
                    .doubleValue();

            if (e.isPopupTrigger()) {
                final JPopupMenu jPopupMenu = new JPopupMenu("feur");

                final JMenuItem mi = new JMenuItem("Use this configuration");
                mi.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(final ActionEvent e) {
                        System.out.println("not implemented!");
                    }
                });
                jPopupMenu.add(mi);
                jPopupMenu.show(outputCasesTable, e.getX(), e.getY());
            } else {
                // nothing?
            }
        }
    });

    setPreferredSize(new Dimension(FRAME_WIDTH, 900));

    pack();
    setVisible(true);

    /* select the first row */
    outputCasesTable.setRowSelectionInterval(0, 0);
}

From source file:lu.lippmann.cdb.ext.hydviga.ui.SimilarCasesFrame.java

License:Open Source License

private JXTable buidJXTable(final Instances cases) {
    final InstanceTableModel outputCasesTableModel = new InstanceTableModel();
    outputCasesTableModel.setDataset(cases);
    final JXTable outputCasesTable = new JXTable(outputCasesTableModel);
    outputCasesTable.setEditable(false);
    outputCasesTable.setShowHorizontalLines(false);
    outputCasesTable.setShowVerticalLines(false);
    outputCasesTable.setVisibleRowCount(Math.min(10, cases.numInstances())); // FIXME: hardcoded trick
    outputCasesTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    final HighlightPredicate myPredicate = new HighlightPredicate() {
        @Override//  www.  j  av  a 2s. c o m
        public boolean isHighlighted(final Component arg0, final ComponentAdapter arg1) {
            final String trueColumnName = (arg1.column > 0) ? cases.attribute(arg1.column - 1).name() : "id";
            final java.util.List<String> inputFieldsList = Arrays.asList(GapFillingKnowledgeDB.INPUT_FIELDS);
            return (inputFieldsList.contains(trueColumnName));
        }
    };
    outputCasesTable.addHighlighter(new ColorHighlighter(myPredicate, null, Color.BLUE));
    outputCasesTable.packAll();
    return outputCasesTable;
}

From source file:lu.lippmann.cdb.ext.hydviga.util.GapsUtil.java

License:Open Source License

public static Instances buildGapsDescription(final StationsDataProvider gcp, final Instances dataSet,
        final int dateIdx) {
    final StringBuilder sb = new StringBuilder("@relation blabla\n");
    sb.append("@attribute 'Time serie' string\n");
    sb.append("@attribute 'Start date of the gap' string\n");
    sb.append("@attribute 'Season' string\n");
    sb.append("@attribute 'End date of the gap' string\n");
    //sb.append("@attribute 'End season' string\n");
    sb.append("@attribute 'Gap size' numeric\n");
    sb.append("@attribute 'Gap Position' numeric\n");
    sb.append("@attribute 'Most similar serie (w.g.)' string\n");
    sb.append("@attribute 'Nearest station' string\n");
    sb.append("@attribute 'Upstream station' string\n");
    sb.append("@attribute 'Downstream station' string\n");
    sb.append("@attribute 'Rising?' string\n");
    sb.append("@attribute 'Flow' string\n");
    sb.append("@data\n");

    final Calendar cal = Calendar.getInstance();
    for (int i = 0; i < dataSet.numAttributes(); i++) {
        if (i == dateIdx)
            continue;
        try {//from  www.  ja v a 2s  . c  om
            final java.util.List<double[]> r = WekaTimeSeriesUtil.findGaps(dataSet, i);

            for (double[] dd : r) {
                cal.setTimeInMillis((long) dd[0]);
                final Date start = cal.getTime();
                final String startSeason = DateUtil.getSeason(cal.get(Calendar.MONTH) + 1,
                        cal.get(Calendar.DAY_OF_MONTH));
                cal.setTimeInMillis((long) dd[1]);
                final String endSeason = DateUtil.getSeason(cal.get(Calendar.MONTH) + 1,
                        cal.get(Calendar.DAY_OF_MONTH));
                final Date end = cal.getTime();
                final String stationName = dataSet.attribute(i).name();
                final String upstream = gcp.findUpstreamStation(stationName);
                final String downstream = gcp.findDownstreamStation(stationName);
                final int size = (int) dd[3];
                final int position = (int) dd[2];
                final String startFlow = (position > 0)
                        ? GapsUtil.measureHighMiddleLowInterval(dataSet, i, position - 1)
                        : "";
                final String endFlow = (position + size + 1 < dataSet.numInstances())
                        ? GapsUtil.measureHighMiddleLowInterval(dataSet, i, position + size + 1)
                        : "";
                String flow = startFlow;
                if (endFlow.length() > 0 && !endFlow.equals(startFlow)) {
                    if (flow.length() > 0)
                        flow += "/";
                    flow += endFlow;
                }
                sb.append(stationName).append(",'").append(FormatterUtil.DATE_FORMAT.format(start))
                        .append("','")
                        .append(startSeason.equals(endSeason) ? startSeason : (startSeason + "/" + endSeason))
                        .append("','").append(FormatterUtil.DATE_FORMAT.format(end)).append("',").append(size)
                        .append(",").append(position).append(",?").append(",")
                        .append(gcp.findNearestStation(stationName)).append(",")
                        .append(upstream != null ? upstream : "n/a").append(",")
                        .append(downstream != null ? downstream : "n/a").append(",'n/a'").append(",")
                        .append("'" + flow + "'").append("\n");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    try {
        return WekaDataAccessUtil.loadInstancesFromARFFString(sb.toString(), false, false);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

From source file:lu.lippmann.cdb.graph.GraphUtil.java

License:Open Source License

public static void updateVariables(final Instances dataSet, final GraphWithOperations gr) {
    for (final CVariable var : gr.getVariables()) {
        final Attribute attribute = dataSet.attribute(var.getKey());
        if (attribute == null)
            throw new IllegalStateException("Attribute '" + var.getKey() + "' not found in dataset!?");
        if (attribute.isNominal()) {
            var.setType(CadralType.ENUMERATION);
            final List<String> values = new ArrayList<String>();
            final Enumeration<?> eval = attribute.enumerateValues();
            while (eval.hasMoreElements()) {
                values.add((String) eval.nextElement());
            }//from   w w w . ja  va  2s.  com
            var.setValues(values);
        } else if (attribute.isNumeric()) {
            var.setType(CadralType.NUMERIC);
        } else {
            var.setType(CadralType.UNKNOWN);
        }
    }
}

From source file:lu.lippmann.cdb.lab.beta.shih.Shih2010.java

License:Open Source License

public Shih2010(Instances instances, boolean ignoreClass, boolean needsToResample, double theta) {
    try {/*from   www .  j a v  a2s  . co  m*/
        this.instances = instances;
        this.theta = theta;
        this.resample = needsToResample;
        if (needsToResample) {
            final Resample rs = new Resample();
            if (this.instances.numInstances() > MAX_INSTANCES_TAKEN) {
                rs.setInputFormat(instances);
                rs.setSampleSizePercent(MAX_INSTANCES_TAKEN * 100.0 / this.instances.numInstances());
                this.instances = Filter.useFilter(instances, rs);
            }
        }

        //System.out.println("Size = " + this.instances.numInstances());

        this.mapDomain = new HashMap<Integer, Set<String>>();

        if (ignoreClass) {
            this.instances.setClassIndex(-1);
        }

        //Save index of nominal & categorial attributes
        //Build a map i-DOM -> Attribute index
        this.idxsC = new ArrayList<Integer>();
        this.idxsN = new ArrayList<Integer>();
        int nn = 0;

        for (int i = 0; i < instances.numAttributes(); i++) {
            if (!instances.attribute(i).isNumeric())
                mapDomain.put(i, new HashSet<String>());
        }

        //Create map index & domain
        this.mapIndex = new HashMap<Integer, Map<String, Integer>>();
        int mapIdx = 0;
        for (int i = 0; i < instances.numAttributes(); i++) {
            Attribute attribute = instances.attribute(i);
            if (!attribute.isNumeric()) {
                idxsC.add(i); //i-th attribute is nominal
                final Map<String, Integer> mapIndexAttribute = new HashMap<String, Integer>();
                mapIndex.put(i, mapIndexAttribute);
                Enumeration<?> en = attribute.enumerateValues();
                while (en.hasMoreElements()) {
                    String catVal = en.nextElement().toString();
                    boolean created = mapDomain.get(i).add(catVal);
                    if (created) {
                        mapIndexAttribute.put(catVal, mapIdx++);
                    }
                }
                nn += mapDomain.get(i).size(); //count total nominal values
            } else {
                idxsN.add(i);
            }
        }

        this.n = nn;
        this.base = new ArrayList<TupleSI>();
        this.noBase = new ArrayList<TupleSI>();
        this.M = new int[n][n];
        this.D = new double[n][n];
        this.F = new HashMap<TupleSI, Double>();
        this.computeBase();
        this.computeMatrixMDF();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

From source file:lu.lippmann.cdb.lab.beta.util.WekaUtil2.java

License:Open Source License

/**
 * Generate the centroid coordinates based 
 * on it's  members (objects assigned to the cluster of the centroid) and the distance 
 * function being used.//from  w w  w . j a  v a2 s. c  o m
 * @return the centroid
 */
public static MixedCentroid computeMixedCentroid(final boolean preserveOrder,
        final NormalizableDistance distanceFunction, final Instances numericInstances,
        final Instances originalInstances, final int clusterIndex) {
    final int numInstances = numericInstances.numInstances();
    final int numAttributes = numericInstances.numAttributes();

    final Map<TupleSI, Integer> addedAttr = new HashMap<TupleSI, Integer>();

    if (numInstances == 1) {
        Instance uniqueNumInstance = numericInstances.firstInstance();
        Instance uniqueMixInstance = originalInstances.firstInstance();
        double[] centroid = uniqueNumInstance.toDoubleArray();
        for (int i = 0; i < uniqueMixInstance.numAttributes(); i++) {
            if (!uniqueMixInstance.attribute(i).isNumeric()) {
                final String catVal = uniqueMixInstance.attribute(i).value((int) uniqueMixInstance.value(i));
                addedAttr.put(new TupleSI(catVal, i), 1);
            }
        }
        return new MixedCentroid(clusterIndex, centroid, addedAttr);
    }

    final double[] vals = new double[numAttributes];

    //used only for Manhattan Distance
    Instances sortedMembers = null;
    int middle = 0;
    boolean dataIsEven = false;

    final boolean isManhattanDist = (distanceFunction instanceof ManhattanDistance);
    final boolean isEuclideanDist = (distanceFunction instanceof EuclideanDistance);

    if (isManhattanDist) {
        middle = (numInstances - 1) / 2;
        dataIsEven = ((numInstances % 2) == 0);
        if (preserveOrder) {
            sortedMembers = numericInstances;
        } else {
            sortedMembers = new Instances(numericInstances);
        }
    }

    for (int j = 0; j < numAttributes; j++) {
        //in case of Euclidian distance the centroid is the mean point
        //in case of Manhattan distance the centroid is the median point
        //in both cases, if the attribute is nominal, the centroid is the mode            
        if (isEuclideanDist) {
            vals[j] = numericInstances.meanOrMode(j);

            for (int i = 0; i < numInstances; i++) {
                if (!originalInstances.attribute(j).isNumeric()) {
                    final Instance instance = originalInstances.instance(i);
                    final String catVal = instance.attribute(j).value((int) instance.value(j));
                    //Initialize map
                    final TupleSI key = new TupleSI(catVal, j);
                    if (!addedAttr.containsKey(key))
                        addedAttr.put(key, 0);
                    addedAttr.put(key, addedAttr.get(key) + 1);
                }
            }
        } else if (isManhattanDist) {
            sortedMembers.kthSmallestValue(j, middle + 1);
            vals[j] = sortedMembers.instance(middle).value(j);
            if (dataIsEven) {
                sortedMembers.kthSmallestValue(j, middle + 2);
                vals[j] = (vals[j] + sortedMembers.instance(middle + 1).value(j)) / 2;
            }
        } else {
            throw new IllegalStateException("Not handled distance ...");
        }
    }

    return new MixedCentroid(clusterIndex, vals, addedAttr);
}

From source file:lu.lippmann.cdb.lab.mds.MDSViewBuilder.java

License:Open Source License

/**
 * /*w w  w.  j a  va 2  s.  c om*/
 */
private static void buildFilteredSeries(final MDSResult mdsResult, final XYPlot xyPlot,
        final String... attrNameToUseAsPointTitle) throws Exception {

    final CollapsedInstances distMdsRes = mdsResult.getCInstances();
    final Instances instances = distMdsRes.getInstances();

    final SimpleMatrix coordinates = mdsResult.getCoordinates();

    final Instances collapsedInstances = mdsResult.getCollapsedInstances();
    int maxSize = 0;
    if (distMdsRes.isCollapsed()) {
        final List<Instances> clusters = distMdsRes.getCentroidMap().getClusters();
        final int nbCentroids = clusters.size();
        maxSize = clusters.get(0).size();
        for (int i = 1; i < nbCentroids; i++) {
            final int currentSize = clusters.get(i).size();
            if (currentSize > maxSize) {
                maxSize = currentSize;
            }
        }
    }

    Attribute clsAttribute = null;
    int nbClass = 1;
    if (instances.classIndex() != -1) {
        clsAttribute = instances.classAttribute();
        nbClass = clsAttribute.numValues();
    }
    final XYSeriesCollection dataset = (XYSeriesCollection) xyPlot.getDataset();
    final int fMaxSize = maxSize;

    final List<XYSeries> lseries = new ArrayList<XYSeries>();

    //No class : add one dummy serie
    if (nbClass <= 1) {
        lseries.add(new XYSeries("Serie #1", false));
    } else {
        //Some class : add one serie per class
        for (int i = 0; i < nbClass; i++) {
            lseries.add(new XYSeries(clsAttribute.value(i), false));
        }
    }
    dataset.removeAllSeries();

    /**
     * Initialize filtered series
     */
    final List<Instances> filteredInstances = new ArrayList<Instances>();
    for (int i = 0; i < lseries.size(); i++) {
        filteredInstances.add(new Instances(collapsedInstances, 0));
    }

    final Map<Tuple<Integer, Integer>, Integer> correspondanceMap = new HashMap<Tuple<Integer, Integer>, Integer>();
    for (int i = 0; i < collapsedInstances.numInstances(); i++) {
        final Instance oInst = collapsedInstances.instance(i);
        int indexOfSerie = 0;
        if (oInst.classIndex() != -1) {
            if (distMdsRes.isCollapsed()) {
                indexOfSerie = getStrongestClass(i, distMdsRes);
            } else {
                indexOfSerie = (int) oInst.value(oInst.classAttribute());
            }
        }
        lseries.get(indexOfSerie).add(coordinates.get(i, 0), coordinates.get(i, 1));

        filteredInstances.get(indexOfSerie).add(oInst);
        if (distMdsRes.isCollapsed()) {
            correspondanceMap.put(new Tuple<Integer, Integer>(indexOfSerie,
                    filteredInstances.get(indexOfSerie).numInstances() - 1), i);
        }
    }

    final List<Paint> colors = new ArrayList<Paint>();

    for (final XYSeries series : lseries) {
        dataset.addSeries(series);
    }

    if (distMdsRes.isCollapsed()) {
        final XYLineAndShapeRenderer xyRenderer = new XYLineAndShapeRenderer(false, true) {
            private static final long serialVersionUID = -6019883886470934528L;

            @Override
            public void drawItem(Graphics2D g2, XYItemRendererState state, java.awt.geom.Rectangle2D dataArea,
                    PlotRenderingInfo info, XYPlot plot, ValueAxis domainAxis, ValueAxis rangeAxis,
                    XYDataset dataset, int series, int item, CrosshairState crosshairState, int pass) {

                if (distMdsRes.isCollapsed()) {

                    final Integer centroidIndex = correspondanceMap
                            .get(new Tuple<Integer, Integer>(series, item));
                    final Instances cluster = distMdsRes.getCentroidMap().getClusters().get(centroidIndex);
                    int size = cluster.size();

                    final int shapeSize = (int) (MAX_POINT_SIZE * size / fMaxSize + 1);

                    final double x1 = plot.getDataset().getX(series, item).doubleValue();
                    final double y1 = plot.getDataset().getY(series, item).doubleValue();

                    Map<Object, Integer> mapRepartition = new HashMap<Object, Integer>();
                    mapRepartition.put("No class", size);
                    if (cluster.classIndex() != -1) {
                        mapRepartition = WekaDataStatsUtil.getClassRepartition(cluster);
                    }

                    final RectangleEdge xAxisLocation = plot.getDomainAxisEdge();
                    final RectangleEdge yAxisLocation = plot.getRangeAxisEdge();
                    final double fx = domainAxis.valueToJava2D(x1, dataArea, xAxisLocation);
                    final double fy = rangeAxis.valueToJava2D(y1, dataArea, yAxisLocation);

                    setSeriesShape(series,
                            new Ellipse2D.Double(-shapeSize / 2, -shapeSize / 2, shapeSize, shapeSize));

                    super.drawItem(g2, state, dataArea, info, plot, domainAxis, rangeAxis, dataset, series,
                            item, crosshairState, pass);

                    //Draw pie
                    if (ENABLE_PIE_SHART) {
                        createPieChart(g2, (int) (fx - shapeSize / 2), (int) (fy - shapeSize / 2), shapeSize,
                                mapRepartition, size, colors);
                    }

                } else {

                    super.drawItem(g2, state, dataArea, info, plot, domainAxis, rangeAxis, dataset, series,
                            item, crosshairState, pass);

                }

            }

        };

        xyPlot.setRenderer(xyRenderer);
    }

    final XYToolTipGenerator gen = new XYToolTipGenerator() {
        @Override
        public String generateToolTip(XYDataset dataset, int series, int item) {
            if (distMdsRes.isCollapsed()) {
                final StringBuilder res = new StringBuilder("<html>");
                final Integer centroidIndex = correspondanceMap.get(new Tuple<Integer, Integer>(series, item));
                final Instance centroid = distMdsRes.getCentroidMap().getCentroids().get(centroidIndex);
                final Instances cluster = distMdsRes.getCentroidMap().getClusters().get(centroidIndex);

                //Set same class index for cluster than for original instances
                //System.out.println("Cluster index = "  + cluster.classIndex() + "/" + instances.classIndex());
                cluster.setClassIndex(instances.classIndex());

                Map<Object, Integer> mapRepartition = new HashMap<Object, Integer>();
                mapRepartition.put("No class", cluster.size());
                if (cluster.classIndex() != -1) {
                    mapRepartition = WekaDataStatsUtil.getClassRepartition(cluster);
                }
                res.append(InstanceFormatter.htmlFormat(centroid, false)).append("<br/>");
                for (final Map.Entry<Object, Integer> entry : mapRepartition.entrySet()) {
                    if (entry.getValue() != 0) {
                        res.append("Class :<b>'" + StringEscapeUtils.escapeHtml(entry.getKey().toString())
                                + "</b>' -> " + entry.getValue()).append("<br/>");
                    }
                }
                res.append("</html>");
                return res.toString();
            } else {
                //return InstanceFormatter.htmlFormat(filteredInstances.get(series).instance(item),true);
                return InstanceFormatter.shortHtmlFormat(filteredInstances.get(series).instance(item));
            }
        }
    };

    final Shape shape = new Ellipse2D.Float(0f, 0f, MAX_POINT_SIZE, MAX_POINT_SIZE);

    ((XYLineAndShapeRenderer) xyPlot.getRenderer()).setUseOutlinePaint(true);

    for (int p = 0; p < nbClass; p++) {
        xyPlot.getRenderer().setSeriesToolTipGenerator(p, gen);
        ((XYLineAndShapeRenderer) xyPlot.getRenderer()).setLegendShape(p, shape);
        xyPlot.getRenderer().setSeriesOutlinePaint(p, Color.BLACK);
    }

    for (int ii = 0; ii < nbClass; ii++) {
        colors.add(xyPlot.getRenderer().getItemPaint(ii, 0));
    }

    if (attrNameToUseAsPointTitle.length > 0) {
        final Attribute attrToUseAsPointTitle = instances.attribute(attrNameToUseAsPointTitle[0]);
        if (attrToUseAsPointTitle != null) {
            final XYItemLabelGenerator lg = new XYItemLabelGenerator() {
                @Override
                public String generateLabel(final XYDataset dataset, final int series, final int item) {
                    return filteredInstances.get(series).instance(item).stringValue(attrToUseAsPointTitle);
                }
            };
            xyPlot.getRenderer().setBaseItemLabelGenerator(lg);
            xyPlot.getRenderer().setBaseItemLabelsVisible(true);
        }
    }
}

From source file:lu.lippmann.cdb.lab.regression.Regression.java

License:Open Source License

/**
 * Main method.//from ww w.  j  a va2s . c o  m
 * @param args comamnd line arguments    
 */
public static void main(String[] args) throws Exception {

    final Instances ds = WekaDataAccessUtil.loadInstancesFromARFFOrCSVFile(new File("./samples/csv/bank.csv"));

    final int idx = 0;
    System.out.println("Regression for attribute " + ds.attribute(idx).name());
    final Regression r = new Regression(ds, idx);
    System.out.println(r.getR2());
    System.out.println(FormatterUtil.buildStringFromArrayOfDoubles(r.getCoe()));
    System.out.println(r.getCoeDesc());
    System.out.println(FormatterUtil.buildStringFromArrayOfDoubles(r.getEstims()));
}

From source file:lu.lippmann.cdb.lab.timeseries.WekaTimeSeriesSimilarityUtil.java

License:Open Source License

public static String findMostSimilarTimeSerie(final Instances testds, final Attribute attr,
        final List<String> attrNames, final boolean THREADED_NN_LOOKUP) {
    //System.out.println("findMostSimilarTimeSerie: for "+attr.name()+" in "+attrNames);

    //System.out.println("findMostSimilarTimeSerie: (before) rows -> "+testds.numInstances());
    final List<String> attrNamesWithCurrent = new ArrayList<>(attrNames);
    attrNamesWithCurrent.add(attr.name());
    final Instances reducedds = WekaDataProcessingUtil.buildDataSetWithoutRowsWithMissingValues(testds,
            attrNamesWithCurrent); // TODO: optimize remove into this method
    //System.out.println(reducedds.numAttributes());
    //System.out.println("findMostSimilarTimeSerie: (after) rows -> "+reducedds.numInstances());
    final double[] startArray1 = reducedds.attributeToDoubleArray(reducedds.attribute(attr.name()).index());
    if (startArray1.length == 0)
        System.out.println("no val for " + attr.name() + "??");

    double min = Double.POSITIVE_INFINITY;
    int idx = -1;

    if (!THREADED_NN_LOOKUP) {
        for (int i = 0; i < reducedds.numAttributes(); i++) {
            //System.out.println(i);
            if (!attrNames.contains(reducedds.attribute(i).name())) {
                //System.out.println(reducedds.attribute(i).name()+" not in "+attrNames);
                continue;
            }//from   w  w  w.  ja va  2  s.  c o m
            final double[] startArray2 = reducedds.attributeToDoubleArray(i);
            final double distance = new DynamicTimeWarping(startArray1, startArray2).getDistance();
            if (distance < min) {
                min = distance;
                idx = i;
            }
            //System.out.println("\t to "+reducedds.attribute(i).name()+": "+distance);
        }
    } else {
        final List<Callable<Object[]>> tasks = new ArrayList<Callable<Object[]>>();
        for (int i = 0; i < reducedds.numAttributes(); i++) {
            if (!attrNames.contains(reducedds.attribute(i).name()))
                continue;
            final int ii = i;
            tasks.add(new Callable<Object[]>() {
                @Override
                public Object[] call() throws Exception {
                    final double[] startArray2 = reducedds.attributeToDoubleArray(ii);
                    final double distance = new DynamicTimeWarping(startArray1, startArray2).getDistance();
                    //System.out.println("\t to "+reducedds.attribute(ii).name()+": "+distance);
                    return new Object[] { distance, ii };
                }
            });
        }

        try {
            final List<Future<Object[]>> res = EXECUTOR_SERVICE.invokeAll(tasks);
            for (final Future<Object[]> r : res) {
                final Object[] oo = r.get();
                final double distance = (Double) oo[0];
                final int curridx = (Integer) oo[1];
                if (distance < min) {
                    min = distance;
                    idx = curridx;
                }
            }
        } catch (Exception e1) {
            e1.printStackTrace();
        }
    }

    final String foundSerie = (idx != -1) ? reducedds.attribute(idx).name() : null;
    //System.out.println("found -> "+foundSerie);
    return foundSerie;
}