バイオインフォマティクスは、膨大な生物データを扱う科学の分野で、Python3はその効率的な解析に広く利用されています。特に、遺伝子やタンパク質の配列データは文字列として表現されるため、文字列操作はバイオインフォマティクスにおける重要なスキルです。Pythonには強力な「正規表現(Regular Expression)」の機能があり、複雑な文字列操作を簡単に行うことができます。本記事では、正規表現を使ってバイオインフォマティクスに関連する文字列のパターンマッチング方法について、基本〜応用までを解説します。
正規表現とは
正規表現(Regex)は、特定の文字列パターンを定義し、そのパターンに一致する文字列を効率的に検索、抽出、変換するための手法です。例えば、DNA配列の中から特定のモチーフ(短い配列パターン)を探したり、遺伝子名やタンパク質の機能情報を解析したりする際に有用です。Pythonの標準ライブラリには、正規表現を扱うためのre
モジュールが組み込まれており、これを活用することで効率的に文字列操作が可能になります。
Pythonでの正規表現の基本
まずは、Pythonで正規表現を利用するための基本的な使い方について紹介します。
1. reモジュールのインポート
正規表現を使うには、まずre
モジュールをインポートする必要があります。
import re
2. re.findall()で一致するすべての文字列を取得する
バイオインフォマティクスでは、例えばDNA配列の中から特定のパターンにマッチする部分を抽出したい場合があります。re.findall()
関数は、正規表現パターンに一致するすべての文字列をリストとして返します。
以下は、DNA配列中から特定のモチーフ「ATG」をすべて抽出する例です。
dna_sequence = "ATGCGATAGCTAGATGCTAGCGATG"
pattern = "ATG"
matches = re.findall(pattern, dna_sequence)
print(matches)
出力は以下の通りです:
['ATG', 'ATG', 'ATG']
このように、re.findall()
は指定したパターンに一致するすべての部分文字列をリスト形式で返してくれます。
3. re.search()で最初に一致した文字列を取得
もし、最初にマッチした文字列だけが必要であれば、re.search()
を使用します。これは最初に一致した部分を返すので、パフォーマンスを重視した検索に適しています。
match = re.search(pattern, dna_sequence)
if match:
print(f"Found: {match.group()}")
4. 正規表現パターンの構築
正規表現は単なる固定の文字列だけでなく、柔軟なパターンを表現できます。例えば、DNA配列中の「AまたはG」で始まり、「CまたはT」で終わる3文字のパターンを探したい場合、次のように正規表現を構築します。
pattern = "[AG].[CT]"
matches = re.findall(pattern, dna_sequence)
print(matches)
このように、[]
内に複数の文字を記述することで「いずれかの文字」という条件を指定できます。.
は任意の1文字を表します。
応用編:バイオインフォマティクスでの活用
次に、バイオインフォマティクスでの具体的な応用例を見てみましょう。
1. 配列モチーフの検索と可視化
バイオインフォマティクスの研究では、特定の遺伝子やタンパク質配列中に重要なモチーフ(特徴的な短い配列パターン)を探すことがよくあります。これには、配列全体をスキャンしてモチーフを検索する必要があります。
例えば、以下のようなモチーフ「[AT]G[CT]」をDNA配列から検索し、見つかったモチーフを強調表示することができます。
import re
dna_sequence = "ATGCGATAGCTAGATGCTAGCGATG"
pattern = "[AT]G[CT]"
matches = re.finditer(pattern, dna_sequence)
for match in matches:
start, end = match.span()
print(f"Match found: {match.group()} at position {start}-{end}")
re.finditer()
を使うことで、パターンに一致する位置情報も取得できます。これにより、配列中のどの場所に特定のモチーフが現れたかを知ることができます。位置情報は可視化や、次のステップでのさらなる解析に活用可能です。
2. 配列データの正規化とクリーニング
バイオインフォマティクスのデータ解析では、配列データやアノテーションデータに含まれる不要な記号や空白を除去する必要があることがあります。正規表現を使用すると、こうしたデータクリーニングも効率よく行えます。
例えば、FASTA形式の配列データには、コメント行や空白が含まれることがあります。これを正規表現で除去するコードは以下のようになります。
fasta_data = """
>sequence1
ATGCGT---AATCG
ATCGTNNNNAGT---
>sequence2
ATGGCCTAG---
"""
# 改行や不要な記号を除去
cleaned_data = re.sub(r"[^ATGC]", "", fasta_data)
print(cleaned_data)
このコードでは、re.sub()
を使って「A」「T」「G」「C」以外の文字をすべて除去しています。これにより、ノイズのない配列データを生成することができます。
3. 変異パターンの検索
遺伝子配列中の変異を検出する際にも正規表現が有用です。例えば、ある遺伝子配列内で特定のアミノ酸変異が起こるパターンを探す場合、正規表現で該当する変異パターンを定義し、一致する箇所を抽出することができます。
sequence = "MKTLLVLWISFAISCVLLGSMGVLSLKRL"
# Cysteineが任意の場所に現れるパターンを検索
pattern = "C[AILMV].{2}"
matches = re.findall(pattern, sequence)
print(matches)
この例では、Cysteine(C)が特定のアミノ酸と共に現れる3文字のパターンを検索しています。これにより、特定の変異が影響を与える領域を簡単に見つけることができます。
まとめ
バイオインフォマティクスにおいて、Pythonの正規表現は、DNAやタンパク質配列の解析を効率的に行うための強力なツールです。基本的な正規表現の使い方から、モチーフ検索や配列クリーニング、変異パターンの検出といった応用まで、多岐にわたる場面で役立ちます。正規表現を適切に活用することで、大量のデータを迅速に処理し、解析の精度を向上させることができます。Pythonと正規表現を駆使して、バイオインフォマティクスの研究をより一層進めていきましょう。