Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FIX] Change Variable Icons: Discrete -> Categorical, Continuous -> Numeric #2477

Merged
merged 3 commits into from
Jul 27, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Orange/classification/majority.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class value is selected randomly. In order to produce consistent results on
def fit_storage(self, dat):
if not dat.domain.has_discrete_class:
raise ValueError("classification.MajorityLearner expects a domain "
"with a (single) discrete variable")
"with a (single) categorical variable")
dist = distribution.get_distribution(dat, dat.domain.class_var)
N = dist.sum()
if N > 0:
Expand Down
4 changes: 2 additions & 2 deletions Orange/data/variable.py
Original file line number Diff line number Diff line change
Expand Up @@ -452,7 +452,7 @@ class ContinuousVariable(Variable):
set to 0 to prevent changes by `to_val`.
"""

TYPE_HEADERS = ('continuous', 'c')
TYPE_HEADERS = ('continuous', 'c', 'numeric', 'n')

def __init__(self, name="", number_of_decimals=None, compute_value=None):
"""
Expand Down Expand Up @@ -549,7 +549,7 @@ class DiscreteVariable(Variable):
for regression.
"""

TYPE_HEADERS = ('discrete', 'd')
TYPE_HEADERS = ('discrete', 'd', 'categorical')

_all_vars = collections.defaultdict(list)
presorted_values = []
Expand Down
16 changes: 8 additions & 8 deletions Orange/widgets/data/owcontinuize.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@

class OWContinuize(widget.OWWidget):
name = "Continuize"
description = ("Transform discrete attributes into continuous and, " +
"optionally, normalize the continuous values.")
description = ("Transform categorical attributes into numeric and, " +
"optionally, normalize numeric values.")
icon = "icons/Continuize.svg"
category = "Data"
keywords = ["data", "continuize"]
Expand Down Expand Up @@ -50,7 +50,7 @@ class Outputs:
("Most frequent value as base", Continuize.FrequentAsBase),
("One attribute per value", Continuize.Indicators),
("Ignore multinomial attributes", Continuize.RemoveMultinomial),
("Remove all discrete attributes", Continuize.Remove),
("Remove categorical attributes", Continuize.Remove),
("Treat as ordinal", Continuize.AsOrdinal),
("Divide by number of values", Continuize.AsNormalizedOrdinal))

Expand All @@ -71,19 +71,19 @@ class Outputs:
def __init__(self):
super().__init__()

box = gui.vBox(self.controlArea, "Multinomial Attributes")
box = gui.vBox(self.controlArea, "Categorical Features")
gui.radioButtonsInBox(
box, self, "multinomial_treatment",
btnLabels=[x[0] for x in self.multinomial_treats],
callback=self.settings_changed)

box = gui.vBox(self.controlArea, "Continuous Attributes")
box = gui.vBox(self.controlArea, "Numeric Features")
gui.radioButtonsInBox(
box, self, "continuous_treatment",
btnLabels=[x[0] for x in self.continuous_treats],
callback=self.settings_changed)

box = gui.vBox(self.controlArea, "Discrete Class Attribute")
box = gui.vBox(self.controlArea, "Categorical Outcomes")
gui.radioButtonsInBox(
box, self, "class_treatment",
btnLabels=[t[0] for t in self.class_treats],
Expand Down Expand Up @@ -141,9 +141,9 @@ def commit(self):
def send_report(self):
self.report_items(
"Settings",
[("Multinominal attributes",
[("Categorical features",
self.multinomial_treats[self.multinomial_treatment][0]),
("Continuous attributes",
("Numeric features",
self.continuous_treats[self.continuous_treatment][0]),
("Class", self.class_treats[self.class_treatment][0]),
("Value range", self.value_ranges[self.zero_based])])
Expand Down
12 changes: 6 additions & 6 deletions Orange/widgets/data/owdatainfo.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,14 +131,14 @@ def update_size():
disc_class = count(domain.class_vars, DiscreteVariable)
cont_class = count(domain.class_vars, ContinuousVariable)
if not cont_class:
self.targets = "Multitarget data,\n%i discrete targets" % \
self.targets = "Multitarget data,\n%i categorical targets" % \
n_or_none(disc_class)
elif not disc_class:
self.targets = "Multitarget data,\n%i numeric targets" % \
n_or_none(cont_class)
else:
self.targets = "<p>Multi target data</p>\n" + pack_table(
(("Discrete", disc_class), ("Numeric", cont_class)))
(("Categorical", disc_class), ("Numeric", cont_class)))

self.data_desc = dd = OrderedDict()

Expand All @@ -158,23 +158,23 @@ def join_if(items):
return ", ".join(s.format(n) for s, n in items if n)

dd["Features"] = len(domain.attributes) and join_if((
("{} discrete", disc_features),
("{} categorical", disc_features),
("{} numeric", cont_features)
))
if domain.class_var:
name = domain.class_var.name
if domain.class_var.is_discrete:
dd["Target"] = "discrete outcome '{}'".format(name)
dd["Target"] = "categorical outcome '{}'".format(name)
else:
dd["Target"] = "numeric target '{}'".format(name)
elif domain.class_vars:
tt = ""
if disc_class:
tt += report.plural("{number} discrete outcome{s}", disc_class)
tt += report.plural("{number} categorical outcome{s}", disc_class)
if cont_class:
tt += report.plural("{number} numeric target{s}", cont_class)
dd["Meta attributes"] = len(domain.metas) > 0 and join_if((
("{} discrete", disc_metas),
("{} categorical", disc_metas),
("{} numeric", cont_metas),
("{} textual", str_metas)
))
Expand Down
4 changes: 2 additions & 2 deletions Orange/widgets/data/owfeatureconstructor.py
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ class Outputs:
]

class Error(OWWidget.Error):
more_values_needed = Msg("Discrete feature {} needs more values.")
more_values_needed = Msg("Categorical feature {} needs more values.")
invalid_expressions = Msg("Invalid expressions: {}.")

def __init__(self):
Expand Down Expand Up @@ -618,7 +618,7 @@ def send_report(self):
items = OrderedDict()
for feature in self.featuremodel:
if isinstance(feature, DiscreteDescriptor):
items[feature.name] = "{} (discrete with values {}{})".format(
items[feature.name] = "{} (categorical with values {}{})".format(
feature.expression, feature.values,
"; ordered" * feature.ordered)
elif isinstance(feature, ContinuousDescriptor):
Expand Down
2 changes: 1 addition & 1 deletion Orange/widgets/data/owfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,7 @@ def _describe(self, table):
if domain.has_continuous_class:
text += "<br/>Regression; numerical class."
elif domain.has_discrete_class:
text += "<br/>Classification; discrete class with {} values.".\
text += "<br/>Classification; categorical class with {} values.".\
format(len(domain.class_var.values))
elif table.domain.class_vars:
text += "<br/>Multi-target; {} target variables.".format(
Expand Down
8 changes: 4 additions & 4 deletions Orange/widgets/data/owpreprocess.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ class DiscretizeEditor(BaseEditor):
NoDisc: "None",
EqualWidth: "Equal width discretization",
EqualFreq: "Equal frequency discretization",
Drop: "Remove continuous attributes",
Drop: "Remove numeric features",
EntropyMDL: "Entropy-MDL discretization"
}

Expand Down Expand Up @@ -194,9 +194,9 @@ class ContinuizeEditor(BaseEditor):

Continuizers = OrderedDict([
(Continuize.FrequentAsBase, "Most frequent is base"),
(Continuize.Indicators, "One attribute per value"),
(Continuize.RemoveMultinomial, "Remove multinomial attributes"),
(Continuize.Remove, "Remove all discrete attributes"),
(Continuize.Indicators, "One feature per value"),
(Continuize.RemoveMultinomial, "Remove non-binary features"),
(Continuize.Remove, "Remove categorical features"),
(Continuize.AsOrdinal, "Treat as ordinal"),
(Continuize.AsNormalizedOrdinal, "Divide by number of values")
])
Expand Down
4 changes: 2 additions & 2 deletions Orange/widgets/data/owpurgedomain.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,11 @@ class Outputs:
resizing_enabled = False
buttons_area_orientation = Qt.Vertical

feature_options = (('sortValues', 'Sort discrete feature values'),
feature_options = (('sortValues', 'Sort categorical feature values'),
('removeValues', 'Remove unused feature values'),
('removeAttributes', 'Remove constant features'))

class_options = (('sortClasses', 'Sort discrete class variable values'),
class_options = (('sortClasses', 'Sort categorical class values'),
('removeClasses', 'Remove unused class variable values'),
('removeClassAttribute', 'Remove constant class variables'))

Expand Down
2 changes: 1 addition & 1 deletion Orange/widgets/data/owsql.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ def __init__(self):
box.layout().addWidget(self.custom_sql)

gui.checkBox(box, self, "guess_values",
"Auto-discover discrete variables",
"Auto-discover categorical variables",
callback=self.open_table)

gui.checkBox(box, self, "download",
Expand Down
2 changes: 1 addition & 1 deletion Orange/widgets/data/owtable.py
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ def __init__(self):
callback=self._on_show_variable_labels_changed)

gui.checkBox(box, self, "show_distributions",
'Visualize continuous values',
'Visualize numeric values',
callback=self._on_distribution_color_changed)
gui.checkBox(box, self, "color_by_class", 'Color by instance classes',
callback=self._on_distribution_color_changed)
Expand Down
4 changes: 2 additions & 2 deletions Orange/widgets/gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -1024,9 +1024,9 @@ class __AttributeIconDict(dict):
def __getitem__(self, key):
if not self:
for tpe, char, col in ((vartype(ContinuousVariable()),
"C", (202, 0, 32)),
"N", (202, 0, 32)),
(vartype(DiscreteVariable()),
"D", (26, 150, 65)),
"C", (26, 150, 65)),
(vartype(StringVariable()),
"S", (0, 0, 0)),
(vartype(TimeVariable()),
Expand Down
4 changes: 2 additions & 2 deletions Orange/widgets/unsupervised/owdistances.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,15 +46,15 @@ class Outputs:
buttons_area_orientation = Qt.Vertical

class Error(OWWidget.Error):
no_continuous_features = Msg("No continuous features")
no_continuous_features = Msg("No numeric features")
dense_metric_sparse_data = Msg("Selected metric does not support sparse data")
empty_data = Msg("Empty data set")
mahalanobis_error = Msg("{}")
distances_memory_error = Msg("Not enough memory.")
distances_value_error = Msg("Error occurred while calculating distances\n{}")

class Warning(OWWidget.Warning):
ignoring_discrete = Msg("Ignoring discrete features")
ignoring_discrete = Msg("Ignoring categorical features")
imputing_data = Msg("Imputing missing values")

def __init__(self):
Expand Down
2 changes: 1 addition & 1 deletion Orange/widgets/unsupervised/owmds.py
Original file line number Diff line number Diff line change
Expand Up @@ -1191,7 +1191,7 @@ def color_data(table, var=None, mask=None, plotstyle=None):
color_data = plotutils.continuous_colors(
col, palette=plotstyle.continuous_palette)
else:
raise TypeError("Discrete/Continuous variable or None expected.")
raise TypeError("Categorical/Numeric variable or None expected.")

return color_data

Expand Down
2 changes: 1 addition & 1 deletion Orange/widgets/utils/domaineditor.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class VarTableModel(QAbstractTableModel):
DISCRETE_VALUE_DISPLAY_LIMIT = 20

places = "feature", "target", "meta", "skip"
typenames = "nominal", "numeric", "string", "datetime"
typenames = "categorical", "numeric", "string", "datetime"
vartypes = DiscreteVariable, ContinuousVariable, StringVariable, TimeVariable
name2type = dict(zip(typenames, vartypes))
type2name = dict(zip(vartypes, typenames))
Expand Down
11 changes: 9 additions & 2 deletions Orange/widgets/utils/itemmodels.py
Original file line number Diff line number Diff line change
Expand Up @@ -631,6 +631,8 @@ def data(self, index, role=Qt.DisplayRole):
def variable_tooltip(self, var):
if var.is_discrete:
return self.discrete_variable_tooltip(var)
elif var.is_time:
return self.time_variable_toltip(var)
elif var.is_continuous:
return self.continuous_variable_toltip(var)
elif var.is_string:
Expand All @@ -647,14 +649,19 @@ def variable_labels_tooltip(self, var):
return text

def discrete_variable_tooltip(self, var):
text = "<b>%s</b><br/>Discrete with %i values: " %\
text = "<b>%s</b><br/>Categorical with %i values: " %\
(safe_text(var.name), len(var.values))
text += ", ".join("%r" % safe_text(v) for v in var.values)
text += self.variable_labels_tooltip(var)
return text

def time_variable_toltip(self, var):
text = "<b>%s</b><br/>Time" % safe_text(var.name)
text += self.variable_labels_tooltip(var)
return text

def continuous_variable_toltip(self, var):
text = "<b>%s</b><br/>Continuous" % safe_text(var.name)
text = "<b>%s</b><br/>Numeric" % safe_text(var.name)
text += self.variable_labels_tooltip(var)
return text

Expand Down
8 changes: 4 additions & 4 deletions Orange/widgets/visualize/owdistributions.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,9 +144,9 @@ def __init__(self):

self.cb_disc_cont = gui.checkBox(
gui.indentedBox(box, sep=4),
self, "disc_cont", "Bin continuous variables",
self, "disc_cont", "Bin numeric variables",
callback=self._on_groupvar_idx_changed,
tooltip="Show continuous variables as discrete.")
tooltip="Show numeric variables as categorical.")

box = gui.vBox(self.controlArea, "Group by")
self.icons = gui.attributeIconDict
Expand Down Expand Up @@ -260,11 +260,11 @@ def clear(self):

def _setup_smoothing(self):
if not self.disc_cont and self.var and self.var.is_continuous:
self.cb_disc_cont.setText("Bin continuous variables")
self.cb_disc_cont.setText("Bin numeric variables")
self.l_smoothing_l.setText("Smooth")
self.l_smoothing_r.setText("Precise")
else:
self.cb_disc_cont.setText("Bin continuous variables into {} bins".
self.cb_disc_cont.setText("Bin numeric variables into {} bins".
format(self.bins[self.smoothing_index]))
self.l_smoothing_l.setText(" " + str(self.bins[0]))
self.l_smoothing_r.setText(" " + str(self.bins[-1]))
Expand Down
4 changes: 2 additions & 2 deletions Orange/widgets/visualize/owheatmap.py
Original file line number Diff line number Diff line change
Expand Up @@ -430,13 +430,13 @@ class Outputs:

class Information(widget.OWWidget.Information):
sampled = Msg("Data has been sampled")
discrete_ignored = Msg("{} discrete column{} ignored")
discrete_ignored = Msg("{} categorical feature{} ignored")
row_clust = Msg("{}")
col_clust = Msg("{}")
sparse_densified = Msg("Showing this data may require a lot of memory")

class Error(widget.OWWidget.Error):
no_continuous = Msg("No continuous feature columns")
no_continuous = Msg("No numeric features")
not_enough_features = Msg("Not enough features for column clustering")
not_enough_instances = Msg("Not enough instances for clustering")
not_enough_instances_k_means = Msg(
Expand Down
2 changes: 1 addition & 1 deletion Orange/widgets/visualize/owlinearprojection.py
Original file line number Diff line number Diff line change
Expand Up @@ -584,7 +584,7 @@ def _initialize(self, data):
# Initialize the GUI controls from data's domain.
cont_vars = [var for var in data.domain.variables
if var.is_continuous]
self.warning("Plotting requires continuous features.",
self.warning("Plotting requires numeric features.",
shown=not len(cont_vars))
self.varmodel_selected[:] = cont_vars[:3]
self.varmodel_other[:] = cont_vars[3:]
Expand Down
2 changes: 1 addition & 1 deletion Orange/widgets/visualize/owmosaic.py
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ class Warning(OWWidget.Warning):
incompatible_subset = Msg("Data subset is incompatible with Data")
no_valid_data = Msg("No valid data")
no_cont_selection_sql = \
Msg("Selection of continuous variables on SQL is not supported")
Msg("Selection of numeric features on SQL is not supported")

def __init__(self):
super().__init__()
Expand Down
2 changes: 1 addition & 1 deletion Orange/widgets/visualize/ownomogram.py
Original file line number Diff line number Diff line change
Expand Up @@ -650,7 +650,7 @@ def __init__(self):
orientation=Qt.Horizontal, callback=self.update_scene)

self.cont_feature_dim_combo = gui.comboBox(
box, self, "cont_feature_dim_index", label="Continuous features: ",
box, self, "cont_feature_dim_index", label="Numeric features: ",
items=["1D projection", "2D curve"], orientation=Qt.Horizontal,
callback=self.update_scene)

Expand Down
3 changes: 2 additions & 1 deletion Orange/widgets/visualize/owparallelcoordinates.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,8 @@ def add_annotation_settings(self, parent):
items=["No statistics", "Means, deviations", "Median, quartiles"], callback=self.update_graph,
sendSelectedValue=False, valueType=int)
gui.checkBox(box, self, 'graph.show_distributions', 'Show distributions', callback=self.update_graph,
tooltip="Show bars with distribution of class values (only for discrete attributes)")
tooltip="Show bars with distribution of class values "
"(only for categorical attributes)")

def add_group_settings(self, parent):
box = gui.vBox(parent, "Groups")
Expand Down
2 changes: 1 addition & 1 deletion Orange/widgets/visualize/owscatterplot.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ def __init__(self):
"None" if x == 0 else ("%.1f %%" if x < 1 else "%d %%") % x)
gui.checkBox(
gui.indentedBox(box), self, 'graph.jitter_continuous',
'Jitter continuous values', callback=self.reset_graph_data)
'Jitter numeric values', callback=self.reset_graph_data)

self.sampling = gui.auto_commit(
self.controlArea, self, "auto_sample", "Sample", box="Sampling",
Expand Down
2 changes: 1 addition & 1 deletion Orange/widgets/visualize/owsilhouetteplot.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ def set_data(self, data):
data = None
error_msg = "No continuous columns"
elif ncont < len(data.domain.attributes):
warning_msg = "{0} discrete columns will not be used for " \
warning_msg = "{0} categorical columns will not be used for " \
"distance computation".format(ndiscrete)

self.data = data
Expand Down