@@ -252,35 +252,103 @@ def __repr__(self):
252252
253253class RemoveSparseEditor (BaseEditor ):
254254
255+ options = ["Nan's" , "0's" ]
256+
255257 def __init__ (self , parent = None , ** kwargs ):
256258 super ().__init__ (parent , ** kwargs )
259+ self .fixedThresh = 50
260+ self .percThresh = 5
261+ self .useFixedThreshold = False
262+ self .filter0 = True
257263 self .setLayout (QVBoxLayout ())
258- self .sparse_thresh = 5
259- form = QFormLayout ()
260- self .cspin = QSpinBox (minimum = 1 , maximum = 100 , value = self .sparse_thresh )
261- self .cspin .valueChanged [int ].connect (self .setThresh )
262- self .cspin .editingFinished .connect (self .edited )
263264
264- form .addRow ("Min % of nonzero values:" , self .cspin )
265- self .layout ().addLayout (form )
265+ choose_filts = QGroupBox (title = 'Filter out features with too many:' )
266+ choose_filts .setLayout (QHBoxLayout ())
267+ self .filter_buttons = QButtonGroup (exclusive = True )
268+ self .filter_buttons .buttonClicked .connect (self .filterByClicked )
269+ for option , idx in zip (self .options , range (len (self .options ))):
270+ btn = QRadioButton (self , text = option , checked = idx == 0 )
271+ self .filter_buttons .addButton (btn , id = idx )
272+ choose_filts .layout ().addWidget (btn )
273+ self .layout ().addWidget (choose_filts )
274+
275+
276+ filter_settings = QGroupBox (title = 'Threshold settings:' , flat = True )
277+ filter_settings .setLayout (QFormLayout ())
278+ self .settings_buttons = QButtonGroup (exclusive = True )
279+ self .settings_buttons .buttonClicked .connect (self .filterSettingsClicked )
280+
281+ btn_perc = QRadioButton (self , text = 'Max %: ' , checked = not self .useFixedThreshold )
282+ self .settings_buttons .addButton (btn_perc , id = 0 )
283+ self .percSpin = QSpinBox (minimum = 0 , maximum = 100 , value = self .percThresh ,
284+ enabled = not self .useFixedThreshold )
285+ self .percSpin .valueChanged [int ].connect (self .setPercThresh )
286+ self .percSpin .editingFinished .connect (self .edited )
287+ filter_settings .layout ().addRow (btn_perc , self .percSpin )
288+
289+ btn_fix = QRadioButton (self , text = 'Max #: ' , checked = self .useFixedThreshold )
290+ self .settings_buttons .addButton (btn_fix , id = 1 )
291+ self .fixedSpin = QSpinBox (minimum = 0 , maximum = 1000000 , value = self .fixedThresh ,
292+ enabled = self .useFixedThreshold )
293+ self .fixedSpin .valueChanged [int ].connect (self .setFixedThresh )
294+ self .fixedSpin .editingFinished .connect (self .edited )
295+ filter_settings .layout ().addRow (btn_fix , self .fixedSpin )
296+
297+ self .layout ().addWidget (filter_settings )
298+
299+ def filterSettingsClicked (self ):
300+ self .setUseFixedThreshold (self .settings_buttons .checkedId ())
301+ self .percSpin .setEnabled (not self .useFixedThreshold )
302+ self .fixedSpin .setEnabled (self .useFixedThreshold )
303+ self .edited .emit ()
266304
267- def setThresh (self , thresh ):
268- if self .sparse_thresh != thresh :
269- self .sparse_thresh = thresh
270- self .cspin .setValue (thresh )
271- self .changed .emit ()
305+ def filterByClicked (self ):
306+ self .setFilter0 (self .filter_buttons .checkedId ())
307+
308+ def setFilter0 (self , id_ ):
309+ if self .filter0 != id_ :
310+ self .filter0 = id_
311+ self .edited .emit ()
312+
313+ def setFixedThresh (self , thresh ):
314+ if self .fixedThresh != thresh :
315+ self .fixedThresh = thresh
316+ self .fixedSpin .setValue (thresh )
317+ self .edited .emit ()
318+
319+ def setPercThresh (self , thresh ):
320+ if self .percThresh != thresh :
321+ self .percThresh = thresh
322+ self .percSpin .setValue (thresh )
323+ self .edited .emit ()
324+
325+ def setUseFixedThreshold (self , val ):
326+ if self .useFixedThreshold != val :
327+ self .useFixedThreshold = val
328+ self .edited .emit ()
272329
273330 def parameters (self ):
274- return {'sparse_thresh' : self .sparse_thresh }
331+ return {'fixedThresh' : self .fixedThresh ,
332+ 'percThresh' : self .percThresh ,
333+ 'useFixedThreshold' : self .useFixedThreshold ,
334+ 'filter0' : self .filter0 }
275335
276336 def setParameters (self , params ):
277- self .setThresh (params .get ('sparse_thresh' , 5 ))
337+ self .setPercThresh (params .get ('percThresh' , 5 ))
338+ self .setFixedThresh (params .get ('fixedThresh' , 50 ))
339+ self .setUseFixedThreshold (params .get ('useFixedThreshold' , False ))
340+ self .setFilter0 (params .get ('filter0' , True ))
278341
279342 @staticmethod
280343 def createinstance (params ):
281344 params = dict (params )
282- threshold = params .pop ('sparse_thresh' , 5 )
283- return RemoveSparse (threshold = threshold / 100 )
345+ filter0 = params .pop ('filter0' , True )
346+ useFixedThreshold = params .pop ('useFixedThreshold' , True )
347+ if useFixedThreshold :
348+ threshold = params .pop ('fixedThresh' , 50 )
349+ else :
350+ threshold = params .pop ('percThresh' , 5 )
351+ return RemoveSparse (filter0 , useFixedThreshold , threshold = threshold )
284352
285353class ImputeEditor (BaseEditor ):
286354 (NoImputation , Constant , Average ,
0 commit comments