{ "cells": [ { "cell_type": "markdown", "id": "4bd7d1bc-b118-4b48-91f0-f464d7fef6b7", "metadata": { "tags": [] }, "source": [ "# GRN formation" ] }, { "cell_type": "code", "execution_count": 1, "id": "b6dddc03-664a-49c6-abdf-efde4121dc74", "metadata": {}, "outputs": [], "source": [ "from grnet.clusters import CellClasses\n", "from grnet.models import PC, PretrainedModel\n", "from grnet.plot import grnplot\n", "from grnet.toydata import load_dataset, load_metadata\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "id": "ffba1514-f3e7-4a56-89df-36c3f9bfacdc", "metadata": {}, "source": [ "## data loading" ] }, { "cell_type": "code", "execution_count": 2, "id": "efa27eaa-2070-4516-b672-71a3d4a53ead", "metadata": {}, "outputs": [], "source": [ "data = load_dataset(\"prototype1\")\n", "meta = load_metadata(\"prototype1\")\n", "\n", "lst_data = [\n", " data.loc[meta.cluster == v, :].iloc[:, :5] for v in meta.cluster.unique()\n", "]" ] }, { "cell_type": "markdown", "id": "fac8dabc-a5c1-4a46-88c5-f052af3b4d6a", "metadata": {}, "source": [ "## GRN formation with PC algorithm" ] }, { "cell_type": "code", "execution_count": 3, "id": "ef87c159-6cd8-45b8-8ed5-076429426a00", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:pgmpy: Datatype (N=numerical, C=Categorical Unordered, O=Categorical Ordered) inferred from data: \n", " {'gene_1': 'N', 'gene_2': 'N', 'gene_3': 'N', 'gene_4': 'N', 'gene_5': 'N'}\n", "INFO:pgmpy: Datatype (N=numerical, C=Categorical Unordered, O=Categorical Ordered) inferred from data: \n", " {'gene_1': 'N', 'gene_2': 'N', 'gene_3': 'N', 'gene_4': 'N', 'gene_5': 'N'}\n", "INFO:pgmpy: Datatype (N=numerical, C=Categorical Unordered, O=Categorical Ordered) inferred from data: \n", " {'gene_1': 'N', 'gene_2': 'N', 'gene_3': 'N', 'gene_4': 'N', 'gene_5': 'N'}\n", "INFO:pgmpy: Datatype (N=numerical, C=Categorical Unordered, O=Categorical Ordered) inferred from data: \n", " {'gene_1': 'N', 'gene_2': 'N', 'gene_3': 'N', 'gene_4': 'N', 'gene_5': 'N'}\n", "INFO:pgmpy: Datatype (N=numerical, C=Categorical Unordered, O=Categorical Ordered) inferred from data: \n", " {'gene_1': 'N', 'gene_2': 'N', 'gene_3': 'N', 'gene_4': 'N', 'gene_5': 'N'}\n" ] } ], "source": [ "models = [PC(v) for v in lst_data]\n", "\n", "for v in models:\n", " v.estimate()" ] }, { "cell_type": "markdown", "id": "733de36b-0a5e-42b8-8f15-af7ada17b99a", "metadata": {}, "source": [ "- edges are resturned as a list" ] }, { "cell_type": "code", "execution_count": 4, "id": "27814511-b749-4a6f-a3ea-05e3b180a4c1", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:pgmpy: Datatype (N=numerical, C=Categorical Unordered, O=Categorical Ordered) inferred from data: \n", " {'gene_1': 'N', 'gene_2': 'N', 'gene_3': 'N', 'gene_4': 'N', 'gene_5': 'N'}\n" ] }, { "data": { "text/plain": [ "[('gene_4', 'gene_2')]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "models[0].estimate()\n", "models[0].edges" ] }, { "cell_type": "markdown", "id": "a5750569-78db-4038-88eb-a23cb2b09d21", "metadata": {}, "source": [ "- edge information can be represented as a GRN matrix" ] }, { "cell_type": "code", "execution_count": 5, "id": "ef65da26-c076-44ee-bc99-3c79d7398610", "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", "
gene_1gene_2gene_3gene_4gene_5
gene_11.00.00.00.00.0
gene_20.01.00.01.00.0
gene_30.00.01.00.00.0
gene_40.00.00.01.00.0
gene_50.00.00.00.01.0
\n", "
" ], "text/plain": [ " gene_1 gene_2 gene_3 gene_4 gene_5\n", "gene_1 1.0 0.0 0.0 0.0 0.0\n", "gene_2 0.0 1.0 0.0 1.0 0.0\n", "gene_3 0.0 0.0 1.0 0.0 0.0\n", "gene_4 0.0 0.0 0.0 1.0 0.0\n", "gene_5 0.0 0.0 0.0 0.0 1.0" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "models[0].get_matrix()" ] }, { "cell_type": "markdown", "id": "a2bca829-87f0-4605-8c0e-2336727cb020", "metadata": {}, "source": [ "**Note**:\n", "GRN matrices should fulfill the requirements as follows;\n", "1. DxD matrix (where D: the number of genes, i.e., the number of columns)\n", "2. rows names and columns names coincide each other\n", "3. all elements are either 0 or 1\n", "4. all diagonal elements are 1\n", "5. if the GRN is an undirected graph, GRN matrix can be either upper/lower triangular" ] }, { "cell_type": "markdown", "id": "b536ff30-f100-4d13-8562-df8a85b18eed", "metadata": {}, "source": [ "## Plotting GRN" ] }, { "cell_type": "code", "execution_count": 6, "id": "eac8998f-01b6-457d-8ff5-6a9f4229c382", "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", "grnplot(models[0], ax=ax)\n", "\n", "ax.set(title=\"cluster_1 (prototype1)\");" ] }, { "cell_type": "markdown", "id": "95e12fb5-7d7b-4515-bc19-b90582fc5856", "metadata": {}, "source": [ "## Generate `Estimator` Class from GRN matrices" ] }, { "cell_type": "markdown", "id": "b3e39e70-d4fb-40f2-ac3c-fec5fa7cf633", "metadata": {}, "source": [ "- use `PretrainedModel` class" ] }, { "cell_type": "code", "execution_count": 7, "id": "dadbb4c3-544b-41b2-b739-776a67fbe736", "metadata": {}, "outputs": [], "source": [ "grn_mat = models[0].get_matrix()\n", "\n", "pre = PretrainedModel(grn_mat)" ] }, { "cell_type": "markdown", "id": "dbda12cb-2543-48ca-bb96-3ecb507ba1f4", "metadata": {}, "source": [ "- you can access to edges/matrix" ] }, { "cell_type": "code", "execution_count": 8, "id": "392b9c93-9784-417e-a37d-92416457c77c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[('gene_2', 'gene_4')]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pre.edges" ] }, { "cell_type": "code", "execution_count": 9, "id": "c3dd44e0-b94b-42ac-9f8c-f351e238f8c5", "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", "
gene_1gene_2gene_3gene_4gene_5
gene_11.00.00.00.00.0
gene_20.01.00.01.00.0
gene_30.00.01.00.00.0
gene_40.00.00.01.00.0
gene_50.00.00.00.01.0
\n", "
" ], "text/plain": [ " gene_1 gene_2 gene_3 gene_4 gene_5\n", "gene_1 1.0 0.0 0.0 0.0 0.0\n", "gene_2 0.0 1.0 0.0 1.0 0.0\n", "gene_3 0.0 0.0 1.0 0.0 0.0\n", "gene_4 0.0 0.0 0.0 1.0 0.0\n", "gene_5 0.0 0.0 0.0 0.0 1.0" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pre.get_matrix()" ] }, { "cell_type": "markdown", "id": "17c461dd-4f1b-4cdd-b8e8-bb931f2dd266", "metadata": {}, "source": [ "- for `self.data`, the GRN matrix will be returned" ] }, { "cell_type": "code", "execution_count": 10, "id": "61b2e396-146a-416d-81e4-995f6ed2a6f8", "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", "
gene_1gene_2gene_3gene_4gene_5
gene_1TrueTrueTrueTrueTrue
gene_2TrueTrueTrueTrueTrue
gene_3TrueTrueTrueTrueTrue
gene_4TrueTrueTrueTrueTrue
gene_5TrueTrueTrueTrueTrue
\n", "
" ], "text/plain": [ " gene_1 gene_2 gene_3 gene_4 gene_5\n", "gene_1 True True True True True\n", "gene_2 True True True True True\n", "gene_3 True True True True True\n", "gene_4 True True True True True\n", "gene_5 True True True True True" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pre.data == pre.get_matrix()" ] }, { "cell_type": "markdown", "id": "63848043-0f75-4998-bec6-e337f259cad4", "metadata": {}, "source": [ "- `PretrainedModel` is also visualized by `grnplot` function" ] }, { "cell_type": "code", "execution_count": 11, "id": "bdb5ef24-ee70-454e-b2b4-f62fb5c85c0d", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVMAAAFeCAYAAAA41fyqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAALTlJREFUeJzt3XtcVHXixvHPgDgiioqI18ILpHiDlBLxgmWkdhE1c9ssNzVdzbba3VqrNcN1bWvNjdbsorWtZb+2vORaVlteyBBTy8wLSmYOhZIKeQkEBeb8/jhJIgMiDpxheN6vly/PnPnO4TkMPJwzc84Zm2EYBiIickl8rA4gIuINVKYiIm6gMhURcQOVqYiIG6hMRUTcQGUqIuIGKlMRETdQmYqIuIHKVETEDVSmbpKcnIzNZiM5OdnqKB7tnnvuIT4+3uoYddZtt93GmDFjrI7hlVSmtURqaiqJiYkcP37ckq+fm5vL448/ztChQwkKCsJms/Hvf//7opZx4MABXn75ZR599NHqCXkBp06dIjEx8ZL+4Fn9PJRnzpw5DB8+nJYtW2Kz2UhMTHQ5bvr06SxfvpyvvvqqZgPWASrTWiI1NZVZs2ZZ9kucnZ3NX/7yF/bs2UNkZGSVlvHss8/SoUMHrrnmGjenq5xTp04xa9asSy5TK5+H8syYMYOtW7dy5ZVXVjjuyiuvJDo6mnnz5tVQsrpDZVrHnTp1qlLjWrduTVZWFhkZGcydO/eiv05hYSFvvPGG23cxK5vf2x04cICsrCyWLFlywbFjxoxhxYoV5Obm1kCyukNlWkkHDx5k4sSJtGnTBrvdTocOHZg6dSpnzpwp9zHt27fnrrvuKjN/0KBBDBo0qNS8+fPn061bNxo2bEizZs2Ijo7m//7v/wBITEzkoYceAqBDhw7YbDZsNhsOh6Pk8UuWLKF37974+/sTFBTEbbfdxvfff1/m63bv3p0vvviCgQMH0rBhw0rvctvtdlq1alWpsa6kpKSQnZ3NddddV2r+2dea33rrLR599FFatWpFQEAAw4cPv6j8R44cYeLEibRs2ZIGDRoQGRnJ4sWLSx7rcDho0aIFALNmzSr5Hp67O7xu3ToGDBhAQEAATZs2JSEhgT179pTcX9HzEBcXV+4We+fOnRkyZEhJDpvNxtNPP80zzzxDaGgo/v7+xMXFsWvXrjKP3bt3L6NHjyYoKIgGDRoQHR3NqlWryoxr3759ed/6MuLj48nLy+Pjjz+u9GPkwupZHaA2OHToEFdffTXHjx9n8uTJdOnShYMHD7Js2TJOnTpF/fr1L2n5ixYt4r777mP06NHcf//9FBQUsGPHDjZv3sztt9/OqFGj+Prrr3nzzTd55plnCA4OBigphzlz5vDYY48xZswY7r77bo4ePcr8+fMZOHAgX375JU2bNi35Wjk5OQwbNozbbruNO+64g5YtW15S9spKTU3FZrOVuxs6Z84cbDYb06dP58iRIyQlJXHdddexfft2/P39K8yfn5/PoEGD+Oabb7j33nvp0KEDS5cu5a677uL48ePcf//9tGjRghdeeIGpU6cycuRIRo0aBUDPnj0BWLNmDcOGDaNjx44kJiaSn5/P/Pnz6devH9u2baN9+/YVPg933nknkyZNYteuXXTv3r0k79atW/n666+ZMWNGqfV97bXX+Omnn5g2bRoFBQU8++yzXHvttezcubPkOdm9ezf9+vWjbdu2PPzwwwQEBPD2228zYsQIli9fzsiRI6v0XHTt2hV/f382btxY5WWIC4Zc0Lhx4wwfHx9j69atZe5zOp2GYRjG+vXrDcBYv359yX2hoaHGb37zmzKPiYuLM+Li4kpuJyQkGN26dasww9y5cw3AOHDgQKn5DofD8PX1NebMmVNq/s6dO4169eqVmh8XF2cAxosvvljh17qQrVu3GoDx6quvVvoxd9xxh9G8efMy889+39q2bWucPHmyZP7bb79tAMazzz57wfxJSUkGYCxZsqRk3pkzZ4y+ffsajRo1Klnu0aNHDcB4/PHHy+SIiooyQkJCjJycnJJ5X331leHj42OMGzeuZF55z8Px48eNBg0aGNOnTy81/7777jMCAgKM3NxcwzAM48CBAwZg+Pv7G5mZmSXjNm/ebADG73//+5J5gwcPNnr06GEUFBSUzHM6nUZsbKwRHh5eZh0utI7nuuKKK4xhw4ZVOEYujnbzL8DpdLJy5UpuvvlmoqOjy9xvs9ku+Ws0bdqUzMxMtm7detGPXbFiBU6nkzFjxpCdnV3yr1WrVoSHh7N+/fpS4+12O+PHj7/kzBcrJyeHZs2alXv/uHHjaNy4ccnt0aNH07p1a95///1S41zlf//992nVqhW//vWvS+b5+flx3333kZubyyeffFJhtqysLLZv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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(4, 4))\n", "\n", "grnplot(pre, ax=ax, color=\"C1\")\n", "\n", "ax.set(title=\"cluster_1 (prototype1)\");" ] }, { "cell_type": "markdown", "id": "c85adcaa-5cd7-436e-a6bf-540a7aba57a9", "metadata": {}, "source": [ "## Handle all clusters in the dataset with CellClasses" ] }, { "cell_type": "markdown", "id": "eb7f1fc3-220d-4162-b715-004fee1a1a28", "metadata": {}, "source": [ "- estimate GRNs for all models before assign to `CellClasses`" ] }, { "cell_type": "code", "execution_count": 12, "id": "59e90afc-ef06-4aaa-98dc-3b0baff64bc7", "metadata": {}, "outputs": [], "source": [ "dataset = CellClasses(\n", " models=models,\n", " names=[f\"cluster_{i + 1}\" for i in range(len(lst_data))],\n", " colors=\"rainbow\"\n", ")" ] }, { "cell_type": "markdown", "id": "ed51e7ce-6fcd-4e50-86db-0a48a2d074b5", "metadata": {}, "source": [ "- you can visualize them by assigning cluster names or cluster ids" ] }, { "cell_type": "code", "execution_count": 13, "id": "1a668ad6-4088-4c68-b96f-8af6cd0b0289", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABi4AAAFeCAYAAAASWecBAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAWfFJREFUeJzt3Xl4VPXZ//HPmSWTjQBJWMIqAUxCZBFQdtAiiChSt+AjrbaKCu6Pra32EYuira21xQUX0J/V2kVExAVXENQAgoqIEhIoIUAgIAlr9lnO749BIJCELcmZmfN+XRdXT858M7nHi94Zzme+9zFM0zQFAAAAAAAAAAAQAhxWFwAAAAAAAAAAAPAjggsAAAAAAAAAABAyCC4AAAAAAAAAAEDIILgAAAAAAAAAAAAhg+ACAAAAAAAAAACEDIILAAAAAAAAAAAQMgguAAAAAAAAAABAyCC4AAAAAAAAAAAAIYPgAgAAAAAAAAAAhAyCiwizZMkSGYahJUuWWF0KADQp+h8AO6MHArAzeiAAO6MHIlIRXOCkLFu2TNOmTdPevXst+fmlpaX6/e9/rzFjxigxMVGGYejvf/+7JbUAsBer+9+XX36p2267TZmZmYqLi1OnTp2UlZWl9evXW1IPAHuxugeuXbtWV111lVJTUxUbG6vk5GQNHz5c77zzjiX1ALAXq3vg0R555BEZhqGzzjrL6lIA2IDVPfDHYKa2P1988YUlNaFpEFzgpCxbtkwPPvigZc2quLhYDz30kNatW6fevXtbUgMAe7K6//3pT3/SG2+8oZEjR+qJJ57QTTfdpM8++0x9+/bV999/b0lNAOzD6h64efNmHThwQNddd52eeOIJTZ06VZJ06aWXatasWZbUBMA+rO6BRyosLNQf/vAHxcXFWV0KAJsIlR54xx136B//+EeNP926dbO0JjQul9UFAJJUXl6u2NjY465LSUlRUVGR2rZtq6+++krnnHNOE1QHAI3nRPvf3XffrX/961+Kioo6dG7ChAnq2bOnHn30Ub366quNWSYANIoT7YFjx47V2LFja5y77bbb1K9fP/31r3/VTTfd1FglAkCjOdEeeKRf//rXGjhwoPx+v4qLixupMgBofCfbA4cNG6Yrr7yyEStCqGHHRRjatm2bbrjhBrVr104ej0ddunTRlClTVF1dXev6M844Q7/4xS+OOX/eeefpvPPOq3HuqaeeUmZmpmJjY9WyZUv1799f//rXvyRJ06ZN0z333CNJ6tKly6FtWQUFBYe+/9VXX1W/fv0UExOjxMREXX311dq6desxP/ess87S119/reHDhys2Nla/+93vTui1ezwetW3b9oTWAog8du5/gwcPrhFaSFL37t2VmZmpdevWndBzAAhvdu6BtXE6nerYsaPln/4D0DTogdJnn32muXPnasaMGSf1fQDCHz0w6MCBA/L5fCf9fQhP7LgIM9u3b9e5556rvXv36qabblJ6erq2bdumuXPnqry8/LSee/bs2brjjjt05ZVX6s4771RlZaXWrFmjFStW6JprrtHll1+u9evX69///rf+9re/KTk5WZLUqlUrScE5m1OnTlVWVpYmTZqkXbt26amnntLw4cP1zTffqEWLFod+VklJiS666CJdffXV+tnPfqY2bdqcVu0AIh/971imaWrnzp3KzMw8rdcPIPTRA4PKyspUUVGhffv26e2339b777+vCRMmnNbrBxD66IGS3+/X7bffrkmTJqlnz56n9ZoBhBd6YNAvf/lLlZaWyul0atiwYXrsscfUv3//03r9CHEmwsq1115rOhwO88svvzzmsUAgYC5evNiUZC5evPjQ+c6dO5vXXXfdMetHjBhhjhgx4tDX48ePNzMzM+v9+Y899pgpydy0aVON8wUFBabT6TQfeeSRGue/++470+Vy1Tg/YsQIU5L53HPP1fuzjufLL780JZkvvfTSaT0PgPBA/zvWP/7xD1OS+eKLLzbI8wEIXfTAoJtvvtmUZEoyHQ6HeeWVV5q7d+8+5ecDEB7ogab59NNPm82bNzd/+OGHQ893vLoBRAa798ClS5eaV1xxhfniiy+ab731lvnHP/7RTEpKMqOjo81Vq1ad9PMhfDAqKowEAgHNnz9f48aNqzVRNAzjtJ6/RYsWKiws1JdffnnS3ztv3jwFAgFlZWWpuLj40J+2bduqe/fuWrx4cY31Ho9Hv/zlL0+rXgD2Qf87Vm5urm699VYNGjRI11133Wk/H4DQRQ887K677tLHH3+sl19+WRdddJH8fn+dIxIARAZ6YPBTyg888ICmTp166FPOAOyBHhgcmzx37lxdf/31uvTSS3Xvvffqiy++kGEYuu+++076+RA+GBUVRnbt2qX9+/frrLPOapTn/+1vf6uFCxfq3HPPVbdu3TR69Ghdc801GjJkyHG/d8OGDTJNU927d6/1cbfbXePr9u3bHzOrHQDqQv+raceOHbr44ovVvHlzzZ07V06n87SeD0Boowcelp6ervT0dEnStddeq9GjR2vcuHFasWLFaf/DHUBoogdK999/vxITE3X77bef9PcCCG/0wNp169ZN48eP17x58+T3+/k3cYQiuLCBuv4Rd/T/sTMyMpSXl6d3331XH3zwgd544w0988wzeuCBB/Tggw/W+zMCgYAMw9D7779fa7OIj4+v8XVMTMwpvBIAODmR2P/27duniy66SHv37tXnn3+udu3andbzAYhckdgDj3bllVfq5ptv1vr165WWltagzw0gvEVKD9ywYYNmzZqlGTNmaPv27YfOV1ZWyuv1qqCgQAkJCUpMTDzp5wYQuSKlB9anY8eOqq6uVllZmRISEhr0uREaCC7CSKtWrZSQkKDvv//+pL6vZcuW2rt37zHnN2/erNTU1Brn4uLiNGHCBE2YMEHV1dW6/PLL9cgjj+i+++5TdHR0nY2va9euMk1TXbp00ZlnnnlS9QHA8dD/giorKzVu3DitX79eCxcuVI8ePRr15wEIDfTAulVUVEgKhroAIpPde+C2bdsUCAR0xx136I477jjm8S5duujOO+/UjBkzGuXnA7CW3XtgffLz8xUdHX1MQILIwT0uwojD4dBPf/pTvfPOO/rqq6+Oedw0zVq/r2vXrvriiy9qzP999913tXXr1hrrSkpKanwdFRWlHj16yDRNeb1eScFmJumY5nf55ZfL6XTqwQcfPKYO0zSPeW4AOBn0v+AnYyZMmKDly5fr9ddf16BBgxrkeQGEPnqg9MMPPxxzzuv16pVXXlFMTAxBLhDB7N4DzzrrLL355pvH/MnMzFSnTp305ptv6oYbbjjtnwMgNNm9B0rBcVlH+/bbb/X2229r9OjRcji4vB2p2HERZv7whz/oo48+0ogRI3TTTTcpIyNDRUVFev3115WdnV3r90yaNElz587VmDFjlJWVpY0bN+rVV19V165da6wbPXq02rZtqyFDhqhNmzZat26dnn76aV188cVq1qyZJKlfv36SpP/7v//T1VdfLbfbrXHjxqlr1656+OGHdd9996mgoEA//elP1axZM23atElvvvmmbrrpJv36179ukP8GTz/9tPbu3Xtom+w777yj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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, 5, figsize=(20, 4))\n", "\n", "for i in range(5):\n", " grnplot(dataset, ax=ax[i], id=f\"cluster_{i + 1}\")\n", " ax[i].set(title=dataset.names[i])" ] } ], "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.12.0" } }, "nbformat": 4, "nbformat_minor": 5 }