Changeset 10949:9d71fb526827 in orange


Ignore:
Timestamp:
07/12/12 14:10:38 (22 months ago)
Author:
Peter Husen <phusen@…>
Branch:
default
Message:

Added pivot table output to Pivot widget

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeWidgets/Prototypes/OWPivot.py

    r9671 r10949  
    2626        OWWidget.__init__(self, parent, signalManager, "Pivot") 
    2727        self.inputs = [("Data", ExampleTable, self.setData, Default)] 
    28         self.outputs = [("Selected Group", ExampleTable, Default)] 
     28        self.outputs = [("Selected Group", ExampleTable, Default), ("Pivot Table", ExampleTable)] 
    2929        self.settingsList = [a[1] for a in self.aggregates] 
    3030        self.icons = self.createAttributeIconDict()  
     
    175175                w.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter) 
    176176                self.table.setItem(0, coli, w) 
    177  
     177             
     178            outdata = [] 
     179            outsets = [set() for col in self.horizontalValues] 
    178180            rrowi = 1 
    179181            for rowi, row in enumerate(self.stats): 
     
    193195                    self.table.setItem(rrowi, 1, w) 
    194196                    values = self.rowData(shw, row) 
     197                    if shw and not lastRow: 
     198                        if vtype == disctype: 
     199                            outvalues = [str(v) for v in values[:-1]] 
     200                            for p in zip(outsets,outvalues): 
     201                                p[0].add(p[1]) 
     202                        else: 
     203                            outvalues = values[:-1] 
     204                        outdata.append([verticalValues[rowi],shw] + outvalues) 
    195205                    for coli, val in enumerate(values): 
    196206                        w = QTableWidgetItem(val) 
     
    203213            self.table.resizeColumnsToContents() 
    204214            self.table.resizeRowsToContents() 
     215             
     216            aggfeature = Orange.feature.Descriptor.make("(Aggregate)", Orange.feature.Type.Discrete, [a[0] for a in self.aggregates])[0] 
     217            if vtype == disctype: 
     218                features = [ Orange.feature.Descriptor.make(p[0], vtype, list(p[1]))[0] for p in zip(self.horizontalValues,outsets)] 
     219            else: 
     220                features = [ Orange.feature.Descriptor.make(name, vtype)[0] for name in self.horizontalValues] 
     221            domain = Orange.data.Domain([self.data.domain[self.rowAttribute], aggfeature] + features) 
     222            outtable = Orange.data.Table(domain, outdata) if outdata else Orange.data.Table(domain) 
     223            self.send("Pivot Table", outdata) 
    205224         
    206225    def selectionChanged(self): 
     
    251270            res += '</table>' 
    252271            self.reportRaw(res) 
     272 
     273 
     274if __name__ == "__main__": 
     275    import sys 
     276    app = QApplication(sys.argv) 
     277    w = OWPivot() 
     278    w.show() 
     279    data = Orange.data.Table("adult.tab") 
     280    w.setData(data) 
     281    app.exec_() 
     282    w.setData(None) 
     283    w.saveSettings() 
     284     
Note: See TracChangeset for help on using the changeset viewer.