この記事では、マッピング後のBAMファイルから遺伝子ごとのリード数を集計する「カウント」について解説します。BAMベースのfeatureCounts・HTSeq-countと、アラインメントフリーのSalmon・Kallistoの4ツールの特徴と使い分け、そしてHTSeq-countを使った実践コードの読み方まで説明します。
カウントとは?なぜ必要なのか
マッピングでリードをゲノム上に貼り合わせたら、次は「各遺伝子にいくつのリードが対応しているか」を数える作業が必要です。これをカウント(定量)と呼びます。
この数値が、後の発現変動解析(DESeq2・edgeRなど)で使う入力データになります。
💡 カウントとは?
ゲノム上の各遺伝子領域に重なっているリードの数を集計する作業です。この数値が大きいほど「その遺伝子がよく発現していた」ことを意味します。カウント結果は通常、遺伝子×サンプルの表形式(カウントマトリクス)として出力されます。
カウントの方法は大きく2つに分かれます。
📂 BAMベース:STARなどでマッピングしたBAMファイルを入力とする方法。featureCounts・HTSeq-countがこれにあたります。
⚡ アラインメントフリー:マッピングを行わず、FASTQファイルから直接カウントする方法。Salmon・Kallistoがこれにあたります。処理が非常に速いのが特徴です。
今回紹介するのパイプライン(STAR → HTSeq-count)はBAMベースの流れです。
FASTQファイル→トリミング→マッピング(STAR)→カウント(HTSeq-count)→発現変動解析
主なツールの紹介と比較
| ツール名 | 方式 | 開発言語 | 特徴 |
|---|---|---|---|
| featureCounts | BAMベース | C | 高速・大規模サンプル向け |
| HTSeq-count | BAMベース | Python | シンプル・学習コストが低い |
| Salmon | アラインメントフリー | C++ | 超高速・バイアス補正が充実 |
| Kallisto | アラインメントフリー | C++ | 超高速・メモリ効率が良い |
🗂 BAMベースのツール
featureCounts
SubreadパッケージのツールでC言語実装のため非常に高速です。数十サンプルを一括処理する際に特に力を発揮します。マルチスレッドにも対応しています。
メリット
- 処理速度が非常に速い
- 複数サンプルを一度にまとめて処理できる
- マルチスレッド対応
デメリット
- 細かいカウントモードの設定が必要な場面がある
- HTSeqと比べてオプションが多く最初はやや難しい
このツールを選ぶ理由:サンプル数が多い解析や、パイプラインを自動化したい場合に最適です。
HTSeq-count
Python製のカウントツールで、コマンドがシンプルで動作が直感的に理解しやすいのが特徴です。RNA-seqの教育的なパイプラインでよく取り上げられています。
メリット
- コマンドがシンプルで学習コストが低い
- Python環境があればすぐ導入可能
- 動作が透明で理解しやすい
デメリット
- featureCountsより処理が遅い
- 大規模サンプルには不向き
このツールを選ぶ理由:初学者やPythonに慣れている方に最適。解析の流れを丁寧に学びたい段階に向いています。
⚡ アラインメントフリーのツール
Salmon
FASTQファイルから直接トランスクリプトの発現量を推定するツールです。マッピングを省くため処理が超高速で、バイアス補正機能も充実しています。近年急速に普及しており、tximportと組み合わせてDESeq2に渡すワークフローが標準化されつつあります。
メリット
- 処理速度が非常に速い(BAMベースの数十倍)
- バイアス補正が充実している
- トランスクリプトレベルの定量が可能
デメリット
- BAMファイルが出力されないため中間ファイルの確認ができない
- BAMベースと結果が異なる場合がある
このツールを選ぶ理由:処理速度と精度を両立させたい場合や、大規模サンプルをすばやく定量したい場面に向いています。
Kallisto
Salmonと同様にFASTQから直接定量するツールです。擬似アライメント(pseudo-alignment)という独自の手法を採用しており、非常に軽量・高速に動作します。
メリット
- メモリ使用量が少ない
- インストールが簡単
- 処理速度が非常に速い
デメリット
- Salmonと比べバイアス補正が限定的
- BAMファイルが出力されない
このツールを選ぶ理由:メモリが限られた環境で高速に定量したい場合に向いています。
ツール選びのまとめ
| 状況 | おすすめの選択 |
|---|---|
| はじめてカウントをする | HTSeq-count |
| 大量サンプルをBAMから速く処理したい | featureCounts |
| マッピングを省いて高速に定量したい | Salmon |
| メモリが少ない環境で高速定量したい | Kallisto |
HTSeq-countの基本的な使い方
インストール
# pipでインストール pip install HTSeq # バージョン確認 htseq-count –version
# pipでインストール pip install HTSeq # バージョン確認 htseq-count --version
💡 Conda環境を使っている場合conda install -c bioconda htseq でもインストールできます。
基本コマンド
STARで作成したソート済みBAMファイルとGTFアノテーションファイルを入力として使います。
htseq-count \ -f bam \ -r pos \ -s no \ -t exon \ -i gene_id \ output/sample_Aligned.sortedByCoord.out.bam \ annotation.gtf \ > counts.txt
| -f bam | 入力ファイルの形式を指定します。BAMファイルを使う場合は bam を指定します。 |
| -r pos | BAMファイルのソート方法を指定します。STARの出力はゲノム座標でソートされているため pos を指定します。 |
| -s no | ストランド特異性の指定です。ストランド情報がない(非特異的)ライブラリの場合は no を指定します。ストランド特異的ライブラリでは yes または reverse に変更が必要です。 |
| -t exon | GTFファイルのどのfeature(特徴)をカウント対象にするかを指定します。通常はエクソン(exon)を指定します。 |
| -i gene_id | カウントをまとめる単位を指定します。gene_id を指定すると遺伝子単位でカウントが集計されます。 |
| sample_Aligned…bam | STARが出力したBAMファイルを指定します。ファイル名はSTARの --outFileNamePrefix の設定によって変わります。 |
| annotation.gtf | 遺伝子のアノテーション情報が入ったGTFファイルを指定します。マッピング時に使ったものと同じファイルを使うのが基本です。 |
| > counts.txt | 結果を counts.txt というファイルに保存します。> はリダイレクト(出力先の指定)です。 |
💡 ストランド特異性(-s オプション)について
使用したライブラリ調製キットによって指定する値が変わります。不明な場合はRSeQCの infer_experiment.py で確認できます。一般的なTruSeq Stranded キットでは reverse を指定します。
出力結果のイメージ
実行後、counts.txt には以下のような形式で遺伝子ごとのカウント数が出力されます。
# 遺伝子ID カウント数 ENSG00000000003 1523 ENSG00000000005 4 ENSG00000000419 892 ENSG00000000457 310 ... __no_feature 4821 # どの遺伝子にも対応しなかったリード __ambiguous 1204 # 複数遺伝子に重なったリード __too_low_aQual 302 # 品質スコアが低すぎたリード
💡 __no_feature などの特殊行について
カウント結果の末尾にはアンダースコアで始まる特殊な行が含まれます。これらはどの遺伝子にも割り当てられなかったリードの統計情報で、発現変動解析の前に除外する必要があります。
発展的なオプション(参考)
- -m union複数の遺伝子に重なるリードの扱い方を指定(デフォルトは union)。intersection-strict や intersection-nonempty も選べる。
- -a 10マッピング品質スコアの閾値を指定(デフォルト10)。低品質なマッピングを除外できる。
- –additional-attr gene_name出力に遺伝子名(シンボル)列を追加する。結果が読みやすくなる。
- -n 4使用するCPUコア数を指定。HTSeq v2.0以降で対応。
- –counts-output counts.tsv> によるリダイレクトの代わりに出力ファイルを直接指定する方法。
まとめ
- カウントは各遺伝子に対応するリード数を集計する作業で、発現変動解析の入力データになる
- BAMベース(featureCounts・HTSeq-count)とアラインメントフリー(Salmon・Kallisto)の2方式がある
- 初学者にはコマンドがシンプルなHTSeq-countがおすすめ
- -s オプション(ストランド特異性)はライブラリキットに合わせて必ず確認する
- 出力末尾の __no_feature などの特殊行は発現変動解析の前に除外する
次のステップ:カウントマトリクスが揃ったら、DESeq2またはedgeRを使って発現変動解析へと進みましょう。

コメント