B
bulk-rna-seq-deseq2-analysis-with-omicverse
bulk-rna-seq-deseq2-analysis-with-omicverse について
バルクRNA-seq解析向けのomicverseスキルです。PyDESeq2による差次的発現解析を再現し、遺伝子ID対応付け、結果の可視化、任意のGSEAを扱います。
主な機能
- 01featureCounts行列の読み込み
- 02遺伝子IDからシンボルへの対応付け
- 03PyDESeq2による差次的発現解析
- 04差次的発現遺伝子の抽出と閾値設定
- 05ボルケーノプロットと遺伝子箱ひげ図
- 06GSEA富化解析と可視化
活用シーン
- 01処理群と対照群の発現差を比較
- 02差次的発現遺伝子を抽出しボルケーノプロットを作成
- 03指定遺伝子の群別発現を箱ひげ図で確認
- 04順位付けした遺伝子でGSEAを実行し経路曲線を描画
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ omicverse/ omicverse --skill bulk-rna-seq-deseq2-analysis-with-omicverseインストール後、Claude Code で/bulk-rna-seq-deseq2-analysis-with-omicverseを入力して読み込まれたか確認します。
同梱ファイルreference.md
詳細
omicverse を使用したバルク RNA-seq の DESeq2 解析
概要
ユーザーが t_deseq2.ipynb で紹介されている DESeq2 のワークフローを再現したい場合に、このスキルを使用します。raw featureCounts マトリックスの読み込み、Ensembl ID からシンボルへのマッピング、ov.bulk.pyDEG による PyDESeq2 の実行、下流のエンリッチメントプロットの探索を扱います。
手順
- 発現マトリックスをインポートして整形する
import omicverse as ovとov.style()を呼び出して、ビジュアルのスタイルを統一します。ov.io.read(..., index_col=0, header=1)を使用して、featureCounts のタブ区切りカウントデータを読み込みます。[c.split('/')[-1].replace('.bam', '') for c in data.columns]を使用して、列名の末尾にある.bamを削除します。
- 遺伝子 ID をマッピングする
ov.utils.download_geneid_annotation_pair()を実行して、適切なマッピングペアが存在することを確認します。ov.bulk.Matrix_ID_mapping(data, 'genesets/pair_<GENOME>.tsv')を使用して、gene_idを遺伝子シンボルに置き換えます。
- DEG オブジェクトを初期化する
- マッピング済みカウントデータから
dds = ov.bulk.pyDEG(data)を作成します。 dds.drop_duplicates_index()で重複する遺伝子名を解決し、ログで成功を確認します。
- マッピング済みカウントデータから
- コントラストを定義して DESeq2 を実行する
- 列名と完全に一致するサンプルラベルを
treatment_groupsとcontrol_groupsのリストにまとめます。 dds.deg_analysis(treatment_groups, control_groups, method='DEseq2')を実行して、PyDESeq2 を呼び出します。
- 列名と完全に一致するサンプルラベルを
- しきい値をフィルタリングして調整する
- 結果の形状(
dds.result.shape)を確認し、必要に応じて低発現遺伝子をフィルタリングします。例:dds.result.loc[dds.result['log2(BaseMean)'] > 1]。 dds.foldchange_set(fc_threshold=-1, pval_threshold=0.05, logp_max=6)でしきい値を設定し、フォールドチェンジのカットオフを自動選択します。
- 結果の形状(
- 差次的発現遺伝子を可視化する
dds.plot_volcano(...)でボルケーノプロットを作成し、主要な遺伝子をまとめます。- 遺伝子ごとの箱ひげ図を作成します:
dds.plot_boxplot(genes=[...], treatment_groups=..., control_groups=..., figsize=(2, 3))。
- エンリッチメント解析を実行する(任意)
ov.utils.download_pathway_database()でエンリッチメントライブラリをダウンロードし、ov.utils.geneset_prepareで読み込みます。rnk = dds.ranking2gsea()で GSEA 用に遺伝子を順位付けします。gsea_obj = ov.bulk.pyGSEA(rnk, pathway_dict)をインスタンス化し、gsea_obj.enrichment()を呼び出して用語を計算します。gsea_obj.plot_enrichment(...)でエンリッチメントのバブルチャートを、gsea_obj.plot_gsea(term_num=..., ...)で GSEA 曲線をプロットします。
- 防御的な検証
# Before PyDESeq2: verify count matrix contains raw integers (not log-transformed) import numpy as np if hasattr(data, 'values'): sample = data.values.flatten()[:1000] else: sample = np.array(data).flatten()[:1000] if np.any(sample != sample.astype(int)): print("WARNING: Data may not be raw counts. PyDESeq2 requires integer counts, not log-transformed.") # Verify treatment/control groups match column names for g in treatment_groups + control_groups: assert g in data.columns, f"Sample '{g}' not in count matrix columns: {list(data.columns)}" - トラブルシューティング
- PyDESeq2 がサイズファクターに関するエラーを返す場合は、対数変換済みデータではなく raw カウントを指定するようユーザーに案内します。
gene_idのマッピングは種に依存します。結果がまばらな場合は、正しいゲノムのペアをダウンロードするよう案内します。- 大規模なパスウェイライブラリを扱う場合、再帰制限を引き上げるか、プロットの前に上位 N 件の用語に絞り込む必要があります。
使用例
- 「処理群と対照群の反復サンプルに対して PyDESeq2 を実行し、エンリッチメント上位の WikiPathways 用語を強調表示してください。」
- 「log2(BaseMean) > 1 の遺伝子に DEG を絞り込み、フォールドチェンジのカットオフを自動選択して、ボルケーノプロットと箱ひげ図を作成してください。」
- 「GSEA 用の順位付き遺伝子リストを生成し、上位パスウェイのエンリッチメント曲線をプロットしてください。」
参考資料
- チュートリアルノートブック:
t_deseq2.ipynb - featureCounts のサンプルマトリックス:
sample/counts.txt - コピー&ペースト用のクイックコマンド:
reference.md
コメント
Markdown 対応