biopython について
Biopythonは計算分子生物学向けのPythonツールキットで、生物データを扱う研究者や開発者を対象としています。モジュール式の機能により、配列やファイルの処理、データベースアクセス、BLAST、構造解析、系統解析に対応します。
主な機能
- 01配列と生物学ファイルの操作
- 02EntrezによるNCBIデータベースへのアクセス
- 03BLAST検索の実行と結果解析
- 04タンパク質構造の解析
- 05系統樹の構築と操作
活用シーン
- 01FASTAとGenBankレコードの変換
- 02DNA、RNA、タンパク質配列のアラインメント
- 03NCBIからレコードを取得
- 04PDB構造や系統樹の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jackspace/ claudeskillz --skill biopythonインストール後、Claude Code で/biopythonを入力して読み込まれたか確認します。
同梱ファイルSKILL.json
詳細
Biopython: Python による計算分子生物学
概要
Biopython は、生物学的計算のための、自由に利用できる包括的な Python ツールのセットです。配列操作、ファイル I/O、データベースアクセス、構造バイオインフォマティクス、系統学、その他多くのバイオインフォマティクスタスクの機能を提供します。現在のバージョンは Biopython 1.85(2025 年 1 月リリース)で、Python 3 をサポートし、NumPy を必要とします。
このスキルを使用するタイミング
次のような場合にこのスキルを使用してください:
- 生物学的配列(DNA、RNA、またはタンパク質)を扱うとき
- 生物学的ファイル形式(FASTA、GenBank、FASTQ、PDB、mmCIF など)を読み取り、書き込み、または変換するとき
- Entrez を介して NCBI データベース(GenBank、PubMed、Protein、Gene など)にアクセスするとき
- BLAST 検索を実行するか、BLAST 結果を解析するとき
- 配列アラインメント(ペアワイズまたは複数配列アラインメント)を実行するとき
- PDB ファイルからタンパク質構造を解析するとき
- 系統樹を作成、操作、または可視化するとき
- 配列モチーフを検索するか、モチーフパターンを解析するとき
- 配列の統計量(GC 含量、分子量、融解温度など)を計算するとき
- 構造バイオインフォマティクスのタスクを実行するとき
- 集団遺伝学データを扱うとき
- その他の計算分子生物学タスクを行うとき
主要な機能
Biopython は、それぞれ特定のバイオインフォマティクス分野を扱うモジュール式のサブパッケージで構成されています:
- 配列処理 - 配列操作とファイル I/O のための Bio.Seq と Bio.SeqIO
- アラインメント解析 - ペアワイズおよび複数配列アラインメントのための Bio.Align と Bio.AlignIO
- データベースアクセス - NCBI データベースへのプログラムからのアクセスのための Bio.Entrez
- BLAST 操作 - BLAST 検索の実行と解析のための Bio.Blast
- 構造バイオインフォマティクス - 3D タンパク質構造を扱うための Bio.PDB
- 系統学 - 系統樹の操作と可視化のための Bio.Phylo
- 高度な機能 - モチーフ、集団遺伝学、配列ユーティリティなど
インストールとセットアップ
pip を使用して Biopython をインストールします(Python 3 と NumPy が必要です):
pip install 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 の Web サービスを介した BLAST 検索の実行
- ローカル BLAST 検索の実行
- BLAST XML 出力の解析
- E 値または同一性による結果のフィルタリング
- ヒット配列の抽出
簡単な例:
from Bio.Blast import NCBIWWW, NCBIXML
# Run BLAST search
result_handle = NCBIWWW.qblast("blastn", "nt", "ATCGATCGATCG")
blast_record = NCBIXML.read(result_handle)
# Display top hits
for alignment in blast_record.alignments[:5]:
print(f"{alignment.title}: E-value={alignment.hsps[0].expect}")
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 計算、Hardy-Weinberg 検定
- 配列ユーティリティ (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.Blast import NCBIWWW, NCBIXML
from Bio import Entrez, SeqIO
Entrez.email = "[email protected]"
# Run BLAST
result_handle = NCBIWWW.qblast("blastn", "nt", sequence)
blast_record = NCBIXML.read(result_handle)
# Get top hit accessions
accessions = [aln.accession for aln in blast_record.alignments[: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 を使用するか、結果をキャッシュしてください。
Issue: 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 の主要な各機能について、詳細で検索可能な情報が確実に得られます。