Changeset 1843:beaf2389bf47 in orange-bioinformatics


Ignore:
Timestamp:
08/14/13 09:54:31 (8 months ago)
Author:
Flashpoint <vid.flashpoint@…>
Branch:
default
Message:

Merged separate calls to hierarchical clustering for x and y into a single call with an additional parameter in OWHeatMap.py. Changed the progress callback for the Y axis.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _bioinformatics/widgets/OWHeatMap.py

    r1842 r1843  
    7676    return groups.items() 
    7777 
    78  
    79 #Rows separately 
    80 def hierarchical_cluster_ordering_data(data, group_domains=None, opt_order=False, progress_callback=None): 
     78def hierarchical_cluster_ordering(data, dimension, group_domains=None, opt_order=False, progress_callback=None): 
    8179    classVar = data.domain.classVar 
    8280    if classVar and isinstance(classVar, orange.EnumVariable): 
     
    10098    else: 
    10199        stacked = data     
    102                 
    103     def indices_map(indices): 
    104         map = zip(range(len(indices)), indices) 
    105         map = [i for i, test in map if test] 
    106         return dict(enumerate(map)) 
    107      
    108     data_ordering = [] 
    109     data_clusters = [] 
    110     for i, indices in enumerate(class_data): 
    111         sub_data = data.select(indices) 
    112         cluster = orngClustering.hierarchicalClustering(sub_data, order=opt_order, progressCallback=pp_callback(i + 1)) 
    113         ind_map = indices_map(indices) 
    114         data_ordering.append([ind_map[m] for m in cluster.mapping]) 
    115         data_clusters.append(cluster) 
    116          
    117     return data_ordering, data_clusters   
    118  
    119 #Columns separately 
    120 def hierarchical_cluster_ordering_attr(data, group_domains=None, opt_order=False, progress_callback=None): 
    121     classVar = data.domain.classVar 
    122     if classVar and isinstance(classVar, orange.EnumVariable): 
    123         class_data = [select_by_class_indices(data, val) for val in data.domain.classVar.values] 
    124     else: 
    125         class_data = [[1] * len(data)] 
    126          
    127     parts = len(class_data) + 1  
    128      
    129     def pp_callback(part): 
    130         def callback(value): 
    131             return progress_callback(value / parts + 100.0 * part / parts) 
    132         if progress_callback: 
    133             callback(100.0 * part / parts) 
    134             return callback 
    135         else: 
    136             return progress_callback 
    137          
    138     if group_domains is not None and len(group_domains) > 1: 
    139         stacked = vstack_by_subdomain(data, group_domains) 
    140     else: 
    141         stacked = data     
    142          
    143     attr_cluster = orngClustering.hierarchicalClustering_attributes(stacked, order=opt_order, progressCallback=pp_callback(0)) 
    144     attr_ordering = list(attr_cluster.mapping) 
     100     
     101    if dimension == 'X': 
     102 
     103        def indices_map(indices): 
     104            map = zip(range(len(indices)), indices) 
     105            map = [i for i, test in map if test] 
     106            return dict(enumerate(map)) 
     107         
     108        data_ordering = [] 
     109        data_clusters = [] 
     110        for i, indices in enumerate(class_data): 
     111            sub_data = data.select(indices) 
     112            cluster = orngClustering.hierarchicalClustering(sub_data, order=opt_order, progressCallback=pp_callback(i + 1)) 
     113            ind_map = indices_map(indices) 
     114            data_ordering.append([ind_map[m] for m in cluster.mapping]) 
     115            data_clusters.append(cluster) 
     116             
     117        return data_ordering, data_clusters  
     118 
     119    if dimension == 'Y': 
     120        attr_cluster = orngClustering.hierarchicalClustering_attributes(stacked, order=opt_order, progressCallback=pp_callback(3)) 
     121        attr_ordering = list(attr_cluster.mapping) 
    145122            
    146     return attr_ordering, attr_cluster 
    147  
     123        return attr_ordering, attr_cluster 
    148124 
    149125############################################################################## 
     
    296272        OWGUI.separator(settingsTab) 
    297273         
     274         
     275        boxy = OWGUI.widgetBox(settingsTab, "Sorting", orientation = "vertical", addSpace=True) 
     276 
    298277        # For examples 
    299         OWGUI.comboBox(settingsTab, self, "SortExamples", "Sort Examples", 
     278        OWGUI.comboBox(boxy, self, "SortExamples", 
    300279                        items=["No sorting", "Sort examples", "Clustering", 
    301                                "Clustering with leaf ordering"], 
     280                               "Clustering with leaf ordering"], label='X axis', 
    302281                               callback=self.update_sorting_examples) 
    303282         
    304283        # For attributes 
    305         OWGUI.comboBox(settingsTab, self, "SortAttributes", "Sort Attributes", 
     284        OWGUI.comboBox(boxy, self, "SortAttributes",  
    306285                        items=["No sorting", "Clustering", 
    307                                "Clustering with leaf ordering"], 
     286                               "Clustering with leaf ordering"], label='Y axis', 
    308287                               callback=self.update_sorting_attributes) 
    309288         
     
    650629        sorted_data = data 
    651630 
     631        # Only rows 
    652632        if self.SortExamples > 1: 
    653633            self.progressBarInit() 
    654634 
    655635            args_key = tuple(tuple(d) for d in group_domains), self.SortExamples == 3, "data" 
    656             cluster_ordering_examples = self._ordering_cache.get(args_key, None) 
    657             if cluster_ordering_examples is None: 
     636            cluster_ordering = self._ordering_cache.get(args_key, None) 
     637            if cluster_ordering is None: 
    658638 
    659639                # Rows separately 
    660640                data_ordering, data_clusters = \ 
    661                         hierarchical_cluster_ordering_data(data, group_domains, 
     641                        hierarchical_cluster_ordering(data, "X", group_domains, 
    662642                                      opt_order=self.SortExamples == 3, 
    663643                                      progress_callback=self.progressBarSet) 
     
    666646                self._ordering_cache[args_key] = (data_ordering, data_clusters) 
    667647            else: 
    668                  data_ordering, data_clusters = cluster_ordering_examples 
     648                 data_ordering, data_clusters = cluster_ordering 
    669649             
    670650            sorted_data = [data[i] for i in itertools.chain(*data_ordering)] 
     
    676656 
    677657            args_key = tuple(tuple(d) for d in group_domains), self.SortAttributes == 2, "attributes" 
    678             cluster_ordering_attributes = self._ordering_cache.get(args_key, None) 
    679             if cluster_ordering_attributes is None: 
     658            cluster_ordering = self._ordering_cache.get(args_key, None) 
     659            if cluster_ordering is None: 
    680660 
    681661                # Columns separately 
    682662                attr_ordering, attr_cluster = \ 
    683                         hierarchical_cluster_ordering_attr(data, group_domains, 
     663                        hierarchical_cluster_ordering(data, "Y", group_domains, 
    684664                                      opt_order=self.SortAttributes == 2, 
    685665                                      progress_callback=self.progressBarSet) 
     
    688668                self._ordering_cache[args_key] = (attr_ordering, attr_cluster) 
    689669            else: 
    690                  attr_ordering, attr_cluster = cluster_ordering_attributes 
     670                 attr_ordering, attr_cluster = cluster_ordering 
    691671             
    692672            self.progressBarFinished() 
Note: See TracChangeset for help on using the changeset viewer.