Beispiel #1
0
 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()
Beispiel #2
0
 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()
Beispiel #3
0
 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)
Beispiel #5
0
 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)
Beispiel #6
0
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)