忍者ブログ
バイオインフォマティックス技術者試験、情報処理試験など、IT系の試験を基礎から勉強します。また、Javaなどプログラミングを勉強します。

【バイオインフォ実習】第3回:FASTA形式とBiopythonによる配列データ読み込み(SeqRecord)

前回はBiopythonを使ったセントラルドグマの基本操作を学びました。今回は、バイオインフォマティクスで最も頻繁に扱われるデータフォーマット「FASTA形式」と、それをBiopythonで読み込む基本コードを解説します。

配列データを扱うにあたり、まず「FASTA形式とは何か」をITエンジニア視点で整理しておきましょう。

1. FASTA形式とは?

FASTA(ファスタ)形式は、DNAやアミノ酸などの生物学的配列を扱うための標準的なテキストファイルフォーマットです。構造は至ってシンプルで、以下のように「ヘッダー」と「配列本体」で構成されています。

>seq1 Sample DNA sequence
ATGCGT

IT的に捉えると、以下のようなルールを持ったシンプルなデータ形式です。

  • ヘッダー行(メタデータ): 行頭が必ず > で始まります。> の直後の1単語が「配列ID」、それに続く文字列が「説明文(メタ情報)」となります。
  • 配列行(データ本体): 2行目以降にDNA塩基(A, T, G, C)が並びます。途中に改行が含まれていても、システム側では1つの連続したデータとして処理されます。
  • メタデータ付き構造化テキスト: JSONやXMLほど厳密ではありませんが、「ヘッダー+ペイロード」という構造を持った軽量なフォーマットです。

2. Biopythonでの実装コード

外部ファイルを用意する手間を省き、まずはコード内だけで自己完結する最小のFASTA読み込みプログラムを動かしてみましょう。io.StringIO を使うことで、文字列を疑似的なファイルとして読み込ませることができます。

from io import StringIO
from Bio import SeqIO

# 1. 最小構成のFASTA文字列を用意
fasta_data = """>seq1 Sample DNA sequence
ATGCGT"""


# 2. SeqIO.read でパース(単一配列の場合)
record = SeqIO.read(StringIO(fasta_data.strip()), "fasta")

# 3. 解析結果の出力
print(f"ID: {record.id}")
print(f"Description: {record.description}")
print(f"Sequence: {record.seq}")
print(f"Length: {len(record.seq)} bp")

3. 実行結果の確認

ID: seq1
Description: seq1 Sample DNA sequence
Sequence: ATGCGT
Length: 6 bp

4. record(SeqRecordクラス)とは何か?

コード内の record という変数には、一体どのような型が入っているのでしょうか?

このオブジェクトの正体は、Bio.SeqRecord.SeqRecord クラスのインスタンスです。Bio.SeqIO.read() 関数がパース処理を行った結果として返却されます。

  • 提示されている場所(定型パッケージ):
    Biopython 内の Bio.SeqRecord モジュールで定義されているクラスです。通常は直接インポートしなくても、Bio.SeqIO 経由でファイルを読み込んだ際に自動的に生成・返却されます。
  • 何のための型(オブジェクト)?:
    単なる塩基配列("ATGCGT" という文字列)だけでなく、「配列本体 +IDや説明文などのメタデータ」をセットで保持・管理するためのデータ構造(DTO/Entity)です。もし単なる文字列として配列を扱ってしまうと、「このDNAがどの遺伝子のものか」という重要情報が脱落してしまいます。それを防ぐため、配列(Seq オブジェクト)をコアに抱え込みつつ、属性情報(id, description など)を一つにまとめるカプセル化の役割を果たしています。

5. 出力結果の解説

プログラムを実行すると、FASTAテキストが自動的にパースされ、SeqRecord の各プロパティ(属性)として分解されたことがわかります。

  • ID: seq1record.id
    ヘッダー行(>seq1 Sample DNA sequence)から、> の直後にある最初の単語(スペース手前まで)が一意の識別子(ID)として自動抽出されます。ITで言えば主キー(Primary Key)のような扱いです。
  • Description: seq1 Sample DNA sequencerecord.description
    先頭の > を除いたヘッダー行全体のテキストが入ります。配列の名称や生物種情報などのメタデータがここに保持されます。
  • Sequence: ATGCGTrecord.seq
    改行などを除去した純粋な配列データ本体です。文字列のように見えますが、内部的には Biopython 独自の Seq オブジェクトになっており、相補鎖変換や転写・翻訳などのメソッドをそのまま呼び出せます。
  • Length: 6 bplen(record.seq)
    len() 関数を適用することで、配列の長さ(塩基数: base pairs)を簡単に取得できます。

6. ITエンジニア的まとめ

今回の実習のポイントは以下の通りです。

  • FASTAは標準のヘッダー付き配列フォーマット: > で始まるヘッダー+配列本体という、非常にシンプルなデータ構文。
  • SeqRecord はメタデータ保持コンテナ: 配列データだけでなく、IDや説明文を一つにまとめて管理する専用オブジェクト。
  • Bio.SeqIO は強力なパーサー: テキスト解析処理を自作することなく、オブジェクト(SeqRecord)として直感的にアクセスできる。

データフォーマットの構造さえ掴んでしまえば、バイオデータもファイルI/Oの1つに過ぎませんね。

次回は、複数の配列が含まれるFASTAファイルの読み込み(SeqIO.parse)や、NCBI等の公共データベースから実際のDNAデータを取得して解析する方法に挑戦します。


PR