Was macht scikit-bio?
Übersicht
scikit-bio ist eine umfassende Python-Bibliothek für die Arbeit mit biologischen Daten. Wenden Sie dieses Skill für bioinformatische Analysen an, die Sequenzmanipulation, Alignment, Phylogenetik, mikrobielle Ökologie und multivariate Statistik umfassen.
Wann dieses Skill verwendet werden sollte
Dieses Skill sollte verwendet werden, wenn der Benutzer:
- Mit biologischen Sequenzen (DNA, RNA, Protein) arbeitet
- Biologische Dateiformate (FASTA, FASTQ, GenBank, Newick, BIOM usw.) lesen/schreiben muss
- Sequenzalignments durchführt oder nach Motiven sucht
- Phylogenetische Bäume erstellt oder analysiert
- Diversitätsmetriken (Alpha/Beta-Diversität, UniFrac-Distanzen) berechnet
- Ordinationsanalysen (PCoA, CCA, RDA) durchführt
- Statistische Tests für biologische/ökologische Daten (PERMANOVA, ANOSIM, Mantel) ausführt
- Mikrobiom- oder Community-Ökologiedaten analysiert
- Mit Protein-Embeddings aus Sprachmodellen arbeitet
- Biologische Datentabellen manipulieren muss
Kernfunktionen
1. Sequenzmanipulation
Arbeiten Sie mit biologischen Sequenzen unter Verwendung spezialisierter Klassen für DNA-, RNA- und Proteindaten.
Wichtige Operationen:
- Sequenzen aus FASTA-, FASTQ-, GenBank-, EMBL-Formaten lesen/schreiben
- Sequenzsegmentierung, Verkettung und Suche
- Reverse Komplement, Transkription (DNA→RNA) und Translation (RNA→Protein)
- Motive und Muster mit Regex finden
- Distanzen berechnen (Hamming, k-mer-basiert)
- Mit Sequenzqualitätswerten und Metadaten umgehen
Häufige Muster:
import skbio
# Sequenzen aus Datei lesen
seq = skbio.DNA.read('input.fasta')
# Sequenzoperationen
rc = seq.reverse_complement()
rna = seq.transcribe()
protein = rna.translate()
# Motive finden
motif_positions = seq.find_with_regex('ATG[ACGT]{3}')
# Eigenschaften prüfen
has_degens = seq.has_degenerates()
seq_no_gaps = seq.degap()
Wichtige Hinweise:
- Verwenden Sie die Klassen
DNA,RNA,Proteinfür grammatifizierte Sequenzen mit Validierung - Verwenden Sie die Klasse
Sequencefür generische Sequenzen ohne Alphabetbeschränkungen - Qualitätswerte werden automatisch aus FASTQ-Dateien in positionsbezogene Metadaten geladen
- Metadatentypen: sequenzbezogen (ID, Beschreibung), positionsbezogen (pro Basis), intervallbezogen (Regionen/Merkmale)
2. Sequenzalignment
Führen Sie paarweise und multiple Sequenzalignments mit der pair_align-Engine durch (eingeführt in scikit-bio 0.7.0), einem vielseitigen und effizienten Dynamic-Programming-Aligner.
Wichtige Fähigkeiten:
- Globales, lokales und semi-globales Alignment (frei konfigurierbare Enden) in einer Funktion
- Bequeme Wrapper
pair_align_nucl(BLASTN-ähnlich) undpair_align_prot(BLASTP-ähnlich) - Konfigurierbare Bewertung: Match/Mismatch-Tupel oder benannte Substitutionsmatrix; lineare oder affine Gap-Strafen
PairAlignPath-Ergebnisse enthalten CIGAR-Strings und konvertieren in alignierte Sequenzen- Speicherung und Manipulation multipler Sequenzalignments mit
TabularMSA
Häufige Muster:
from skbio import DNA, Protein
from skbio.alignment import pair_align_nucl, pair_align_prot, pair_align, TabularMSA
# Nukleotid-Alignment mit BLASTN-ähnlichen Standardwerten
seq1, seq2 = DNA('ACTACCAGATTACTTACGGATCAGG'), DNA('CGAAACTACTAGATTACGGATCTTA')
aln = pair_align_nucl(seq1, seq2)
aln.score # Alignment-Score (float)
path = aln.paths[0] # PairAlignPath (repr zeigt CIGAR)
aligned_seqs = path.to_aligned((seq1, seq2)) # Liste von gapped Strings
# Erstellen einer TabularMSA aus dem Alignments-Pfad + Originalsequenzen
msa = TabularMSA.from_path_seqs(path, (seq1, seq2))
# Algorithmus anpassen mit pair_align (Standardmodus='global')
aln = pair_align(seq1, seq2, mode='local') # Smith-Waterman
aln = pair_align(seq1, seq2, sub_score=(2, -3), gap_cost=(5, 2)) # affine Gaps
aln = pair_align(seq1, seq2, sub_score='NUC.4.4', gap_cost=3) # Substitutionsmatrix, lineare Gap-Strafe
# Protein-Alignment (BLASTP-ähnlich, BLOSUM62)
aln = pair_align_prot(Protein('HEAGAWGHEE'), Protein('PAWHEAE'))
# Multiples Alignment aus Datei lesen und zusammenfassen
msa = TabularMSA.read('alignment.fasta', constructor=DNA)
consensus = msa.consensus()
Wichtige Hinweise:
pair_alignersetzt den entfernten SSW-Wrapper (local_pairwise_align_ssw,StripedSmithWaterman) und die veralteten Pure-Python-Aligner (global_pairwise_align,local_pairwise_align_nucleotideusw.)- Das Ergebnis ist ein
PairAlignResult, das auch alsscore, paths, matricesentpackt werden kann (verwenden Siekeep_matrices=True, um die DP-Matrix zu behalten) sub_scoreakzeptiert ein(match, mismatch)-Tupel oder einen Matrixnamen (z. B.'NUC.4.4','BLOSUM62');gap_costakzeptiert eine einzelne Zahl (linear) oder ein(open, extend)-Tupel (affin)- Analysieren Sie externe CIGAR-Strings mit
PairAlignPath.from_cigar('1I8M2D5M2I'); bewerten Sie ein vorhandenes Alignment mitalign_score(...)und erstellen Sie eine Distanzmatrix aus einem MSA mitalign_dists(...)
3. Phylogenetische Bäume
Erstellen, manipulieren und analysieren Sie phylogenetische Bäume, die evolutionäre Beziehungen darstellen.
Wichtige Fähigkeiten:
- Baumerstellung aus Distanzmatrizen (UPGMA/WPGMA, Neighbor Joining, GME, BME)
- Baumumordnung mit Nearest-Neighbor-Interchange (
nni) - Baumanipulation (Beschneiden, Neuwurzeln, Durchlauf)
- Distanzberechnungen (patristisch über
cophenet, Robinson-Foulds übercompare_rfd) - ASCII-Visualisierung
- Newick-Format I/O
Häufige Muster:
from skbio import TreeNode
from skbio.tree import nj, upgma, gme, bme, rf_dists
# Baum aus Datei lesen
tree = TreeNode.read('tree.nwk')
# Baum aus Distanzmatrix erstellen
tree = nj(distance_matrix)
# Baumoperationen
subtree = tree.shear(['taxon1', 'taxon2', 'taxon3'])
tips = [node for node in tree.tips()]
lca = tree.lca(['taxon1', 'taxon2'])
# Distanzen berechnen
patristic_dist = tree.find('taxon1').distance(tree.find('taxon2'))
cophenetic_dm = tree.cophenet() # patristische Distanzmatrix zwischen Tips
# Zwei Bäume vergleichen (Robinson-Foulds)
rf_distance = tree.compare_rfd(other_tree)
# Paarweise RF-Distanzen zwischen vielen Bäumen -> DistanceMatrix
rf_dm = rf_dists([tree, other_tree, third_tree])
Wichtige Hinweise:
- Verwenden Sie
nj()für Neighbor Joining (klassische phylogenetische Methode) - Verwenden Sie
upgma()für UPGMA/WPGMA (geht von molekularer Uhr aus) - GME und BME sind hoch skalierbar für große Bäume; verfeinern Sie die Topologie mit
nni() cophenet()(frühertip_tip_distances) gibt die patristische Distanzmatrix zurück;compare_rfd()ist die Robinson-Foulds-Methode (compare_wrfd/compare_cophenetfür gewichtete/kophenetische Varianten)lca()ist der niedrigste gemeinsame Vorfahre;lowest_common_ancestorbleibt als Alias erhalten- Bäume können verwurzelt oder unverwurzelt sein; einige Metriken erfordern eine bestimmte Verwurzelung
4. Diversitätsanalyse
Berechnen Sie Alpha- und Beta-Diversitätsmetriken für die mikrobielle Ökologie und Community-Analyse.
Wichtige Fähigkeiten:
- Alpha-Diversität: Artenreichtum (
sobs,observed_features,chao1,ace), Shannon, Simpson, Hill-Zahlen (hill), Faith's PD (faith_pd), verallgemeinerte PD (phydiv), Pielou's Evenness - Beta-Diversität: Bray-Curtis, Jaccard, gewichteter/ungewichteter UniFrac, euklidische Distanzen
- Phylogenetische Diversitätsmetriken (erfordern Baumeingabe)
- Verdünnung (Rarefaction) und Teilstichproben
- Integration mit Ordination und statistischen Tests
Häufige Muster:
from skbio.diversity import alpha_diversity, beta_diversity
# Alpha-Diversität (phylogenetische Metriken nehmen taxa= für die Zuordnung von Tip-Namen)
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)
# Beta-Diversität
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)
# Verfügbare Metriken abrufen
from skbio.diversity import get_alpha_diversity_metrics
print(get_alpha_diversity_metrics())
Wichtige Hinweise:
- Zählungen müssen ganze Zahlen sein, die Abundanzen darstellen, keine relativen Häufigkeiten
- Das Argument für phylogenetische Metriken ist
taxa=(umbenannt vonotu_idsin 0.6.0; der alte Name ist ein veralteter Alias);observed_otusist jetztobserved_features(odersobs) counts_matrixkann jede tabellenähnliche Eingabe sein (NumPy-Array, pandas/polars DataFrame, BIOMTableoder AnnData) über das Dispatch-System- Phylogenetische Metriken (Faith's PD, UniFrac) erfordern einen Baum und eine Zuordnung von Taxa zu Tips
- Verwenden Sie
partial_beta_diversity()für bestimmte Probenpaare oderblock_beta_diversity()für große blockzerlegte Berechnungen - Alpha-Diversität gibt eine
pandas.Serieszurück, Beta-Diversität gibt eineDistanceMatrixzurück
5. Ordinationsmethoden
Reduzieren Sie hochdimensionale biologische Daten auf visualisierbare niedrigdimensionale Räume.
Wichtige Fähigkeiten:
- PCoA (Principal Coordinate Analysis) aus Distanzmatrizen
- CA (Correspondence Analysis) für Kontingenztabellen
- CCA (Canonical Correspondence Analysis) mit Umweltbeschränkungen
- RDA (Redundancy Analysis) für lineare Beziehungen
- Biplot-Projektion zur Merkmalsinterpretation
Häufige Muster:
from skbio.stats.ordination import pcoa, cca
import skbio
# PCoA aus Distanzmatrix (Anzahl der Dimensionen für große Matrizen begrenzen)
pcoa_results = pcoa(distance_matrix, dimensions=3)
pc1 = pcoa_results.samples['PC1']
pc2 = pcoa_results.samples['PC2']
# Integrierter Streudiagramm, farblich nach einer Metadatenspalte
fig = pcoa_results.plot(sample_metadata, column='bodysite')
# CCA mit Umweltvariablen
cca_results = cca(species_matrix, environmental_matrix)
# Ordnungsergebnisse speichern/laden
pcoa_results.write('ordination.txt')
results = skbio.OrdinationResults.read('ordination.txt')
Wichtige Hinweise:
- PCoA funktioniert mit jeder Distanz-/Unähnlichkeitsmatrix; übergeben Sie
dimensionsals int (Anzahl) oder als float in (0, 1] (Anteil der kumulativen Varianz, der beibehalten werden soll) OrdinationResultsstellt pandas-basierte Attribute bereit:samples,features,eigvals,proportion_explained,biplot_scores,sample_constraints- CCA zeigt die Umweltfaktoren der Gemeinschaftszusammensetzung auf
OrdinationResults.plot()erzeugt eine matplotlib-Figur; Ergebnisse lassen sich auch mit seaborn/plotly integrieren
6. Statistische Tests
Führen Sie Hypothesentests durch, die speziell für ökologische und biologische Daten geeignet sind.
Wichtige Fähigkeiten:
- PERMANOVA: Testen Sie Gruppenunterschiede mit Distanzmatrizen
- ANOSIM: Alternativer Test für Gruppenunterschiede
- PERMDISP: Testen Sie die Homogenität der Gruppendispersion
- Mantel-Test: Korrelation zwischen Distanzmatrizen
- Bioenv: Finden Sie Umweltvariablen, die mit Distanzen korreliert sind
- Differentielle Häufigkeit:
ancom,dirmult_ttestunddirmult_lme(longitudinale gemischte Effekte) inskbio.stats.composition
Häufige Muster:
from skbio.stats.distance import permanova, anosim, mantel
# Testen, ob sich Gruppen signifikant unterscheiden
permanova_results = permanova(distance_matrix, grouping, permutations=999)
print(f"p-Wert: {permanova_results['p-value']}")
# ANOSIM-Test
anosim_results = anosim(distance_matrix, grouping, permutations=999)
# Mantel-Test zwischen zwei Distanzmatrizen
mantel_results = mantel(dm1, dm2, method='pearson', permutations=999)
print(f"Korrelation: {mantel_results[0]}, p-Wert: {mantel_results[1]}")
# Differentielle Häufigkeit in einer Merkmalstabelle (Rohzahlen empfohlen)
from skbio.stats.composition import dirmult_ttest
da = dirmult_ttest(counts_table, grouping, treatment='caseA', reference='control')
Wichtige Hinweise:
- Permutationstests bieten nicht-parametrische Signifikanztests
- Verwenden Sie 999+ Permutationen für robuste p-Werte
- PERMANOVA ist empfindlich gegenüber Dispersionsunterschieden; kombinieren Sie es mit PERMDISP
- Mantel-Tests bewerten die Matrixkorrelation (z. B. geografische vs. genetische Distanz)
- Versorgen Sie differentielle Häufigkeitstests mit Rohzahlen, nicht mit vorab normalisierten Anteilen, um die Größenordnungsinformationen zu erhalten
7. Datei-I/O und Formatkonvertierung
Lesen und schreiben Sie 19+ biologische Dateiformate mit automatischer Formaterkennung.
Unterstützte Formate:
- Sequenzen: FASTA, FASTQ, GenBank, EMBL, QSeq
- Alignments: Clustal, PHYLIP, Stockholm
- Bäume: Newick
- Tabellen: BIOM (HDF5 und JSON)
- Distanzen: durch Trennzeichen getrennte quadratische Matrizen
- Analyse: BLAST+6/7, GFF3, Ordnungsergebnisse
- Metadaten: TSV/CSV mit Validierung
Häufige Muster:
import skbio
# Lesen mit automatischer Formaterkennung
seq = skbio.DNA.read('file.fasta', format='fasta')
tree = skbio.TreeNode.read('tree.nwk')
# In Datei schreiben
seq.write('output.fasta', format='fasta')
# Generator für große Dateien (speichereffizient)
for seq in skbio.io.read('large.fasta', format='fasta', constructor=skbio.DNA):
process(seq)
# Formate konvertieren
seqs = list(skbio.io.read('input.fastq', format='fastq', constructor=skbio.DNA))
skbio.io.write(seqs, format='fasta', into='output.fasta')
Wichtige Hinweise:
- Verwenden Sie Generatoren für große Dateien, um Speicherprobleme zu vermeiden
- Das Format kann automatisch erkannt werden, wenn der Parameter
intoangegeben ist - Einige Objekte können in mehrere Formate geschrieben werden
- Unterstützung für stdin/stdout-Piping mit
verify=False
8. Distanzmatrizen
Erstellen und manipulieren Sie Distanz-/Unähnlichkeitsmatrizen mit statistischen Methoden.
Wichtige Fähigkeiten:
- Speichern von symmetrischen (
DistanceMatrix, hohle Diagonale) oder allgemeinen paarweisen (PairwiseMatrix) Daten - ID-basierte Indizierung und Slicing
- Integration mit Diversität, Ordination und statistischen Tests
- Lesen/Schreiben im durch Trennzeichen getrennten Textformat
Häufige Muster:
from skbio import DistanceMatrix
import numpy as np
# Aus Array erstellen
data = np.array([[0, 1, 2], [1, 0, 3], [2, 3, 0]])
dm = DistanceMatrix(data, ids=['A', 'B', 'C'])
# Distanzen abrufen
dist_ab = dm['A', 'B']
row_a = dm['A']
# Aus Datei lesen
dm = DistanceMatrix.read('distances.txt')
# In nachgelagerten Analysen verwenden
pcoa_results = pcoa(dm)
permanova_results = permanova(dm, grouping)
Wichtige Hinweise:
DistanceMatrixerzwingt Symmetrie und eine Null- (hohle) Diagonale; es ist eine Unterklasse vonSymmetricMatrixPairwiseMatrix(umbenannt vonDissimilarityMatrix, das als veralteter Alias beibehalten wird) erlaubt allgemeine/asymmetrische Werte- IDs ermöglichen die Integration mit Metadaten und biologischem Wissen