4. ゲノム解析技術
4.1 配列解析パイプライン
前処理フェーズ:
def preprocess_sequence(raw_sequence):
# 品質管理
quality_filtered = quality_control(raw_sequence)
# アダプター除去
trimmed = adapter_trimming(quality_filtered)
# 重複除去
deduplicated = remove_duplicates(trimmed)
return deduplicated
エラーハンドリングを含む完全な実装:
import logging
import os
from typing import List, Dict, Optional, Tuple
from dataclasses import dataclass
from Bio import SeqIO
import pysam
import numpy as np
# ロギング設定
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
@dataclass
class QualityMetrics:
"""品質管理メトリクス"""
total_reads: int
passed_reads: int
mean_quality: float
q20_percentage: float
q30_percentage: float
gc_content: float
class SequenceAnalysisPipeline:
"""エラーハンドリングを含む配列解析パイプライン"""
def __init__(self, min_quality: int = 20, min_length: int = 50):
self.min_quality = min_quality
self.min_length = min_length
def quality_control(self, fastq_file: str) -> Tuple[str, QualityMetrics]:
"""
品質管理とフィルタリング
Args:
fastq_file: 入力FASTQファイル
Returns:
tuple: (フィルタ済みファイル名, 品質メトリクス)
"""
try:
output_file = fastq_file.replace('.fastq', '_filtered.fastq')
total_reads = 0
passed_reads = 0
quality_scores = []
gc_counts = []
with open(output_file, 'w') as out_handle:
for record in SeqIO.parse(fastq_file, 'fastq'):
total_reads += 1
# 品質スコアの計算
quals = record.letter_annotations['phred_quality']
mean_qual = np.mean(quals)
# 長さチェック
if len(record.seq) < self.min_length:
logger.debug(f"Read {record.id} too short: {len(record.seq)}")
continue
# 品質チェック
if mean_qual < self.min_quality:
logger.debug(f"Read {record.id} low quality: {mean_qual:.2f}")
continue
# GC含量計算
gc_count = record.seq.count('G') + record.seq.count('C')
gc_content = gc_count / len(record.seq)
# フィルタを通過
passed_reads += 1
quality_scores.extend(quals)
gc_counts.append(gc_content)
# 出力
SeqIO.write(record, out_handle, 'fastq')
# メトリクス計算
if passed_reads == 0:
raise ValueError("No reads passed quality filters")
quality_array = np.array(quality_scores)
metrics = QualityMetrics(
total_reads=total_reads,
passed_reads=passed_reads,
mean_quality=np.mean(quality_array),
q20_percentage=np.sum(quality_array >= 20) / len(quality_array) * 100,
q30_percentage=np.sum(quality_array >= 30) / len(quality_array) * 100,
gc_content=np.mean(gc_counts)
)
logger.info(f"Quality control completed: {passed_reads}/{total_reads} reads passed")
return output_file, metrics
except FileNotFoundError:
logger.error(f"Input file not found: {fastq_file}")
raise
except Exception as e:
logger.error(f"Quality control failed: {e}")
raise
マッピングフェーズ:
- BWA: Burrows-Wheeler Alignerによる高速マッピング
- SAMtools: マッピング結果の操作・統計
- GATK: 変異検出パイプライン
後処理フェーズ:
- 変異アノテーション: 機能予測・病原性評価
- 品質管理: 偽陽性率の制御
- 統計解析: 有意性検定・多重検定補正
臨床診断への直接貢献: 標準化されたパイプラインにより、ゲノムデータから臨床的に有用な情報を確実に抽出できる。品質管理プロセスにより、偽陽性・偽陰性を最小化し、診断精度を向上させる。自動化により、解析時間を数週間から数時間に短縮し、緊急症例での迅速診断を可能にする。標準化により、施設間での結果の一貫性を確保し、医療の質を向上させる。
4.2 変異検出と機能解析
体細胞変異検出:
class SomaticVariantCaller:
"""腫瘍-正常ペアからの体細胞変異検出"""
def __init__(self, tumor_bam, normal_bam, reference):
self.tumor_bam = tumor_bam
self.normal_bam = normal_bam
self.reference = reference
def call_variants(self, min_vaf=0.05, min_depth=20):
"""
体細胞変異の検出
Args:
min_vaf: 最小変異アレル頻度
min_depth: 最小リード深度
"""
# MuTect2スタイルの変異検出
variants = []
# 腫瘍特異的変異の統計的検定
# Fisher's exact testによる有意性評価
return variants
構造変異(SV)検出:
- 欠失・挿入・逆位・転座の検出
- Split-read/Paired-end情報の統合
- CNV(コピー数変異)解析
変異の機能的影響予測:
- SIFT/PolyPhen-2による病原性予測
- VEP(Variant Effect Predictor)
- スプライシング影響予測
4.3 ロングリードシークエンシング
PacBio/Oxford Nanopore技術:
- リード長: 10kb-100kb+
- エラー率: 5-15%(生データ)
- リアルタイムシークエンシング
アセンブリアルゴリズム:
class LongReadAssembler:
"""ロングリードアセンブリ"""
def overlap_layout_consensus(self, reads):
# 1. オーバーラップグラフ構築
overlap_graph = self.build_overlap_graph(reads)
# 2. レイアウト(グラフ簡約化)
layout = self.simplify_graph(overlap_graph)
# 3. コンセンサス配列生成
consensus = self.generate_consensus(layout)
return consensus
ハプロタイプ分離アセンブリ:
- 父母由来の染色体を分離
- HiFiリードによる高精度化
- 構造変異の正確な検出
🎯 認定試験ポイント
重要概念チェックリスト
ゲノム解析基礎 ⭐⭐⭐
- ゲノムサイズ・遺伝子数・非コード領域の割合をヒトで把握している
- SNP・Indel・CNV・構造変異の定義と検出手法を理解している
- 遺伝率とは何か、その推定方法を説明できる
- GWAS(ゲノムワイド関連解析)の基本原理と限界を理解している
配列解析技術 ⭐⭐⭐
- Sanger法と次世代シークエンシング技術の特徴比較ができる
- リードマッピング・アセンブリの基本戦略を理解している
- ペアエンドリード・ロングリードの利点と使い分けを把握している
- カバレッジ・精度・N50等の品質指標の意味を説明できる
変異解析 ⭐⭐
- SNP・Indelコーリングのアルゴリズムと品質フィルタリング
- アレル頻度・ハーディー・ワインベルグ平衡の計算
- 連鎖不平衡(LD)とハプロタイプの概念
- 集団遺伝学パラメータ(FST、Tajima’s D等)の解釈
アセンブリ手法 ⭐⭐
- グリーディアルゴリズムとグラフベースアセンブリの違い
- De Bruijnグラフの構築とパス探索
- アセンブリ品質評価(N50、コンティグサイズ分布等)
- ギャップクローニングとスキャフォールディング
典型的な出題パターン
【遺伝学計算】
問題例: 日本人集団でのSNPアレル頻度がA=0.7、a=0.3の場合、
ハーディー・ワインベルグ平衡における各遺伝型頻度は?
解答: AA = 0.7² = 0.49 (49%)
Aa = 2×0.7×0.3 = 0.42 (42%)
aa = 0.3² = 0.09 (9%)
【技術選択】
問題例: 新規ゲノムのde novoアセンブリを行う際、
ショートリードとロングリードの使い分けを説明せよ。
解答: ショートリード(Illumina): 高精度、反復配列に課題
ロングリード(PacBio/ONT): 反復配列解決、精度向上が課題
→ ハイブリッドアプローチで両者の利点を活用
【統計・品質管理】
問題例: GWAS解析で多重検定補正が必要な理由と、
一般的な補正手法を2つ挙げよ。
解答: 理由: 数百万SNPを同時検定するため偽陽性率が急増
手法: 1) Bonferroni補正(保守的)
2) FDR補正(Benjamini-Hochberg法)
【データ解釈】
問題例: RNA-seqデータで発現変動遺伝子(DEG)を検出した後、
生物学的意味を調べるための解析手法を3つ挙げよ。
解答: 1) Gene Ontology (GO) enrichment解析
2) KEGGパスウェイ解析
3) Gene Set Enrichment Analysis (GSEA)
関連する付録・章
- 付録G: 認定試験全体の対策情報
- 付録H: ゲノム解析ツール・データベース一覧
- 第3章: データ構造とアルゴリズム(技術基盤)
- 第5章: トランスクリプトーム解析(発現解析)
- 第6章: エピゲノム解析(制御解析)
前へ: データ解析基礎 | 目次 | 次へ: トランスクリプトーム解析 |