Ejemplo n.º 1
0
    def updateRulesModel(self):
        if self.classifier is not None:
            table = []
            for i, r in enumerate(self.classifier.rules):
                table.append(
                    (int(r.complexity), r.quality, r.classDistribution.abs,
                     str(r.classifier.defaultValue), r.classDistribution,
                     self.ruleText(r)))

            self.rulesTableModel = PyTableModel(table, self.headers)
            self.proxyModel.setSourceModel(self.rulesTableModel)

            self.tableView.resizeColumnsToContents()
            self.tableView.resizeRowsToContents()
Ejemplo n.º 2
0
    def __init__(self,
                 parent=None,
                 signalManager=None,
                 name="CN2 Rules Viewer"):
        OWWidget.__init__(self, parent, signalManager, name)
        self.inputs = [("Rule Classifier", orange.RuleClassifier,
                        self.setRuleClassifier)]
        self.outputs = [("Data", ExampleTable), ("Features", AttributeList)]

        self.show_Rule_length = True
        self.show_Rule_quality = True
        self.show_Coverage = True
        self.show_Predicted_class = True
        self.show_Distribution = True
        self.show_Rule = True

        self.autoCommit = False
        self.selectedAttrsOnly = True

        self.loadSettings()

        #####
        # GUI
        #####

        box = OWGUI.widgetBox(self.controlArea, "Show Info", addSpace=True)
        box.layout().setSpacing(3)
        self.headers = [
            "Rule length", "Rule quality", "Coverage", "Predicted class",
            "Distribution", "Rule"
        ]

        for i, header in enumerate(self.headers):
            OWGUI.checkBox(box,
                           self,
                           "show_%s" % header.replace(" ", "_"),
                           header,
                           tooltip="Show %s column" % header.lower(),
                           callback=self.updateVisibleColumns)

        box = OWGUI.widgetBox(self.controlArea, "Output")
        box.layout().setSpacing(3)
        cb = OWGUI.checkBox(box,
                            self,
                            "autoCommit",
                            "Commit on any change",
                            callback=self.commitIf)

        OWGUI.checkBox(box,
                       self,
                       "selectedAttrsOnly",
                       "Selected attributes only",
                       tooltip="Send selected attributes only",
                       callback=self.commitIf)

        b = OWGUI.button(box,
                         self,
                         "Commit",
                         callback=self.commit,
                         default=True)
        OWGUI.setStopper(self, b, cb, "changedFlag", callback=self.commit)

        OWGUI.rubber(self.controlArea)

        self.tableView = QTableView()
        self.tableView.setItemDelegate(PyObjectItemDelegate(self))
        self.tableView.setItemDelegateForColumn(1, PyFloatItemDelegate(self))
        self.tableView.setItemDelegateForColumn(2, PyFloatItemDelegate(self))
        self.tableView.setItemDelegateForColumn(4,
                                                DistributionItemDelegate(self))
        self.tableView.setItemDelegateForColumn(
            5, MultiLineStringItemDelegate(self))
        self.tableView.setSortingEnabled(True)
        self.tableView.setSelectionBehavior(QTableView.SelectRows)
        self.tableView.setAlternatingRowColors(True)

        self.rulesTableModel = PyTableModel([], self.headers)
        self.proxyModel = QSortFilterProxyModel(self)
        self.proxyModel.setSourceModel(self.rulesTableModel)

        self.tableView.setModel(self.proxyModel)
        self.connect(
            self.tableView.selectionModel(),
            SIGNAL("selectionChanged(QItemSelection, QItemSelection)"),
            lambda is1, is2: self.commitIf())
        self.connect(self.tableView.horizontalHeader(),
                     SIGNAL("sectionClicked(int)"),
                     lambda section: self.tableView.resizeRowsToContents())
        self.mainArea.layout().addWidget(self.tableView)

        self.updateVisibleColumns()

        self.changedFlag = False
        self.classifier = None
        self.rules = []
        self.resize(800, 600)