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;
}
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]));
}
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);
}
}
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]));
}
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;
}
Aggregations