As funções esquecidas do Oracle – Parte II

 

Olá, leitores, estamos de volta e continuaremos falando sobre algumas funções esquecidas do Oracle. Neste artigo falamos sobre Life Sciences e as funções que existem no banco de dados que são usadas para dados biológicos. É isso mesmo! O Oracle (bem como o DB2) tem funções pré-definidas para serem usadas em dados de pesquisas com genomas, proteomas, vias metabólicas, etc.

 

As funções para alinhamento de seqüências podem ser encontradas dentro do banco dados e aplicadas diretamente sobre os dados armazenados no mesmo.

 

Bem, mas vamos dar uma refrescada na memória. O que é uma seqüência de dados de DNA? O que é um alinhamento de seqüências? Para que isto é importante? O que nós da computação temos haver com essa coisa toda de biólogos e biomédicos? Vamos lá.

 

Uma seqüência de DNA ou seqüência genética é a representação da estrutura primária de uma molécula de DNA. Essa representação é feita através de letras, que representam os quatro tipos de nucleotídeos. As possíveis letras em uma seqüência de DNA são: A, T, C e G que são respectivamente Adenina, Timina, Citosina e Guanina. AAATCGCTTGG representa uma pequena seqüência de DNA; qualquer sucessão de nucleotídeos maior que quatro já pode ser considerada uma seqüência.

 

Um alinhamento de seqüências é uma forma de descrever a relação entre as cadeias de caracteres. Vejamos: se uma seqüência de DNA é representada por uma cadeia de caracteres, para compararmos duas seqüências nos iremos alinhá-las para descobrirmos onde podemos encontrar pontos similares. Esses pontos similares entre as seqüências podem indicar características iguais entre espécies diferentes e ajudam a traçar com maiores detalhes o processo evolutivo. Existem, basicamente, dois tipos de alinhamento: o global e o local. O alinhamento global consiste no alinhamento de no mínimo duas seqüências inteiras que nem sempre têm o mesmo tamanho. Para suprir os espaços vagos entre uma seqüência e as outras são levadas em conta algumas regras biológicas (que não vamos entrar em detalhes) que permitem que as seqüências tenham, no final, tamanhos iguais. Já o alinhamento local é o alinhamento de apenas parte de uma seqüência com parte de outra e assim é possível comparar a similaridade entre determinadas funções descritas naquele pedaço da cadeia de DNA.

 

Vejam um pequeno exemplo:

 

         Seqüência 1: CGCTATAT

Seqüência 2: TATACTA

 

O Alinhamento das duas ficaria desta forma:

 

CGCTATAT-T-

-----TATACTA

 

Acima podemos ver que as partes mais próximas estão alinhadas. O coeficiente de similaridade entre as seqüências é obtido fazendo-se uma pontuação (score) e, dada a pontuação alcançada pelo alinhamento, é possível dizer o grau de similaridade entre elas. Não vamos entrar no detalhe de como é feita esta pontuação, pois envolvem alguns conceitos biológicos.

 

Estudos e trabalhos que envolvem esse tipo de análise representam uma grande evolução em tratamentos médicos, produção de novos medicamentos, técnicas para entender o comportamento evolutivo de populações, da humanidade, identificar fontes causadoras de doenças como o câncer, etc. E novamente eu pergunto. O que nós da computação temos com isso? Sem a grande evolução das máquinas e com isso, a possibilidade de implementarmos algoritmos com técnicas de inteligência artificial, servidores capazes de processar volumes extraordinários de dados, capacidade de armazenamento desses dados, etc. Sem tudo isso, os pesquisadores ainda estariam no início do processamento do genoma humano.

 

Uma das principais técnicas aplicadas em bioinformática é a de Mineração de Dados, um dos focos desta coluna. As funções da Oracle que abordam o uso deste tipo de informação fazem parte do pacote Oracle Data Mining.

 

Bom, depois desta rápida explicação, vejamos na prática como usar a função BLAST no Oracle.

 

BLAST é a abreviação de Basic Local Alignment Search Tool. O BLAST foi um algoritmo desenvolvido em 1990 por Stephen Altschul para comparação rápida de seqüências. Normalmente é usado para comparar seqüências de nucleotídeos ou de aminoácidos. Dentro do Oracle existem as seguintes variações do BLAST:

 

·         BLASTN: Compara uma seqüência de DNA informada pelo usuário com as seqüências armazenadas na base de dados e retorna as seqüências mais similares.

·         BLASTP: Compara uma seqüência de proteínas informada pelo usuário com as seqüências armazenadas na base de dados e retorna as seqüências mais similares.

·         BLASTX: Compara os produtos conceituais da tradução de uma seqüência de nucleotídeos com uma seqüência de proteína do banco de dados.

·         TBLASTN: Compara uma seqüência de proteínas informada pelo usuário com seqüências de nucleotídeos no banco, fazendo a tradução de nucleotídeos para proteínas dinamicamente.

·         TBLASTX: Compara as traduções das seqüências de nucleotídeos informadas pelo usuário com as seqüências de proteínas armazenadas na base.

 

Existem duas function tables para BLAST no Oracle:

 

         MATCH, que retorna:

 

·         q_seq_id: o identificador da seqüência.

·         t_seq_id: identifica o id da seqüência usado em bancos específicos de seqüência, como GenBank.

·         score: score do alinhamento.

·         value: o valor esperado.

 

ALIGN, que retorna:

 

·         q_seq_id: o identificador da seqüência.

·         t_seq_id: identifica o id da seqüência usado em bancos específicos de seqüência, como GenBank.

·         pct_identity: percentual de similaridade idêntica entre as seqüências consultadas e as armazenadas no banco.

·         aligment_length: tamanho do alinhamento.

·         mismatches: número de alinhamentos mal-sucedidos entre a seqüência informada e as armazenadas no banco.

·         gap_openings: número de espaços inseridos para o alinhamento acontecer.

·         gap_list: lista dos locais onde foram inseridos os espaços.

·         q_start: posição onde se inicia a inserção de espaço no alinhamento.

·         q_end: posição onde termina a inserção de espaço no alinhamento.

·         s_start: posição onde começa o alinhamento dentro da seqüência.

·         s_end: posição onde termina o alinhamento dentro da seqüência.

·         expect: o valor esperado do alinhamento.

·         score: score do alinhamento.

 

Nós vamos usar os dados abaixo para os nossos exemplos:

 

Tabela de Proteínas:

 

28-08-2007pic01.JPG 

 

Tabela de Nucleotídeos – Organismo E. Coli:

 

28-08-2007pic02.JPG 

 

Nosso primeiro exemplo é uma busca na seqüência de proteínas humanas nos dados do SwissProt (o SwissProt é um banco de dados de proteínas desenvolvido pelo Instituto de Bioinformática da Suíça). A seqüência que vamos informar também é uma parte de outra seqüência do SwissProt.

 

select T_SEQ_ID AS seq_id, score

  from TABLE(

       BLASTP_MATCH (

         (select sequence from query_db),

         CURSOR(SELECT seq_id, seq_data

                  FROM swissprot

                 WHERE organism = 'Homo sapiens (Human)'),

         1,

         -1,

         0,

         0,

         'BLOSUM62',

         10,

         0,

         0,

         0,

         0,

         0)

       )

order by score,seq_id;

 

SEQ_ID   SCORE    

---------- -----------

O14530             30

P31947            169

P31946            205

 

O score que tivemos como resposta representa o quão próximo a seqüência em questão está da seqüência informada. No nosso caso, a primeira seqüência se difere apenas 30 “pontos” da seqüência informada.

 

Nosso segundo exemplo utiliza o BLASTX, onde a seqüência que será inserida é de nucleotídeos, que será traduzida e comparada com dados de proteínas. Vamos usar as seqüências de nucleotídeos do organismo E. coli e a seqüência que iremos inserir é uma parte do SwissProt, banco de proteínas.

 

select *

    from TABLE(

         TBLAST_MATCH (

           (select sequence from ecoli_query),

           CURSOR(SELECT seq_id, seq_data FROM prot_db),

           1,

           -1,

           'blastx',

           1,

           0,

           0,

           'BLOSUM62',

           10,

           0,

           0,

           0,

           0,

           0)

         )

order by score,t_seq_id;

 

T_SEQ_ID   SCORE

------------ ---------

103625         32  

100368         33     

103625         33     

52624           33     

54625           33     

103625         36     

132801         36     

132801         38     

132801         41     

103625         44     

132801         44     

103625         45     

12416           45     

103625         49       

 

Bem pessoal, se nós, além de usarmos estas funções específicas para dados biológicos pudermos juntar a isto outras características de BI, aumentamos as possibilidades de análise de dados. Por exemplo, poderíamos descobrir padrões entre determinadas seqüências para criação de novas drogas, apenas analisando as diferenças encontradas entre elas.

 

Eu espero que vocês tenham gostado deste artigo e se tiverem mais interesse, mandem e-mail, postem comentários. Estou à disposição para esclarecer dúvidas.

 

Um abraço a todos e até a próxima.

 

Vander Emiro Muniz

vmuniz@triscal.com.br

www.triscal.com.br

Leia também