Changeset 1424:56f4abf21046 in orange-bioinformatics


Ignore:
Timestamp:
06/22/11 10:52:35 (3 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
ed2693d5171d60f35617c53d68728721cb69483b
Message:

Added support for loading miRNA targets from microCosm files.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • obimiRNA.py

    r1102 r1424  
    22import urllib 
    33import re 
    4 import pylab 
     4#import pylab 
    55import random 
    66import os 
    77import math 
    8 import locale 
     8#import locale 
    99import statc 
    10 import numpy as np 
     10#import numpy as np 
     11import math 
    1112 
    1213import obiTaxonomy 
     
    1718import obiKEGG as kg 
    1819 
     20from collections import defaultdict 
     21 
    1922 
    2023mirnafile = osf.localpath_download('miRNA','miRNA.txt') 
     
    5457    return to_return 
    5558 
    56 ### library:     
    57 [IDs, LABELS, miRNA_lib, mat_toPre, ACCtoID] = __build_lib(mirnafile, 1,1,1,0) 
    58 [preIDs, premiRNA_lib, preACCtoID, clusters] = __build_lib(premirnafile,0,0,1,1) 
     59def open_microcosm(org="mus_musculus", version="v5"): 
     60    """ Open the miRna targets from the EBI microcosm site.  
     61    """ 
     62    import urllib2, zipfile 
     63    import StringIO 
     64    stream = urllib2.urlopen("ftp://ftp.ebi.ac.uk/pub/databases/microcosm/{version}/arch.{version}.txt.{org}.zip".format(org=org, version=version)) 
     65    contents = stream.read() 
     66    stream = StringIO.StringIO(contents) 
     67    return stream 
     68     
     69def parse_targets_microcosm_v5(file, max_pvalue=None, min_score=None): 
     70    """ Parse miRna targets (version 'v5.txt' format file from microcosm)  
     71    """ 
     72     
     73    ids = set() #mirna ids 
     74    labels = set() # org codes (i.e hsa, mmu ..) 
     75    #["mirna accession", "seq", "mirna id", "targets"] 
     76    mirna_lib = defaultdict(lambda: ["", "", "", set()]) 
     77    mat_to_pre = {} 
     78    if isinstance(file, basestring): 
     79        file = open(file, "rb") 
     80    import csv 
     81    reader = csv.reader(file, delimiter="\t") 
     82    for line in reader: 
     83        if not line or line[0].startswith("##"): 
     84            continue 
     85         
     86        seq = line[1] 
     87        org = seq.split("-", 1)[0] #SEQ 
     88        ids.add(seq) 
     89        labels.add(org) 
     90         
     91        mirna_lib[seq] #In case some mirna dont have any targets 
     92         
     93        if max_pvalue is not None: 
     94            if float(line[10]) > max_pvalue: 
     95                continue 
     96        if min_score is not None: 
     97            if float(line[9]) < min_score: 
     98                continue 
     99             
     100        mirna_lib[seq][-1].add(line[11]) #TRANSCRIPT_ID 
     101         
     102    for key, value in mirna_lib.iteritems(): 
     103        value[-1] = ",".join(sorted(value[-1]) or ["None"]) 
     104         
     105    ids = sorted(ids) 
     106    labels = sorted(labels) 
     107    mirna_lib = dict(mirna_lib) 
     108    return ids, labels, mirna_lib, {}, {} 
     109 
     110 
     111def load_miRNA_microCosm(org="mus_musculus", max_pvalue=None, min_score=None): 
     112    """ Load miRNA's from microcosm into the global scope (currently 
     113    only Mus musculus is supported) 
     114     
     115    """ 
     116    global IDs, LABELS, miRNA_lib, mat_toPre, ACCtoID 
     117    global preIDs, premiRNA_lib, preACCtoID, clusters 
     118    global num_toClusters,  clusters_toNum 
     119     
     120    file = osf.localpath_download("miRNA", "v5.txt.{org}".format(org=org)) 
     121    [IDs, LABELS, miRNA_lib, mat_toPre, ACCtoID] = parse_targets_microcosm_v5(file, 
     122                                max_pvalue=max_pvalue, min_score=min_score) 
     123    [preIDs, premiRNA_lib, preACCtoID, clusters] = [], {}, {}, {} 
     124    num_toClusters, clusters_toNum = {}, {} 
     125 
     126     
     127load_miRNA = load_miRNA_microCosm 
     128 
     129 
     130def load_miRNA_TargetScan(): 
     131    """ This loads miRNAs from miRBase and targets from TargetScan. 
     132    Will also load pre-miRNAs 
     133    """ 
     134    global IDs, LABELS, miRNA_lib, mat_toPre, ACCtoID 
     135    global preIDs, premiRNA_lib, preACCtoID, clusters 
     136    global num_toClusters,  clusters_toNum 
     137     
     138    [IDs, LABELS, miRNA_lib, mat_toPre, ACCtoID] = __build_lib(mirnafile, 1,1,1,0) 
     139    [preIDs, premiRNA_lib, preACCtoID, clusters] = __build_lib(premirnafile,0,0,1,1) 
     140     
     141    num_toClusters = {} 
     142    clusters_toNum = {} 
     143    n=0 
     144    for k,v in clusters.items(): 
     145        if v !='None': 
     146            g = v.split(',') 
     147            g.append(k)         
     148            group = sorted(g) 
     149            if not(group in num_toClusters.values()): 
     150                 num_toClusters[n] = group 
     151                 for e in group: 
     152                     clusters_toNum[e]=n 
     153                 n += 1 
     154      
     155### library: 
     156load_miRNA() 
     157 
     158#[IDs, LABELS, miRNA_lib, mat_toPre, ACCtoID] = __build_lib(mirnafile, 1,1,1,0) 
     159#[preIDs, premiRNA_lib, preACCtoID, clusters] = __build_lib(premirnafile,0,0,1,1) 
     160# 
     161#num_toClusters = {} 
     162#clusters_toNum = {} 
     163#n=0 
     164#for k,v in clusters.items(): 
     165#    if v !='None': 
     166#        g = v.split(',') 
     167#        g.append(k)         
     168#        group = sorted(g) 
     169#        if not(group in num_toClusters.values()): 
     170#             num_toClusters[n] = group 
     171#             for e in group: 
     172#                 clusters_toNum[e]=n 
     173#             n += 1 
     174 
    59175 
    60176fromTaxo = {3702:'ath', 9913:'bta', 6239:'cel', 3055:'cre', 7955:'dre',\ 
     
    62178              10116:'rno', 8355:'xla', 4577:'zma'} 
    63179 
    64 toTaxo = dict(zip(fromTaxo.values(),fromTaxo.keys())) 
    65  
    66 num_toClusters = {} 
    67 clusters_toNum = {} 
    68 n=0 
    69 for k,v in clusters.items(): 
    70     if v !='None': 
    71         g = v.split(',') 
    72         g.append(k)         
    73         group = sorted(g) 
    74         if not(group in num_toClusters.values()): 
    75              num_toClusters[n] = group 
    76              for e in group: 
    77                  clusters_toNum[e]=n 
    78              n += 1 
    79  
     180toTaxo = dict(zip(fromTaxo.values(), fromTaxo.keys())) 
    80181 
    81182 
Note: See TracChangeset for help on using the changeset viewer.