using Pkg
Pkg.add(["BioSequences", "FASTX"])Introdução ao BioSequences.jl
Descubra a alta performance de Julia na bioinformática! Este guia apresenta ocBioSequences, um pacote para a manipulação otimizada de sequências biológicas e a leitura/escrita eficiente de formatos comuns como FASTA.
Introdução
A bioinformática é uma das áreas que mais se beneficia do uso de linguagens de programação de alto desempenho, pois realiza análises que envolvem milhões de sequências de DNA, RNA ou proteínas (e neste casos a eficiência é essencial).
Em Julia, o pacote BioSequences fornece uma forma rápida e prática de representar e manipular sequências biológicas (como DNA, RNA e proteínas) com tipos especializados que otimizam memória e performance.
Neste post, vamos aprender a usar o BioSequences.jl para criar, acessar e manipular sequências biológicas de forma simples.
Instalação
Para instalar os pacote usados neste guia, basta executar o seguinte código no REPL do Julia:
Criando sequências
O pacote BioSequences possui tipos próprios para representar moléculas:
dna: Sequência de DNA.rna: Sequência de RNA.aa: Sequência de aminoácidos (proteínas).
using BioSequences
dna = dna"ACGTACGT"8nt DNA Sequence:
ACGTACGT
rna = rna"AUGCUU"6nt RNA Sequence:
AUGCUU
proteina = aa"MTEYKLVVVGAG" 12aa Amino Acid Sequence:
MTEYKLVVVGAG
Sequências aleatórias
Além de criar sequências específicas, gerar sequências aleatórias pode ser útil nos contextos de teste. Para gerar uma sequência aleatória — e passível de reprodução com a função seed! —, basta executar o código:
using Random
Random.seed!(123)TaskLocalRNG()
rand_dna = randdnaseq(50) # 50 bases DNA (A,C,G,T)50nt DNA Sequence:
GGTCGGAAGGAAGGTAGAGTATTTACTTACGCTACCTTGACTAGACAGTC
rand_rna = randrnaseq(30) # 30 bases RNA (A,C,G,U)30nt RNA Sequence:
GUAAUACGAUUACCGAUACGACUGUUUCUU
rand_aa = randaaseq(20) # 20 aa (proteína)20aa Amino Acid Sequence:
AWNHMTALIDRNQGGYVFID
Acessando elementos
As sequências funcionam de forma similar a strings ou vetores, de modo que é possível acessar bases específicas:
dna[1] # Retorna o primeiro nucleotídeoDNA_A
dna[3:6] # Retorna a fatia (substring) da posição 3 à 64nt DNA Sequence:
GTAC
length(dna) # Retorna o tamanho da sequência8
Operações básicas
O pacote inclui várias operações comuns em bioinformática, dentre elas:
reverse(): Inverte a ordem da sequência, retornando a mesma cadeia de nucleotídeos, mas lida de trás para frente. É útil, por exemplo, para trabalhar com a fita complementar de DNA.complement(): Gera a sequência complementar, substituindo cada nucleotídeo pelo seu par correspondente (A ↔︎ T e C ↔︎ G no DNA; A ↔︎ U e C ↔︎ G no RNA).reverse_complement(): Combina as duas operações anteriores. Primeiro, calcula o complemento e depois o inverte. Essa operação é fundamental em bioinformática, pois representa a segunda fita do DNA dupla-hélice.translate(): Realiza a tradução de uma sequência de DNA (ou RNA) em proteína, seguindo o código genético padrão (triplas de bases → aminoácidos). É a simulação computacional do processo biológico que ocorre na síntese proteica.
reverse(dna)8nt DNA Sequence:
TGCATGCA
complement(dna)8nt DNA Sequence:
TGCATGCA
reverse_complement(dna)8nt DNA Sequence:
ACGTACGT
translate(dna"ATGGCCATTGTAATGGGCCGCTGAAAGGGTGCCCGATAG") 13aa Amino Acid Sequence:
MAIVMGR*KGAR*
Leitura e escrita (FASTA/FASTQ)
Na prática da bioinformática, os formatos FASTA e FASTQ são os mais comuns para armazenar sequências biológicas e suas qualidades de leitura. O pacote FASTX.jl integra-se muito bem ao BioSequences.jl, permitindo ler, escrever e iterar sobre registros de forma eficiente.
Com ele, podemos facilmente carregar bancos de sequências para análise, processar leituras de sequenciamento ou salvar resultados em novos arquivos, mantendo a compatibilidade com ferramentas amplamente utilizadas em pipelines de biologia computacional.
Para fazer o download dos dados usados no exemplo diretamente no seu diretório, basta executar o código abaixo:
using Downloads
url = "https://drive.google.com/uc?export=download&id=1VxA72_DKlifgnfec5fdBzWt2t6uHOKy6""https://drive.google.com/uc?export=download&id=1VxA72_DKlifgnfec5fdBzWt2t6uHOKy6"
Downloads.download(url, "seq_exemplo.fasta")"seq_exemplo.fasta"
using FASTX
# Ler FASTA
rdr = open(FASTA.Reader, "seq_exemplo.fasta")FASTX.FASTA.Reader{TranscodingStreams.NoopStream{IOStream}}(TranscodingStreams.NoopStream{IOStream}(<mode=idle>), 1, 1, nothing, FASTX.FASTA.Record("", ""), true)
for rec in rdr
id = FASTA.identifier(rec)
seq = FASTX.sequence(LongDNA{2}, rec)
println("$(id): $(seq)")
endseq1: ATGCGTACGTAGCTAGCTAGCTA
seq2: GGCATCGTAGCTAGGCTAATGC
seq3: TTAGCGATCGATCGATGCTAGC
close(rdr)
# Escrever FASTA
open(FASTA.Writer, "out.fasta") do w
write(w, FASTA.Record(">seq1", String(dna"ATGCATGC")))
end16
Conclusão
O BioSequences.jl é uma ferramenta poderosa para representar e manipular sequências biológicas em Julia. Ele permite criar sequências tipadas de DNA, RNA e proteínas; acessar elementos; realizar operações como complemento e tradução; buscar motivos (na biologia, são padrões que se repetem e que geralmente estão ligados a alguma função biológica); gerar sequências aleatórias; e interagir com formatos comuns como FASTA e FASTQ (via FASTX.jl).
Este foi apenas um guia introdutório. Em futuros posts, com teor mais avançado, podemos explorar temas mais avançados como alinhamento de sequências, integração com bancos de dados biológicos e análise de grandes genomas.
Ferramentas de IA foram utilizadas para correção ortográfica e aprimoramento do texto.