Introdução ao BioSequences.jl

Guia
Pacotes
Ferramentas

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.

Autores
Afiliação

Universidade Estadual de Campinas

Universidade Estadual de Campinas

Data de Publicação

9 de novembro de 2025

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:

using Pkg
Pkg.add(["BioSequences", "FASTX"])

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ídeo
DNA_A
dna[3:6]        # Retorna a fatia (substring) da posição 3 à 6
4nt DNA Sequence:
GTAC
length(dna)     # Retorna o tamanho da sequência
8

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)")
end
seq1: ATGCGTACGTAGCTAGCTAGCTA
seq2: GGCATCGTAGCTAGGCTAATGC
seq3: TTAGCGATCGATCGATGCTAGC
close(rdr)

# Escrever FASTA
open(FASTA.Writer, "out.fasta") do w
    write(w, FASTA.Record(">seq1", String(dna"ATGCATGC")))
end
16

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.

Nota

Ferramentas de IA foram utilizadas para correção ortográfica e aprimoramento do texto.