use of org.knime.base.node.preproc.autobinner3.AutoBinnerLearnSettings.Method in project knime-core by knime.
the class AutoBinnerLearnNodeDialogPane method saveSettingsTo.
/**
* @param settings write intervals to
* @throws InvalidSettingsException if a bin name is empty
* @see NodeDialogPane#saveSettingsTo(NodeSettingsWO)
*/
@Override
protected void saveSettingsTo(final NodeSettingsWO settings) throws InvalidSettingsException {
m_settings.setTargetColumn(m_targetCol.getIncludedColumnSet().toArray(new String[0]));
m_settings.setIncludeAll(m_targetCol.isKeepAllSelected());
Method method = m_methodFixedNumber.isSelected() ? Method.fixedNumber : Method.sampleQuantiles;
m_settings.setMethod(method);
m_settings.setBinCount(((Number) m_numBins.getValue()).intValue());
m_settings.setEqualityMethod((EqualityMethod) m_equalityMethod.getSelectedItem());
try {
List<Double> sampleQuantiles = explode(m_sampleQuantiles.getText());
double[] sq = normalizeSampleQuantiles(sampleQuantiles);
m_settings.setSampleQuantiles(sq);
} catch (NumberFormatException e) {
throw new InvalidSettingsException("Cannot parse the list of quantiles. Changes are " + "not applied.");
}
BinNaming binNaming = null;
if (m_binNamingNumbered.isSelected()) {
binNaming = BinNaming.numbered;
}
if (m_binNamingEdges.isSelected()) {
binNaming = BinNaming.edges;
}
if (m_binNamingMidpoints.isSelected()) {
binNaming = BinNaming.midpoints;
}
m_settings.setBinNaming(binNaming);
m_settings.setReplaceColumn(m_replaceColumn.isSelected());
m_settings.setIntegerBounds(m_integerBounds.isSelected());
m_settings.setAdvancedFormatting(m_advancedFormatting.isSelected());
m_settings.setOutputFormat((OutputFormat) m_outputFormat.getSelectedItem());
m_settings.setPrecision(((Number) m_precision.getValue()).intValue());
m_settings.setPrecisionMode((PrecisionMode) m_precisionMode.getSelectedItem());
m_settings.setRoundingMode((RoundingMode) m_roundingMode.getSelectedItem());
m_settings.saveSettings(settings);
}
use of org.knime.base.node.preproc.autobinner3.AutoBinnerLearnSettings.Method in project knime-core by knime.
the class AutoBinnerLearnNodeDialogPane method saveSettingsTo.
/**
* @param settings write intervals to
* @throws InvalidSettingsException if a bin name is empty
* @see NodeDialogPane#saveSettingsTo(NodeSettingsWO)
*/
@Override
protected void saveSettingsTo(final NodeSettingsWO settings) throws InvalidSettingsException {
DataColumnSpecFilterConfiguration config = AutoBinnerLearnNodeModel.createDCSFilterConfiguration();
m_filterPanel.saveConfiguration(config);
m_settings.setFilterConfiguration(config);
Method method = m_methodFixedNumber.isSelected() ? Method.fixedNumber : Method.sampleQuantiles;
m_settings.setMethod(method);
m_settings.setBinCount(((Number) m_numBins.getValue()).intValue());
m_settings.setEqualityMethod((EqualityMethod) m_equalityMethod.getSelectedItem());
try {
List<Double> sampleQuantiles = explode(m_sampleQuantiles.getText());
double[] sq = normalizeSampleQuantiles(sampleQuantiles);
m_settings.setSampleQuantiles(sq);
} catch (NumberFormatException e) {
throw new InvalidSettingsException("Cannot parse the list of quantiles. Changes are " + "not applied.");
}
BinNaming binNaming = null;
if (m_binNamingNumbered.isSelected()) {
binNaming = BinNaming.numbered;
}
if (m_binNamingEdges.isSelected()) {
binNaming = BinNaming.edges;
}
if (m_binNamingMidpoints.isSelected()) {
binNaming = BinNaming.midpoints;
}
m_settings.setBinNaming(binNaming);
m_settings.setReplaceColumn(m_replaceColumn.isSelected());
m_settings.setIntegerBounds(m_integerBounds.isSelected());
m_settings.setAdvancedFormatting(m_advancedFormatting.isSelected());
m_settings.setOutputFormat((OutputFormat) m_outputFormat.getSelectedItem());
m_settings.setPrecision(((Number) m_precision.getValue()).intValue());
m_settings.setPrecisionMode((PrecisionMode) m_precisionMode.getSelectedItem());
m_settings.setRoundingMode((RoundingMode) m_roundingMode.getSelectedItem());
m_settings.saveSettings(settings);
}
use of org.knime.base.node.preproc.autobinner3.AutoBinnerLearnSettings.Method in project knime-core by knime.
the class AutoBinnerLearnNodeDialogPane method createMethodUIControls.
private JPanel createMethodUIControls(final boolean supportsQuantile) {
JPanel p = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.NORTHWEST;
c.insets = new Insets(2, 2, 2, 2);
c.weightx = 0;
c.gridy = 0;
c.gridx = 0;
c.gridwidth = GridBagConstraints.REMAINDER;
m_methodFixedNumber = new JRadioButton("Fixed number of bins");
m_methodFixedNumber.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
m_numBins.setEnabled(m_methodFixedNumber.isSelected());
m_equalityMethod.setEnabled(m_methodFixedNumber.isSelected());
m_sampleQuantiles.setEnabled(!m_methodFixedNumber.isSelected());
}
});
if (supportsQuantile) {
p.add(m_methodFixedNumber, c);
}
c.gridy++;
// JPanel numBinsPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 0));
JPanel numBinsPanel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(2, 2, 2, 2);
gbc.anchor = GridBagConstraints.NORTHWEST;
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 0;
gbc.weighty = 0;
gbc.gridx = 0;
gbc.gridy = 0;
numBinsPanel.add(new JLabel("Number of bins:"), gbc);
gbc.gridx++;
m_numBins = new JSpinner(new SpinnerNumberModel(5, 1, Integer.MAX_VALUE, 1));
numBinsPanel.add(m_numBins, gbc);
m_equalityMethod = new JComboBox<EqualityMethod>(EqualityMethod.values());
if (supportsQuantile) {
gbc.weightx = 1;
gbc.gridx++;
numBinsPanel.add(new JLabel(), gbc);
gbc.weightx = 0;
gbc.gridx = 0;
gbc.gridy++;
numBinsPanel.add(new JLabel("Equal:"), gbc);
gbc.gridx++;
numBinsPanel.add(m_equalityMethod, gbc);
numBinsPanel.setBorder(BorderFactory.createEmptyBorder(0, 17, 0, 0));
}
p.add(numBinsPanel, c);
c.gridy++;
c.gridx = 0;
c.gridwidth = GridBagConstraints.REMAINDER;
m_methodSampleQuantiles = new JRadioButton("Sample quantiles");
m_methodSampleQuantiles.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
m_numBins.setEnabled(!m_methodSampleQuantiles.isSelected());
m_equalityMethod.setEnabled(!m_methodSampleQuantiles.isSelected());
m_sampleQuantiles.setEnabled(m_methodSampleQuantiles.isSelected());
}
});
if (supportsQuantile) {
p.add(m_methodSampleQuantiles, c);
}
c.gridy++;
JPanel quantilesPanel = new JPanel(new GridBagLayout());
int gridy = c.gridy;
c.gridy = 0;
c.gridwidth = 1;
quantilesPanel.add(new JLabel("Quantiles (comma separated):"), c);
c.gridx++;
c.gridwidth = 1;
c.weightx = 1;
m_sampleQuantiles = new JTextField();
quantilesPanel.add(m_sampleQuantiles, c);
quantilesPanel.setBorder(BorderFactory.createEmptyBorder(0, 17, 0, 0));
c.gridy = gridy;
c.gridx = 0;
c.gridwidth = 1;
if (supportsQuantile) {
p.add(quantilesPanel, c);
}
ButtonGroup method = new ButtonGroup();
method.add(m_methodFixedNumber);
method.add(m_methodSampleQuantiles);
if (supportsQuantile) {
p.setBorder(BorderFactory.createTitledBorder("Binning Method"));
}
return p;
}
use of org.knime.base.node.preproc.autobinner3.AutoBinnerLearnSettings.Method in project knime-core by knime.
the class DBAutoBinner method createPMMLPrepocDiscretize.
/**
* This method creates a {@link PMMLPreprocDiscretize} object and is used in {@link DBAutoBinnerNodeModel}
*
* @param cp {@link CredentialsProvider}
* @param connectionSettings {@link DatabaseQueryConnectionSettings}
* @param dataTableSpec DataTableSpec of incoming {@link BufferedDataTable}
* @return a {@link PMMLPreprocDiscretize} object containing required parameters for binning operation
* @throws SQLException
*/
public PMMLPreprocDiscretize createPMMLPrepocDiscretize(final CredentialsProvider cp, final DatabaseQueryConnectionSettings connectionSettings, final DataTableSpec dataTableSpec) throws SQLException {
final String query = connectionSettings.getQuery();
final StatementManipulator statementManipulator = connectionSettings.getUtility().getStatementManipulator();
AutoBinnerLearnSettings settings = getSettings();
String[] includeCols = settings.getFilterConfiguration().applyTo(dataTableSpec).getIncludes();
if (includeCols.length == 0) {
return createDisretizeOp(new LinkedHashMap<>());
}
StringBuilder minMaxQuery = new StringBuilder();
minMaxQuery.append("SELECT");
for (int i = 0; i < includeCols.length; i++) {
minMaxQuery.append(" MAX(" + statementManipulator.quoteIdentifier(includeCols[i]) + ") " + statementManipulator.quoteIdentifier("max_" + includeCols[i]) + ",");
minMaxQuery.append(" MIN(" + statementManipulator.quoteIdentifier(includeCols[i]) + ") " + statementManipulator.quoteIdentifier("min_" + includeCols[i]));
if (i < includeCols.length - 1) {
minMaxQuery.append(",");
}
}
minMaxQuery.append(" FROM (" + query + ") T");
HashMap<String, Pair<Double, Double>> maxAndMin = connectionSettings.execute(cp, conn -> {
double max = 0;
double min = 0;
HashMap<String, Pair<Double, Double>> maxMinMap = new LinkedHashMap<>();
try (ResultSet valueSet = conn.createStatement().executeQuery(minMaxQuery.toString())) {
while (valueSet.next()) {
for (int i = 0; i < includeCols.length; i++) {
max = valueSet.getDouble("max_" + includeCols[i]);
min = valueSet.getDouble("min_" + includeCols[i]);
maxMinMap.put(includeCols[i], new Pair<Double, Double>(min, max));
}
}
}
return maxMinMap;
});
int number = settings.getBinCount();
Map<String, double[]> edgesMap = new LinkedHashMap<>();
for (Entry<String, Pair<Double, Double>> entry : maxAndMin.entrySet()) {
double[] edges = AutoBinner.calculateBounds(number, entry.getValue().getFirst(), entry.getValue().getSecond());
if (settings.getIntegerBounds()) {
edges = AutoBinner.toIntegerBoundaries(edges);
}
edgesMap.put(entry.getKey(), edges);
}
return createDisretizeOp(edgesMap);
}
Aggregations