Changeset 1594:98ff35c02b40 in orange-bioinformatics


Ignore:
Timestamp:
03/07/12 10:47:50 (2 years ago)
Author:
markotoplak
Branch:
default
Message:

Refactoring of obiGeneSetSig.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • obiGeneSetSig.py

    r1593 r1594  
    11import Orange 
    2 import obiAssess 
    32import Orange.misc 
    43import obiGeneSets 
     
    76from collections import defaultdict 
    87import stats 
    9 import obiGsea 
     8from obiGsea import takeClasses 
     9from obiAssess import pca 
    1010 
    1111def setSig_example_geneset(ex, data): 
     
    8888 
    8989        #selection of classes and gene sets 
    90         data = obiGsea.takeClasses(data, classValues=self.class_values) 
     90        data = takeClasses(data, classValues=self.class_values) 
    9191        nm,_ =  self._mat_ni(data) 
    9292        gene_sets = select_genesets(nm, self.gene_sets, self.min_size, self.max_size, self.min_part) 
     
    9696        newdomain = Orange.data.Domain(newfeatures, data.domain.class_var) 
    9797        return Orange.data.Table(newdomain, data) 
     98 
     99    def build_features(self, data, gene_sets): 
     100        return [ self.build_feature(data, gs) for gs in gene_sets ] 
    98101 
    99102def vou(ex, gn, indices): 
     
    106109class SetSig(GeneSetTrans): 
    107110 
    108     def build_features(self, data, gene_sets): 
    109  
    110         attributes = [] 
    111  
    112         for gs in gene_sets: 
    113             at = Orange.feature.Continuous(name=str(gs)) 
    114  
    115             def t(ex, w, gs=gs, data=data): #copy od the data 
    116                 geneset = list(gs.genes) 
    117  
    118                 nm, name_ind = self._mat_ni(data) 
    119                 nm2, name_ind2 = self._mat_ni(ex) 
    120  
    121                 genes = [ nm.umatch(gene) for gene in geneset ] 
    122                 genes2 = [ nm2.umatch(gene) for gene in geneset ] 
    123  
    124                 takegenes = [ i for i,a in enumerate(genes) if a != None ] 
    125  
    126                 genes = [ genes[i] for i in takegenes ] 
    127                 genes2 = [ genes2[i] for i in takegenes ] 
    128  
    129                 domain = Orange.data.Domain([data.domain.attributes[name_ind[gene]] for gene in genes], data.domain.class_var) 
    130                 datao = Orange.data.Table(domain, data) 
    131                 
    132                 #convert the example to the same domain 
    133                 exvalues = [ vou(ex, gn, name_ind2) for gn in genes2 ] + [ "?" ] 
    134                 example = Orange.data.Instance(domain, exvalues) 
    135  
    136                 return setSig_example_geneset(example, datao) #only this one is setsig specific 
    137           
    138             at.get_value_from = t 
    139             attributes.append(at) 
    140  
    141         return attributes  
    142  
    143 from obiAssess import pca 
     111    def build_feature(self, data, gs): 
     112 
     113        at = Orange.feature.Continuous(name=str(gs)) 
     114 
     115        def t(ex, w, gs=gs, data=data): #copy od the data 
     116            geneset = list(gs.genes) 
     117 
     118            nm, name_ind = self._mat_ni(data) 
     119            nm2, name_ind2 = self._mat_ni(ex) 
     120 
     121            genes = [ nm.umatch(gene) for gene in geneset ] 
     122            genes2 = [ nm2.umatch(gene) for gene in geneset ] 
     123 
     124            takegenes = [ i for i,a in enumerate(genes) if a != None ] 
     125 
     126            genes = [ genes[i] for i in takegenes ] 
     127            genes2 = [ genes2[i] for i in takegenes ] 
     128 
     129            domain = Orange.data.Domain([data.domain.attributes[name_ind[gene]] for gene in genes], data.domain.class_var) 
     130            datao = Orange.data.Table(domain, data) 
     131            
     132            #convert the example to the same domain 
     133            exvalues = [ vou(ex, gn, name_ind2) for gn in genes2 ] + [ "?" ] 
     134            example = Orange.data.Instance(domain, exvalues) 
     135 
     136            return setSig_example_geneset(example, datao) #only this one is setsig specific 
     137      
     138        at.get_value_from = t 
     139        return at 
    144140 
    145141class PCA(GeneSetTrans): 
    146142 
    147     def build_features(self, data, gene_sets): 
    148  
    149         attributes = [] 
    150  
    151         for gs in gene_sets: 
    152             at = Orange.feature.Continuous(name=str(gs)) 
    153  
     143    def build_feature(self, data, gs): 
     144 
     145        at = Orange.feature.Continuous(name=str(gs)) 
     146 
     147        geneset = list(gs.genes) 
     148 
     149        nm, name_ind = self._mat_ni(data) 
     150        genes = [ nm.umatch(gene) for gene in geneset ] 
     151        takegenes = [ i for i,a in enumerate(genes) if a != None ] 
     152        genes = [ genes[i] for i in takegenes ] 
     153 
     154        domain = Orange.data.Domain([data.domain.attributes[name_ind[gene]] for gene in genes], data.domain.class_var) 
     155 
     156        datao = Orange.data.Table(domain, data) 
     157 
     158        evals, evect, xmean = pca(datao) 
     159        constructt = evals, evect, xmean 
     160 
     161        def t(ex, w, geneset=geneset, constructt=constructt, takegenes=takegenes, domain=domain): 
     162 
     163            nm2, name_ind2 = self._mat_ni(ex) 
     164            genes2 = [ nm2.umatch(gene) for gene in geneset ] 
     165            genes2 = [ genes2[i] for i in takegenes ] 
     166           
     167            #convert the example to the same domain 
     168            exvalues = [ vou(ex, gn, name_ind2) for gn in genes2 ] + [ "?" ] 
     169             
     170            arr = numpy.array(exvalues[:-1]) 
     171             
     172            evals, evect, xmean = constructt 
     173 
     174            arr = arr - xmean # same input transformation - a row in a matrix 
     175            ev0 = evect[0] #this is a row in a matrix - do a dot product 
     176            a = numpy.dot(arr, ev0) 
     177 
     178            return a 
     179                  
     180        at.get_value_from = t 
     181        return at 
     182 
     183class SimpleFun(GeneSetTrans): 
     184 
     185    def build_feature(self, data, gs): 
     186 
     187        at = Orange.feature.Continuous(name=str(gs)) 
     188 
     189        def t(ex, w, gs=gs): 
    154190            geneset = list(gs.genes) 
    155  
    156             nm, name_ind = self._mat_ni(data) 
    157             genes = [ nm.umatch(gene) for gene in geneset ] 
    158             takegenes = [ i for i,a in enumerate(genes) if a != None ] 
    159             genes = [ genes[i] for i in takegenes ] 
    160      
    161             domain = Orange.data.Domain([data.domain.attributes[name_ind[gene]] for gene in genes], data.domain.class_var) 
    162  
    163             datao = Orange.data.Table(domain, data) 
    164  
    165             evals, evect, xmean = pca(datao) 
    166             constructt = evals, evect, xmean 
    167  
    168             def t(ex, w, geneset=geneset, constructt=constructt, takegenes=takegenes, domain=domain): 
    169  
    170                 nm2, name_ind2 = self._mat_ni(ex) 
    171                 genes2 = [ nm2.umatch(gene) for gene in geneset ] 
    172                 genes2 = [ genes2[i] for i in takegenes ] 
    173                
    174                 #convert the example to the same domain 
    175                 exvalues = [ vou(ex, gn, name_ind2) for gn in genes2 ] + [ "?" ] 
    176                  
    177                 arr = numpy.array(exvalues[:-1]) 
    178                  
    179                 evals, evect, xmean = constructt 
    180  
    181                 arr = arr - xmean # same input transformation - a row in a matrix 
    182                 ev0 = evect[0] #this is a row in a matrix - do a dot product 
    183                 a = numpy.dot(arr, ev0) 
    184  
    185                 return a 
    186                       
    187             at.get_value_from = t 
    188             attributes.append(at) 
    189  
    190         return attributes  
    191  
    192 class SimpleFun(GeneSetTrans): 
    193  
    194     def build_features(self, data, gene_sets): 
    195  
    196         attributes = [] 
    197  
    198         for gs in gene_sets: 
    199             at = Orange.feature.Continuous(name=str(gs)) 
    200  
    201             def t(ex, w, gs=gs): 
    202                 geneset = list(gs.genes) 
    203                 nm2, name_ind2 = self._mat_ni(ex) 
    204                 genes2 = [ nm2.umatch(gene) for gene in geneset ] 
    205                 
    206                 exvalues = [ vou(ex, gn, name_ind2) for gn in genes2 ] + [ "?" ] 
    207                 exvalues = filter(lambda x: x != "?", exvalues) 
    208  
    209                 return self.fn(exvalues) 
    210           
    211             at.get_value_from = t 
    212             attributes.append(at) 
    213  
    214         return attributes  
     191            nm2, name_ind2 = self._mat_ni(ex) 
     192            genes2 = [ nm2.umatch(gene) for gene in geneset ] 
     193            
     194            exvalues = [ vou(ex, gn, name_ind2) for gn in genes2 ] + [ "?" ] 
     195            exvalues = filter(lambda x: x != "?", exvalues) 
     196 
     197            return self.fn(exvalues) 
     198      
     199        at.get_value_from = t 
     200        return at 
    215201 
    216202class Mean(SimpleFun): 
     
    225211       self.fn = numpy.median 
    226212       super(Median, self).__init__(**kwargs) 
    227  
    228  
    229213 
    230214if __name__ == "__main__": 
     
    258242        print '\n'.join([ a + ": " +str(b) for a,b in ol]) 
    259243 
    260     ass = PCA(data, matcher=matcher, gene_sets=gsets, class_values=choosen_cv, min_part=0.0) 
     244    ass = Mean(data, matcher=matcher, gene_sets=gsets, class_values=choosen_cv, min_part=0.0) 
    261245    ar = to_old_dic(ass.domain, data[:5]) 
    262246    pp2(ar) 
Note: See TracChangeset for help on using the changeset viewer.