source: orange/orange/OrangeWidgets/Prototypes/OWLogTransform.py @ 6915:77d72c49567f

Revision 6915:77d72c49567f, 3.1 KB checked in by janezd <janez.demsar@…>, 4 years ago (diff)
Line 
1"""<name>Log Transform</name>
2<description>Logarithmic transformation of attributes</description>
3<icon>icons/LogTransform.png</icon>
4<priority>30</priority>
5<contact>Janez Demsar (janez.demsar@fri.uni-lj.si)</contact>"""
6
7from OWWidget import *
8from OWGUI import *
9from math import log
10
11class OWLogTransform(OWWidget):
12    # We cannot put attribute selection to context settings; see comment at func settingsFromWidget
13    contextHandlers = {"": PerfectDomainContextHandler("", ["transformed"])}
14
15    def __init__(self,parent=None, signalManager = None):
16        OWWidget.__init__(self, parent, signalManager, "Compare Examples")
17        self.inputs = [("Examples", ExampleTable, self.setData, Default)]
18        self.outputs = [("Examples", ExampleTable, Default)]
19       
20        self.transformed = []
21        self.controlArea.setFixedWidth(0)
22       
23        self.pushing = False
24
25        self.table = OWGUI.table(self.mainArea, rows = 0, columns = 0, selectionMode = QTableWidget.SingleSelection)
26        self.table.setColumnCount(3)
27        self.table.setHorizontalHeaderLabels(["Attribute", "Skewness", "Kurtosis"])
28        self.table.verticalHeader().hide()
29        self.connect(self.table, SIGNAL("itemChanged(QTableWidgetItem *)"), self.checksChanged)
30
31        self.setFixedSize(280, 500)
32
33    def setData(self, data):
34        self.closeContext()
35        self.data = data
36        if data:
37            self.table.show()
38            self.contAttrs = [attr for attr in data.domain if attr.varType == orange.Variable.Continuous]
39            self.basStat = orange.DomainBasicAttrStat(self.data)
40            self.table.setRowCount(len(self.contAttrs))
41            row = 0
42            self.pushing = True
43            for stat in self.basStat:
44                if stat:
45                    var = stat.variable
46                    it = QTableWidgetItem(" "+var.name)
47                    it.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
48                    it.setCheckState(Qt.Unchecked)
49                    self.table.setItem(row, 0, it)
50                    row += 1 
51       
52            self.table.resizeColumnsToContents()
53            self.table.resizeRowsToContents()
54        else:
55            self.table.hide()
56        self.pushing = False
57        self.checksChanged()
58        self.adjustSize()
59        self.openContext("", data)
60
61    def checksChanged(self, *x):
62        import sys
63        if not self.pushing:
64            transs = {}
65            for i, attr in enumerate(self.contAttrs):
66                if self.table.item(i, 0).checkState()==Qt.Checked:
67                    newAttr = orange.FloatVariable("log"+attr.name)
68                    newAttr.getValueFrom = lambda ex, foo=0, at=attr, newAt=newAttr: orange.Value(newAt, log(ex[at]) if not ex[at].isSpecial() and ex[at]>0 else "?")
69                    transs[attr.name] = newAttr
70            oldDomain = self.data.domain
71            newDomain = orange.Domain([transs.get(attr.name, attr) for attr in oldDomain.attributes],
72                                      transs.get(oldDomain.classVar.name, oldDomain.classVar))
73            self.send("Examples", orange.ExampleTable(newDomain, self.data))
Note: See TracBrowser for help on using the repository browser.