scikit-bio은(는) 무엇을 하나요?
개요
scikit-bio는 생물학 데이터 작업을 위한 포괄적인 Python 라이브러리입니다. 이 스킬은 서열 조작, 정렬, 계통학, 미생물 생태학, 다변량 통계를 아우르는 생물정보학 분석에 사용됩니다.
이 스킬을 사용해야 할 때
이 스킬은 사용자가 다음과 같은 작업을 할 때 사용해야 합니다:
- 생물학 서열(DNA, RNA, 단백질)을 다룰 때
- 생물학 파일 형식(FASTA, FASTQ, GenBank, Newick, BIOM 등)을 읽거나 쓸 때
- 서열 정렬을 수행하거나 모티프를 검색할 때
- 계통수를 구축하거나 분석할 때
- 다양성 지표(알파/베타 다양성, UniFrac 거리)를 계산할 때
- 서열정렬법(PCoA, CCA, RDA)을 수행할 때
- 생물학/생태학 데이터에 대한 통계 검정(PERMANOVA, ANOSIM, Mantel)을 실행할 때
- 미생물군집 또는 군집 생태학 데이터를 분석할 때
- 언어 모델로부터 생성된 단백질 임베딩을 다룰 때
- 생물학 데이터 테이블을 조작해야 할 때
핵심 기능
1. 서열 조작
DNA, RNA, 단백질 데이터를 위한 특수 클래스를 사용하여 생물학 서열을 다룹니다.
주요 작업:
- FASTA, FASTQ, GenBank, EMBL 형식의 서열 읽기/쓰기
- 서열 슬라이싱, 연결, 검색
- 역상보, 전사(DNA→RNA), 번역(RNA→단백질)
- 정규 표현식을 사용한 모티프 및 패턴 찾기
- 거리 계산(Hamming, k-머 기반)
- 서열 품질 점수 및 메타데이터 처리
일반적인 패턴:
import skbio
# 파일에서 서열 읽기
seq = skbio.DNA.read('input.fasta')
# 서열 작업
rc = seq.reverse_complement()
rna = seq.transcribe()
protein = rna.translate()
# 모티프 찾기
motif_positions = seq.find_with_regex('ATG[ACGT]{3}')
# 속성 확인
has_degens = seq.has_degenerates()
seq_no_gaps = seq.degap()
중요 사항:
- 문법적 서열(알파벳 검증 포함)에는
DNA,RNA,Protein클래스를 사용 - 알파벳 제한 없는 일반 서열에는
Sequence클래스를 사용 - 품질 점수는 FASTQ 파일에서 자동으로 위치 메타데이터에 로드됨
- 메타데이터 유형: 서열 수준(ID, 설명), 위치별(염기별), 구간별(영역/특징)
2. 서열 정렬
pair_align 엔진(scikit-bio 0.7.0에서 도입)을 사용하여 쌍별 및 다중 서열 정렬을 수행합니다. 이 엔진은 다양하고 효율적인 동적 프로그래밍 정렬기입니다.
주요 기능:
- 하나의 함수에서 전역, 지역, 반전역 정렬(자유 말단 구성 가능)
- 편의 래퍼
pair_align_nucl(BLASTN 유사) 및pair_align_prot(BLASTP 유사) - 구성 가능한 점수: 일치/불일치 튜플 또는 명명된 치환 행렬; 선형 또는 아핀 갭 패널티
PairAlignPath결과는 CIGAR 문자열을 포함하며 정렬된 서열로 변환 가능TabularMSA를 이용한 다중 서열 정렬 저장 및 조작
일반적인 패턴:
from skbio import DNA, Protein
from skbio.alignment import pair_align_nucl, pair_align_prot, pair_align, TabularMSA
# BLASTN 유사 기본값을 사용한 뉴클레오타이드 정렬
seq1, seq2 = DNA('ACTACCAGATTACTTACGGATCAGG'), DNA('CGAAACTACTAGATTACGGATCTTA')
aln = pair_align_nucl(seq1, seq2)
aln.score # 정렬 점수 (float)
path = aln.paths[0] # PairAlignPath (repr은 CIGAR 표시)
aligned_seqs = path.to_aligned((seq1, seq2)) # 갭이 포함된 문자열 목록
# 정렬 경로 + 원본 서열로 TabularMSA 구축
msa = TabularMSA.from_path_seqs(path, (seq1, seq2))
# pair_align을 통해 알고리즘 사용자 정의 (기본 모드='global')
aln = pair_align(seq1, seq2, mode='local') # Smith-Waterman
aln = pair_align(seq1, seq2, sub_score=(2, -3), gap_cost=(5, 2)) # 아핀 갭
aln = pair_align(seq1, seq2, sub_score='NUC.4.4', gap_cost=3) # 치환 행렬, 선형 갭
# 단백질 정렬 (BLASTP 유사, BLOSUM62)
aln = pair_align_prot(Protein('HEAGAWGHEE'), Protein('PAWHEAE'))
# 다중 정렬 파일을 읽고 요약
msa = TabularMSA.read('alignment.fasta', constructor=DNA)
consensus = msa.consensus()
중요 사항:
pair_align은 제거된 SSW 래퍼(local_pairwise_align_ssw,StripedSmithWaterman)와 폐기된 순수 Python 정렬기(global_pairwise_align,local_pairwise_align_nucleotide등)를 대체- 결과는
PairAlignResult이며score, paths, matrices로 언패킹 가능(keep_matrices=True로 DP 행렬 유지) sub_score는(match, mismatch)튜플 또는 행렬 이름(예:'NUC.4.4','BLOSUM62')을 허용;gap_cost는 단일 숫자(선형) 또는(open, extend)튜플(아핀)을 허용- 외부 CIGAR 문자열은
PairAlignPath.from_cigar('1I8M2D5M2I')로 파싱; 기존 정렬은align_score(...)로 점수 계산, MSA로부터 거리 행렬은align_dists(...)로 구축
3. 계통수
진화 관계를 나타내는 계통수를 구축, 조작 및 분석합니다.
주요 기능:
- 거리 행렬로부터 계통수 구축(UPGMA/WPGMA, Neighbor Joining, GME, BME)
- 최근접 이웃 교환(
nni)을 사용한 계통수 재배열 - 계통수 조작(가지치기, 재근원화, 순회)
- 거리 계산(계통학적
cophenet, Robinson-Fouldscompare_rfd) - ASCII 시각화
- Newick 형식 입출력
일반적인 패턴:
from skbio import TreeNode
from skbio.tree import nj, upgma, gme, bme, rf_dists
# 파일에서 계통수 읽기
tree = TreeNode.read('tree.nwk')
# 거리 행렬로부터 계통수 구축
tree = nj(distance_matrix)
# 계통수 작업
subtree = tree.shear(['taxon1', 'taxon2', 'taxon3'])
tips = [node for node in tree.tips()]
lca = tree.lca(['taxon1', 'taxon2'])
# 거리 계산
patristic_dist = tree.find('taxon1').distance(tree.find('taxon2'))
cophenetic_dm = tree.cophenet() # 말단 간 계통학적 거리 행렬
# 두 계통수 비교 (Robinson-Foulds)
rf_distance = tree.compare_rfd(other_tree)
# 여러 계통수 간 쌍별 RF 거리 -> DistanceMatrix
rf_dm = rf_dists([tree, other_tree, third_tree])
중요 사항:
- 고전적인 계통학적 방법에는
nj()사용 - 분자 시계를 가정하는 경우
upgma()사용(UPGMA/WPGMA) - GME와 BME는 대규모 계통수에 대해 확장성이 뛰어남;
nni()로 위상 정제 cophenet()(이전tip_tip_distances)는 계통학적 거리 행렬을 반환;compare_rfd()는 Robinson-Foulds 방법(compare_wrfd/compare_cophenet은 가중/계통학적 변형)lca()는 최소 공통 조상;lowest_common_ancestor는 별칭으로 유지- 계통수는 유근 또는 무근일 수 있음; 일부 지표는 특정 근원화 필요
4. 다양성 분석
미생물 생태학 및 군집 분석을 위한 알파 및 베타 다양성 지표를 계산합니다.
주요 기능:
- 알파 다양성: 풍부도(
sobs,observed_features,chao1,ace), Shannon, Simpson, Hill 수(hill), Faith의 PD(faith_pd), 일반화 PD(phydiv), Pielou의 균등도 - 베타 다양성: Bray-Curtis, Jaccard, 가중/비가중 UniFrac, 유클리드 거리
- 계통학적 다양성 지표(계통수 입력 필요)
- 희박화 및 하위 표본 추출
- 서열정렬법 및 통계 검정과의 통합
일반적인 패턴:
from skbio.diversity import alpha_diversity, beta_diversity
# 알파 다양성 (계통학적 지표는 taxa=를 사용하여 말단 이름 매핑)
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)
# 베타 다양성
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)
# 사용 가능한 지표 확인
from skbio.diversity import get_alpha_diversity_metrics
print(get_alpha_diversity_metrics())
중요 사항:
- 카운트는 상대 빈도가 아닌 풍부도를 나타내는 정수여야 함
- 계통학적 지표의 인수는
taxa=(0.6.0에서otu_ids에서 이름 변경됨; 이전 이름은 폐기된 별칭);observed_otus는 이제observed_features(또는sobs) counts_matrix는 디스패치 시스템을 통해 모든 테이블 유사 입력(NumPy 배열, pandas/polars DataFrame, BIOMTable, AnnData) 가능- 계통학적 지표(Faith의 PD, UniFrac)는 계통수와 분류군-말단 매핑 필요
- 특정 샘플 쌍에는
partial_beta_diversity(), 대규모 블록 분해 계산에는block_beta_diversity()사용 - 알파 다양성은
pandas.Series, 베타 다양성은DistanceMatrix반환
5. 서열정렬법
고차원 생물학 데이터를 시각화 가능한 저차원 공간으로 축소합니다.
주요 기능:
- 거리 행렬로부터 PCoA(주좌표 분석)
- 분할표에 대한 CA(대응 분석)
- 환경 제약이 있는 CCA(정준 대응 분석)
- 선형 관계에 대한 RDA(중복 분석)
- 특성 해석을 위한 바이플롯 투영
일반적인 패턴:
from skbio.stats.ordination import pcoa, cca
import skbio
# 거리 행렬로부터 PCoA (대규모 행렬은 차원 제한)
pcoa_results = pcoa(distance_matrix, dimensions=3)
pc1 = pcoa_results.samples['PC1']
pc2 = pcoa_results.samples['PC2']
# 메타데이터 열로 색상 지정한 내장 산점도
fig = pcoa_results.plot(sample_metadata, column='bodysite')
# 환경 변수와 함께 CCA
cca_results = cca(species_matrix, environmental_matrix)
# 서열정렬 결과 저장/로드
pcoa_results.write('ordination.txt')
results = skbio.OrdinationResults.read('ordination.txt')
중요 사항:
- PCoA는 모든 거리/비유사성 행렬과 함께 작동;
dimensions는 정수(개수) 또는 (0, 1] 범위의 부동소수(유지할 누적 분산 비율)로 전달 OrdinationResults는 pandas 기반 속성 노출:samples,features,eigvals,proportion_explained,biplot_scores,sample_constraints- CCA는 군집 구성을 주도하는 환경 요인을 밝혀냄
OrdinationResults.plot()은 matplotlib 그림 생성; 결과는 seaborn/plotly와도 통합 가능
6. 통계 검정
생태학 및 생물학 데이터에 특화된 가설 검정을 수행합니다.
주요 기능:
- PERMANOVA: 거리 행렬을 사용하여 그룹 차이 검정
- ANOSIM: 그룹 차이에 대한 대체 검정
- PERMDISP: 그룹 분산의 동질성 검정
- Mantel 검정: 거리 행렬 간 상관 관계
- Bioenv: 거리와 상관된 환경 변수 찾기
- 차등 풍부도:
skbio.stats.composition의ancom,dirmult_ttest,dirmult_lme(종단 혼합 효과)
일반적인 패턴:
from skbio.stats.distance import permanova, anosim, mantel
# 그룹 간 유의미한 차이 검정
permanova_results = permanova(distance_matrix, grouping, permutations=999)
print(f"p-value: {permanova_results['p-value']}")
# ANOSIM 검정
anosim_results = anosim(distance_matrix, grouping, permutations=999)
# 두 거리 행렬 간 Mantel 검정
mantel_results = mantel(dm1, dm2, method='pearson', permutations=999)
print(f"Correlation: {mantel_results[0]}, p-value: {mantel_results[1]}")
# 특성 테이블에서 차등 풍부도 (원시 카운트 권장)
from skbio.stats.composition import dirmult_ttest
da = dirmult_ttest(counts_table, grouping, treatment='caseA', reference='control')
중요 사항:
- 순열 검정은 비모수적 유의성 검정 제공
- 강건한 p-값을 위해 999회 이상의 순열 사용
- PERMANOVA는 분산 차이에 민감; PERMDISP와 함께 사용
- Mantel 검정은 행렬 상관 관계 평가(예: 지리적 vs 유전적 거리)
- 차등 풍부도 검정에는 사전 정규화된 비율이 아닌 원시 카운트를 제공하여 크기 정보 보존
7. 파일 입출력 및 형식 변환
자동 형식 감지로 19개 이상의 생물학 파일 형식을 읽고 씁니다.
지원 형식:
- 서열: FASTA, FASTQ, GenBank, EMBL, QSeq
- 정렬: Clustal, PHYLIP, Stockholm
- 계통수: Newick
- 테이블: BIOM (HDF5 및 JSON)
- 거리: 구분된 정방 행렬
- 분석: BLAST+6/7, GFF3, 서열정렬 결과
- 메타데이터: 검증이 포함된 TSV/CSV
일반적인 패턴:
import skbio
# 자동 형식 감지로 읽기
seq = skbio.DNA.read('file.fasta', format='fasta')
tree = skbio.TreeNode.read('tree.nwk')
# 파일로 쓰기
seq.write('output.fasta', format='fasta')
# 대용량 파일용 생성기 (메모리 효율적)
for seq in skbio.io.read('large.fasta', format='fasta', constructor=skbio.DNA):
process(seq)
# 형식 변환
seqs = list(skbio.io.read('input.fastq', format='fastq', constructor=skbio.DNA))
skbio.io.write(seqs, format='fasta', into='output.fasta')
중요 사항:
- 대용량 파일에는 생성기를 사용하여 메모리 문제 방지
into매개변수를 지정하면 형식을 자동 감지할 수 있음- 일부 객체는 여러 형식으로 쓸 수 있음
verify=False로 stdin/stdout 파이핑 지원
8. 거리 행렬
통계적 방법이 포함된 거리/비유사성 행렬을 생성하고 조작합니다.
주요 기능:
- 대칭(
DistanceMatrix, 대각선 0) 또는 일반 쌍별(PairwiseMatrix) 데이터 저장 - ID 기반 인덱싱 및 슬라이싱
- 다양성, 서열정렬법, 통계 검정과의 통합
- 구분된 텍스트 형식 읽기/쓰기
일반적인 패턴:
from skbio import DistanceMatrix
import numpy as np
# 배열로 생성
data = np.array([[0, 1, 2], [1, 0, 3], [2, 3, 0]])
dm = DistanceMatrix(data, ids=['A', 'B', 'C'])
# 거리 접근
dist_ab = dm['A', 'B']
row_a = dm['A']
# 파일에서 읽기
dm = DistanceMatrix.read('distances.txt')
# 다운스트림 분석에 사용
pcoa_results = pcoa(dm)
permanova_results = permanova(dm, grouping)
중요 사항:
DistanceMatrix는 대칭성과 0 대각선을 강제;SymmetricMatrix의 서브클래스PairwiseMatrix(DissimilarityMatrix에서 이름 변경, 이전 이름은 폐기된 별칭으로 유지)는 일반/비대칭 값 허용- ID는 메타데이터 및 생물학적 지식과의 통합 지원
9. 생태학적 데이터 분석
미생물 생태학 및 군집 분석을 위한 포괄적인 기능.
주요 기능:
- BIOM 테이블 읽기/쓰기 및 조작
- 생물학적 관측 테이블 조작
- 희박화 곡선 및 종 축적
- 군집 구성 분석
- 통합 시각화
일반적인 패턴:
import skbio
# BIOM 테이블 읽기
table = skbio.Table.read('feature-table.biom')
# 테이블 희박화
rare_table = table.subsample(1000)
# 알파 다양성 계산
alpha_diversity('shannon', table, ids=table.ids())
# 희박화 곡선 (scikit-bio 0.7.0+)
from skbio.diversity import rarefaction
rarefaction_curves = rarefaction(table, counts_per_sample=[100, 500, 1000, 2000])
중요 사항:
- scikit-bio 자체 BIOM 구현은 신규 프로젝트에서 최대한 사용하지 않는 것이 좋음 (qiime2의 biom-format 패키지로 마이그레이션 중; qiime2 > biom-format > h5py/numpy에 의존)
- 스파스 BIOM 지원은 현재 qiime2에 의존; 연산에 집중 밀도 행렬이 필요함
- 0.7.0 이상의
OrdinationResults는 pandas DataFrame을 사용 DistanceMatrix객체는 다양한 분석에 핵심
환경 설정
# Conda (권장)
conda install scikit-bio -c conda-forge
# PyPI
pip install scikit-bio
추가 리소스
중요 변경 사항
scikit-bio 0.7.0+
- 서열 정렬을 위한
pair_align도입 (레거시 정렬기 대체) PairAlignResult,PairAlignPath,aligned_sequence,align_score,align_dists추가- CIGAR 문자열 파싱 지원
TabularMSA는 이제from_path_seqs를 통해pair_align결과에서 직접 구축 가능
scikit-bio 0.6.0+
pairwise모듈이distance로 이동;DissimilarityMatrix는PairwiseMatrix로,DistanceMatrix는SymmetricMatrix의 서브클래스로 이름 변경- 질량 독립적
subsample에서 독립적subsample_counts/subsample로 이름 변경 - 희박화 함수가
skbio.diversity.rarefaction으로 이동 OrdinationResults는 pandas DataFrame 사용; 파일 형식 업데이트