alterlab-biopython について
alterlab-biopythonは、計算分子生物学でBiopythonを使うためのドキュメントスキルです。配列解析、データベースアクセス、構造バイオインフォマティクスなどを案内し、API変更点も説明します。
主な機能
- 01生物配列の処理とファイル入出力
- 02NCBIデータベースへのアクセス
- 03BLAST検索と結果解析
- 04配列アラインメントと統計
- 05タンパク質構造解析
- 06系統樹の操作と可視化
活用シーン
- 01FASTAやGenBankなどの配列ファイル変換
- 02NCBI検索による配列や文献情報の取得
- 03配列アラインメントとBLAST結果の解析
- 04PDB構造の解析や系統樹の可視化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alterlab-ieu/ alterlab-academic-skills --skill alterlab-biopythonインストール後、Claude Code で/alterlab-biopythonを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/evals.jsonreferences/advanced.mdalignment.mdblast.mddatabases.mdphylogenetics.mdsequence_io.mdstructure.md詳細
Biopython:Python による計算分子生物学
概要
Biopython は、生物学的計算に利用できる包括的な Python ツール群です。配列操作、ファイル入出力、データベースアクセス、構造バイオインフォマティクス、系統解析など、さまざまなバイオインフォマティクスのタスクに対応する機能を提供します。現行バージョンは Biopython 1.88(2026 年 8 月)で、Python 3.10~3.14 をサポートし、NumPy が必要です。
削除・変更された API に関する注意
- コマンドラインラッパーは廃止されました。
Bio.Applicationと、それを基盤とするすべての機能 —Bio.Blast.Applications(Ncbiblastn/p/x…Commandline、NcbimakeblastdbCommandline)およびBio.Align.Applications(ClustalOmegaCommandline、MuscleCommandline)は、 1.78 で非推奨となり、1.86 で削除されました。実行ファイルはsubprocessを使って呼び出してください(references/blast.mdとreferences/alignment.mdを参照)。- PairwiseAligner のギャップスコアは 1.86 で変更されました。 デフォルトのギャップスコアは -1 になりました(以前は 0)。そのため、デフォルトのままのアライナーが返す、退化していないアラインメントの数は大幅に減ります。 ギャップ属性の名前も挿入・欠失を表す形式に変更されました (
open_internal_insertion_scoreなど)。*_gap_score形式の名前も引き続き メタ属性として使用できます。alphabet属性は非推奨で、使用されません。Bio.pairwise2は非推奨です —Bio.Align.PairwiseAlignerを使用してください。Bio.Blast.NCBIXMLは、1.84 で追加されたBio.Blastパーサー(Blast.parse/Blast.read、Blast.qblast)を優先するため、1.89 の開発系列から旧式とされています。 1.88 には引き続き同梱され、動作します。新しいコードでは新 API を優先してください。- アップグレードに値するセキュリティ修正: 1.87 では
Bio.Entrez.Parserの CVE-2025-68463 が修正され、1.88 では悪意のある NEXUS ファイルからのコード実行を可能にしていたBio.Nexusパーサーのevalが削除されました。ダウンロードしたレコードは信頼できない入力として扱い、Biopython を最新の状態に保ってください。
このスキルを使用する場面
次のような場合に、このスキルを使用してください。
- 生物学的配列(DNA、RNA、タンパク質)を扱う場合
- 生物学的ファイル形式(FASTA、GenBank、FASTQ、PDB、mmCIF など)を読み込み、書き込み、または変換する場合
- Entrez を介して NCBI データベース(GenBank、PubMed、Protein、Gene など)にアクセスする場合
- BLAST 検索を実行したり、BLAST 結果を解析したりする場合
- 配列アラインメント(ペアワイズまたは多重配列アラインメント)を行う場合
- PDB ファイルからタンパク質構造を解析する場合
- 系統樹を作成、操作、または可視化する場合
- 配列モチーフを検索したり、モチーフパターンを解析したりする場合
- 配列統計量(GC 含量、分子量、融解温度など)を計算する場合
- 構造バイオインフォマティクスのタスクを実行する場合
- 集団遺伝学データを扱う場合
- その他の計算分子生物学のタスクを実行する場合
対象外
| シナリオ | 代わりに使用 |
|---|---|
コマンドラインからローカルの BLAST+/makeblastdb または DIAMOND を実行する | alterlab-blast |
| 遺伝子、配列、または構造を 1 回だけ検索する | alterlab-gget |
| 複数のウェブサービス(UniProt + KEGG + ChEMBL)をワークフローで 1 回呼び出す | alterlab-bioservices |
| SAM/BAM/CRAM レコードへのアクセス、パイルアップ、リードのフィルタリング | alterlab-pysam |
| アラインメント前の配列から ML 系統樹を構築する(MAFFT + IQ-TREE) | alterlab-phylogenetics |
主な機能
Biopython はモジュール式のサブパッケージで構成されており、それぞれが特定のバイオインフォマティクス分野を扱います。
- 配列の処理 - 配列操作とファイル入出力のための Bio.Seq および Bio.SeqIO
- アラインメント解析 - ペアワイズおよび多重配列アラインメントのための Bio.Align および Bio.AlignIO
- データベースアクセス - NCBI データベースにプログラムからアクセスするための Bio.Entrez
- BLAST 操作 - BLAST 検索の実行と解析のための Bio.Blast
- 構造バイオインフォマティクス - 3D タンパク質構造を扱うための Bio.PDB
- 系統解析 - 系統樹の操作と可視化のための Bio.Phylo
- 高度な機能 - モチーフ、集団遺伝学、配列ユーティリティなど
インストールとセットアップ
Biopython をインストールします(Python 3 と NumPy が必要です)。このマシンでは、スクリプトの実行に uv run を使用することを推奨します。
# Ad-hoc: run a script with Biopython available, no venv to manage
uv run --with biopython script.py
# Or add it to a project
uv add biopython
NCBI データベースにアクセスする場合は、必ずメールアドレスを設定してください(NCBI で必須です)。
from Bio import Entrez
Entrez.email = "[email protected]"
# Optional: API key for higher rate limits (10 req/s instead of 3 req/s)
Entrez.api_key = "your_api_key_here"
このスキルの使い方
このスキルでは、機能ごとに整理された包括的なドキュメントを提供しています。タスクに取り組む際は、関連するリファレンスドキュメントを参照してください。
1. 配列の処理(Bio.Seq & Bio.SeqIO)
リファレンス: references/sequence_io.md
以下の場合に使用します。
- 生物学的配列の作成と操作
- 配列ファイル(FASTA、GenBank、FASTQ など)の読み込みと書き込み
- ファイル形式間の変換
- 大きなファイルからの配列の抽出
- 配列の翻訳、転写、逆相補配列の作成
- SeqRecord オブジェクトの操作
簡単な例:
from Bio import SeqIO
# Read sequences from FASTA file
for record in SeqIO.parse("sequences.fasta", "fasta"):
print(f"{record.id}: {len(record.seq)} bp")
# Convert GenBank to FASTA
SeqIO.convert("input.gb", "genbank", "output.fasta", "fasta")
2. アラインメント解析(Bio.Align & Bio.AlignIO)
リファレンス: references/alignment.md
以下の場合に使用します。
- ペアワイズ配列アラインメント(グローバルおよびローカル)
- 複数配列アラインメントの読み込みと書き込み
- 置換行列(BLOSUM、PAM)の使用
- アラインメント統計の計算
- アラインメントパラメーターのカスタマイズ
簡単な例:
from Bio import Align
# Pairwise alignment
aligner = Align.PairwiseAligner()
aligner.mode = 'global'
alignments = aligner.align("ACCGGT", "ACGGT")
print(alignments[0])
3. データベースへのアクセス(Bio.Entrez)
リファレンス: references/databases.md
以下の場合に使用します。
- NCBI データベース(PubMed、GenBank、Protein、Gene など)の検索
- 配列やレコードのダウンロード
- 出版物情報の取得
- データベース間で関連レコードを検索
- 適切なレート制限を適用した一括ダウンロード
簡単な例:
from Bio import Entrez
Entrez.email = "[email protected]"
# Search PubMed
handle = Entrez.esearch(db="pubmed", term="biopython", retmax=10)
results = Entrez.read(handle)
handle.close()
print(f"Found {results['Count']} results")
4. BLAST 操作(Bio.Blast)
リファレンス: references/blast.md
以下の場合に使用します。
- NCBI ウェブサービス経由での BLAST 検索の実行
- ローカル BLAST 検索の実行
- BLAST XML 出力の解析
- E-value または同一性による結果のフィルタリング
- ヒット配列の抽出
簡単な例(1.84 で導入された Bio.Blast API — NCBI では連絡先メールアドレスが必要です):
from Bio import Blast
Blast.email = "[email protected]"
result_stream = Blast.qblast("blastn", "nt", "ATCGATCGATCG")
blast_record = Blast.read(result_stream)
# Each hit's alignments are Bio.Align objects; scores live in .annotations
for hit in blast_record[:5]:
print(f"{hit.target.id}: E-value={hit[0].annotations['evalue']}")
5. 構造バイオインフォマティクス(Bio.PDB)
リファレンス: references/structure.md
以下の場合に使用します。
- PDB および mmCIF 構造ファイルの解析
- タンパク質構造の階層構造(SMCRA:Structure/Model/Chain/Residue/Atom)の参照
- 距離、角度、二面角の計算
- 二次構造の割り当て(DSSP)
- 構造の重ね合わせと RMSD の計算
- 構造からの配列の抽出
簡単な例:
from Bio.PDB import PDBParser
# Parse structure
parser = PDBParser(QUIET=True)
structure = parser.get_structure("1crn", "1crn.pdb")
# Calculate distance between alpha carbons
chain = structure[0]["A"]
distance = chain[10]["CA"] - chain[20]["CA"]
print(f"Distance: {distance:.2f} Å")
6. 系統発生学(Bio.Phylo)
リファレンス: references/phylogenetics.md
以下の場合に使用します。
- 系統樹(Newick、NEXUS、phyloXML)の読み込みと書き込み
- 距離行列またはアラインメントからの系統樹の構築
- 系統樹の操作(枝の刈り込み、根の再設定、ラダー化)
- 系統距離の計算
- コンセンサス系統樹の作成
- 系統樹の可視化
簡単な例:
from Bio import Phylo
# Read and visualize tree
tree = Phylo.read("tree.nwk", "newick")
Phylo.draw_ascii(tree)
# Calculate distance
distance = tree.distance("Species_A", "Species_B")
print(f"Distance: {distance:.3f}")
7. 高度な機能
リファレンス: references/advanced.md
以下の場合に使用します。
- 配列モチーフ(Bio.motifs)- モチーフパターンの検索と解析
- 集団遺伝学(Bio.PopGen)- GenePop ファイル、Fst の計算、ハーディ・ワインベルグ検定
- 配列ユーティリティ(Bio.SeqUtils)- GC 含量、融解温度、分子量、タンパク質解析
- 制限酵素解析(Bio.Restriction)- 制限酵素サイトの検索
- クラスタリング(Bio.Cluster)- K-means および階層的クラスタリング
- ゲノム図(GenomeDiagram)- ゲノムの特徴の可視化
簡単な例:
from Bio.SeqUtils import gc_fraction, molecular_weight
from Bio.Seq import Seq
seq = Seq("ATCGATCGATCG")
print(f"GC content: {gc_fraction(seq):.2%}")
print(f"Molecular weight: {molecular_weight(seq, seq_type='DNA'):.2f} g/mol")
一般的なワークフローのガイドライン
ドキュメントの参照
ユーザーから Biopython の特定のタスクについて質問された場合:
- タスクの説明に基づいて関連するモジュールを特定する
- Read ツールを使用して適切なリファレンスファイルを読む
- 関連するコードパターンを抜き出し、ユーザー固有のニーズに合わせて調整する
- タスクで必要な場合は複数のモジュールを組み合わせる
リファレンスファイルの検索パターンの例:
# Find information about specific functions
grep -n "SeqIO.parse" references/sequence_io.md
# Find examples of specific tasks
grep -n "BLAST" references/blast.md
# Find information about specific concepts
grep -n "alignment" references/alignment.md
Biopython コードの作成
Biopython コードを作成する際は、次の原則に従ってください。
-
モジュールを明示的にインポートする
from Bio import SeqIO, Entrez from Bio.Seq import Seq -
NCBI データベースを使用する場合は、Entrez のメールアドレスを設定する
Entrez.email = "[email protected]" -
適切なファイル形式を使用する - タスクに最適な形式を確認してください
# Common formats: "fasta", "genbank", "fastq", "clustal", "phylip" -
ファイルを適切に扱う - 使用後にハンドルを閉じるか、コンテキストマネージャーを使用してください
with open("file.fasta") as handle: records = SeqIO.parse(handle, "fasta") -
大きなファイルにはイテレーターを使用する - すべてをメモリに読み込まないようにしてください
for record in SeqIO.parse("large_file.fasta", "fasta"): # Process one record at a time -
エラーを適切に処理する - ネットワーク操作やファイルの解析は失敗することがあります
try: handle = Entrez.efetch(db="nucleotide", id=accession) except HTTPError as e: print(f"Error: {e}")
よくあるパターン
パターン 1:GenBank から配列を取得する
from Bio import Entrez, SeqIO
Entrez.email = "[email protected]"
# Fetch sequence
handle = Entrez.efetch(db="nucleotide", id="EU490707", rettype="gb", retmode="text")
record = SeqIO.read(handle, "genbank")
handle.close()
print(f"Description: {record.description}")
print(f"Sequence length: {len(record.seq)}")
パターン 2:配列解析パイプライン
from Bio import SeqIO
from Bio.SeqUtils import gc_fraction
for record in SeqIO.parse("sequences.fasta", "fasta"):
# Calculate statistics
gc = gc_fraction(record.seq)
length = len(record.seq)
# Find ORFs, translate, etc.
protein = record.seq.translate()
print(f"{record.id}: {length} bp, GC={gc:.2%}")
パターン 3:BLAST を実行して上位のヒットを取得する
from Bio import Blast, Entrez, SeqIO
Entrez.email = Blast.email = "[email protected]"
# Run BLAST (Bio.Blast API, Biopython >= 1.84)
result_stream = Blast.qblast("blastn", "nt", sequence)
blast_record = Blast.read(result_stream)
# Get top hit accessions (hit.target is a SeqRecord)
accessions = [hit.target.name for hit in blast_record[:5]]
# Fetch sequences
for acc in accessions:
handle = Entrez.efetch(db="nucleotide", id=acc, rettype="fasta", retmode="text")
record = SeqIO.read(handle, "fasta")
handle.close()
print(f">{record.description}")
パターン 4:配列から系統樹を構築する
from Bio import AlignIO, Phylo
from Bio.Phylo.TreeConstruction import DistanceCalculator, DistanceTreeConstructor
# Read alignment
alignment = AlignIO.read("alignment.fasta", "fasta")
# Calculate distances
calculator = DistanceCalculator("identity")
dm = calculator.get_distance(alignment)
# Build tree
constructor = DistanceTreeConstructor()
tree = constructor.nj(dm)
# Visualize
Phylo.draw_ascii(tree)
ベストプラクティス
- コードを書く前に、関連するリファレンスドキュメントを必ず読む
- grep を使ってリファレンスファイルを検索することで、特定の関数や例を見つける
- 解析前にファイル形式を検証する
- 欠損データを適切に処理する - すべてのレコードにすべてのフィールドがあるとは限りません
- ダウンロードしたデータをキャッシュする - 同じ配列を繰り返しダウンロードしないようにします
- NCBI のレート制限を守る - API キーを使用し、適切な間隔を設けます
- 大きなファイルを処理する前に、小さなデータセットでテストする
- 最新の機能やバグ修正を利用するため、Biopython を最新の状態に保つ
- 翻訳には適切な遺伝暗号表を使用する
- 再現性を確保できるよう、解析パラメーターを記録する
よくある問題のトラブルシューティング
問題:「No handlers could be found for logger 'Bio.Entrez'」
解決策: これは単なる警告です。Entrez.email を設定すると表示されなくなります。
問題:NCBI から「HTTP Error 400」が返される
解決策: ID/アクセッションが有効で、正しい形式になっていることを確認してください。
問題:ファイルの解析時に「ValueError: EOF」が発生する
解決策: ファイル形式が指定した形式文字列と一致していることを確認してください。
問題:「sequences are not the same length」というエラーでアラインメントに失敗する
解決策: AlignIO または MultipleSeqAlignment を使用する前に、配列がアラインメント済みであることを確認してください。
問題:BLAST 検索が遅い
解決策: 大規模な検索にはローカル BLAST を使用するか、結果をキャッシュしてください。
問題:PDB パーサーの警告
解決策: PDBParser(QUIET=True) を使って警告を抑制するか、構造の品質を調査してください。
追加リソース
- 公式ドキュメント: https://biopython.org/docs/latest/
- チュートリアル: https://biopython.org/docs/latest/Tutorial/
- クックブック: https://biopython.org/docs/latest/Tutorial/ (高度な例)
- GitHub: https://github.com/biopython/biopython
- メーリングリスト: [email protected]
クイックリファレンス
リファレンスファイル内の情報を見つけるには、次の検索パターンを使用してください。
# Search for specific functions
grep -n "function_name" references/*.md
# Find examples of specific tasks
grep -n "example" references/sequence_io.md
# Find all occurrences of a module
grep -n "Bio.Seq" references/*.md
まとめ
Biopython は、計算分子生物学向けの包括的なツールを提供します。このスキルを使用する際は、次の点に従ってください。
- タスクの分野を特定する(配列、アラインメント、データベース、BLAST、構造、系統発生、または高度な内容)
references/ディレクトリ内の適切なリファレンスファイルを参照する- コード例を具体的なユースケースに合わせて調整する
- 複雑なワークフローで必要な場合は、複数のモジュールを組み合わせる
- ファイルの取り扱い、エラーチェック、データ管理に関するベストプラクティスに従う
モジュール式のリファレンスドキュメントにより、Biopython の主要な機能すべてについて、詳細かつ検索可能な情報を利用できます。
AlterLab Academic Skills スイートの一部です。