use of org.knime.core.node.port.pmml.PMMLPortObjectSpecCreator in project knime-core by knime.
the class StringToNumberNodeModel method execute.
/**
* {@inheritDoc}
*/
@Override
protected PortObject[] execute(final PortObject[] inObjects, final ExecutionContext exec) throws Exception {
StringBuilder warnings = new StringBuilder();
BufferedDataTable inData = (BufferedDataTable) inObjects[0];
DataTableSpec inSpec = inData.getDataTableSpec();
// find indices to work on.
List<String> inclcols = m_inclCols.getIncludeList();
BufferedDataTable resultTable = null;
if (inclcols.size() == 0) {
// nothing to convert, let's return the input table.
resultTable = inData;
setWarningMessage("No columns selected," + " returning input DataTable.");
} else {
int[] indices = findColumnIndices(inSpec);
ConverterFactory converterFac = new ConverterFactory(indices, inSpec, m_parseType);
ColumnRearranger colre = new ColumnRearranger(inSpec);
colre.replace(converterFac, indices);
resultTable = exec.createColumnRearrangeTable(inData, colre, exec);
String errorMessage = converterFac.getErrorMessage();
if (errorMessage.length() > 0) {
warnings.append("Problems occurred, see Console messages.\n");
}
if (warnings.length() > 0) {
LOGGER.warn(errorMessage);
setWarningMessage(warnings.toString());
}
}
// the optional PMML in port (can be null)
PMMLPortObject inPMMLPort = m_pmmlInEnabled ? (PMMLPortObject) inObjects[1] : null;
PMMLStringConversionTranslator trans = new PMMLStringConversionTranslator(m_inclCols.getIncludeList(), m_parseType, new DerivedFieldMapper(inPMMLPort));
PMMLPortObjectSpecCreator creator = new PMMLPortObjectSpecCreator(inPMMLPort, inSpec);
PMMLPortObject outPMMLPort = new PMMLPortObject(creator.createSpec(), inPMMLPort, inSpec);
outPMMLPort.addGlobalTransformations(trans.exportToTransDict());
return new PortObject[] { resultTable, outPMMLPort };
}
use of org.knime.core.node.port.pmml.PMMLPortObjectSpecCreator in project knime-core by knime.
the class PMMLImport method init.
/**
* @param pmmlDoc
*/
private void init(final PMMLDocument pmmlDoc) {
PMMLDataDictionaryTranslator dictTrans = new PMMLDataDictionaryTranslator();
dictTrans.initializeFrom(pmmlDoc);
DataTableSpec tableSpec = dictTrans.getDataTableSpec();
List<String> activeDerivedFields = dictTrans.getActiveDerivedFields();
PMMLPortObjectSpecCreator specCreator = new PMMLPortObjectSpecCreator(tableSpec);
PMMLMiningSchemaTranslator miningTrans = new PMMLMiningSchemaTranslator();
miningTrans.initializeFrom(pmmlDoc);
Set<String> activeFields = new LinkedHashSet<String>();
List<String> miningFields = miningTrans.getActiveFields();
/* If we have a model all active fields of the data dictionary
* are passed through the mining schema. */
activeFields.addAll(miningFields);
activeFields.addAll(activeDerivedFields);
specCreator.setLearningColsNames(new LinkedList<String>(activeFields));
specCreator.addPreprocColNames(activeDerivedFields);
specCreator.setTargetColsNames(miningTrans.getTargetFields());
PMMLPortObjectSpec portObjectSpec = specCreator.createSpec();
m_portObject = new PMMLPortObject(portObjectSpec, pmmlDoc);
}
use of org.knime.core.node.port.pmml.PMMLPortObjectSpecCreator in project knime-core by knime.
the class PMMLReaderNodeModel method createPMMLOutSpec.
/**
* @param inModelSpec the spec of the optional PMML in port
* @param parsedSpec the spec of the parsed PMML document
* @return the merged {@link PMMLPortObjectSpec}
*/
private PMMLPortObjectSpec createPMMLOutSpec(final PMMLPortObjectSpec inModelSpec, final PMMLPortObjectSpec parsedSpec) throws InvalidSettingsException {
PMMLPortObjectSpec outSpec = parsedSpec;
if (inModelSpec != null) {
List<String> preprocCols = inModelSpec.getPreprocessingFields();
for (String colName : preprocCols) {
if (!parsedSpec.getActiveFields().contains(colName)) {
throw new InvalidSettingsException("Preprocessing column " + colName + " is not contained in the read PMML file.");
}
}
PMMLPortObjectSpecCreator creator = new PMMLPortObjectSpecCreator(parsedSpec);
creator.addPreprocColNames(preprocCols);
outSpec = creator.createSpec();
}
return outSpec;
}
use of org.knime.core.node.port.pmml.PMMLPortObjectSpecCreator in project knime-core by knime.
the class DBNumericBinnerNodeModel method createPMMLPortObject.
private PMMLPortObject createPMMLPortObject(final DataTableSpec inDataTableSpec, final DataTableSpec outDataTableSpec) {
PMMLPortObjectSpec initPMMLSpec = new PMMLPortObjectSpecCreator(outDataTableSpec).createSpec();
PMMLPortObject initPMMLPortObject = new PMMLPortObject(initPMMLSpec, null, outDataTableSpec);
PMMLBinningTranslator pmmlBinningTranslator = new PMMLBinningTranslator(m_columnToBins, m_columnToAppended, new DerivedFieldMapper(initPMMLPortObject));
PMMLPortObject outPMMLPortObject = new PMMLPortObject(initPMMLSpec, initPMMLPortObject, inDataTableSpec);
outPMMLPortObject.addGlobalTransformations(pmmlBinningTranslator.exportToTransDict());
return outPMMLPortObject;
}
use of org.knime.core.node.port.pmml.PMMLPortObjectSpecCreator in project knime-core by knime.
the class DBAutoBinner method translate.
/**
* This method translates a {@link PMMLPreprocDiscretize} object into {@link PMMLPortObject}.
*
* @param pmmlDiscretize {@link PMMLPreprocDiscretize} object
* @param dataTableSpec {@link DataTableSpec} if incoming {@link BufferedDataTable}
* @return a {@link PMMLPortObject} containing required parameters for binning operation
*/
public static PMMLPortObject translate(final PMMLPreprocDiscretize pmmlDiscretize, final DataTableSpec dataTableSpec) {
final Map<String, Bin[]> columnToBins = new HashMap<>();
final Map<String, String> columnToAppend = new HashMap<>();
List<String> replacedColumnNames = pmmlDiscretize.getConfiguration().getNames();
for (String replacedColumnName : replacedColumnNames) {
PMMLDiscretize discretize = pmmlDiscretize.getConfiguration().getDiscretize(replacedColumnName);
List<PMMLDiscretizeBin> bins = discretize.getBins();
String originalColumnName = discretize.getField();
if (replacedColumnName.equals(originalColumnName)) {
// wenn replaced, dann nicht anhängen
columnToAppend.put(originalColumnName, null);
} else {
// nicht replaced -> anhängen
columnToAppend.put(originalColumnName, replacedColumnName);
}
NumericBin[] numericBin = new NumericBin[bins.size()];
int counter = 0;
for (PMMLDiscretizeBin bin : bins) {
String binName = bin.getBinValue();
List<PMMLInterval> intervals = bin.getIntervals();
boolean leftOpen = false;
boolean rightOpen = false;
double leftMargin = 0;
double rightMargin = 0;
// always returns only one interval
for (PMMLInterval interval : intervals) {
Closure closure = interval.getClosure();
switch(closure) {
case openClosed:
leftOpen = true;
rightOpen = false;
break;
case openOpen:
leftOpen = true;
rightOpen = true;
break;
case closedOpen:
leftOpen = false;
rightOpen = true;
case closedClosed:
leftOpen = false;
rightOpen = false;
break;
default:
leftOpen = true;
rightOpen = false;
break;
}
leftMargin = interval.getLeftMargin();
rightMargin = interval.getRightMargin();
}
numericBin[counter] = new NumericBin(binName, leftOpen, leftMargin, rightOpen, rightMargin);
counter++;
}
columnToBins.put(originalColumnName, numericBin);
}
// ColumnRearranger createColReg = createColReg(dataTableSpec, columnToBins, columnToAppended);
DataTableSpec newDataTableSpec = createNewDataTableSpec(dataTableSpec, columnToAppend);
PMMLPortObjectSpecCreator pmmlSpecCreator = new PMMLPortObjectSpecCreator(newDataTableSpec);
PMMLPortObject pmmlPortObject = new PMMLPortObject(pmmlSpecCreator.createSpec(), null, newDataTableSpec);
PMMLBinningTranslator trans = new PMMLBinningTranslator(columnToBins, columnToAppend, new DerivedFieldMapper(pmmlPortObject));
TransformationDictionary exportToTransDict = trans.exportToTransDict();
pmmlPortObject.addGlobalTransformations(exportToTransDict);
return pmmlPortObject;
}
Aggregations