{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Create UMAP of single cell features" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3 png img file paths loaded: \n", "3 tif img file paths loaded: \n" ] } ], "source": [ "from livecellx.sample_data import tutorial_three_image\n", "\n", "dic_dataset, mask_dataset = tutorial_three_image(dic_dataset_path=\"../datasets/test_data_STAV-A549/DIC_data\", mask_dataset_path=\"../datasets/test_data_STAV-A549/mask_data\")" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 3/3 [00:07<00:00, 2.43s/it]\n" ] } ], "source": [ "from livecellx.core.io_sc import prep_scs_from_mask_dataset\n", "scs = prep_scs_from_mask_dataset(mask_dataset, dic_dataset)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from livecellx.trajectory.feature_extractors import compute_haralick_features, compute_skimage_regionprops\n", "from livecellx.preprocess.utils import normalize_img_to_uint8\n", "for sc in scs:\n", " features = compute_skimage_regionprops(sc, preprocess_img_func=normalize_img_to_uint8, sc_level_normalize=True)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "skimage_area 22262.000000\n", "skimage_area_bbox 39672.000000\n", "skimage_area_convex 23414.000000\n", "skimage_area_filled 22262.000000\n", "skimage_axis_major_length 263.397536\n", " ... \n", "skimage_orientation -1.053940\n", "skimage_perimeter 660.825469\n", "skimage_perimeter_crofton 629.183347\n", "skimage_solidity 0.950799\n", "t 2.000000\n", "Length: 144, dtype: float64" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sc.get_feature_pd_series()" ] }, { "cell_type": "code", "execution_count": 5, "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", "
skimage_areaskimage_area_bboxskimage_area_convexskimage_area_filledskimage_axis_major_lengthskimage_axis_minor_lengthskimage_centroid-0skimage_centroid-1skimage_centroid_local-0skimage_centroid_local-1...skimage_moments_weighted_normalized-2-2skimage_moments_weighted_normalized-2-3skimage_moments_weighted_normalized-3-0skimage_moments_weighted_normalized-3-1skimage_moments_weighted_normalized-3-2skimage_moments_weighted_normalized-3-3skimage_orientationskimage_perimeterskimage_perimeter_croftonskimage_solidity
0-0.729877-0.697465-0.785715-0.729877-1.025767-0.300223-0.557043-0.863007-0.557043-0.863007...-1.1445370.7053020.7910710.81463-0.7033681.11867-0.394298-0.881596-0.9121291.276949
1-0.729877-0.697465-0.785715-0.729877-1.025767-0.300223-0.557043-0.863007-0.557043-0.863007...-1.1445370.7053020.7910710.81463-0.7033681.11867-0.394298-0.881596-0.9121291.276949
\n", "

2 rows × 143 columns

\n", "
" ], "text/plain": [ " skimage_area skimage_area_bbox skimage_area_convex skimage_area_filled \\\n", "0 -0.729877 -0.697465 -0.785715 -0.729877 \n", "1 -0.729877 -0.697465 -0.785715 -0.729877 \n", "\n", " skimage_axis_major_length skimage_axis_minor_length skimage_centroid-0 \\\n", "0 -1.025767 -0.300223 -0.557043 \n", "1 -1.025767 -0.300223 -0.557043 \n", "\n", " skimage_centroid-1 skimage_centroid_local-0 skimage_centroid_local-1 \\\n", "0 -0.863007 -0.557043 -0.863007 \n", "1 -0.863007 -0.557043 -0.863007 \n", "\n", " ... skimage_moments_weighted_normalized-2-2 \\\n", "0 ... -1.144537 \n", "1 ... -1.144537 \n", "\n", " skimage_moments_weighted_normalized-2-3 \\\n", "0 0.705302 \n", "1 0.705302 \n", "\n", " skimage_moments_weighted_normalized-3-0 \\\n", "0 0.791071 \n", "1 0.791071 \n", "\n", " skimage_moments_weighted_normalized-3-1 \\\n", "0 0.81463 \n", "1 0.81463 \n", "\n", " skimage_moments_weighted_normalized-3-2 \\\n", "0 -0.703368 \n", "1 -0.703368 \n", "\n", " skimage_moments_weighted_normalized-3-3 skimage_orientation \\\n", "0 1.11867 -0.394298 \n", "1 1.11867 -0.394298 \n", "\n", " skimage_perimeter skimage_perimeter_crofton skimage_solidity \n", "0 -0.881596 -0.912129 1.276949 \n", "1 -0.881596 -0.912129 1.276949 \n", "\n", "[2 rows x 143 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def create_sc_table(scs, normalize_features=True):\n", " import pandas as pd\n", " import numpy as np\n", " df = pd.DataFrame([sc.get_feature_pd_series() for sc in scs])\n", " if normalize_features:\n", " for col in df.columns:\n", " df[col] = (df[col] - df[col].mean())\n", " col_std = df[col].std()\n", " if col_std != 0 and not np.isnan(col_std):\n", " df[col] /= col_std\n", " # remove column t from df\n", " df.drop(\"t\", axis=1, inplace=True)\n", " # df[\"sc_id\"] = [sc.id for sc in scs]\n", " # df[\"t\"] = [sc.timeframe for sc in scs]\n", " # df.set_index(\"sc_id\", inplace=True)\n", " return df\n", "\n", "sc_feature_table = create_sc_table(scs)\n", "sc_feature_table[:2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Normalize features" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Perform UMAP on features" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "import umap\n", "reducer = umap.UMAP()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# check if any columns are all NaN\n", "sc_feature_table = sc_feature_table.dropna(axis=1, how=\"all\")" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "embedding = reducer.fit_transform(sc_feature_table)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(42, 2)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "embedding.shape" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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rAo4fKxZs0ZXXHGFEhIS5DiOFi9eXGH7tGnT5DhOhWX8+PENVS8AAGjmAg4fBQUFGjRokJ599tkq24wfP15ZWVnlyyuvvFKvIgEAQMsRGugOKSkpSklJqbZNRESE4uPj61wUAABouRplzsfq1asVFxen3r1764477tChQ4eqbFtcXCyPx1NhAQAALVeDh4/x48frpZde0ooVK/SHP/xB6enpSklJkdfr9ds+LS1Nbre7fElKSmrokgAAQBPiGGNMnXd2HC1atEgTJ06sss2ePXt0xhln6P3339fo0aMrbS8uLlZxcXH51x6PR0lJScrLy1NMTExdSwMAABZ5PB653e5afX43+q22p59+ujp16qTdu3f73R4REaGYmJgKCwAAaLkaPXx8/fXXOnTokLp27drYpwIAAM1AwHe7HD16tMIoxt69e7VlyxbFxsYqNjZWDz74oCZPnqz4+Hh9+eWXuueee9SrVy+NGzeuQQsHAADNU8DhY+PGjbr44ovLv7777rslSVOnTtXzzz+vrVu36u9//7tyc3OVkJCgsWPH6ve//70iIiIarmoAANBs1WvCaWMIZMIKAABoGprUhFMAAIDvI3wAAACrCB8AAMAqwgcAALCK8AEAAKwifAAAAKsIHwAAwCrCBwAAsIrwAQAArCJ8AAAAqwgfAADAKsIHAACwivABAACsInwAAACrCB8AAMAqwgcAALCK8AEAAKwifAAAAKsIHwAAwCrCBwAAsIrwAQAArCJ8AAAAqwgfAADAKsIHAACwivABAACsInwAAACrCB8AAMAqwgcAALCK8AEAAKwifAAAAKsIHwAAwCrCBwAAsIrwAQAArCJ8AAAAqwgfAADAKsIHAACwivABAACsInwAAACrCB8AAMAqwgcAALCK8AEAAKwifAAAAKsIHwAAwCrCBwAAsIrwAQAArCJ8AAAAqwgfAADAKsIHAACwivABAACsInwAAACrAg4fa9as0RVXXKGEhAQ5jqPFixdX2G6M0W9+8xt17dpVkZGRGjNmjHbt2tVQ9QIAgGYu4PBRUFCgQYMG6dlnn/W7/dFHH9XTTz+tF154QevXr1fbtm01btw4FRUV1btYAADQ/IUGukNKSopSUlL8bjPG6Mknn9R9992nCRMmSJJeeukldenSRYsXL9Z1111Xv2oBAECz16BzPvbu3avs7GyNGTOmfJ3b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YsUK/e1vf1NaWlpQarWpqr9H999/v3Jzc/X++++rU6dOWrx4sa655hp98MEHGjBgQJCqbXy9e/fWli1blJeXp3/961+aOnWq0tPTg11WcAT7uo8tOuUadGFhoQkLCzNLly6t0G769Olm3LhxlquzLzU11SQmJpo9e/ZUWL9ixQojyRw5cqTC+u7du5vHH3/cYoXBU1XfnOTxeExycrIZPXq0OXbsmOXqgqeqfvnZz35mHMcxISEh5Ysk43K5zIUXXhicYi2qql/27NljJJl//OMfFdZfc801ZsqUKTZLDIqq+mX37t1Gktm+fXuF9aNHjzYzZsywWWLQjR492tx2222t8vduq73sUlJSopKSkkqzzkNCQsr/xdISGWM0c+ZMLVq0SCtXrlTPnj0rbB8yZIjCwsK0YsWK8nUZGRnat2+fkpOTbZdrVU19I5WNeIwdO1bh4eFasmSJ2rRpE4RK7aqpX+69915t3bpVW7ZsKV8k6YknntDcuXODULEdNfXLaaedpoSEhEq3me7cuVM9evSwWapVNfVLYWGhJLW6373++Hw+FRcXt87fu0GNPo0sPz/fbN682WzevNlIMo8//rjZvHmz+eqrr4wxxlx44YWmX79+ZtWqVWbPnj1m7ty5pk2bNua5554LcuWN54477jBut9usXr3aZGVllS+FhYXlbW6//XbTvXt3s3LlSrNx40aTnJxskpOTg1i1HTX1TV5enhk2bJgZMGCA2b17d4U2paWlQa6+8dTmZ+ZUagV3u9SmX5544gkTExNjFi5caHbt2mXuu+8+06ZNG7N79+4gVt64auqX48ePm169epmRI0ea9evXm927d5vHHnvMOI5j3n777SBX33juvfdek56ebvbu3Wu2bt1q7r33XuM4jnnvvfeMMa3v926LDh+rVq0ykiotU6dONcYYk5WVZaZNm2YSEhJMmzZtTO/evc2f/vQn4/P5glt4I/LXH5LM3Llzy9scO3bM3HnnnaZDhw4mKirKXHnllSYrKyt4RVtSU99U9fMkyezduzeotTem2vzM+NunpYeP2vZLWlqaSUxMNFFRUSY5Odl88MEHwSnYktr0y86dO82kSZNMXFyciYqKMgMHDqx0621L8+Mf/9j06NHDhIeHm86dO5vRo0eXBw9jWt/vXccYYxpnTAUAAKCyVjvnAwAABAfhAwAAWEX4AAAAVhE+AACAVYQPAABgFeEDAABYRfgAAABWET4AAIBVhA8AAGAV4QMAAFhF+AAAAFYRPgAAgFX/HyAPu1WeE1zLAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "plt.scatter(\n", " embedding[:, 0],\n", " embedding[:, 1],\n", " c=[sc.timeframe for sc in scs],\n", ")" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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GjdunJYsWaLPP/9cxcXFuvjii5Wbmxv0uNjY2HLXesuWLTbVOPy6du1ari1ff/11pWUb0rWXpG+//bZc2z///HNJ0siRIys9pr5e+9zcXPXs2VNTp04NuP/JJ5/U888/rxdffFFLly5VTEyMBg4cqIKCgkrPGerfjtoUrP15eXlasWKF7rvvPq1YsULvvvuu1q5dq6FDh1Z53lB+f+oMU4elpaWZv/3tb9Uuf+jQIRMREWFmzZrl37Z69WojySxevLgGamifJ5980qSnpwctc/7555s//OEP9lQozM4880wzbtw4/3uv12uSk5PN5MmTA5a/8sorzeDBg8tt6927t7n11ltrtJ522LNnj5FkFixYUGmZadOmmbi4OPsqVYMeeOAB07Nnz2qXb8jX3hhj/vCHP5h27doZn88XcH9DufaSzOzZs/3vfT6fSUpKMk899ZR/26FDh4zb7TYzZsyo9Dyh/u2oK45ufyDLli0zksyWLVsqLRPq709dUefvfDz++ONq1qyZevXqpaeeekolJSWVll2+fLmKi4s1YMAA/7bOnTsrNTVVixcvtqO6NSYrK0sJCQlVlnvzzTfVvHlzdevWTZMmTVJeXp4NtTs+RUVFWr58ebnr5nA4NGDAgEqv2+LFi8uVl6SBAwfW++sslV5rSVVe75ycHKWlpSklJUXDhg3TqlWr7KhejVi/fr2Sk5PVtm1bXXvttdq6dWulZRvytS8qKtIbb7yhm266qdzCmkdrSNe+zKZNm5SZmVnu2sbFxal3796VXttj+dtRn2RlZcmyLMXHxwctF8rvT11R5xaWO9L48eN16qmnKiEhQYsWLdKkSZO0a9cuPfPMMwHLZ2ZmKjIyssKFSkxMVGZmpg01rhkbNmzQlClT9PTTTwctd8011ygtLU3JyclauXKlJk6cqLVr1+rdd9+1qabHZt++ffJ6vUpMTCy3PTExUWvWrAl4TGZmZsDy9fk6S6WrOk+YMEFnn322unXrVmm5Tp066ZVXXlGPHj2UlZWlp59+Wn379tWqVauCLsxYF/Xu3VvTp09Xp06dtGvXLj344IM699xz9dNPP6lJkyYVyjfUay9Jc+bM0aFDh/Tb3/620jIN6dofqez6hXJtj+VvR31RUFCgiRMnatSoUUEXlAv196eusD183HvvvXriiSeCllm9erU6d+6su+66y7+tR48eioyM1K233qrJkyfXy6lmQ2l7mR07duiSSy7RyJEjdcsttwQ9dsyYMf5/d+/eXa1atdKFF16ojRs3ql27dsdXedhi3Lhx+umnn6p8ZtunTx/16dPH/75v377q0qWL/vnPf+rhhx+u6WqG1aBBg/z/7tGjh3r37q20tDTNnDlTN998cy3WzH7//ve/NWjQICUnJ1dapiFdewRWXFysK6+8UsYYvfDCC0HL1tffH9vDx9133x001UtS27ZtA27v3bu3SkpKtHnzZnXq1KnC/qSkJBUVFenQoUPl7n7s3r1bSUlJx1PtsAi17Tt37lT//v3Vt29fvfTSSyF/Xu/evSWV3jmpy+GjefPmcjqdFUYlBbtuSUlJIZWvD26//XZ9+OGHWrhwYcj/DzYiIkK9evXShg0baqh29omPj1fHjh0rbUtDvPaStGXLFn3xxRch36lsKNe+7Prt3r1brVq18m/fvXu3TjnllIDHHMvfjrquLHhs2bJFX375ZdC7HoFU9ftTV9je56NFixbq3Llz0FdkZGTAYzMyMuRwONSyZcuA+0877TRFRERo7ty5/m1r167V1q1by/0/hdoSStt37Nihfv366bTTTtO0adPkcIR+qTIyMiSp3C9yXRQZGanTTjut3HXz+XyaO3dupdetT58+5cpL0ueff14nrnOojDG6/fbbNXv2bH355ZdKT08P+Rxer1c//vhjnb/W1ZGTk6ONGzdW2paGdO2PNG3aNLVs2VKDBw8O6biGcu3T09OVlJRU7tp6PB4tXbq00mt7LH876rKy4LF+/Xp98cUXatasWcjnqOr3p86o7R6vlVm0aJH529/+ZjIyMszGjRvNG2+8YVq0aGFuuOEGf5nt27ebTp06maVLl/q3jR071qSmppovv/zSfPfdd6ZPnz6mT58+tdGEY7Z9+3bTvn17c+GFF5rt27ebXbt2+V9Hljmy7Rs2bDAPPfSQ+e6778ymTZvMe++9Z9q2bWvOO++82mpGSP7zn/8Yt9ttpk+fbn7++WczZswYEx8fbzIzM40xxlx//fXm3nvv9Zf/5ptvjMvlMk8//bRZvXq1eeCBB0xERIT58ccfa6sJx+y2224zcXFxZv78+eWudV5enr/M0e1/8MEHzaeffmo2btxoli9fbq6++moTFRVlVq1aVRtNOC533323mT9/vtm0aZP55ptvzIABA0zz5s3Nnj17jDEN+9qX8Xq9JjU11UycOLHCvoZ07bOzs833339vvv/+eyPJPPPMM+b777/3j+Z4/PHHTXx8vHnvvffMypUrzbBhw0x6errJz8/3n+OCCy4wU6ZM8b+v6m9HXRKs/UVFRWbo0KGmdevWJiMjo9zfgsLCQv85jm5/Vb8/dVWdDR/Lly83vXv3NnFxcSYqKsp06dLFPPbYY6agoMBfZtOmTUaSmTdvnn9bfn6++f3vf2+aNm1qGjVqZC677LJyX9r1wbRp04ykgK8yR7d969at5rzzzjMJCQnG7Xab9u3bm3vuucdkZWXVUitCN2XKFJOammoiIyPNmWeeaZYsWeLfd/7555vRo0eXKz9z5kzTsWNHExkZabp27Wo++ugjm2scHpVd62nTpvnLHN3+CRMm+H9WiYmJ5tJLLzUrVqywv/JhcNVVV5lWrVqZyMhIc9JJJ5mrrrrKbNiwwb+/IV/7Mp9++qmRZNauXVthX0O69vPmzQv4v/Wy9vl8PnPfffeZxMRE43a7zYUXXljhZ5KWlmYeeOCBctuC/e2oS4K1v+xveqDXkd9xR7e/qt+fusoyxpgav70CAABwWJ2f5wMAADQshA8AAGArwgcAALAV4QMAANiK8AEAAGxF+AAAALYifAAAAFsRPgAAgK0IHwAAwFaEDwAAYCvCBwAAsBXhAwAA2Or/AwNUkjA6lY1FAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "unnormalized_img_features = create_sc_table(scs, normalize_features=False)\n", "# drop na\n", "unnormalized_img_features = unnormalized_img_features.dropna(axis=1, how=\"all\")\n", "reducer = umap.UMAP()\n", "unnormalized_embedding = reducer.fit_transform(unnormalized_img_features)\n", "plt.scatter(\n", " unnormalized_embedding[:, 0],\n", " unnormalized_embedding[:, 1],\n", " c=[sc.timeframe for sc in scs],\n", ")\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "list(unnormalized_img_features.keys())" ] } ], "metadata": { "kernelspec": { "display_name": "livecell-work", "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.10.9" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }