def ordinal(var_name: str, ordered_categories: list): # Create order tuple categories = OrderedDict() for i, c in enumerate(ordered_categories): categories[c] = i+1 # start at 1 not 0 return Variable.from_spec(var_name, DataType.ORDINAL, categories, [1, len(categories)])
def select(var: Variable, op: str, other: Literal): if (op == '=='): return var.subset_equals(other) elif (op == '!='): return var.subset_not_equals(other) elif (op == '<'): return var.subset_lt(other) elif (op == '<='): return var.subset_le(other) elif (op == '>'): return var.subset_gt(other) elif (op == '>='): return var.subset_ge(other) else: raise ValueError(f"Do not support the operator{op}")
def ratio(var_name: str, drange: list=None): return Variable.from_spec(var_name, DataType.RATIO, None, drange) # treat range like categories, check that all values are within range
def interval(var_name: str, drange: list=None): return Variable.from_spec(var_name, DataType.INTERVAL, None, drange) # treat range like categories, check that all values are within range
def nominal(var_name: str, unordered_categories: list): categories = OrderedDict() for i, c in enumerate(unordered_categories): categories[c] = -1 return Variable.from_spec(var_name, DataType.NOMINAL, categories, None)