Biopython é uma biblioteca ou uma suite de ferramentas escritas em Python para manipulação de dados biológicos. Biopython apresenta uma coleção de classes, módulos e pacotes para análises de sequências biológicas, alinhamentos de sequências, estruturas de proteínas, genética de populações, filogenia, visualização de dados biológicos, detecção de regiões motivo em sequências, aprendizado de máquina, além de prover fácil acesso a bancos de dados biológicos.

O Projeto Biopython faz parte da coleção de Bio* projetos open-source mantidos pela Open Bioinformatics Foundation.

História miniaturadaimagem|Lista dos Bio* Projetos mais populares no ano de 2018 segundo Google Trends.|380x380px

O desenvolvimento do Biopython iniciou-se no ano de 1999. Foi lançado em julho do ano 2000, entretanto a primeira versão surgiu apenas em março de 2001 e a primeira versão estável em dezembro de 2002.

A ideia de produzir um pacote de programas para análises biológicas usando a linguagem Python foi encabeçada por Jeff Chang e Andrew Dalke, inspirados por Ewan Birney e pelo projeto BioPerl. Além de Jeff e Andrew, Brad Chapman logo se tornou um dos grandes colaboradores do projeto. Atualmente, Biopython conta com centenas de contribuidores.

Desde o ano de 2012, Biopython superou BioPerl e passou a ser considerado o mais popular dos Bio* Projetos mantidos pela Open Bioinformatics Foundation.

Características A utilização da linguagem Python foi sugerida por ser uma linguagem de alto nível, com tipagem dinâmica e com baixa curva de aprendizado, que vem sendo bastante adotada em projetos no ensino de princípios da computação. Biopython é um orientado a objetos. Biopython foi criado originalmente para rodar com Python 2, entretanto, a partir da versão 1.62 passou a suportar a execução em Python 3. A versão mais recente é a 1.70.

Biopython permite acesso a programas usados em bioinformática, manipulação de arquivos de diversos formatos, além de acesso remoto a diversas bases de dados. Dentre os programas, formatos e bases de dados, pode-se citar: SwissProt, UniGene, SCOP, ExPASy, GenBank, Medline, PubMed, além de execução de programas como BLAST (local ou remoto), Clustalw e FASTA.

Download e instalação Biopython pode ser obtido em sua página oficial. Ele é suportado nos principais sistemas operacionais: Windows, Linux e MacOS. A instalação padrão em distribuições Linux requer apenas o download do arquivo de instalação, a descompactação e execução de três linhas de comando no terminal:python setup.py build python setup.py test sudo python setup.py installNo Windows, é possível realizar a instalação através de arquivos executáveis ou por meio do pip. Para isso acesse o CMD e execute o comando abaixo (o endereço do pip pode variar de acordo com a versão instalada do Python):C:\Python27\Scripts\pip install biopython

Instalando no MacOS:pip install biopython

Para outros sistemas operacionais ou outros métodos de instalação, consulte a documentação oficial do Biopython.

Exemplos Manipulações de sequências miniaturadaimagem|400x400px|Processo de transcrição . Em Biopython, sequências são declaradas como objetos e não como strings. O módulo necessário para manipulação de sequências é o Bio.Seq. Para trabalhar com sequências de nucleotídeos e aminoácidos é necessário ainda declarar o módulo Bio.Alphabet e a classe IUPAC, que define padrões internacionais para os alfabetos utilizados tanto para sequências de DNA, RNA e proteínas. miniaturadaimagem|400x400px|Processo de tradução . A classe Seq apresenta métodos para manipulação de sequências, como por exemplo, a detecção da sequência complementar e complementar reversa de uma sequência de nucleotídeos pertencentes a DNA, métodos para transcrição (DNA -> RNA) e transcrição reversa (RNA -> DNA), além de métodos para tradução (RNA -> proteína / DNA -> proteína)..from Bio.Seq import Seq from Bio.Alphabet import IUPAC

# Criando uma sequencia exemplo seq_exemplo = Seq("ATG")

# Sequencia reversa e reversa complementar seq_complementar = seq_exemplo.complement() #TAC seq_complementar_reversa = seq_exemplo.reverse_complement() #CAT

# Transcricao seq_rna = seq_exemplo.transcribe() #AUG seq_dna = seq_rna.back_transcribe() #ATG

# Traducao seq_proteina_rna = seq_rna.translate() #M seq_proteina_dna = seq_dna.translate() #M

Manipulando arquivos no formato FASTA O formato FASTA é um padrão bastante utilizado em aplicações de bioinformática. Ele consiste num arquivo de sequências, a qual cada sequência possui um cabeçalho iniciado com o sinal de ">". Veja abaixo um exemplo de arquivo FASTA:>Titulo_cabecalho_sequencia CGATCGATCGACTATCAGCATCGATCGACTAGCATCGACTACGATGA GACTATCAGCATCGATCGACTAGCATCGACTACGACGATCGATCTGA CGACTATCAGCATCGATCGACTAGCATCGACTACGATGACGATCGAT CGATCGATBiopython apresenta o módulo SeqIO para leitura e manipulação de arquivos em diversos formatos. Por exemplo, dado um arquivo denominado "nome_arquivo.fasta", pode-se utilizar o método SeqIO.parse para percorrer o arquivo e obter informações como: título do cabeçalho e sequência completa.from Bio import SeqIO

for fasta in SeqIO.parse("nome_arquivo.fasta","fasta"): #imprime id do cabecalho print fasta.id

#imprime sequencia completa print fasta.seqO módulo SeqIO também pode ser utilizado para manipular outros formatos, como o formato GenBank, que armazena informações de anotações de proteínas em genomas.from Bio import SeqIO

# Manipulando arquivos no formato genbank genomas = SeqIO.parse('arquivo.genbank', 'genbank')

# Convertendo no formato FASTA for genoma in genomas: SeqIO.write(genoma, genoma.id + '.fasta', 'fasta')

Anotação de sequências A classe SeqRecord do módulo SeqIO permite o acesso a sequências de arquivos de anotação (formato "genbank"), além de outras informações como nome, descrição, informações sobre genes, CDS (sequência codificante), regiões de repetição, dentre outras informações.#-*- Coding: utf-8 -*- from Bio import SeqIO

arquivo_gb = SeqIO.read('pTC2.gb', 'genbank') arquivo_gb.name # 'NC_019375'

arquivo_gb.description # 'Providencia stuartii plasmid pTC2, complete sequence.'

arquivo_gb.features # SeqFeature(FeatureLocation(ExactPosition(4516), ExactPosition(5336), strand=1), type='mobile_element')

arquivo_gb.seq # Seq('GGATTGAATATAACCGACGTGACTGTTACATTTAGGTGGCTAAACCCGTCAAGC...GCC', IUPACAmbiguousDNA())

Estruturas de proteínas miniaturadaimagem|Exemplo de arquivo PDB (proteína beta-glicosidase de Paenibacillus polymyxa; PDB ID: 1BGA)|350x350px

Biopython possui pacotes para manipulação de arquivos de estruturas de proteínas (formato PDB). O módulo Bio.PDB foi desenvolvido por Thomas Hamelryck e Bernard Manderick. Este módulo requer o pacote NumPy.

Bio.PDB converte um arquivo de estrutura tridimensional em um objeto Structure seguindo a chamada arquitetura EMCRA (Estrutura, Modelo, Cadeia, Resíduo e Átomo; no original SMCRA architecture). Nesta abordagem: uma estrutura consiste em modelos; um modelo consiste em cadeias; uma cadeia consiste em resíduos; um resíduo consiste em átomos.

Estrutura (structure) O objeto structure está no topo da hierarquia. Seu id é uma string dada pelo usuário. Ela pode ser lida a partir do método get_structure( ), que deve ser aplicado a um objeto de PDBParser( ).from Bio.PDB import *

parser = PDBParser() estrutura = parser.get_structure('NOME', 'FILE.pdb')

Modelo (model) Estruturas obtidas por cristalografia de raio-x tendem a apresentar apenas um modelo, enquanto estruturas obtidas por NMR podem apresentar diversos modelos.from Bio.PDB import *

# Declaracoes do objeto parser = PDBParser() estrutura = parser.get_structure('NOME', 'FILE.pdb')

primeira_estrutura = estrutura

Cadeia (chain) Cadeias representam a estrutura quaternária de uma proteína, que pode ter uma ou mais. Para Biopython, o id de uma cadeia, em geral, é um caracter.from Bio.PDB import *

parser = PDBParser() estrutura = parser.get_structure('NOME', 'FILE.pdb')

# Coletando a primeira cadeia primeira_estrutura = estrutura cadeia_A = primeira_estrutura['A']

Resíduo (residue) O id de um resíduo é uma tupla composta por três elementos: hetero-field (hetfield): "W" em caso de molécula de água; "H_" seguido de um nome de resíduo (ex.: "H_ALA"); e vazio (padrão para qualquer aminoácido); sequence identifier (resseq; identificador de sequência): um valor inteiro que descreve a posição do resíduo; insertion code'' (icode; código de inserção): usado para preservar posições de resíduos; esse campo recebe uma string (ex.: 'A).

Entretanto, o hetero-field e o insertion code são opcionais. Observe o exemplo a seguir, a qual o 100º resíduo é extraído da cadeia A de uma proteína com apenas um modelo:from Bio.PDB import *

parser = PDBParser() estrutura = parser.get_structure('NOME', 'FILE.pdb')

# Coletando o residuo 100 primeira_estrutura = estrutura cadeia_A = primeira_estrutura['A'] residuo_100 = cadeia_ADois método podem ser aplicados a resíduos: MétodoRetornaget_resname( )nome do resíduo has_id(name)testa se há certo átomo

Átomo (atom) O id de um átomo é uma string única para um resíduo (ex.: 'CA'; carbono-alfa).from Bio.PDB import *

parser = PDBParser() estrutura = parser.get_structure('NOME', 'FILE.pdb')

# Coletando o carbono-alfa do residuo 100 primeira_estrutura = estrutura cadeia_A = primeira_estrutura['A'] residuo_100 = cadeia_A ca_residuo_100 = residuo_100['CA']

Além disso, Biopython permite a aplicação de diversos métodos para obtenção de informações sobre átomos. MétodoRetornaget_name()nome do atomo get_id()id get_coord()coordenadas atomicas get_vector()coordenadas como vetor get_bfactor()fator B  get_occupancy()ocupancia get_altloc()localizacao alternativa get_sigatm()parametros atomicos get_anisou()fator B anisotropico get_fullname()nome completo do atomo

Baixando arquivos PDB É possível fazer o download de arquivos PDB usando o método retrieve_pdb_file( ), que recebe como parâmetro o código PDB.from Bio.PDB import *

pdb = PDBList() pdb.retrieve_pdb_file('1BGA')

Salvando arquivos no formato PDB Bioptyhon fornece a classe PDBIO( ) para permitir o salvamento de arquivos no formato PDB. No exemplo a seguir é criado um arquivo contendo apenas "alaninas":class AlaSelect(Select): def accept_residue(self, residue): if residue.get_name()=='ALA': return True else: return False

io = PDBIO() io.set_structure(s) io.save('somente_alaninas.pdb', AlaSelect())

Cálculo de distância entre átomos No exemplo a seguir é demonstrado o cálculo de distância entre dois átomos (posições 1 e 2) da cadeia A de uma estrutura tridimensional armazenada no arquivo "FILE.pdb":from Bio.PDB import *

# Declaracoes do objeto parser = PDBParser() estrutura = parser.get_structure('NOME', 'FILE.pdb')

# Coletando carbonos alfa de dois residuos da cadeia A: 1 e 2 ca_residuo_1_A = estrutura['A']['CA'] ca_residuo_2_A = estrutura['A']['CA']

distancia = ca_residuo_1_A - ca_residuo_2_A

print distancia # 4.879

Salvando um arquivo PDB em formato FASTA É possível salvar um arquivo PDB em formato FASTA, entretanto é necessário o uso de CaPPBuilder( ) para auxiliar nesse processo.from Bio.PDB import *

parser = PDBParser() peptideos = CaPPBuilder()

estrutura = parser.get_structure('BGA', '1BGA.pdb')

# Criando um arquivo FASTA w = open("1BGA.fasta","w")

# Loop que le todas as cadeias de uma estrutura de proteina for cadeia in estrutura: cadeia_atual = cadeia.id

# Para cada cadeia leia todos os residuos for residuo in peptideos.build_peptides(cadeia): residuo_atual = residuo.get_sequence() fasta = ">Cadeia_%s\n%s\n" %(cadeia_atual,residuo_atual) print fasta

w.write(fasta)

w.close()

Alinhamento estrutural O módulo Bio.PDB permite o alinhamento estrutural entre arquivos PDB usando a classe Superimposer( ). Alinhamento estrutural é uma técnica da bioinformática estrutural que visa alinhar (rotacionar e translacionar) uma ou mais estruturas tridimensionais de macromoléculas a uma macromolécula referência.