gseapy/gsea.py
def _save_results(self, zipdata, outdir, module, gmt, rank_metric, permutation_type):
        """reformat gsea results, and save to txt"""

        res = OrderedDict()
        for gs, gseale, ind, RES in zipdata:
            rdict = OrderedDict()
            rdict['es'] = gseale[0]
            rdict['nes'] = gseale[1]
            rdict['pval'] = gseale[2]
            rdict['fdr'] = gseale[3]
            rdict['geneset_size'] = len(gmt[gs])
            rdict['matched_size'] = len(ind)
            #reformat gene list.
            _genes = rank_metric.index.values[ind]
            rdict['genes'] = ";".join([ str(g).strip() for g in _genes ])
            
            if self.module != 'ssgsea':
                # extract leading edge genes
                if rdict['es'] > 0:
                    # RES -> ndarray, ind -> list
                    idx = RES.argmax()
                    ldg_pos = list(filter(lambda x: x<= idx, ind))
                elif rdict['es'] < 0:
                    idx = RES.argmin()
                    ldg_pos = list(filter(lambda x: x >= idx, ind))
                else:
                    ldg_pos = ind # es == 0 ?
                rdict['ledge_genes'] = ';'.join(list(map(str,rank_metric.iloc[ldg_pos].index)))
                
            rdict['RES'] = RES
            rdict['hits_indices'] = ind
            # save to one odict
            res[gs] = rdict
        # save
        self.results  = res
        # save to dataframe
        res_df = pd.DataFrame.from_dict(res, orient='index')
        res_df.index.name = 'Term'
        res_df.drop(['RES','hits_indices'], axis=1, inplace=True)
        res_df.sort_values(by=['fdr','pval'], inplace=True)
        self.res2d = res_df

        if self._outdir is None: return
        out = os.path.join(outdir,'gseapy.{b}.{c}.report.csv'.format(b=module, c=permutation_type))
        if self.module == 'ssgsea':
            out = out.replace(".csv",".txt")
            with open(out, 'a') as f:
                f.write('# normalize enrichment scores by random permutation procedure (GSEA method)\n')
                f.write("# might not proper for publication\n")
                res_df.to_csv(f, sep='\t')
        else:
            res_df.to_csv(out)

        return
def _save_results(self, zipdata, outdir, module, gmt, rank_metric, permutation_type):
        res = OrderedDict()
        for gs, gseale, ind, RES in zipdata:
            rdict = OrderedDict()
            rdict['es'] = gseale[0]
            rdict['nes'] = gseale[1]
            rdict['pval'] = gseale[2]
            rdict['fdr'] = gseale[3]
            rdict['geneset_size'] = len(gmt[gs])
            rdict['matched_size'] = len(ind)
            #reformat gene list.
            _genes = rank_metric.index.values[ind]
            rdict['genes'] = ";".join([ str(g).strip() for g in _genes ])
            
            if self.module != 'ssgsea':
                # extract leading edge genes
                if rdict['es'] > 0:
                    # RES -> ndarray, ind -> list
                    idx = RES.argmax()
                    ldg_pos = list(filter(lambda x: x<= idx, ind))
                elif rdict['es'] < 0:
                    idx = RES.argmin()
                    ldg_pos = list(filter(lambda x: x >= idx, ind))
                else:
                    ldg_pos = ind # es == 0 ?
                rdict['ledge_genes'] = ';'.join(list(map(str,rank_metric.iloc[ldg_pos].index)))
                
            rdict['RES'] = RES
            rdict['hits_indices'] = ind
            # save to one odict
            res[gs] = rdict
        # save
        self.results  = res
        # save to dataframe
        res_df = pd.DataFrame.from_dict(res, orient='index')
        res_df.index.name = 'Term'
        res_df.drop(['RES','hits_indices'], axis=1, inplace=True)
        res_df.sort_values(by=['fdr','pval'], inplace=True)
        self.res2d = res_df

        if self._outdir is None: return
        out = os.path.join(outdir,'gseapy.{b}.{c}.report.csv'.format(b=module, c=permutation_type))
        if self.module == 'ssgsea':
            out = out.replace(".csv",".txt")
            with open(out, 'a') as f:
                f.write('# normalize enrichment scores by random permutation procedure (GSEA method)\n')
                f.write("# might not proper for publication\n")
                res_df.to_csv(f, sep='\t')
        else:
            res_df.to_csv(out)

        return
def _save_results ( self , zipdata , outdir , module , gmt , rank_metric , permutation_type ) : res = OrderedDict ( ) for gs , gseale , ind , RES in zipdata : rdict = OrderedDict ( ) rdict [ 'es' ] = gseale [ 0 ] rdict [ 'nes' ] = gseale [ 1 ] rdict [ 'pval' ] = gseale [ 2 ] rdict [ 'fdr' ] = gseale [ 3 ] rdict [ 'geneset_size' ] = len ( gmt [ gs ] ) rdict [ 'matched_size' ] = len ( ind ) #reformat gene list. _genes = rank_metric . index . values [ ind ] rdict [ 'genes' ] = ";" . join ( [ str ( g ) . strip ( ) for g in _genes ] ) if self . module != 'ssgsea' : # extract leading edge genes if rdict [ 'es' ] > 0 : # RES -> ndarray, ind -> list idx = RES . argmax ( ) ldg_pos = list ( filter ( lambda x : x <= idx , ind ) ) elif rdict [ 'es' ] < 0 : idx = RES . argmin ( ) ldg_pos = list ( filter ( lambda x : x >= idx , ind ) ) else : ldg_pos = ind # es == 0 ? rdict [ 'ledge_genes' ] = ';' . join ( list ( map ( str , rank_metric . iloc [ ldg_pos ] . index ) ) ) rdict [ 'RES' ] = RES rdict [ 'hits_indices' ] = ind # save to one odict res [ gs ] = rdict # save self . results = res # save to dataframe res_df = pd . DataFrame . from_dict ( res , orient = 'index' ) res_df . index . name = 'Term' res_df . drop ( [ 'RES' , 'hits_indices' ] , axis = 1 , inplace = True ) res_df . sort_values ( by = [ 'fdr' , 'pval' ] , inplace = True ) self . res2d = res_df if self . _outdir is None : return out = os . path . join ( outdir , 'gseapy.{b}.{c}.report.csv' . format ( b = module , c = permutation_type ) ) if self . module == 'ssgsea' : out = out . replace ( ".csv" , ".txt" ) with open ( out , 'a' ) as f : f . write ( '# normalize enrichment scores by random permutation procedure (GSEA method)\n' ) f . write ( "# might not proper for publication\n" ) res_df . to_csv ( f , sep = '\t' ) else : res_df . to_csv ( out ) return
reformat gsea results, and save to txt
reformat gsea results and save to txt