Skip to content

Commit 7243c9f

Browse files
authored
Merge pull request #6212 from janezd/preprocess-missing-reprs
[FIX] Preprocess: Fix reporting for remove sparse and impute
2 parents e3440f9 + 0d0cb53 commit 7243c9f

File tree

2 files changed

+38
-6
lines changed

2 files changed

+38
-6
lines changed

Orange/widgets/data/owpreprocess.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from Orange.preprocess import Continuize, ProjectPCA, RemoveNaNRows, \
2828
ProjectCUR, Scale as _Scale, Randomize as _Randomize, RemoveSparse
2929
from Orange.widgets import widget, gui
30+
from Orange.widgets.utils.localization import pl
3031
from Orange.widgets.settings import Setting
3132
from Orange.widgets.utils.overlay import OverlayWidget
3233
from Orange.widgets.utils.sql import check_sql_input
@@ -253,9 +254,9 @@ def createinstance(params):
253254
def __repr__(self):
254255
return self.Continuizers[self.__treatment]
255256

256-
class RemoveSparseEditor(BaseEditor):
257257

258-
options = ["missing", "zeros"]
258+
class RemoveSparseEditor(BaseEditor):
259+
options = ["missing values", "zeros"]
259260

260261
def __init__(self, parent=None, **kwargs):
261262
super().__init__(parent, **kwargs)
@@ -266,11 +267,9 @@ def __init__(self, parent=None, **kwargs):
266267
self.setLayout(QVBoxLayout())
267268

268269
self.layout().addWidget(QLabel("Remove features with too many"))
269-
options = ["missing values",
270-
"zeros"]
271270
self.filter_buttons = QButtonGroup(exclusive=True)
272271
self.filter_buttons.buttonClicked.connect(self.filterByClicked)
273-
for idx, option, in enumerate(options):
272+
for idx, option, in enumerate(self.options):
274273
btn = QRadioButton(self, text=option, checked=idx == 0)
275274
self.filter_buttons.addButton(btn, id=idx)
276275
self.layout().addWidget(btn)
@@ -354,6 +353,15 @@ def createinstance(params):
354353
threshold = params.pop('percThresh', 5) / 100
355354
return RemoveSparse(threshold, filter0)
356355

356+
def __repr__(self):
357+
desc = f"remove features with too many {self.options[self.filter0]}, threshold: "
358+
if self.useFixedThreshold:
359+
desc += f"{self.fixedThresh} {pl(self.fixedThresh, 'instance')}"
360+
else:
361+
desc += f"{self.percThresh} %"
362+
return desc
363+
364+
357365
class ImputeEditor(BaseEditor):
358366
(NoImputation, Constant, Average,
359367
Model, Random, DropRows, DropColumns) = 0, 1, 2, 3, 4, 5, 6
@@ -727,6 +735,12 @@ def createinstance(params):
727735
# further implementations
728736
raise NotImplementedError
729737

738+
def __repr__(self):
739+
if self.__strategy == self.Fixed:
740+
return f"select {self.__k} {pl(self.__k,'feature')}"
741+
else:
742+
return f"select {self.__p} % features"
743+
730744

731745
def index_to_enum(enum, i):
732746
"""Enums, by default, are not int-comparable, so use an ad-hoc mapping of

Orange/widgets/data/tests/test_owpreprocess.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Test methods with long descriptive names can omit docstrings
22
# pylint: disable=missing-docstring,unsubscriptable-object
3+
import unittest
4+
35
import numpy as np
46

57
from Orange.data import Table
@@ -231,6 +233,13 @@ def test_editor(self):
231233
self.assertIsInstance(p, fss.SelectRandomFeatures)
232234
self.assertEqual(p.k, 0.25)
233235

236+
def test_repr(self):
237+
widget = owpreprocess.RandomFeatureSelectEditor()
238+
for strategy in (owpreprocess.RandomFeatureSelectEditor.Fixed,
239+
owpreprocess.RandomFeatureSelectEditor.Percentage):
240+
widget.setStrategy(strategy)
241+
repr(widget)
242+
234243

235244
class TestRandomizeEditor(WidgetTest):
236245
def test_editor(self):
@@ -281,8 +290,8 @@ def test_editor(self):
281290
self.assertEqual(p.rank, 5)
282291
self.assertEqual(p.max_error, 0.5)
283292

284-
class TestRemoveSparseEditor(WidgetTest):
285293

294+
class TestRemoveSparseEditor(WidgetTest):
286295
def test_editor(self):
287296
widget = owpreprocess.RemoveSparseEditor()
288297
self.assertEqual(
@@ -304,3 +313,12 @@ def test_editor(self):
304313
self.assertIsInstance(p, RemoveSparse)
305314
self.assertEqual(p.threshold, 30)
306315
self.assertFalse(p.filter0)
316+
317+
def test_repr(self):
318+
widget = owpreprocess.RemoveSparseEditor()
319+
for widget.useFixedThreshold in (False, True):
320+
repr(widget)
321+
322+
323+
if __name__ == "__main__":
324+
unittest.main()

0 commit comments

Comments
 (0)