Source code for node_convert_column_tabledataset
# This file is part of Sympathy for Data.
# Copyright (c) 2021 Combine Control Systems
#
# SYMPATHY FOR DATA COMMERCIAL LICENSE
# You should have received a link to the License with Sympathy for Data.
from sympathy.api import qt2 as qt_compat
from sympathy.api import node
from sympathy.api.nodeconfig import Ports, Tag, Tags, adjust
from sylib_aml.dataset import DatasetPort
from sylib.converters import TYPE_NAMES
QtCore = qt_compat.QtCore
QtGui = qt_compat.import_module("QtGui")
QtWidgets = qt_compat.import_module("QtWidgets")
[docs]
class ConvertColumnTypeInTableDataset(node.Node):
"""
Convert selected columns to specified data type in tabular dataset.
"""
name = "Convert column type in Table Dataset (Experimental)"
nodeid = (
"com.sympathyfordata.advancedmachinelearning."
"convertcolumntypeintabledataset"
)
author = "Jannes Germishuys"
icon = "convert_column_types_table_ds.svg"
tags = Tags(Tag.MachineLearning.Processing)
inputs = Ports([DatasetPort("Dataset", "dataset")])
outputs = Ports([DatasetPort("Dataset", "dataset")])
parameters = node.parameters()
editor = node.editors.multilist_editor(edit=True, mode=False)
parameters.set_list(
"columns",
label="Columns",
description="Columns that should be converted.",
value=[],
editor=editor,
)
editor = node.editors.combo_editor(
options=list(sorted(TYPE_NAMES.values())))
parameters.set_string(
"types",
label="Target type",
description="The type that these columns should be converted to.",
value_names=["text"],
editor=editor,
)
def adjust_parameters(self, node_context):
adjust(node_context.parameters["columns"], node_context.input[0])
def execute(self, node_context):
input_ds = node_context.input["dataset"]
input_ds.load()
input_ds = input_ds.get_ds()
all_cols = node_context.input[0].names(kind='cols')
columns_choice = node_context.parameters['columns'].selected_names(
all_cols)
if input_ds is not None:
update_dict = dict(
zip(
columns_choice,
[node_context.parameters["types"].value]
* len(columns_choice),
)
)
for col, typ in update_dict.items():
input_ds["column_config"][col]["dtype"] = typ
else:
input_ds = {}
json = node_context.output["dataset"]
json.set_ds(input_ds)
json.save()