⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 owsomvisualizer.py

📁 orange源码 数据挖掘技术
💻 PY
📖 第 1 页 / 共 3 页
字号:
                val=255-min(max(255*(self.uMat[i][j]-minDist)/(maxDist-minDist),10),245)
                r.setColor(QColor(val, val, val))
                self.canvasObj.append(r)
        self.resize(x+self.somMap.xDim*xa*2, y+self.somMap.yDim*ya*2)
        self.update()
        
    def updateLabels(self):
        for o in self.canvasObj:
            if o.hasNode and len(o.node.examples):
                if self.parent().labelNodes and o.node.classifier:
                    o.setLabel(str(o.node.classifier.defaultValue))
                else:
                    o.setLabel("")
            else:
                o.setLabel("")
        self.updateAll()

    def updateAll(self):
        self.setAllChanged()
        self.update()
        
    def clear(self):
        for o in self.canvasObj:
            o.setCanvas(None)
        self.canvasObj=[]


class OWSOMVisualizer(OWWidget):
    settingsList=["canvas.drawMode","canvas.objSize","commitOnChange", "backgroundMode", "backgroundCheck", "canvasView.includeCodebook", "canvasView.showBubbleInfo"]
    contextHandlers={"":DomainContextHandler("", [ContextField("attribute", DomainContextHandler.Optional),
                                                  ContextField("discHistMode", DomainContextHandler.Optional),
                                                  ContextField("contHistMode", DomainContextHandler.Optional),
                                                  ContextField("targetValue", DomainContextHandler.Optional),
                                                  ContextField("histogram", DomainContextHandler.Optional),
                                                  ContextField("inputSet", DomainContextHandler.Optional),
                                                  ContextField("canvas.component", DomainContextHandler.Optional),
                                                  ContextField("canvasView.includeCodebook", DomainContextHandler.Optional)])}
    def __init__(self, parent=None, signalManager=None, name="SOMVisualizer"):
        OWWidget.__init__(self, parent, signalManager, name)
        self.inputs=[("SOMMap", orangeom.SOMMap, self.setSomMap), ("SOMClassifier", orangeom.SOMClassifier, self.setSomClassifier), ("Examples", ExampleTable, self.data)]
        self.outputs=[("Examples", ExampleTable)]
        
        self.labelNodes=0
        self.commitOnChange=0
        self.backgroundCheck=1
        self.backgroundMode=0
        self.histogram=1
        self.attribute=0
        self.discHistMode=0
        self.targetValue=0
        self.contHistMode=0
        self.inputSet=0

        self.somMap=None
        self.examples=None
        
        
        layout=QVBoxLayout(self.mainArea,QVBoxLayout.TopToBottom,0)
        self.canvas=SOMCanvas(self)
        self.canvasView=SOMCanvasView(self, self.canvas, self.mainArea)
        self.canvasView.setCanvas(self.canvas)
        layout.addWidget(self.canvasView)
        
        self.loadSettings()
        call=lambda:self.canvas.redrawSom()
        tabW=QTabWidget(self.controlArea)
        mainTab=OWGUI.widgetBox(self.controlArea)
        histTab=OWGUI.widgetBox(self.controlArea)
        mainTab.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
        histTab.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
        self.mainTab=mainTab
        self.histTab=histTab
        tabW.addTab(mainTab, "Options")
        tabW.addTab(histTab, "Histogram Coloring")
        self.backgroundBox=QVButtonGroup("Background", mainTab)
        #OWGUI.checkBox(self.backgroundBox, self, "backgroundCheck","Show background", callback=self.setBackground)
        b=OWGUI.radioButtonsInBox(self.backgroundBox, self, "canvas.drawMode", ["None", "U-Matrix", "Component Planes"], callback=self.setBackground)
        b.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
        self.componentCombo=OWGUI.comboBox(b,self,"canvas.component", callback=self.setBackground)
        self.componentCombo.setEnabled(self.canvas.drawMode==2)
        OWGUI.checkBox(self.backgroundBox, self, "canvas.showGrid", "Show Grid", callback=self.canvas.updateAll)
        #b=OWGUI.widgetBox(mainTab, "Histogram")
        b=QVButtonGroup("Histogram", mainTab)
        b.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
        OWGUI.checkBox(b, self, "histogram", "Show histogram", callback=self.setHistogram)
        OWGUI.radioButtonsInBox(b, self, "inputSet", ["Use training set", "Use input subset"], callback=self.setHistogram)
        
        b1=QVBox(mainTab)
        b1.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
        b=OWGUI.hSlider(b1, self, "canvas.objSize","Plot size", 10,100,step=10,ticks=10, callback=call)
        b.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
        #OWGUI.checkBox(b1, self, "labelNodes", "Node Labeling", callback=self.canvas.updateLabels)
        b1=OWGUI.widgetBox(b1, "Bubble Info")
        OWGUI.checkBox(b1, self, "canvasView.showBubbleInfo","Show")
        OWGUI.checkBox(b1, self, "canvasView.includeCodebook", "Include codebook vector")
        b1.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
        
        #OWGUI.checkBox(mainTab, self, "commitOnChange", "Commit on change")
        QVBox(mainTab)
        self.histogramBox=OWGUI.widgetBox(histTab, "Coloring")
        self.attributeCombo=OWGUI.comboBox(self.histogramBox, self, "attribute", "Attribute", callback=self.setHistogram)
        self.tabWidget=QTabWidget(self.histogramBox)
        self.discTab=discTab=OWGUI.widgetBox(self.histogramBox)
        self.contTab=contTab=OWGUI.widgetBox(self.histogramBox)
        self.tabWidget.addTab(discTab, "Discrete")
        self.tabWidget.addTab(contTab, "Continous")
        b=QVButtonGroup(discTab)
        b.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
        OWGUI.radioButtonsInBox(b, self, "discHistMode", ["Pie chart", "Majority value", "Majority value prob."], callback=self.setHistogram)
        #self.targetValueCombo=OWGUI.comboBox(b, self, "targetValue", callback=self.setHistogram)
        QVBox(discTab)
        b=QVButtonGroup(contTab)
        b.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
        OWGUI.radioButtonsInBox(b, self, "contHistMode", ["Default", "Avg. value"],callback=self.setHistogram)
        QVBox(contTab)
 
        b=OWGUI.widgetBox(self.controlArea, "Selection")
        OWGUI.button(b, self, "&Invert selection", callback=self.canvasView.invertSelection)
        OWGUI.button(b, self, "&Commit", callback=self.commit)
        OWGUI.checkBox(b, self, "commitOnChange", "Commit on change")
        OWGUI.button(self.controlArea, self, "&Save Graph", callback=self.saveGraph, debuggingEnabled = 0)
        
        self.selectionList=[]
        self.ctrlPressed=False
        self.setFocusPolicy(QWidget.StrongFocus)
        self.resize(600,600)

    def setMode(self):
        self.componentCombo.setEnabled(self.canvas.drawMode==2)
        self.canvas.redrawSom()

    def setBackground(self):
        self.setMode()

    def setHistogram(self):
        if not self.somMap: return
        if self.somMap.examples.domain.variables[self.attribute].varType==orange.VarTypes.Discrete:
            self.tabWidget.setTabEnabled(self.discTab,True)
            self.tabWidget.setTabEnabled(self.contTab,False)
            self.tabWidget.showPage(self.discTab)
        else:
            self.tabWidget.setTabEnabled(self.discTab,False)
            self.tabWidget.setTabEnabled(self.contTab,True)
            self.tabWidget.showPage(self.contTab)
        self.canvas.redrawSom()

    def drawPies(self):
        return self.discHistMode==0 and self.somMap.examples.domain.variables[self.attribute].varType==orange.VarTypes.Discrete
        
    def setSomMap(self, somMap=None):
        self.somType="Map"
        self.setSom(somMap)
        
    def setSomClassifier(self, somMap=None):
        self.somType="Classifier"
        self.setSom(somMap)
        
    def setSom(self, somMap=None):
        self.closeContext()
        self.somMap=somMap
        if not somMap:
            self.clear()
            return
        self.componentCombo.clear()
        self.attributeCombo.clear()
        #self.targetValueCombo.clear()
        self.targetValue=0
        self.canvas.component=0
        self.attribute=0
        for v in somMap.examples.domain.attributes:
            self.componentCombo.insertItem(v.name)
        for v in somMap.examples.domain.variables:
            self.attributeCombo.insertItem(v.name)
        #for v in somMap.examples.domain.attributes[self.attribute].values:
        #    self.targetValueCombo.insertItem(str(v))

        if self.somMap.examples.domain.variables[self.attribute].varType==orange.VarTypes.Discrete:
            self.tabWidget.setTabEnabled(self.discTab,True)
            self.tabWidget.setTabEnabled(self.contTab,False)
            self.tabWidget.showPage(self.discTab)
        else:
            self.tabWidget.setTabEnabled(self.discTab,False)
            self.tabWidget.setTabEnabled(self.contTab,True)
            self.tabWidget.showPage(self.contTab)        
        self.openContext("", somMap.examples)
        self.canvas.setSom(somMap)
       
    def data(self, data=None):
        self.examples=data
        if data and self.somMap:
            for n in self.somMap.nodes:
                setattr(n,"mappedExamples", orange.ExampleTable(data.domain))
            for e in data:
                bmu=self.somMap.getWinner(e)
                bmu.mappedExamples.append(e)
            if self.inputSet==1:
                self.setHistogram()
                

    def clear(self):
        self.canvasView.clearSelection()
        self.componentCombo.clear()
        self.canvas.component=0
        self.canvas.setSom(None)
        self.send("Examples", None)
        
    def updateSelection(self, nodeList):
        self.selectionList=nodeList
        if self.commitOnChange:
            self.commit()
            
    def commit(self):
        if not self.somMap: return
        ex=orange.ExampleTable(self.somMap.examples.domain)
        for n in self.selectionList:
            if self.inputSet==0 and n.examples:
                ex.extend(n.examples)
            elif self.inputSet==1 and n.mappedExamples:
                ex.extend(n.mappedExamples)
        if len(ex):
            self.send("Examples",ex)
        else:
            self.send("Examples",None)

    def saveGraph(self):
        sizeDlg = OWChooseImageSizeDlg(self.canvas)
        sizeDlg.exec_loop()
        return
        
    def keyPressEvent(self, event):
        if event.key()==Qt.Key_Control:
            self.ctrlPressed=True
        else:
            event.ignore()
      
    def keyReleaseEvent(self, event):
        if event.key()==Qt.Key_Control:
            self.ctrlPressed=False
        else:
            event.ignore()
        
        
if __name__=="__main__":
    ap=QApplication(sys.argv)
    data=orange.ExampleTable("../../doc/datasets/iris.tab")
    l=orngSOM.SOMLearner( topology=orangeom.SOMLearner.RectangularTopology)
    l=l(data)
    l.data=data
    w=OWSOMVisualizer()
    ap.setMainWidget(w)
    w.setSomClassifier(l)
    w.data(orange.ExampleTable(data[:50]))
    w.show()
    ap.exec_loop()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -