Categorias
Introdução à Programação para Bioinformática com Biopython

Sequências

Capítulo 10

Este conteúdo faz parte do livro “Introdução à Programação para Bioinformática com Biopython“. Você pode adquirir a versão impressa desse livro aqui ou a versão para Kindle aqui. Para nos citar, consulte este link.

Além do pacote Bio.Seq, Biopython também fornece o pacote Bio.SeqIO para leitura e gravação de sequências, com suporte para os formatos: abi, ace, clustal, embl, fasta, fastq, fastq-solexa, fastq-illumina, genbank ou gb, ig, imgt, nexus, phd, phylip, pir, seqxml, sff, stockholm, swiss, tab, qual e uniprot-xml.

Neste capítulo abordaremos técnicas para manipulação de sequências usando Biopython e até mesmo funções básicas do Python.

Concatenando sequências

Você pode unir sequências usando as funcionalidades do Python. Neste exemplo, uniremos quatro sequências de nucleotídeos e armazenaremos o resultado final na variável seq_final.

from Bio.Seq import Seq

seq1 = Seq('AAA')
seq2 = Seq('TTT')
seq3 = Seq('CCC')
seq4 = Seq('GGG')

seq_final = seq1 + seq2 + seq3 + seq4

print(seq_final)
# AAATTTCCCGGG

Comparando sequências

Usando comandos condicionais e operadores é possível realizar comparações entre sequências.

from Bio.Seq import Seq

seq1 = Seq("AACCGGTT")
seq2 = Seq("AACCGGTT")
seq3 = Seq("TTCCAAGG")

if str(seq1) == str(seq2):
	print("seq1 igual a seq2")

else:
	print("seq1 diferente de seq2")

if str(seq1) == str(seq3):
	print("seq1 igual de seq3")

else:
	print("seq1 diferente de seq3")

Nesse exemplo, a sequência seq1 é inicialmente comparada com seq2. Em seguida, é feita uma comparação de seq1 com seq3. Ao executar esse script, você obterá como resultado: “seq1 igual a seq2” e “seq1 diferente de seq3”.

Para realizar comparações entre sequências é necessário comparar diretamente as strings, sendo necessário usar a função str( ). Observe que é considerado uma boa prática inserir um comando else, após o if para que, caso a condição não seja cumprida, uma mensagem avise ao usuário.

Analisando arquivos no formato FASTA

O formato de arquivos FASTA é um dos mais comuns padrões de armazenamento de sequências biológicas em Bioinformática. O padrão é definido por um cabeçalho iniciado pelo caractere “>”, seguido por uma sequência de aminoácidos ou nucleotídeos nas linhas posteriores. O arquivo pode também apresentar múltiplas sequências (formato Multi-FASTA). Abaixo um exemplo de arquivo no formato FASTA.

>HEAD_SEQ
GTCACAGCATCGATCGATCGACACTAG
CATCGATCGATCGATCATCGATCACTA
GCATCGATCGATCGATCGATCATC

Crie um arquivo de texto com estrutura similar ao demonstrado acima. Lembre-se o cabeçalho deve começar com o caractere “>” e a sequência deve começar na linha abaixo a ele. Salve o arquivo com o título “arquivo.fasta“. Você também pode encontrar esse arquivo no diretório exemplos do repositório do GitHub com os arquivos deste livro: <https://github.com/dcbmariano/biopython>.

Agora vamos analisá-lo com o Biopython:

from Bio import SeqIO
for i in SeqIO.parse("arquivo.fasta", "fasta"):

    # imprime o cabecalho
    print(i.id)

    # imprime a sequencia
    print(i.seq)

    # imprime o tamanho da sequencia
    print(len(i))

Após executar esse código você verá impresso na tela:

HEAD_SEQ
GTCACAGCATCGATCGATCGACACTA
GCATCGATCGATCGATCATCGATCACT
AGCATCGATCGATCGATCGATCATC
79

A função SeqIO.parse( ) é a principal função do pacote Bio.SeqIO. No exemplo acima, ela permite a leitura de um arquivo FASTA e, a partir de um laço, armazena na variável i o objeto que lê informações do arquivo, como: cabeçalhos, sequências e tamanho (com o auxílio da função len).

Gravando sequências

Agora vamos ler arquivos no formato FASTA, extrair determinadas sequências que atendam algum requisito específico e gravar tais linhas em outro arquivo, também no formato FASTA.

Inicialmente crie um arquivo Multi-FASTA chamado “arquivo1.fasta” com o conteúdo abaixo:

>sequencia_1
GTCACAG
>sequencia_2
GTGTTGTGTGT
>sequencia_3
CTCAAACCCAT
>sequencia_4
AACCCATTTTTTT
>sequencia_5
CCCCAAACCCAAATTT

Agora vamos analisar esse arquivo e extrair apenas sequências que atendam a duas condições:

  1. sejam maiores do que 10 pb;
  2. iniciem com uma citosina.
from Bio import SeqIO

entrada = open("arquivo1.fasta","r")
saida = open("arquivo2.fasta", "w")

for i in SeqIO.parse(entrada,"fasta"):
	
	# Condicao 1 (> 10 pb) | Condicao 2 == 'C'
	if ( (len(i.seq) > 10) and (i.seq[0] == 'C')):
		SeqIO.write(i, saida, "fasta")

saida.close()

Observe que no código acima o arquivo FASTA foi lido através da função open( ) e armazenado na variável entrada. Essa variável foi aplicada como parâmetro na função SeqIO.parse( ). As condições 1 e 2 foram validadas através de um comando if e unidas através do operador lógico and. Observe que parênteses separam e organizam as a instruções condicionais.

O comando SeqIO.write( ) recebe como argumentos o objeto Seq armazenado em i, a variável que armazena o arquivo de saída e o formato a qual o arquivo será salvo. Por fim, ele imprime as sequências que atendam as condições pré-estabelecidas dentro do arquivo criado e armazenado na variável saida.

Ao executar o código, você obterá como resultados que atendem aos requisitos solicitados apenas as sequências 3 e 5.

>sequencia_3
CTCAAACCCAT
>sequencia_5
CCCCAAACCCAAATTT

Analisando arquivos no formato GenBank

O GenBank é um banco de dados público mantido pelo National Center for Biotechnology Information (NCBI). O formato de arquivos GenBank engloba informações de sequências de nucleotídeos e sua tradução em aminoácidos, mantendo informações de anotações de proteínas, regiões codificantes em geral de um determinado organismo.

No próximo exemplo, utilizaremos o arquivo GenBank do plasmídeo pREB9 obtido em Acaryochloris marina MBIC11017. Faça o download do arquivo “NC_009934.gbk” no diretório exemplos do repositório do livro no GitHub. Observe que há diversas informações que variam desde o nome do organismo até mesmo os nomes dos autores envolvidos em uma publicação de um artigo sobre esse organismo. Agora vamos analisá-lo com a função parse do pacote SeqIO.

from Bio import SeqIO
for seq_record in SeqIO.parse("NC_009934.gbk", "genbank"):

    # imprime o cabecalho
    print(seq_record.id)

    # imprime a sequencia
    print(seq_record.seq)

    # imprime o tamanho da sequencia
    print(len(seq_record) )

Assim como na análise de arquivos FASTA, ao executa os comandos acima em um script, você obterá informações como id, sequência e tamanho.

Obtendo o nome de produtos codificados de um arquivo GenBank

Arquivos GenBank contém informações de anotações, como por exemplo, nomes e posicionamento de genes. É possível obtê-los através do módulo SeqIO.

from Bio import SeqIO

# Recebendo arquivo GBK
exemplo = SeqIO.read("NC_009934.gbk", "genbank")

for i in exemplo.features:
	print(i)

O exemplo acima imprime na tela todas as features (campos onde são armazenadas algumas características do organismo) de um arquivo GenBank. Se quisermos obter o nome de produtos codificados podemos utilizar a seguinte sintaxe:

from Bio import SeqIO

# Recebendo arquivo GBK
exemplo = SeqIO.read("NC_009934.gbk", "genbank")

for i in exemplo.features:
	if i.type == 'CDS':
		print(i.qualifiers['product'] )

Observe que inicialmente validamos se a feature é do tipo “CDS”. Informações sobre nomes de produtos estão armazenadas em features do tipo “CDS”, assim caso tente imprimir o campo onde estão armazenados os nomes de produtos sem essa validação seu programa apresentará um erro de execução. É necessário que o campo qualifiers[‘product’] exista na feature para que não ocorram erros durante a execução do laço.

Se você executou com perfeição os procedimentos descritos acima, obterá como resultado:

['hypothetical protein']
['hypothetical protein']
['hypothetical protein']
['hypothetical protein']

Você também poderá imprimir outras informações de features, como por exemplo: tipo (type), localização (location), além de locus tag (qualifiers[‘locus_tag’]), id da proteína (qualifiers[protein_id]) e sequência traduzida (qualifiers[‘translation’]).

Convertendo arquivos GenBank para FASTA

Biopython permite a conversão de formatos de arquivos de maneira simples. Usando o arquivo baixado anteriormente, vamos convertê-lo para formato FASTA através da função SeqIO.convert( ). Essa função recebe como parâmetros o nome do arquivo que será convertido, o formato desse arquivo, o novo nome após a conversão e o novo formato.

from Bio import SeqIO

SeqIO.convert("NC_009934.gbk", "genbank", \
"NC_009934.fasta", "fasta")

Para mais informações sobre o módulo Bio.SeqIO acesse: <http://biopython.org/wiki/SeqIO>.

Quer aprender mais? Conheça nossos cursos profissionalizantes à partir de R$19,99:

Livro Introdução à Programação para Bioinformática com Biopython

Capítulo 1
Introdução ao Python

Capítulo 2
Comandos condicionais

Capítulo 3
Laços de repetição

Capítulo 4
Trabalhando com strings

Capítulo 5
Listas

Capítulo 6
Manipulando arquivos

Capítulo 7
Funções

Capítulo 8
Princípios da orientação a objetos

Capítulo 9
Introdução ao Biopython

Capítulo 10
Sequências

Capítulo 11
BLAST

Capítulo 12
PDB

Capítulo 13
Visualização de dados em Python

Capítulo 14
Outras coisas interessantes que se pode fazer com Biopython

Capítulo 15
Hierarquia do Biopython

Por favor, nos cite:

MARIANO, D. C. B.; BARROSO, J. R. P. M. ; CORREIA, T. S. ; de MELO-MINARDI, R. C. . Introdução à Programação para Bioinformática com Biopython. 3. ed. North Charleston, SC (EUA): CreateSpace Independent Publishing Platform, 2015. v. 1. 230p .

Por Diego Mariano

Doutor em Bioinformática pela Universidade Federal de Minas Gerais com atuação na área de ciência de dados e aprendizado de máquina aplicados ao aperfeiçoamento de enzimas usadas na produção de biocombustíveis. Mestre em Bioinformática, também pela UFMG, atuando na área de desenvolvimento de sistemas Web para montagem de genomas. Atualmente realiza estágio pós-doutoral no Departamento de Ciência da Computação da UFMG com foco em desenvolvimento de sistemas Web para Bioinformática, análise exploratória e visualização de dados. Tem conhecimentos nas linguagens: PHP, JavaScript, Python, R, Perl, HTML, CSS e SQL.