Search in sources :

Example 1 with Bin

use of org.knime.base.node.preproc.pmml.binner.BinnerColumnFactory.Bin in project knime-core by knime.

the class BinnerNodeModel method createColumnRearranger.

private ColumnRearranger createColumnRearranger(final DataTableSpec spec) {
    ColumnRearranger colreg = new ColumnRearranger(spec);
    for (String columnKey : m_columnToBins.keySet()) {
        Bin[] bins = m_columnToBins.get(columnKey);
        String appended = m_columnToAppended.get(columnKey);
        int columnIdx = spec.findColumnIndex(columnKey);
        if (appended == null) {
            BinnerColumnFactory binColumn = new BinnerColumnFactory(columnIdx, bins, columnKey, false);
            colreg.replace(binColumn, columnIdx);
        } else {
            BinnerColumnFactory binColumn = new BinnerColumnFactory(columnIdx, bins, appended, true);
            colreg.append(binColumn);
        }
        // set warning message when same bin names are used
        Set<String> hashBinNames = new HashSet<String>();
        for (Bin b : bins) {
            if (hashBinNames.contains(b.getBinName())) {
                setWarningMessage("Bin name \"" + b.getBinName() + "\" is used for different intervals.");
            }
            hashBinNames.add(b.getBinName());
        }
    }
    return colreg;
}
Also used : ColumnRearranger(org.knime.core.data.container.ColumnRearranger) Bin(org.knime.base.node.preproc.pmml.binner.BinnerColumnFactory.Bin) HashSet(java.util.HashSet)

Example 2 with Bin

use of org.knime.base.node.preproc.pmml.binner.BinnerColumnFactory.Bin in project knime-core by knime.

the class DBNumericBinnerNodeModel method saveSettingsTo.

/**
 * {@inheritDoc}
 */
@Override
protected void saveSettingsTo(final NodeSettingsWO settings) {
    for (String columnKey : m_columnToBins.keySet()) {
        NodeSettingsWO column = settings.addNodeSettings(columnKey);
        if (m_columnToAppended.get(columnKey) != null) {
            settings.addString(columnKey + IS_APPENDED, m_columnToAppended.get(columnKey));
        } else {
            settings.addString(columnKey + IS_APPENDED, null);
        }
        Bin[] bins = m_columnToBins.get(columnKey);
        for (int b = 0; b < bins.length; b++) {
            NodeSettingsWO bin = column.addNodeSettings(bins[b].getBinName() + "_" + b);
            bins[b].saveToSettings(bin);
        }
    }
    settings.addStringArray(NUMERIC_COLUMNS, m_columnToAppended.keySet().toArray(new String[0]));
}
Also used : NodeSettingsWO(org.knime.core.node.NodeSettingsWO) Bin(org.knime.base.node.preproc.pmml.binner.BinnerColumnFactory.Bin) NumericBin(org.knime.base.node.preproc.pmml.binner.NumericBin)

Example 3 with Bin

use of org.knime.base.node.preproc.pmml.binner.BinnerColumnFactory.Bin in project knime-core by knime.

the class BinnerNodeModel method loadValidatedSettingsFrom.

/**
 * {@inheritDoc}
 */
@Override
protected void loadValidatedSettingsFrom(final NodeSettingsRO settings) throws InvalidSettingsException {
    m_columnToBins.clear();
    m_columnToAppended.clear();
    String[] columns = settings.getStringArray(NUMERIC_COLUMNS, new String[0]);
    for (int i = 0; i < columns.length; i++) {
        NodeSettingsRO column = settings.getNodeSettings(columns[i].toString());
        Set<String> bins = column.keySet();
        Bin[] binnings = new Bin[bins.size()];
        int s = 0;
        for (String binKey : bins) {
            NodeSettingsRO bin = column.getNodeSettings(binKey);
            binnings[s] = new NumericBin(bin);
            s++;
        }
        m_columnToBins.put(columns[i], binnings);
        String appended = settings.getString(columns[i].toString() + IS_APPENDED, null);
        m_columnToAppended.put(columns[i], appended);
    }
}
Also used : Bin(org.knime.base.node.preproc.pmml.binner.BinnerColumnFactory.Bin) NodeSettingsRO(org.knime.core.node.NodeSettingsRO)

Example 4 with Bin

use of org.knime.base.node.preproc.pmml.binner.BinnerColumnFactory.Bin in project knime-core by knime.

the class BinnerNodeModel method saveSettingsTo.

/**
 * {@inheritDoc}
 */
@Override
protected void saveSettingsTo(final NodeSettingsWO settings) {
    for (String columnKey : m_columnToBins.keySet()) {
        NodeSettingsWO column = settings.addNodeSettings(columnKey);
        if (m_columnToAppended.get(columnKey) != null) {
            settings.addString(columnKey + IS_APPENDED, m_columnToAppended.get(columnKey));
        } else {
            settings.addString(columnKey + IS_APPENDED, null);
        }
        Bin[] bins = m_columnToBins.get(columnKey);
        for (int b = 0; b < bins.length; b++) {
            NodeSettingsWO bin = column.addNodeSettings(bins[b].getBinName() + "_" + b);
            bins[b].saveToSettings(bin);
        }
    }
    settings.addStringArray(NUMERIC_COLUMNS, m_columnToAppended.keySet().toArray(new String[0]));
}
Also used : NodeSettingsWO(org.knime.core.node.NodeSettingsWO) Bin(org.knime.base.node.preproc.pmml.binner.BinnerColumnFactory.Bin)

Example 5 with Bin

use of org.knime.base.node.preproc.pmml.binner.BinnerColumnFactory.Bin in project knime-core by knime.

the class PMMLBinningTranslator method createDerivedFields.

private DerivedField[] createDerivedFields() {
    int num = m_columnToBins.size();
    DerivedField[] derivedFields = new DerivedField[num];
    int i = 0;
    for (Map.Entry<String, Bin[]> entry : m_columnToBins.entrySet()) {
        Bin[] bins = entry.getValue();
        DerivedField df = DerivedField.Factory.newInstance();
        String name = entry.getKey();
        /* The field name must be retrieved before creating a new derived
             * name for this derived field as the map only contains the
             * current mapping. */
        String fieldName = m_mapper.getDerivedFieldName(name);
        Discretize dis = df.addNewDiscretize();
        dis.setField(fieldName);
        String derivedName = m_columnToAppend.get(name);
        if (derivedName != null) {
            df.setName(derivedName);
        } else {
            df.setName(m_mapper.createDerivedFieldName(name));
            df.setDisplayName(name);
        }
        df.setOptype(OPTYPE.CATEGORICAL);
        df.setDataType(DATATYPE.STRING);
        for (int j = 0; j < bins.length; j++) {
            NumericBin knimeBin = (NumericBin) bins[j];
            boolean leftOpen = knimeBin.isLeftOpen();
            boolean rightOpen = knimeBin.isRightOpen();
            double leftValue = knimeBin.getLeftValue();
            double rightValue = knimeBin.getRightValue();
            DiscretizeBin pmmlBin = dis.addNewDiscretizeBin();
            pmmlBin.setBinValue(knimeBin.getBinName());
            Interval interval = pmmlBin.addNewInterval();
            if (!Double.isInfinite(leftValue)) {
                interval.setLeftMargin(leftValue);
            }
            if (!Double.isInfinite(rightValue)) {
                interval.setRightMargin(rightValue);
            }
            if (leftOpen && rightOpen) {
                interval.setClosure(Closure.OPEN_OPEN);
            } else if (leftOpen && !rightOpen) {
                interval.setClosure(Closure.OPEN_CLOSED);
            } else if (!leftOpen && rightOpen) {
                interval.setClosure(Closure.CLOSED_OPEN);
            } else if (!leftOpen && !rightOpen) {
                interval.setClosure(Closure.CLOSED_CLOSED);
            }
        }
        derivedFields[i++] = df;
    }
    return derivedFields;
}
Also used : DiscretizeBin(org.dmg.pmml.DiscretizeBinDocument.DiscretizeBin) Bin(org.knime.base.node.preproc.pmml.binner.BinnerColumnFactory.Bin) Discretize(org.dmg.pmml.DiscretizeDocument.Discretize) DiscretizeBin(org.dmg.pmml.DiscretizeBinDocument.DiscretizeBin) DerivedField(org.dmg.pmml.DerivedFieldDocument.DerivedField) TreeMap(java.util.TreeMap) Map(java.util.Map) Interval(org.dmg.pmml.IntervalDocument.Interval)

Aggregations

Bin (org.knime.base.node.preproc.pmml.binner.BinnerColumnFactory.Bin)5 NodeSettingsWO (org.knime.core.node.NodeSettingsWO)2 HashSet (java.util.HashSet)1 Map (java.util.Map)1 TreeMap (java.util.TreeMap)1 DerivedField (org.dmg.pmml.DerivedFieldDocument.DerivedField)1 DiscretizeBin (org.dmg.pmml.DiscretizeBinDocument.DiscretizeBin)1 Discretize (org.dmg.pmml.DiscretizeDocument.Discretize)1 Interval (org.dmg.pmml.IntervalDocument.Interval)1 NumericBin (org.knime.base.node.preproc.pmml.binner.NumericBin)1 ColumnRearranger (org.knime.core.data.container.ColumnRearranger)1 NodeSettingsRO (org.knime.core.node.NodeSettingsRO)1