From aad39df4b1e2e770a44ee724b9319b696e7671cf Mon Sep 17 00:00:00 2001 From: GokaPek Date: Sun, 29 Sep 2024 19:24:48 +0400 Subject: [PATCH] final --- lab_2/lab2.ipynb | 632 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 631 insertions(+), 1 deletion(-) diff --git a/lab_2/lab2.ipynb b/lab_2/lab2.ipynb index 8e75466..f7ec25d 100644 --- a/lab_2/lab2.ipynb +++ b/lab_2/lab2.ipynb @@ -306,7 +306,7 @@ "print(\"Размер контрольной выборки:\", len(val_df))\n", "print(\"Размер тестовой выборки:\", len(test_df))\n", "\n", - "# Сохранение выборок в файлы (опционально)\n", + "# Сохранение выборок в файлы\n", "train_df.to_csv(\".//static//csv//train_data.csv\", index=False)\n", "val_df.to_csv(\".//static//csv//val_data.csv\", index=False)\n", "test_df.to_csv(\".//static//csv//test_data.csv\", index=False)" @@ -681,6 +681,636 @@ "df = pd.read_csv(\".//static//csv//UltimateClassicRock.csv\")\n", "print(df.columns)" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Анализируем датафрейм при помощи \"ящика с усами\". Естьсмещение в сторону меньших значений, это можно исправить при помощи oversampling и undersampling." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAx8AAAIjCAYAAABia6bHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAzVUlEQVR4nO3dd5RV5dnw4XsGptBRUYoCgg3ELqhAFFQs2DXqp6KIvUAUjTEaC9iisb72khcBA/ZEUINRFEskRikLSxTUCKJB5FXpAgPM/v5wzQnDDFV8BsbrWosVdjvnmT07zvmxy+RlWZYFAADATyy/qgcAAAD8PIgPAAAgCfEBAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPgCo0ZcqUyMvLi0GDBlX1UFiBXr16xZZbbrnOXzcvLy/69++/zl8XYH0mPoBqYdCgQZGXl1fuz2abbRb77rtvvPDCC8nH89prr5UbS0FBQbRu3Tp69uwZn3322Tp5j3/84x/Rv3//mDVr1jp5vaqQYj9tKKrD9xNgVWpW9QAA1qVrr702WrVqFVmWxddffx2DBg2KQw45JJ577rk47LDDko/nggsuiA4dOsTixYtj/Pjx8dBDD8Vf//rXeP/996NZs2Y/6rX/8Y9/xDXXXBO9evWKhg0brpsBV5Gfcj+trxYsWBA1a/73x3B1+n4CrIj4AKqV7t27R/v27XPTZ5xxRjRu3Dgee+yxKomPvffeO4499tiIiDjttNNi2223jQsuuCAGDx4cl19+efLxrK9+LvuptLQ0SkpKori4OIqLi6t6OADJuewKqNYaNmwYtWrVKvcvzBER8+fPj1//+tfRvHnzKCoqiu222y5uvfXWyLIsIn74V+k2bdpEmzZtYsGCBbntvvvuu2jatGl06tQpli5dusbj2W+//SIiYvLkyStdb9SoUbH33ntHnTp1omHDhnHkkUfGRx99lFvev3//+M1vfhMREa1atcpdtjRlypRVjmH5y9PK/rz22msV1u3Vq1el6y5/r8LTTz8d7du3j3r16pVb79Zbb13leCpT2X667777ol27dlFUVBTNmjWL3r17V7hEqWvXrrHDDjvEuHHjolOnTlGrVq1o1apVPPDAA+XWK7tMb/n9VXYZWGX7Ylm33nprdOrUKTbZZJOoVatW7L777vH0009XWC8vLy/69OkTQ4cOzY39b3/7W25Z2X5c2fezS5cusfPOO1c6ju222y4OOuiglY4VYH3izAdQrcyePTu++eabyLIsZsyYEXfffXfMmzcvTj755Nw6WZbFEUccEa+++mqcccYZscsuu8SLL74Yv/nNb+I///lP3HHHHVGrVq0YPHhwdO7cOa644oq4/fbbIyKid+/eMXv27Bg0aFDUqFFjjcf373//OyIiNtlkkxWu8/LLL0f37t2jdevW0b9//1iwYEHcfffd0blz5xg/fnxsueWWccwxx8THH38cjz32WNxxxx3RqFGjiIjYdNNNV2scBxxwQPTs2TMiIsaMGRN33XXXCtdt1KhR3HHHHbnpU045pdzyt956K44//vjYeeed46abbooGDRrEN998ExdddNFqjaUyy++n/v37xzXXXBPdunWL8847LyZNmhT3339/jBkzJkaPHh0FBQW5bWfOnBmHHHJIHH/88XHiiSfGk08+Geedd14UFhbG6aefvtZjWtadd94ZRxxxRPTo0SNKSkri8ccfj+OOOy6ef/75OPTQQ8utO2rUqHjyySejT58+0ahRo0pvXl/Z9/OUU06Js846Kz744IPYYYcdctuMGTMmPv7447jyyivXydcEkEQGUA0MHDgwi4gKf4qKirJBgwaVW3fYsGFZRGTXX399ufnHHntslpeXl3366ae5eZdffnmWn5+fvfHGG9lTTz2VRUT2P//zP6scz6uvvppFRPbwww9n//d//5dNmzYt++tf/5ptueWWWV5eXjZmzJgsy7Js8uTJWURkAwcOzG27yy67ZJtttln27bff5ua9++67WX5+ftazZ8/cvFtuuSWLiGzy5MmrvZ9KSkqyiMj69OmTm1f2db366qsV1u/Ro0fWqlWrcvMiIuvXr19u+vLLL88iIvvqq69y88q+rltuuWWl41md/TRjxoyssLAwO/DAA7OlS5fmtr3nnnty25bp0qVLFhHZbbfdlpu3aNGi3D4tKSnJsuy/x8vy+65sPMvui1NPPTVr2bJlufW+//77ctMlJSXZDjvskO23334V9lV+fn72r3/9q8LXvvx+XNH3c9asWVlxcXH229/+ttz8Cy64IKtTp042b968Cq8NsL5y2RVQrdx7770xcuTIGDlyZAwZMiT23XffOPPMM+Mvf/lLbp0RI0ZEjRo14oILLii37a9//evIsqzc07H69+8f7dq1i1NPPTXOP//86NKlS4XtVub000+PTTfdNJo1axaHHnpozJ8/PwYPHlzuvpRlffXVVzFhwoTo1atXbLzxxrn5O+20UxxwwAExYsSI1X7vyixcuDAiYrXvNygpKYmioqKVrjN37tzIz8//UTdJr2w/vfzyy1FSUhJ9+/aN/Pz//tg666yzon79+vHXv/613GvVrFkzzjnnnNx0YWFhnHPOOTFjxowYN27cWo9xWbVq1cr9febMmTF79uzYe++9Y/z48RXW7dKlS2y//fZr/V4NGjSII488Mh577LHcZYFLly6NJ554Io466qioU6fOWr82QGouuwKqlT322KPcB/sTTzwxdt111+jTp08cdthhUVhYGJ9//nk0a9Ys6tWrV27btm3bRkTE559/nptXWFgYDz/8cHTo0CGKi4tj4MCBkZeXt9rjufrqq2PvvfeOGjVqRKNGjaJt27YV7j9ZVtl7b7fddhWWtW3bNl588cWYP3/+Wn/g/OabbyLihw+0q2PWrFlRt27dla7TsWPHuOeee+LCCy+MSy+9NBo0aBAzZ85co3GtbD+taJ8UFhZG69aty32/IiKaNWtWYf9su+22EfHD71XZa6+91mhslXn++efj+uuvjwkTJsSiRYty8ys7Nlq1avWj369nz57xxBNPxN///vfYZ5994uWXX46vv/66wiVwAOs78QFUa/n5+bHvvvvGnXfeGZ988km0a9dujV/jxRdfjIgfzhp88skna/Rhcscdd4xu3bqt8Xv+VMpusF7dX5o3ffr0aNmy5UrXOeGEE2L8+PFx9913x0MPPbRW40q9n1YUkKvzEIG///3vccQRR8Q+++wT9913XzRt2jQKCgpi4MCB8eijj1ZYf9mzJGvroIMOisaNG8eQIUNin332iSFDhkSTJk3Wq2MLYHW47Aqo9pYsWRIREfPmzYuIiJYtW8a0adNi7ty55dabOHFibnmZ9957L6699to47bTTYtddd40zzzwzZs+e/ZONtey9J02aVGHZxIkTo1GjRrl/1V+TMzBlxo4dGxGxwsu+lrV48eL49NNPc2eEViQ/Pz9uvfXW6Nq1a2yzzTa5S97WlRXtk5KSkpg8eXKFOJo2bVrMnz+/3LyPP/44Iv4bXRtttFFERIWnZS1/FqUyf/7zn6O4uDhefPHFOP3006N79+7rJAJW9v2sUaNGnHTSSfH000/HzJkzY9iwYXHiiSeu1UMPAKqS+ACqtcWLF8dLL70UhYWFuQ/RhxxySCxdujTuueeecuvecccdkZeXF927d89t26tXr2jWrFnceeedMWjQoPj6669/1FOcVqVp06axyy67xODBg8t9MP7ggw/ipZdeikMOOSQ3ryxC1uQ3Yj/99NOx3XbbRZs2bVa57vDhw2PBggW5x96uzN133x2jRo2KoUOHRrdu3aJz586rPaZV6datWxQWFsZdd92Vu+chImLAgAExe/bsCk+XWrJkSTz44IO56ZKSknjwwQdj0003jd133z0iIrbaaquIiHjjjTdy6y1dunS1ztzUqFEj8vLyyp0lmTJlSgwbNmytvr4yq/p+nnLKKTFz5sw455xzKjzBDWBD4bIroFp54YUXcmcwZsyYEY8++mh88skncdlll0X9+vUjIuLwww+PfffdN6644oqYMmVK7LzzzvHSSy/F8OHDo2/fvrkPpmXX9L/yyitRr1692GmnneLqq6+OK6+8Mo499thyIbAu3XLLLdG9e/fo2LFjnHHGGblH7TZo0KDc79co+yB9xRVXxAknnBAFBQVx+OGHV3o/yGeffRY333xzvPPOO3HMMceUOzMxZsyYiIgYOXJktGjRIpo0aRL9+vWL++67Lzp16hQHHnjgSsf7r3/9Ky699NLo379/dOjQYR3sgfI23XTTuPzyy+Oaa66Jgw8+OI444oiYNGlS3HfffdGhQ4cKH8KbNWsWf/jDH2LKlCmx7bbbxhNPPBETJkyIhx56KPdI3nbt2sVee+0Vl19+eXz33Xex8cYbx+OPP547S7Yyhx56aNx+++1x8MEHx0knnRQzZsyIe++9N7beeut477331vrrXNX3c9ddd40ddtghnnrqqWjbtm3stttua/1eAFWmip+2BbBOVPao3eLi4myXXXbJ7r///qy0tLTc+nPnzs0uuuiirFmzZllBQUG2zTbbZLfccktuvXHjxmU1a9bMfvWrX5XbbsmSJVmHDh2yZs2aZTNnzlzheMoe2frUU0+tdNyVPWo3y7Ls5Zdfzjp37pzVqlUrq1+/fnb44YdnH374YYXtr7vuumzzzTfP8vPzV/rY3RU9inj5PwMHDsy+/PLLrHnz5lnfvn2z2bNnV3itWOYRsQsXLsx22mmn7Be/+EW2ZMmSCl/X6j5q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4gMAAEhCfAAAAEmIDwAAIAnxAQAAJCE+AACAJMQHAACQhPgAAACSEB8AAEAS4gMAAEhCfAAAAEmIDwAAIAnxAQAAJCE+AACAJMQHAACQhPgAAACSqFnVAwAAWNaIESPi5ptvzk1feumlccghh+Sm33jjjbj66qtz09dee23ss88+uelPP/00zjrrrMiyLPLy8uKPf/xjbL311rnlb775Zlx55ZW56euvvz5+8YtfrHJZRMQ//vGP+N3vfpeb/v3vfx+dOnXKTU+cODHOPffc3PQDDzwQbdq0yU1//PHHcfbZZ+emH3roodh2220jIuLDDz+M888/P7fsvvvui+233361to2ImD59epx33nkxb968qFu3btx///3RpEmTiIiYMmVKnHHGGbF06dKoUaNGDBgwILbccsvctlOnTo0zzjgjFi9eHAUFBTFgwIBo0aJFbvm8efPixhtvjGnTpkWzZs3i8ssvj7p16+aWf/fdd3HxxRfHt99+G5tsskncfvvtsfHGG69yXBERJSUlMXz48NxrH3nkkVFYWLjayxcsWBAPPvhgfPnll7HFFlvEOeecE7Vq1frR20ZELF26NN5777347rvvYuONN46ddtopatSosdpj+ymtamzrq7wsy7K12XDOnDnRoEGDmD17dtSvX39dj2uNlP2fcfn/E7J+Kvt+zd/+iCit06iqh7PeyJ//TdT58Fn7ZR0q26f+2wDrp8p+fnft2nWF67/22ms/6fKVWd/f++CDD46FCxdWWFZcXByLFi2Kyj7u5eXlxauvvhr77bdflJaWVlien58fo0aNinPPPTcmTpxYYXmbNm3igQceiGOOOSa+++67Css33njj+P7771c4rr/97W/xwAMPxFNPPRVLly7NLatRo0Ycd9xxce65565y+RVXXBGjR4+u8PqdO3eO5s2br/W2N9xwQ7zxxhtx3333xfTp03PLmjRpEueff37ss88+qxzbT2lVY6sKq9sGLrsCANYLy3/AXvZf5itbvuOOO65weY0aNeKUU04p9y/By2+/yy67rHAsyy9bftvdd999hcvz8vLil7/8ZeTl5VW6PD8/P0444YTIz6/8Y9iRRx65wteubNuuXbvmPuA3adIk+vXrlzuzsHDhwlx4FBUVxTnnnBNFRUUREZFlWXTt2jUXHrVr145f/epXUbt27YiIKC0tja5du8bEiRMjLy8vDjzwwPjf//3fOPDAAyMvLy8mTpwY+++/fy48tt9++7jttttyZ2u+++67lY5r//33j8cffzzq168fl1xySfz5z3+OSy65JOrXrx+PP/54nHvuuStd3qNHjxg9enQUFBTESSedFEOGDImTTjopCgoKYvTo0T9q23PPPTf69esXrVu3jnvvvTdGjBgR9957b7Ru3Tr69esXV1xxxUpf/4EHHqj0e7suvPHGGysd2xtvvPGTvfe64MwHyTnzUTlnPtY9Zz5g/bbsz+9PP/00d6nV1VdfHfvtt19uvVGjRsW1116bm7755ptjjz32yE2/8847cemll+amhwwZEltssUVu+ssvv4yTTz45N33rrbdG+/btc9MDBgyIP/3pTxERceqpp8Zpp52WWzZ27Ni45JJLctO333577Lbbbrnp8ePHx8UXX5ybHjRoULlomjJlSvTq1Ss3/cgjj5S7nOnll1+O66+/PiIirrrqqth///1zyz777LM4/fTTV7jt1KlTo2fPnrnpYcOGRcOGDXPTH3zwQfTp0yciIu6+++5ysTZ9+vQ44YQTctNPPvlkbLbZZrnpGTNmxPHHH5+b/tvf/hbFxcW56YULF8bBBx+cm37++efLXYY1efLk3H5cfp/MmjUrjjrqqIiIqFu3bgwbNixq1vzvnQBLliyJ4447LmbOnBkNGzaMp59+usLyY489NmbNmhU1a9aMESNGlLvUad68eXHYYYdFRMRzzz0X9erVW+1tS0pK4pBDDoklS5bEnnvuGTfeeGO50CstLY3f/e538c9//nOFYzvuuONizpw58cILL6zzS7CWLl0aPXr0iNatW8f1119fYWxXXnllTJ48OYYMGZL8EqzVbYPVvudj0aJFsWjRonJvsL75/PPPq3oIrAbfJ1JzzMH6adn/by57j8ey4VE2vWx8LBselU0vGx6VTS8bHhGRC4+IiMGDB5eLj+XXXTY8Kpte/mzN8tPLxkNE5MIjIuK6664rFx+tW7de6bbLTy8bHhERF154Ye7vV199dTzzzDO56WXvuYiIcuFRNp2fnx+lpaWRl5dXLjwifrhsqnbt2vH9999HnTp1yoVHRJQLsv79+8egQYPKjbNevXoxd+7cKC0tLffhPSKiZs2asfPOO8drr70Wu+yyS6XLW7ZsGbNmzYodd9yxwgf8F154Iff3AQMGRN++fVd728LCwthnn31i1KhRUVRUVOHsVH5+fmy++eYREXHggQdWOrbTTz89brvtthg+fHgcd9xxsS699957MX369LjqqqsqHVuPHj2id+/e8d5778Wuu+66Tt97XVnt+Ljxxhvjmmuu+SnH8qPdcMMNVT0EYD3kvw2w4Vj+wzprb9l7EebNm7fG29evXz9mzZpV6f0iy6pTp06Fecu+37ffflth+bbbbhvjxo2LkpKSSl+zLHaWj54yZWNq1KjilQLTpk3L/f3LL79co20jfriXZdSoUTF37txKl5f9Y3yzZs0qXd6xY8cK41hXyi5xa9WqVaXLy+ZXdg/O+mK14+Pyyy8vV7Fz5syJ5s2b/ySDWltXXHFFtGzZsqqHwSp8/vnnPgySlP82wPqpsp8HU6ZMqZrBVEM1atTIBcjyZyZWR9lVLsveu1KZ+fPnV5hXt27dmDlzZkREbLLJJhWWf/zxxxERK7wsqexekcpuVl92TN98802FZctGwfJnvVa1bUTkbq5f9nKtZZXdM7OiuHjrrbcqjGNdKXuC2OTJk6Ndu3YVlk+ePLnceuuj1Y6PoqKi3M5eX7Vs2dJ13UAF/tsA679LL700d+nVqFGjKtzzsax33nmnwj0fyyp7bOqy08saO3ZsucupTjnllHL3fCy/7rLGjx9f4Z6PZU2ZMqXCPR/Lmjp1arnLpa688spy93ws67PPPlvptlOnTi23fNasWeUuvbrzzjtz93wse9laRJR7SlLED/d4LH/PR9mN6FmWxcKFCyvc8/H9999HxA/xUfYY3TK333577vK1/v37Vxhn2VmF/Pz8WLJkSYX7Jt59992IiJgwYUKly8su2Xv//fejpKSkXMR079497r333oiIOOOMM8q996q2LSkpyd2wvWjRoigtLa1wX8V//vOfiIh46aWX4uyzz64wtocffjhq1KhR4cEB68JOO+0UTZo0iaFDh1Z6z8fQoUOjadOmsdNOO63z915X3HBOcm44r5wbztc9N5zD+m35n9/LP1Fq8803z33Qq0ybNm0qfQRsxH8febr8o1CX1a5du/jXv/61xssifvgQ+N5771W6LC8vLw4//PB47rnnKr1kKT8/P44++uh45plnKn3E7SGHHBIjRoyo9LVXtW2TJk3ijDPOiAEDBlQIjKKioujRo0cMHTq03H28ZWrXrh09e/aMRx55JBcW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IxXHGik4zqq3lZ3xKOOGcwAAIAnxAQAAJFEt4qOoqCj69esXRUVFVT0UqjnHGqk41kjFsUYKjjPKrPUN5wAAAGuiWpz5AAAA1n/iAwAASEJ8AAAASYgPAAAgiWoRH/fee29sueWWUVxcHHvuuWe88847VT0kNmA33nhjdOjQIerVqxebbbZZHHXUUTFp0qRy6yxcuDB69+4dm2yySdStWzd++ctfxtdff11FI6a6uOmmmyIvLy/69u2bm+dYY135z3/+EyeffHJssskmUatWrdhxxx1j7NixueVZlsXVV18dTZs2jVq1akW3bt3ik08+qcIRsyFaunRpXHXVVdGqVauoVatWbLXVVnHdddfFss83cqz9vG3w8fHEE0/ExRdfHP369Yvx48fHzjvvHAcddFDMmDGjqofGBur111+P3r17xz//+c8YOXJkLF68OA488MCYP39+bp2LLroonnvuuXjqqafi9ddfj2nTpsUxxxxThaNmQzdmzJh48MEHY6eddio337HGujBz5szo3LlzFBQUxAsvvBAffvhh3HbbbbHRRhvl1rn55pvjrrvuigceeCDefvvtqFOnThx00EGxcOHCKhw5G5o//OEPcf/998c999wTH330UfzhD3+Im2++Oe6+++7cOo61n7lsA7fHHntkvXv3zk0vXbo0a9asWXbjjTdW4aioTmbMmJFFRPb6669nWZZls2bNygoKCrKnnnoqt85HH32URUT21ltvVdUw2YDNnTs322abbbKRI0dmXbp0yS688MIsyxxrrDu//e1vs1/84hcrXF5aWpo1adIku+WWW3LzZs2alRUVFWWPPfZYiiFSTRx66KHZ6aefXm7eMccck/Xo0SPLMscaWbZBn/koKSmJcePGRbdu3XLz8vPzo1u3bvHWW29V4cioTmbPnh0RERtvvHFERIwbNy4WL15c7rhr06ZNtGjRwnHHWundu3cceuih5Y6pCMca686zzz4b7du3j+OOOy4222yz2HXXXeOPf/xjbvnkyZNj+vTp5Y61Bg0axJ577ulYY4106tQpXnnllfj4448jIuLdd9+NN998M7p37x4RjjUialb1AH6Mb775JpYuXRqNGzcuN79x48YxceLEKhoV1UlpaWn07ds3OnfuHDvssENEREyfPj0KCwujYcOG5dZt3LhxTJ8+vQpGyYbs8ccfj/Hjx8eYMWMqLHOssa589tlncf/998fFF18cv/vd72LMmDFxwQUXRGFhYZx66qm546myn6eONdbEZZddFnPmzIk2bdpEjRo1YunSpXHDDTdEjx49IiIca2zY8QE/td69e8cHH3wQb775ZlUPhWroiy++iAsvvDBGjhwZxcXFVT0cqrHS0tJo3759/P73v4+IiF133TU++OCDeOCBB+LUU0+t4tFRnTz55JMxdOjQePTRR6Ndu3YxYcKE6Nu3bzRr1syxRkRs4DecN2rUKGrUqFHhyS9ff/11NGnSpIpGRXXRp0+feP755+PVV1+NLbbYIje/SZMmUVJSErNmzSq3vuOONTVu3LiYMWNG7LbbblGzZs2oWbNmvP7663HXXXdFzZo1o3Hjxo411ommTZvG9ttvX25e27ZtY+rUqRERuePJz1N+rN/85jdx2WWXxQknnBA77rhjnHLKKXHRRRfFjTfeGBGONTbw+CgsLIzdd989Xnnlldy80tLSeOWVV6Jjx45VODI2ZFmWRZ8+feKZZ56JUaNGRatWrcot33333aOgoKDccTdp0qSYOnWq4441sv/++8f7778fEyZMyP1p37599OjRI/d3xxrrQufOnSs8Mvzjjz+Oli1bRkREq1atokmTJuWOtTlz5sTbb7/tWGONfP/995GfX/7jZY0aNaK0tDQiHGvEhv+0q8cffzwrKirKBg0alH344YfZ2WefnTVs2DCbPn16VQ+NDdR5552XNWjQIHvttdeyr776Kvfn+++/z61z7rnnZi1atMhGjRqVjR07NuvYsWPWsWPHKhw11cWyT7vKMsca68Y777yT1axZM7vhhhuyTz75JBs6dGhWu3btbMiQIbl1brrppqxhw4bZ8OHDs/feey878sgjs1atWmULFiyowpGzoTn11FOzzTffPHv++eezyZMnZ3/5y1+yRo0aZZdeemluHcfaz9sGHx9ZlmV333131qJFi6ywsDDbY489sn/+859VPSQ2YBFR6Z+BAwfm1lmwYEF2/vnnZxtttFFWu3bt7Oijj86++uqrqhs01cby8eFYY1157rnnsh122CErKirK2rRpkz300EPllpeWlmZXXXVV1rhx46yoqCjbf//9s0mTJlXRaNlQzZkzJ7vwwguzFi1aZMXFxVnr1q2zK664Ilu0aFFuHcfaz1teli3zKycBAAB+Ihv0PR8AAMCGQ3wAAABJiA8AACAJ8QEAACQhPgAAgCTEBwAAkIT4AAAAkhAfAABAEuIDgB+la9eu0bdv3x/9Ov37949ddtnlR78OAOsv8QGwAevVq1fk5eVFXl5eFBYWxtZbbx3XXnttLFmypKqHtsYuueSSeOWVV3LTvXr1iqOOOqrqBgTAOlezqgcAwI9z8MEHx8CBA2PRokUxYsSI6N27dxQUFMTll19e1UNbLVmWxdKlS6Nu3bpRt27dqh4OAD8hZz4ANnBFRUXRpEmTaNmyZZx33nnRrVu3ePbZZ2PmzJnRs2fP2GijjaJ27drRvXv3+OSTT3LbDRo0KBo2bBjDhg2LbbbZJoqLi+Oggw6KL774IrdOZWcf+vbtG127dl3heP70pz9F+/bto169etGkSZM46aSTYsaMGbnlr732WuTl5cULL7wQu+++exQVFcWbb75Z7rKr/v37x+DBg2P48OG5MzuvvfZa7LffftGnT59y7/d///d/UVhYWO6sCQDrJ/EBUM3UqlUrSkpKolevXjF27Nh49tln46233oosy+KQQw6JxYsX59b9/vvv44YbbohHHnkkRo8eHbNmzYoTTjjhR73/4sWL47rrrot33303hg0bFlOmTIlevXpVWO+yyy6Lm266KT766KPYaaedyi275JJL4vjjj4+DDz44vvrqq/jqq6+iU6dOceaZZ8ajjz4aixYtyq07ZMiQ2HzzzWO//fb7UeMG4KfnsiuAaiLLsnjllVfixRdfjO7du8ewYcNi9OjR0alTp4iIGDp0aDRv3jyGDRsWxx13XET8EAr33HNP7LnnnhERMXjw4Gjbtm288847sccee6zVOE4//fTc31u3bh133XVXdOjQIebNm1fusqprr702DjjggEpfo27dulGrVq1YtGhRNGnSJDf/mGOOiT59+sTw4cPj+OOPj4gfzuCU3fsCwPrNmQ+ADdzzzz8fdevWjeLi4ujevXv8v//3/6JXr15Rs2bNXFRERGyyySax3XbbxUcffZSbV7NmzejQoUNuuk2bNtGwYcNy66ypcePGxeGHHx4tWrSIevXqRZcuXSIiYurUqeXWa9++/Rq/dnFxcZxyyinx8MMPR0TE+PHj44MPPqj0zAoA6x/xAbCB23fffWPChAnxySefxIIFC2Lw4MHr7CxAfn5+ZFlWbt6yl20tb/78+XHQQQdF/fr1Y+jQoTFmzJh45plnIiKipKSk3Lp16tRZqzGdeeaZMXLkyPjyyy9j4MCBsd9++0XLli3X6rUASEt8AGzg6tSpE1tvvXW0aNEiatb84Wratm3bxpIlS+Ltt9/Orfftt9/GpEmTYvvtt8/NW7JkSYwdOzY3PWnSpJg1a1a0bds2IiI23XTT+Oqrr8q934QJE1Y4lokTJ8a3334bN910U+y9997Rpk2bcjebr4nCwsJYunRphfk77rhjtG/fPv74xz/Go48+Wu4yLwDWb+IDoBraZptt4sgjj4yzzjor3nzzzXj33Xfj5JNPjs033zyOPPLI3HoFBQXxq1/9Kt5+++0YN25c9OrVK/baa6/c/R777bdfjB07Nh555JH45JNPol+/fvHBBx+s8H1btGgRhYWFcffdd8dnn30Wzz77bFx33XVr9TVsueWW8d5778WkSZPim2++KXfG5cwzz4ybbropsiyLo48+eq1eH4D0xAdANTVw4MDYfffd47DDDouOHTtGlmUxYsSIKCgoyK1Tu3bt+O1vfxsnnXRSdO7cOerWrRtPPPFEbvlBBx0UV111VVx66aXRoUOHmDt3bvTs2XOF77npppvGoEGD4qmnnortt98+brrpprj11lvXavxnnXVWbLfddtG+ffvYdNNNY/To0bllJ554YtSsWTNOPPHEKC4uXqvXByC9vGz5i3kB+FkYNGhQ9O3bN2bNmlXVQ1ljU6ZMia222irGjBkTu+22W1UPB4DV5FG7AGwwFi9eHN9++21ceeWVsddeewkPgA2My64A2GCMHj06mjZtGmPGjIkHHnigqocDwBpy2RUAAJCEMx8AAEAS4gMAAEhCfAAAAEmIDwAAIAnxAQAAJCE+AACAJMQHAACQhPgAAACS+P87fxg1bSChrgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "\n", + "# Box plot для столбца 'Popularity'\n", + "plt.figure(figsize=(10, 6))\n", + "sns.boxplot(x=df['Popularity'])\n", + "plt.title('Box Plot для Popularity')\n", + "plt.xlabel('Popularity')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Решим проблему пустых значений при помощи удаления таких строк." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "df_cleaned = df.dropna()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Разбиение набора данных на обучающую, контрольную и тестовую выборки" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Размер обучающей выборки: 8650\n", + "Размер контрольной выборки: 2884\n", + "Размер тестовой выборки: 2884\n" + ] + } + ], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "\n", + "# Разделение на обучающую и тестовую выборки\n", + "train_df, test_df = train_test_split(df_cleaned, test_size=0.2, random_state=42)\n", + "\n", + "# Разделение обучающей выборки на обучающую и контрольную\n", + "train_df, val_df = train_test_split(train_df, test_size=0.25, random_state=42)\n", + "\n", + "print(\"Размер обучающей выборки:\", len(train_df))\n", + "print(\"Размер контрольной выборки:\", len(val_df))\n", + "print(\"Размер тестовой выборки:\", len(test_df))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Оценка сбалансированности выборок, по результатам видно что баланса тут мало" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Распределение Popularity в обучающей выборке:\n", + "Popularity\n", + "23 258\n", + "15 250\n", + "26 246\n", + "21 245\n", + "14 245\n", + " ... \n", + "84 1\n", + "87 1\n", + "91 1\n", + "79 1\n", + "86 1\n", + "Name: count, Length: 88, dtype: int64\n", + "\n", + "Распределение Popularity в контрольной выборке:\n", + "Popularity\n", + "17 90\n", + "26 86\n", + "21 83\n", + "24 83\n", + "28 80\n", + " ..\n", + "85 1\n", + "83 1\n", + "84 1\n", + "80 1\n", + "77 1\n", + "Name: count, Length: 85, dtype: int64\n", + "\n", + "Распределение Popularity в тестовой выборке:\n", + "Popularity\n", + "22 86\n", + "21 85\n", + "12 84\n", + "20 82\n", + "26 81\n", + " ..\n", + "76 2\n", + "71 2\n", + "79 1\n", + "82 1\n", + "80 1\n", + "Name: count, Length: 80, dtype: int64\n", + "\n" + ] + } + ], + "source": [ + "def check_balance(df, name):\n", + " counts = df['Popularity'].value_counts()\n", + " print(f\"Распределение Popularity в {name}:\")\n", + " print(counts)\n", + " print()\n", + "\n", + "check_balance(train_df, \"обучающей выборке\")\n", + "check_balance(val_df, \"контрольной выборке\")\n", + "check_balance(test_df, \"тестовой выборке\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Выполним овер- и андер- слемпинг." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Распределение Popularity в обучающей выборке после oversampling:\n", + "Popularity\n", + "44 258\n", + "20 258\n", + "30 258\n", + "27 258\n", + "8 258\n", + " ... \n", + "78 258\n", + "79 258\n", + "74 258\n", + "81 258\n", + "86 258\n", + "Name: count, Length: 88, dtype: int64\n", + "\n", + "Распределение Popularity в контрольной выборке после oversampling:\n", + "Popularity\n", + "21 90\n", + "11 90\n", + "28 90\n", + "23 90\n", + "37 90\n", + " ..\n", + "61 90\n", + "84 90\n", + "80 90\n", + "77 90\n", + "0 90\n", + "Name: count, Length: 85, dtype: int64\n", + "\n", + "Распределение Popularity в тестовой выборке после oversampling:\n", + "Popularity\n", + "14 86\n", + "47 86\n", + "27 86\n", + "13 86\n", + "66 86\n", + " ..\n", + "63 86\n", + "79 86\n", + "71 86\n", + "82 86\n", + "80 86\n", + "Name: count, Length: 80, dtype: int64\n", + "\n" + ] + } + ], + "source": [ + "from imblearn.over_sampling import RandomOverSampler\n", + "\n", + "def oversample(df):\n", + " X = df.drop('Popularity', axis=1)\n", + " y = df['Popularity']\n", + " \n", + " oversampler = RandomOverSampler(random_state=42)\n", + " X_resampled, y_resampled = oversampler.fit_resample(X, y)\n", + " \n", + " resampled_df = pd.concat([X_resampled, y_resampled], axis=1)\n", + " return resampled_df\n", + "\n", + "train_df_oversampled = oversample(train_df)\n", + "val_df_oversampled = oversample(val_df)\n", + "test_df_oversampled = oversample(test_df)\n", + "\n", + "check_balance(train_df_oversampled, \"обучающей выборке после oversampling\")\n", + "check_balance(val_df_oversampled, \"контрольной выборке после oversampling\")\n", + "check_balance(test_df_oversampled, \"тестовой выборке после oversampling\")" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Распределение Popularity в обучающей выборке после undersampling:\n", + "Popularity\n", + "0 1\n", + "1 1\n", + "2 1\n", + "3 1\n", + "4 1\n", + " ..\n", + "84 1\n", + "85 1\n", + "86 1\n", + "87 1\n", + "91 1\n", + "Name: count, Length: 88, dtype: int64\n", + "\n", + "Распределение Popularity в контрольной выборке после undersampling:\n", + "Popularity\n", + "0 1\n", + "1 1\n", + "2 1\n", + "3 1\n", + "4 1\n", + " ..\n", + "82 1\n", + "83 1\n", + "84 1\n", + "85 1\n", + "87 1\n", + "Name: count, Length: 85, dtype: int64\n", + "\n", + "Распределение Popularity в тестовой выборке после undersampling:\n", + "Popularity\n", + "0 1\n", + "1 1\n", + "2 1\n", + "3 1\n", + "4 1\n", + " ..\n", + "76 1\n", + "77 1\n", + "79 1\n", + "80 1\n", + "82 1\n", + "Name: count, Length: 80, dtype: int64\n", + "\n" + ] + } + ], + "source": [ + "from imblearn.under_sampling import RandomUnderSampler\n", + "\n", + "def undersample(df):\n", + " X = df.drop('Popularity', axis=1)\n", + " y = df['Popularity']\n", + " \n", + " undersampler = RandomUnderSampler(random_state=42)\n", + " X_resampled, y_resampled = undersampler.fit_resample(X, y)\n", + " \n", + " resampled_df = pd.concat([X_resampled, y_resampled], axis=1)\n", + " return resampled_df\n", + "\n", + "train_df_undersampled = undersample(train_df)\n", + "val_df_undersampled = undersample(val_df)\n", + "test_df_undersampled = undersample(test_df)\n", + "\n", + "check_balance(train_df_undersampled, \"обучающей выборке после undersampling\")\n", + "check_balance(val_df_undersampled, \"контрольной выборке после undersampling\")\n", + "check_balance(test_df_undersampled, \"тестовой выборке после undersampling\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Police Shootings in the United States: 2015-2024" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "В этом наборе данных, составленном The Washington Post, регистрируется каждый человек, застреленный дежурным полицейским в Соединенных Штатах с 2015 по 2024 год. Он решает проблему занижения органами власти статистики реальных инцедентов. Это может быть использовано в журналисткой работе, например для прогнозирования или выявления закономерностей преступлений. Цель технического проекта установить закономерность в убийствах полицейскими определённых групп граждан. Входные данные: возраст, пол, штат, вооружённость. Целевой признак: общий портрет убитого гражданина." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index(['date', 'name', 'age', 'gender', 'armed', 'race', 'city', 'state',\n", + " 'flee', 'body_camera', 'signs_of_mental_illness',\n", + " 'police_departments_involved'],\n", + " dtype='object')\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "df = pd.read_csv(\".//static//csv//2024-07-23-washington-post-police-shootings-export.csv\")\n", + "print(df.columns)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "При помощи ящика с усами и колонки возраста проверим набор на баланс. Он достаточно сбалансирован." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAx8AAAIjCAYAAABia6bHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAuRklEQVR4nO3deZhWdd348c8MywwKM4gLOwhmYCZpCoXkgxioiKkRmokpiY9omICWSaRQuSWWlahAoegjuWDmkpiioKaSIobYj0DKcQOBTBkWGYGZ8/uDa+4YhmVE/A7L63Vdc+V9tvs70wHOe85y52VZlgUAAMCnLL+2BwAAAOwexAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPAAAgCfEBAAAkIT4AAIAkxAfAbuCNN96IvLy8mDhxYm0PBYDdmPgA+BgmTpwYeXl5Vb7222+/6NGjRzz66KPJx/PUU09VGUu9evWiffv2cdZZZ8Xrr7++Xd7j+eefj1GjRsWyZcu2y/YA2H3Vre0BAOyMfvrTn0a7du0iy7JYsmRJTJw4MU444YR4+OGH48QTT0w+nosuuig6d+4ca9eujZdffjnGjx8fjzzySLz66qvRokWLT7Tt559/Pn7yk5/EgAEDonHjxttnwADslsQHwDbo3bt3HHHEEbnXAwcOjKZNm8Zdd91VK/Fx1FFHRb9+/SIi4jvf+U589rOfjYsuuihuv/32GD58ePLxAMCmuOwKYDto3LhxNGjQIOrWrfo7nVWrVsUll1wSrVu3joKCgujQoUNcf/31kWVZRESsXr06OnbsGB07dozVq1fn1nv//fejefPmceSRR0Z5efnHHs8xxxwTERElJSVbXG7atGlx1FFHxZ577hmNGzeOk08+Of7xj3/k5o8aNSp+8IMfREREu3btcpd3vfHGG1sdw8aXp1V+PfXUU9WWHTBgwCaXHTVqVJXl7rvvvjjiiCOiUaNGVZa7/vrrtziW999/P77//e/HIYccEg0bNoyioqLo3bt3vPLKK9WWffPNN+Okk06KPffcM/bbb78YNmxYPPbYY5sc+wsvvBDHH398FBcXxx577BHdu3eP5557bqs/G4DdlTMfANugtLQ03nvvvciyLJYuXRo33nhjrFy5Ms4888zcMlmWxUknnRTTp0+PgQMHxqGHHhqPPfZY/OAHP4iFCxfGDTfcEA0aNIjbb789unXrFiNGjIhf/vKXERExePDgKC0tjYkTJ0adOnU+9vj+9a9/RUTE3nvvvdllnnjiiejdu3e0b98+Ro0aFatXr44bb7wxunXrFi+//HLsv//+0bdv33jttdfirrvuihtuuCH22WefiIjYd999azSOXr16xVlnnRURETNnzozf/OY3m112n332iRtuuCH3+tvf/naV+TNmzIjTTjstvvCFL8S1114bxcXF8d5778WwYcO2Oo7XX389HnjggTj11FOjXbt2sWTJkhg3blx079495s6dm7s0bdWqVXHMMcfEu+++G0OGDIlmzZrF73//+5g+fXq1bU6bNi169+4dhx9+eIwcOTLy8/Pjtttui2OOOSb+8pe/RJcuXWr0MwLYrWQA1Nhtt92WRUS1r4KCgmzixIlVln3ggQeyiMiuvPLKKtP79euX5eXlZf/85z9z04YPH57l5+dnzzzzTDZ58uQsIrJf/epXWx3P9OnTs4jIbr311uzf//53tmjRouyRRx7J9t9//ywvLy+bOXNmlmVZVlJSkkVEdtttt+XWPfTQQ7P99tsv+89//pOb9sorr2T5+fnZWWedlZs2evToLCKykpKSGv+c1qxZk0VEduGFF+amVX5f06dPr7Z8//79s3bt2lWZFhHZyJEjc6+HDx+eRUT27rvv5qZVfl+jR4/e4njKysqy8vLyKtNKSkqygoKC7Kc//Wlu2i9+8YssIrIHHnggN2316tVZx44dq4y9oqIiO/DAA7Pjjjsuq6ioyC374YcfZu3atct69eq1xfEA7K5cdgWwDW666aaYOnVqTJ06Ne68887o0aNHnHvuuXH//ffnlpkyZUrUqVMnLrrooirrXnLJJZFlWZWnY40aNSoOPvjgOPvss+O73/1udO/evdp6W3LOOefEvvvuGy1atIg+ffrEqlWr4vbbb69yX8qG3n333Zg9e3YMGDAgmjRpkpveqVOn6NWrV0yZMqXG770pZWVlERFRWFhYo+XXrFkTBQUFW1xmxYoVkZ+fv003vRcUFER+/vp/8srLy+M///lPNGzYMDp06BAvv/xybrk///nP0bJlyzjppJNy0woLC+N///d/q2xv9uzZsWDBgjjjjDPiP//5T7z33nvx3nvvxapVq+KrX/1qPPPMM1FRUfGxxwmwq3PZFcA26NKlS5UD+29961tx2GGHxYUXXhgnnnhi1K9fP958881o0aJFNGrUqMq6Bx10UESsv7egUv369ePWW2+Nzp07R2FhYdx2222Rl5dX4/FcccUVcdRRR0WdOnVin332iYMOOqja/ScbqnzvDh06VJt30EEHxWOPPRarVq2KPffcs8Zj2NB7770XERHFxcU1Wn7ZsmXRsGHDLS7TtWvXGDNmTAwZMiQuvfTSKC4ujg8++KBG26+oqIhf//rXcfPNN0dJSUmV+2g2vDTtzTffjAMOOKDaz/4zn/lMldcLFiyIiIizzz57s+9ZWloae+21V43GB7C7EB8A20F+fn706NEjfv3rX8eCBQvi4IMP/tjbeOyxxyJi/VmDBQsWRLt27Wq87iGHHBI9e/b82O/5aam8IX3//fev0fKLFy+Otm3bbnGZ008/PV5++eW48cYbY/z48R9rPFdffXVcfvnlcc4558TPfvazaNKkSeTn58fQoUO36QxF5TqjR4+OQw89dJPLbC2mAHZH4gNgO1m3bl1ERKxcuTIiItq2bRtPPPFErFixosrZj3nz5uXmV5ozZ0789Kc/je985zsxe/bsOPfcc+PVV1+t8ZmDj6vyvefPn19t3rx582KfffbJnfX4OGdgKr300ksREZu97GtDa9eujX/+859x/PHHb3G5/Pz8uP766+PVV1+NkpKSuPnmm2PJkiVVbvLfnPvuuy969OgREyZMqDJ92bJluZvoI9b/XObOnRtZllX5vv/5z39WWe+AAw6IiIiioqIdKvoAdnTu+QDYDtauXRuPP/541K9fP3dZ1QknnBDl5eUxZsyYKsvecMMNkZeXF717986tO2DAgGjRokX8+te/jokTJ8aSJUtq9BSnbdW8efM49NBD4/bbb6/yyeV///vf4/HHH48TTjghN60yQj7OJ5zfd9990aFDh+jYseNWl33wwQdj9erVuccDb8mNN94Y06ZNi0mTJkXPnj2jW7duNRpPnTp1co83rjR58uRYuHBhlWnHHXdcLFy4MB566KHctLKysvjtb39bZbnDDz88DjjggLj++utzsbmhf//73zUaF8DuxpkPgG3w6KOP5s5gLF26NH7/+9/HggUL4rLLLouioqKIiPja174WPXr0iBEjRsQbb7wRX/jCF+Lxxx+PBx98MIYOHZr77fmVV14Zs2fPjieffDIaNWoUnTp1iiuuuCJ+/OMfR79+/aqEwPY0evTo6N27d3Tt2jUGDhyYe9RucXFxlc/XOPzwwyMiYsSIEXH66adHvXr14mtf+9om7wd5/fXX47rrrosXX3wx+vbtG3feeWdu3syZMyMiYurUqdGmTZto1qxZjBw5Mm6++eY48sgj49hjj93ieP/f//t/cemll8aoUaOic+fOH+t7PfHEE3Nnlo488sh49dVXY9KkSdG+ffsqyw0aNCjGjBkT3/rWt2LIkCHRvHnzmDRpUu7G+cqzIfn5+fG73/0uevfuHQcffHB85zvfiZYtW8bChQtj+vTpUVRUFA8//PDHGiPAbqGWn7YFsFPZ1KN2CwsLs0MPPTS75ZZbqjx2NcuybMWKFdmwYcOyFi1aZPXq1csOPPDAbPTo0bnlZs2aldWtWzf73ve+V2W9devWZZ07d85atGiRffDBB5sdT+WjdidPnrzFcW/qUbtZlmVPPPFE1q1bt6xBgwZZUVFR9rWvfS2bO3dutfV/9rOfZS1btszy8/O3+NjdzT2KeOOv2267LXvnnXey1q1bZ0OHDs1KS0urbSs2eNRuWVlZ1qlTp+wrX/lKtm7dumrfV00etXvJJZdkzZs3zxo0aJB169YtmzFjRta9e/ese/fuVZZ9/fXXsz59+mQNGjTI9t133+ySSy7J/vCHP2QRkf31r3+tsuzf/va3rG/fvtnee++dFRQUZG3bts1OO+207Mknn9zieAB2V3lZttF5aADYRhMnToxRo0Zt8RPQjz766BgwYEAMGDAg2bg+qV/96lcxbNiweOedd6Jly5a1PRyAnZZ7PgBgA6tXr67yuqysLMaNGxcHHnig8AD4hNzzAcB2c8ABB8TXv/71LS7Tq1ev3P0uO6K+fftGmzZt4tBDD43S0tK48847Y968eTFp0qTaHhrATs9lVwCwgV/96lfxu9/9Lt54440oLy+Pz33uc3HppZfGN7/5zdoeGsBOT3wAAABJuOcDAABIQnwAAABJbPMN5xUVFbFo0aJo1KhR7kOXAACA3U+WZbFixYpo0aJF5Odv/vzGNsfHokWLonXr1tu6OgAAsIt5++23o1WrVpudv83x0ahRo9wbFBUVbetmAACAndzy5cujdevWuUbYnG2Oj8pLrYqKisQHAACw1dsx3HAOAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPAAAgCfEBAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPAAAgCfEBAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPAAAgCfEBAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPAAAgCfEBAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPAAAgCfEBAAAkIT4AAIAk6tb2AID0lixZEqWlpbU9DHYgxcXF0bRp09oeBgC7OPEBu5klS5bEmd8+K9au+ai2h8IOpF79grjz/+4QIAB8qsQH7GZKS0tj7ZqPYnX77lFRWFzbw9lu8lcviwYlz8Tqdv8TFQ0a1/Zwdir5ZaURrz8dpaWl4gOAT5X4gN1URWFxVOy5T20PY7uraNB4l/y+AGBX4IZzAAAgCfEBAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPAAAgCfEBAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPAAAgCfEBAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPAAAgCfEBAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPAAAgCfEBAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPAAAgCfEBAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPAAAgCfEBAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPAAAgCfEBAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPAAAgCfEBAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPAAAgCfEBAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPAAAgCfEBAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYiPiCgrK4vXXnstysrKansoAEAtcTwAnz7xERFvvfVWnHfeefHWW2/V9lAAgFrieAA+feIDAABIQnwAAABJiA8AACAJ8QEAACQhPgAAgCTEBwAAkIT4AAAAkhAfAABAEuIDAABIQnwAAABJiA8AACAJ8QEAACQhPgAAgCTEBwAAkIT4AAAAkhAfAABAEuIDAABIQnwAAABJiA8AACAJ8QEAACQhPgAAgCTEBwAAkIT4AAAAkhAfAABAEuIDAABIQnwAAABJiA8AACAJ8QEAACQhPgAAgCTEBwAAkIT4AAAAkhAfAABAEuIDAABIQnwAAABJiA8AACAJ8QEAACQhPgAAgCTEBwAAkIT4AAAAkhAfAABAEuIDAABIQnwAAABJiA8AACAJ8QEAACQhPgAAgCTEBwAAkIT4AAAAkhAfAABAEuIDAABIQnwAAABJiA8AACAJ8QEAACQhPgAAgCTEBwAAkIT4AAAAkhAfAABAEuIDAABIQnwAAABJiA8AACAJ8QEAACQhPgAAgCTEBwAAkIT4AAAAkhAfAABAEuIDAABIQnwAAABJiA8AACAJ8QEAACQhPgAAgCTEBwAAkIT4AAAAkhAfAABAEuIDAABIQnwAAABJiA8AACAJ8QEAACQhPgAAgCTEBwAAkIT4AAAAkhAfAABAEuIDAABIQnwAAABJiA8AACAJ8QEAACQhPgAAgCTEBwAAkIT4AAAAkqhb2wP4pMrLy2POnDnx/vvvR5MmTaJTp05Rp06d2h4WALALee211+K8887LvR4/fnx89rOfzb1evHhxXHDBBbFy5cpo2LBh3HLLLdGsWbPc/DfeeCMGDhwY5eXlUadOnZgwYULsv//+NZ7/1ltvxcCBA2Pt2rVRr169mDBhQrRp06ZGY1u0aFGcd955sXr16mjQoEGMHz8+WrRokZtfWloaI0aMiCVLlkTTpk3jqquuiuLi4tz8lStXxjXXXBOLFi2KFi1axPDhw6Nhw4a5+f/+97/jwgsvjNLS0iguLo4xY8bEvvvuW6P5W9v2Jx3b1o4TV69eHePGjYt33nknWrVqFYMGDYoGDRpU+/9/U7a27ic9Rl2zZk08+OCDue/t5JNPjvr162+37deWvCzLsm1Zcfny5VFcXBylpaVRVFS0vcdVI88880zcfPPNsXjx4ty0Zs2axXe/+934n//5nxpvp/IP7cZ/WGFXVLm/r/rcSVGx5z61PZztJn/Ve7Hn3Id2ue8rhcqfnb8D2d1t7njg6KOP3uw6Tz31VBx//PFRVlZWbV5hYWH8+c9/jh49esSmDrfy8vJi+vTpW51/zDHHREVFRbX5+fn5m5y+4dh69eoVa9eurTavXr16MXXq1Ojfv38sXLiw2vyWLVvGpEmT4vzzz4958+ZVm9+xY8cYO3ZsnHjiibFy5cpq8xs2bBh/+tOftji/VatWW9z2Jx3b1o4TR4wYEc8991y19bt16xZXXXVVtekb2tq6n/QYdezYsTF58uQoLy/PTatTp06ceuqpcf7552+3Y+DtqaZtsNNedvXMM8/EyJEjo3379nHTTTfFlClT4qabbor27dvHyJEj45lnnqntIQIAO7kNwyM/Pz9OP/30yM/PrzK/MjyaNWsWI0eOzJ3xKCsri6OPPjoXFgUFBTFo0KAoKCiIiIgsy2o0vzIw9thjj/je974Xe+yxR0RElfDY3Ngqw6NJkyYxfPjwaNKkSURErF27No4++ujcwX2XLl1izJgx0aVLl4iIWLhwYfTq1SvmzZsXeXl5ceyxx8bvfve7OPbYYyMvLy/mzZsXxxxzTC4s9t9//7j66qtzZ2tWrlwZRx999Bbnb2nbvXr1+kRj69+//xaPE88///x47rnnol69enHGGWfEnXfeGWeccUbUq1cvnnvuuRgxYsRm94nK8Njcuueff/4nOkYdO3Zs3H333VFUVBTf//734w9/+EN8//vfj6Kiorj77rtjxIgRO/Ux8E555qO8vDz69+8f7du3jyuvvLLKH7SKior48Y9/HCUlJXHnnXfW6PSTMx/sTpz5YGPOfMB6Gx8PbHg50x133JG7zCli/WVQZ511Vu71Aw88EI0bN869XrZsWZxyyim513fffXeVy7AWL14cp59+eo3n33vvvbHffvvlXj///PPxox/9KCIirrvuutyB+abGdv/99+eiIyLi/fffj759++ZeT5kyJRc0EREffvhhnHDCCbnXf/7zn6OwsDD3uqysLI4//vjc64ceeqjKseDy5cvjpJNO2uz8RYsWxRlnnBEREZMmTYqWLVtudtufZGxdunSJa6+9ttpx4vDhw+OFF16IunXrxpQpU6pcyrRmzZro06dPrF27Nh599NFql2CtXr06evfuHfXq1YtHHnlks+t+6UtfimuuueZjH6OuWbMmevfuHUVFRTF58uSoW/e/d0isW7cu+vXrF8uWLYsvf/nLcfXVV3/iY+DtqaZtUON7Pj766KP46KOPqrxB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Pn2yc845p8q0vn37Zv3798+yzD5HzdTqmY81a9bErFmzomfPnrlp+fn50bNnz5gxY0YtjoxdUWlpaURENGnSJCIiZs2aFWvXrq2y/3Xs2DHatGlj/+MTGTx4cPTp06fKvhVhn2P7euihh+KII46IU089Nfbbb7847LDD4re//W1ufklJSSxevLjK/lZcXBxf+tKX7G9skyOPPDKefPLJeO211yIi4pVXXolnn302evfuHRH2OWqmbm2++XvvvRfl5eXRtGnTKtObNm0a8+bNq6VRsSuqqKiIoUOHRrdu3eLzn/98REQsXrw46tevH40bN66ybNOmTWPx4sW1MEp2BXfffXe8/PLLMXPmzGrz7HNsT6+//nrccsstcfHFF8ePfvSjmDlzZlx00UVRv379OPvss3P71Kb+jbW/sS0uu+yyWL58eXTs2DHq1KkT5eXlcdVVV0X//v0jIuxz1EitxgekMnjw4Pj73/8ezz77bG0PhV3Y22+/HUOGDImpU6dGYWFhbQ+HXVxFRUUcccQRcfXVV0dExGGHHRZ///vfY+zYsXH22WfX8ujYFd17770xadKk+P3vfx8HH3xwzJ49O4YOHRotWrSwz1FjtXrZ1T777BN16tSp9qSXJUuWRLNmzWppVOxqLrzwwvjTn/4U06dPj1atWuWmN2vWLNasWRPLli2rsrz9j201a9asWLp0aXzxi1+MunXrRt26dePpp5+O3/zmN1G3bt1o2rSpfY7tpnnz5vG5z32uyrSDDjoo3nrrrYiI3D7l31i2lx/84Adx2WWXxemnnx6HHHJIfPvb345hw4bFNddcExH2OWqmVuOjfv36cfjhh8eTTz6Zm1ZRURFPPvlkdO3atRZHxq4gy7K48MIL449//GNMmzYt2rVrV2X+4YcfHvXq1auy/82fPz/eeust+x/b5Ktf/Wq8+uqrMXv27NzXEUccEf3798/9t32O7aVbt27VHh/+2muvRdu2bSMiol27dtGsWbMq+9vy5cvjhRdesL+xTT788MPIz6966FinTp2oqKiICPscNVTbd7zffffdWUFBQTZx4sRs7ty52XnnnZc1btw4W7x4cW0PjZ3cBRdckBUXF2dPPfVU9u677+a+Pvzww9wy559/ftamTZts2rRp2UsvvZR17do169q1ay2Oml3Nhk+7yjL7HNvPiy++mNWtWze76qqrsgULFmSTJk3K9thjj+zOO+/MLXPttddmjRs3zh588MFszpw52cknn5y1a9cuW716dS2OnJ3V2WefnbVs2TL705/+lJWUlGT3339/ts8++2SXXnppbhn7HFtT6/GRZVl24403Zm3atMnq16+fdenSJfvrX/9a20NiFxARm/y67bbbcsusXr06++53v5vttdde2R577JF9/etfz959993aGzS7nI3jwz7H9vTwww9nn//857OCgoKsY8eO2fjx46vMr6ioyC6//PKsadOmWUFBQfbVr341mz9/fi2Nlp3d8uXLsyFDhmRt2rTJCgsLs/bt22cjRozIPvroo9wy9jm2Ji/LNvhYSgAAgE9JrX/COQAAsHsQHwAAQBLiAwAASEJ8AAAASYgPAAAgCfEBAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwBs0owZM6JOnTrRp0+f2h4KALuIvCzLstoeBAA7nnPPPTcaNmwYEyZMiPnz50eLFi1qe0gA7OSc+QCgmpUrV8Y999wTF1xwQfTp0ycmTpxYZf5DDz0UBx54YBQWFkaPHj3i9ttvj7y8vFi2bFlumWeffTaOOuqoaNCgQbRu3TouuuiiWLVqVdpvBIAdivgAoJp77703OnbsGB06dIgzzzwzbr311qg8UV5SUhL9+vWLU045JV555ZUYNGhQjBgxosr6//rXv+L444+Pb3zjGzFnzpy455574tlnn40LL7ywNr4dAHYQLrsCoJpu3brFaaedFkOGDIl169ZF8+bNY/LkyXH00UfHZZddFo888ki8+uqrueV//OMfx1VXXRUffPBBNG7cOM4999yoU6dOjBs3LrfMs88+G927d49Vq1ZFYWFhbXxbANQyZz4AqGL+/Pnx4osvxre+9a2IiKhbt25885vfjAkTJuTmd+7cuco6Xbp0qfL6lVdeiYkTJ0bDhg1zX8cdd1xUVFRESUlJmm8EgB1O3doeAAA7lgkTJsS6deuq3GCeZVkUFBTEmDFjarSNlStXxqBBg+Kiiy6qNq9NmzbbbawA7FzEBwA569atizvuuCN+8YtfxLHHHltl3imnnBJ33XVXdOjQIaZMmVJl3syZM6u8/uIXvxhz586Nz3zmM5/6mAHYebjnA4CcBx54IL75zW/G0qVLo7i4uMq8H/7whzFt2rS49957o0OHDjFs2LAYOHBgzJ49Oy655JJ45513YtmyZVFcXBxz5syJL3/5y3HOOefEueeeG3vuuWfMnTs3pk6dWuOzJwDsetzzAUDOhAkTomfPntXCIyLiG9/4Rrz00kuxYsWKuO++++L++++PTp06xS233JJ72lVBQUFERHTq1CmefvrpeO211+Koo46Kww47LK644gqfFQKwm3PmA4BP7KqrroqxY8fG22+/XdtDAWAH5p4PAD62m2++OTp37hx77713PPfcczF69Gif4QHAVokPAD62BQsWxJVXXhnvv/9+tGnTJi655JIYPnx4bQ8LgB2cy64AAIAk3HAOAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPAAAgif8P5WBwh7W7alwAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "\n", + "# Box plot для столбца 'age'\n", + "plt.figure(figsize=(10, 6))\n", + "sns.boxplot(x=df['age'])\n", + "plt.title('Box Plot для age')\n", + "plt.xlabel('Age')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Теперь проверим на шум, здесь тоже особо проблем нет, однако смущает сочетание white и black, вероятно это мулаты." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABAIAAAIjCAYAAACZALkcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACg80lEQVR4nOzdeVhU9f4H8PcIDNswAzIqiwvk4A5hagsqi1a4pqhZpBnazcq0qMglLbfcKkvT22IpWLmkKdxuXlNTcEFzKXC/hSaupIEwI/t2fn94mZ/jMHOQwziD8349zzyPns/5fs/nfOfMmXM+nDlHJgiCACIiIiIiIiKyC02snQARERERERER3T0sBBARERERERHZERYCiIiIiIiIiOwICwFEREREREREdoSFACIiIiIiIiI7wkIAERERERERkR1hIYCIiIiIiIjIjrAQQERERERERGRHWAggIiIiIiIisiMsBBARERHdoezsbMhkMiQlJVk7FSIiojvGQgARERHpHT9+HCNGjECbNm3g4uICf39/PPbYY1i2bJnFlrl27VosWbLEaPqVK1cwa9YsZGZmWmzZt0tLS4NMJtO/nJyccN9992HMmDH4888/G2QZ+/fvx6xZs1BQUNAg/REREd0pFgKIiIgIwM0T1O7du+Po0aN44YUXsHz5cvzjH/9AkyZNsHTpUost11whYPbs2Xe1EFDj1VdfxTfffIMVK1Zg4MCB+O6779CjRw9cuXJFct/79+/H7NmzWQggIiKrcbR2AkRERGQb5s2bB5VKhcOHD8PT09Mgdu3aNeskZQFFRUVwd3c3O0/v3r0xYsQIAMDYsWPRrl07vPrqq1i9ejWmTZt2N9IkKystLYVcLkeTJvy7GRHde7hnIyIiIgDA2bNn0blzZ6MiAAA0b97caNq3336LBx98EG5ubvDy8kJ4eDi2b9+uj//rX//CwIED4efnB2dnZ7Rt2xZz585FVVWVfp7IyEhs2bIF58+f11+OHxAQgLS0NPTo0QPAzRPxmtitv8k/ePAg+vXrB5VKBTc3N0RERCA9Pd0gx1mzZkEmk+HUqVN45pln4OXlhV69et3x2PTp0wcAcO7cObPz7dq1C71794a7uzs8PT0xZMgQnD592iCft956CwAQGBioX6/s7GzRHG79ycKtr7S0NKN54+Liap131qxZBvN9//336N69Ozw8PAzm+/DDD83mcv36dSQkJCA4OBgKhQJKpRL9+/fH0aNHjeY9f/48nnjiCbi7u6N58+Z4/fXXsW3btlpzr8t7Wpuan3Tc3t/AgQNrXW9T7devX48ZM2bA398fbm5u0Ol0d7SupaWlmDVrFtq1awcXFxf4+vpi2LBhOHv2rH6e6upqLFmyBJ07d4aLiwtatGiBF198Efn5+aLrSUTUUHhFABEREQEA2rRpgwMHDuDEiRPo0qWL2Xlnz56NWbNmISwsDHPmzIFcLsfBgwexa9cuPP744wCApKQkKBQKvPHGG1AoFNi1axfeffdd6HQ6fPDBBwCA6dOnQ6vV4tKlS/j4448BAAqFAh07dsScOXPw7rvvYvz48ejduzcAICwsDMDNE+7+/fujW7dumDlzJpo0aYLExET06dMHe/fuxYMPPmiQ75NPPomgoCDMnz8fgiDc8djUnMh5e3ubnOfnn39G//79cd9992HWrFkoKSnBsmXL0LNnT/z2228ICAjAsGHD8Mcff2DdunX4+OOPoVarAQDNmjWrUx6PPfYYxowZAwA4fPgwPvnkE5PzqtVq/ZgCwLPPPmsQP3DgAEaOHIn7778fCxcuhEqlQm5uLl5//XXRPP7880+kpKTgySefRGBgIK5evYovvvgCEREROHXqFPz8/ADcvPqiT58+yMnJwWuvvQYfHx+sXbsWqampRn3e6XsqZs+ePfjPf/5zR23mzp0LuVyOhIQElJWVQS6X49SpU3Va16qqKgwaNAg7d+7E008/jddeew03btzAjh07cOLECbRt2xYA8OKLLyIpKQljx47Fq6++inPnzmH58uXIyMhAeno6nJyc7ihnIqJ6EYiIiIgEQdi+fbvg4OAgODg4CI888ogwefJkYdu2bUJ5ebnBfFlZWUKTJk2EmJgYoaqqyiBWXV2t/3dxcbHRMl588UXBzc1NKC0t1U8bOHCg0KZNG6N5Dx8+LAAQEhMTjZYRFBQkREdHGy0vMDBQeOyxx/TTZs6cKQAQYmNj6zQGqampAgBh1apVwt9//y1cuXJF2LJlixAQECDIZDLh8OHDgiAIwrlz54xyCw0NFZo3by7k5eXppx09elRo0qSJMGbMGP20Dz74QAAgnDt3rk45CYIglJeXCwCEiRMn6qdt3LhRACCkpqYazT9q1CghMDDQYBoAYebMmfr/T5s2TQAg5OTk6KfVrNcHH3xgNp/S0lKj9/7cuXOCs7OzMGfOHP20xYsXCwCElJQU/bSSkhKhQ4cOBrnfyXtam5r37daxeOihh4T+/fsbrbe59vfdd5/RdlvXdV21apUAQPjoo4+M+q9Zp7179woAhDVr1hjEf/rpp1qnExFZCn8aQERERABu/rX5wIEDeOKJJ3D06FG8//77iI6Ohr+/P3744Qf9fCkpKaiursa7775r9PtpmUym/7erq6v+3zdu3EBubi569+6N4uJi/Pe//613npmZmcjKysIzzzyDvLw85ObmIjc3F0VFRejbty/27NmD6upqgzYvvfTSHS1j3LhxaNasGfz8/DBw4EAUFRVh9erV6N69e63z5+TkIDMzE3FxcWjatKl+ekhICB577LE7/sv07UpLSwEALi4udZq/vLwczs7OZue5ceMGmjRpUutPQcQ4Ozvr3/uqqirk5eVBoVCgffv2+O233/Tz/fTTT/D398cTTzyhn+bi4oIXXnjBoL/6vKfmbN68GYcPH8bChQvvaL2ee+45g+32TtZ106ZNUKvVmDRpklG/NZ+LjRs3QqVS4bHHHtOvY25uLrp16waFQlHrlRJERJbAnwYQERGRXo8ePbB582aUl5fj6NGjSE5Oxscff4wRI0YgMzMTnTp1wtmzZ9GkSRN06tTJbF8nT57EjBkzsGvXLuh0OoOYVqutd45ZWVkAbp60maLVauHl5aX/f2Bg4B0t491330Xv3r3h4OAAtVqNjh07wtHR9GHT+fPnAQDt27c3inXs2BHbtm2r000KTcnNzQUAqFSqOs1fUFAAhUJhdp5HHnkEy5cvx2uvvYbJkydDpVLV+Xfq1dXVWLp0KT799FOcO3fO4L4Pt/584vz582jbtq1BgQgANBqNwf/r856aUlVVhbfffhujRo1CSEhIndanRm3bSV3X9ezZs2jfvr3Z7SQrKwtarbbWe24A99ZNOYnItrEQQEREREbkcjl69OiBHj16oF27dhg7diw2btyImTNn1ql9QUEBIiIioFQqMWfOHLRt2xYuLi747bffMGXKlDv66+7tatp+8MEHCA0NrXWe20+Cb/8rr5jg4GA8+uij9crPEmpuJhgQEFCn+f/66y+0adPG7DxPP/00fvvtNyxbtgwrVqy4o3zmz5+Pd955B+PGjcPcuXPRtGlTNGnSBPHx8fV6b+vznpqycuVKZGdnY9u2bXecR23bSUOua3V1NZo3b441a9bUGq/rvSKIiKRiIYCIiIjMqrkcPicnBwDQtm1bVFdX49SpUyZP2tLS0pCXl4fNmzcjPDxcP722u+7f/tdisek1N11TKpU2c7Jec9L9+++/G8X++9//Qq1W668GMLVe5hw5cgQATP404VYVFRU4c+YM+vXrZ3a+Jk2a4MMPP8Tx48dx7tw5fPrpp7h69SpGjx4tuozvv/8eUVFRWLlypcH0goIC/Q0QgZvjcurUKQiCYLDeZ86cMWjXUO9pcXExZs+ejQkTJogWQuqqruvatm1bHDx4EBUVFSZv+Ne2bVv8/PPP6Nmz5x0Xp4iIGhLvEUBEREQAgNTU1FrvqF/z+/aay96HDh2KJk2aYM6cOUZ/Ea1p7+DgYPB/4Obv1j/99FOj/t3d3Wv9qUDNiXNBQYHB9G7duqFt27b48MMPUVhYaNTu77//NrmOluLr64vQ0FCsXr3aIN8TJ05g+/btGDBggH6aqfUy5/vvv0f79u3RoUMH0Xn/9a9/oaSkRP/IQ3OWLVuGXbt2Yc2aNXj00UfRs2fPOuXj4OBgtK1s3LgRly9fNpgWHR2Ny5cvG9xjorS0FF9++aXBfA31ni5duhRFRUWYPn16neavi7qu6/Dhw5Gbm4vly5cb9VHTfuTIkaiqqsLcuXON5qmsrLyjbYKISApeEUBEREQAgEmTJqG4uBgxMTHo0KEDysvLsX//fnz33XcICAjA2LFjAdz8fff06dMxd+5c9O7dG8OGDYOzszMOHz4MPz8/LFiwAGFhYfDy8sJzzz2HV199FTKZDN98802thYZu3brhu+++wxtvvIEePXpAoVBg8ODBaNu2LTw9PfH555/Dw8MD7u7ueOihhxAYGIivvvoK/fv3R+fOnTF27Fj4+/vj8uXLSE1NhVKpxL///e+7PXz44IMP0L9/fzzyyCN4/vnn9Y8PVKlUBs+x79atG4Cbj058+umn4eTkhMGDB9d6/4A///wT77//Pg4dOoRhw4bh22+/1ccOHz4MANixYwdat24NHx8fzJw5E59++inCwsL0j3E05eTJk5g8eTJmzZqFHj163NG6Dho0CHPmzMHYsWMRFhaG48ePY82aNbjvvvsM5nvxxRexfPlyxMbG4rXXXoOvry/WrFmjv+lhzVUCTZo0aZD3dPv27Zg3b57Zxzzeqbqu65gxY/D111/jjTfewKFDh9C7d28UFRXh559/xoQJEzBkyBBERETgxRdfxIIFC5CZmYnHH38cTk5OyMrKwsaNG7F06VKMGDGiwXInIjLJeg8sICIiIluydetWYdy4cUKHDh0EhUIhyOVyQaPRCJMmTRKuXr1qNP+qVauErl27Cs7OzoKXl5cQEREh7NixQx9PT08XHn74YcHV1VXw8/PTP44Qtz3mrbCwUHjmmWcET09PAYDBowT/9a9/CZ06dRIcHR2NHteXkZEhDBs2TPD29hacnZ2FNm3aCCNHjhR27typn6fm8YF///13ncag5jFyGzduNDtfbY8PFARB+Pnnn4WePXsKrq6uglKpFAYPHiycOnXKqP3cuXMFf39/oUmTJmYfJZiYmCgAEH0lJiYKly5dElq1aiXEx8cLWq3WqC/c8hi90tJSISQkROjVq5dQWVlptF51eXzgm2++Kfj6+gqurq5Cz549hQMHDggRERFCRESEwbx//vmnMHDgQMHV1VVo1qyZ8OabbwqbNm0SAAi//PKLwbx1eU9rU/O++fr6CkVFRSbXW6x9be/7naxrcXGxMH36dCEwMFBwcnISfHx8hBEjRghnz541mG/FihVCt27dBFdXV8HDw0MIDg4WJk+eLFy5csVsnkREDUUmCLWU5omIiIjI6pKSkjBr1iz9zQJrExkZibi4OMTFxd21vKRasmQJXn/9dVy6dAn+/v7WToeIyO7wHgFEREREZDElJSUG/y8tLcUXX3yBoKAgFgGIiKyE9wggIiIislFt27ZFTEyM2Xkee+wx/V33bdGwYcPQunVrhIaGQqvV4ttvv8V///tfk4/QIyIiy+NPA4iIiIjIYpYsWYKvvvoK2dnZqKqqQqdOnTB58mQ89dRT1k6NiMhusRBAREREREREZEd4jwAiIiIiIiIiO8JCABEREREREZEd4c0CiRq56upqXLlyBR4eHpDJZNZOh4iIiIiIrEQQBNy4cQN+fn5o0sT03/1ZCCBq5K5cuYJWrVpZOw0iIiIiIrIRFy9eRMuWLU3GWQggauQ8PDwA3PywK5VKK2dDRERERETWotPp0KpVK/05giksBBA1cjU/B1AqlSwEEBERERGR6E+GebNAIiIiIiIiIjvCQgARERERERGRHWEhgIiIiIiIiMiOsBBAREREREREZEdYCCAiIiIi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HXdN4x33XhpvyFD7rZ5sITfz20wZettobo19m2ms++feGm9cu1Fmk7k19m1CLO4mr7141FDLttRxoqWPpcT6V7k6We0YuCGwEECEmz8PSEtLQ1pamsGN+sLDw7F161YcOnTI6IZ/d0Iul6OqyvBSva5du6KqqgrXrl2DRqMxeDWmJw6o3ORYODzEaEcYHqTGouEhFr1JSgulC+bHBBvtpHtpbt7N1VZvFAhYPveWXm6YZ6L/eTHBkuP+KleL9W3puHMTmU3m9t7QLuipUdtkbmLxnho13hvaxSZzEx33mMY77vNiguEhNz4It5XczG8z3njPRnNr7NtMY90/vxcTjF5tvW0yt7uxTZg7JrD0usn/929LLdtSx4mWPpYS69/P09Vqx8ANgU8NIAKQmJiIV155BRUVFbh06RJatGgBAPj6668xceJE3LhxA1euXIGvry+Am3/9T05OxtChQ/V9eHp6YsmSJYiLizN4aoCnpyf279+Pnj174ueff8b9998PNzc3uLm5YfTo0UhPT8fixYvRtWtX/P3339i5cydCQkIwcODAOuVu7acG1Kh5huqN0gp4uDhBrbh7z1A1eL6riyO83Bv2+bGWZOnca54ZXPO+eJh4HnJ94pbs255zt+XcmLttxm05N+bO3Jj7/7e9nF8M3S1xpYsj/G+Jix0TiLW/UlACbUmFPq5ydTJ4hJ25/KQuWyxuyeNESx9LifVvzWPg2tT13ICFACIA2dnZCAwMRIcOHXD69Gn99PPnzyMgIADt27fHf//7X/30Oy0EAMDLL7+MjRs3Ii8vT//4wIqKCrz33nv4+uuvcfnyZajVajz88MOYPXs2goOD65S7rRQCiIiIiIjIulgIILITLAQQERERERFQ93MD3iOAiIiIiIiIyI6wEEBERERERERkR1gIICIiIiIiIrIjLAQQERERERER2REWAoiIiIiIiIjsCAsBRERERERERHaEhQAiIiIiIiIiO8JCABEREREREZEdYSGAiIiIiIiIyI6wEEBERERERERkR1gIICIiIiIiIrIjLAQQERERERER2REWAoiIiIiIiIjsCAsBRERERERERHaEhQAiIiIiIiIiO8JCABEREREREZEdYSGAiIiIiIiIyI6wEEBERERERERkR1gIICIiIiIiIrIjLAQQERERERER2REWAoiIiIiIiIjsCAsBRERE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dLHZ99xc+/diuqCnRm2T4yoaH2r93M2Nu7+Z+LyYYLO5+3u5md2H+Xm6ml22n6erpH2oOVL3r2Lr1kLpYrXceaNAIvvBpwYQAUhJScFTTz2Fa9euQaVSGcSmTJmCXbt2oX///ujWrRs6d+6MsrIyTJ06FdeuXcPBgweNnhrwySef4J133sGGDRsQGBiIb775Bp988gkCAwORmZkJ4P+fGpCSkqJfVnx8PDIzM5GWllbn3PnUgHtbzbOeb5RWwMPFCWrFnT3rWax9zXOua+Kq255zbU7Ns8dr2ipNPHvcVN9icbH+xeIGzxd3cYSXu9xsEeBO1q3mmfE1cQ8Tz5SvT1wsb0suW2pcrK3U91SsfyljZ+lxk7q9m2sv9bMotb3YuJuLi/Uttg8TW7bUfag5UvevYu2tmTsRNV51PTdgIYAIwODBg1FdXY0tW7YYxQ4dOoSHHnoIs2fPxvr165GdnQ1XV1f07t0bH3/8MQIDA40KAWVlZXjppZeQnJwMmUyG2NhYqFQqbN26lYUAIiIiIiKyCBYCiOwECwFERERERATU/dyA9wggIiIiIiIisiMsBBARERERERHZERYCiIiIiIiIiOwICwFEREREREREdoSFACIiIiIiIiI7wkIAERERERERkR1hIYCIiIiIiIjIjrAQQERERERERGRHWAggIiIiIiIisiMsBBARERERERHZERYCiIiIiIiIiOwICwFEREREREREdoSFACIiIiIiIiI7wkIAERERERERkR1hIYCIiIiIiIjIjrAQQERERERERGRHWAggIiIiIiIisiMsBBARERERERHZERYCiIiIiIiIiOwICwFEREREREREdoSFACIiIiIiIiI7wkIAERERERERkR1hIYCIiIiIiIjIjrAQQERERERERGRHWAggIiIiIiIisiMsBBARERERERHZERYC6J6VlJQET09Pa6dhIDs7GzKZDJmZmdZOhYiIiIiI7JRMEATB2kkQ3am4uDgUFBQgJSXFYHpaWhqioqKQn58PZ2dn3LhxA82bN7dOkrWoqqrC33//DbVaDUdHxwbpU6fTQaVSQavVQqlUNkifZDuu6kqRX1QOXWkllK6O8HKTo4XSRR+/nF8MXWkldCUVULk6wcPFEf5ebvr4pfxi3LglrnBxRMsGiluyb3vO3ZZzY+62Gbfl3Ow59ysFJdCWVOjjSlcn+Hm66uNS9+/m2ostWyx3sdykMpeflPWuC21xOXILy6ErrYDS1QlqdzlUbvK71t6SbDk3unvqem7QMGciRDbI1dUVrq6u4jPeRQ4ODvDx8bF2GtRIXMgrwrTk40g/k6ef1kvjjfkxwWjt7Y7zeUV4u5b4vJhgtLFwvAmAqVZattS4DKh1XK2d2/yYYAiAzY5bYx1X5s7cGzq+KCYYlZD2WZW6fzfVfmFMMKosnJtUUvaBUnO7UlCCKZuOYW9Wrn5aeJAaC4eHGBRKLNXekmw5N7JN/GkA3bNu/2nA0aNHERUVBQ8PDyiVSnTr1g1HjhwxmDclJQVBQUFwcXFBdHQ0Ll68qG9/9uxZDBkyBC1atIBCoUCPHj3w888/GywzICAA8+fPx7hx4+Dh4YHWrVtjxYoV+nhtPw04efIkBg0aBKVSCQ8PD/Tu3Rtnz561zKBQo3FVV2p0sAMA+87k4e3k47iUX2x0sFQTn34X4pe1JVZbtpT4jOQT2Hcm1yZzSz+Tixk2Om7i43oc6TY6rqK5p9juNnFPj7sNfxbF4mXVguS+pe7fTbW/pC2xaG5XdaWQ4kqB6fzS9du0ZXLTFpcbnSgDwJ6sXEzddAza4nKLtrckW86NbBcLAWQ3Ro0ahZYtW+Lw4cP49ddfMXXqVDg5OenjxcXFmDdvHr7++mukp6ejoKAATz/9tD5eWFiIAQMGYOfOncjIyEC/fv0wePBgXLhwwWA5ixcvRvfu3ZGRkYEJEybg5Zdfxu+//15rTpcvX0Z4eDicnZ2xa9cu/Prrrxg3bhwqKytNrkdZWRl0Op3Bi+49+UXlRgc7NfadycON0kqrxt2da7+gzBZyMxffeybX5CWk1s6tudIFe2103MTHNQ/NbXRcRXPPst1t4p4edxv+LIrFyyqrbTY3d2dHiy47v0jaCaW2pMLMPtBZ0j5QLLfcwnKjE+Uae7JykVto2faWZMu5ke3iTwOo0frxxx+hUCgMplVVVZmc/8KFC3jrrbfQoUMHAEBQUJBBvKKiAsuXL8dDDz0EAFi9ejU6duyIQ4cO4cEHH8T999+P+++/Xz//3LlzkZycjB9++AETJ07UTx8wYAAmTJgAAJgyZQo+/vhjpKamon379kY5/fOf/4RKpcL69ev1RYl27dqZXe8FCxZg9uzZZuehxk9XaroYBAA3SirMt7dwvLDU9GdNat9i6yZ13csqq+vdVmpu5uLm8qpL31Jzl/q+mcvf0rlLjVtym7D058GauVty3K29vZtrb+19mLn25vbNUvsGxL+bxJhbvuR9oEhuulKRdReJS21vSbacG9kuXhFAjVZUVBQyMzMNXl999ZXJ+d944w384x//wKOPPoqFCxcaXX7v6OiIHj166P/foUMHeHp64vTp0wBuXhGQkJCAjh07wtPTEwqFAqdPnza6IiAkJET/b5lMBh8fH1y7dq3WnDIzM9G7d2+DKxPETJs2DVqtVv+69ecLdO9Qupiv03q4mt9mlBaOK1wcLNa32LpJXXdnR9NffZbOzVzcXF516Vtq7lLfN3P5Wzp3qXFLbhOW/jxYM3dLjru1t3dz7a29DzPX3ty+WWrfgPh3kxhzy5e8DxTJTekisu4icantLcmWcyPbxUIANVru7u7QaDQGL39/f5Pzz5o1CydPnsTAgQOxa9cudOrUCcnJyXVeXkJCApKTkzF//nzs3bsXmZmZCA4ORnm54eVWt5/Uy2QyVFfXXuWuz80MnZ2doVQqDV507/Fyl6OXxrvWWC+NNzxcHK0aLyqr/a9OtpCbuXhvjRrXTPyO1Nq5XdOVoreNjpv4uHrjmq7MJnMTzT3IdreJOo37jUY67jb8WRSLOzs2sdncisoqLbpsL3dpd6BXuTqZ2QeWSdoHiuWmVsgRHqSuNRYepIZaYdn2lmTLuZHtYiGA7Eq7du3w+uuvY/v27Rg2bBgSExP1scrKSv3NAwHg999/R0FBATp27AgASE9PR1xcHGJiYhAcHAwfHx9kZ2dLyickJAR79+5FRQUv2SJDLZQumB8TbHTQU3N35JZebphnIj7vLsT9VS5WW7aU+HsxXdBTo7bJ3Hpq1HjPRsdNfFyD0VPjbZO5ieY+1Ha3iTqNe9tGOu42/FkUizs3kUnuW+r+3VT7lipXi+Ym9RGCfp6m8+v5v23aUrmp3ORYODzE6IQ5PEiNRcNDRB+zJ7W9JdlybmS7ZIIgCNZOguhOxcXFoaCgACkpKQbT09LSEBUVhfz8fKSkpCA+Ph4FBQUoKSnBW2+9hREjRiAwMBCXLl3Cc889h+HDh2PRokVISkrC+PHj0bVrV3zyySdwdHTU/+7/wIEDAIBhw4bh3LlzSExMhEwmwzvvvIO0tDSMGzcOS5YsAXDzqQHx8fGIj4/X5xQaGoqhQ4di1qxZyM7ORmBgIDIyMhAaGoq8vDy0b98eERERmDZtGlQqFX755Rc8+OCDtd5ToDZ1fVYoNU4Gz0t2cYSXe+3Pmb5RWgEPFycob3vecs2zomviHiaekV2fuCX7tufcbTk35m6bcVvOzZ5zv1JQAm1JhT6ucnUyeIyb1P27ufZiyxbLXSw3qczlJ2W960JbXI7cwnJ9/2qF/I5OlKW2tyRbzo3unrqeG/BmgWQXHBwckJeXhzFjxuDq1atQq9UYNmyYwU333NzcMGXKFDzzzDO4fPkyevfujZUrV+rjH330EcaNG4ewsDCo1WpMmTJF8h37vb29sWvXLrz11luIiIiAg4MDQkND0bNnT0n90r2jhdLF7AGOv5cbTP8gBgYHdg0dt2Tflo4zN8vEbTk3sbgt5yYWt+XcxOK2nJtYXKytn6er2ee3S92/m2svtmyx3MVyk8pcflLWuy5UbtJOjqW2tyRbzo1sD68IIAKQlJSkv3qgseEVAUREREREBNT93ID3CCAiIiIiIiKyIywEEBEREREREdkRFgKI8P83HyQiIiIiIrrXsRBAREREREREZEdYCCAiIiIiIiKyIywEEBEREREREdkRFgKIiIiIiIiI7AgLAURERERERER2hIUAIiIiIiIiIjvCQgARERERERGRHWEhgIiIiIiIiMiOsBBAREREREREZEdYCCAiIiIiIiKyIywEEBEREREREdkRFgKIiIiIiIiI7AgLAURERERERER2hIUAIiIiIiIiIjvCQgARERERERGRHWEhgIiIiIiIiMiOsBBAREREREREZEdYCCAiIiIiIiKyIywEEBEREREREdkRFgKIiIiIiIiI7AgLAURERERERER2hIUAIiIiIiIiIjvCQgARERERERGRHWEhgOgOZGdnQyaTITMzs8H6lMlkSElJabD+iIiIiIiIzHG0dgJEtiQuLg6rV6/W/79p06bo0aMH3n//fYSEhFgxs3uftrgcuYXl0JVWQOnqBLW7HCo3+T2/bDFiuYnFL+UX40ZpJXQlFVC5OkHh4oiWXm4NErdk3/acuy3nxtxtM27LuTF368SvFJRAW1KhjyldneDn6apve1VXivyicuhKK6F0dYSXmxwtlC76+OX8Yuhu6dvDxRH+DZi7ue8uqd97Ur/TxcZGCkv2LZUtHwuJacy5WxMLAUS36devHxITEwEAf/31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qdDHVK5OBo9SM3ievYsjvNwNn2d/Ob8Yulv6Vro4wr8Bczf33SX1e0/qd7rY2Ehhyb6lsuVjITGNOXdLqOu5AQsBRLeIi4vD6tWr9f/38PBAhw4dMGXKFAwfPhzZ2dkGhYCysjK89NJLSE5OhkwmQ2xsLFQqFbZu3aovBADAF198gY8//hh//vkn1Go1RowYgU8++QSA8eMDN2zYgOeeew5r1qzBsGHDRHO+VwoBREREREQkDQsBRHaChQAiIiIiIgLqfm7AewQQERERERER2REWAoiIiIiIiIjsCAsBRERERERERHaEhQAiIiIiIiIiO8JCABEREREREZEdYSGAiIiIiIiIyI6wEEBERERERERkR1gIICIiIiIiIrIjLAQQERERERER2REWAoiIiIiIiIjsCAsBRERERERERHaEhQAiIiIiIiIiO8JCABEREREREZEdYSGAiIiIiIiIyI6wEEBERERERERkR1gIICIiIiIiIrIjLAQQERERERER2REWAoiIiIiIiIjsCAsBRERERERERHaEhQAiIiIiIiIiO8JCABEREREREZEdYSGAiIiIiIiIyI6wEEBERERERERkR1gIICIiIiIiIrIjLAQQERERERER2REWAoiIiIiIiIjsCAsBRERERERERHbE0doJEN0LkpKSEB8fj4KCAmunQnTXXNWVIr+oHLrSSihdHeHlJkcLpUud22uLy5FbWA5daQWUrk5Qu8uhcpPflfZSly1GbGzMLV9KW2vHpfYttu5Stzlz7aWOuxhLb3O2umypbDl3a+dm7eUTUePGQgDRLS5evIiZM2fip59+Qm5uLnx9fTF06FC8++678Pb2BgAEBAQgPj4e8fHx1k2WyIou5BVhWvJxpJ/J00/rpfHG/JhgtPZ2F21/paAEUzYdw96sXP208CA1Fg4PgZ+nq0XbS122GLGxMbX894eHoLyqul5ta3K3VnzR8BAIgKS+xcZN6jZnrr0MwFQJ4y7G0tucrS5bKlvO3dq5WXv5RNT48acBRP/z559/onv37sjKysK6detw5swZfP7559i5cyceeeQRXL9+/a7nVFFRcdeXSSTmqq7U6IQKAPadycPbycdxVVdqtr22uNzoABYA9mTlYuqmY9AWl1usvdRlixEbm9oO3muWn329uN5tp246hqu6UqvF0/74G1O+r3/fVwpKzK775XzzYyO2zZl7X6YnH8e+M7n1HndLbq9SWXPZUtly7tbOzdrLJ6J7AwsBRP/zyiuvQC6XY/v27YiIiEDr1q3Rv39//Pzzz7h8+TKmT5+OyMhInD9/Hq+//jpkMhlkMplBH9u2bUPHjh2hUCjQr18/5OTkGMS/+uordOzYES4uLujQoQM+/fRTfSw7OxsymQzfffcdIiIi4OLigjVr1hjlWVZWBp1OZ/Aiupvyi8qNTppq7DuTh/wi8wehuYXlRgewNfZk5SK30HLtpS5bjNjYaEsqTC7f3dmh3m33ZOUiv8j8ulky3tzDGXvP1L9vbUmF2XXXlVZK2ubMvS97z+ShuYmfF9Rl3C25vUplzWVLZcu5Wzs3ay+fiO4NLAQQAbh+/Tq2bduGCRMmwNXV8JI6Hx8fjBo1Ct999x02bdqEli1bYs6cOcjJyTE40S8uLsaHH36Ib775Bnv27MGFCxeQkJCgj69Zswbvvvsu5s2bh9OnT2P+/Pl45513sHr1aoPlTZ06Fa+99hpOnz6N6Ohoo1wXLFgAlUqlf7Vq1aqBR4PIPF1ppcS4+StdbojEpbSXumwxYuturv/C0irzfZeIjYvU96X+8bLKaml9i62bhdfdXP5i24Qlt1eprLlsqWw5d2vnZu3lE9G9gfcIIAKQlZUFQRDQsWPHWuMdO3ZEfn4+qqqq4ODgAA8PD/j4+BjMU1FRgc8//xxt27YFAEycOBFz5szRx2fOnInFixdj2LBhAIDAwECcOnUKX3zxBZ577jn9fPHx8fp5ajNt2jS88cYb+v/rdDoWA+iuUrqY/+oQjzuZjXuIxKW0l7psMWLrbq5/hYuD+b5dxcZF6vtS/7izo/m/K4j2LbZuFl53c/mLbROW3F6lsuaypbLl3K2dm7WXT0T3Bl4RQHQLQRDq3dbNzU1fBAAAX19fXLt2DQBQVFSEs2fP4vnnn4dCodC/3nvvPZw9e9agn+7du5tdjrOzM5RKpcGL6G7ycpejl8a71lgvjTe83M3ftVqtkCM8SF1rLDxIDbXCcu2lLluM2NioXJ1MLr+orKrebcOD1PByN79uloxfu1EmqW+Vq5PZdVe6OEra5sy9L7013rhm4h4DdRl3S26vUllz2VLZcu7Wzs3ayyeiewMLAUQANBoNZDIZTp8+XWv89OnT8PLyQrNmzUz24eRkWIGXyWT6wkJhYSEA4Msvv0RmZqb+deLECfzyyy8G7dzdxe9+TWRNLZQumB8TbHRiVXOXdbHHuanc5Fg4PMToQLbm7vNij7+S0l7qssWIjY2fp6vJ5Qc2dat320XDQ9BC6WK1eFS7ZpL69vN0Nbvu/l7mx0ZsmzP3vsyLCUYvjbre427J7VUqay5bKlvO3dq5WXv5RHRvkAlS/gRKdA+Jjo7GyZMnkZWVZXCfgL/++gtt27bFmDFj8Nlnn6Fdu3Z48cUX8eabb+rnSUpKQnx8PAoKCvTTUlJSEBMToy8G+Pv746WXXsI777xT6/Kzs7MRGBiIjIwMhIaG1jlvnU4HlUoFrVbLqwPorjJ47rqLI7zc7+yZ7jXPwL5RWgEPFyeoFfV7Lnt92ktdthixsTG3fCltrR2X2rfYukvd5sy1lzruYiy9zdnqsqWy5dytnZu1l09Etqmu5wa8RwDR/yxfvhxhYWGIjo7Ge++9h8DAQJw8eRJvvfUW/P39MW/ePABAQEAA9uzZg6effhrOzs5Qq2u/PO92s2fPxquvvgqVSoV+/fqhrKwMR44cQX5+vsFv/okaixZKlzs6Cbudyk3aQauU9lKXLUZsbMwtX0pba8el9i227lK3OXPtpY67GEtvc7a6bKlsOXdr52bt5RNR48afBhD9T1BQEI4cOYL77rsPI0eORNu2bTF+/HhERUXhwIEDaNq0KQBgzpw5yM7ORtu2bc3+VOB2//jHP/DVV18hMTERwcHBiIiIQFJSEgIDAy21SkREREREREb40wCiRo4/DSAiIiIiIqDu5wa8IoCIiIiIiIjIjrAQQERERERERGRHWAggIiIiIiIisiMsBBARERERERHZERYCiIiIiIiIiOwICwFEREREREREdoSFACIiIiIiIiI7wkIAERERERERkR1hIYCIiIiIiIjIjrAQQERERERERGRHWAggIiIiIiIisiMsBBARERERERHZERYCiIiIiIiIiOwICwFEREREREREdoSFACIiIiIiIiI7wkIAERERERERkR1hIYCIiIiIiIjIjrAQQERERERERGRHWAggIiIiIiIisiMsBBARERERERHZERYCiIiIiIiIiOwICwFEREREREREdoSFACIiIiIiIiI7wkIAERERERERkR1hIYCIiIiIiIjIjrAQQERERERERGRHWAgguxEQEIAlS5ZYOw0iIiIiIiKrcrR2AkRi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8cYb+P7777F+/Xp4eXnho48+woYNGxAVFaVvO378eGRmZmLDhg36S/r37NmDqKgo5Ofnw9PTE8DNG/u1adMGTZs2RWFhIc6cOaNfdnFxMUJDQ+Hv7485c+agZcuWOH/+PDZv3ozJkyejZcuWRusQGhqKfv36YeHChQbTtVotmjdvjs2bN2PgwIGIjIxEaGgolixZop8nICAA8fHxiI+P10+TyWRITk7G0KFDceXKFYSGhiIiIgKTJ09G06ZNcebMGaxfvx5fffUVHBwcau339n7Ky8sRHByMFi1aYMGCBfD19UVGRgb8/PzwyCOPYNiwYTh37hwSExMhk8nwzjvvIC0tDePGjdP3W1uuoaGhGDp0KGbNmiX6Xut0OqhUKmi1Wl4dYIdqnoF9o7QCHi5OUCsa9hnbUpZd82zymrjqtmeTS40bPN/bxRFe7obP9zbXvuaZ7zUxDxPPuzcVv5xfDN0tcaWLI/zvoL25uNS+xcbFkusmdVylvudS+hfrW2x7t/S6icXNkfpZFWtvydwsvY+z5LoREVlDXc8N+AMnOzJnzhx89913BtNmzJiBP//8E9HR0XBzc8P48eMxdOhQaLVa/TwJCQl47rnn0KlTJ5SUlODcuXO19i+TyRAbG4v3338f7777rkHMzc0Ne/bswZQpUzBs2DDcuHED/v7+6Nu3b60b6K+//oqjR4/iyy+/NIqpVCr07dsXK1euxMCBA+szFPDz80N6ejqmTJmCxx9/HGVlZWjTpg369euHJk3qfqGMXC7H9u3b8eabb2LAgAGorKxEp06d8M9//hMA8NFHH2HcuHEICwuDWq3GlClTeJd/alAqt7t34n+ny/bzdDX7rG+p8RZKF7MH5Oba33qCVp+4v5cb/CW0NxeX2rfYuFhy3aSOq9T3XEr/Yn2Lbe+WXjexuDlSP6ti7S2Zm6X3cZZcNyIiW8YrAogaOV4RQEREREREQN3PDXiPACIiIiIiIiI7wkIAERERERERkR1hIYCIiIiIiIjIjrAQQERERERERGRHWAggIiIiIiIisiMsBBARERERERHZERYCiIiIiIiIiOwICwFEREREREREdoSFACIiIiIiIiI7wkIAERERERERkR1hIYCIiIiIiIjIjrAQQERERERERGRHWAggIiIiIiIisiMsBBARERERERHZERYCiIiIiIiIiOwICwFERERE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BBARERERERHZERYCiIiIiIiIiOwICwFEREREREREdoSFACIiIiIiIiI7wkIAERERERERkR1hIYCIiIiIiIjIjrAQQERERERERGRHWAggIiIiIiIisiMsBBARERERERHZERYCiIiIiIiIiOwICwFEREREREREdoSFACIiIiIiIiI7wkIAERERERERkR1hIYCIiIiIiIjIjrAQQERERERERGRHWAggIiIiIiIisiMsBFC9yWQypKSkmIynpaVBJpOhoKDgruV0u7i4OAwdOtRqy69NUlISPD09rZ0GERERERHZKRYCCJ9//jk8PDxQWVmpn1ZYWAgnJydERkYazFtzcn/27FnRfsPCwpCTkwOVSgWgYU+AAwICsGTJEqPps2bNQmhoqP7/S5cuRVJSUoMss6E89dRT+OOPP6ydBpFk2uJynL1WiIwL+Tj7dyG0xeXWTomIiIiI6sDR2gmQ9UVFRaGwsBBHjhzBww8/DADYu3cvfHx8cPDgQZSWlsLFxQUAkJqaitatW6Nt27ai/crlcvj4+Fg0dzE1RQhb4urqCldXV2unQSTJlYISTNl0DHuzcvXTwoPUWDg8BH6e3L6JiIiIbBmvCCC0b98evr6+SEtL009LS0vDkCFDEBgYiF9++cVgelRUlP7/ubm5iImJgZubG4KCgvDDDz8YzFvz04C0tDSMHTsWWq0WMpkMMpkMs2bNAgCUlZUhISEB/v7+cHd3x0MPPWSQixS3/zTg+++/R3BwMFxdXeHt7Y1HH30URUVFBvPOnj0bzZo1g1KpxEsvvYTy8v//K+dPP/2EXr16wdPTE97e3hg0aJDB1RHZ2dmQyWTYvHkzoqKi4Obmhvvvvx8HDhzQz1PblRH//ve/0aNHD7i4uECtViMmJqZB1p/IErTF5UZFAADYk5WLqZuO8coAIiIiIhvHQgABuHlVQGpqqv7/qampiIyMREREhH56SUkJDh48aFAImD17NkaOHIljx45hwIABGDVqFK5fv27Uf1hYGJYsWQKlUomcnBzk5OQgISEBADBx4kQcOHAA69evx7Fjx/Dkk0+iX79+yMrKatB1zMnJQWxsLMaNG4fTp08jLS0Nw4YNgyAI+nl27typj61btw6bN2/G7Nmz9fGioiK88cYbOHLkCHbu3IkmTZogJiYG1dXVBsuaPn06EhISkJmZiXbt2iE2Ntbgpxe32rJlC2JiYjBgwABkZGRg586dePDBB02uR1lZGXQ6ncGL6G7KLSw3KgLU2JOVi9xCFgKIiIiIbBl/GkAAbhYC4uPjUVlZiZKSEmRkZCAiIgIVFRX4/PPPAQAHDhxAWVmZQSEgLi4OsbGxAID58+fjk08+waFDh9CvXz+D/uVyOVQqFWQymcHPBS5cuIDExERcuHABfn5+AICEhAT89NNPSExMxPz5803mPGXKFMyYMcNgWnl5OTp16lTr/Dk5OaisrMSwYcPQpk0bAEBwcLBRnqtWrYKbmxs6d+6MOXPm4K233sLcuXPRpEkTDB8+3GD+VatWoVmzZjh16hS6dOmin56QkICBAwcCuFks6dy5M86cOYMOHToY5TVv3jw8/fTTBgWH+++/3+R6L1iwwGBeortNV1phNn5DJE5ERERE1sUrAggAEBkZiaKiIhw+fBh79+5Fu3bt0KxZM0REROjvE5CWlob77rsPrVu31rcLCQnR/9vd3R1KpRLXrl2r83KPHz+OqqoqtGvXDgqFQv/avXu36A0J33rrLWRmZhq8XnrpJZPz33///ejbty+Cg4Px5JNP4ssvv0R+fr7RPG5ubvr/P/LIIygsLMTFixcBAFlZWYiNjcV9990HpVKJgIAAADcLGre6dVx8fX0BwOS4ZGZmom/fvmbX9VbTpk2DVqvVv2pyI7pblC5OZuMeInEiIiIisi5eEUAAAI1Gg5YtWyI1NRX5+fmIiIgAAPj5+aFVq1bYv38/UlNT0adPH4N2Tk6GB/wymczoMnlzCgsL4eDggF9//RUODg4GMYVCYbatWq2GRqMxmNa0aVOT8zs4OGDHjh3Yv38/tm/fjmXLlmH69Ok4ePAgAgMD65Tv4MGD0aZNG3z55Zfw8/NDdXU1unTpYnAfAcBwXGQyGQCYHJc7vXGgs7MznJ2d76gNUUNSK+QID1JjTy0/DwgPUkOtkFshKyIiIiKqK14RQHpRUVFIS0tDWlqawWMDw8PDsXXrVhw6dMjgZwF3Si6Xo6qqymBa165dUVVVhWvXrkGj0Ri8LPHEAZlMhp49e2L27NnIyMiAXC5HcnKyPn706FGUlJTo///LL79AoVCgVatWyMvLw++//44ZM2agb9++6Nixo9EVBfUREhKCnTt3Su6H6G5RucmxcHgIwoPUBtPDg9RYNDwEKjcWAoiIiIhsGa8IIL2oqCi88sorqKio0F8RAAARERGYOHEiysvLJRUCAgICUFhYiJ07d+ovwW/Xrh1GjRqFMWPGYPHixejatSv+/vtv7Ny5EyEhIfrf2TeEgwcPYufOnXj88cfRvHlzHDx4EH///Tc6duyon6e8vBzPP/88ZsyYgezsbMycORMTJ05EkyZN4OXlBW9vb6xYsQK+vr64cOECpk6dKjmvmTNnom/fvmjbti2efvppVFZW4j//+Q+mTJkiuW8iS/HzdMWy2K7ILSzHjdIKeLg4Qa2QswhARERE1AjwigDSi4qKQklJCTQaDVq0aKGfHhERgRs3bugfM1hfYWFheOmll/DUU0+hWbNmeP/99wEAiYmJGDNmDN588020b98eQ4cOxeHDhw3uRSCTyZCUlFTvZQOAUqnEnj17MGDAALRr1w4zZszA4sWL0b9/f/08ffv2RVBQEMLDw/HUU0/hiSee0D/msEmTJli/fj1+/fVXdOnSBa+//jo++OADSTkBN+/PsHHjRvzwww8IDQ1Fnz59cOjQIcn9Elmayk2Ots0VCG3thbbNFSwCEBERETUSMuHWZ6cR2aBz586hXbt2OHXqFIKCgiy2nLi4OBQUFCAlJcViy7AEnU4HlUoFrVYLpVJp7XSIiIiIiMhK6npuwCsCyOb95z//wfjx4y1aBCAiIiIiIrIXvEcA2bxXXnnF2ikQERERERHdM1gIIPofqfcgICIiIiIiagz40wAiIiIiIiIiO8JCABEREREREZEdYSGAiIiIiIiIyI6wEEBERERERERkR1gIICIiIiIiIrIjLAQQERERERER2REWAoiIiIiIiIjsCAsBRERERERERHaEhQAiIiIiIiIiO8JCABEREREREZEdYSGAiIiIiIiIyI6wEEBERERERERkR1gIICIiIiIiIrIjLAQQERERERER2REWAoiIiIiIiIjsCAsBRERERERERHaEhQAiIiIiIiIiO8JCABEREREREZEdYSGAiIiIiIiIyI6wEEBERERERERkR1gIICIiIiIiIrIjLAQQERERERER2REWAoiIiIiIiIjsCAsBRERERERERHaEhQC6I9nZ2ZDJZMjMzGywPmUyGVJSUhqsvxqWyLUhBAQEYMmSJdZOg4iIiIiI7BQLAWQgLi4OMplM//L29ka/fv1w7Ngxa6eml5SUBE9Pz1pjtxYVWrVqhZycHHTp0uXuJVcHhw8fxvjx462dBpHVaYvLcfZaITIu5OPs34XQFpdbO6UGcy+vGxERETV+jtZOgGxPv379kJiYCAD466+/MGPGDAwaNAgXLlywcmZ3xsHBAT4+PtZOw0izZs2snQKR1V0pKMGUTcewNytXPy08SI2Fw0Pg5+lqxcyku5fXjYiIiO4NvCKAjDg7O8PHxwc+Pj4IDQ3F1KlTcfHiRfz9999G81ZVVeH5559HYGAgXF1d0b59eyxdutRovlWrVqFz585wdnaGr68vJk6caHL5M2fOhK+vr+SrEG7/aUB+fj5GjRqFZs2awdXVFUFBQfqCR82869evR1hYGFxcXNClSxfs3r37jtY1Li4OQ4cOxYcffghfX194e3vjlVdeQUVFhX6e238aUFBQgBdffBEtWrTQL/fHH3+UtO5EtkxbXG50ogwAe7JyMXXTsUb91/N7ed2IiIjo3sErAsiswsJCfPvtt9BoNPD29kZRUZFBvLq6Gi1btsTGjRvh7e2N/fv3Y/z48fD19cXIkSMBAJ999hneeOMNLFy4EP3794dWq0V6errRsgRBwKuvvooff/wRe/fuhUajadB1eeedd3Dq1Cls3boVarUaZ86cQUlJicE8b731FpYsWYJOnTrho48+wuDBg3Hu3Dl4e3vXaV0BIDU1Fb6+vkhNTcWZM2fw1FNPITQ0FC+88IJRTtXV1ejfvz9u3LiBb7/9Fm3btsWpU6fg4OBgcj3KyspQVlam/79Op2uA0SG6e3ILy41OlGvsycpFbmE5VG7yu5xVw7iX142IiIjuHSwEkJEff/wRCoUCAFBUVARfX1/8+OOPaNLE+AISJycnzJ49W///wMBAHDhwABs2bNCfHL/33nt488038dprr+nn69Gjh0E/lZWVGD16NDIyMrBv3z74+/ubzVGr1epzrKsLFy6ga9eu6N69O4Cbf5m/3cSJEzF8+HAANwsYP/30E1auXInJkyfXaV0BwMvLC8uXL4eDgwM6dOiAgQMHYufOnbUWAn7++WccOnQIp0+fRrt27fB/7d17UNV1/sfx1+GOXI4myiVhQc9RXBMX85KYInmPdVMxXceSvJQlpGK06raau2WS5WXM0mxNtnbLy9a22uaWS8Cmq4IX0kYTx9W01FgnkUsKwvn+/mg8v86gSIoc4DwfM2eG8/18vp/v+8O8Z+D7Pp/v50hS+/bta53H4sWLHeIAmpqSy1dqbS+9QXtj1pznBgAAmg8KAaghISFBq1evlvTDcvrXXntNw4cPV15e3jX7v/rqq3rzzTd16tQpXbp0SZWVlfrFL34hSSoqKtKZM2c0cODAWq+ZlpYmb29v7d69W0FBQTeMMSAgQPv3769x3Gq1XvecJ554QklJSdq/f7+GDBmikSNHKi4uzqFPnz597D97eHioR48eOnLkSJ3melWXLl0cPtEPDQ3VoUOHrhlTQUGB2rVrZy8C1MW8efM0e/Zs+/uSkhKFh4fX+XzA2QJ9PGttD7hBe2PWnOcGAACaD/YIQA1+fn6yWCyyWCzq2bOn/vjHP6q8vFxvvPFGjb4bNmxQenq6pkyZok8++UQFBQWaNGmSKit/eA7W17duG2MNHjxY33zzjT7++OM69Xdzc7PH+ONXbYYPH66vvvpKaWlp9uJEenp6na4n3XiuV3l6Ov6jbzKZZLPZrjlmXX8/P+bt7a3AwECHF9CUBPl7qb/12gW//tYgBfk33aXzzXluAACg+aAQgBsymUxyc3Or8Ty9JO3cuVNxcXGaPn26YmNjZbFYdPz4cXt7QECAIiMjlZWVVes1fvWrX+mdd97R1KlTtWHDhnqfw1Vt2rRRcnKy/vznP2vFihVau3atQ/vu3bvtP1dVVWnfvn3q3LmzpBvP9WbExMTo66+/VmFh4S2NAzQl5hZeykiKqXHD3N8apBeTYpr0M/TNeW4AAKD54NEA1FBRUaFz585J+uHRgFWrVqmsrEwjRoyo0ddqteqtt97Sxx9/rKioKL399tvKz89XVFSUvc/ChQv1+OOPq23btvaN8Xbu3Kknn3zSYaxRo0bp7bff1sMPPywPDw+NGTOmXue1YMEC3X333erSpYsqKir04Ycf2m/yr3r11VdltVrVuXNnLV++XBcuXNDkyZPrPNefKj4+Xv3791dSUpKWLVsmi8WiL7/8UiaTScOGDbul+QKNWVhLX70yPlbnyypVevmKAnw8FeTv1SxulJvz3AAAQPNAIQA1/POf/1RoaKikHz7Rj46O1ubNmzVgwACdPHnSoe+0adN04MABjRs3TiaTSePHj9f06dO1bds2e5/k5GRdvnxZy5cvV3p6uoKCgq57kz9mzBjZbDY9/PDDcnNz0+jRo7Vw4UJlZmbWuPZP5eXlpXnz5unkyZPy9fVVv379aqw+yMjIUEZGhgoKCmSxWLRlyxb7ngV1mevNeO+995Senq7x48ervLxcFotFGRkZtzQm0BSYWzTfm+PmPDcAAND0mQzDMJwdBFCb5ORkmUwmZWZm3rZrnDx5UlFRUTpw4ECNzf8au5KSEpnNZl28eJH9AgAAAAAXVtd7A1YEoFEzDEM5OTnasWOHs0MBAAAAgGaBQgAaNZPJpK+++srZYQAAAABAs0EhAJAUGRkpnpIBAAAA4Ar4+kAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQAAAAAAAFwIhQA0KiaTSR988MF123NycmQymVRcXNxgMf1YZmamWrZsWW/jOXs+AAAAAFwPhQDcFmvWrFFAQICqqqrsx8rKyuTp6akBAwY49L16M3z8+PEbjhsXF6ezZ8/KbDZLqt8b88jISJlMJplMJrm7uyssLExTpkzRhQsX6mV8AA3r4veVOl5UpgOnLuj4/8p08fvKBjkXAACgsfNwdgBonhISElRWVqa9e/fqnnvukSR99tlnCgkJ0Z49e3T58mX5+PhIkrKzsxUREaEOHTrccFwvLy+FhITctrj/8Ic/6NFHH1V1dbUKCwv12GOPacaMGXr77bdv2zUB1L8zxZc0572D+uzYefux/tYgZSTFKKyl7207FwAAoClgRQBui06dOik0NFQ5OTn2Yzk5OXrggQcUFRWl3bt3OxxPSEiwvz9//rxGjRqlFi1ayGq1asuWLQ59ry6lz8nJ0aRJk3Tx4kX7J/kLFy6UJFVUVCg9PV133nmn/Pz81Lt3b4dYricgIEAhISG68847lZCQoOTkZO3fv/+6/Y8fP64HHnhAwcHB8vf3V8+ePfWvf/3LoU9FRYXmzJmj8PBweXt7y2KxaN26ddcc7/vvv9fw4cPVt29fHhcAbtLF7ytr3MhL0r+Pndfc9w7W+un+rZwLAADQVFAIwG2TkJCg7Oxs+/vs7GwNGDBA8fHx9uOXLl3Snj17HAoBv//97zV27FgdPHhQ999/vyZMmKDvvvuuxvhxcXFasWKFAgMDdfbsWZ09e1bp6emSpNTUVO3atUsbNmzQwYMH9eCDD2rYsGE6duxYneP/5ptvtHXrVvXu3fu6fcrKynT//fcrKytLBw4c0LBhwzRixAidOnXK3mfixIl69913tXLlSh05ckSvv/66/P39a4xVXFyswYMHy2azafv27dd95KGiokIlJSUOLwD/73xZZY0b+av+fey8zpdd/2b+Vs4FAABoKigE4LZJSEjQzp07VVVVpdLSUh04cEDx8fHq37+//dP5Xbt2qaKiwqEQ8Mgjj2j8+PGyWCx64YUXVFZWpry8vBrje3l5yWw2y2QyKSQkRCEhIfL399epU6e0fv16bd68Wf369VOHDh2Unp6ue++9V+vXr6815jlz5sjf31++vr5q166dTCaTli1bdt3+3bp107Rp03TXXXfJarXqueeeU4cOHeyrGAoLC7Vp0ya9+eabGjVqlNq3b6+BAwdq3LhxDuOcO3dO8fHxCg0N1datW9WiRYvrXnPx4sUym832V3h4eK1zAlxNyeUrtbaX1tJ+K+cCAAA0FRQCcNsMGDBA5eXlys/P12effaaOHTuqTZs2io+Pt+8TkJOTo/bt2ysiIsJ+XkxMjP1nPz8/BQYGqqioqM7XPXTokKqrq9WxY0f5+/vbX7m5uTfckPDpp59WQUGBDh48qKysLElSYmKiqqurr9m/rKxM6enp6ty5s1q2bCl/f38dOXLEviKgoKBA7u7uio+Pr/W6gwcPlsVi0caNG+Xl5VVr33nz5unixYv21+nTp2vtD7iaQB/PWtsDamm/lXMBAACaCjYLxG1jsVjUrl07ZWdn68KFC/ab4bCwMIWHh+s///mPsrOzdd999zmc5+np+I+2yWSSzWar83XLysrk7u6uffv2yd3d3aHtWkvyfywoKEgWi0WSZLVatWLFCvXp00fZ2dkaNGhQjf7p6enavn27Xn75ZVksFvn6+mrMmDGqrPxh+bCvb902FktMTNR7772nw4cPq2vXrrX29fb2lre3d53GBVxRkL+X+luD9O9rLPHvbw1SkP/1i223ci4AAEBTwYoA3FYJCQnKyclRTk6Ow9cG9u/fX9u2bVNeXp7DYwE/lZeXV41P62NjY1VdXa2ioiJZLBaH10/9xoGrhYRLly5ds33nzp165JFHNGrUKHXt2lUhISE6efKkvb1r166y2WzKzc2t9ToZGRlKTk7WwIEDdfjw4Z8UIwBH5hZeykiKUX9rkMPx/tYgvZgUI3OL69/M38q5AAAATQUrAnBbJSQkKCUlRVeuXHFYHh8fH6/U1FRVVlbeUiEgMjJSZWVlysrKUrdu3dSiRQt17NhREyZM0MSJE7V06VLFxsbqf//7n7KyshQTE6PExMTrjldaWqpz587JMAydPn1av/nNb9SmTRvFxcVds7/VatX777+vESNGyGQyaf78+Q6rFyIjI5WcnKzJkydr5cqV6tatm7766isVFRVp7NixDmO9/PLLqq6u1n333aecnBxFR0ff9O8FcHVhLX31yvhYnS+rVOnlKwrw8VSQv1edbuRv5VwAAICmgBUBuK0SEhJ06dIlWSwWBQcH24/Hx8ertLTU/jWDNysuLk6PP/64xo0bpzZt2mjJkiWSpPXr12vixIl66qmn1KlTJ40cOVL5+fkOexGYTCZlZmY6jLdgwQKFhoYqLCxMv/zlL+Xn56dPPvlErVu3vub1ly1bplatWikuLk4jRozQ0KFD1b17d4c+q1ev1pgxYzR9+nRFR0fr0UcfVXl5+TXHW758ucaOHav77rtPhYWFN/17AfDDp/sd2vrrFxGt1KGt/0+6kb+VcwEAABo7k2EYhrODABraiRMn1LFjRx0+fFhWq9XZ4dySkpISmc1mXbx4UYGBgc4OBwAAAICT1PXegBUBcEkfffSRHnvssSZfBAAAAACAn4o9AuCSUlJSnB0CAAAAADgFKwIAAAAAAHAhFAIAAAAAAHAhFAIAAAAAAHAhFAIAAAAAAHAhFAIAAAAAAHAhFAIAAAAAAHAhFAIAAAAAAHAhFAIAAAAAAHAhFAIAAAAAAHAhFAIAAAAAAHAhFAIAAAAAAHAhHs4OAMCtMQxDklRSUuLkSAAAAAA409V7gqv3CNdDIQBo4kpLSyVJ4eHhTo4EAAAAQGNQWloqs9l83XaTcaNSAYBGzWaz6cyZMwoICJDJZLqlsUpKShQeHq7Tp08rMDCwniIEro+cQ0Mj59CQyDc0NHIOhmGotLRUYWFhcnO7/k4ArAgAmjg3Nze1a9euXscMDAzkjwcaFDmHhkbOoSGRb2ho5Jxrq20lwFVsFggAAAAAgAuhEAAAAAAAgAuhEADAztvbW88++6y8vb2dHQpcBDmHhkbOoSGRb2ho5Bzqis0CAQAAAABwIawIAAAAAADAhVAIAAAAAADAhVAIAAAAAADAhVAIAAAAAADAhVAIAGD36quvKjIyUj4+Purdu7fy8vKcHRKagcWLF6tnz54KCAhQ27ZtNXLkSB09etShz+XLl5WSkqLWrVvL399fSUlJ+vbbb50UMZqbjIwMmUwmzZo1y36MnEN9+uabb/TQQw+pdevW8vX1VdeuXbV37157u2EYWrBggUJDQ+Xr66tBgwbp2LFjTowYTVl1dbXmz5+vqKgo+fr6qkOHDnruuef04z3gyTncCIUAAJKkjRs3avbs2Xr22We1f/9+devWTUOHDlVRUZGzQ0MTl5ubq5SUFO3evVvbt2/XlStXNGTIEJWXl9v7pKWlaevWrdq8ebNyc3N15swZjR492olRo7nIz8/X66+/rpiYGIfj5Bzqy4ULF9S3b195enpq27ZtOnz4sJYuXapWrVrZ+yxZskQrV67UmjVrtGfPHvn5+Wno0KG6fPmyEyNHU/Xiiy9q9erVWrVqlY4cOaIXX3xRS5Ys0SuvvGLvQ87hhgwAMAyjV69eRkpKiv19dXW1ERYWZixevNiJUaE5KioqMiQZubm5hmEYRnFxseHp6Wls3rzZ3ufIkSOGJGPXrl3OChPNQGlpqWG1Wo3t27cb8fHxxsyZMw3DIOdQv+bMmWPce++912232WxGSEiI8dJLL9mPFRcXG97e3sa7777bECGimUlMTDQmT57scGz06NHGhAkTDMMg51A3rAgAoMrKSu3bt0+DBg2yH3Nzc9OgQYO0a9cuJ0aG5ujixYuSpDvuuEOStG/fPl25csUh/6KjoxUREUH+4ZakpKQoMTHRIbckcg71a8uWLerRo4cefPBBtW3bVrGxsXrjjTfs7SdOnNC5c+cc8s1sNqt3797kG25KXFycsrKyVFhYKEn6/PPPtWPHDg0fPlwSOYe68XB2AACc7/z586qurlZwcLDD8eDgYH355ZdOigrNkc1m06xZs9S3b1/dddddkqRz587Jy8tLLVu2dOgbHBysc+fOOSFKNAcbNmzQ/v37lZ+fX6ONnEN9+u9//6vVq1dr9uzZ+u1vf6v8/HzNmDFDXl5eSk5OtufUtf7Gkm+4GXPnzlVJSYmio6Pl7u6u6upqLVq0SBMmTJAkcg51QiEAANBgUlJS9MUXX2jHjh3ODgXN2OnTpzVz5kxt375dPj4+zg4HzZzNZlOPHj30wgsvSJJiY2P1xRdfaM2aNUpOTnZydGiONm3apL/85S9655131KVLFxUUFGjWrFkKCwsj51BnPBoAQEFBQXJ3d6+xY/a3336rkJAQJ0WF5iY1NVUffvihsrOz1a5dO/vxkJAQVVZWqri42KE/+YebtW/fPhUVFal79+7y8PCQh4eHcnNztXLlSnl4eCg4OJicQ70JDQ3Vz3/+c4djnTt31qlTpyTJnlP8jUV9efrppzV37lz9+te/VteuXfXwww8rLS1NixcvlkTOoW4oBACQl5eX7r77bmVlZdmP2Ww2ZWVlqU+fPk6MDM2BYRhKTU3V3/72N3366aeKiopyaL/77rvl6enpkH9Hjx7VqVOnyD/clIEDB+rQoUMqKCiwv3r06KEJEybYfybnUF/69u1b4ytRCwsL9bOf/UySFBUVpZCQEId8Kykp0Z49e8g33JTvv/9ebm6Ot3Hu7u6y2WySyDnUDY8GAJAkzZ49W8nJyerRo4d69eqlFStWqLy8XJMmTXJ2aGjiUlJS9M477+jvf/+7AgIC7M8nms1m+fr6ymw2a8qUKZo9e7buuOMOBQYG6sknn1SfPn10zz33ODl6NEUBAQH2PSiu8vPzU+vWre3HyTnUl7S0NMXFxemFF17Q2LFjlZeXp7Vr12rt2rWSJJPJpFmzZun555+X1WpVVFSU5s+fr7CwMI0cOdK5waNJGjFihBYtWqSIiAh16dJFBw4c0LJlyzR58mRJ5BzqyNlfWwCg8XjllVeMiIgIw8vLy+jVq5exe/duZ4eEZkDSNV/r16+397l06ZIxffp0o1WrVkaLFi2MUaNGGWfPnnVe0Gh2fvz1gYZBzqF+bd261bjrrrsMb29vIzo62li7dq1Du81mM+bPn28EBwcb3t7exsCBA42jR486KVo0dSUlJcbMmTONiIgIw8fHx2jfvr3xzDPPGBUVFfY+5BxuxGQYhuHMQgQAAAAAAGg47BEAAAAAAIALoRAAAAAAAIALoRAAAAAAAIALoRAAAAAAAIALoRAAAAAAAIALoRAAAAAAAIALoRAAAAAAAIALoRAAAAAAAIALoRAAAAAAAIALoRAAAADQiO3atUvu7u5KTEx0digAgGbCZBiG4ewgAAAAcG1Tp06Vv7+/1q1bp6NHjyosLMzZIQEAmjhWBAAAADRSZWVl2rhxo5544gklJiYqMzPToX3Lli2yWq3y8fFRQkKC/vSnP8lkMqm4uNjeZ8eOHerXr598fX0VHh6uGTNmqLy8vGEnAgBoVCgEAAAANFKbNm1SdHS0OnXqpIceekhvvvmmri7mPHHihMaMGaORI0fq888/17Rp0/TMM884nH/8+HENGzZMSUlJOnjwoDZu3KgdO3YoNTXVGdMBADQSPBoAAADQSPXt21djx47VzJkzVVVVpdDQUG3evFkDBgzQ3Llz9Y9//EOHDh2y9//d736nRYsW6cKFC2rZsqWmTp0qd3d3vf766/Y+O3bsUHx8vMrLy+Xj4+OMaQEAnIwVAQAAAI3Q0aNHlZeXp/Hjx0uSPDw8NG7cOK1bt87e3rNnT4dzevXq5fD+888/V2Zmpvz9/e2voUOHymaz6cSJEw0zEQBAo+Ph7AAAAABQ07p161RVVeWwOaBhGPL29taqVavqNEZZWZmmTZumGTNm1GiLiIiot1gBAE0LhQAAAIBGpqqqSm+99ZaWLl2qIUOGOLSNHDlS7777rjp16qSPPvrIoS0/P9/hfffu3XX48GFZLJbbHjMAoOlgjwAAAIBG5oMPPtC4ceNUVFQks9ns0DZnzhx9+umn2rRpkzp16qS0tDRNmTJFBQUFeuqpp/T111+ruLhYZrNZBw8e1D333KPJkydr6tSp8vPz0+HDh7V9+/Y6ryoAADQ/7BEAAADQyKxbt06DBg2qUQSQpKSkJO3du1elpaX661//qvfff18xMTFavXq1/VsDvL29JUkxMTHKzc1VYWGh+vXrp9jYWC1YsMDhcQMAgOthRQAAAEAzsWjRIq1Zs0anT592digAgEaMPQIAAACaqNdee009e/ZU69attXPnTr300ktKTU11dlgAgEaOQgAAAEATdezYMT3//PP67rvvFBERoaeeekrz5s1zdlgAgEaORwMAAAAAAHAhbBYIAAAAAIALoRAAAAAAAIALoRAAAAAAAIALoRAAAAAAAIALoRAAAAAAAIALoRAAAAAAAIALoRAAAAAAAIALoRAAAAAAAIAL+T/iJeh2g2hCyQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "\n", + "# Scatter plot для столбцов 'age' и 'race'\n", + "plt.figure(figsize=(10, 6))\n", + "sns.scatterplot(x='age', y='race', data=df)\n", + "plt.title('Scatter Plot для age и race')\n", + "plt.xlabel('Age')\n", + "plt.ylabel('Race')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Удаление строк с пустыми значениями" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "df_cleaned = df.dropna()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Разбиение набора данных на обучающую, контрольную и тестовую выборки" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Размер обучающей выборки: 4770\n", + "Размер контрольной выборки: 1591\n", + "Размер тестовой выборки: 1591\n" + ] + } + ], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "\n", + "# Разделение на обучающую и тестовую выборки\n", + "train_df, test_df = train_test_split(df_cleaned, test_size=0.2, random_state=42)\n", + "\n", + "# Разделение обучающей выборки на обучающую и контрольную\n", + "train_df, val_df = train_test_split(train_df, test_size=0.25, random_state=42)\n", + "\n", + "print(\"Размер обучающей выборки:\", len(train_df))\n", + "print(\"Размер контрольной выборки:\", len(val_df))\n", + "print(\"Размер тестовой выборки:\", len(test_df))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Применение методов приращения данных (аугментации)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Распределение reace в обучающей выборке после oversampling:\n", + "race\n", + "Black 2187\n", + "White 2187\n", + "Hispanic 2187\n", + "Unknown 2187\n", + "Native American 2187\n", + "Asian 2187\n", + "White,Black,Native American 2187\n", + "Other 2187\n", + "White,Black 2187\n", + "Name: count, dtype: int64\n", + "\n", + "Распределение reace в контрольной выборке после oversampling:\n", + "race\n", + "White 718\n", + "Black 718\n", + "Unknown 718\n", + "Hispanic 718\n", + "Asian 718\n", + "Native American 718\n", + "Other 718\n", + "Name: count, dtype: int64\n", + "\n", + "Распределение reace в тестовой выборке после oversampling:\n", + "race\n", + "Unknown 750\n", + "White 750\n", + "Black 750\n", + "Hispanic 750\n", + "Asian 750\n", + "Native American 750\n", + "Black,Hispanic 750\n", + "Other 750\n", + "White,Black 750\n", + "Native American,Hispanic 750\n", + "Name: count, dtype: int64\n", + "\n", + "Распределение reace в обучающей выборке после undersampling:\n", + "race\n", + "Asian 1\n", + "Black 1\n", + "Hispanic 1\n", + "Native American 1\n", + "Other 1\n", + "Unknown 1\n", + "White 1\n", + "White,Black 1\n", + "White,Black,Native American 1\n", + "Name: count, dtype: int64\n", + "\n", + "Распределение reace в контрольной выборке после undersampling:\n", + "race\n", + "Asian 7\n", + "Black 7\n", + "Hispanic 7\n", + "Native American 7\n", + "Other 7\n", + "Unknown 7\n", + "White 7\n", + "Name: count, dtype: int64\n", + "\n", + "Распределение reace в тестовой выборке после undersampling:\n", + "race\n", + "Asian 1\n", + "Black 1\n", + "Black,Hispanic 1\n", + "Hispanic 1\n", + "Native American 1\n", + "Native American,Hispanic 1\n", + "Other 1\n", + "Unknown 1\n", + "White 1\n", + "White,Black 1\n", + "Name: count, dtype: int64\n", + "\n" + ] + } + ], + "source": [ + "from imblearn.over_sampling import RandomOverSampler\n", + "\n", + "def check_balance(df, name):\n", + " counts = df['race'].value_counts()\n", + " print(f\"Распределение reace в {name}:\")\n", + " print(counts)\n", + " print()\n", + "\n", + "def oversample(df):\n", + " X = df.drop('race', axis=1)\n", + " y = df['race']\n", + " \n", + " oversampler = RandomOverSampler(random_state=42)\n", + " X_resampled, y_resampled = oversampler.fit_resample(X, y)\n", + " \n", + " resampled_df = pd.concat([X_resampled, y_resampled], axis=1)\n", + " return resampled_df\n", + "\n", + "train_df_oversampled = oversample(train_df)\n", + "val_df_oversampled = oversample(val_df)\n", + "test_df_oversampled = oversample(test_df)\n", + "\n", + "check_balance(train_df_oversampled, \"обучающей выборке после oversampling\")\n", + "check_balance(val_df_oversampled, \"контрольной выборке после oversampling\")\n", + "check_balance(test_df_oversampled, \"тестовой выборке после oversampling\")\n", + "\n", + "def undersample(df):\n", + " X = df.drop('race', axis=1)\n", + " y = df['race']\n", + " \n", + " undersampler = RandomUnderSampler(random_state=42)\n", + " X_resampled, y_resampled = undersampler.fit_resample(X, y)\n", + " \n", + " resampled_df = pd.concat([X_resampled, y_resampled], axis=1)\n", + " return resampled_df\n", + "\n", + "train_df_undersampled = undersample(train_df)\n", + "val_df_undersampled = undersample(val_df)\n", + "test_df_undersampled = undersample(test_df)\n", + "\n", + "check_balance(train_df_undersampled, \"обучающей выборке после undersampling\")\n", + "check_balance(val_df_undersampled, \"контрольной выборке после undersampling\")\n", + "check_balance(test_df_undersampled, \"тестовой выборке после undersampling\")" + ] } ], "metadata": {