def _add_controls(self): self.model_selected = VariableSelectionModel(self.selected_vars, max_vars=20) variables_selection(self.controlArea, self, self.model_selected) self.model_selected.selection_changed.connect( self.__model_selected_changed) self.vizrank, self.btn_vizrank = RadvizVizRank.add_vizrank( None, self, "Suggest features", self.vizrank_set_attrs) self.controlArea.layout().addWidget(self.btn_vizrank) super()._add_controls()
def _add_controls(self): box = gui.vBox(self.controlArea, box="特征") self.model_selected = VariableSelectionModel(self.selected_vars, max_vars=20) variables_selection(box, self, self.model_selected) self.model_selected.selection_changed.connect( self.__model_selected_changed) self.vizrank, self.btn_vizrank = RadvizVizRank.add_vizrank( None, self, "建议特征", self.vizrank_set_attrs) box.layout().addWidget(self.btn_vizrank) super()._add_controls()
def _add_controls(self): self.model_selected = VariableSelectionModel(self.selected_vars, max_vars=20) variables_selection(self.controlArea, self, self.model_selected) self.model_selected.selection_changed.connect( self.__model_selected_changed) self.vizrank, self.btn_vizrank = RadvizVizRank.add_vizrank( None, self, "建议特征", self.vizrank_set_attrs) self.controlArea.layout().addWidget(self.btn_vizrank) super()._add_controls() self.controlArea.layout().removeWidget(self.control_area_stretch) self.control_area_stretch.setParent(None)
def _add_controls_variables(self): self.model_selected = VariableSelectionModel(self.selected_vars) variables_selection(self.controlArea, self, self.model_selected) self.model_selected.selection_changed.connect( self.__model_selected_changed) self.vizrank, self.btn_vizrank = LinearProjectionVizRank.add_vizrank( None, self, "Suggest Features", self.__vizrank_set_attrs) self.controlArea.layout().addWidget(self.btn_vizrank)
def _add_controls_variables(self, box): self.model_selected = VariableSelectionModel(self.selected_vars) variables_selection(box, self, self.model_selected) self.model_selected.selection_changed.connect( self.__model_selected_changed) self.vizrank, self.btn_vizrank = LinearProjectionVizRank.add_vizrank( None, self, "建议特征", self.__vizrank_set_attrs) box.layout().addWidget(self.btn_vizrank)
class OWRadviz(OWAnchorProjectionWidget): name = "Radviz" description = "Display Radviz projection" icon = "icons/Radviz.svg" priority = 241 keywords = ["viz"] settings_version = 3 selected_vars = ContextSetting([]) vizrank = SettingProvider(RadvizVizRank) GRAPH_CLASS = OWRadvizGraph graph = SettingProvider(OWRadvizGraph) class Warning(OWAnchorProjectionWidget.Warning): invalid_embedding = widget.Msg("No projection for selected features") removed_vars = widget.Msg("Categorical variables with more than" " two values are not shown.") max_vars_selected = widget.Msg( "Maximum number of selected variables reached.") def _add_controls(self): self.model_selected = VariableSelectionModel(self.selected_vars, max_vars=20) variables_selection(self.controlArea, self, self.model_selected) self.model_selected.selection_changed.connect( self.__model_selected_changed) self.vizrank, self.btn_vizrank = RadvizVizRank.add_vizrank( None, self, "Suggest features", self.vizrank_set_attrs) self.controlArea.layout().addWidget(self.btn_vizrank) super()._add_controls() self.controlArea.layout().removeWidget(self.control_area_stretch) self.control_area_stretch.setParent(None) @property def primitive_variables(self): if self.data is None or self.data.domain is None: return [] dom = self.data.domain return [ v for v in chain(dom.variables, dom.metas) if v.is_continuous or v.is_discrete and len(v.values) == 2 ] @property def effective_variables(self): return self.selected_vars @property def effective_data(self): return self.data.transform(Domain(self.effective_variables)) def vizrank_set_attrs(self, *attrs): if not attrs: return self.selected_vars[:] = attrs # Ugly, but the alternative is to have yet another signal to which # the view will have to connect self.model_selected.selection_changed.emit() def __model_selected_changed(self): if self.model_selected.is_full(): self.Warning.max_vars_selected() else: self.Warning.max_vars_selected.clear() self.init_projection() self.setup_plot() self.commit() def colors_changed(self): super().colors_changed() self._init_vizrank() def set_data(self, data): super().set_data(data) self._init_vizrank() self.init_projection() def _init_vizrank(self): is_enabled = self.data is not None and \ len(self.primitive_variables) > 3 and \ self.attr_color is not None and \ not np.isnan(self.data.get_column_view( self.attr_color)[0].astype(float)).all() and \ np.sum(np.all(np.isfinite(self.data.X), axis=1)) > 1 and \ np.all(np.nan_to_num(np.nanstd(self.data.X, 0)) != 0) self.btn_vizrank.setEnabled(is_enabled) if is_enabled: self.vizrank.initialize() def check_data(self): super().check_data() if self.data is not None: domain = self.data.domain vars_ = chain(domain.variables, domain.metas) n_vars = sum(v.is_primitive() for v in vars_) if len(self.primitive_variables) < n_vars: self.Warning.removed_vars() def init_attr_values(self): super().init_attr_values() self.selected_vars[:] = self.primitive_variables[:5] self.model_selected[:] = self.primitive_variables def _manual_move(self, anchor_idx, x, y): angle = np.arctan2(y, x) super()._manual_move(anchor_idx, np.cos(angle), np.sin(angle)) def _send_components_x(self): components_ = super()._send_components_x() angle = np.arctan2(*components_[::-1]) return np.row_stack((components_, angle)) def _send_components_metas(self): return np.vstack((super()._send_components_metas(), ["angle"])) def clear(self): super().clear() self.projector = RadViz() @classmethod def migrate_context(cls, context, version): values = context.values if version < 2: values["attr_color"] = values["graph"]["attr_color"] values["attr_size"] = values["graph"]["attr_size"] values["attr_shape"] = values["graph"]["attr_shape"] values["attr_label"] = values["graph"]["attr_label"] if version < 3 and "selected_vars" in values: values["selected_vars"] = (values["selected_vars"], -3)