{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# mESC analysis using the object oriented core\n", "\n", "We redesigned the core of Cyclum to a more friendly object oriented core. The core is still under active development, but the major functions are already functional.\n", "\n", "We still use the mESC dataset. For simplicity we have converted the dataset into TPM.\n", "The original count data is available at ArrayExpress: [E-MTAB-2805](https://www.ebi.ac.uk/arrayexpress/experiments/E-MTAB-2805/). Tools to transform data are also provided and explained in the following sections." ] }, { "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", "\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": true }, "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 cyclum\n", "from cyclum import writer" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "input_file_mask = 'data/mESC/mesc-tpm'\n", "output_file_mask = './results/mESC_original/mesc-tpm'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Read data\n", "Here we have label, so we load both. However, the label is not used until evaluation." ] }, { "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", " tpm = writer.read_df_from_binary(input_file_mask).T\n", " sttpm = pd.DataFrame(data=skl.preprocessing.scale(np.log2(tpm.values + 1)), index=tpm.index, columns=tpm.columns)\n", " \n", " label = pd.read_csv(input_file_mask + '-label.txt', sep=\"\\t\", index_col=0).T\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", "
Gnai3PbsnCdc45H19Scml2ApohNarfCav2Klf6Scmh1...RP23-345J21.2AC121960.1AC136147.1AC122013.1AC132389.1Gm11392AC160109.2AC154675.1AC156980.1RP23-429I18.1
G1_cell1_count-0.411123-0.059028-0.0994165.385822-0.6912190.0-0.690715-0.059028-1.051909-0.350978...-0.1467220.0-0.079577-0.374972-0.824399-0.059028-0.0798610.0-0.1448430.090295
G1_cell2_count-0.180800-0.0590280.777223-0.165725-0.8202060.00.362341-0.0590281.4588810.207421...-0.1467220.0-0.079577-0.374972-0.824399-0.059028-0.0798610.0-0.144843-1.271033
G1_cell3_count-1.409101-0.059028-1.218187-0.165725-0.8202060.0-0.690715-0.059028-1.271394-0.657735...2.5933490.0-0.079577-0.374972-0.592938-0.059028-0.0798610.0-0.144843-1.271033
G1_cell4_count-1.867558-0.0590280.923695-0.165725-0.8202060.00.903266-0.0590281.430708-0.657735...-0.1467220.0-0.079577-0.3749722.938898-0.059028-0.0798610.0-0.144843-1.271033
G1_cell5_count-1.646290-0.0590280.001887-0.165725-0.8202060.0-0.690715-0.059028-0.811233-0.657735...-0.1467220.0-0.079577-0.374972-0.824399-0.059028-0.0798610.0-0.144843-0.111558
\n", "

5 rows × 38293 columns

\n", "
" ], "text/plain": [ " Gnai3 Pbsn Cdc45 H19 Scml2 Apoh \\\n", "G1_cell1_count -0.411123 -0.059028 -0.099416 5.385822 -0.691219 0.0 \n", "G1_cell2_count -0.180800 -0.059028 0.777223 -0.165725 -0.820206 0.0 \n", "G1_cell3_count -1.409101 -0.059028 -1.218187 -0.165725 -0.820206 0.0 \n", "G1_cell4_count -1.867558 -0.059028 0.923695 -0.165725 -0.820206 0.0 \n", "G1_cell5_count -1.646290 -0.059028 0.001887 -0.165725 -0.820206 0.0 \n", "\n", " Narf Cav2 Klf6 Scmh1 ... \\\n", "G1_cell1_count -0.690715 -0.059028 -1.051909 -0.350978 ... \n", "G1_cell2_count 0.362341 -0.059028 1.458881 0.207421 ... \n", "G1_cell3_count -0.690715 -0.059028 -1.271394 -0.657735 ... \n", "G1_cell4_count 0.903266 -0.059028 1.430708 -0.657735 ... \n", "G1_cell5_count -0.690715 -0.059028 -0.811233 -0.657735 ... \n", "\n", " RP23-345J21.2 AC121960.1 AC136147.1 AC122013.1 AC132389.1 \\\n", "G1_cell1_count -0.146722 0.0 -0.079577 -0.374972 -0.824399 \n", "G1_cell2_count -0.146722 0.0 -0.079577 -0.374972 -0.824399 \n", "G1_cell3_count 2.593349 0.0 -0.079577 -0.374972 -0.592938 \n", "G1_cell4_count -0.146722 0.0 -0.079577 -0.374972 2.938898 \n", "G1_cell5_count -0.146722 0.0 -0.079577 -0.374972 -0.824399 \n", "\n", " Gm11392 AC160109.2 AC154675.1 AC156980.1 RP23-429I18.1 \n", "G1_cell1_count -0.059028 -0.079861 0.0 -0.144843 0.090295 \n", "G1_cell2_count -0.059028 -0.079861 0.0 -0.144843 -1.271033 \n", "G1_cell3_count -0.059028 -0.079861 0.0 -0.144843 -1.271033 \n", "G1_cell4_count -0.059028 -0.079861 0.0 -0.144843 -1.271033 \n", "G1_cell5_count -0.059028 -0.079861 0.0 -0.144843 -0.111558 \n", "\n", "[5 rows x 38293 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", "
stage
G1_cell1_countg0/g1
G1_cell2_countg0/g1
G1_cell3_countg0/g1
G1_cell4_countg0/g1
G1_cell5_countg0/g1
\n", "
" ], "text/plain": [ " stage\n", "G1_cell1_count g0/g1\n", "G1_cell2_count g0/g1\n", "G1_cell3_count g0/g1\n", "G1_cell4_count g0/g1\n", "G1_cell5_count g0/g1" ] }, "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": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\n", "\n", "\n" ] } ], "source": [ "model = cyclum.core.PreloadCyclum2(sttpm.values)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tensor(\"concat:0\", shape=(288, 2), dtype=float32)\n", "pretrain burnin\n", "step 2000: loss [0.14480928, 1947598.0, 124534.39] time 11.15\n", "pretrain train\n", "step 2000: loss [0.14479513, 1947596.6, 124534.4] time 9.49\n", "step 4000: loss [0.14479521, 1947596.6, 124534.4] time 8.00\n", "midtrain burnin\n", "step 2000: loss [0.14479521, 13710.437, 65734.66] time 31.36\n", "midtrain train\n", "step 2000: loss [0.14479521, 13699.954, 65734.64] time 31.18\n", "step 4000: loss [0.14479521, 13699.952, 65734.64] time 28.92\n", "finaltrain train\n", "step 2000: loss [0.16983634, 12900.013, 35861.742] time 41.48\n", "step 4000: loss [0.1932417, 12898.72, 19201.01] time 38.23\n", "step 6000: loss [0.23846658, 12895.566, 9758.232] time 38.25\n", "finaltrain refine\n", "step 2000: loss [0.24100712, 12895.478, 7821.967] time 41.76\n", "step 4000: loss [0.24099027, 12895.481, 6303.455] time 38.24\n", "step 6000: loss [0.2427861, 12895.437, 5069.4487] time 38.28\n", "step 8000: loss [0.24300408, 12895.437, 4060.3792] time 38.33\n", "step 10000: loss [0.24350564, 12895.429, 3236.5916] time 38.46\n", "Full time 434.95\n" ] } ], "source": [ "pseudotime, rotation = model.train()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([[-1.88080478e+00, 1.49268208e+01],\n", " [-1.83068943e+00, 1.00451288e+01],\n", " [-2.14693308e+00, -5.19374895e+00],\n", " [-1.60541892e+00, 3.00833664e+01],\n", " [-1.53314245e+00, 3.14072437e+01],\n", " [-3.00005198e+00, -9.08647537e+00],\n", " [-2.02047205e+00, 1.37519932e+00],\n", " [-2.00901365e+00, -9.53592873e+00],\n", " [-2.04460120e+00, -2.01704903e+01],\n", " [ 3.26236892e+00, -1.19897280e+01],\n", " [-2.33301997e+00, -1.12434793e+00],\n", " [-1.74189258e+00, 1.70298977e+01],\n", " [-2.72788811e+00, -2.45228367e+01],\n", " [-2.22418714e+00, 4.85666752e+00],\n", " [-2.47167468e+00, -1.69890137e+01],\n", " [-1.50875592e+00, -1.76704292e+01],\n", " [-2.72318149e+00, -1.71104374e+01],\n", " [-1.43556404e+00, 1.57713480e+01],\n", " [-1.99151707e+00, -6.32707071e+00],\n", " [-1.83119965e+00, -5.77868700e-01],\n", " [ 2.75630283e+00, -3.04834576e+01],\n", " [-2.53520846e+00, -2.34312592e+01],\n", " [-1.20479560e+00, -1.23832312e+01],\n", " [ 2.54360294e+00, -2.38925457e+01],\n", " [ 3.54959989e+00, -1.67263813e+01],\n", " [-2.55432010e+00, -1.09909945e+01],\n", " [-2.28106904e+00, -1.11520720e+01],\n", " [-2.08780193e+00, 1.29073153e+01],\n", " [-1.68445683e+00, 2.83493404e+01],\n", " [ 3.09858608e+00, -2.53242912e+01],\n", " [-1.62355447e+00, 3.43955650e+01],\n", " [-2.45936823e+00, -1.67793026e+01],\n", " [-1.68709314e+00, 1.79854164e+01],\n", " [ 2.63582134e+00, -3.60437508e+01],\n", " [-1.77448249e+00, 2.40024681e+01],\n", " [-2.63495111e+00, -3.13200054e+01],\n", " [ 3.23755217e+00, -3.97203660e+00],\n", " [-2.22011375e+00, 1.53145921e+00],\n", " [-1.34875369e+00, 1.63471756e+01],\n", " [-1.97678757e+00, 1.91151981e+01],\n", " [-1.84385562e+00, 4.76742363e+00],\n", " [ 2.90569687e+00, -2.40276814e+01],\n", " [ 3.70491648e+00, -1.86204300e+01],\n", " [-1.98422003e+00, 6.79649687e+00],\n", " [-1.84352350e+00, 7.47265625e+00],\n", " [-1.49645114e+00, 1.16939936e+01],\n", " [-1.92099762e+00, 6.22199631e+00],\n", " [-1.96539354e+00, 1.82147102e+01],\n", " [-2.06275940e+00, -4.28217602e+00],\n", " [-1.52672315e+00, 2.90875053e+01],\n", " [-1.51863694e+00, -5.79061270e+00],\n", " [-1.91972208e+00, 1.31791267e+01],\n", " [-1.61372554e+00, 1.92629776e+01],\n", " [-1.76490915e+00, -1.38271546e+00],\n", " [-1.90742517e+00, 9.87796021e+00],\n", " [ 1.08639944e+00, 4.73347712e+00],\n", " [-2.11983824e+00, 7.25509596e+00],\n", " [-1.81208313e+00, 1.99739571e+01],\n", " [-2.09524798e+00, 1.25406828e+01],\n", " [-1.28012872e+00, -7.78396034e+00],\n", " [-1.78499365e+00, 1.80988903e+01],\n", " [-2.67990685e+00, -2.83074017e+01],\n", " [ 2.15729189e+00, -1.86907997e+01],\n", " [-2.11775875e+00, -1.89147830e+00],\n", " [-1.66387141e+00, 1.45372581e+01],\n", " [-1.46519804e+00, -1.04516888e+01],\n", " [-2.15873170e+00, -2.68910003e+00],\n", " [ 3.29766583e+00, -2.38496780e+01],\n", " [ 3.79412389e+00, -3.60418701e+00],\n", " [-2.85797566e-01, -2.28351002e+01],\n", " [-1.43342328e+00, 2.42385387e+01],\n", " [ 2.82953978e+00, -3.05958214e+01],\n", " [-1.58059835e+00, -1.40234623e+01],\n", " [ 2.25121188e+00, -3.48759079e+01],\n", " [ 3.56804991e+00, -2.65376968e+01],\n", " [-2.28769398e+00, 6.59906626e+00],\n", " [-7.18054295e-01, -2.15657806e+01],\n", " [-1.73021936e+00, 1.09718809e+01],\n", " [-1.66856742e+00, -1.17320943e+00],\n", " [-4.54792380e-02, -2.46505032e+01],\n", " [-2.05575514e+00, -4.86828804e+00],\n", " [-2.15269518e+00, -2.46980000e+00],\n", " [-1.97208071e+00, -1.32806664e+01],\n", " [-1.75763011e+00, 6.67824745e+00],\n", " [-1.24671364e+00, -6.95690393e-01],\n", " [-1.83129740e+00, -1.64976823e+00],\n", " [-2.51052785e+00, -2.49853668e+01],\n", " [ 1.81519914e+00, 1.56697510e+02],\n", " [ 2.00044703e+00, -3.10828743e+01],\n", " [ 7.66532063e-01, -2.16776257e+01],\n", " [ 2.61384773e+00, -3.57581329e+01],\n", " [-1.99795341e+00, 1.18810332e+00],\n", " [-2.19437122e+00, -1.31428518e+01],\n", " [-4.88943666e-01, -6.84517622e+00],\n", " [-4.51790124e-01, -1.13126841e+01],\n", " [ 3.14263725e+00, -1.94762135e+01],\n", " [-7.81330824e-01, 3.18693905e+01],\n", " [ 3.72471958e-01, -5.74041080e+00],\n", " [ 7.95454741e-01, -1.34811754e+01],\n", " [-6.81833982e-01, 4.24557877e+01],\n", " [ 5.14007688e-01, -2.30169964e+01],\n", " [-9.74253297e-01, 3.25443687e+01],\n", " [ 1.46137774e-02, -1.71452103e+01],\n", " [ 7.86510587e-01, -2.80469398e+01],\n", " [ 5.26935458e-01, -6.75344372e+00],\n", " [ 6.08552456e-01, -1.96278992e+01],\n", " [ 5.41990757e-01, -1.03533869e+01],\n", " [ 1.10072279e+00, -2.99213352e+01],\n", " [ 1.13791227e+00, -2.02997417e+01],\n", " [ 5.46540976e-01, -7.72393227e+00],\n", " [ 1.04997969e+00, -2.42958565e+01],\n", " [-2.32939988e-01, 1.24658203e+01],\n", " [ 7.76328564e-01, -1.91249046e+01],\n", " [-5.10520101e-01, -2.13935113e+00],\n", " [ 8.97438169e-01, -2.48660774e+01],\n", " [ 5.29081345e-01, -2.70399380e+01],\n", " [ 5.36990225e-01, -1.28023043e+01],\n", " [-1.06004715e+00, 3.26832123e+01],\n", " [ 3.44303340e-01, -2.26595745e+01],\n", " [ 1.78393054e+00, -3.12572689e+01],\n", " [ 5.51237822e-01, -5.87905979e+00],\n", " [-1.13741446e+00, 3.94306755e+01],\n", " [-1.09089911e+00, 6.26520061e+00],\n", " [ 7.74762630e-01, -1.85526810e+01],\n", " [-3.58483166e-01, 1.22616215e+01],\n", " [-1.09127927e+00, 3.48706131e+01],\n", " [-8.35039854e-01, 2.95066624e+01],\n", " [ 8.67719412e-01, -2.83200855e+01],\n", " [-2.09794849e-01, -1.41811161e+01],\n", " [ 1.06433225e+00, -2.79621143e+01],\n", " [-8.21636319e-01, -1.07993898e+01],\n", " [ 3.28861088e-01, -2.28642511e+00],\n", " [-3.29822242e-01, -9.23649502e+00],\n", " [ 8.25832486e-01, -1.32783060e+01],\n", " [-3.86663526e-01, -9.63309333e-02],\n", " [ 4.17242885e-01, -1.12792873e+01],\n", " [ 3.79645318e-01, -9.07922459e+00],\n", " [ 6.12021983e-02, -3.68483210e+00],\n", " [ 5.09337783e-02, -6.83753443e+00],\n", " [-8.35998058e-02, -1.18566189e+01],\n", " [ 4.49770302e-01, -1.10087357e+01],\n", " [-3.23384374e-01, 7.85648251e+00],\n", " [-1.24399638e+00, 4.50859213e+00],\n", " [ 5.81491661e+00, -1.21675730e+01],\n", " [ 4.80097145e-01, -8.60607624e+00],\n", " [-6.39191031e-01, -3.38796926e+00],\n", " [ 4.40801412e-01, -1.25775585e+01],\n", " [ 2.90843457e-01, -8.88970470e+00],\n", " [ 3.27654630e-01, -1.47641964e+01],\n", " [-1.03414446e-01, -5.12129307e-01],\n", " [ 5.93684196e-01, -5.24291563e+00],\n", " [ 6.22451425e-01, -1.09915743e+01],\n", " [ 8.99125636e-02, -6.61691332e+00],\n", " [-1.16708326e+00, -8.83444977e+00],\n", " [-5.94261646e-01, 6.18247557e+00],\n", " [ 4.51473743e-01, -2.36777706e+01],\n", " [-8.77194166e-01, -1.08329945e+01],\n", " [ 1.46868736e-01, -9.44843102e+00],\n", " [ 2.30497897e-01, -9.96028042e+00],\n", " [-8.74585986e-01, 1.91990414e+01],\n", " [ 3.68390441e-01, -1.06521368e+01],\n", " [ 8.37905169e-01, -1.98295097e+01],\n", " [-8.31497669e-01, 3.36677513e+01],\n", " [-1.37950182e-01, -1.94550381e+01],\n", " [ 2.25027502e-02, -7.99194670e+00],\n", " [-1.03092706e+00, 2.96240578e+01],\n", " [ 1.59772009e-01, -1.91067314e+01],\n", " [ 2.28214407e+00, -3.49879112e+01],\n", " [ 7.89140940e-01, -2.52394218e+01],\n", " [-1.22091055e-01, -7.71836758e+00],\n", " [ 1.34536058e-01, -1.14051886e+01],\n", " [-1.98526770e-01, -3.64126062e+00],\n", " [-1.56965494e-01, 1.18828058e+01],\n", " [ 3.35113436e-01, -5.33939648e+00],\n", " [ 5.41561007e-01, -1.44523783e+01],\n", " [-9.96852815e-02, -4.07140589e+00],\n", " [ 8.91364098e-01, -2.65831661e+01],\n", " [-8.40695739e-01, 3.96968155e+01],\n", " [-2.92037815e-01, -2.12753606e+00],\n", " [ 9.04862404e-01, -2.71385250e+01],\n", " [-3.66110802e-02, -1.48365536e+01],\n", " [-1.10810733e+00, -1.24938011e+01],\n", " [ 9.75080013e-01, -1.68421402e+01],\n", " [ 6.08522534e-01, -1.21821375e+01],\n", " [ 8.17227840e-01, -1.73037090e+01],\n", " [-1.02403730e-01, -9.79152143e-01],\n", " [ 6.49303794e-01, -2.57489128e+01],\n", " [ 5.69854617e-01, -1.45891619e+01],\n", " [ 1.25029325e+00, -2.04991188e+01],\n", " [ 2.51113504e-01, -7.81974494e-01],\n", " [-3.41136962e-01, 1.40259695e+01],\n", " [ 2.03663993e+00, -1.62686539e+01],\n", " [ 1.81519914e+00, 2.18433350e+02],\n", " [ 1.51362944e+00, -2.24570751e+01],\n", " [-3.66690803e+00, -7.74798584e+00],\n", " [ 1.74248338e+00, -1.70989418e+01],\n", " [ 1.81519914e+00, 2.16595383e+02],\n", " [-4.03745174e+00, -2.10847492e+01],\n", " [ 2.47830915e+00, -1.15022650e+01],\n", " [ 2.15843725e+00, -2.75647697e+01],\n", " [ 8.79188538e-01, -1.63194580e+01],\n", " [ 1.96657765e+00, -1.57544184e+01],\n", " [ 2.06179500e+00, -1.82751694e+01],\n", " [ 1.50144041e+00, -2.18298931e+01],\n", " [ 2.33662796e+00, -2.75429592e+01],\n", " [-2.91265535e+00, 1.53857911e+00],\n", " [ 1.51612794e+00, -2.34474773e+01],\n", " [ 2.21980619e+00, -2.25975018e+01],\n", " [ 2.70665288e+00, -1.96391277e+01],\n", " [ 1.81519914e+00, 2.18456894e+02],\n", " [ 2.40450358e+00, -1.90739231e+01],\n", " [ 1.55576754e+00, -2.61141815e+01],\n", " [ 1.86737990e+00, -2.69432220e+01],\n", " [ 1.17162383e+00, -1.46962442e+01],\n", " [ 1.88511109e+00, -1.33146896e+01],\n", " [ 1.75478864e+00, -2.70466042e+01],\n", " [ 2.25218034e+00, 2.39221668e+00],\n", " [ 2.25038910e+00, -9.72757912e+00],\n", " [ 1.45838094e+00, -2.30557632e+01],\n", " [ 2.00435185e+00, -2.56383591e+01],\n", " [ 1.65824318e+00, -2.28895950e+01],\n", " [ 3.67251492e+00, 6.56364536e+00],\n", " [ 1.81519914e+00, 2.18050400e+02],\n", " [ 2.31304479e+00, -1.77586021e+01],\n", " [ 1.09642792e+00, -1.31371851e+01],\n", " [ 1.90589756e-01, 1.88669109e+01],\n", " [ 1.90949345e+00, -2.10922432e+01],\n", " [-9.44056273e-01, 6.45048761e+00],\n", " [ 1.74132633e+00, -1.77247181e+01],\n", " [ 1.36677599e+00, -1.51440248e+01],\n", " [ 2.21458769e+00, -2.13104000e+01],\n", " [ 2.45775676e+00, -1.63243580e+01],\n", " [ 6.68768525e-01, -7.64337444e+00],\n", " [ 2.48189592e+00, -1.42729197e+01],\n", " [ 1.55243373e+00, -1.63729649e+01],\n", " [ 1.81519914e+00, 2.16617355e+02],\n", " [ 1.62376952e+00, -1.60758076e+01],\n", " [-2.44056201e+00, 5.02266693e+00],\n", " [ 2.16105890e+00, -1.06902733e+01],\n", " [ 1.52357936e+00, -1.80762577e+01],\n", " [ 1.91408134e+00, -3.48595200e+01],\n", " [ 2.06909847e+00, -2.46016407e+01],\n", " [-4.40830708e+00, 6.29463568e-02],\n", " [ 2.21440935e+00, -3.29487190e+01],\n", " [ 2.51865697e+00, -1.67729168e+01],\n", " [ 1.26352024e+00, -2.26289101e+01],\n", " [-4.09907579e+00, -1.85375214e+01],\n", " [ 2.43417931e+00, -7.72354794e+00],\n", " [-3.46632814e+00, -1.75531788e+01],\n", " [ 1.81519914e+00, 2.17464203e+02],\n", " [ 2.66472244e+00, -1.63560905e+01],\n", " [ 2.86545849e+00, -4.57689428e+00],\n", " [-3.81132579e+00, -2.04803791e+01],\n", " [ 2.60997224e+00, -4.60065794e+00],\n", " [ 1.94236231e+00, -1.53495979e+01],\n", " [ 1.83971524e+00, -1.95907440e+01],\n", " [ 2.57765341e+00, -9.27616596e+00],\n", " [-3.98111820e+00, -1.61716251e+01],\n", " [ 1.49002218e+00, -8.24895573e+00],\n", " [ 2.35166407e+00, -2.03668022e+01],\n", " [ 1.78349495e+00, -2.82284050e+01],\n", " [ 2.01421452e+00, -2.55387173e+01],\n", " [ 1.81519914e+00, 2.20200607e+02],\n", " [ 2.30397558e+00, -2.30943661e+01],\n", " [-4.80054188e+00, -2.90102825e+01],\n", " [-6.54902816e-01, 3.06810493e+01],\n", " [ 1.89077568e+00, -2.02105179e+01],\n", " [ 2.00662673e-01, -8.00766182e+00],\n", " [ 2.10995245e+00, -9.81829739e+00],\n", " [ 4.55492973e+00, -3.09925861e+01],\n", " [ 1.87334144e+00, -2.11787987e+01],\n", " [ 2.04158878e+00, -2.78806171e+01],\n", " [-8.54304075e-01, 5.94218178e+01],\n", " [ 2.38518620e+00, -1.86650848e+01],\n", " [ 1.33689237e+00, -2.57526932e+01],\n", " [ 1.81519914e+00, 2.23321243e+02],\n", " [ 3.06019235e+00, -1.35738144e+01],\n", " [ 2.26424980e+00, -2.91853142e+01],\n", " [-1.46147847e-01, 5.07323933e+00],\n", " [-5.54601789e-01, 6.47962036e+01],\n", " [ 2.23264813e+00, -2.77605476e+01],\n", " [-8.62332225e-01, 6.26800995e+01],\n", " [-4.08478117e+00, -7.54828739e+00],\n", " [ 1.41936350e+00, -2.61203613e+01],\n", " [ 1.31178796e+00, -1.76503181e+01],\n", " [-9.01086569e-01, 7.38781281e+01],\n", " [-9.25832272e-01, 6.76473389e+01],\n", " [-7.27904201e-01, 6.72318192e+01]], dtype=float32)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pseudotime" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([[-7.8976573e-03, -9.6943472e-03, -1.3284871e-02, ...,\n", " -5.2904693e-07, -4.6778034e-02, -3.0144814e-02],\n", " [-2.2776838e-02, 3.2661978e-02, -4.6866067e-02, ...,\n", " -4.1408495e-07, 7.3825166e-02, 5.5136330e-02],\n", " [ 3.0675331e-02, -2.2968404e-02, 6.0151089e-02, ...,\n", " 4.5403578e-07, -2.7050946e-02, -2.4992879e-02]], dtype=float32)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rotation" ] }, { "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": 12, "metadata": {}, "outputs": [], "source": [ "import cyclum.illustration" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "color_map = {'stage': {\"g0/g1\": \"red\", \"s\": \"green\", \"g2/m\": \"blue\"},\n", " 'subcluster': {\"intact\": \"cyan\", \"perturbed\": \"violet\"}}\n", "cyclum.illustration.plot_round_distr_color(pseudotime[:, 0], label['stage'], color_map['stage'])\n", "pass" ] }, { "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 }