Skip to content

Introdução ao DNA

O ácido desoxirribonucleico (DNA) é a molécula que carrega a informação genética para o desenvolvimento, funcionamento, crescimento e reprodução de todos os organismos conhecidos e muitos vírus.

estrutura do DNA

O DNA é uma molécula de dupla hélice, composta por duas cadeias que se enrolam uma na outra.

Composição dos Nucleotídeos

Cada nucleotídeo é composto por três partes:

  • Grupo Fosfato: Ligação entre nucleotídeos
  • Açúcar (Desoxirribose): estrutura da cadeia
  • Base Nitrogenada: Informação genética

Bases Nitrogenadas

Existem quatro tipos de bases nitrogenadas no DNA:

  • Adenina (A): Pareia com Timina (T)
  • Guanina (G): Pareia com Citosina (C)
  • Citosina (C): Pareia com Guanina (G)
  • Timina (T): Pareia com Adenina (A)

DNA e Câncer

Danos ao DNA podem levar a mutações, que são alterações na sequência de nucleotídeos:

  • Mutações em Genes Reguladores: Controle do ciclo celular
  • Acúmulo de Mutações: Transformação maligna
  • Mecanismos de Reparo: Proteção contra danos
  • Instabilidade Genômica: Característica do câncer

Aplicações Computacionais

Análise de Sequências

Instale o Biopython uma vez no ambiente:

bash
pip install biopython
python
# NOTE: Exemplo educacional; não é um pipeline validado de análise.
from collections import Counter
from pathlib import Path

from Bio import SeqIO
from Bio.SeqUtils import gc_fraction

EXEMPLO_FASTA = Path("gene.fasta")

def escrever_fasta_exemplo(path: Path = EXEMPLO_FASTA) -> None:
    """Cria um FASTA pequeno para o exemplo rodar de ponta a ponta."""
    path.write_text(
        ">gene_example\n"
        "ATGCGTACGTACGTACGTAGCTAGCTAGCTACGTAGCTACGTAGCATGCTAGCTAGCTAGC\n"
        "TAGCTAGCTAGCTAGCTAGCTAGCTACGTAGCTAGCTAGCTAGCTAGCTACGTAGCTAGCTAGC\n",
        encoding="utf-8",
    )

def analisar_sequencia_dna(sequence_file: str | Path) -> dict:
    """Analisa uma sequência FASTA de DNA com estatísticas educacionais básicas."""
    record = SeqIO.read(str(sequence_file), "fasta")
    dna_seq = str(record.seq).upper()

    bases_permitidas = {"A", "C", "G", "T", "N"}
    bases_invalidas = sorted(set(dna_seq) - bases_permitidas)
    if bases_invalidas:
        raise ValueError(f"Bases inesperadas no FASTA: {', '.join(bases_invalidas)}")

    base_counts = Counter(dna_seq)
    bases_canonicas = sum(base_counts[base] for base in "ACGT")
    gc_content = gc_fraction(dna_seq) * 100
    at_ratio = base_counts["A"] / base_counts["T"] if base_counts["T"] else None
    gc_ratio = base_counts["G"] / base_counts["C"] if base_counts["C"] else None

    return {
        "record_id": record.id,
        "length": len(dna_seq),
        "canonical_base_count": bases_canonicas,
        "gc_content": gc_content,
        "base_counts": dict(base_counts),
        "at_ratio": at_ratio,
        "gc_ratio": gc_ratio,
    }

escrever_fasta_exemplo()
results = analisar_sequencia_dna(EXEMPLO_FASTA)

print(f"Registro: {results['record_id']}")
print(f"Comprimento: {results['length']} bp")
print(f"Conteúdo GC: {results['gc_content']:.1f}%")
print(
    f"Relação A/T: {results['at_ratio']:.2f}"
    if results["at_ratio"] is not None
    else "Relação A/T: n/a"
)

Detecção de Mutações

python
def detect_mutations(reference_seq, sample_seq):
    """Detecta mutações entre sequências de referência e amostra."""
    
    mutations = []
    
    # Comparar posição por posição
    for i, (ref_base, sample_base) in enumerate(zip(reference_seq, sample_seq)):
        if ref_base != sample_base:
            mutation = {
                'position': i + 1,
                'reference': ref_base,
                'sample': sample_base,
                'type': classify_mutation(ref_base, sample_base)
            }
            mutations.append(mutation)
    
    return mutations

def classify_mutation(ref_base, sample_base):
    """Classifica o tipo de mutação."""
    
    # Transições (purina ↔ purina, pirimidina ↔ pirimidina)
    purines = {'A', 'G'}
    pyrimidines = {'C', 'T'}
    
    if (ref_base in purines and sample_base in purines) or \
       (ref_base in pyrimidines and sample_base in pyrimidines):
        return "Transição"
    else:
        return "Transversão"

# Exemplo
ref = "ATGCGATCGATCG"
sample = "ATGCGCTCGATCG"
mutations = detect_mutations(ref, sample)

for mut in mutations:
    print(f"Posição {mut['position']}: {mut['reference']}{mut['sample']} ({mut['type']})")

Técnicas de Análise

  • Sequenciamento: Determinação da ordem das bases
  • PCR: Amplificação de regiões específicas
  • Southern Blot: Detecção de sequências específicas
  • Hibridização: Identificação de sequências complementares

Recursos de Aprendizado


Se essas mutações ocorrerem em genes que controlam o ciclo celular, elas podem levar ao desenvolvimento de câncer.

Versão inicial pública. Conteúdo evolui com revisão contínua. Dúvidas: [email protected] · CC BY 4.0 quando aplicável.