【シングルセル】空間トランスクリプトーム解析の始め方【Scanpy】

【シングルセル】空間トランスクリプトーム解析の始め方【Scanpy】

空間トランスクリプトームの解析手法について行えるようになりたくありませんか?組織内の遺伝子発現を空間情報と関連付けて解析することで、空間情報と遺伝子発現を結びつけることで組織微小環境下における細胞間相互作用の理解につながります。本記事では、空間トランスクリプトーム解析の初歩的なプログラムを動かすことができるようになることを目標としています。ぜひトライしてみましょう。

Tested Environment

google colaboratory

空間トランスクリプトームとは?


空間トランスクリプトームは、細胞や組織の遺伝子発現を空間情報とともに解析する技術です。 細胞の遺伝子発現データを組織内の位置方法と関連付けることで、Single Cell解析など従来のトランスクリプトーム解析では解くことのできなかった細胞間の相互関係を解析できます。

Anjali Rao et al, Nature (2021) より引用 https://www.nature.com/articles/s41586-021-03634-9

空間トランスクリプトーム解析を行うにあたってはハンズオンが用意されています。こちらに取り組むことで解析の理解を深めることができますが、バイオインフォマティクスに詳しくない方が取り組むには難しいところがあるため、こちらの記事では補足説明を加えつつ解説していきたいと思います。

Scanpyとは

Scanpyは、scRNA-seqデータの分析や可視化をサポートするPythonライブラリです。効率的で柔軟性の高いツールキットとして利用されます。今回はシングルセルデータの解析結果を組織画像へマッピングする手法を習得していきます。

Scanpyの詳しい解説は以下のサイトをご覧ください。

【シングルセル】Scanpyを用いて各クラスターに自動で細胞種を割り当てる【scRNA-seq】


ライブラリのインストールと環境設定

空間トランスクリプトーム解析のハンズオンをやっていきたいと思います。まずはGoogle colabを開きノートブックを作成します。

google colab リンク

次に以下のコマンドを実行していきしょう。

必要なパッケージをインストール

#install package
!pip install pandas
!pip install numpy !pip install scanpy !pip install scikit-misc

インストールが終わったら、以下の記述を記載してパッケージが使える状態にします。 Pythonではパッケージの記述を’パッケージ名’ as ’省略名’と記述することでコードを簡潔にすることができます。

#import package

import pandas as pd
import numpy as np
import scanpy as sc
import matplotlib.pyplot as plt
import os import sys from skmisc.loess
import loess

今回使用するマウスの背外側前頭前皮質のデータセットは下記のリンクからダウンロードします。こちらにアクセスし、151676のフォルダをダウンロードしましょう。

ダウンロードリンク https://drive.google.com/drive/folders/1pHJy2cB9BKqc3ny9IpvVhiw_8ukJMzPW

ダウンロードした151676のフォルダはGoogle driveにアップロードしましょう。

アップロード方法が分からない方は以下のサイトを参照してください。

Google ドライブにファイルやフォルダをアップロードする

データのインポート

インポートするデータのパスを取得

まずはインポートするデータのパスを指定できるようにします。

以下の作業を行ってください。

1.Google colabの画面左上にあるマウント管理のアイコンをクリック

このノートブックに Google ドライブのファイルへのアクセスを許可しますか?と画面にでるのでGoogle ドライブに接続を選択

2.保存した151676が保存されている一つ上のフォルダ(画像ではMyDrive)の三点リーダーをクリックし、パスをコピーを選択

()

これで解析に必要なパスの取得ができました!

データのインポート

データのインポートを行います。個人で指定したフォルダに先程ダウンロードしたデータを保存した場合は以下のコマンド内の’/content/drive/MyDrive’を先程保存したパスに変更します。MyDrive直下に151676フォルダを保存した場合は変更しないで大丈夫です。

#読み込むデータのidを設定
section_id = '151676'

#設定したデータの読み込み
input_dir = os.path.join('/content/drive/MyDrive', section_id)
adata = sc.read_visium(path=input_dir, count_file=section_id+'_filtered_feature_bc_matrix.h5') adata.var_names_make_unique()

データの確認をしてみましょう

#読み込んだデータを確認
data

出力結果が以下のようになっていたら読み込み成功です。

#出力結果(コードの打ち込み不要)
AnnData object with n_obs × n_vars = 3460 × 33538
    obs: 'in_tissue', 'array_row', 'array_col'
    var: 'gene_ids', 'feature_types', 'genome'
    uns: 'spatial'
    obsm: 'spatial'

出力結果の各項目は以下の様な意味を持ちます。

  1. obs(観測メタデータ)
    • 含まれる項目


      'in_tissue':スポットが組織に含まれているかどうかの情報(True / False)。


      'array_row' / 'array_col':スポットの位置情報(アレイ座標系での行・列番号)。

    • 役割:各スポットに関連する位置情報を管理します。


  2. var(遺伝子メタデータ)
    • 意味:変数(遺伝子)に関連付けられたメタデータが格納されます。


    • 含まれる項目


      'gene_ids':各遺伝子の一意な ID。


      'feature_types':遺伝子の特徴や種類(例:Gene Expression)。


      'genome':遺伝子が属するゲノム情報(必要に応じて使用)。


    • 役割:各遺伝子の特徴を整理します。


  3. uns(非構造化データ)
    • 含まれる項目
      • 'spatial':空間データや画像情報が格納されているキー。
        • 例:hires(高解像度画像)やlowres(低解像度画像)が格納されることが多いです。
    • 役割:主に空間的な遺伝子発現を組織画像にマッピングするために使用されます。
  4. obsm(多次元オブジェクト格納)
    • 含まれる項目


      'spatial':各スポット(または細胞)の座標情報(x, y 座標)を格納。


    • 役割:空間データ(スポット位置など)や PCA などの次元削減結果を格納します。


これらの情報を元に、空間的な遺伝子発現データの解析や組織画像へのマッピングが可能になります。

データの正規化と発現変動遺伝子の抽出

RNAシーケンスのデータは、細胞ごと・スポットごとに測定されるトータルの発現量(ライブラリサイズ)が異なるため、正規化を行わないと発現量の多い細胞が過大評価され、発現量の少ない細胞が無視されてしまいます。そのため、細胞ごとのトータルな遺伝子発現量を同じに揃える正規化 (Normalization) を行います。

#遺伝子発現変動の高い遺伝子(Top3,000)を抽出

sc.pp.highly_variable_genes(adata, flavor="seurat_v3", n_top_genes=3000)

#各細胞のトータル遺伝子発現量を10,000に合わせる(正規化)
sc.pp.normalize_total(adata, target_sum=1e4)
sc.pp.log1p(adata)

ここでは3つのステップでデータの処理を行っています

  1. 高可変遺伝子の選定 (sc.pp.highly_variable_genes) :ノイズを減らし重要な遺伝子に注目。
  2. 正規化 (sc.pp.normalize_total) :細胞ごとの発現量を10,000に揃え、比較可能にする。
  3. 対数変換 (sc.pp.log1p) :データの分布を圧縮し、解析をしやすくする。

細胞のアノテーションと組織画像への反映

アノテーション

先程まで行った解析から細胞種の特定と空間情報の反映を行うためにアノテーションを行います。

# read the annotation

Ann_df = pd.read_csv(os.path.join('/content/drive/MyDrive', section_id, section_id+'_truth.txt'), sep='\\t', header=None, index_col=0)

Ann_df.columns = ['Ground Truth']
adata.obs['Ground Truth'] = Ann_df.loc[adata.obs_names, 'Ground Truth']

処理の流れ

  1. アノテーションデータ(Ann_df)の中から、adata に含まれる細胞やスポットのID(adata.obs_names)に対応する 'Ground Truth' の値を抽出します。
  2. 抽出したデータを、adata.obs に新しい列 'Ground Truth' として追加します。

これにより、adata オブジェクトのメタデータとして「Ground Truth」ラベルが含まれるため、後の可視化や解析に利用できるようになります。

組織画像への反映

以下のコードでアノテーション結果を組織画像に反映させます

# アノテーション結果を組織画像に反映

plt.rcParams["figure.figsize"] = (3, 3) sc.pl.spatial(adata, img_key="hires", color=["Ground Truth"], show=False)

# ファイル名を指定して保存
plt.savefig("/content/drive/MyDrive/151676_spatial_transcriptome.png", dpi=300)

plt.rcParamの詳細

  • "figure.figsize":プロットのサイズ(幅と高さ)を指定します。
  • (3, 3):画像サイズを幅3インチ、高さ3インチに設定しています。

解析結果の可視化

sc.pl.spatial()scanpy の関数で、空間トランスクリプトームデータを組織画像に重ねて可視化します。

sc.pl.spatialの詳細

  • sc.pl.spatial() を使ってRNA-seq解析結果を組織画像に反映させます。
  • plt.savefig() で、保存したいファイル名(ここでは "151676_spatial_transcriptome.png")を指定します。

これで組織画像とアノテーション結果を同時に可視化し、画像ファイルとして保存することができます。

実行結果

コードを実行してセルの下に以下の画像が出力されていれば成功です!

出力した画像はMyDriveフォルダに保存されています。

最後に


ハンズオンではさらなる解析について紹介されていますので、興味がある方は是非チャレンジしてみてください!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です