{ "cells": [ { "cell_type": "markdown", "id": "762d4737-1be6-4197-8aeb-b26063abaefd", "metadata": {}, "source": [ "# Example Datasets" ] }, { "cell_type": "code", "execution_count": 1, "id": "ba31834b-30e0-4b27-8fbf-9fb6dce778d2", "metadata": {}, "outputs": [], "source": [ "import os\n", "import warnings\n", "\n", "os.environ[\"OMP_NUM_THREADS\"] = \"4\"\n", "os.environ[\"OPENBLAS_NUM_THREADS\"] = \"4\"\n", "os.environ[\"MKL_NUM_THREADS\"] = \"4\"\n", "os.environ[\"VECLIB_MAXIMUM_THREADS\"] = \"4\"\n", "os.environ[\"NUMEXPR_NUM_THREADS\"] = \"4\"\n", "\n", "from grnet.toydata import load_dataset, load_metadata\n", "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "from sklearn.manifold import TSNE\n", "\n", "warnings.filterwarnings(\"ignore\", category=RuntimeWarning, module=\"threadpoolctl\")" ] }, { "cell_type": "markdown", "id": "913aaeb1-32a7-4334-aaa0-4226839a2d79", "metadata": {}, "source": [ "Example datasets include followings:\n", "- Count data ($\\log_2(RPM+1)$)\n", "- metadata" ] }, { "cell_type": "markdown", "id": "36ca1157-7ef6-45ca-b33c-56ba92ba80b8", "metadata": {}, "source": [ "---\n", "## Prototype1" ] }, { "cell_type": "code", "execution_count": 2, "id": "aad4f0cc-4ab5-4805-8f0c-422a38962f84", "metadata": {}, "outputs": [], "source": [ "data1 = load_dataset(\"prototype1\")\n", "meta1 = load_metadata(\"prototype1\")" ] }, { "cell_type": "markdown", "id": "eea72552-7d2f-4004-9a8e-019cdcf6aaa6", "metadata": {}, "source": [ "NxD matrix will be given (N: number of samples, D: number of genes)" ] }, { "cell_type": "code", "execution_count": 3, "id": "2465f844-5809-4fd9-bdac-48e82deb6313", "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
gene_1gene_2gene_3gene_4gene_5gene_6gene_7gene_8gene_9gene_10...gene_9991gene_9992gene_9993gene_9994gene_9995gene_9996gene_9997gene_9998gene_9999gene_10000
sample_10.00.00.0000000.00.0000000.0000000.0000000.0000000.0000000.0...2.7537030.0000000.0000000.0000000.00000010.2732070.00.00.00.000000
sample_20.00.02.3800560.00.0000001.6335639.8287750.0000000.0000000.0...0.0000002.8695460.0000004.1556100.0000009.6739810.00.00.00.000000
sample_30.00.00.0000000.00.0000000.0000000.0000000.0000000.0000000.0...0.0000000.0000000.0000002.0833790.0000009.7191770.00.00.00.000000
sample_40.00.00.0000000.00.0000000.0000000.0000000.0000003.8321070.0...8.6093406.3300850.0000000.0000003.93977110.2321040.00.00.00.000000
sample_50.00.00.0000000.00.0000000.0000000.0000003.0344510.0000000.0...0.0000000.0000000.0000000.0000000.00000010.0911590.00.00.00.000000
..................................................................
sample_9960.00.00.0000000.00.0000000.0000000.0000000.0000003.3801260.0...0.0000000.0000000.0000000.0000000.0000000.0000000.00.00.02.048660
sample_9970.00.00.0000000.00.0000000.0000000.0000002.1944220.0000000.0...0.0000000.0000004.4894390.0000000.0000000.0000000.00.00.03.552277
sample_9980.00.00.0000000.08.0686970.0000000.0000000.0000000.0000000.0...0.0000000.0000000.0000000.0000000.0000000.0000000.00.00.04.741316
sample_9990.00.00.0000000.01.7962360.0000002.5719820.0000000.0000000.0...0.0000000.0000000.0000000.0000003.7404580.0000000.00.00.03.985389
sample_10000.00.00.0000000.00.0000000.0000000.0000000.0000000.0000000.0...0.0000007.0842690.0000000.0000000.0000000.0000000.00.00.09.423962
\n", "

1000 rows × 10000 columns

\n", "
" ], "text/plain": [ " gene_1 gene_2 gene_3 gene_4 gene_5 gene_6 gene_7 \\\n", "sample_1 0.0 0.0 0.000000 0.0 0.000000 0.000000 0.000000 \n", "sample_2 0.0 0.0 2.380056 0.0 0.000000 1.633563 9.828775 \n", "sample_3 0.0 0.0 0.000000 0.0 0.000000 0.000000 0.000000 \n", "sample_4 0.0 0.0 0.000000 0.0 0.000000 0.000000 0.000000 \n", "sample_5 0.0 0.0 0.000000 0.0 0.000000 0.000000 0.000000 \n", "... ... ... ... ... ... ... ... \n", "sample_996 0.0 0.0 0.000000 0.0 0.000000 0.000000 0.000000 \n", "sample_997 0.0 0.0 0.000000 0.0 0.000000 0.000000 0.000000 \n", "sample_998 0.0 0.0 0.000000 0.0 8.068697 0.000000 0.000000 \n", "sample_999 0.0 0.0 0.000000 0.0 1.796236 0.000000 2.571982 \n", "sample_1000 0.0 0.0 0.000000 0.0 0.000000 0.000000 0.000000 \n", "\n", " gene_8 gene_9 gene_10 ... gene_9991 gene_9992 \\\n", "sample_1 0.000000 0.000000 0.0 ... 2.753703 0.000000 \n", "sample_2 0.000000 0.000000 0.0 ... 0.000000 2.869546 \n", "sample_3 0.000000 0.000000 0.0 ... 0.000000 0.000000 \n", "sample_4 0.000000 3.832107 0.0 ... 8.609340 6.330085 \n", "sample_5 3.034451 0.000000 0.0 ... 0.000000 0.000000 \n", "... ... ... ... ... ... ... \n", "sample_996 0.000000 3.380126 0.0 ... 0.000000 0.000000 \n", "sample_997 2.194422 0.000000 0.0 ... 0.000000 0.000000 \n", "sample_998 0.000000 0.000000 0.0 ... 0.000000 0.000000 \n", "sample_999 0.000000 0.000000 0.0 ... 0.000000 0.000000 \n", "sample_1000 0.000000 0.000000 0.0 ... 0.000000 7.084269 \n", "\n", " gene_9993 gene_9994 gene_9995 gene_9996 gene_9997 gene_9998 \\\n", "sample_1 0.000000 0.000000 0.000000 10.273207 0.0 0.0 \n", "sample_2 0.000000 4.155610 0.000000 9.673981 0.0 0.0 \n", "sample_3 0.000000 2.083379 0.000000 9.719177 0.0 0.0 \n", "sample_4 0.000000 0.000000 3.939771 10.232104 0.0 0.0 \n", "sample_5 0.000000 0.000000 0.000000 10.091159 0.0 0.0 \n", "... ... ... ... ... ... ... \n", "sample_996 0.000000 0.000000 0.000000 0.000000 0.0 0.0 \n", "sample_997 4.489439 0.000000 0.000000 0.000000 0.0 0.0 \n", "sample_998 0.000000 0.000000 0.000000 0.000000 0.0 0.0 \n", "sample_999 0.000000 0.000000 3.740458 0.000000 0.0 0.0 \n", "sample_1000 0.000000 0.000000 0.000000 0.000000 0.0 0.0 \n", "\n", " gene_9999 gene_10000 \n", "sample_1 0.0 0.000000 \n", "sample_2 0.0 0.000000 \n", "sample_3 0.0 0.000000 \n", "sample_4 0.0 0.000000 \n", "sample_5 0.0 0.000000 \n", "... ... ... \n", "sample_996 0.0 2.048660 \n", "sample_997 0.0 3.552277 \n", "sample_998 0.0 4.741316 \n", "sample_999 0.0 3.985389 \n", "sample_1000 0.0 9.423962 \n", "\n", "[1000 rows x 10000 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data1" ] }, { "cell_type": "markdown", "id": "56ef54ff-5daa-4583-ad43-a6fb2894e2ba", "metadata": {}, "source": [ "in metadata, cluster info. is provided" ] }, { "cell_type": "code", "execution_count": 4, "id": "024af9ed-8002-4375-b7fd-cac050b8ba36", "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", "
cluster
sample_11
sample_21
sample_31
sample_41
sample_51
......
sample_9965
sample_9975
sample_9985
sample_9995
sample_10005
\n", "

1000 rows × 1 columns

\n", "
" ], "text/plain": [ " cluster\n", "sample_1 1\n", "sample_2 1\n", "sample_3 1\n", "sample_4 1\n", "sample_5 1\n", "... ...\n", "sample_996 5\n", "sample_997 5\n", "sample_998 5\n", "sample_999 5\n", "sample_1000 5\n", "\n", "[1000 rows x 1 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "meta1" ] }, { "cell_type": "markdown", "id": "9d10a038-01e6-4459-a3af-766eaf0578f6", "metadata": {}, "source": [ "### Visualization" ] }, { "cell_type": "code", "execution_count": 5, "id": "72578262-3d99-42fb-a888-ca850298c95c", "metadata": {}, "outputs": [], "source": [ "# dimensionality reduction with TSNE\n", "\n", "tsne1 = pd.DataFrame(\n", " TSNE(n_components=2, random_state=0).fit_transform(data1),\n", " index = data1.index,\n", " columns = [f\"TSNE{i + 1}\" for i in range(2)]\n", ")" ] }, { "cell_type": "code", "execution_count": 6, "id": "42842ce5-6adb-40c8-abb2-63b1263e4e7d", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(4, 4))\n", "\n", "for i, v in enumerate(meta1.cluster.unique()):\n", " _dat = tsne1[meta1.cluster == v]\n", " \n", " plt.scatter(\n", " _dat.iloc[:, 0], _dat.iloc[:, 1],\n", " color = plt.cm.rainbow(\n", " i / len(meta1.cluster.unique())\n", " ),\n", " label = f\"cluster_{v}\"\n", " )\n", "\n", "ax.legend(loc=\"center left\", bbox_to_anchor=(1, .5), frameon=False)\n", "ax.axis(\"off\")\n", "ax.set(title=\"prototype1\");" ] }, { "cell_type": "markdown", "id": "7d0f8918-f8a6-4366-9781-05c3220b2fe3", "metadata": {}, "source": [ "---\n", "## Prototype2" ] }, { "cell_type": "code", "execution_count": 7, "id": "ae9295a5-d92c-4c18-9d16-fb3ab04429b3", "metadata": {}, "outputs": [], "source": [ "data2 = load_dataset(\"prototype2\")\n", "meta2 = load_metadata(\"prototype2\")" ] }, { "cell_type": "code", "execution_count": 8, "id": "ea5f2de2-a7c4-4afd-a1f5-af3ff82e072b", "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
gene_1gene_2gene_3gene_4gene_5gene_6gene_7gene_8gene_9gene_10...gene_9991gene_9992gene_9993gene_9994gene_9995gene_9996gene_9997gene_9998gene_9999gene_10000
sample_10.0000003.5071290.0000000.0000000.00.0000000.00.00.00.000000...0.0000000.0000003.5071290.0000000.000000.08.0044300.0000000.0000000.000000
sample_20.0000000.0000000.0000000.0000000.01.7153590.00.00.00.000000...0.0000002.4770474.7071720.0000002.972940.08.3149040.0000000.0000000.000000
sample_34.5679960.0000000.0000000.0000000.00.0000000.00.00.00.000000...0.0000000.0000004.5679961.9410780.000000.07.9042050.0000000.0000000.000000
sample_40.0000000.0000000.0000000.0000000.00.0000000.00.00.00.000000...0.0000000.0000004.3206450.0000000.000000.08.6028090.0000000.0000000.000000
sample_50.0000008.2222580.0000000.0000000.00.0000000.00.00.00.000000...0.0000000.0000004.5265270.0000000.000000.07.3781200.0000000.0000000.000000
..................................................................
sample_14963.7864290.0000000.0000000.0000000.00.0000000.00.00.00.000000...0.0000003.1697650.0000000.0000000.000000.00.0000000.0000008.6472791.378401
sample_14976.1932680.0000000.0000000.0000000.00.0000000.00.00.00.000000...0.0000000.0000000.0000000.0000000.000000.03.3663680.00000010.6568250.000000
sample_14986.0280063.3710170.0000003.0017270.00.0000000.00.00.00.000000...0.0000000.0000000.0000000.0000000.000000.03.3710170.00000010.9255480.000000
sample_14995.1447950.0000001.5956262.8210510.00.0000000.00.00.08.670563...2.3347150.0000000.0000000.0000000.000000.03.4739543.7151849.9946610.000000
sample_15004.5362160.0000000.0000000.0000000.00.0000000.00.00.00.000000...0.0000000.0000000.0000000.0000000.000000.04.2051520.0000009.9521630.000000
\n", "

1500 rows × 10000 columns

\n", "
" ], "text/plain": [ " gene_1 gene_2 gene_3 gene_4 gene_5 gene_6 gene_7 \\\n", "sample_1 0.000000 3.507129 0.000000 0.000000 0.0 0.000000 0.0 \n", "sample_2 0.000000 0.000000 0.000000 0.000000 0.0 1.715359 0.0 \n", "sample_3 4.567996 0.000000 0.000000 0.000000 0.0 0.000000 0.0 \n", "sample_4 0.000000 0.000000 0.000000 0.000000 0.0 0.000000 0.0 \n", "sample_5 0.000000 8.222258 0.000000 0.000000 0.0 0.000000 0.0 \n", "... ... ... ... ... ... ... ... \n", "sample_1496 3.786429 0.000000 0.000000 0.000000 0.0 0.000000 0.0 \n", "sample_1497 6.193268 0.000000 0.000000 0.000000 0.0 0.000000 0.0 \n", "sample_1498 6.028006 3.371017 0.000000 3.001727 0.0 0.000000 0.0 \n", "sample_1499 5.144795 0.000000 1.595626 2.821051 0.0 0.000000 0.0 \n", "sample_1500 4.536216 0.000000 0.000000 0.000000 0.0 0.000000 0.0 \n", "\n", " gene_8 gene_9 gene_10 ... gene_9991 gene_9992 gene_9993 \\\n", "sample_1 0.0 0.0 0.000000 ... 0.000000 0.000000 3.507129 \n", "sample_2 0.0 0.0 0.000000 ... 0.000000 2.477047 4.707172 \n", "sample_3 0.0 0.0 0.000000 ... 0.000000 0.000000 4.567996 \n", "sample_4 0.0 0.0 0.000000 ... 0.000000 0.000000 4.320645 \n", "sample_5 0.0 0.0 0.000000 ... 0.000000 0.000000 4.526527 \n", "... ... ... ... ... ... ... ... \n", "sample_1496 0.0 0.0 0.000000 ... 0.000000 3.169765 0.000000 \n", "sample_1497 0.0 0.0 0.000000 ... 0.000000 0.000000 0.000000 \n", "sample_1498 0.0 0.0 0.000000 ... 0.000000 0.000000 0.000000 \n", "sample_1499 0.0 0.0 8.670563 ... 2.334715 0.000000 0.000000 \n", "sample_1500 0.0 0.0 0.000000 ... 0.000000 0.000000 0.000000 \n", "\n", " gene_9994 gene_9995 gene_9996 gene_9997 gene_9998 gene_9999 \\\n", "sample_1 0.000000 0.00000 0.0 8.004430 0.000000 0.000000 \n", "sample_2 0.000000 2.97294 0.0 8.314904 0.000000 0.000000 \n", "sample_3 1.941078 0.00000 0.0 7.904205 0.000000 0.000000 \n", "sample_4 0.000000 0.00000 0.0 8.602809 0.000000 0.000000 \n", "sample_5 0.000000 0.00000 0.0 7.378120 0.000000 0.000000 \n", "... ... ... ... ... ... ... \n", "sample_1496 0.000000 0.00000 0.0 0.000000 0.000000 8.647279 \n", "sample_1497 0.000000 0.00000 0.0 3.366368 0.000000 10.656825 \n", "sample_1498 0.000000 0.00000 0.0 3.371017 0.000000 10.925548 \n", "sample_1499 0.000000 0.00000 0.0 3.473954 3.715184 9.994661 \n", "sample_1500 0.000000 0.00000 0.0 4.205152 0.000000 9.952163 \n", "\n", " gene_10000 \n", "sample_1 0.000000 \n", "sample_2 0.000000 \n", "sample_3 0.000000 \n", "sample_4 0.000000 \n", "sample_5 0.000000 \n", "... ... \n", "sample_1496 1.378401 \n", "sample_1497 0.000000 \n", "sample_1498 0.000000 \n", "sample_1499 0.000000 \n", "sample_1500 0.000000 \n", "\n", "[1500 rows x 10000 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data2" ] }, { "cell_type": "code", "execution_count": 9, "id": "16a43010-fd4d-47e0-beec-f56f216dc777", "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", "
cluster
sample_11
sample_21
sample_31
sample_41
sample_51
......
sample_14969
sample_14979
sample_14989
sample_14999
sample_15009
\n", "

1500 rows × 1 columns

\n", "
" ], "text/plain": [ " cluster\n", "sample_1 1\n", "sample_2 1\n", "sample_3 1\n", "sample_4 1\n", "sample_5 1\n", "... ...\n", "sample_1496 9\n", "sample_1497 9\n", "sample_1498 9\n", "sample_1499 9\n", "sample_1500 9\n", "\n", "[1500 rows x 1 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "meta2" ] }, { "cell_type": "markdown", "id": "7a565e8d-c7cf-46f0-827f-1e1fff96bb1a", "metadata": {}, "source": [ "### Visualization" ] }, { "cell_type": "code", "execution_count": 10, "id": "6b7ccf7c-e596-4ecf-87f4-a017941192cb", "metadata": {}, "outputs": [], "source": [ "# dimensionality reduction with TSNE\n", "\n", "tsne2 = pd.DataFrame(\n", " TSNE(n_components=2, random_state=0).fit_transform(data2),\n", " index = data2.index,\n", " columns = [f\"TSNE{i + 1}\" for i in range(2)]\n", ")" ] }, { "cell_type": "code", "execution_count": 11, "id": "91e39310-8df9-4cc5-adb5-50afea8ccf85", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(4, 4))\n", "\n", "for i, v in enumerate(meta2.cluster.unique()):\n", " _dat = tsne2[meta2.cluster == v]\n", " \n", " plt.scatter(\n", " _dat.iloc[:, 0], _dat.iloc[:, 1],\n", " color = plt.cm.hsv(\n", " i / len(meta2.cluster.unique())\n", " ),\n", " label = f\"cluster_{v}\"\n", " )\n", "\n", "ax.legend(loc=\"center left\", bbox_to_anchor=(1, .5), frameon=False)\n", "ax.axis(\"off\")\n", "ax.set(title=\"prototype2\");" ] } ], "metadata": { "kernelspec": { "display_name": "Python (Poetry Env)", "language": "python", "name": "my-analysis-env" }, "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.12.0" } }, "nbformat": 4, "nbformat_minor": 5 }