Changeset 11354:daead04df646 in orange


Ignore:
Timestamp:
02/22/13 19:42:02 (14 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Ported to new Orange namespace hierarchy (orange2to25).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeWidgets/Unsupervised/OWHierarchicalClustering.py

    r11353 r11354  
    99from __future__ import with_statement 
    1010 
     11import sys 
    1112import os 
    12 import math 
    1313from operator import add 
    1414 
    1515import numpy 
    1616 
    17 from OWWidget import * 
     17from PyQt4.QtGui import * 
     18from PyQt4.QtCore import * 
     19 
     20from OWWidget import OWWidget, DomainContextHandler, ContextField 
    1821from OWQCanvasFuncts import * 
    1922import OWClustering 
     
    2124import OWColorPalette 
    2225 
    23 import orange 
    24 from Orange.clustering import hierarchical 
    25  
    2626from OWDlgs import OWChooseImageSizeDlg 
    2727from OWGraphics import GraphicsSimpleTextList 
    2828 
    29 from PyQt4.QtCore import * 
    30 from PyQt4.QtGui import * 
     29import Orange 
     30from Orange.clustering import hierarchical 
    3131 
    3232 
     
    4848                          'Hierarchical Clustering', wantGraph=True) 
    4949 
    50         self.inputs = [("Distances", orange.SymMatrix, self.set_matrix)] 
    51         self.outputs = [("Selected Data", ExampleTable), 
    52                         ("Other Data", ExampleTable), 
    53                         ("Centroids", ExampleTable)] 
     50        self.inputs = [("Distances", Orange.misc.SymMatrix, self.set_matrix)] 
     51 
     52        self.outputs = [("Selected Data", Orange.data.Table), 
     53                        ("Other Data", Orange.data.Table), 
     54                        ("Centroids", Orange.data.Table)] 
    5455 
    5556        self.linkage = [ 
    56             ("Single linkage", orange.HierarchicalClustering.Single), 
    57             ("Average linkage", orange.HierarchicalClustering.Average), 
    58             ("Ward's linkage", orange.HierarchicalClustering.Ward), 
    59             ("Complete linkage", orange.HierarchicalClustering.Complete), 
     57            ("Single linkage", hierarchical.HierarchicalClustering.Single), 
     58            ("Average linkage", hierarchical.HierarchicalClustering.Average), 
     59            ("Ward's linkage", hierarchical.HierarchicalClustering.Ward), 
     60            ("Complete linkage", hierarchical.HierarchicalClustering.Complete), 
    6061        ] 
    6162 
     
    9495        #HC Settings 
    9596        OWGUI.comboBox(self.controlArea, self, "Linkage", box="Linkage", 
    96                 items=self.linkageMethods, tooltip="Choose linkage method", 
    97                 callback=self.run_clustering, addSpace=True) 
     97                       items=self.linkageMethods, 
     98                       tooltip="Choose linkage method", 
     99                       callback=self.run_clustering, 
     100                       addSpace=True) 
    98101        #Label 
    99102        box = OWGUI.widgetBox(self.controlArea, "Annotation", addSpace=True) 
     
    106109 
    107110        OWGUI.spin(box, self, "TextSize", label="Text size", 
    108                         min=5, max=15, step=1, 
    109                         callback=self.update_font, 
    110                         controlWidth=40, 
    111                         keyboardTracking=False) 
     111                   min=5, max=15, step=1, 
     112                   callback=self.update_font, 
     113                   controlWidth=40, 
     114                   keyboardTracking=False) 
    112115 
    113116        # Dendrogram graphics settings 
     
    218221 
    219222        self.connect(self.dendrogram, 
    220                     SIGNAL("dendrogramGeometryChanged(QRectF)"), 
    221                     self.on_dendrogram_geometry_change) 
     223                     SIGNAL("dendrogramGeometryChanged(QRectF)"), 
     224                     self.on_dendrogram_geometry_change) 
    222225 
    223226        self.connect(self.dendrogram, 
     
    269272             self.PrintDepthCheck and ("Shown depth limited to", 
    270273                                       self.PrintDepth), 
    271              self.SelectionMode and hasattr(self, "cutoff_height") and \ 
     274             self.SelectionMode and hasattr(self, "cutoff_height") and 
    272275             ("Cutoff line at", self.cutoff_height)] 
    273276        ) 
     
    279282        canvases = header, graph, footer 
    280283 
    281         buffer = QPixmap(max(c.width() for c in canvases), 
     284        pixmap = QPixmap(max(c.width() for c in canvases), 
    282285                         sum(c.height() for c in canvases)) 
    283286 
    284         painter = QPainter(buffer) 
    285         painter.fillRect(buffer.rect(), QBrush(QColor(255, 255, 255))) 
     287        painter = QPainter(pixmap) 
     288        painter.fillRect(pixmap.rect(), QBrush(QColor(255, 255, 255))) 
    286289        header.render(painter, 
    287290                      QRectF(0, 0, header.width(), header.height()), 
     
    301304        def save_to(filename): 
    302305            _, ext = os.path.splitext(filename) 
    303             buffer.save(filename, ext[1:]) 
     306            pixmap.save(filename, ext[1:]) 
    304307 
    305308        self.reportImage(save_to) 
    306309 
    307310    def clear(self): 
     311        """ 
     312        Clear the widget state. 
     313        """ 
    308314        self.matrix = None 
    309315        self.root_cluster = None 
     
    313319 
    314320    def set_matrix(self, data): 
     321        """ 
     322        Set the input data matrix. 
     323        """ 
    315324        self.clear() 
    316325        self.matrix = data 
     
    323332            self.send("Selected Data", None) 
    324333            self.send("Other Data", None) 
     334            self.send("Centroids", None) 
    325335            self.classificationBox.setDisabled(True) 
    326336            return 
     
    328338        self.matrixSource = "Unknown" 
    329339        items = getattr(self.matrix, "items") 
    330         if isinstance(items, orange.ExampleTable): 
     340        if isinstance(items, Orange.data.Table): 
    331341            # Example Table from Example Distance 
    332342            domain = items.domain 
    333343            self.labels = ["None", "Default"] + \ 
    334344                          [a.name for a in domain.attributes] 
    335             if domain.classVar: 
    336                 self.labels.append(domain.classVar.name) 
     345            if domain.class_var: 
     346                self.labels.append(domain.class_var.name) 
    337347 
    338348            self.labelInd = range(len(self.labels) - 2) 
     
    372382        try: 
    373383            self.run_clustering() 
    374         except orange.KernelException, ex: 
     384        except Orange.core.KernelException, ex: 
    375385            self.error(0, "Could not cluster data! %s" % ex.message) 
    376386            self.setMatrix(None) 
     
    395405                labels = [str(item) for item in items] 
    396406 
    397         elif self.Annotation > 1 and isinstance(items, ExampleTable): 
    398             attr = self.labelInd[min(self.Annotation - 2, len(self.labelInd) - 1)] 
     407        elif self.Annotation > 1 and isinstance(items, Orange.data.Table): 
     408            attr = self.labelInd[min(self.Annotation - 2, 
     409                                     len(self.labelInd) - 1)] 
    399410            labels = [str(ex[attr]) for ex in items] 
    400411        else: 
     
    410421 
    411422            self.progressBarInit() 
    412             self.root_cluster = orange.HierarchicalClustering( 
     423            self.root_cluster = hierarchical.HierarchicalClustering( 
    413424                self.matrix, 
    414425                linkage=self.linkage[self.Linkage][1], 
     
    553564            return 
    554565 
    555         if isinstance(items, ExampleTable): 
     566        new_meta_id = Orange.feature.Descriptor.new_meta_id 
     567 
     568        if isinstance(items, Orange.data.Table): 
    556569            c = [i for i in range(len(maps)) for j in maps[i]] 
    557570            aid = clustVar = None 
    558571            if self.AppendClusters: 
    559                 clustVar = orange.EnumVariable( 
     572                clustVar = Orange.feature.Discrete( 
    560573                    str(self.ClassifyName), 
    561574                    values=["Cluster " + str(i) for i in range(len(maps))] + \ 
     
    565578                origDomain = items.domain 
    566579                if self.addIdAs == 0: 
    567                     domain = orange.Domain(origDomain.attributes, clustVar) 
    568                     if origDomain.classVar: 
    569                         domain.addmeta(orange.newmetaid(), origDomain.classVar) 
     580                    domain = Orange.data.Domain(origDomain.attributes, 
     581                                                clustVar) 
     582                    if origDomain.class_var: 
     583                        domain.addmeta(new_meta_id(), origDomain.class_var) 
    570584                    aid = -1 
    571585                elif self.addIdAs == 1: 
    572                     domain = orange.Domain(origDomain.attributes + [clustVar], 
    573                                            origDomain.classVar) 
     586                    domain = Orange.data.Domain(origDomain.attributes + \ 
     587                                                [clustVar], 
     588                                                origDomain.class_var) 
    574589 
    575590                    aid = len(origDomain.attributes) 
    576591                else: 
    577                     domain = orange.Domain(origDomain.attributes, 
    578                                            origDomain.classVar) 
    579  
    580                     aid = orange.newmetaid() 
     592                    domain = Orange.data.Domain(origDomain.attributes, 
     593                                                origDomain.class_var) 
     594 
     595                    aid = new_meta_id() 
    581596                    domain.addmeta(aid, clustVar) 
    582597 
     
    584599                table1 = table2 = None 
    585600                if selected: 
    586                     table1 = orange.ExampleTable(domain, selected) 
     601                    table1 = Orange.data.Table(domain, selected) 
    587602                    for i in range(len(selected)): 
    588603                        table1[i][clustVar] = clustVar("Cluster " + str(c[i])) 
    589604 
    590605                if unselected: 
    591                     table2 = orange.ExampleTable(domain, unselected) 
     606                    table2 = Orange.data.Table(domain, unselected) 
    592607                    for ex in table2: 
    593608                        ex[clustVar] = clustVar("Other") 
     
    597612            else: 
    598613                self.selectedExamples = \ 
    599                     orange.ExampleTable(selected) if selected else None 
     614                    Orange.data.Table(selected) if selected else None 
    600615 
    601616                self.unselectedExamples = \ 
    602                     orange.ExampleTable(unselected) if unselected else None 
     617                    Orange.data.Table(unselected) if unselected else None 
    603618 
    604619            self.send("Selected Data", self.selectedExamples) 
     
    607622            self.centroids = None 
    608623            if self.selectedExamples: 
    609                 self.centroids = orange.ExampleTable(self.selectedExamples.domain) 
     624                domain = self.selectedExamples.domain 
     625                self.centroids = Orange.data.Table(domain) 
    610626                for i in range(len(maps)): 
    611                     clusterEx = [ex for cluster, ex in zip(c, self.selectedExamples) 
     627                    clusterEx = [ex for cluster, ex in \ 
     628                                 zip(c, self.selectedExamples) 
    612629                                 if cluster == i] 
    613                     clusterEx = orange.ExampleTable(clusterEx) 
    614                     contstat = orange.DomainBasicAttrStat(clusterEx) 
    615                     discstat = orange.DomainDistributions(clusterEx, 0, 0, 1) 
     630                    clusterEx = Orange.data.Table(clusterEx) 
     631                    contstat = Orange.statistics.basic.Domain(clusterEx) 
     632                    discstat = Orange.statistics.distribution.Domain( 
     633                        clusterEx, 0, 0, 1 
     634                    ) 
     635 
    616636                    ex = [cs.avg if cs else (ds.modus() if ds else "?") 
    617637                          for cs, ds in zip(contstat, discstat)] 
    618                     example = orange.Example(self.centroids.domain, ex) 
     638 
     639                    example = Orange.data.Instance(domain, ex) 
    619640                    if clustVar is not None: 
    620641                        example[clustVar] = clustVar(i) 
    621642                    self.centroids.append(ex) 
     643 
    622644            self.send("Centroids", self.centroids) 
    623645 
     
    945967            right = geometry.width() + \ 
    946968                    metrics.boundingRect(ticks[-1]).width() / 2.0 
     969 
    947970            rect = QRectF(left, 0.0, right - left, h) 
    948971        else: 
     
    10381061    w = OWHierarchicalClustering() 
    10391062    w.show() 
    1040     data = orange.ExampleTable("../../doc/datasets/iris.tab") 
    1041     id = orange.newmetaid() 
    1042     data.domain.addmeta(id, orange.FloatVariable("a")) 
     1063    data = Orange.data.Table("iris") 
     1064    id = Orange.feature.Descriptor.new_meta_id() 
     1065    data.domain.addmeta(id, Orange.feature.Continuous("a")) 
    10431066    data.addMetaAttribute(id) 
    1044     matrix = orange.SymMatrix(len(data)) 
    1045     dist = orange.ExamplesDistanceConstructor_Euclidean(data) 
    1046     matrix = orange.SymMatrix(len(data)) 
     1067 
     1068    dist = Orange.distance.Euclidean() 
     1069    matrix = Orange.distance.distance_matrix(data, dist) 
    10471070    matrix.setattr('items', data) 
    1048     for i in range(len(data)): 
    1049         for j in range(i + 1): 
    1050             matrix[i, j] = dist(data[i], data[j]) 
    10511071 
    10521072    w.set_matrix(matrix) 
Note: See TracChangeset for help on using the changeset viewer.