O que scikit-bio faz?
Visão Geral
scikit-bio é uma biblioteca Python abrangente para trabalhar com dados biológicos. Aplique esta habilidade para análises de bioinformática que abrangem manipulação de sequências, alinhamento, filogenética, ecologia microbiana e estatística multivariada.
Quando Usar Esta Habilidade
Esta habilidade deve ser usada quando o usuário:
- Trabalha com sequências biológicas (DNA, RNA, proteína)
- Precisa ler/escrever formatos de arquivo biológicos (FASTA, FASTQ, GenBank, Newick, BIOM, etc.)
- Realiza alinhamentos de sequências ou busca por motivos
- Constrói ou analisa árvores filogenéticas
- Calcula métricas de diversidade (diversidade alfa/beta, distâncias UniFrac)
- Realiza análises de ordenação (PCoA, CCA, RDA)
- Executa testes estatísticos em dados biológicos/ecológicos (PERMANOVA, ANOSIM, Mantel)
- Analisa dados de microbioma ou ecologia de comunidades
- Trabalha com embeddings de proteínas de modelos de linguagem
- Precisa manipular tabelas de dados biológicos
Capacidades Principais
1. Manipulação de Sequências
Trabalhe com sequências biológicas usando classes especializadas para dados de DNA, RNA e proteínas.
Operações principais:
- Ler/escrever sequências dos formatos FASTA, FASTQ, GenBank, EMBL
- Fatiamento, concatenação e busca de sequências
- Complemento reverso, transcrição (DNA→RNA) e tradução (RNA→proteína)
- Encontrar motivos e padrões usando regex
- Calcular distâncias (Hamming, baseada em k-mer)
- Manipular escores de qualidade e metadados de sequências
Padrões comuns:
import skbio
# Ler sequências de arquivo
seq = skbio.DNA.read('input.fasta')
# Operações com sequências
rc = seq.reverse_complement()
rna = seq.transcribe()
protein = rna.translate()
# Encontrar motivos
motif_positions = seq.find_with_regex('ATG[ACGT]{3}')
# Verificar propriedades
has_degens = seq.has_degenerates()
seq_no_gaps = seq.degap()
Notas importantes:
- Use as classes
DNA,RNA,Proteinpara sequências com gramática e validação - Use a classe
Sequencepara sequências genéricas sem restrições de alfabeto - Escores de qualidade são carregados automaticamente de arquivos FASTQ nos metadados posicionais
- Tipos de metadados: nível de sequência (ID, descrição), posicional (por base), intervalo (regiões/características)
2. Alinhamento de Sequências
Realize alinhamentos de sequências pareados e múltiplos usando o mecanismo pair_align (introduzido no scikit-bio 0.7.0), um alinhador versátil e eficiente de programação dinâmica.
Capacidades principais:
- Alinhamento global, local e semi-global (extremidades livres configuráveis) em uma única função
- Wrappers de conveniência
pair_align_nucl(similar a BLASTN) epair_align_prot(similar a BLASTP) - Pontuação configurável: tupla de correspondência/discordância ou matriz de substituição nomeada; penalidades de gap lineares ou afins
- Resultados de
PairAlignPathfornecem strings CIGAR e convertem para sequências alinhadas - Armazenamento e manipulação de alinhamentos múltiplos com
TabularMSA
Padrões comuns:
from skbio import DNA, Protein
from skbio.alignment import pair_align_nucl, pair_align_prot, pair_align, TabularMSA
# Alinhamento de nucleotídeos com padrões BLASTN
seq1, seq2 = DNA('ACTACCAGATTACTTACGGATCAGG'), DNA('CGAAACTACTAGATTACGGATCTTA')
aln = pair_align_nucl(seq1, seq2)
aln.score # pontuação do alinhamento (float)
path = aln.paths[0] # PairAlignPath (repr mostra CIGAR)
aligned_seqs = path.to_aligned((seq1, seq2)) # lista de strings com gaps
# Construir um TabularMSA a partir do caminho do alinhamento + sequências originais
msa = TabularMSA.from_path_seqs(path, (seq1, seq2))
# Personalizar o algoritmo via pair_align (modo padrão='global')
aln = pair_align(seq1, seq2, mode='local') # Smith-Waterman
aln = pair_align(seq1, seq2, sub_score=(2, -3), gap_cost=(5, 2)) # gaps afins
aln = pair_align(seq1, seq2, sub_score='NUC.4.4', gap_cost=3) # matriz de substituição, gap linear
# Alinhamento de proteínas (tipo BLASTP, BLOSUM62)
aln = pair_align_prot(Protein('HEAGAWGHEE'), Protein('PAWHEAE'))
# Ler um alinhamento múltiplo de arquivo e resumir
msa = TabularMSA.read('alignment.fasta', constructor=DNA)
consensus = msa.consensus()
Notas importantes:
pair_alignsubstitui o wrapper SSW removido (local_pairwise_align_ssw,StripedSmithWaterman) e os alinhadores Python puros obsoletos (global_pairwise_align,local_pairwise_align_nucleotide, etc.)- O resultado é um
PairAlignResultque também pode ser desempacotado comoscore, paths, matrices(usekeep_matrices=Truepara manter a matriz DP) sub_scoreaceita uma tupla(match, mismatch)ou um nome de matriz (e.g.,'NUC.4.4','BLOSUM62');gap_costaceita um único número (linear) ou uma tupla(open, extend)(afim)- Analise strings CIGAR externas com
PairAlignPath.from_cigar('1I8M2D5M2I'); pontue um alinhamento existente comalign_score(...)e construa uma matriz de distância a partir de um MSA comalign_dists(...)
3. Árvores Filogenéticas
Construa, manipule e analise árvores filogenéticas representando relações evolutivas.
Capacidades principais:
- Construção de árvores a partir de matrizes de distância (UPGMA/WPGMA, Neighbor Joining, GME, BME)
- Rearranjo de árvores com nearest neighbor interchange (
nni) - Manipulação de árvores (poda, reroot, travessia)
- Cálculo de distâncias (patrística via
cophenet, Robinson-Foulds viacompare_rfd) - Visualização ASCII
- I/O no formato Newick
Padrões comuns:
from skbio import TreeNode
from skbio.tree import nj, upgma, gme, bme, rf_dists
# Ler árvore de arquivo
tree = TreeNode.read('tree.nwk')
# Construir árvore a partir de matriz de distância
tree = nj(distance_matrix)
# Operações com árvores
subtree = tree.shear(['taxon1', 'taxon2', 'taxon3'])
tips = [node for node in tree.tips()]
lca = tree.lca(['taxon1', 'taxon2'])
# Calcular distâncias
patristic_dist = tree.find('taxon1').distance(tree.find('taxon2'))
cophenetic_dm = tree.cophenet() # matriz de distância patrística entre folhas
# Comparar duas árvores (Robinson-Foulds)
rf_distance = tree.compare_rfd(other_tree)
# Distâncias RF pareadas entre muitas árvores -> DistanceMatrix
rf_dm = rf_dists([tree, other_tree, third_tree])
Notas importantes:
- Use
nj()para neighbor joining (método filogenético clássico) - Use
upgma()para UPGMA/WPGMA (assume relógio molecular) - GME e BME são altamente escaláveis para árvores grandes; refine a topologia com
nni() cophenet()(anteriormentetip_tip_distances) retorna a matriz de distância patrística;compare_rfd()é o método Robinson-Foulds (usecompare_wrfd/compare_cophenetpara variantes ponderadas/cophenticas)lca()é o ancestral comum mais baixo;lowest_common_ancestorpermanece como um alias- Árvores podem ser enraizadas ou não enraizadas; algumas métricas requerem um enraizamento específico
4. Análise de Diversidade
Calcule métricas de diversidade alfa e beta para ecologia microbiana e análise de comunidades.
Capacidades principais:
- Diversidade alfa: riqueza (
sobs,observed_features,chao1,ace), Shannon, Simpson, números de Hill (hill), PD de Faith (faith_pd), PD generalizado (phydiv), uniformidade de Pielou - Diversidade beta: Bray-Curtis, Jaccard, UniFrac ponderado/não-ponderado, distâncias Euclidianas
- Métricas de diversidade filogenética (requerem entrada de árvore)
- Rarefação e subamostragem
- Integração com ordenação e testes estatísticos
Padrões comuns:
from skbio.diversity import alpha_diversity, beta_diversity
# Diversidade alfa (métricas filogenéticas usam taxa= para mapeamento de nomes de folhas)
alpha = alpha_diversity('shannon', counts_matrix, ids=sample_ids)
faith_pd = alpha_diversity('faith_pd', counts_matrix, ids=sample_ids,
tree=tree, taxa=feature_ids)
# Diversidade beta
bc_dm = beta_diversity('braycurtis', counts_matrix, ids=sample_ids)
unifrac_dm = beta_diversity('unweighted_unifrac', counts_matrix,
ids=sample_ids, tree=tree, taxa=feature_ids)
# Obter métricas disponíveis
from skbio.diversity import get_alpha_diversity_metrics
print(get_alpha_diversity_metrics())
Notas importantes:
- As contagens devem ser inteiros representando abundâncias, não frequências relativas
- O argumento da métrica filogenética é
taxa=(renomeado deotu_idsna versão 0.6.0; o nome antigo é um alias obsoleto);observed_otusagora éobserved_features(ousobs) counts_matrixpode ser qualquer entrada do tipo tabela (array NumPy, DataFrame pandas/polars, tabela BIOM ou AnnData) através do sistema de despacho- Métricas filogenéticas (PD de Faith, UniFrac) requerem uma árvore e mapeamento de taxa para folha
- Use
partial_beta_diversity()para pares de amostra específicos, oublock_beta_diversity()para cálculos grandes decompostos em blocos - Diversidade alfa retorna um
pandas.Series, diversidade beta retorna umDistanceMatrix
5. Métodos de Ordenação
Reduza dados biológicos de alta dimensionalidade para espaços visíveis de menor dimensionalidade.
Capacidades principais:
- PCoA (Análise de Coordenadas Principais) a partir de matrizes de distância
- CA (Análise de Correspondência) para tabelas de contingência
- CCA (Análise de Correspondência Canônica) com restrições ambientais
- RDA (Análise de Redundância) para relações lineares
- Projeção de biplot para interpretação de características
Padrões comuns:
from skbio.stats.ordination import pcoa, cca
import skbio
# PCoA a partir de matriz de distância (limitar dimensões para matrizes grandes)
pcoa_results = pcoa(distance_matrix, dimensions=3)
pc1 = pcoa_results.samples['PC1']
pc2 = pcoa_results.samples['PC2']
# Gráfico de dispersão embutido colorido por uma coluna de metadados
fig = pcoa_results.plot(sample_metadata, column='bodysite')
# CCA com variáveis ambientais
cca_results = cca(species_matrix, environmental_matrix)
# Salvar/carregar resultados de ordenação
pcoa_results.write('ordination.txt')
results = skbio.OrdinationResults.read('ordination.txt')
Notas importantes:
- PCoA funciona com qualquer matriz de distância/dissimilaridade; passe
dimensionscomo um int (contagem) ou um float em (0, 1] (fração da variância cumulativa a ser retida) OrdinationResultsexpõe atributos baseados em pandas:samples,features,eigvals,proportion_explained,biplot_scores,sample_constraints- CCA revela os direcionadores ambientais da composição da comunidade
OrdinationResults.plot()produz uma figura matplotlib; os resultados também integram com seaborn/plotly
6. Testes Estatísticos
Execute testes de hipótese específicos para dados ecológicos e biológicos.
Capacidades principais:
- PERMANOVA: teste diferenças de grupos usando matrizes de distância
- ANOSIM: teste alternativo para diferenças de grupos
- PERMDISP: teste homogeneidade das dispersões dos grupos
- Teste de Mantel: correlação entre matrizes de distância
- Bioenv: encontre variáveis ambientais correlacionadas com distâncias
- Abundância diferencial:
ancom,dirmult_ttest, edirmult_lme(efeitos mistos longitudinais) emskbio.stats.composition
Padrões comuns:
from skbio.stats.distance import permanova, anosim, mantel
# Testar se os grupos diferem significativamente
permanova_results = permanova(distance_matrix, grouping, permutations=999)
print(f"p-valor: {permanova_results['p-value']}")
# Teste ANOSIM
anosim_results = anosim(distance_matrix, grouping, permutations=999)
# Teste de Mantel entre duas matrizes de distância
mantel_results = mantel(dm1, dm2, method='pearson', permutations=999)
print(f"Correlação: {mantel_results[0]}, p-valor: {mantel_results[1]}")
# Abundância diferencial em uma tabela de características (contagens brutas recomendadas)
from skbio.stats.composition import dirmult_ttest
da = dirmult_ttest(counts_table, grouping, treatment='caseA', reference='control')
Notas importantes:
- Testes de permutação fornecem testes de significância não paramétricos
- Use 999+ permutações para p-valores robustos
- PERMANOVA é sensível a diferenças de dispersão; combine com PERMDISP
- Testes de Mantel avaliam correlação entre matrizes (e.g., distância geográfica vs genética)
- Forneça testes de abundância diferencial com contagens brutas, não proporções pré-normalizadas, para preservar informações de magnitude
7. I/O de Arquivo e Conversão de Formato
Leia e escreva 19+ formatos de arquivo biológicos com detecção automática de formato.
Formatos suportados:
- Sequências: FASTA, FASTQ, GenBank, EMBL, QSeq
- Alinhamentos: Clustal, PHYLIP, Stockholm
- Árvores: Newick
- Tabelas: BIOM (HDF5 e JSON)
- Distâncias: matrizes quadradas delimitadas
- Análise: BLAST+6/7, GFF3, resultados de ordenação
- Metadados: TSV/CSV com validação
Padrões comuns:
import skbio
# Ler com detecção automática de formato
seq = skbio.DNA.read('file.fasta', format='fasta')
tree = skbio.TreeNode.read('tree.nwk')
# Escrever para arquivo
seq.write('output.fasta', format='fasta')
# Gerador para arquivos grandes (eficiente em memória)
for seq in skbio.io.read('large.fasta', format='fasta', constructor=skbio.DNA):
process(seq)
# Converter formatos
seqs = list(skbio.io.read('input.fastq', format='fastq', constructor=skbio.DNA))
skbio.io.write(seqs, format='fasta', into='output.fasta')
Notas importantes:
- Use geradores para arquivos grandes para evitar problemas de memória
- O formato pode ser detectado automaticamente quando o parâmetro
intoé especificado - Alguns objetos podem ser escritos em vários formatos
- Suporte para pipe de stdin/stdout com
verify=False
8. Matrizes de Distância
Crie e manipule matrizes de distância/dissimilaridade com métodos estatísticos.
Capacidades principais:
- Armazenar dados simétricos (
DistanceMatrix, diagonal oca) ou gerais pareados (PairwiseMatrix) - Indexação e fatiamento baseados em IDs
- Integração com diversidade, ordenação e testes estatísticos
- Ler/escrever formato de texto delimitado
Padrões comuns:
from skbio import DistanceMatrix
import numpy as np
# Criar a partir de array
data = np.array([[0, 1, 2], [1, 0, 3], [2, 3, 0]])
dm = DistanceMatrix(data, ids=['A', 'B', 'C'])
# Acessar distâncias
dist_ab = dm['A', 'B']
row_a = dm['A']
# Ler de arquivo
dm = DistanceMatrix.read('distances.txt')
# Usar em análises downstream
pcoa_results = pcoa(dm)
permanova_results = permanova(dm, grouping)
Notas importantes:
DistanceMatriximpõe simetria e uma diagonal zero (oca); é uma subclasse deSymmetricMatrixPairwiseMatrix(renomeado deDissimilarityMatrix, que é mantido como um alias obsoleto) permite valores gerais/assimétricos- IDs permitem integração com metadados e conhecimento biológico
...