Changeset 1491:465aaa713232 in orange-bioinformatics


Ignore:
Timestamp:
10/11/11 18:36:09 (3 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
ce0f49124bb9867f1450ed5ef14d9798f19502ca
Message:

Fixed some errors while initializing the db for STRING.
Implemented the edges_annotated for STRING.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • obiPPI.py

    r1487 r1491  
    2626import posixpath 
    2727import shutil 
     28import gzip 
    2829 
    2930class PPIDatabase(object): 
     
    384385        """) 
    385386         
    386      
     387from collections import namedtuple 
     388from functools import partial 
     389 
     390STRINGInteraction = namedtuple("STRINGInteraciton", 
     391        ["protein_id1", "protein_id2", "combined_score", "mode", 
     392         "action", "score"]) 
     393 
    387394class STRING(PPIDatabase): 
    388395    """ Access `STRING <http://www.string-db.org/>`_ PPI database. 
     
    414421    FILENAME = "string-protein.sqlite" 
    415422    VERSION = "1.0" 
     423     
     424    # Mapping from obiTaxonomy.common_taxids() to taxids in STRING. 
     425      
     426    TAXID_MAP = {"352472": "44689", # Dictyostelium discoideum 
     427                 "562": None, 
     428                 "2104": "272634", # Mycoplasma pneumoniae M129 
     429                 "4530": "39947", # Oryza sativa Japonica Group 
     430                 "4754": None, 
     431                 "8355": None, 
     432                 "4577": None 
     433                 } 
     434     
    416435     
    417436    def __init__(self): 
     
    487506         
    488507    def edges_annotated(self, id): 
    489         """ Return a list of all links 
    490         """ 
    491         raise NotImplementedError 
     508        """ Return a list of all edges annotated. 
     509        """ 
     510        cur = self.db.execute("""\ 
     511        select links.protein_id1, links.protein_id2, links.score,  
     512               actions.action, actions.mode, actions.score 
     513        from links left join actions on  
     514               links.protein_id1=actions.protein_id1 and 
     515               links.protein_id2=actions.protein_id2 
     516        where links.protein_id1=? 
     517        """, (id,)) 
     518        return map(partial(apply,STRINGInteraction), cur.fetchall()) 
    492519     
    493520    @classmethod 
     
    578605                 
    579606        con = sqlite3.connect(orngServerFiles.localpath(cls.DOMAIN, cls.FILENAME)) 
    580          
    581         con.execute("drop table if exists links") 
    582         con.execute("drop table if exists proteins") 
    583         con.execute("drop table if exists actions") 
    584         con.execute("drop table if exists aliases") 
    585          
    586         con.execute("create table links (protein_id1 text, protein_id2 text, score int)") 
    587         con.execute("create table proteins (protein_id text, taxid text)") 
    588         con.execute("create table actions (protein_id1 text, protein_id2 text, mode text, action text, score int)") 
    589         con.execute("create table aliases (protein_id text, alias text)") 
    590          
    591         header = links_file.readline() # read the header 
    592          
    593         import csv 
    594         reader = csv.reader(links_file, delimiter=" ") 
    595          
    596         def read_links(reader): 
    597             links = [] 
    598             i = 0 
    599             for p1, p2, score in reader: 
    600                 taxid1 = p1.split(".", 1)[0] 
    601                 taxid2 = p2.split(".", 1)[0] 
    602                 if taxid1 in taxids and taxid2 in taxids: 
    603                     links.append((intern(p1), intern(p2), int(score))) 
    604                 i += 1 
    605                 if i % 1000 == 0: # Update the progress every 1000 lines 
    606                     progress(100.0 * links_file.tell() / filesize) 
    607             links.sort() 
    608             return links 
    609          
    610         con.executemany("insert into links values (?, ?, ?)", read_links(reader)) 
    611              
    612         con.commit() 
    613          
    614         progress.finish() 
    615          
    616         proteins = [res[0] for res in con.execute("select distinct protein_id1 from links")] 
    617         progress = ConsoleProgressBar("Processing proteins:") 
    618          
    619         def protein_taxids(proteins): 
    620             protein_taxids = [] 
    621             for i, prot in enumerate(proteins): 
    622                 taxid = prot.split(".", 1)[0] 
    623                 protein_taxids.append((prot, taxid)) 
    624                 if i % 1000 == 0: 
    625                     progress(100.0 * i / len(proteins)) 
    626             protein_taxids.sort() 
    627             return protein_taxids 
    628          
    629         con.executemany("insert into proteins values (?, ?)", protein_taxids(proteins)) 
    630  
    631         con.commit() 
    632         progress.finish() 
    633          
    634         filesize = os.stat(actions_filename).st_size 
    635          
    636         actions_file.readline() # read header 
    637          
    638         progress = ConsoleProgressBar("Processing actions:") 
    639         reader = csv.reader(actions_file, delimiter="\t") 
    640         def read_actions(reader): 
    641             actions = [] 
    642             i = 0 
    643             for p1, p2, mode, action, a_is_acting, score in reader: 
    644                 taxid1 = p1.split(".", 1)[0] 
    645                 taxid2 = p2.split(".", 1)[0] 
    646                 if taxid1 in taxids and taxid2 in taxids: 
    647                     actions.append((intern(p1), intern(p2), mode, action, int(score))) 
    648                 i += 1 
    649                 if i % 1000 == 0: 
    650                     progress(100.0 * actions_file.tell() / filesize) 
    651             actions.sort() 
    652             return actions 
    653          
    654         con.executemany("insert into actions values (?, ?, ?, ?, ?)", read_actions(reader)) 
    655         con.commit() 
    656         progress.finish() 
    657          
    658         filesize = os.stat(aliases_filename).st_size 
    659         aliases_file.readline() # read header 
    660          
    661         progress = ConsoleProgressBar("Processing aliases:") 
     607        with con: 
     608            con.execute("drop table if exists links") 
     609            con.execute("drop table if exists proteins") 
     610            con.execute("drop table if exists actions") 
     611            con.execute("drop table if exists aliases") 
     612             
     613            con.execute("create table links (protein_id1 text, protein_id2 text, score int)") 
     614            con.execute("create table proteins (protein_id text, taxid text)") 
     615            con.execute("create table actions (protein_id1 text, protein_id2 text, mode text, action text, score int)") 
     616            con.execute("create table aliases (protein_id text, alias text)") 
     617             
     618            header = links_file.readline() # read the header 
     619             
     620            import csv 
     621            reader = csv.reader(links_file, delimiter=" ") 
     622             
     623            def read_links(reader): 
     624                links = [] 
     625                i = 0 
     626                for p1, p2, score in reader: 
     627                    taxid1 = p1.split(".", 1)[0] 
     628                    taxid2 = p2.split(".", 1)[0] 
     629                    if taxid1 in taxids and taxid2 in taxids: 
     630                        links.append((intern(p1), intern(p2), int(score))) 
     631                    i += 1 
     632                    if i % 1000 == 0: # Update the progress every 1000 lines 
     633                        progress(100.0 * links_file.tell() / filesize) 
     634                links.sort() 
     635                return links 
     636             
     637            con.executemany("insert into links values (?, ?, ?)", read_links(reader)) 
     638                 
     639            con.commit() 
     640             
     641            progress.finish() 
     642             
     643            proteins = [res[0] for res in con.execute("select distinct protein_id1 from links")] 
     644            progress = ConsoleProgressBar("Processing proteins:") 
     645             
     646            def protein_taxids(proteins): 
     647                protein_taxids = [] 
     648                for i, prot in enumerate(proteins): 
     649                    taxid = prot.split(".", 1)[0] 
     650                    protein_taxids.append((prot, taxid)) 
     651                    if i % 1000 == 0: 
     652                        progress(100.0 * i / len(proteins)) 
     653                protein_taxids.sort() 
     654                return protein_taxids 
     655             
     656            con.executemany("insert into proteins values (?, ?)", protein_taxids(proteins)) 
     657     
     658            con.commit() 
     659            progress.finish() 
     660             
     661            filesize = os.stat(actions_filename).st_size 
     662             
     663            actions_file.readline() # read header 
     664             
     665            progress = ConsoleProgressBar("Processing actions:") 
     666            reader = csv.reader(actions_file, delimiter="\t") 
     667            def read_actions(reader): 
     668                actions = [] 
     669                i = 0 
     670                for p1, p2, mode, action, a_is_acting, score in reader: 
     671                    taxid1 = p1.split(".", 1)[0] 
     672                    taxid2 = p2.split(".", 1)[0] 
     673                    if taxid1 in taxids and taxid2 in taxids: 
     674                        actions.append((intern(p1), intern(p2), mode, action, int(score))) 
     675                    i += 1 
     676                    if i % 1000 == 0: 
     677                        progress(100.0 * actions_file.tell() / filesize) 
     678                actions.sort() 
     679                return actions 
     680             
     681            con.executemany("insert into actions values (?, ?, ?, ?, ?)", read_actions(reader)) 
     682            con.commit() 
     683            progress.finish() 
     684             
     685            filesize = os.stat(aliases_filename).st_size 
     686            aliases_file.readline() # read header 
     687             
     688            progress = ConsoleProgressBar("Processing aliases:") 
     689                             
     690            reader = csv.reader(aliases_file, delimiter="\t") 
     691            def read_aliases(reader): 
     692                i = 0 
     693                for taxid, name, alias, source in reader: 
     694                    if taxid in taxids: 
     695                        yield ".".join([taxid, name]), alias 
     696                    i += 1 
     697                    if i % 1000 == 0: 
     698                        progress(100.0 * aliases_file.tell() / filesize) 
    662699                         
    663         reader = csv.reader(aliases_file, delimiter="\t") 
    664         def read_aliases(reader): 
    665             i = 0 
    666             for taxid, name, alias, source in reader: 
    667                 if taxid in taxids: 
    668                     yield ".".join([taxid, name]), alias 
    669                 i += 1 
    670                 if i % 1000 == 0: 
    671                     progress(100.0 * aliases_file.tell() / filesize) 
    672                      
    673         con.executemany("insert into aliases values (?, ?)", read_aliases(reader)) 
    674         con.commit() 
     700            con.executemany("insert into aliases values (?, ?)", read_aliases(reader)) 
     701#            con.commit() 
    675702        progress.finish() 
    676703         
Note: See TracChangeset for help on using the changeset viewer.