pysam について
pysamは、高スループットシーケンシングのワークフローを構築する研究者や開発者向けに、ゲノムアラインメントデータへPythonからアクセスするライブラリです。インデックスを使った領域別の読み出しと、解析に必要なリード属性の確認に対応します。
主な機能
- 01シーケンスアラインメントリードへのアクセス
- 02ゲノム領域を指定したリード取得
- 03配列と品質スコアの確認
- 04マッピングフラグと位置の確認
活用シーン
- 01NGSアラインメントファイルの処理
- 02指定領域からリードを抽出
- 03マッピングフラグに基づくリードのフィルタリング
- 04シーケンス品質管理の支援
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ tondevrel/ scientific-agent-skills --skill pysamインストール後、Claude Code で/pysamを入力して読み込まれたか確認します。
詳細
Pysam - ゲノムアラインメント
ハイスループットシーケンスのパイプラインで使用します。参照ゲノムにアラインメントされた数十億の DNA 断片に効率的にアクセスできます。
使用する場面
- 次世代シーケンス(NGS)データの処理。
- ゲノム変異(SNP、インデル)の解析。
- 特定のゲノム領域からのリードの抽出。
- カスタムバイオインフォマティクスパイプラインの構築。
- シーケンスデータの品質管理。
基本原則
インデックスアクセス
ゲノム領域への効率的なランダムアクセスには、BAM ファイルのインデックス(.bai)が必要です。
座標系
ゲノム座標では位置に 0 始まり(Python 形式)を使用しますが、範囲には一部のコンテキストで 1 始まりを使用します。
リード属性
各リードには、配列、品質スコア、アラインメント位置、フラグが含まれます。
クイックリファレンス
標準インポート
import pysam
基本パターン
# 1. Open BAM file
samfile = pysam.AlignmentFile("aligned_reads.bam", "rb")
# 2. Iterate over reads in a specific genomic region
for read in samfile.fetch("chr1", 10000, 10100):
print(f"Read: {read.query_name}, Quality: {read.mapping_quality}")
print(f"Sequence: {read.query_sequence}")
print(f"Position: {read.reference_start}")
# 3. Variant analysis (VCF)
vcf = pysam.VariantFile("mutations.vcf")
for rec in vcf.fetch("chr1", 10000, 10100):
print(f"Pos: {rec.pos}, Ref: {rec.ref}, Alt: {rec.alts}")
print(f"Genotype: {rec.samples['sample1']['GT']}")
# 4. Writing aligned reads
outfile = pysam.AlignmentFile("output.bam", "wb", template=samfile)
for read in samfile:
if read.mapping_quality > 30:
outfile.write(read)
outfile.close()
重要なルール
✅ 推奨事項
- 必ずインデックス付きファイルを使用する -
pysam.index("file.bam")でインデックスを作成すると、高速にアクセスできます。 - リードのフラグを確認する -
read.is_paired、read.is_unmappedを使ってリードをフィルタリングします。 - マッピングされていないリードを処理する - マッピングされていないリードの
reference_start = -1です。 - ファイルを明示的に閉じる - コンテキストマネージャーまたは
.close()を使い、リソースリークを防ぎます。
❌ 禁止事項
- BAM 全体を反復処理しない - 効率を上げるため、領域を指定して
fetch()を使用します。 - 品質スコアを無視しない - 低品質の塩基は誤った変異の原因になります。
- 座標系を混在させない - 0 始まりと 1 始まりのインデックスを一貫して使用します。
高度なパターン
遺伝子ごとのリード数のカウント
# Using a gene annotation file
genes = {} # gene_name -> (chr, start, end)
for read in samfile.fetch():
# Check if read overlaps any gene
for gene, (chr, start, end) in genes.items():
if read.reference_name == chr and start <= read.reference_start < end:
genes[gene]['count'] += 1
変異のフィルタリング
# Filter variants by quality and depth
for rec in vcf.fetch():
depth = rec.samples['sample1']['DP']
qual = rec.qual
if depth > 10 and qual > 20:
# Process high-quality variant
pass
Pysam は、ゲノムデータ処理に必要な低レベルのアクセスを提供し、研究者が生命そのものの生データを直接扱えるようにします。
コメント
Markdown 対応