{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Analyze Melanoma Patient 78\n", "\n", "Here we perform analysis on the gene expressions of cells from the melanoma patient number 78. \n", "For simplicity we have converted the dataset into TPM.\n", "The original count data is available at Gene Expression Omnibus: [GSE72056](https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE72056)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Import necessary packages" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 1" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import sys\n", "\n", "import pandas as pd\n", "import numpy as np\n", "import pickle as pkl\n", "import sklearn as skl\n", "import sklearn.preprocessing\n", "import scipy.stats\n", "\n", "import matplotlib as mpl\n", "\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Warning information from TensorFlow may occur. It doesn't matter." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/shaoheng/.conda/envs/tensorflow-gpu/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", " from ._conv import register_converters as _register_converters\n" ] } ], "source": [ "import tensorflow as tf\n", "tf.set_random_seed(1)\n", "import cyclum\n", "from cyclum import writer" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "input_file_mask = 'data/melanoma/M78_tumor'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Read data\n", "We do not have cell-cycle labels for the cells any more." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def preprocess(input_file_mask):\n", " \"\"\"\n", " Read in data and perform log transform (log2(x+1)), centering (mean = 1) and scaling (sd = 1).\n", " \"\"\"\n", " sttpm = writer.read_df_from_binary(input_file_mask)\n", "\n", " label = pd.read_csv(input_file_mask + '-label.csv', sep=\"\\t\", index_col=0)\n", " return sttpm, label\n", "\n", "sttpm, label = preprocess(input_file_mask)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There is no convention whether cells should be columns or rows. Here we require cells to be rows." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
C9orf152RPS11ELMO2CREB3L1PNMA1MMP2TMEM216TRAF3IP2-AS1LRRC37A5PLOC653712...GPLD1SNORD115-39RAB8ARXFP2PCIF1PIK3IP1SNRPD2SLC39A6CTSCAQP7
cy78-CD45-neg-1-B04-S496-comb-0.1018470.0078920.9049870.00.9409640.3623641.468877-0.7941590.0-0.137973...-0.4432190.0-0.001803-0.087706-1.0998780.1242450.0691670.333042-0.390829-0.133081
cy78-CD45-neg-3-H06-S762-comb-0.101847-0.2020880.8754850.01.2280292.0595691.475918-0.4335420.0-0.137973...0.0746140.00.658312-0.0877060.7954600.8657450.4302930.688241-0.973564-0.133081
cy78-CD45-neg-1-D07-S523-comb-0.1018470.048798-0.0449180.00.092909-0.6936641.148125-0.3618020.0-0.137973...-0.9395990.00.951421-0.0877060.263022-0.5084760.5592350.1169200.332409-0.133081
cy78-CD45-neg-3-D01-S709-comb-0.1018470.025618-1.0464330.00.457558-0.6936641.070903-0.2064730.0-0.137973...-0.4322140.01.198078-0.0877061.066057-0.5084760.9201720.153443-1.072105-0.133081
cy78-CD45-neg-2-B08-S596-comb-0.1018470.1436241.4123620.00.253140-0.693664-0.583134-1.2031330.0-0.137973...1.6982510.00.974617-0.087706-0.5218850.187822-0.1668060.687519-0.361164-0.133081
\n", "

5 rows × 23686 columns

\n", "
" ], "text/plain": [ " C9orf152 RPS11 ELMO2 CREB3L1 \\\n", "cy78-CD45-neg-1-B04-S496-comb -0.101847 0.007892 0.904987 0.0 \n", "cy78-CD45-neg-3-H06-S762-comb -0.101847 -0.202088 0.875485 0.0 \n", "cy78-CD45-neg-1-D07-S523-comb -0.101847 0.048798 -0.044918 0.0 \n", "cy78-CD45-neg-3-D01-S709-comb -0.101847 0.025618 -1.046433 0.0 \n", "cy78-CD45-neg-2-B08-S596-comb -0.101847 0.143624 1.412362 0.0 \n", "\n", " PNMA1 MMP2 TMEM216 TRAF3IP2-AS1 \\\n", "cy78-CD45-neg-1-B04-S496-comb 0.940964 0.362364 1.468877 -0.794159 \n", "cy78-CD45-neg-3-H06-S762-comb 1.228029 2.059569 1.475918 -0.433542 \n", "cy78-CD45-neg-1-D07-S523-comb 0.092909 -0.693664 1.148125 -0.361802 \n", "cy78-CD45-neg-3-D01-S709-comb 0.457558 -0.693664 1.070903 -0.206473 \n", "cy78-CD45-neg-2-B08-S596-comb 0.253140 -0.693664 -0.583134 -1.203133 \n", "\n", " LRRC37A5P LOC653712 ... GPLD1 \\\n", "cy78-CD45-neg-1-B04-S496-comb 0.0 -0.137973 ... -0.443219 \n", "cy78-CD45-neg-3-H06-S762-comb 0.0 -0.137973 ... 0.074614 \n", "cy78-CD45-neg-1-D07-S523-comb 0.0 -0.137973 ... -0.939599 \n", "cy78-CD45-neg-3-D01-S709-comb 0.0 -0.137973 ... -0.432214 \n", "cy78-CD45-neg-2-B08-S596-comb 0.0 -0.137973 ... 1.698251 \n", "\n", " SNORD115-39 RAB8A RXFP2 PCIF1 \\\n", "cy78-CD45-neg-1-B04-S496-comb 0.0 -0.001803 -0.087706 -1.099878 \n", "cy78-CD45-neg-3-H06-S762-comb 0.0 0.658312 -0.087706 0.795460 \n", "cy78-CD45-neg-1-D07-S523-comb 0.0 0.951421 -0.087706 0.263022 \n", "cy78-CD45-neg-3-D01-S709-comb 0.0 1.198078 -0.087706 1.066057 \n", "cy78-CD45-neg-2-B08-S596-comb 0.0 0.974617 -0.087706 -0.521885 \n", "\n", " PIK3IP1 SNRPD2 SLC39A6 CTSC \\\n", "cy78-CD45-neg-1-B04-S496-comb 0.124245 0.069167 0.333042 -0.390829 \n", "cy78-CD45-neg-3-H06-S762-comb 0.865745 0.430293 0.688241 -0.973564 \n", "cy78-CD45-neg-1-D07-S523-comb -0.508476 0.559235 0.116920 0.332409 \n", "cy78-CD45-neg-3-D01-S709-comb -0.508476 0.920172 0.153443 -1.072105 \n", "cy78-CD45-neg-2-B08-S596-comb 0.187822 -0.166806 0.687519 -0.361164 \n", "\n", " AQP7 \n", "cy78-CD45-neg-1-B04-S496-comb -0.133081 \n", "cy78-CD45-neg-3-H06-S762-comb -0.133081 \n", "cy78-CD45-neg-1-D07-S523-comb -0.133081 \n", "cy78-CD45-neg-3-D01-S709-comb -0.133081 \n", "cy78-CD45-neg-2-B08-S596-comb -0.133081 \n", "\n", "[5 rows x 23686 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sttpm.head()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
tumormalignant(1=no,2=yes,0=unresolved)non-malignant cell type (1=T,2=B,3=Macro.4=Endo.,5=CAF;6=NK)
cy78-CD45-neg-1-B04-S496-comb7820
cy78-CD45-neg-3-H06-S762-comb7820
cy78-CD45-neg-1-D07-S523-comb7820
cy78-CD45-neg-3-D01-S709-comb7820
cy78-CD45-neg-2-B08-S596-comb7820
\n", "
" ], "text/plain": [ " tumor malignant(1=no,2=yes,0=unresolved) \\\n", "cy78-CD45-neg-1-B04-S496-comb 78 2 \n", "cy78-CD45-neg-3-H06-S762-comb 78 2 \n", "cy78-CD45-neg-1-D07-S523-comb 78 2 \n", "cy78-CD45-neg-3-D01-S709-comb 78 2 \n", "cy78-CD45-neg-2-B08-S596-comb 78 2 \n", "\n", " non-malignant cell type (1=T,2=B,3=Macro.4=Endo.,5=CAF;6=NK) \n", "cy78-CD45-neg-1-B04-S496-comb 0 \n", "cy78-CD45-neg-3-H06-S762-comb 0 \n", "cy78-CD45-neg-1-D07-S523-comb 0 \n", "cy78-CD45-neg-3-D01-S709-comb 0 \n", "cy78-CD45-neg-2-B08-S596-comb 0 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "label.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Set up the model and fit the model\n", "\n", "Fitting the model may take some time. Using a GTX 960M GPU it takes 6 minutes." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "model = cyclum.PreloadCyclum(sttpm.values, q_circular=3, q_linear=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pretrain burnin\n", "step 2000: loss [0.49333668, 27318.037, 75596.17] time 5.09\n", "pretrain train\n", "step 2000: loss [0.49329627, 27318.31, 75596.17] time 3.80\n", "step 4000: loss [0.49329615, 27318.295, 75596.18] time 3.35\n", "midtrain burnin\n", "step 2000: loss [0.49329615, 9224.356, 39934.965] time 9.69\n", "midtrain train\n", "step 2000: loss [0.49329615, 9224.358, 39934.953] time 9.60\n", "step 4000: loss [0.49329615, 9224.36, 39934.95] time 8.79\n", "finaltrain train\n", "step 2000: loss [0.5430872, 9208.43, 22069.293] time 12.77\n", "step 4000: loss [0.5481686, 9208.404, 11894.999] time 11.64\n", "step 6000: loss [0.55096513, 9208.468, 6089.2246] time 11.65\n", "finaltrain refine\n", "step 2000: loss [0.5542275, 9208.411, 4898.9956] time 12.75\n", "step 4000: loss [0.5545521, 9208.403, 3995.3237] time 11.62\n", "step 6000: loss [0.5546467, 9208.404, 3257.5784] time 11.63\n", "step 8000: loss [0.5548571, 9208.413, 2659.4236] time 11.62\n", "step 10000: loss [0.5553257, 9208.426, 2173.033] time 11.63\n", "Full time 135.76\n" ] } ], "source": [ "pseudotime, rotation = model.fit()\n", "model.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Illustrations\n", "We illustrate the results on a circle, to show its circular nature. \n", "There is virtually no start and end of the circle.\n", "Red, green and blue represents G0/G1, S and G2/M phase respectively.\n", "The inner lines represents single cells. The cells spread across the\n", "The areas outside" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "%aimport cyclum.illustration" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "color_map = {'tumor': {78: \"red\"},}\n", "cyclum.illustration.plot_round_distr_color(pseudotime, label['tumor'], color_map['tumor'])\n", "pass" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "sttpm2 = sttpm - np.concatenate([np.cos(pseudotime + i * 2 * np.pi / 3) for i in range(3)], axis=1) @ rotation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Propose genes\n", "We show the top 20 proposed gene here." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "UGDH-AS1\n", "NME1\n", "LOC100131257\n", "FBLIM1\n", "ORC4\n", "ATP5G3\n", "MAB21L3\n", "ABCC9\n", "FABP5\n", "C1QBP\n", "LSM10\n", "REXO1L1\n", "ATP5G1\n", "TOMM5\n", "NDUFA8\n", "TLCD2\n", "S100A11\n", "COX6C\n", "LOC646214\n" ] } ], "source": [ "weight = np.sqrt((rotation[0, ] - rotation[1, ] / 2 - rotation[2, ] / 2) ** 2 + \n", " 3 * (rotation[1, ] - rotation[2, ]) ** 2 / 4 + 1e-12)\n", "order = list(reversed(np.argsort(weight)))\n", "for i in order[1:20]:\n", " print(sttpm.columns.tolist()[i])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## AXL/MITF program\n", "We show that cyclum helps clarify AXL/MITF contrast." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "with open('data/melanoma/AXL_marker_genes.txt') as file:\n", " axl_genes = file.read().splitlines()\n", "with open('data/melanoma/MITF_marker_genes.txt') as file:\n", " mitf_genes = file.read().splitlines()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Corrected data\n", "The corrected data follows a better negative correlation." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "sttpm3 = sttpm2[label['malignant(1=no,2=yes,0=unresolved)'] == 2]" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1. , -0.23826302],\n", " [-0.23826302, 1. ]])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "axl_score = sttpm3[axl_genes].mean(axis=1) - sttpm3.mean(axis=1)\n", "mitf_score = sttpm3[mitf_genes].mean(axis=1) - sttpm3.mean(axis=1)\n", "plt.scatter(axl_score, mitf_score)\n", "np.corrcoef(axl_score, mitf_score)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Original data" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1. , 0.23976131],\n", " [0.23976131, 1. ]])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sttpm4 = sttpm[label['malignant(1=no,2=yes,0=unresolved)'] == 2]\n", "axl_score = sttpm4[axl_genes].mean(axis=1) - sttpm4.mean(axis=1)\n", "mitf_score = sttpm4[mitf_genes].mean(axis=1) - sttpm4.mean(axis=1)\n", "plt.scatter(axl_score, mitf_score)\n", "np.corrcoef(axl_score, mitf_score)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.8" } }, "nbformat": 4, "nbformat_minor": 1 }