LoginSignup
15
16

More than 3 years have passed since last update.

cBioPortalのがんゲノムを可視化してみた

Last updated at Posted at 2019-12-26

この記事はbioinformatics2019アドベントカレンダー用の記事でした

今年はじめてbioinfoアドベントカレンダーに登録したのですが、全く間に合いませんでした。
すっかり穴を開けてしまいましたので、できたところまで公開します。最後の方におまけもあります。


mutations


RNA expression, Copy number

image.png
coadreadのメチル化

なお、この記事は必ずしも学術的に正確なものではなく、プログラミングの楽しさやグラフの美しさを主題に焦点を当てたものですのでご容赦ください。詳しい人のツッコミは歓迎します

がんゲノムのデータがなかなか手に入らないと思ったら

 がんのゲノムがどうなってるか知りたい人はたくさんいると思います。でも実際には、なかなかがんのゲノムを観察するわけにはいきません。それにはいくつかの理由があります。まず、がんは人間の体の一部です。患者さんが、がんの遺伝子のデータを提供したいと思わなければなりません。次に、調べるべきがんの組織があったとして、シークエンサーが可動していて、バイオインフォできる人がいて、予算もあるという施設はそんなに多くはないでしょう。またそういった条件がすべてクリアされていたとしても、解析できる検体の数は非常に限られるのが現状でしょう。

TCGAのデータちょっとつらい

 そこで、みんなTCGAにデータを取りにいくことを考えると思います。TCGAとは、The Cancer Genome Atlas (TCGA) というグループで、がん組織のシークエンスデータを公共に公開しています。でも、これが意外と大変ですよね。シークエンスの生データって1ファイル何GBも容量あります。さらにダウンロードには申請と許可が必要です。早い話、個人がお家でダウンロードするのは難しいと思います。


(画像はTCGAのサイトより)

 しかも、仮に生データをダウンロードできたとしても、マッピングを自分で行わなければなりません。今はSTARhisat2など素晴らしいソフトや、GalaxyCWLなどワークフローがあるから、メモリ128GB積んだRyzenの自作PCとか用意して、マッピングをすること自体は可能かもしれませんが、その解析結果が正しいかどうかなんてちょっと素人にはわかりません……。だから、そういうのは、できれば避けたいところです。もちろん融合遺伝子を探したいとか、目的がはっきりしている人には大きな意味があると思います。

そこでcBioPortalですよ

 なので、素直に考えたら、cBioPortalのデータを見に行くしかないと思うんですよね。ひょっとしたら中国あたりに、cBioPortalぐらいの規模のデータベースが、私が知らないだけで隠されているのかも知れませんが、今のところ私はそういうものを知らないので、cBioPortalが地球最大のデータベースということになるかと思います。

 cBioPortalの素晴らしいところはたくさんあります。フロントエンドも素晴らしくて、Webアプリとして使うこともできます。


(悪性黒色腫についてcBioPortalでOncoPlotを表示してみたところ)


(変異の意義もOncoKBなどのデータベースと照らし合わせることができる)


(肝臓がんの全体のデータを表示したところ。この画面から任意の層別化を行い、生存曲線を描くことも可能である)

 cBioPortalはAPIも提供しており、APIにアクセスすることで効率的にデータを検索することができます。dockerを使えば比較的簡単にcBioPortalサーバーを起動することができますので、そうやって使えば大量アクセスを気にする必要もありません。


(素晴らしいAPIが提供されている)


(Dockerを使えばcBioPortalを自分のマシンで動かすことができる。)

 でも、cBioPortalの一番すごいところは、タブ区切りテキスト形式のデータをGithubのdatahubというリポジトリで公開しているところです。タブ区切りテキストならば、エクセルでも開くことができるので、誰でもがんゲノムのデータを見ることができるわけです。

 結論 → Datahubのデータを見ればよい。

(※cBioPortalは、プロモーター領域の変異などは登録されていないという弱点もあります)

cBioPortalからPublicのデータを全部ダウンロードする

こちらのリポジトリの内容をダウンロードします。READMEを見るとやり方が書いてありますが、Git LFS というコマンドラインツールが必要です。Git LFSをインストールして、READMEの通りにします。

git lfsの設定

git lfs install --skip-repo --skip-smudge

リポジトリのクローン

git clone https://github.com/cBioPortal/datahub.git
cd datahub
git lfs install --local --skip-smudge

public以下のファイルを全て取得する

git lfs pull -I public

ディレクトリのサイズは全部で 90GB もあるのでダウンロードには時間がかかります。しかしsraファイルを直接ダウンロードして自分で処理する手間や時間を考えたらほぼ 0GBに等しいと言って差し支えないでしょう(強弁)。

がんの変異、RNA発現、コピーナンバー、メチル化のデータをプロットする

 さて、このように大量にデータを入手してみたら、なんとなく全体像を可視化してみたいと思わないでしょうか?

 突然ですが私はRubyが大好きです。Rubyでグラフを描くためのツールGR.rbを自作しています。(正確にはffiを用いたGR FrameworkのRubyバインディングです。) そこで自作のツールを使用して、がんゲノムのデータを大雑把に可視化してみることにしました。
image.png
https://qiita.com/kojix2/items/456259f40d5563005cd1

 また、データフレームの代用として、ApachArrowのRubyバインディングであるRedArrowを使用しています。クラスタリングにはRumaleとnumo-linalgを使用しました。いずれもとてもマイナーなツールですので、たぶんこの記事を読んでもよほどRubyについて詳しい方以外は環境を整える時点で大変で、なかなか再現できないだろうなと思います。Rubyでやるメリットはあまりなくて、私の場合は単にRubyが好きだからそうしています。Ruby以外では、JuliaとGR.jl、Pythonとpython-grなどを使うと、比較的簡単に同じような結果が得られると思います。

でもねえ、やっぱり人間は自分で作ったツールを使いたくなる生き物だから、たとえ不出来でも自分でツールを作った人だけに見えてくる世界もあると思うんだよね。私はそう信じている…

Mutation

  • X軸 サンプル
  • Y軸 遺伝子(ここでは20000にしました)
  • Z軸 1遺伝子のなかのmutationの数
# frozen_string_literal: true

require 'fileutils'
require 'gr/plot'
require 'arrow'
require 'progress_bar/core_ext/enumerable_with_progress'

FileUtils.mkdir_p 'mutation'

def read_tsv(path)
  Arrow::Table.load(path,
                    format: 'csv',
                    delimiter: "\t".ord)
end

CANCER_TYPES = %w[paad stad kirp laml thym meso uvm hnsc lihc kich chol pcpg blca
                  coadread ov sarc prad lgg lusc thca esca ucs cesc gbm skcm kirc
                  tgct brca ucec dlbc acc luad].freeze

CANCER_TYPES.each_with_progress do |cancer_type|
  path = '../datahub/public/' + cancer_type + '_tcga/data_mutations_extended.txt'

  df = read_tsv(path)
  p cancer_type: cancer_type, n_rows: df.n_rows
  next if cancer_type == 'brca'

  barcodes = df.select_columns('Tumor_Sample_Barcode')[0].uniq
  sampleids = df.select_columns('Hugo_Symbol')[0].uniq
  result = Array.new(20_000) { Array.new(barcodes.size, 0) }
  df.select_columns('Hugo_Symbol', 'Tumor_Sample_Barcode', 'Consequence').each_record do |record|
    id, sb, co = record.to_a
    unless co == 'synonymous_variant'
      result[sampleids.find_index(id)][barcodes.find_index(sb)] += 1
    end
  end
  opts = { title: cancer_type, size: [200, 160], xflip: true, yflip: true }
  GR.heatmap(result, opts.merge(colormap: 6))
  GR.savefig('mutation/' + cancer_type + '_0.png')
  GR.contour(result, opts)
  GR.savefig('mutation/' + cancer_type + '_1.png')
  GR.surface(result, opts.merge(zlim: [0, 15], colormap: 4))
  GR.savefig('mutation/' + cancer_type + '_2.png')
  GR.surface(result, opts.merge(zlim: [0, 15], colormap: 43))
  GR.savefig('mutation/' + cancer_type + '_3.png')
  GR.surface(result, opts.merge(zlim: [0, 15], colormap: 29))
  GR.savefig('mutation/' + cancer_type + '_4.png')
end

ACC (Adrenocortical carcinoma) 副腎皮質がん

acc_0.pngacc_1.pngacc_3.pngacc_4.png

BLCA (Bladder Urothelial Carcinoma) 膀胱がん・尿路上皮がん

blca_0.pngblca_1.pngblca_3.pngblca_4.png

BRCA (Breast invasive carcinoma) 乳がん

※データ量が多すぎるのか、バーチャルメモリエラーと表示されて出力できず。

CESC (Cervical squamous cell carcinoma and endocervical adenocarcinoma) 子宮頸がん

※なぜかこのスタディのデータだけ発現変異の多い順にまとめられていないようです

cesc_0.pngcesc_1.pngcesc_3.pngcesc_4.png

CHOL (Cholangiocarcinoma) 胆管がん

chol_0.pngchol_1.pngchol_3.pngchol_4.png

COAD READ (Colon adenocarcinoma) (Rectum adenocarcinoma) 大腸がん・直腸がん

※cBioPortalでは、COADとREADをセットにしてCOADREADとして扱っています。

coadread_0.pngcoadread_1.pngcoadread_3.pngcoadread_4.png

DLBC (Lymphoid Neoplasm Diffuse Large B-cell Lymphoma) リンパ腫・びまん性大細胞型B細胞性リンパ腫

dlbc_0.pngdlbc_1.pngdlbc_3.pngdlbc_4.png

ESCA (Esophageal carcinoma) 食道がん

esca_0.pngesca_1.pngesca_3.pngesca_4.png

GBM (Glioblastoma multiforme) 膠芽腫

gbm_0.pnggbm_1.pnggbm_3.pnggbm_4.png

HNSC (Head and Neck squamous cell carcinoma) 頭頚部がん

hnsc_0.pnghnsc_1.pnghnsc_3.pnghnsc_4.png

KICH (Kidney Chromophobe)

kich_0.pngkich_1.pngkich_3.pngkich_4.png

KIRC (Kidney renal clear cell carcinoma)

kirc_0.pngkirc_1.pngkirc_3.pngkirc_4.png

KIRP (Kidney renal papillary cell carcinoma)

kirp_0.pngkirp_1.pngkirp_3.pngkirp_4.png

LAML (Acute Myeloid Leukemia) 急性骨髄性白血病

laml_0.pnglaml_1.pnglaml_3.pnglaml_4.png

LGG (Lower Grade Glioma) 神経膠腫

lgg_0.pnglgg_1.pnglgg_3.pnglgg_4.png

LIHC (Liver hepatocellular carcinoma) 肝臓がん

lihc_0.pnglihc_1.pnglihc_3.pnglihc_4.png

LUAD (Lung adenocarcinoma) 肺腺がん

luad_0.pngluad_1.pngluad_3.pngluad_4.png

LUSC (Lung squamous cell carcinoma) 肺扁平上皮がん

lusc_0.pnglusc_1.pnglusc_3.pnglusc_4.png

MESO (Mesothelioma) 中皮腫

meso_0.pngmeso_1.pngmeso_3.pngmeso_4.png

OV (Ovarian serous cystadenocarcinoma) 卵巣漿液性のう胞腺腫

ov_0.pngov_1.pngov_3.pngov_4.png

PAAD (Pancreatic adenocarcinoma) 膵臓がん

※ 1つだけ飛び抜けて変異(mutation)が多い症例があります

paad_0.pngpaad_1.pngpaad_3.pngpaad_4.png

PCPG (Pheochromocytoma and Paraganglioma) 褐色細胞腫 傍神経節腫

pcpg_0.pngpcpg_1.pngpcpg_3.pngpcpg_4.png

PRAD (Prostate adenocarcinoma) 前立腺がん

prad_0.pngprad_1.pngprad_3.pngprad_4.png

SARC (Sarcoma) 肉腫

sarc_0.pngsarc_1.pngsarc_3.pngsarc_4.png

SKCM (Skin Cutaneous Melanoma) 悪性黒色腫

skcm_0.pngskcm_1.pngskcm_3.pngskcm_4.png

STAD (Stomach adenocarcinoma) 胃がん

stad_0.pngstad_1.pngstad_3.pngstad_4.png

TGCT (Testicular Germ Cell Tumors) 精巣がん

tgct_0.pngtgct_1.pngtgct_3.pngtgct_4.png

THCA (Thyroid carcinoma) 甲状腺がん

thca_0.pngthca_1.pngthca_3.pngthca_4.png

THYM (Thymoma) 胸腺腫

thym_0.pngthym_1.pngthym_3.pngthym_4.png

UCEC (Uterine Corpus Endometrial Carcinoma) 子宮体がん

ucec_0.pngucec_1.pngucec_3.pngucec_4.png

UCS (Uterine Carcinosarcoma) 子宮肉腫

ucs_0.pngucs_1.pngucs_3.pngucs_4.png

UVM (Uveal Melanoma) ぶどう膜黒色腫

uvm_0.pnguvm_1.pnguvm_3.pnguvm_4.png

RNA expression

# frozen_string_literal: true

require 'fileutils'
require 'gr/plot'
require 'arrow'
require 'progress_bar/core_ext/enumerable_with_progress'

FileUtils.mkdir_p 'rna'

def read_tsv(path)
  Arrow::Table.load(path,
                    format: 'csv',
                    delimiter: "\t".ord)
end

CANCER_TYPES = %w[paad stad kirp laml thym meso uvm hnsc lihc kich chol pcpg blca
                  coadread ov sarc prad lgg lusc thca esca ucs cesc gbm skcm kirc
                  tgct brca ucec dlbc acc luad].freeze

CANCER_TYPES.each_with_progress do |cancer_type|
  path = '../datahub/public/' + cancer_type + '_tcga/data_RNA_Seq_v2_expression_median.txt'

  df = read_tsv(path)

  z = df.select_columns(2..-1).raw_records
  GR.contour(z, size: [120, 100], title: cancer_type, colormap: 4, zlim: [0, 600_000])
  GR.savefig('rna/' + cancer_type + '_contour.png')
  GR.surface(z, size: [120, 100], title: cancer_type, colormap: 4, zlim: [0, 600_000])
  GR.savefig('rna/' + cancer_type + '_surface.png')
end

ACC (Adrenocortical carcinoma) 副腎皮質がん

acc_contour.pngacc_surface.png

BLCA (Bladder Urothelial Carcinoma) 膀胱がん・尿路上皮がん

blca_contour.pngblca_surface.png

BRCA (Breast invasive carcinoma) 乳がん

※メモリ不足表示

CESC (Cervical squamous cell carcinoma and endocervical adenocarcinoma) 子宮頸がん

cesc_contour.pngcesc_surface.png

CHOL (Cholangiocarcinoma) 胆管がん

chol_contour.pngchol_surface.png

COAD READ (Colon adenocarcinoma) (Rectum adenocarcinoma) 大腸がん・直腸がん

coadread_contour.pngcoadread_surface.png

DLBC (Lymphoid Neoplasm Diffuse Large B-cell Lymphoma) リンパ腫・びまん性大細胞型B細胞性リンパ腫

dlbc_contour.pngdlbc_surface.png

ESCA (Esophageal carcinoma) 食道がん

esca_contour.pngesca_surface.png

GBM (Glioblastoma multiforme) 膠芽腫

gbm_contour.pnggbm_surface.png

HNSC (Head and Neck squamous cell carcinoma) 頭頚部がん

hnsc_contour.pnghnsc_surface.png

KICH (Kidney Chromophobe)

kich_contour.pngkich_surface.png

KIRC (Kidney renal clear cell carcinoma)

kirc_contour.pngkirc_surface.png

KIRP (Kidney renal papillary cell carcinoma)

kirp_contour.pngkirp_surface.png

LAML (Acute Myeloid Leukemia) 急性骨髄性白血病

laml_contour.pnglaml_surface.png

LGG (Lower Grade Glioma) 神経膠腫

lgg_contour.pnglgg_surface.png

LIHC (Liver hepatocellular carcinoma) 肝臓がん

lihc_contour.pnglihc_surface.png

LUAD (Lung adenocarcinoma) 肺腺がん

luad_contour.pngluad_surface.png

LUSC (Lung squamous cell carcinoma) 肺扁平上皮がん

lusc_contour.pnglusc_surface.png

MESO (Mesothelioma) 中皮腫

meso_contour.pngmeso_surface.png

OV (Ovarian serous cystadenocarcinoma) 卵巣漿液性のう胞腺腫

ov_contour.pngov_surface.png

PAAD (Pancreatic adenocarcinoma) 膵臓がん

paad_contour.pngpaad_surface.png

PCPG (Pheochromocytoma and Paraganglioma) 褐色細胞腫 傍神経節腫

pcpg_contour.pngpcpg_surface.png

PRAD (Prostate adenocarcinoma) 前立腺がん

prad_contour.pngprad_surface.png

SARC (Sarcoma) 肉腫

sarc_contour.pngsarc_surface.png

SKCM (Skin Cutaneous Melanoma) 悪性黒色腫

skcm_contour.pngskcm_surface.png

STAD (Stomach adenocarcinoma) 胃がん

stad_contour.pngstad_surface.png

TGCT (Testicular Germ Cell Tumors) 精巣がん

tgct_contour.pngtgct_surface.png

THCA (Thyroid carcinoma) 甲状腺がん

thca_contour.pngthca_surface.png

THYM (Thymoma) 胸腺腫

thym_contour.pngthym_surface.png

UCEC (Uterine Corpus Endometrial Carcinoma) 子宮体がん

ucec_contour.pngucec_surface.png

UCS (Uterine Carcinosarcoma) 子宮肉腫

ucs_contour.pngucs_surface.png

UVM (Uveal Melanoma) ぶどう膜黒色腫

uvm_contour.pnguvm_surface.png

コピーナンバー

今回、一番驚いたのはコピーナンバーでした。想像以上に癌腫ごとに特徴が現れていることがわかります。
色違いで2種類の画像を作ったので掲載します。

# frozen_string_literal: true

require 'fileutils'
require 'gr/plot'
require 'arrow'
require 'progress_bar/core_ext/enumerable_with_progress'

FileUtils.mkdir_p 'copy_number'

def read_tsv(path)
  Arrow::Table.load(path,
                    format: 'csv',
                    delimiter: "\t".ord)
end

require 'numo/linalg'
require 'rumale'

def cluster(z, a, b)
  samples = Numo::DFloat.cast(z)

  normalizer = Rumale::Preprocessing::StandardScaler.new
  samples_std = normalizer.fit_transform(samples.transpose)
  samples_std = samples_std.transpose

  if a == 1
    xindex = true
  else
    gmm = Rumale::Clustering::KMeans.new(n_clusters: a)
    pca = Rumale::Decomposition::PCA.new(n_components: 50)
    samples_std_pca = pca.fit_transform(samples_std)
    cluster_ids = gmm.fit_predict(samples_std_pca)

    xindex = cluster_ids.sort_index
  end

  if b == 1
    yindex = true
  else
    gmm2 = Rumale::Clustering::KMeans.new(n_clusters: b)
    pca2 = Rumale::Decomposition::PCA.new(n_components: 50)
    samples_std_pca2 = pca2.fit_transform(samples_std.transpose)
    cluster_ids2 = gmm2.fit_predict(samples_std_pca2)

    yindex = cluster_ids2.sort_index
  end

  z3 = Numo::DFloat.cast(z)
  z3 = z3[xindex, yindex]
  z3
end

CANCER_TYPES = %w[paad stad kirp laml thym meso uvm hnsc lihc kich chol pcpg blca
                  coadread ov sarc prad lgg lusc thca esca ucs cesc gbm skcm kirc
                  tgct brca ucec dlbc acc luad].freeze

CANCER_TYPES.each_with_progress do |cancer_type|
  path = '../datahub/public/' + cancer_type + '_tcga/data_CNA.txt'

  df = read_tsv(path)
  p cancer_type: cancer_type, n_rows: df.n_rows, time: Time.now
  next if cancer_type == "brca"

  z = df.select_columns(2..-1).raw_records
  z = cluster(z, 1, 10)
  GR.histogram(z.flatten, size: [120, 100])
  GR.heatmap(z, size: [120, 100])
  GR.savefig('copy_number/' + cancer_type + '_heatmap0.png')
  GR.heatmap(z, size: [120, 100], colormap: 11)
  GR.savefig('copy_number/' + cancer_type + '_heatmap1.png')
  GR.surface(z, size: [120, 100], title: cancer_type)
  GR.savefig('copy_number/' + cancer_type + '_surface0.png')
  GR.surface(z, size: [120, 100], title: cancer_type, colormap: 4)
  GR.savefig('copy_number/' + cancer_type + '_surface1.png')
  GR.surface(z, size: [120, 100], title: cancer_type, colormap: 11)
  GR.savefig('copy_number/' + cancer_type + '_surface2.png')
end

ACC (Adrenocortical carcinoma) 副腎皮質がん

acc_heatmap0.pngacc_heatmap1.pngacc_surface0.pngacc_surface2.png

BLCA (Bladder Urothelial Carcinoma) 膀胱がん・尿路上皮がん

blca_heatmap0.pngblca_heatmap1.pngblca_surface0.pngblca_surface2.png

BRCA (Breast invasive carcinoma) 乳がん

※なし

CESC (Cervical squamous cell carcinoma and endocervical adenocarcinoma) 子宮頸がん

cesc_heatmap0.pngcesc_heatmap1.pngcesc_surface0.pngcesc_surface2.png

CHOL (Cholangiocarcinoma) 胆管がん

chol_heatmap0.pngchol_heatmap1.pngchol_surface0.pngchol_surface2.png

COAD READ (Colon adenocarcinoma) (Rectum adenocarcinoma) 大腸がん・直腸がん

coadread_heatmap0.pngcoadread_heatmap1.pngcoadread_surface0.pngcoadread_surface2.png

DLBC (Lymphoid Neoplasm Diffuse Large B-cell Lymphoma) リンパ腫・びまん性大細胞型B細胞性リンパ腫

dlbc_heatmap0.pngdlbc_heatmap1.pngdlbc_surface0.pngdlbc_surface2.png

ESCA (Esophageal carcinoma) 食道がん

esca_heatmap0.pngesca_heatmap1.pngesca_surface0.pngesca_surface2.png

GBM (Glioblastoma multiforme) 膠芽腫

gbm_heatmap0.pnggbm_heatmap1.pnggbm_surface0.pnggbm_surface2.png

HNSC (Head and Neck squamous cell carcinoma) 頭頚部がん

hnsc_heatmap0.pnghnsc_heatmap1.pnghnsc_surface0.pnghnsc_surface2.png

KICH (Kidney Chromophobe)

kich_heatmap0.pngkich_heatmap1.pngkich_surface0.pngkich_surface2.png

KIRC (Kidney renal clear cell carcinoma)

kirc_heatmap0.pngkirc_heatmap1.pngkirc_surface0.pngkirc_surface2.png

KIRP (Kidney renal papillary cell carcinoma)

kirp_heatmap0.pngkirp_heatmap1.pngkirp_surface0.pngkirp_surface2.png

LAML (Acute Myeloid Leukemia) 急性骨髄性白血病

laml_heatmap0.pnglaml_heatmap1.pnglaml_surface0.pnglaml_surface2.png

LGG (Lower Grade Glioma) 神経膠腫

lgg_heatmap0.pnglgg_heatmap1.pnglgg_surface0.pnglgg_surface2.png

LIHC (Liver hepatocellular carcinoma) 肝臓がん

lihc_heatmap0.pnglihc_heatmap1.pnglihc_surface0.pnglihc_surface2.png

LUAD (Lung adenocarcinoma) 肺腺がん

luad_heatmap0.pngluad_heatmap1.pngluad_surface0.pngluad_surface2.png

LUSC (Lung squamous cell carcinoma) 肺扁平上皮がん

lusc_heatmap0.pnglusc_heatmap1.pnglusc_surface0.pnglusc_surface2.png

MESO (Mesothelioma) 中皮腫

meso_heatmap0.pngmeso_heatmap1.pngmeso_surface0.pngmeso_surface2.png

OV (Ovarian serous cystadenocarcinoma) 卵巣漿液性のう胞腺腫

ov_heatmap0.pngov_heatmap1.pngov_surface0.pngov_surface2.png

PAAD (Pancreatic adenocarcinoma) 膵臓がん

paad_heatmap0.pngpaad_heatmap1.pngpaad_surface0.pngpaad_surface2.png

PCPG (Pheochromocytoma and Paraganglioma) 褐色細胞腫 傍神経節腫

pcpg_heatmap0.pngpcpg_heatmap1.pngpcpg_surface0.pngpcpg_surface2.png

PRAD (Prostate adenocarcinoma) 前立腺がん

prad_heatmap0.pngprad_heatmap1.pngprad_surface0.pngprad_surface2.png

SARC (Sarcoma) 肉腫

sarc_heatmap0.pngsarc_heatmap1.pngsarc_surface0.pngsarc_surface2.png

SKCM (Skin Cutaneous Melanoma) 悪性黒色腫

skcm_heatmap0.pngskcm_heatmap1.pngskcm_surface0.pngskcm_surface2.png

STAD (Stomach adenocarcinoma) 胃がん

stad_heatmap0.pngstad_heatmap1.pngstad_surface0.pngstad_surface2.png

TGCT (Testicular Germ Cell Tumors) 精巣がん

tgct_heatmap0.pngtgct_heatmap1.pngtgct_surface0.pngtgct_surface2.png

THCA (Thyroid carcinoma) 甲状腺がん

thca_heatmap0.pngthca_heatmap1.pngthca_surface0.pngthca_surface2.png

THYM (Thymoma) 胸腺腫

thym_heatmap0.pngthym_heatmap1.pngthym_surface0.pngthym_surface2.png

UCEC (Uterine Corpus Endometrial Carcinoma) 子宮体がん

ucec_heatmap0.pngucec_heatmap1.pngucec_surface0.pngucec_surface2.png

UCS (Uterine Carcinosarcoma) 子宮肉腫

ucs_heatmap0.pngucs_heatmap1.pngucs_surface0.pngucs_surface2.png

UVM (Uveal Melanoma) ぶどう膜黒色腫

uvm_heatmap0.pnguvm_heatmap1.pnguvm_surface0.pnguvm_surface2.png

メチル化

これは画像を拡大する意味があまりないかなと思うので、小さい画像でご覧ください。単に綺麗であるという理由で色違い3種類を用意しています。そこまで意味はないので、タペストリー的に見てください。上はクラスタリングなし、下はごく適当にクラスタリングをかけています。中には精巣がんのようにくっきりと層別化されているように見えるものもあります。厳密にはあまり意味のない画像かもしれませんが、それぞれのstudyがどれぐらい層別化できそうかの雰囲気ぐらいはつかめると思います。

# frozen_string_literal: true

require 'fileutils'
require 'gr/plot'
require 'arrow'
require 'progress_bar/core_ext/enumerable_with_progress'

FileUtils.mkdir_p 'methylation'

def read_tsv(path)
  Arrow::Table.load(path,
                    format: 'csv',
                    delimiter: "\t".ord)
end

require 'numo/linalg'
require 'rumale'

def cluster(z, a, b)
  samples = Numo::DFloat.cast(z)

  normalizer = Rumale::Preprocessing::StandardScaler.new
  samples_std = normalizer.fit_transform(samples.transpose)
  samples_std = samples_std.transpose

  if a == 1
    xindex = true
  else
    gmm = Rumale::Clustering::KMeans.new(n_clusters: a)
    pca = Rumale::Decomposition::PCA.new(n_components: 50)
    samples_std_pca = pca.fit_transform(samples_std)
    cluster_ids = gmm.fit_predict(samples_std_pca)

    xindex = cluster_ids.sort_index
  end

  if b == 1
    yindex = true
  else
    gmm2 = Rumale::Clustering::KMeans.new(n_clusters: b)
    pca2 = Rumale::Decomposition::PCA.new(n_components: 50)
    samples_std_pca2 = pca2.fit_transform(samples_std.transpose)
    cluster_ids2 = gmm2.fit_predict(samples_std_pca2)

    yindex = cluster_ids2.sort_index
  end

  z3 = Numo::DFloat.cast(z)
  z3 = z3[xindex, yindex]
  z3
end

CANCER_TYPES = %w[paad stad kirp laml thym meso uvm hnsc lihc kich chol pcpg blca
                  coadread ov sarc prad lgg lusc thca esca ucs cesc gbm skcm kirc
                  tgct brca ucec dlbc acc luad].freeze

CANCER_TYPES.each_with_progress do |cancer_type|
  path = '../datahub/public/' + cancer_type + '_tcga/data_methylation_hm450.txt'
  next unless File.exist? path

  df = read_tsv(path)
  p cancer_type: cancer_type, n_rows: df.n_rows, time: Time.now
  next if cancer_type == 'brca'

  z_ = df.select_columns(2..-1).raw_records
  z0 = z_.map { |i| i.map { |j| j == 'NA' ? 0.0 : j.to_f } }
  z1 = cluster(z0, 1, 6)
  z2 = cluster(z0, 6, 6)
  [z0, z1, z2].each_with_index do |z, i|
    GR.heatmap(z, size: [120, 100], title: cancer_type)
    GR.savefig('methylation/' + cancer_type + "_#{i}" + '_heatmap0.png')
    GR.heatmap(z, size: [120, 100], title: cancer_type, colormap: 4)
    GR.savefig('methylation/' + cancer_type + "_#{i}" + '_heatmap1.png')
    GR.heatmap(z, size: [120, 100], title: cancer_type, colormap: 6)
    GR.savefig('methylation/' + cancer_type + "_#{i}" + '_heatmap2.png')
  end
end

ACC (Adrenocortical carcinoma) 副腎皮質がん

acc_0_heatmap0.pngacc_0_heatmap1.pngacc_0_heatmap2.png
acc_2_heatmap0.pngacc_2_heatmap1.pngacc_2_heatmap2.png

BLCA (Bladder Urothelial Carcinoma) 膀胱がん・尿路上皮がん

blca_0_heatmap0.pngblca_0_heatmap1.pngblca_0_heatmap2.pngblca_2_heatmap0.pngblca_2_heatmap1.pngblca_2_heatmap2.png

BRCA (Breast invasive carcinoma) 乳がん

※ なし(メモリ不足表示)

CESC (Cervical squamous cell carcinoma and endocervical adenocarcinoma) 子宮頸がん

cesc_0_heatmap0.pngcesc_0_heatmap1.pngcesc_0_heatmap2.pngcesc_2_heatmap0.pngcesc_2_heatmap1.pngcesc_2_heatmap2.png

CHOL (Cholangiocarcinoma) 胆管がん

chol_0_heatmap0.pngchol_0_heatmap1.pngchol_0_heatmap2.pngchol_2_heatmap0.pngchol_2_heatmap1.pngchol_2_heatmap2.png

COAD READ (Colon adenocarcinoma) (Rectum adenocarcinoma) 大腸がん・直腸がん

coadread_0_heatmap0.pngcoadread_0_heatmap1.pngcoadread_0_heatmap2.png
coadread_2_heatmap0.pngcoadread_2_heatmap1.pngcoadread_2_heatmap2.png

DLBC (Lymphoid Neoplasm Diffuse Large B-cell Lymphoma) リンパ腫・びまん性大細胞型B細胞性リンパ腫

dlbc_0_heatmap0.pngdlbc_0_heatmap1.pngdlbc_0_heatmap2.pngdlbc_2_heatmap0.pngdlbc_2_heatmap1.pngdlbc_2_heatmap2.png

ESCA (Esophageal carcinoma) 食道がん

esca_0_heatmap0.pngesca_0_heatmap1.pngesca_0_heatmap2.pngesca_2_heatmap0.pngesca_2_heatmap1.pngesca_2_heatmap2.png

GBM (Glioblastoma multiforme) 膠芽腫

gbm_0_heatmap0.pnggbm_0_heatmap1.pnggbm_0_heatmap2.pnggbm_2_heatmap0.pnggbm_2_heatmap1.pnggbm_2_heatmap2.png

HNSC (Head and Neck squamous cell carcinoma) 頭頚部がん

hnsc_0_heatmap0.pnghnsc_0_heatmap1.pnghnsc_0_heatmap2.pnghnsc_2_heatmap0.pnghnsc_2_heatmap1.pnghnsc_2_heatmap2.png

KICH (Kidney Chromophobe)

kich_0_heatmap0.pngkich_0_heatmap1.pngkich_0_heatmap2.pngkich_2_heatmap0.pngkich_2_heatmap1.pngkich_2_heatmap2.png

KIRC (Kidney renal clear cell carcinoma)

kirc_0_heatmap0.pngkirc_0_heatmap1.pngkirc_0_heatmap2.pngkirc_2_heatmap0.pngkirc_2_heatmap1.pngkirc_2_heatmap2.png

KIRP (Kidney renal papillary cell carcinoma)

kirp_0_heatmap0.pngkirp_0_heatmap1.pngkirp_0_heatmap2.pngkirp_2_heatmap0.pngkirp_2_heatmap1.pngkirp_2_heatmap2.png

LAML (Acute Myeloid Leukemia) 急性骨髄性白血病

laml_0_heatmap0.pnglaml_0_heatmap1.pnglaml_0_heatmap2.png
laml_2_heatmap0.pnglaml_2_heatmap1.pnglaml_2_heatmap2.png

LGG (Lower Grade Glioma) 神経膠腫

lgg_0_heatmap0.pnglgg_0_heatmap1.pnglgg_0_heatmap2.pnglgg_2_heatmap0.pnglgg_2_heatmap1.pnglgg_2_heatmap2.png

LIHC (Liver hepatocellular carcinoma) 肝臓がん

lihc_0_heatmap0.pnglihc_0_heatmap1.pnglihc_0_heatmap2.pnglihc_2_heatmap0.pnglihc_2_heatmap1.pnglihc_2_heatmap2.png

LUAD (Lung adenocarcinoma) 肺腺がん

luad_0_heatmap0.pngluad_0_heatmap1.pngluad_0_heatmap2.pngluad_2_heatmap0.pngluad_2_heatmap1.pngluad_2_heatmap2.png

LUSC (Lung squamous cell carcinoma) 肺扁平上皮がん

lusc_0_heatmap0.pnglusc_0_heatmap1.pnglusc_0_heatmap2.pnglusc_2_heatmap0.pnglusc_2_heatmap1.pnglusc_2_heatmap2.png

MESO (Mesothelioma) 中皮腫

meso_0_heatmap0.pngmeso_0_heatmap1.pngmeso_0_heatmap2.pngmeso_2_heatmap0.pngmeso_2_heatmap1.pngmeso_2_heatmap2.png

OV (Ovarian serous cystadenocarcinoma) 卵巣漿液性のう胞腺腫

ov_0_heatmap0.pngov_0_heatmap1.pngov_0_heatmap2.pngov_2_heatmap0.pngov_2_heatmap1.pngov_2_heatmap2.png

PAAD (Pancreatic adenocarcinoma) 膵臓がん

paad_0_heatmap0.pngpaad_0_heatmap1.pngpaad_0_heatmap2.pngpaad_2_heatmap0.pngpaad_2_heatmap1.pngpaad_2_heatmap2.png

PCPG (Pheochromocytoma and Paraganglioma) 褐色細胞腫 傍神経節腫

pcpg_0_heatmap0.pngpcpg_0_heatmap1.pngpcpg_0_heatmap2.pngpcpg_2_heatmap0.pngpcpg_2_heatmap1.pngpcpg_2_heatmap2.png

PRAD (Prostate adenocarcinoma) 前立腺がん

prad_0_heatmap0.pngprad_0_heatmap1.pngprad_0_heatmap2.pngprad_2_heatmap0.pngprad_2_heatmap1.pngprad_2_heatmap2.png

SARC (Sarcoma) 肉腫

sarc_0_heatmap0.pngsarc_0_heatmap1.pngsarc_0_heatmap2.pngsarc_2_heatmap0.pngsarc_2_heatmap1.pngsarc_2_heatmap2.png

SKCM (Skin Cutaneous Melanoma) 悪性黒色腫

skcm_0_heatmap0.pngskcm_0_heatmap1.pngskcm_0_heatmap2.pngskcm_2_heatmap0.pngskcm_2_heatmap1.pngskcm_2_heatmap2.png

STAD (Stomach adenocarcinoma) 胃がん

stad_0_heatmap0.pngstad_0_heatmap1.pngstad_0_heatmap2.pngstad_2_heatmap0.pngstad_2_heatmap1.pngstad_2_heatmap2.png

TGCT (Testicular Germ Cell Tumors) 精巣がん

tgct_0_heatmap0.pngtgct_0_heatmap1.pngtgct_0_heatmap2.pngtgct_2_heatmap0.pngtgct_2_heatmap1.pngtgct_2_heatmap2.png

THCA (Thyroid carcinoma) 甲状腺がん

thca_0_heatmap0.pngthca_0_heatmap1.pngthca_0_heatmap2.pngthca_2_heatmap0.pngthca_2_heatmap1.pngthca_2_heatmap2.png

THYM (Thymoma) 胸腺腫

thym_0_heatmap0.pngthym_0_heatmap1.pngthym_0_heatmap2.pngthym_2_heatmap0.pngthym_2_heatmap1.pngthym_2_heatmap2.png

UCEC (Uterine Corpus Endometrial Carcinoma) 子宮体がん

ucec_0_heatmap0.pngucec_0_heatmap1.pngucec_0_heatmap2.pngucec_2_heatmap0.pngucec_2_heatmap1.pngucec_2_heatmap2.png

UCS (Uterine Carcinosarcoma) 子宮肉腫

ucs_0_heatmap0.pngucs_0_heatmap1.pngucs_0_heatmap2.pngucs_2_heatmap0.pngucs_2_heatmap1.pngucs_2_heatmap2.png

UVM (Uveal Melanoma) ぶどう膜黒色腫

uvm_0_heatmap0.pnguvm_0_heatmap1.pnguvm_0_heatmap2.pnguvm_2_heatmap0.pnguvm_2_heatmap1.pnguvm_2_heatmap2.png

おまけ1 機械学習について

image.png

みたいなことをみんな考えているんじゃないでしょうか。知らんけど。

新NP問題つよい!

おまけ2 cBioPortalのGoogleSummerOfCode

cBioPortalでは学生さんがコードを書くGoogleSummerOfCodeをやっています。パスウェイのどこが亢進しているのかみたり、SparkやParquetとの連携をしようとしているようです。

image.png

画像の出典:https://twitter.com/cbioportal/status/1167531397134897153

おまけ3 cBioPortalはインスタンスの調査をしているようです

下記のツイッター画像にあるように、cBioPortalでは、世界のどこでローカルインスタンスを使っているか、アンケート調査を行っています。日本でcBioPortalのインスタンスを立ち上げたことがある人は、ぜひアンケートに協力してあげてください。7月17日の時点では日本が空白になっています。

image.png

この記事は以上です。ふう。
ここまでスクロールしてくれた人がいたらありがとうございました。

15
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
16