{ "cells": [ { "cell_type": "markdown", "id": "d230e8e2", "metadata": {}, "source": [ "# Work with AnnData" ] }, { "attachments": {}, "cell_type": "markdown", "id": "8f04cd10", "metadata": {}, "source": [ "`AnnData` is widely used in bioinformatic software because of its highly compatible design and efficient functions, further information in [AnnData Docs](https://anndata.readthedocs.io/en/latest/tutorials/notebooks/getting-started.html)" ] }, { "cell_type": "markdown", "id": "88205659", "metadata": {}, "source": [ "## Simple start" ] }, { "cell_type": "markdown", "id": "676b59a9", "metadata": {}, "source": [ "To meet the needs of more users, we integrate `AnnData` functionality into `StereoExpData` through adapter mode." ] }, { "attachments": {}, "cell_type": "markdown", "id": "ad08c238", "metadata": {}, "source": [ "Using `st.io.read_h5ad` to read `.h5ad` file into `AnnBasedStereoExpData`." ] }, { "cell_type": "code", "execution_count": 2, "id": "04d1f1d2", "metadata": {}, "outputs": [], "source": [ "import stereo as st\n", "\n", "# spatial_key is the key to get spatial information from AnnData.obsm.\n", "data = st.io.read_h5ad('./mouse_forebrain.anndata_075.h5ad', spatial_key='spatial')" ] }, { "cell_type": "markdown", "id": "f6d52b34", "metadata": {}, "source": [ "Show `AnnData` infomation." ] }, { "cell_type": "code", "execution_count": 3, "id": "f517a3d8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 9092 × 10276\n", " obs: 'annotation', 'celltype', 'class', 'leiden', 'timepoint'\n", " var: 'fuzzy_C_result', 'greater_pvalue', 'less_pvalue', 'log1p_mean_counts', 'log1p_total_counts', 'logFC'\n", " uns: 'sn'\n", " obsm: 'spatial'" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.adata" ] }, { "cell_type": "markdown", "id": "12399a29", "metadata": {}, "source": [ "And we automatically index `data.exp_matrix` to `data.adata.X`, which means you can read a `.h5ad` file and use it as `StereoExpData`." ] }, { "cell_type": "code", "execution_count": 4, "id": "3616a659", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.exp_matrix is data.adata.X" ] }, { "cell_type": "markdown", "id": "90309d79", "metadata": {}, "source": [ "## Supported StereoExpData features" ] }, { "attachments": {}, "cell_type": "markdown", "id": "066fa721", "metadata": {}, "source": [ "* exp_matrix: `adata.X`\n", "* postion `adata.uns`\n", "* cells: `adata.obs`\n", "* genes: `adata.var`" ] }, { "cell_type": "markdown", "id": "dbde4899", "metadata": {}, "source": [ "## Supported StereoExpData functions" ] }, { "cell_type": "markdown", "id": "cb340d08", "metadata": {}, "source": [ "Most tools and plot functions are supported." ] }, { "cell_type": "code", "execution_count": 5, "id": "b3abdcec", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2023-11-14 16:44:32][Stereo][77692][MainThread][140240360204096][st_pipeline][37][INFO]: start to run cal_qc...\n", "[2023-11-14 16:44:32][Stereo][77692][MainThread][140240360204096][st_pipeline][40][INFO]: cal_qc end, consume time 0.2945s.\n", "[2023-11-14 16:44:32][Stereo][77692][MainThread][140240360204096][st_pipeline][37][INFO]: start to run normalize_total...\n", "[2023-11-14 16:44:33][Stereo][77692][MainThread][140240360204096][st_pipeline][40][INFO]: normalize_total end, consume time 0.2316s.\n", "[2023-11-14 16:44:33][Stereo][77692][MainThread][140240360204096][st_pipeline][37][INFO]: start to run log1p...\n", "[2023-11-14 16:44:33][Stereo][77692][MainThread][140240360204096][st_pipeline][40][INFO]: log1p end, consume time 0.1042s.\n", "[2023-11-14 16:44:33][Stereo][77692][MainThread][140240360204096][st_pipeline][37][INFO]: start to run highly_variable_genes...\n", "[2023-11-14 16:44:34][Stereo][77692][MainThread][140240360204096][st_pipeline][40][INFO]: highly_variable_genes end, consume time 0.8514s.\n", "[2023-11-14 16:44:34][Stereo][77692][MainThread][140240360204096][st_pipeline][37][INFO]: start to run pca...\n", "[2023-11-14 16:44:41][Stereo][77692][MainThread][140240360204096][st_pipeline][40][INFO]: pca end, consume time 7.2990s.\n", "[2023-11-14 16:44:41][Stereo][77692][MainThread][140240360204096][st_pipeline][37][INFO]: start to run neighbors...\n", "[2023-11-14 16:45:38][Stereo][77692][MainThread][140240360204096][st_pipeline][40][INFO]: neighbors end, consume time 56.7120s.\n", "[2023-11-14 16:45:38][Stereo][77692][MainThread][140240360204096][st_pipeline][37][INFO]: start to run umap...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\tcompleted 0 / 500 epochs\n", "\tcompleted 50 / 500 epochs\n", "\tcompleted 100 / 500 epochs\n", "\tcompleted 150 / 500 epochs\n", "\tcompleted 200 / 500 epochs\n", "\tcompleted 250 / 500 epochs\n", "\tcompleted 300 / 500 epochs\n", "\tcompleted 350 / 500 epochs\n", "\tcompleted 400 / 500 epochs\n", "\tcompleted 450 / 500 epochs\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[2023-11-14 16:46:28][Stereo][77692][MainThread][140240360204096][st_pipeline][40][INFO]: umap end, consume time 49.9396s.\n", "[2023-11-14 16:46:28][Stereo][77692][MainThread][140240360204096][st_pipeline][37][INFO]: start to run leiden...\n", "[2023-11-14 16:46:29][Stereo][77692][MainThread][140240360204096][st_pipeline][40][INFO]: leiden end, consume time 1.6195s.\n" ] } ], "source": [ "data.tl.cal_qc()\n", "data.tl.raw_checkpoint()\n", "data.tl.normalize_total(target_sum=1e4)\n", "data.tl.log1p()\n", "data.tl.highly_variable_genes(min_mean=0.0125, max_mean=3, min_disp=0.5, res_key='highly_variable_genes', n_top_genes=None)\n", "data.tl.pca(use_highly_genes=True, hvg_res_key='highly_variable_genes', n_pcs=20, res_key='pca_test', svd_solver='arpack')\n", "data.tl.neighbors(pca_res_key='pca_test', n_pcs=30, res_key='neighbors_test', n_jobs=8)\n", "data.tl.umap(pca_res_key='pca_test', neighbors_res_key='neighbors_test', res_key='umap_test', init_pos='spectral')\n", "data.tl.leiden(neighbors_res_key='neighbors_test', res_key='leiden_test')" ] }, { "attachments": {}, "cell_type": "markdown", "id": "e245359f", "metadata": {}, "source": [ "See what self-defined results have been written to `adata`. " ] }, { "cell_type": "code", "execution_count": 6, "id": "f46697e7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 9092 × 10276\n", " obs: 'annotation', 'celltype', 'class', 'leiden', 'timepoint', 'total_counts', 'n_genes_by_counts', 'pct_counts_mt', 'leiden_test'\n", " var: 'fuzzy_C_result', 'greater_pvalue', 'less_pvalue', 'log1p_mean_counts', 'log1p_total_counts', 'logFC', 'n_cells', 'n_counts', 'mean_umi', 'means', 'dispersions', 'dispersions_norm', 'highly_variable'\n", " uns: 'sn', 'highly_variable_genes', 'pca_test', 'neighbors_test', 'umap_test', 'leiden_test', 'gene_exp_leiden_test'\n", " obsm: 'spatial', 'X_pca_test', 'X_umap_test'\n", " obsp: 'neighbors_test_connectivities', 'neighbors_test_distances'" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.adata" ] }, { "attachments": {}, "cell_type": "markdown", "id": "b6ccf279", "metadata": {}, "source": [ "Get a new column `leiden_test` after `leiden`, which could be displayed through `adata.obs` or `cells`." ] }, { "cell_type": "code", "execution_count": 7, "id": "124b08b3", "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", "
annotationcelltypeclassleidentimepointtotal_countsn_genes_by_countspct_counts_mtleiden_test
209_102-0BrainRglDF12Dorsal forebrain7E9.512112.035270.90819022
209_87-0BrainRglDF12Dorsal forebrain7E9.513954.037850.71664022
209_88-0BrainRglDF12Dorsal forebrain7E9.513810.037660.78204222
209_89-0BrainRglDF12Dorsal forebrain7E9.515159.039250.86417322
209_90-0BrainRglDF12Dorsal forebrain7E9.515711.040240.66832222
..............................
679_180-7BrainNeur511Cortical or hippocampal glutamatergic3E16.56986.021240.84454611
679_181-7BrainNeur511Cortical or hippocampal glutamatergic3E16.56461.020630.66553211
679_182-7BrainNeur511Cortical or hippocampal glutamatergic3E16.57860.022650.72519111
679_183-7BrainNeur511Cortical or hippocampal glutamatergic3E16.57732.021721.13812711
679_184-7BrainNeur511Cortical or hippocampal glutamatergic3E16.58195.020910.69554611
\n", "

9092 rows × 9 columns

\n", "
" ], "text/plain": [ " annotation celltype class leiden \\\n", "209_102-0 Brain RglDF12 Dorsal forebrain 7 \n", "209_87-0 Brain RglDF12 Dorsal forebrain 7 \n", "209_88-0 Brain RglDF12 Dorsal forebrain 7 \n", "209_89-0 Brain RglDF12 Dorsal forebrain 7 \n", "209_90-0 Brain RglDF12 Dorsal forebrain 7 \n", "... ... ... ... ... \n", "679_180-7 Brain Neur511 Cortical or hippocampal glutamatergic 3 \n", "679_181-7 Brain Neur511 Cortical or hippocampal glutamatergic 3 \n", "679_182-7 Brain Neur511 Cortical or hippocampal glutamatergic 3 \n", "679_183-7 Brain Neur511 Cortical or hippocampal glutamatergic 3 \n", "679_184-7 Brain Neur511 Cortical or hippocampal glutamatergic 3 \n", "\n", " timepoint total_counts n_genes_by_counts pct_counts_mt \\\n", "209_102-0 E9.5 12112.0 3527 0.908190 \n", "209_87-0 E9.5 13954.0 3785 0.716640 \n", "209_88-0 E9.5 13810.0 3766 0.782042 \n", "209_89-0 E9.5 15159.0 3925 0.864173 \n", "209_90-0 E9.5 15711.0 4024 0.668322 \n", "... ... ... ... ... \n", "679_180-7 E16.5 6986.0 2124 0.844546 \n", "679_181-7 E16.5 6461.0 2063 0.665532 \n", "679_182-7 E16.5 7860.0 2265 0.725191 \n", "679_183-7 E16.5 7732.0 2172 1.138127 \n", "679_184-7 E16.5 8195.0 2091 0.695546 \n", "\n", " leiden_test \n", "209_102-0 22 \n", "209_87-0 22 \n", "209_88-0 22 \n", "209_89-0 22 \n", "209_90-0 22 \n", "... ... \n", "679_180-7 11 \n", "679_181-7 11 \n", "679_182-7 11 \n", "679_183-7 11 \n", "679_184-7 11 \n", "\n", "[9092 rows x 9 columns]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.adata.obs" ] }, { "attachments": {}, "cell_type": "markdown", "id": "955e82d4", "metadata": {}, "source": [ "Plot the results of UMAP." ] }, { "cell_type": "code", "execution_count": 8, "id": "1008fd5d", "metadata": {}, "outputs": [ { "data": {}, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.holoviews_exec.v0+json": "", "text/html": [ "
\n", "
\n", "
\n", "" ], "text/plain": [ "Column\n", " [0] Markdown(str)\n", " [1] Row\n", " [0] TextInput(name='file name', placeholder='Enter a file name...', width=200)\n", " [1] Select(name='file format', options=['png', 'pdf'], value='png', width=60)\n", " [2] IntInput(name='dpi', placeholder='Enter the dip...', start=0, value=100, width=200)\n", " [2] Row\n", " [0] Button(button_type='primary', name='export', width=100)\n", " [1] StaticText(width=800)" ] }, "execution_count": 8, "metadata": { "application/vnd.holoviews_exec.v0+json": { "id": "1002" } }, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAygAAAK4CAYAAACf5dkGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABzpklEQVR4nO3deXhU5d3/8c+ENYQkENYEDJuALIqCVFELiSCQskhx5bGCgGIfsRZprVWrgLjTqv11UehjwaVi1bIJVatAQFRUQBSKshnWhDWQjT2Z3x9x4kwyM5nlzMw5Z96v6+Jq5pwz59wTe+l8+N7f+3Y4nU6nAAAAAMAEEmI9AAAAAABwIaAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAAAAAMA0CCgAAAADTIKAAMEz79u3lcDiq/kyfPt3Q++fm5nrc3+FwaNeuXUHfZ968eTXuAwAAzKFurAcAADBe9XA4atQoXXzxxTEZS2127dqlefPmeRybMmWKmjRpEpPxAABii4ACADY0Y8YMj9ft27c3dUCpPt7bbruNgAIAcYqAAsAyLr/8cuXl5Xkca9u2bYxGAwAAIoGAAsAyGjZsqPbt28d6GAAAIIJokgcQdZ988okmTZqkHj16KDU1VfXr11d6erpycnL00ksv6ezZs17fF0yT/LJlyzR48GClpaUpKSlJvXr10qxZs3TmzJmgxlpcXKznn39eQ4YMUXp6uho0aKCUlBT17NlTd999t7799luf783KyvIY62233SZJevPNNzVw4EClpaWpYcOG6t69u2bOnKlTp04FNbbqdu3a5bPpf/z48R5j8RX03nvvPd16663q3LmzkpOT1bBhQ5133nkaPXq03nrrLTmdTp/P37p1q6ZMmaLevXuradOmqlevnlJTU3X++ecrKytLv/71r/Xmm2+qrKxM0g+LFWRnZ9e4V4cOHbz+7gAAccAJAAZp166dU1LVn2nTpnmcLyoqct5www0e13j70717d+fWrVtr3H/lypU1rs3Ly6tx3W9+8xuf97700kudzz33XI3j3rzzzjvOZs2a+R1rQkKC89FHH/X6/gEDBnhce/PNNzuvu+46n/e6+uqrnefOnQv69+6Sl5dX6+/W9addu3Ye783Pz3dmZWXV+r6rrrrKWVBQUOPZ//rXv5z169cP6Nmffvqp0+l0OufOnRvweMeNGxfy7wUAYC1M8QIQFWfPntXIkSO1atWqWq/dsmWLrr76an3xxRdKT08P6jnz5s3TM8884/P8unXrtGXLllrv8+6772rUqFEqLy/3e11FRYUeeeQRSdLDDz/s99p//vOffisQK1as0Lx58zRx4sRax2ekoqIiDRw4UN98802t165Zs0ZDhgzRJ598oqSkJEnSmTNndMcddwRdnQIAwBumeAGIir/85S8e4aRevXqaNm2aPv/8c23ZskX/+Mc/lJmZWXV+//79uv/++4N6xtmzZ/XAAw94HKtbt64ee+wxbdiwQe+//76uuOIKnThxwu99Tp48qYkTJ3qEk8suu0wLFy7UN998o08//VS33367x3tmzJihbdu2+b2v0+lUy5Yt9dprr+m///2v/vKXv6hevXoe17z++uuBfFSv2rZtq7y8vBoLCUjSrFmzqs7l5eVpzZo1VeemTZvmEU6Sk5P17LPPasOGDdq8ebNmz56tpk2bVp3/+uuv9fTTT1e93rx5swoLC6tep6Wl6R//+If++9//auvWrfroo480e/Zs/exnP1NaWlrVdddff73y8vI0f/78GuP96KOPPMb7+9//PuTfCwDAYmJdwgFgH/6meHXq1Mnj3KxZs2q8/8MPP/S4pk6dOs5jx45Vna9tite///3vGuerT786ceKEs2XLln6neL366qse51q0aOEsKyurMd6rrrrK47pf/epXHuerT/GS5Hzvvfc8rpk8ebLH+ebNm9f2aw5I9efOnTvX63WnTp1yNmrUyOPat956q8Z1//d//1fjd1JRUeF0Op3Ozz77zOPc0KFDfY7rzJkzzpMnT3ocC3TqHgAgPlBBARBx+/fv186dOz2O3XfffTUa3gcNGuRxTXl5uT755JOAn/PZZ5/VODZhwgSP14mJifqf//kfv/epPg3t8OHDSkpKqjFe9yqEJK1evdrvfTt37qwhQ4Z4HLvgggs8Xh87dszvPYy2bt26GhWlG264ocZnrV4xOnz4cFXVpXv37kpMTKw699577+nHP/6xfv3rX2vOnDlatWqVioqKJFVWzho2bBjhTwUAsDICCoCI279/f8jvLSgoCPjagwcPerxu0KCBMjIyalzXoUMHv/cJdby1jbVr1641jrl/sZdUa8+L0Yz4Z9O4cWM9/vjjHufWrFmjP/zhD7rzzjuVlZWltLQ0XXHFFXrzzTfDGi8AwP4IKABM7eTJkwFf6/TTgB4NtY21WbNmNY7VqVMnUsOJOPfPe++992rlypW6/vrrPfpVXCoqKvTpp5/qpptu0rPPPhvNYQIALIZVvABEnLcqxuzZszV48OBa3+vtS70vrVq18nh9+vRp5efnq02bNh7HvTWRu6s+3m7duunf//53rc+3Ytjw9s9m2bJl6t69e63vrf77zsrKUlZWliRp37592rlzp7799lu9+eabWrFiRdV1jz/+uKZMmaKEBP6ODABQE/91ABBxbdu2VceOHT2OLVq0SJmZmWrfvr3XP40aNdL69euVnJwc8HMuu+yyGsf+/ve/e7w+efKk11Wj3Lm+ZLt8++23ys/P9znWdu3aafv27T43mIyF6quD+aru9O3bV40aNfI4tnjxYp+ftX379nI4HPrmm2+qpqeVl5fXmF7Xtm1bDRgwQHfeeaf+9a9/eZwrLCzUoUOHql7Xr1+/xriCqZwBAOyFCgqAqJg8ebJ+9atfVb1+9913dc0112jy5Mnq0qWL6tatqwMHDuirr77S+++/r+XLl6tfv3667rrrAn7GoEGD1KpVK48vy48++qgSEhI0bNgwHTp0SDNmzKjxZbq60aNH67777tOBAwckVU4dGzZsmO69914NHDhQLVu2VGlpqbZv365PP/1UixYt0q5du7Ry5coaQSxWWrRoofz8/KrXr776qi699FK1aNFCktSkSRM1adJEDRo00MSJE/WnP/2p6to5c+bo6NGjmjBhQtWO8/v379eXX36pZcuWac2aNbr11luVk5MjqTJMtG3bVoMGDdKgQYN00UUXKSMjQw0aNNDBgwf14osv1hifaw8V11ire/7553XPPfdUXde6dWua6wEgXsR6GTEA9uFvmeHTp087+/fvH/DO4ZKcAwYM8Lh/IMvRVl8O19ufunXr+l1m2Oms3EW+Tp06QY135cqVHveovsywt93Qve2mbgR/O9ZX/2dTWFjovOCCC4L6rO6fpaSkJKx/ruXl5c4WLVoE9bsFANgXU7wAREX9+vX1zjvv6Kabbgr4Peedd17Qz5k4caKmTp3q83yXLl00Y8aMWu8zfPhwLVq0SM2bNw/oucnJyWrSpEmgw4y43/zmNzWmefnStGlTrVixQldffXVA1zscDrVt2zakcbVr105/+9vfPI4lJCTU2GATABC/mOIFIGpSUlL0xhtv6Fe/+pXmzZunjz/+WLt371ZJSYkaNmyo9PR0de/eXT/+8Y81bNgwdevWLaTn/OEPf1B2draef/55rVu3TmfOnFH79u11/fXX6/7779dbb70V0H2GDx+u7777Tq+88oreffddbdy4UUePHlV5ebmaNGmiTp06qU+fPho4cKCGDh1aY8ngWPrRj36k1atX6+mnn9ann36qI0eO+F3COD09XcuXL9eHH36o119/XWvXrtX+/ftVVlampKQktWnTRj179lT//v01YsQItWvXruq9SUlJ+vzzz/Xxxx/r448/1rZt23T48GEdOXJECQkJat68uXr06KFhw4Zp4sSJHtO7XO699161bNlSs2fP1tdff63i4uKYr8oGAIgNh5P/AgAAAAAwCaZ4AQAAADANAgoAAAAA06AHBQBM6ttvvw3q+ubNmwfc1A8AgFnRgwIAJuVwOIK6ftq0aZo+fXpkBgMAQJQwxQsAAACAaTDFCwBMigI3ACAeEVDCUFFRofz8fCUnJwc9FQMAACBYTqdTJSUlysjIUEICE2FgTwSUMOTn54e00zUAAEA49u7dq7Zt28Z6GEBEEFDCkJycLKnyXxIpKSkxHg0AALC74uJinXfeeVXfQQA7IqCEwTWtKyUlhYACAACihqnlsDMmLwIAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAMQxZ0WFTrz9Lx2+7noduKyfDl93vU68/S85KyrCvvfq1as1YsQIZWRkyOFwaNGiReEPOIqc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EwEFAAAAgGkQvQEAAACYBgEFAAAAgGkQUAAAAACYBgEFAAAAgGkQUAAAAACYBgEFAAAAgGkQUAAAAACYBgEFAAAAgGkQUADApo4cOaKXXnpJkyZN0sUXX6y6devK4XBo3rx5sR4aAAA+1Y31AAAAkbFmzRrdfvvtsR4GAABBoYICADbVqlUr3XXXXfr73/+uTZs26Y477oj1kAAAqBUVFACwqX79+qlfv35VrxMS+DspAID58V8rAHElNzdXDodDt912m9fzt912mxwOh3Jzc6uOORwOtW/fXufOndPMmTN1/vnnKzExUd26ddPcuXOrrluxYoWys7OVkpKipk2bauzYsTp69GiNZ+zYsUPTp09Xv3791Lp1a9WvX19t27bV2LFjtW3bNq/jco3hzJkzmjZtmjp16qSGDRuqY8eOeuSRR3Tq1Kmwfi8AAJgFAQUAAnTjjTfqD3/4gy688EL1799feXl5mjBhgubOnau3335bQ4YM0blz5zRkyBAlJSXp1Vdf1ahRo+R0Oj3u83//93969NFHVVZWpr59+2rkyJFKSUnRq6++qr59++rrr7/2+nyn06nrrrtOs2bNUvfu3TVs2DAVFhZq5syZGj58uMrLy6PxawAAIKKY4gUAAdi9e7eSk5O1fft2tWjRQpK0cuVKXX311XrooYd05swZLVq0SMOGDZMkFRcX64orrtCaNWuUm5ur7OzsqnuNGjVKd955pzp06ODxjLlz52rChAmaMmWKVqxYUWMMe/bsUUVFhTZv3qyOHTtKkg4fPqyrr75ay5cv15/+9CdNmTIlQr8BAACigwoKAATo+eefrwonkpSdna1LLrlEBQUFysnJqQonkpSSkqJJkyZJklatWuVxn8svv7xGOJGk8ePH68orr1Rubq6Kioq8juGRRx6pCieS1KJFC82aNUuS9Oc//zn0DwcAgElQQQGAANSrV09ZWVk1jnfs2FFffvmlBg8e7PWcJBUUFNQ4V1paqnfeeUcbN25UYWGhzp49W3Wt0+nUzp071bt37xrvu/nmm2scGzp0qJo2baqdO3eqoKBA6enpwX48AABMg4ACAAFo3bq16tSpU+N448aNJUlt2rTxee706dMex1esWKGbb75Zhw8f9vm8kpKSGseaNm2q5ORkr9e3a9dOx44dU35+PgEFAGBpTPECADcVFRVej9e2RG+gS/iWlpbqxhtv1JEjR/TII49oy5YtKisrU0VFhZxOp8aMGSNJNRrrAQCIF1RQAMSV+vXrS6oMCt7s3bs3os//6KOPdPToUV1//fWaMWNGjfPfffedz/ceO3ZMJSUlXqsoe/bskSRlZGQYN1gAAGKACgqAuOKa/uRtv5HCwkJt2LAhos8/duyYJKlt27Y1zu3YsaPW57/55ps1jv3nP/9RYWGhOnbsyPQuAIDlEVAAxJUOHTooMzNTmzZt0uLFi6uOl5WVadKkSSouLo7o87t06SJJWrBggUcPyvHjxzVx4sSqZnlfZsyYoV27dlW9PnLkiO677z5J0uTJk40fMAAAUcYULwBxZ9q0aZo4caKuu+469e/fX40bN9bnn3+ulJQUXXvttR7BxWiXXnqprrnmGn3wwQfq0qVL1cpgubm5at68ud/nZ2Zm6qKLLlKPHj00cOBA1atXTytWrNDx48eVnZ2te+65p8Z7Lr/88qqf8/LyJEkzZ87Uiy++KEnq3bu3/vrXvxr8KQEACB0VFABxx7X7e7du3fTxxx/r888/14gRI/Tpp5+qSZMmEX/+4sWL9dBDD6lFixZ69913tX79et18881au3at3+c7HA69/fbbmjJlijZt2qSlS5cqNTVVDz30kJYtW6a6dWv+ndNnn31W9efQoUOSKvtcXMe2bNkSqY8JAEBIHE6WigEA03M4HGrXrp3H9C4AAOyICgoAAAAA0yCgAAAAADANAgoAAAAA02AVLwCwANoFAQDxggoKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwDQIKAAAAANMgoAAAAAAwjf8PZolBMYvq32oAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "data.plt.umap(res_key='umap_test', cluster_key='leiden_test')" ] }, { "attachments": {}, "cell_type": "markdown", "id": "11bb872b", "metadata": {}, "source": [ "## Using result in `.h5ad`" ] }, { "attachments": {}, "cell_type": "markdown", "id": "075b8e16", "metadata": {}, "source": [ "By glancing at `data.adata`, we find `neighbors` in `.uns` are produced by other bioinformatical softwares. We can use it as input to Leiden clustering." ] }, { "cell_type": "code", "execution_count": 9, "id": "72fc7b4b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 9092 × 10276\n", " obs: 'annotation', 'celltype', 'class', 'leiden', 'timepoint', 'total_counts', 'n_genes_by_counts', 'pct_counts_mt', 'leiden_test'\n", " var: 'fuzzy_C_result', 'greater_pvalue', 'less_pvalue', 'log1p_mean_counts', 'log1p_total_counts', 'logFC', 'n_cells', 'n_counts', 'mean_umi', 'means', 'dispersions', 'dispersions_norm', 'highly_variable'\n", " uns: 'sn', 'highly_variable_genes', 'pca_test', 'neighbors_test', 'umap_test', 'leiden_test', 'gene_exp_leiden_test'\n", " obsm: 'spatial', 'X_pca_test', 'X_umap_test'\n", " obsp: 'neighbors_test_connectivities', 'neighbors_test_distances'" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.adata" ] }, { "cell_type": "code", "execution_count": 10, "id": "c66ed834", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[2023-11-14 16:46:30][Stereo][77692][MainThread][140240360204096][st_pipeline][37][INFO]: start to run leiden...\n", "[2023-11-14 16:46:31][Stereo][77692][MainThread][140240360204096][st_pipeline][40][INFO]: leiden end, consume time 1.1456s.\n" ] } ], "source": [ "data.tl.leiden(neighbors_res_key='neighbors_test', res_key='leiden_new')" ] }, { "cell_type": "code", "execution_count": 11, "id": "8de438a2", "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", "
annotationcelltypeclassleidentimepointtotal_countsn_genes_by_countspct_counts_mtleiden_testleiden_new
209_102-0BrainRglDF12Dorsal forebrain7E9.512112.035270.9081902222
209_87-0BrainRglDF12Dorsal forebrain7E9.513954.037850.7166402222
209_88-0BrainRglDF12Dorsal forebrain7E9.513810.037660.7820422222
209_89-0BrainRglDF12Dorsal forebrain7E9.515159.039250.8641732222
209_90-0BrainRglDF12Dorsal forebrain7E9.515711.040240.6683222222
.................................
679_180-7BrainNeur511Cortical or hippocampal glutamatergic3E16.56986.021240.8445461111
679_181-7BrainNeur511Cortical or hippocampal glutamatergic3E16.56461.020630.6655321111
679_182-7BrainNeur511Cortical or hippocampal glutamatergic3E16.57860.022650.7251911111
679_183-7BrainNeur511Cortical or hippocampal glutamatergic3E16.57732.021721.1381271111
679_184-7BrainNeur511Cortical or hippocampal glutamatergic3E16.58195.020910.6955461111
\n", "

9092 rows × 10 columns

\n", "
" ], "text/plain": [ " annotation celltype class leiden \\\n", "209_102-0 Brain RglDF12 Dorsal forebrain 7 \n", "209_87-0 Brain RglDF12 Dorsal forebrain 7 \n", "209_88-0 Brain RglDF12 Dorsal forebrain 7 \n", "209_89-0 Brain RglDF12 Dorsal forebrain 7 \n", "209_90-0 Brain RglDF12 Dorsal forebrain 7 \n", "... ... ... ... ... \n", "679_180-7 Brain Neur511 Cortical or hippocampal glutamatergic 3 \n", "679_181-7 Brain Neur511 Cortical or hippocampal glutamatergic 3 \n", "679_182-7 Brain Neur511 Cortical or hippocampal glutamatergic 3 \n", "679_183-7 Brain Neur511 Cortical or hippocampal glutamatergic 3 \n", "679_184-7 Brain Neur511 Cortical or hippocampal glutamatergic 3 \n", "\n", " timepoint total_counts n_genes_by_counts pct_counts_mt \\\n", "209_102-0 E9.5 12112.0 3527 0.908190 \n", "209_87-0 E9.5 13954.0 3785 0.716640 \n", "209_88-0 E9.5 13810.0 3766 0.782042 \n", "209_89-0 E9.5 15159.0 3925 0.864173 \n", "209_90-0 E9.5 15711.0 4024 0.668322 \n", "... ... ... ... ... \n", "679_180-7 E16.5 6986.0 2124 0.844546 \n", "679_181-7 E16.5 6461.0 2063 0.665532 \n", "679_182-7 E16.5 7860.0 2265 0.725191 \n", "679_183-7 E16.5 7732.0 2172 1.138127 \n", "679_184-7 E16.5 8195.0 2091 0.695546 \n", "\n", " leiden_test leiden_new \n", "209_102-0 22 22 \n", "209_87-0 22 22 \n", "209_88-0 22 22 \n", "209_89-0 22 22 \n", "209_90-0 22 22 \n", "... ... ... \n", "679_180-7 11 11 \n", "679_181-7 11 11 \n", "679_182-7 11 11 \n", "679_183-7 11 11 \n", "679_184-7 11 11 \n", "\n", "[9092 rows x 10 columns]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.adata.obs" ] }, { "attachments": {}, "cell_type": "markdown", "id": "f921c9b4", "metadata": {}, "source": [ "## Writing to `.h5ad`" ] }, { "attachments": {}, "cell_type": "markdown", "id": "17a169e1", "metadata": {}, "source": [ "Use `AnnData`'s function `write_h5ad` to write `AnnBasedStereoExpData` to `.h5ad` file." ] }, { "cell_type": "code", "execution_count": 12, "id": "90ff541b", "metadata": {}, "outputs": [], "source": [ "data.adata.write_h5ad('./SS200000135TL_D1.stereo.h5ad')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.8.15" }, "vscode": { "interpreter": { "hash": "70dbeb2a90198859cd91b6ea0f3adc73d66939fe301617b631d99dfc954c0323" } } }, "nbformat": 4, "nbformat_minor": 5 }