source: orange/orange/OrangeWidgets/Unsupervised/OWModelEmbedder.py @ 9546:2b6cc6f397fe

Revision 9546:2b6cc6f397fe, 4.9 KB checked in by ales_erjavec <ales.erjavec@…>, 2 years ago (diff)

Renamed widget channel names in line with the new naming rules/convention.
Added backwards compatibility in orngDoc loadDocument to enable loading of schemas saved before the change.

Line 
1"""
2<name>Model Embedder</name>
3<description>Embeds a model widget</description>
4<contact>Miha Stajdohar (miha.stajdohar(@at@)gmail.com)</contact>
5<icon>icons/DistanceFile.png</icon>
6<priority>6530</priority>
7"""
8
9import sip
10
11from OWWidget import *
12
13import OWGUI
14import orange
15
16import OWScatterPlot
17import OWRadviz
18import OWLinProj
19import OWPolyviz
20import OWClassificationTreeGraph
21import OWNomogram
22import OWMDS
23
24class OWModelEmbedder(OWWidget):
25    settingsList = []
26
27    def __init__(self, parent=None, signalManager = None):
28        OWWidget.__init__(self, parent, signalManager, "Model Embedder")
29       
30        self.inputs = [("Data", orange.ExampleTable, self.setData),
31                       ("Model", orange.Example, self.setModel)]
32       
33        self.outputs = [("Selected Data", ExampleTable), ("Other Data", ExampleTable)]
34       
35        self.ow = None
36        self.data = None
37        self.model = None
38       
39        self.loadSettings()
40       
41        self.widgets = {}
42       
43    def setData(self, data):
44        self.data = data
45        self.showWidget()
46       
47    def setModel(self, model):
48        self.model = model
49        self.showWidget()
50       
51    def setWidget(self, widgetType):
52        if str(widgetType) in self.widgets:
53            self.ow = self.widgets[str(widgetType)]
54        else:
55            self.ow = widgetType(self) 
56            self.widgets[str(widgetType)] = self.ow
57        return self.ow
58               
59    def showWidget(self):
60        self.information()
61       
62        if self.ow is not None:
63            self.ow.topWidgetPart.hide()
64            self.ow.setLayout(self.layout())
65        elif self.layout() is not None: 
66            sip.delete(self.layout())
67           
68        self.ow = None
69        if self.data is None: 
70            self.information("No learning data given.")
71            return
72        if self.model is None: return
73        if "model" not in self.model.domain: return
74        if "attributes" in self.model.domain:
75            attr = self.model["attributes"].value.split(', ')
76       
77        modelType = self.model["model"].value.upper()
78       
79        projWidget = None
80        if modelType == "SCATTERPLOT" or modelType == "SCATTTERPLOT": 
81            projWidget = self.setWidget(OWScatterPlot.OWScatterPlot)
82
83        if modelType == "RADVIZ":
84            projWidget = self.setWidget(OWRadviz.OWRadviz) 
85           
86        if modelType == "POLYVIZ": 
87            projWidget = self.setWidget(OWPolyviz.OWPolyviz) 
88           
89        if projWidget is not None:
90            self.ow.setData(self.data)
91            self.ow.setShownAttributes(attr)
92            self.ow.handleNewSignals() 
93       
94        ################################
95        ### add new model types here ###
96        ################################
97       
98        if modelType == "SPCA" or modelType == "LINPROJ": 
99            self.setWidget(OWLinProj.OWLinProj) 
100            self.ow.setData(self.data)
101            self.ow.setShownAttributes(attr)
102            self.ow.handleNewSignals() 
103            xAnchors, yAnchors = self.model["anchors"].value
104            self.ow.updateGraph(None, setAnchors=1, XAnchors=xAnchors, YAnchors=yAnchors)
105           
106        if modelType == "TREE":
107            self.setWidget(OWClassificationTreeGraph.OWClassificationTreeGraph)
108            classifier = self.model["classifier"].value
109            self.ow.ctree(classifier)
110           
111        if modelType == "BAYES":
112            self.setWidget(OWNomogram.OWNomogram) 
113            classifier = self.model["classifier"].value
114            self.ow.classifier(classifier)
115           
116        if modelType == "KNN":
117            exclude = [att for att in self.data.domain if att.name not in attr + [self.data.domain.classVar.name]]
118            data2 = orange.Preprocessor_ignore(self.data, attributes = exclude)
119            dist = orange.ExamplesDistanceConstructor_Euclidean(data2)
120            smx = orange.SymMatrix(len(data2))
121            smx.setattr('items', data2)
122            pb = OWGUI.ProgressBar(self, 100)
123            milestones = orngMisc.progressBarMilestones(len(data2)*(len(data2)-1)/2, 100)
124            count = 0
125            for i in range(len(data2)):
126                for j in range(i+1):
127                    smx[i, j] = dist(data2[i], data2[j])
128                    if count in milestones:
129                        pb.advance()
130                    count += 1
131            pb.finish()
132            self.setWidget(OWMDS.OWMDS)
133            self.ow.cmatrix(smx)
134           
135        if self.ow is not None:
136            self.ow.send = self.send
137            if self.layout() is not None: sip.delete(self.layout())
138            self.setLayout(self.ow.layout())
139            self.ow.topWidgetPart.show()
140       
141        self.update()
142       
143       
144if __name__ == "__main__":
145    import sys
146    from PyQt4 import QtGui
147   
148    app = QtGui.QApplication(sys.argv)
149    view = OWModelEmbedder()
150    view.show()
151    view.setWindowTitle("Model Embedder")
152    sys.exit(app.exec_())
Note: See TracBrowser for help on using the repository browser.