diff --git a/canvas_modules/harness/src/client/App.js b/canvas_modules/harness/src/client/App.js
index f4cc99ac82..4321d7b8d9 100644
--- a/canvas_modules/harness/src/client/App.js
+++ b/canvas_modules/harness/src/client/App.js
@@ -46,6 +46,7 @@ import FlowsCanvas from "./components/custom-canvases/flows/flows-canvas";
import TablesCanvas from "./components/custom-canvases/tables/tables-canvas";
import StagesCanvas from "./components/custom-canvases/stages/stages-canvas";
import StagesCardNodeCanvas from "./components/custom-canvases/stages-card-node/stages-card-node-canvas";
+import PromptCanvas from "./components/custom-canvases/prompt/prompt-canvas";
import LogicCanvas from "./components/custom-canvases/logic/logic-canvas";
import ReadOnlyCanvas from "./components/custom-canvases/read-only/read-only-canvas";
import ProgressCanvas from "./components/custom-canvases/progress/progress-canvas";
@@ -103,6 +104,7 @@ import {
EXAMPLE_APP_FLOWS,
EXAMPLE_APP_STAGES,
EXAMPLE_APP_STAGES_CARD_NODE,
+ EXAMPLE_APP_PROMPT,
EXAMPLE_APP_EXPLAIN,
EXAMPLE_APP_EXPLAIN2,
EXAMPLE_APP_STREAMS,
@@ -2788,6 +2790,13 @@ class App extends React.Component {
config={commonCanvasConfig}
/>
);
+ } else if (this.state.selectedExampleApp === EXAMPLE_APP_PROMPT) {
+ firstCanvas = (
+
+ );
} else if (this.state.selectedExampleApp === EXAMPLE_APP_LOGIC) {
firstCanvas = (
)
+ });
+ }
+ return defaultMenu;
+ }
+
+ addNodeHandler(nodeTemplate) {
+ const promptNode = this.canvasController.getNode(this.promptNodeId);
+ this.canvasController.deleteNode(this.promptNodeId);
+ this.canvasController.deleteLink("link_to_prompt");
+
+ const newNode = this.canvasController.createNode({
+ nodeTemplate: nodeTemplate,
+ offsetX: promptNode.x_pos,
+ offsetY: promptNode.y_pos
+ });
+ this.canvasController.addNode(newNode);
+
+ const linksToAdd = this.canvasController.createNodeLinks({
+ type: "nodeLink",
+ nodes: [{ id: this.sourceNodeId }],
+ targetNodes: [{ id: newNode.id }]
+ });
+
+ this.canvasController.addLinks(linksToAdd);
+
+ }
+
+ addPromptNode(sourceNode) {
+ this.sourceNodeId = sourceNode.id;
+
+ const template = Template;
+ template.app_data.prompt_data = {
+ addNodeCallback: this.addNodeHandler.bind(this)
+ };
+ const newNode = this.canvasController.createNode({
+ nodeTemplate: template,
+ offsetX: sourceNode.x_pos + 200, // Position prompt 200px to right of source node
+ offsetY: sourceNode.y_pos
+ });
+
+ // Make sure prompt doesn't overlap other nodes.
+ this.adjustNodePosition(newNode, 100);
+
+ // Save the ID of the prompt node for removal, later
+ this.promptNodeId = newNode.id;
+
+ // Add the prompt node to the canvas with a link
+ this.canvasController.addNode(newNode);
+ const linksToAdd = this.canvasController.createNodeLinks({
+ id: "link_to_prompt",
+ type: "nodeLink",
+ nodes: [{ id: sourceNode.id }],
+ targetNodes: [{ id: this.promptNodeId }]
+ });
+
+ this.canvasController.addLinks(linksToAdd);
+ }
+
+ adjustNodePosition(node, yInc) {
+ let overlapNode = true;
+ while (overlapNode) {
+ overlapNode = this.canvasController.getNodes().find((n) => n.x_pos === node.x_pos && n.y_pos === node.y_pos);
+ if (overlapNode) {
+ node.y_pos += yInc;
+ }
+ }
+ }
+
+ render() {
+ const config = this.getConfig();
+
+ return (
+
+ );
+ }
+}
+
+PromptCanvas.propTypes = {
+ config: PropTypes.object
+};
diff --git a/canvas_modules/harness/src/client/components/custom-canvases/prompt/prompt-flow.json b/canvas_modules/harness/src/client/components/custom-canvases/prompt/prompt-flow.json
new file mode 100644
index 0000000000..04e06b428e
--- /dev/null
+++ b/canvas_modules/harness/src/client/components/custom-canvases/prompt/prompt-flow.json
@@ -0,0 +1,74 @@
+{
+ "doc_type": "pipeline",
+ "version": "3.0",
+ "json_schema": "https://api.dataplatform.ibm.com/schemas/common-pipeline/pipeline-flow/pipeline-flow-v3-schema.json",
+ "id": "prompt-pipeline-flow",
+ "primary_pipeline": "primary-prompt-pipeline",
+ "pipelines": [
+ {
+ "id": "primary-prompt-pipeline",
+ "nodes": [
+ {
+ "id": "1af18594-86db-4b21-8f40-16afad1ece0b",
+ "type": "execution_node",
+ "op": "type",
+ "app_data": {
+ "ui_data": {
+ "label": "Type",
+ "image": "images/custom-canvases/flows/palette/icons/type.svg",
+ "x_pos": 54,
+ "y_pos": 250,
+ "description": "Type node."
+ }
+ },
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "app_data": {
+ "ui_data": {
+ "comments": [
+ {
+ "id": "0b123469-7d21-43a5-ae84-cbc999990033",
+ "x_pos": 54,
+ "y_pos": 43.2,
+ "width": 288,
+ "height": 158.4,
+ "class_name": "d3-comment-rect bkg-col-green-20",
+ "content": "### Prompt Canvas\n\nThis canvas provides a method to add new nodes to the flow with a prompt. To do this:\n1. Hover over the Type node\n2. In the context toolbar, click the \"Add node with prompt\" button\n3. Select a node type from the prompt. ",
+ "associated_id_refs": []
+ }
+ ]
+ }
+ },
+ "runtime_ref": ""
+ }
+ ],
+ "schemas": []
+}
diff --git a/canvas_modules/harness/src/client/components/custom-canvases/prompt/prompt-palette.json b/canvas_modules/harness/src/client/components/custom-canvases/prompt/prompt-palette.json
new file mode 100644
index 0000000000..bcccf0e658
--- /dev/null
+++ b/canvas_modules/harness/src/client/components/custom-canvases/prompt/prompt-palette.json
@@ -0,0 +1,5344 @@
+{
+ "version": "3.0",
+ "categories": [
+ {
+ "label": "Import",
+ "description": "This category defines data importers",
+ "image": "images/custom-canvases/flows/palette/icons/palette-import.svg",
+ "id": "import",
+ "node_types": [
+ {
+ "id": "",
+ "type": "binding",
+ "op": "dataassetimport",
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Data Asset",
+ "description": "Pull in data from remote data sources using connections, or pull in data from a file.",
+ "image": "images/custom-canvases/flows/palette/icons/dataassetimport.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "userinput",
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "User Input",
+ "description": "Easily create synthetic data—either from scratch or by altering existing data.",
+ "image": "images/custom-canvases/flows/palette/icons/userinput.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "simgen",
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Sim Gen",
+ "description": "Generate simulated data automatically or with user-specified statistical distributions.",
+ "image": "images/custom-canvases/flows/palette/icons/simgen.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ }
+ ]
+ },
+ {
+ "label": "Record Operations",
+ "description": "This category defines operations on records",
+ "image": "images/custom-canvases/flows/palette/icons/palette-record-ops.svg",
+ "id": "recordOp",
+ "node_types": [
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "select",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Select",
+ "description": "Select or discard a subset of records from the data stream based on a specific condition.",
+ "image": "images/custom-canvases/flows/palette/icons/select.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "sample",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Sample",
+ "description": "Select a subset of records for analysis, or specify a proportion of records to discard.",
+ "image": "images/custom-canvases/flows/palette/icons/sample.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "sort",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Sort",
+ "description": "Sort records into ascending or descending order based on the values of one or more fields.",
+ "image": "images/custom-canvases/flows/palette/icons/sort.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "balance",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Balance",
+ "description": "Correct imbalances in datasets so they conform to specified test criteria.",
+ "image": "images/custom-canvases/flows/palette/icons/balance.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "distinct",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Distinct",
+ "description": "Find or remove duplicate records in your data, or create a single, composite record from a group of duplicate records.",
+ "image": "images/custom-canvases/flows/palette/icons/distinct.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "aggregate",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Aggregate",
+ "description": "Replace a sequence of input records with summary, aggregated output records.",
+ "image": "images/custom-canvases/flows/palette/icons/aggregate.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "merge",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Merge",
+ "description": "Take multiple input records and create a single output record containing all or some of the input fields.",
+ "image": "images/custom-canvases/flows/palette/icons/merge.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "append",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Append",
+ "description": "Combine datasets with similar structures but different data.",
+ "image": "images/custom-canvases/flows/palette/icons/append.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "derive_stb",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Space-Time-Boxes",
+ "description": "An STB is an alphanumeric string that represents a regularly shaped region of space and time.",
+ "image": "images/custom-canvases/flows/palette/icons/spacetimebox.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "ts_streaming",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Streaming TS",
+ "description": "Build and score time series models in one step.",
+ "image": "images/custom-canvases/flows/palette/icons/ts_streaming.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "smote",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "SMOTE",
+ "description": "To perform over-sampling using SMOTE - Synthetic Minority Over-sampling Technique",
+ "image": "images/custom-canvases/flows/palette/icons/smote.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "rfmaggregate",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "RFM Aggregate",
+ "description": "Take historical transaction data, strip away unused data, and combine all remaining transaction data into one row.",
+ "image": "images/custom-canvases/flows/palette/icons/rfmaggregate.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ }
+ ]
+ },
+ {
+ "label": "Field Operations",
+ "description": "This category defines operations on fields",
+ "image": "images/custom-canvases/flows/palette/icons/palette-field-ops.svg",
+ "id": "fieldOp",
+ "node_types": [
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "autodataprep",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Auto Data Prep",
+ "description": "Prepare your data for model building quickly and easily, without needing prior knowledge of the statistical concepts involved.",
+ "image": "images/custom-canvases/flows/palette/icons/autodataprep.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "type",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Type",
+ "description": "Specify field metadata and properties that are invaluable to modeling.",
+ "image": "images/custom-canvases/flows/palette/icons/type.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "filter",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Filter",
+ "description": "Rename or exclude fields at any point in a flow.",
+ "image": "images/custom-canvases/flows/palette/icons/filter.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "derive",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Derive",
+ "description": "Modify data values or create new fields from one or more existing fields.",
+ "image": "images/custom-canvases/flows/palette/icons/derive.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "filler",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Filler",
+ "description": "Replace field values and change storage. Often used with a Type node to replace missing values.",
+ "image": "images/custom-canvases/flows/palette/icons/filler.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "reclassify",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Reclassify",
+ "description": "Transform one set of categorical values to another. Useful for collapsing categories or regrouping data for analysis.",
+ "image": "images/custom-canvases/flows/palette/icons/reclassify.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "binning",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Binning",
+ "description": "Automatically create new nominal fields based on the values of one or more existing continuous fields.",
+ "image": "images/custom-canvases/flows/palette/icons/binning.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "rfmanalysis",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "RFM Analysis",
+ "description": "Examine recent customer purchases (recency), how often they purchased (frequency), and how much they spent (monetary).",
+ "image": "images/custom-canvases/flows/palette/icons/rfmanalysis.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "ensemble",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Ensemble",
+ "description": "Combines two or more model nuggets to obtain more accurate predictions than can be gained from any of the individual models.",
+ "image": "images/custom-canvases/flows/palette/icons/ensemble.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "partition",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Partition",
+ "description": "Generate a partition field that splits data into separate subsets or samples for the training, testing, and validation stages of model building.",
+ "image": "images/custom-canvases/flows/palette/icons/partition.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "settoflag",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "SetToFlag",
+ "description": "Derive flag fields based on the categorical values defined for one or more nominal fields.",
+ "image": "images/custom-canvases/flows/palette/icons/settoflag.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "restructure",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Restructure",
+ "description": "Generate multiple fields based on the values of a nominal or flag field.",
+ "image": "images/custom-canvases/flows/palette/icons/restructure.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "transpose",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Transpose",
+ "description": "Swap the data in rows and columns so that fields become records and records become fields.",
+ "image": "images/custom-canvases/flows/palette/icons/transpose.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "reorder",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Field Reorder",
+ "description": "Define the natural order for displaying fields downstream.",
+ "image": "images/custom-canvases/flows/palette/icons/fieldreorder.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "history",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "History",
+ "description": "Create new fields containing data from fields in previous records (most often used for sequential data, such as time series data).",
+ "image": "images/custom-canvases/flows/palette/icons/history.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "astimeintervals",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Time Intervals",
+ "description": "Specify intervals and derive a new time field for estimating or forecasting.",
+ "image": "images/custom-canvases/flows/palette/icons/astimeintervals.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "anonymize",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Anonymize",
+ "description": "Disguise field names, field values, or both when working with data that's to be included in a model downstream of the node.",
+ "image": "images/custom-canvases/flows/palette/icons/anonymize.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "reproject",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Reproject",
+ "description": "Change the coordinate system for fields that can't be reprojected automatically.",
+ "image": "images/custom-canvases/flows/palette/icons/reproject.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ }
+ ]
+ },
+ {
+ "label": "Graphs",
+ "description": "This category defines chart builders",
+ "image": "images/custom-canvases/flows/palette/icons/palette-charts.svg",
+ "id": "graph",
+ "node_types": [
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "dvcharts",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Charts",
+ "description": "Launch the chart builder and create chart definitions to save with your flow.",
+ "image": "images/custom-canvases/flows/palette/icons/dvcharts.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "plot",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Plot",
+ "description": "Shows the relationship between numeric fields.",
+ "image": "images/custom-canvases/flows/palette/icons/plot.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "multiplot",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Multiplot",
+ "description": "A special type of plot that displays multiple Y fields over a single X field.",
+ "image": "images/custom-canvases/flows/palette/icons/multiplot.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "timeplot",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Time plot",
+ "description": "View one or more time series plotted over time.",
+ "image": "images/custom-canvases/flows/palette/icons/timeplot.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "distribution",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Distribution",
+ "description": "Shows the occurrence of symbolic (non-numeric) values, such as mortgage type or gender, in a dataset.",
+ "image": "images/custom-canvases/flows/palette/icons/distribution.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "histogram",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Histogram",
+ "description": "Shows the occurrence of values for numeric fields.",
+ "image": "images/custom-canvases/flows/palette/icons/histogram.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "collection",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Collection",
+ "description": "Shows the distribution of values for one numeric field relative to the values of another.",
+ "image": "images/custom-canvases/flows/palette/icons/collection.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "web",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Web",
+ "description": "Shows the strength of relationships between values of two or more symbolic fields.",
+ "image": "images/custom-canvases/flows/palette/icons/web.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "evaluation",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Evaluation",
+ "description": "Evaluate and compare predictive models to choose the best model for your application.",
+ "image": "images/custom-canvases/flows/palette/icons/evaluation.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ }
+ ]
+ },
+ {
+ "label": "Modeling",
+ "description": "This category defines model builders",
+ "image": "images/custom-canvases/flows/palette/icons/palette-modeling.svg",
+ "id": "modeling",
+ "node_types": [
+ {
+ "id": "",
+ "type": "binding",
+ "op": "autoclassifier",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Auto Classifier",
+ "description": "Estimates and compares models to try out a variety of approaches for nominal and binary data.",
+ "image": "images/custom-canvases/flows/palette/icons/autoclassifier.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "autonumeric",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Auto Numeric",
+ "description": "Estimates and compares models to try out a variety of approaches for a continuous numeric range.",
+ "image": "images/custom-canvases/flows/palette/icons/autonumeric.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "autocluster",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Auto Cluster",
+ "description": "Estimates and compares clustering models that identify groups of records with similar characteristics.",
+ "image": "images/custom-canvases/flows/palette/icons/autocluster.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "bayesnet",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Bayes Net",
+ "description": "Build a probability model to establish the likelihood of occurrences by using seemingly unlinked attributes.",
+ "image": "images/custom-canvases/flows/palette/icons/bayesnet.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "c50",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "C5.0",
+ "description": "Build either a decision tree or a ruleset by splitting the sample based on the field that provides the maximum information gain.",
+ "image": "images/custom-canvases/flows/palette/icons/c50.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "cart",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "C&R Tree",
+ "description": "Tree-based classification and prediction method that splits training records into segments with similar output field values.",
+ "image": "images/custom-canvases/flows/palette/icons/cart.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "chaid",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "CHAID",
+ "description": "Build decision trees by using chi-square statistics to identify optimal splits.",
+ "image": "images/custom-canvases/flows/palette/icons/chaid.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "quest",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Quest",
+ "description": "Build decision trees by using a binary classification method.",
+ "image": "images/custom-canvases/flows/palette/icons/quest.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "treeas",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Tree-AS",
+ "description": "Build decision trees using either a CHAID or Exhaustive CHAID model.",
+ "image": "images/custom-canvases/flows/palette/icons/treeas.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "randomtrees",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Random Trees",
+ "description": "Build an ensemble model that consists of multiple decision trees.",
+ "image": "images/custom-canvases/flows/palette/icons/randomtrees.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "rf",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Random Forest",
+ "description": "Implement a bagging algorithm with a tree model as the base model.",
+ "image": "images/custom-canvases/flows/palette/icons/randomforest.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "decisionlist",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Decision List",
+ "description": "Identify subgroups or segments that show a higher or lower likelihood of a binary (yes or no) outcome relative to the overall sample.",
+ "image": "images/custom-canvases/flows/palette/icons/decisionlist.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "ts",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Time Series",
+ "description": "Estimate and build exponential smoothing, ARIMA, or multivariate ARIMA models and produce forecasts.",
+ "image": "images/custom-canvases/flows/palette/icons/ts.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "tcm",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "TCM",
+ "description": "Create a temporal causal model to discover key causal relationships in time series data.",
+ "image": "images/custom-canvases/flows/palette/icons/tcm.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "genlin",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "GenLin",
+ "description": "Build an equation that relates the input field values to the output field values.",
+ "image": "images/custom-canvases/flows/palette/icons/genlin.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "glmm",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "GLMM",
+ "description": "Creates a generalized linear mixed model that extends the linear model.",
+ "image": "images/custom-canvases/flows/palette/icons/glmm.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "gle",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "GLE",
+ "description": "Identify the dependent variable that's linearly related to the factors and covariates via a specified link function.",
+ "image": "images/custom-canvases/flows/palette/icons/gle.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "linear",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Linear",
+ "description": "Classify records based on the values of numeric input fields.",
+ "image": "images/custom-canvases/flows/palette/icons/linear.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "linearas",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Linear-AS",
+ "description": "Classify records based on the values of numeric input fields.",
+ "image": "images/custom-canvases/flows/palette/icons/linearas.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "regression",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Regression",
+ "description": "Classify records based on the values of numeric input fields.",
+ "image": "images/custom-canvases/flows/palette/icons/regression.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "lsvm",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "LSVM",
+ "description": "Use a linear support vector machine to classify data.",
+ "image": "images/custom-canvases/flows/palette/icons/lsvm.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "logreg",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Logistic",
+ "description": "Classify records based on the values of categorical input fields.",
+ "image": "images/custom-canvases/flows/palette/icons/logreg.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "neuralnetwork",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Neural Net",
+ "description": "Approximate a wide range of predictive models with minimal demands on model structure and assumption.",
+ "image": "images/custom-canvases/flows/palette/icons/neuralnetwork.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "knn",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "KNN",
+ "description": "Find patterns of data without requiring an exact match to any stored patterns, or cases.",
+ "image": "images/custom-canvases/flows/palette/icons/knn.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "coxreg",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Cox",
+ "description": "Build a predictive model for time-to-even data.",
+ "image": "images/custom-canvases/flows/palette/icons/cox.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "factor",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "PCA/Factor",
+ "description": "Provides powerful data-reduction techniques to reduce the complexity of your data.",
+ "image": "images/custom-canvases/flows/palette/icons/pca.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "svm",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "SVM",
+ "description": "Use a support vector machine to classify data.",
+ "image": "images/custom-canvases/flows/palette/icons/svm.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "featureselection",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Feature Selection",
+ "description": "Identify fields that are most important for a given analysis.",
+ "image": "images/custom-canvases/flows/palette/icons/featureselection.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "discriminant",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Discriminant",
+ "description": "Build a predictive model for group membership.",
+ "image": "images/custom-canvases/flows/palette/icons/discriminant.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "slrm",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "SLRM",
+ "description": "Predict which offers are most appropriate for customers and the probability of the offers being accepted.",
+ "image": "images/custom-canvases/flows/palette/icons/slrm.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "stp",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "STP",
+ "description": "Has many potential applications such as energy management for buildings, or public transport planning.",
+ "image": "images/custom-canvases/flows/palette/icons/stp.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "associationrules",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Association Rules",
+ "description": "Automatically find associations that you could find manually using visualization techniques.",
+ "image": "images/custom-canvases/flows/palette/icons/associationrules.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "apriori",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Apriori",
+ "description": "Discover association rules in your data.",
+ "image": "images/custom-canvases/flows/palette/icons/apriori.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "carma",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Carma",
+ "description": "Use an association rules discovery algorithm to discover association rules in your data.",
+ "image": "images/custom-canvases/flows/palette/icons/carma.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "sequence",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Sequence",
+ "description": "Discover patterns in sequential or time-oriented data.",
+ "image": "images/custom-canvases/flows/palette/icons/sequence.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "kohonen",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Kohonen",
+ "description": "Cluster your dataset into distinct groups when you don't know what those groups are at the beginning.",
+ "image": "images/custom-canvases/flows/palette/icons/kohonen.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "anomalydetection",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Anomaly",
+ "description": "Identify outliers, or unusual cases, in your data.",
+ "image": "images/custom-canvases/flows/palette/icons/anomaly.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "kmeans",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "K-Means",
+ "description": "Use a cluster method to cluster your dataset into distinct groups when you don't know what those groups are at the beginning.",
+ "image": "images/custom-canvases/flows/palette/icons/kmeans.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "twostep",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "TwoStep",
+ "description": "Cluster your dataset into distinct groups when you don't know what those groups are at first.",
+ "image": "images/custom-canvases/flows/palette/icons/twostep.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "twostepAS",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "TwoStep-AS",
+ "description": "Use this exploratory tool to reveal natural groupings (clusters) within your dataset.",
+ "image": "images/custom-canvases/flows/palette/icons/twostepas.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "isotonicas",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Isotonic-AS",
+ "description": "Isotonic Regression belongs to the family of regression algorithms. Implemented in Spark.",
+ "image": "images/custom-canvases/flows/palette/icons/isotonicas.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "kmeansas",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "K-Means-AS",
+ "description": "Cluster data points into a predefined number of clusters.",
+ "image": "images/custom-canvases/flows/palette/icons/kmeansas.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "kdemodel",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "KDE Modeling",
+ "description": "Walks the line between unsupervised learning, feature engineering, and data modeling.",
+ "image": "images/custom-canvases/flows/palette/icons/kdemodel.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "gmm",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Gaussian Mixture",
+ "description": "CExposes the core features and commonly used parameters of the Gaussian Mixture Python library.",
+ "image": "images/custom-canvases/flows/palette/icons/gmm.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "xgboostas",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "XGBoost-AS",
+ "description": "xgboostas.desc",
+ "image": "images/custom-canvases/flows/palette/icons/xgboostas.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "xgboosttree",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "XGBoost Tree",
+ "description": "Uses an advanced implementation of a gradient boosting algorithm with a tree model as the base model.",
+ "image": "images/custom-canvases/flows/palette/icons/xgboosttree.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "xgboostlinear",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "XGBoost Linear",
+ "description": "Uses an advanced implementation of a gradient boosting algorithm with a linear model as the base model.",
+ "image": "images/custom-canvases/flows/palette/icons/xgboostlinear.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "ocsvm",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "One-Class SVM",
+ "description": "Detects the soft boundary of a given set of samples, to then classify new points as belonging to that set or not.",
+ "image": "images/custom-canvases/flows/palette/icons/ocsvm.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "mlpas",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "MultiLayerPerceptron-AS",
+ "description": "A classifier based on the feedforward artificial neural network. Consists of multiple layers.",
+ "image": "images/custom-canvases/flows/palette/icons/mlpas.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "hdbscan",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "HDBSCAN",
+ "description": "Uses unsupervised learning to find clusters, or dense regions, of a data set.",
+ "image": "images/custom-canvases/flows/palette/icons/hdbscan.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ }
+ ]
+ },
+ {
+ "label": "Text Analytics",
+ "description": "This category defines Text Mining operations",
+ "image": "images/custom-canvases/flows/palette/icons/palette-textmining.svg",
+ "id": "TextMining",
+ "node_types": [
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "LanguageIdentifier",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Language Identifier",
+ "description": "Identify the natural language of a text field within your source data.",
+ "image": "images/custom-canvases/flows/palette/icons/languageidentifier.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "textlinkanalysis",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Text Link Analysis",
+ "description": "Identify relationships between the concepts in the text data based on known patterns.",
+ "image": "images/custom-canvases/flows/palette/icons/textlinkanalysis.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "textanalytic",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Text Mining",
+ "description": "Extract key concepts from text and create categories with these concepts and other data.",
+ "image": "images/custom-canvases/flows/palette/icons/textminingworkbench.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ }
+ ]
+ },
+ {
+ "label": "Outputs",
+ "description": "This category defines output builders",
+ "image": "images/custom-canvases/flows/palette/icons/palette-output.svg",
+ "id": "output",
+ "node_types": [
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "table",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Table",
+ "description": "Create a table that lists the values in your data.",
+ "image": "images/custom-canvases/flows/palette/icons/table.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "matrix",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Matrix",
+ "description": "Create a table that shows relationships between fields.",
+ "image": "images/custom-canvases/flows/palette/icons/matrix.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "analysis",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Analysis",
+ "description": "Evaluate the ability of a model to generate accurate predictions.",
+ "image": "images/custom-canvases/flows/palette/icons/analysis.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "dataaudit",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Data Audit",
+ "description": "Get a comprehensive first look at your data, presented in an easy-to-read matrix.",
+ "image": "images/custom-canvases/flows/palette/icons/dataaudit.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "transform",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Transform",
+ "description": "Perform a rapid visual assessment of the best transformation to use.",
+ "image": "images/custom-canvases/flows/palette/icons/transform.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "statistics",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Statistics",
+ "description": "Get basic summary information about numeric fields.",
+ "image": "images/custom-canvases/flows/palette/icons/statistics.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "means",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Means",
+ "description": "Compare the means between independent groups or between pairs of related fields to test whether a significant difference exists.",
+ "image": "images/custom-canvases/flows/palette/icons/means.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "report",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Report",
+ "description": "Create formatted reports containing fixed text, data, or other expressions derived from your data.",
+ "image": "images/custom-canvases/flows/palette/icons/report.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "setglobals",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Set Globals",
+ "description": "Scans your data and computes summary values that can be used in CLEM expressions.",
+ "image": "images/custom-canvases/flows/palette/icons/setglobals.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "execution_node",
+ "op": "simfit",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "outputs": [
+ {
+ "id": "outPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": -1
+ },
+ "label": "Output Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Sim Fit",
+ "description": "Fits a set of candidate statistical distributions to each field in your data.",
+ "image": "images/custom-canvases/flows/palette/icons/simfit.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ }
+ ]
+ },
+ {
+ "label": "Export",
+ "description": "This category defines data exporters",
+ "image": "images/custom-canvases/flows/palette/icons/palette-export.svg",
+ "id": "export",
+ "node_types": [
+ {
+ "id": "",
+ "type": "binding",
+ "op": "dataassetexport",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Data Asset Export",
+ "description": "Write to remote data sources using connections.",
+ "image": "images/custom-canvases/flows/palette/icons/dataassetexport.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ }
+ ]
+ },
+ {
+ "label": "Models",
+ "description": "This category defines models built from the modeling nodes",
+ "image": "images/custom-canvases/flows/palette/icons/palette-modeling.svg",
+ "id": "models",
+ "node_types": [
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyautoclassifier",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Auto Classifier",
+ "description": "Estimates and compares models to try out a variety of approaches for nominal and binary data.",
+ "image": "images/custom-canvases/flows/palette/icons/applyautoclassifier.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyautonumeric",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Auto Numeric",
+ "description": "Estimates and compares models to try out a variety of approaches for a continuous numeric range.",
+ "image": "images/custom-canvases/flows/palette/icons/applyautonumeric.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyautocluster",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Auto Cluster",
+ "description": "Estimates and compares clustering models that identify groups of records with similar characteristics.",
+ "image": "images/custom-canvases/flows/palette/icons/applyautocluster.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applybayesnet",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Bayes Net",
+ "description": "Build a probability model to establish the likelihood of occurrences by using seemingly unlinked attributes.",
+ "image": "images/custom-canvases/flows/palette/icons/applybayesnet.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyc50",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "C5.0",
+ "description": "Build either a decision tree or a ruleset by splitting the sample based on the field that provides the maximum information gain.",
+ "image": "images/custom-canvases/flows/palette/icons/applyc50.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applycart",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "C&R Tree",
+ "description": "Tree-based classification and prediction method that splits training records into segments with similar output field values.",
+ "image": "images/custom-canvases/flows/palette/icons/applycart.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applychaid",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "CHAID",
+ "description": "Build decision trees by using chi-square statistics to identify optimal splits.",
+ "image": "images/custom-canvases/flows/palette/icons/applychaid.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyquest",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Quest",
+ "description": "Build decision trees by using a binary classification method.",
+ "image": "images/custom-canvases/flows/palette/icons/applyquest.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applytreeas",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Tree-AS",
+ "description": "Build decision trees using either a CHAID or Exhaustive CHAID model.",
+ "image": "images/custom-canvases/flows/palette/icons/applytreeas.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyrandomtrees",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Random Trees",
+ "description": "Build an ensemble model that consists of multiple decision trees.",
+ "image": "images/custom-canvases/flows/palette/icons/applyrandomtrees.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyrf",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Random Forest",
+ "description": "Implement a bagging algorithm with a tree model as the base model.",
+ "image": "images/custom-canvases/flows/palette/icons/applyrandomforest.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applydecisionlist",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Decision List",
+ "description": "Identify subgroups or segments that show a higher or lower likelihood of a binary (yes or no) outcome relative to the overall sample.",
+ "image": "images/custom-canvases/flows/palette/icons/applydecisionlist.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyts",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Time Series",
+ "description": "Estimate and build exponential smoothing, ARIMA, or multivariate ARIMA models and produce forecasts.",
+ "image": "images/custom-canvases/flows/palette/icons/applyts.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applytcm",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "TCM",
+ "description": "Create a temporal causal model to discover key causal relationships in time series data.",
+ "image": "images/custom-canvases/flows/palette/icons/applytcm.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applygenlin",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "GenLin",
+ "description": "Build an equation that relates the input field values to the output field values.",
+ "image": "images/custom-canvases/flows/palette/icons/applygeneralizedlinear.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyglmm",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "GLMM",
+ "description": "Creates a generalized linear mixed model that extends the linear model.",
+ "image": "images/custom-canvases/flows/palette/icons/applyglmm.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applygle",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "GLE",
+ "description": "Identify the dependent variable that's linearly related to the factors and covariates via a specified link function.",
+ "image": "images/custom-canvases/flows/palette/icons/applygle.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applylinear",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Linear",
+ "description": "Classify records based on the values of numeric input fields.",
+ "image": "images/custom-canvases/flows/palette/icons/applylinear.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applylinearas",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Linear-AS",
+ "description": "Classify records based on the values of numeric input fields.",
+ "image": "images/custom-canvases/flows/palette/icons/applylinearas.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyregression",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Regression",
+ "description": "Classify records based on the values of numeric input fields.",
+ "image": "images/custom-canvases/flows/palette/icons/applyregression.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applylsvm",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "LSVM",
+ "description": "Use a linear support vector machine to classify data.",
+ "image": "images/custom-canvases/flows/palette/icons/applylsvm.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applylogreg",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Logistic",
+ "description": "Classify records based on the values of categorical input fields.",
+ "image": "images/custom-canvases/flows/palette/icons/applylogreg.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyneuralnetwork",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Neural Net",
+ "description": "Approximate a wide range of predictive models with minimal demands on model structure and assumption.",
+ "image": "images/custom-canvases/flows/palette/icons/applyneuralnetwork.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyknn",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "KNN",
+ "description": "Find patterns of data without requiring an exact match to any stored patterns, or cases.",
+ "image": "images/custom-canvases/flows/palette/icons/applyknn.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applycoxreg",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Cox",
+ "description": "Build a predictive model for time-to-even data.",
+ "image": "images/custom-canvases/flows/palette/icons/applycox.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyfactor",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "PCA/Factor",
+ "description": "Provides powerful data-reduction techniques to reduce the complexity of your data.",
+ "image": "images/custom-canvases/flows/palette/icons/applypca.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applysvm",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "SVM",
+ "description": "Use a support vector machine to classify data.",
+ "image": "images/custom-canvases/flows/palette/icons/applysvm.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyfeatureselection",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Feature Selection",
+ "description": "Identify fields that are most important for a given analysis.",
+ "image": "images/custom-canvases/flows/palette/icons/applyfeatureselection.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applydiscriminant",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Discriminant",
+ "description": "Build a predictive model for group membership.",
+ "image": "images/custom-canvases/flows/palette/icons/applydiscriminant.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyslrm",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "SLRM",
+ "description": "Predict which offers are most appropriate for customers and the probability of the offers being accepted.",
+ "image": "images/custom-canvases/flows/palette/icons/applyslrm.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applystp",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "STP",
+ "description": "Has many potential applications such as energy management for buildings, or public transport planning.",
+ "image": "images/custom-canvases/flows/palette/icons/applystp.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyassociationrules",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Association Rules",
+ "description": "Automatically find associations that you could find manually using visualization techniques.",
+ "image": "images/custom-canvases/flows/palette/icons/applyassociationrules.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyapriori",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Apriori",
+ "description": "Discover association rules in your data.",
+ "image": "images/custom-canvases/flows/palette/icons/applyapriori.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applycarma",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Carma",
+ "description": "Use an association rules discovery algorithm to discover association rules in your data.",
+ "image": "images/custom-canvases/flows/palette/icons/applycarma.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applysequence",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Sequence",
+ "description": "Discover patterns in sequential or time-oriented data.",
+ "image": "images/custom-canvases/flows/palette/icons/applysequence.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applykohonen",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Kohonen",
+ "description": "Cluster your dataset into distinct groups when you don't know what those groups are at the beginning.",
+ "image": "images/custom-canvases/flows/palette/icons/applykohonen.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyanomalydetection",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Anomaly",
+ "description": "Identify outliers, or unusual cases, in your data.",
+ "image": "images/custom-canvases/flows/palette/icons/applyanomaly.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applykmeans",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "K-Means",
+ "description": "Use a cluster method to cluster your dataset into distinct groups when you don't know what those groups are at the beginning.",
+ "image": "images/custom-canvases/flows/palette/icons/applykmeans.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applytwostep",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "TwoStep",
+ "description": "Cluster your dataset into distinct groups when you don't know what those groups are at first.",
+ "image": "images/custom-canvases/flows/palette/icons/applytwostep.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applytwostepAS",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "TwoStep-AS",
+ "description": "Use this exploratory tool to reveal natural groupings (clusters) within your dataset.",
+ "image": "images/custom-canvases/flows/palette/icons/applytwostepas.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyisotonicas",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Isotonic-AS",
+ "description": "Isotonic Regression belongs to the family of regression algorithms. Implemented in Spark.",
+ "image": "images/custom-canvases/flows/palette/icons/applyisotonicas.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applykmeansas",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "K-Means-AS",
+ "description": "Cluster data points into a predefined number of clusters.",
+ "image": "images/custom-canvases/flows/palette/icons/applykmeansas.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applykdemodel",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "KDE Modeling",
+ "description": "Walks the line between unsupervised learning, feature engineering, and data modeling.",
+ "image": "images/custom-canvases/flows/palette/icons/kdeapply.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applygmm",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Gaussian Mixture",
+ "description": "CExposes the core features and commonly used parameters of the Gaussian Mixture Python library.",
+ "image": "images/custom-canvases/flows/palette/icons/applygmm.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyxgboostas",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "XGBoost-AS",
+ "description": "xgboostas.desc",
+ "image": "images/custom-canvases/flows/palette/icons/applyxgboostas.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyxgboosttree",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "XGBoost Tree",
+ "description": "Uses an advanced implementation of a gradient boosting algorithm with a tree model as the base model.",
+ "image": "images/custom-canvases/flows/palette/icons/applyxgboosttree.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyxgboostlinear",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "XGBoost Linear",
+ "description": "Uses an advanced implementation of a gradient boosting algorithm with a linear model as the base model.",
+ "image": "images/custom-canvases/flows/palette/icons/applyxgboostlinear.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyocsvm",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "One-Class SVM",
+ "description": "Detects the soft boundary of a given set of samples, to then classify new points as belonging to that set or not.",
+ "image": "images/custom-canvases/flows/palette/icons/applyocsvm.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applymlpas",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "MultiLayerPerceptron-AS",
+ "description": "A classifier based on the feedforward artificial neural network. Consists of multiple layers.",
+ "image": "images/custom-canvases/flows/palette/icons/applymlpas.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyhdbscan",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "HDBSCAN",
+ "description": "Uses unsupervised learning to find clusters, or dense regions, of a data set.",
+ "image": "images/custom-canvases/flows/palette/icons/applyhdbscan.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ },
+ {
+ "id": "",
+ "type": "binding",
+ "op": "applyntextminingworkbench",
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ }
+ }
+ ],
+ "parameters": {},
+ "app_data": {
+ "ui_data": {
+ "label": "Text Mining Workbench",
+ "description": "Uses unsupervised learning to find clusters, or dense regions, of a data set.",
+ "image": "images/custom-canvases/flows/palette/icons/applytextminingworkbench.svg",
+ "x_pos": 0,
+ "y_pos": 0
+ }
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/canvas_modules/harness/src/client/components/custom-canvases/prompt/prompt-react.jsx b/canvas_modules/harness/src/client/components/custom-canvases/prompt/prompt-react.jsx
new file mode 100644
index 0000000000..55929c3571
--- /dev/null
+++ b/canvas_modules/harness/src/client/components/custom-canvases/prompt/prompt-react.jsx
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2024 Elyra Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from "react";
+import PropTypes from "prop-types";
+import PromptPalette from "./prompt-palette.json";
+
+export default class PromptReactNode extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.onScroll = this.onScroll.bind(this);
+ }
+
+ onClick(nodeTemplate, evt) {
+ this.props.nodeData.app_data.prompt_data.addNodeCallback(nodeTemplate);
+ }
+
+ onScroll(evt) {
+ evt.stopPropagation();
+
+ }
+
+ render() {
+ const nodeDivs = [];
+ for (let i = 0; i < PromptPalette.categories[1].node_types.length; i++) {
+ const nodeTemplate = PromptPalette.categories[1].node_types[i];
+ nodeDivs.push(
+
+ { nodeTemplate.app_data.ui_data.label }
+
+ );
+ }
+
+ return (
+
+ { nodeDivs }
+
+ );
+ }
+}
+
+PromptReactNode.propTypes = {
+ canvasController: PropTypes.object.isRequired,
+ nodeData: PropTypes.object,
+ externalUtils: PropTypes.object
+};
diff --git a/canvas_modules/harness/src/client/components/custom-canvases/prompt/prompt-template.json b/canvas_modules/harness/src/client/components/custom-canvases/prompt/prompt-template.json
new file mode 100644
index 0000000000..7c03834344
--- /dev/null
+++ b/canvas_modules/harness/src/client/components/custom-canvases/prompt/prompt-template.json
@@ -0,0 +1,30 @@
+{
+ "id": "1af18594-86db-4b21-8f40-16afad1ece0b",
+ "type": "execution_node",
+ "op": "prompt_node",
+ "app_data": {
+ "ui_data": {
+ "label": "Prompt",
+ "image": "images/custom-canvases/flows/palette/icons/type.svg",
+ "x_pos": 50,
+ "y_pos": 170,
+ "description": "A dummy node added to the canvas to prompt for the next node. Displayed as a 'react node'."
+ }
+ },
+ "inputs": [
+ {
+ "id": "inPort",
+ "app_data": {
+ "ui_data": {
+ "cardinality": {
+ "min": 0,
+ "max": 1
+ },
+ "label": "Input Port"
+ }
+ },
+ "links": [
+ ]
+ }
+ ]
+ }
diff --git a/canvas_modules/harness/src/client/components/custom-canvases/prompt/prompt.scss b/canvas_modules/harness/src/client/components/custom-canvases/prompt/prompt.scss
new file mode 100644
index 0000000000..ece31c826d
--- /dev/null
+++ b/canvas_modules/harness/src/client/components/custom-canvases/prompt/prompt.scss
@@ -0,0 +1,202 @@
+/*
+ * Copyright 2017-2023 Elyra Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* Override styles for flows.json canvas */
+
+.prompt {
+
+ .d3-node-group {
+ .d3-node-body-outline {
+ fill: transparent;
+ stroke: transparent;
+ }
+
+ .d3-node-selection-highlight[data-selected="yes"] {
+ stroke: $gray-50;
+ stroke-dasharray: 5, 5;
+ stroke-width: 1;
+ fill: transparent;
+ pointer-events: none;
+ }
+
+ .d3-node-port-output {
+ opacity: 0;
+ transform: translateX(-8px);
+ transition: opacity 0.1s cubic-bezier(0.4, 0.14, 0.3, 1), transform 0.1s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ transition-delay: 0.125s;
+ }
+
+ .d3-node-ellipsis-group {
+ .d3-node-ellipsis {
+ fill: $icon-primary;
+ }
+
+ &:hover {
+ .d3-node-ellipsis-background {
+ fill: $layer-accent-01;
+ }
+ }
+ }
+
+ // Set the outline/background for decorations. This will only affect the
+ // zoom-in decorations on supernode since that is th eonly one with an
+ // outline.
+ .d3-node-dec-group {
+ .d3-node-dec-outline {
+ fill: transparent;
+ stroke-width: 0;
+ }
+
+ .d3-node-dec-image[data-id*="supernode-zoom"] {
+ display: none;
+ fill: transparent;
+ stroke-width: 0;
+ }
+ }
+
+ /* Hover over d3-node-group */
+ &:hover {
+ .d3-node-port-output {
+ opacity: 1;
+ transform: translateX(0);
+ transition: opacity 0.1s cubic-bezier(0.175, 0.885, 0.32, 1.275), transform 0.1s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ transition-delay: 0.125s;
+ }
+
+ // Set the outline/background for decorations. This will only affect the
+ // zoom-in decorations on supernode since that is the only one with an
+ // outline.
+ .d3-node-dec-group {
+ .d3-node-dec-image[data-id*="supernode-zoom"] {
+ display: block;
+ fill: $icon-primary;
+ stroke-width: 0;
+ }
+
+ &:hover {
+ .d3-node-dec-outline {
+ fill: $layer-accent-01;
+ stroke-width: 0;
+ }
+ }
+ }
+ }
+ }
+
+ .d3-data-link .d3-link-line,
+ .d3-data-link .d3-link-line-arrow-head {
+ fill: none;
+ stroke: $layer-selected-inverse;
+ stroke-width: 1;
+ }
+
+ /* For association link */
+ .d3-object-link .d3-link-line {
+ stroke: $border-strong-01;
+ stroke-width: 2;
+ fill: none;
+ stroke-dasharray: 5.5;
+ }
+
+ .d3-comment-link .d3-link-line {
+ stroke: $border-strong-01;
+ stroke-width: 1;
+ fill: none;
+ stroke-dasharray: 10.5;
+ }
+
+
+ .d3-link-group:hover .d3-link-line,
+ .d3-link-group:hover .d3-link-line-arrow-head {
+ stroke: $button-primary;
+ stroke-width: 2;
+ }
+
+ .d3-new-connection-line[linkType="nodeLink"] {
+ stroke: $button-primary;
+ stroke-width: 2;
+ stroke-dasharray: 1 0;
+ fill: none;
+ }
+
+ .d3-comment-selection-highlight[data-selected="yes"] {
+ stroke: $gray-50;
+ stroke-dasharray: 5, 5;
+ stroke-width: 1;
+ fill: transparent;
+ pointer-events: none;
+ }
+
+ /* Decoration Styles */
+
+ .node-cache-empty {
+ fill: $layer-01;
+ }
+
+ .node-cache-full {
+ fill: $layer-01;
+ }
+
+ .node-sql-pushback {
+ fill: $layer-01;
+ }
+
+ /* Override styles in common canvas to fade out nodes and comments
+ when they are cut to the clipboard.*/
+ .node-image[data-is-cut] {
+ zoom: 1;
+ filter: "alpha(opacity=50)";
+ opacity: 0.5;
+ }
+
+ .canvas-comment[data-is-cut] {
+ zoom: 1;
+ filter: "alpha(opacity=50)";
+ opacity: 0.5;
+ }
+
+ .canvas-ui-empty-placeholder {
+ height: 150px;
+ width: 320px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ }
+
+ .canvas-ui-empty-image-placeholder {
+ height: 150px;
+ width: 250px;
+ float: left;
+ margin-left: -48px;
+ }
+
+ .canvas-ui-empty-text-placeholder {
+ @include type-style("productive-heading-03");
+ color: $text-primary;
+ }
+
+ .canvas-ui-empty-subtext-placeholder {
+ @include type-style("body-long-02");
+ color: $text-secondary;
+ margin-top: 8px;
+ }
+
+ .canvas-ui-empty-node-text {
+ @include type-style("productive-heading-02");
+ color: $text-secondary;
+ }
+
+}
diff --git a/canvas_modules/harness/src/client/components/sidepanel/canvas/sidepanel-canvas.jsx b/canvas_modules/harness/src/client/components/sidepanel/canvas/sidepanel-canvas.jsx
index 795704541a..c4340d2d21 100644
--- a/canvas_modules/harness/src/client/components/sidepanel/canvas/sidepanel-canvas.jsx
+++ b/canvas_modules/harness/src/client/components/sidepanel/canvas/sidepanel-canvas.jsx
@@ -29,6 +29,7 @@ import {
EXAMPLE_APP_FLOWS,
EXAMPLE_APP_STAGES,
EXAMPLE_APP_STAGES_CARD_NODE,
+ EXAMPLE_APP_PROMPT,
EXAMPLE_APP_EXPLAIN,
EXAMPLE_APP_EXPLAIN2,
EXAMPLE_APP_STREAMS,
@@ -1252,6 +1253,10 @@ export default class SidePanelForms extends React.Component {
value={EXAMPLE_APP_STAGES_CARD_NODE}
labelText={EXAMPLE_APP_STAGES_CARD_NODE}
/>
+