{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Датасет №1 (рейтинги плиток шоколада) \n", "\n", "Ссылка: https://www.kaggle.com/datasets/rtatman/chocolate-bar-ratings\n", "\n", "Проблемная область: качество шоколада и факторы, влияющие на его оценку потребителями.\n", "\n", "Объекты наблюдения: плитки шоколада, каждая из которых имеет свои уникальные характеристики." ] }, { "cell_type": "code", "execution_count": 532, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Index(['Company (Maker-if known)', 'Specific Bean Originor Bar Name', 'REF',\n", " 'ReviewDate', 'CocoaPercent', 'CompanyLocation', 'Rating', 'BeanType',\n", " 'Broad BeanOrigin'],\n", " dtype='object')\n" ] } ], "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from sklearn.model_selection import train_test_split\n", "\n", "# вывод всех столбцов\n", "df = pd.read_csv(\"..//..//static//csv//flavors_of_cacao.csv\")\n", "df.columns = df.columns.str.replace('\\n', '')\n", "print(df.columns)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Атрибуты: \n", "* Company (Maker-if known) – название компании-производителя плитки;\n", "* Specific Bean Originor Bar Name – географический регион происхождения плитки;\n", "* REF – значение, связанное с тем, когда рецензия была внесена в базу данных. Чем значение больше, тем позже;\n", "* ReviewDate – дата публикации рецензии;\n", "* CocoaPercent – процент какао в плитке;\n", "* CompanyLocation – страна, где базируется производитель;\n", "* Rating – оценка эксперта;\n", "* BeanType – разновидность какао-бобов;\n", "* Broad BeanOrigin – географический регион происхождения бобов.\n", "\n", "Примеры бизнес целей и целей технического проекта:\n", "1. Оптимизация рецептур и производство высококачественного шоколада.\n", " * Бизнес-цель: повышение качества шоколадных плиток на основе анализа рейтингов и факторов, влияющих на вкус и текстуру (процент какао, происхождение бобов, сорт бобов).\n", " * Цель технического проекта: разработка системы анализа и предсказания успешности шоколада на основе его рейтинга, используя характеристики какао-бобов, содержания какао и других параметров.\n", "2. Разработка маркетинговых стратегий для производителей шоколада.\n", " * Бизнес-цель: определение лучших производителей и регионов происхождения какао-бобов для создания продуктов премиум-класса и продвижения их на рынке.\n", " * Цель технического проекта: создание системы ранжирования производителей и регионов на основе данных о рейтингах шоколадных плиток и происхождении какао-бобов.\n", "3. Стратегии закупок сырья для промышленности.\n", " * Бизнес-цель: оптимизация цепочек поставок какао-бобов с высоким качеством для производства шоколада с лучшими характеристиками.\n", " * Цель технического проекта: разработка системы анализа происхождения какао-бобов и их связи с качеством шоколада для улучшения стратегий закупок и логистики.\n", "\n", "Входные данные и целевой признак могут быть следующими:\n", "1. Входные данные:\n", " * Регион происхождения плитки;\n", " * Название кампании-производителя плитки;\n", " * Процент какао в плитке;\n", " * Страна, где базируется производитель;\n", " * Разновидность какао-бобов;\n", " * Регион происхождения бобов.\n", "2. Целевой признак:\n", " * Рейтинг, как оценка качества шоколада.\n", "\n", "Актуальность: анализ качества шоколада и факторов, влияющих на вкусовые характеристики, не только помогает производителям улучшать свои продукты и удовлетворять требования потребителей, но и способствует развитию новых технологий в пищевой промышленности, улучшению цепочек поставок и изучению свойств какао. Поэтому эта тема имеет важное значение для развития кондитерской индустрии, повышения стандартов качества и поддержки устойчивого производства.\n", "\n", "### Проверяем на выбросы" ] }, { "cell_type": "code", "execution_count": 533, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Количество выбросов в столбце 'CocoaPercent': 186\n", "Количество выбросов в столбце 'Rating': 19\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABdIAAAISCAYAAADIuT2dAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABTwElEQVR4nO3deXhU5f03/k8IJEFWEdkUQVRAcV8fpApUqiL4gAsWRQERV6zSqnWtQK2l1ta1fsEVbFWsWHdFjbg9KnWniiKi4i5YZVfW5Pz+8Jf5EhIOmRBIoq/XdeXSOeeemc9Z5sx93py5T06SJEkAAAAAAADlqlPdBQAAAAAAQE0mSAcAAAAAgBSCdAAAAAAASCFIBwAAAACAFIJ0AAAAAABIIUgHAAAAAIAUgnQAAAAAAEghSAcAAAAAgBSCdAAAAAAASCFIB36SPv7448jJyYmJEydWdymlPP7447H77rtHQUFB5OTkxMKFC6u7JAAA+FFyTpCd0aNHR05OTnWXAVBtBOnABpk4cWLk5OSU+mvRokX07NkzpkyZssnrefbZZ0vVUq9evejQoUMMHjw4Pvrooyp5j5deeilGjx5d5R3ab7/9No455pioX79+3HDDDfGPf/wjGjRokPqcDz/8ME499dTo0KFDFBQUROPGjaNbt25x7bXXxrJly6q0vo1l7X2ooKAgOnbsGGeeeWbMmzevusvbYO+++26MHj06Pv744+ouBQBgo3BOUHWyOSdYe73XrVs3ttpqqxg6dGh88cUXlXr/77//PkaPHh3PPvvsBiwFwI9T3eouAPhx+P3vfx/bbrttJEkS8+bNi4kTJ8Zhhx0WDz/8cPTt23eT13PWWWfFPvvsE6tWrYo33ngjbrrppnj00Ufj7bffjjZt2mzQa7/00ksxZsyYGDp0aDRt2rRqCo6IV199NZYsWRKXXXZZ9OrVa73tH3300RgwYEDk5+fH4MGDY+edd46VK1fGCy+8EOedd1688847cdNNN1VZfRtbyT60fPnyeOGFF2LcuHHx2GOPxYwZM2KzzTar7vIq7d13340xY8ZEjx49on379tVdDgDARuOcYMNle04QUbof/e9//zsmTpwYL7zwQsyYMSMKCgqyev/vv/8+xowZExERPXr0KDXvkksuiQsuuCCr1wP4MRGkA1Wid+/esffee2cen3TSSdGyZcuYNGlStXSaDzjggDj66KMjIuLEE0+Mjh07xllnnRW33357XHjhhZu8nor4+uuvIyIq1BGfM2dODBw4MNq1axdPP/10tG7dOjNvxIgR8cEHH8Sjjz66sUrdKNbch4YPHx5bbLFFXHXVVfHggw/Gscceu0Gv/f3339fqMB4AoDZwTrDhsjknKLF2P7p58+ZxxRVXxEMPPRTHHHNMldVWt27dqFtXjAT8dBnaBdgomjZtGvXr1y/T0fruu+/inHPOibZt20Z+fn506tQp/vKXv0SSJBERsWzZsujcuXN07ty51NAk8+fPj9atW8f+++8fRUVFWdfz85//PCJ+CKDTPP3003HAAQdEgwYNomnTptGvX7+YOXNmZv7o0aPjvPPOi4iIbbfdNvMzyvUN2zF58uTYa6+9on79+tG8efM4/vjjS/3cskePHjFkyJCIiNhnn30iJycnhg4dus7X+/Of/xxLly6NW2+9tVSIXmL77bePs88+O/N49erVcdlll8V2220X+fn50b59+7joootixYoVZZ47ZcqU6N69ezRq1CgaN24c++yzT9x1111ZLU9ExFtvvRVDhw7NDDvTqlWrGDZsWHz77bep66pEedvsjjvuyLxvs2bNYuDAgfHZZ5+Vel6PHj1i5513jtdffz0OPPDA2GyzzeKiiy6KiIjly5fH6NGjo2PHjlFQUBCtW7eOI488Mj788MPM84uLi+Oaa66JLl26REFBQbRs2TJOPfXUWLBgQan3ad++ffTt2zdeeOGF2HfffaOgoCA6dOgQf//73zNtJk6cGAMGDIiIiJ49e2b2Fz+VBQB+CpwTlFbV5wTrcsABB0RElOrjrly5Mi699NLYa6+9okmTJtGgQYM44IAD4plnnsm0+fjjj2PLLbeMiIgxY8Zklmv06NGZ5V57jPScnJw488wz44EHHoidd9458vPzo0uXLvH444+XqevZZ5+NvffeOwoKCmK77baLG2+80bjrQK3inxKBKrFo0aL45ptvIkmS+Prrr+P666+PpUuXxvHHH59pkyRJ/N//+3/jmWeeiZNOOil23333eOKJJ+K8886LL774Iq6++uqoX79+3H777dGtW7e4+OKL46qrroqIH66yXrRoUUycODFyc3Ozrq+kE7nFFluss81TTz0VvXv3jg4dOsTo0aNj2bJlcf3110e3bt3ijTfeiPbt28eRRx4Z77//fkyaNCmuvvrqaN68eUREpsNZnokTJ8aJJ54Y++yzT4wdOzbmzZsX1157bbz44ovx5ptvRtOmTePiiy+OTp06xU033ZT5aeZ22223ztd8+OGHo0OHDrH//vtXaPmHDx8et99+exx99NFxzjnnxMsvvxxjx46NmTNnxv3331+q1mHDhkWXLl3iwgsvjKZNm8abb74Zjz/+eBx33HEVXp6IiMLCwvjoo4/ixBNPjFatWmWGmnnnnXfi3//+93o7zGtvs8svvzx+97vfxTHHHBPDhw+P//73v3H99dfHgQceWOp9I34YW7J3794xcODAOP7446Nly5ZRVFQUffv2jalTp8bAgQPj7LPPjiVLlkRhYWHMmDEjs75PPfXUzDKeddZZMWfOnPjb3/4Wb775Zrz44otRr169zPt88MEHcfTRR8dJJ50UQ4YMidtuuy2GDh0ae+21V3Tp0iUOPPDAOOuss+K6666Liy66KHbccceIiMx/AQB+TJwTbNpzgnUpCfQ333zzzLTFixfHLbfcEscee2ycfPLJsWTJkrj11lvjkEMOiVdeeSV233332HLLLWPcuHFx+umnxxFHHBFHHnlkRETsuuuuqe/3wgsvxH333RdnnHFGNGrUKK677ro46qij4tNPP82s6zfffDMOPfTQaN26dYwZMyaKiori97//feo6A6hxEoANMGHChCQiyvzl5+cnEydOLNX2gQceSCIi+cMf/lBq+tFHH53k5OQkH3zwQWbahRdemNSpUyd5/vnnk8mTJycRkVxzzTXrreeZZ55JIiK57bbbkv/+97/Jl19+mTz66KNJ+/btk5ycnOTVV19NkiRJ5syZk0REMmHChMxzd99996RFixbJt99+m5n2n//8J6lTp04yePDgzLQrr7wyiYhkzpw5661n5cqVSYsWLZKdd945WbZsWWb6I488kkREcumll2amlazLkhrXZdGiRUlEJP369Vvv+ydJkkyfPj2JiGT48OGlpp977rlJRCRPP/10kiRJsnDhwqRRo0bJfvvtV6rWJEmS4uLirJfn+++/L1PLpEmTkohInn/++TLL/dRTTyX//e9/k88++yy5++67ky222CKpX79+8vnnnycff/xxkpubm1x++eWlXu/tt99O6tatW2p69+7dk4hIxo8fX6rtbbfdlkREctVVV5Wpq2T5/t//+39JRCR33nlnqfmPP/54ment2rUrsyxff/11kp+fn5xzzjmZaSX77zPPPFPmfQEAfgycE6TbGOcEa7Zdsx997733JltuuWWSn5+ffPbZZ5m2q1evTlasWFHq+QsWLEhatmyZDBs2LDPtv//9bxIRyahRo8q836hRo5K1Y6SISPLy8kptt//85z9JRCTXX399Ztrhhx+ebLbZZskXX3yRmTZ79uykbt26ZV4ToKYytAtQJW644YYoLCyMwsLCuOOOO6Jnz54xfPjwuO+++zJtHnvsscjNzY2zzjqr1HPPOeecSJIkpkyZkpk2evTo6NKlSwwZMiTOOOOM6N69e5nnpRk2bFhsueWW0aZNm+jTp0989913cfvtt5cas3FNX331VUyfPj2GDh0azZo1y0zfdddd4xe/+EU89thjFX7vNb322mvx9ddfxxlnnFHqRj99+vSJzp07V2oc88WLF0dERKNGjSrUvqT23/zmN6Wmn3POORERmRoKCwtjyZIlccEFF5S5KVHJ1ePZLE/9+vUz/798+fL45ptv4v/8n/8TERFvvPFGmTp79eoVW265ZbRt2zYGDhwYDRs2jPvvvz+22mqruO+++6K4uDiOOeaY+OabbzJ/rVq1ih122KHUT1IjIvLz8+PEE08sNe1f//pXNG/ePH71q1+Vee+S5Zs8eXI0adIkfvGLX5R6n7322isaNmxY5n122mmnzE9nI364CqlTp07x0UcflXkPAIAfO+cE5dsY5wRrWrMfffTRR0eDBg3ioYceiq233jrTJjc3N/Ly8iLih6EM58+fH6tXr46999673L55tu+/5pXzu+66azRu3DjTJy4qKoqnnnoq+vfvX+omr9tvv3307t17g94bYFMytAtQJfbdd99SHdJjjz029thjjzjzzDOjb9++kZeXF5988km0adOmTABcMszFJ598kpmWl5cXt912W+yzzz5RUFAQEyZMyGrsvEsvvTQOOOCAyM3NjebNm8eOO+6YemOckvfu1KlTmXk77rhjPPHEE/Hdd99FgwYNKlzD+l63c+fO8cILL2T1ehERjRs3joiIJUuWVLiGOnXqxPbbb19qeqtWraJp06aZGkt+6rrzzjunvlZExZZn/vz5MWbMmLj77rszN00qsWjRojLPv+GGG6Jjx45Rt27daNmyZXTq1Cnq1Pnh33tnz54dSZLEDjvsUG5daw63EhGx1VZbZU4USnz44YfRqVOn1P1g9uzZsWjRomjRokW589dejm222aZMm80337zMeOoAAD8Fzgmyf93KnhOsqaQfvWjRorjtttvi+eefj/z8/DLtbr/99vjrX/8a7733XqxatSozfdttt92g919fn/jrr7+OZcuWlTkfiYhypwHUVIJ0YKOoU6dO9OzZM6699tqYPXt2dOnSJevXeOKJJyLih6uZZ8+enVUHb5dddolevXpl/Z61QePGjaNNmzYxY8aMrJ63qW/ic8wxx8RLL70U5513Xuy+++7RsGHDKC4ujkMPPTSKi4vLtF/7xGtNxcXFkZOTE1OmTCl3PMyGDRuWerzm1fDZKC4ujhYtWsSdd95Z7vy1x3Bc19icyf9/oywAgJ8y5wSbxpr96P79+8fPfvazOO6442LWrFmZfvIdd9wRQ4cOjf79+8d5550XLVq0iNzc3Bg7dmypm5JWhj4x8FMhSAc2mtWrV0dExNKlSyMiol27dvHUU0/FkiVLSl2B8t5772Xml3jrrbfi97//fZx44okxffr0GD58eLz99tvRpEmTjVJryXvPmjWrzLz33nsvmjdvnrnyJJtAes3X/fnPf15q3qxZs0otczb69u0bN910U0ybNi26du263hqKi4tj9uzZpW5yOW/evFi4cGGmhpKfY86YMWOdV4ZUdHkWLFgQU6dOjTFjxsSll16aaTN79uwslzQytSVJEttuu2107Nix0q/x8ssvx6pVq8pcwb5mm6eeeiq6detW6TB+bZv6HzAAAGoS5wQb75ygPCXheM+ePeNvf/tbXHDBBRERce+990aHDh3ivvvuK1X7qFGjSj1/Y/RdW7RoEQUFBfHBBx+UmVfeNICayhjpwEaxatWqePLJJyMvLy8T3h522GFRVFQUf/vb30q1vfrqqyMnJyczPt6qVati6NCh0aZNm7j22mtj4sSJMW/evPj1r3+90ept3bp17L777nH77bfHwoULM9NnzJgRTz75ZBx22GGZaSWd5zXbrcvee+8dLVq0iPHjx8eKFSsy06dMmRIzZ86MPn36VKre3/72t9GgQYMYPnx4zJs3r8z8Dz/8MK699tqIiEzt11xzTak2V111VUREpoaDDz44GjVqFGPHjo3ly5eXaltyNUlFl6fkqpS1r0JZu4aKOvLIIyM3NzfGjBlT5jWTJIlvv/12va9x1FFHxTfffFNm/1uzzmOOOSaKiorisssuK9Nm9erVFdrma8tmfwEA+DFxTvCDjXVOsC49evSIfffdN6655ppMv768/vnLL78c06ZNK/XczTbbLCKqtu+am5sbvXr1igceeCC+/PLLzPQPPvig1Jj4ADWdK9KBKjFlypTMVSRff/113HXXXTF79uy44IILMmN6H3744dGzZ8+4+OKL4+OPP47ddtstnnzyyXjwwQdj5MiRmSui//CHP8T06dNj6tSp0ahRo9h1113j0ksvjUsuuSSOPvroUh3YqnTllVdG7969o2vXrnHSSSfFsmXL4vrrr48mTZrE6NGjM+322muviIi4+OKLY+DAgVGvXr04/PDDyx0rsV69enHFFVfEiSeeGN27d49jjz025s2bF9dee220b9++0icC2223Xdx1113xy1/+MnbccccYPHhw7LzzzrFy5cp46aWXYvLkyTF06NCIiNhtt91iyJAhcdNNN8XChQuje/fu8corr8Ttt98e/fv3j549e0bED0PGXH311TF8+PDYZ5994rjjjovNN988/vOf/8T3338ft99+e4WXp3HjxnHggQfGn//851i1alVstdVW8eSTT8acOXMqvbx/+MMf4sILL4yPP/44+vfvH40aNYo5c+bE/fffH6ecckqce+65qa8xePDg+Pvf/x6/+c1v4pVXXokDDjggvvvuu3jqqafijDPOiH79+kX37t3j1FNPjbFjx8b06dPj4IMPjnr16sXs2bNj8uTJce2118bRRx+dVe2777575ObmxhVXXBGLFi2K/Pz8+PnPf77OcdgBAGor5wSb9pwgzXnnnRcDBgyIiRMnxmmnnRZ9+/aN++67L4444ojo06dPzJkzJ8aPHx877bRT5tcCET8MkbjTTjvFP//5z+jYsWM0a9Ysdt5559T7KFXE6NGj48knn4xu3brF6aefnvnHlJ133jmmT5++gUsLsIkkABtgwoQJSUSU+isoKEh23333ZNy4cUlxcXGp9kuWLEl+/etfJ23atEnq1auX7LDDDsmVV16Zaff6668ndevWTX71q1+Vet7q1auTffbZJ2nTpk2yYMGCddbzzDPPJBGRTJ48ObXuOXPmJBGRTJgwodT0p556KunWrVtSv379pHHjxsnhhx+evPvuu2Wef9lllyVbbbVVUqdOnSQikjlz5qS+3z//+c9kjz32SPLz85NmzZolgwYNSj7//PNSbUrW5auvvpr6Wmt6//33k5NPPjlp3759kpeXlzRq1Cjp1q1bcv311yfLly/PtFu1alUyZsyYZNttt03q1auXtG3bNrnwwgtLtSnx0EMPJfvvv39mHey7777JpEmTsl6ezz//PDniiCOSpk2bJk2aNEkGDBiQfPnll0lEJKNGjarUcv/rX/9KfvaznyUNGjRIGjRokHTu3DkZMWJEMmvWrEyb7t27J126dCn3+d9//31y8cUXZ9ZDq1atkqOPPjr58MMPS7W76aabkr322iupX79+0qhRo2SXXXZJfvvb3yZffvllpk27du2SPn36lHmP7t27J927dy817eabb046dOiQ5ObmJhGRPPPMM+tdVgCA2sI5QfWcE6S1LSoqSrbbbrtku+22S1avXp0UFxcnf/zjH5N27dol+fn5yR577JE88sgjyZAhQ5J27dqVeu5LL72U7LXXXkleXl6pvvuoUaOStWOkiEhGjBhR5v3btWuXDBkypNS0qVOnJnvssUeSl5eXbLfddsktt9ySnHPOOUlBQcF6lxWgJshJEnd/AAAAAGDT6t+/f7zzzjuVvpcSwKZkjHQAAAAANqply5aVejx79ux47LHHokePHtVTEECWXJEOAAAAwEbVunXrGDp0aHTo0CE++eSTGDduXKxYsSLefPPN2GGHHaq7PID1crNRAAAAADaqQw89NCZNmhRz586N/Pz86Nq1a/zxj38UogO1hivSAQAAAAAghTHSAQAAAAAghSAdAAAAAABSVHqM9OLi4vjyyy+jUaNGkZOTU5U1AQDAj1qSJLFkyZJo06ZN1KmzYde26JcDAEDlZNMvr3SQ/uWXX0bbtm0r+3QAAPjJ++yzz2LrrbfeoNfQLwcAgA1TkX55pYP0Ro0aZd6kcePGlX0ZAAD4yVm8eHG0bds206feEPrlAABQOdn0yysdpJf8bLRx48Y67AAAUAlVMRSLfjkAAGyYivTL3WwUAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIEXd6i4AgIqbN29eLFq0qLrL2GiaNGkSLVu2rO4yAAD4Cfux97lrM+cLQHUSpAPUEu+9916cccaIKC4uqu5SNpp6eflxxz/+rnMMAEC1mDdvXhx/wuBYtXJFdZdCOZwvANVJkA5QS3z22WdRXFwUy7faM4qabF3d5VS5OssXRXz0XCxatEjHGACAarFo0aJYtXJFLOvQPYoLmlR3OZtMnWULo/6c52PZtgdGcf2m1V1OuZwvANVNkA5QyyR5DaO4QfPqLgMAAH60igua/CT73MX1m/4klxugItxsFAAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSgU1q+fLl8f7778fy5curuxT4UfHZAoAf+E4EWDfHSKg8QTqwSX366adxyimnxKefflrdpcCPis8WAPzAdyLAujlGQuUJ0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACBF3eouoLKKiorirbfeivnz50ezZs1i1113jdzc3OouK5Waa2Yd7733Xpx22mmZx+PHj4/OnTuX23blypXx4IMPxpdffhlt2rSJfv36RV5eXpXUPXfu3Dj99NNj6dKl0bBhwxg3bly0atVqwxbu//f3v/89brvttszjYcOGxaBBg8qtLZs6Pvjggzj55JMjSZLIycmJm2++ObbffvsqqRnYOJYuXRpjx47NHMcuvPDCaNiw4Qa3jYh44IEH4pprrsk8HjlyZPTv37/cttkcH7P9DsjmOJbNcT3b4/SyZcvixhtvjM8//zy23nrrOPXUU6N+/frrbE/lZPvdPH369Bg5cmTm8TXXXBO77777xi/0RyzbYwXl+/zzz2P48OGxYsWKyM/Pj1tuuSW23nrr6i6rFMc1AKCqZNuPrwlqZZD+/PPPx//8z//E3LlzM9NatWoVZ5xxRhx44IHVWNm6qblm1tGjR48y00pC9WeffbbU9PHjx8fkyZOjqKio1LQBAwaUCuIrU/ehhx4ay5cvzzxesGBBDBw4MAoKCuLxxx+vzKJllLeMt912W6lgvaS2b7/9NlatWlWhOtZ+3SRJYvjw4RFRdt0BNcNpp50W7733XubxnDlzom/fvtG5c+cYP358pdtGlH+sueaaa+Kaa64pc0zI5viY7XdANsfTbI7r2R6nL7744njxxRczj1977bV44IEHolu3bnH55ZeXaU/lZPvdXN5+WhKq++6qnGyPFZTvoIMOKrUfL1++PI4//vjIzc2NqVOnVmNl/8txDQCoKtn242uKWje0y/PPPx+jRo2KDh06xA033BCPPfZY3HDDDdGhQ4cYNWpUPP/889VdYhlqrpl1rHkynZOTE0cddVTk5OSUO3/8+PFx9913R+PGjePcc8+Nf/3rX3HuuedG48aN4+677y5zophN3WuGM61atYpRo0ZlrnBcvnx5HHrooVWyjBERTZs2LdOmpLZ58+ZlQvT11bHm6+bm5sYJJ5xQ6urQ8oIKoHqVhF05OTlx8MEHxy233BIHH3xw5OTklPllTjZtI8p+5tu0abPO+dkcH7P9DsjmeJrNcT3b43RJ2FSvXr047rjj4o477ojjjjsu6tWrFy+++GJcfPHF695QVFi2381r76cHHXRQ6nzWL9tjBeVbM0Rv3LhxnHPOOdG4ceOI+OEXOWvvq9XBcQ0AqCrZ9uNrkpwkSZLKPHHx4sXRpEmTWLRoUaajt7EVFRXFoEGDokOHDvGHP/wh6tT5338HKC4ujksuuSTmzJkTd9xxR40ZMkXNNbOONU/uJk6cGO3bt8/M+/jjj2Po0KER8cOHu0OHDtG7d+9o3LhxTJ48OerW/d8fcqxevToGDBgQixcvjilTpkReXl5Wdf/3v/+NgQMHRsQPQyKsGXQvXLgwMyTC3XffnfUwL2sO53LuuedG3759M7UlSRLz5s2LiB+GeTn44IMzdTRr1iwmT56cWadr17F06dLMled33HFHqZ8cf/7553H88cdHRMQtt9xS7jAv77//fpxyyilx0003RceOHbNapp+6wsLCuPzyy2PZtgfG6uY/viF06nz3TTR49yH7RiWlfbaWLl0affv2jZycnJgyZUoUFBRk5i1fvjx69+4dSZLEI488EhFR4bYNGzYsNZzLxRdfHL/4xS8y7Uv22Ygfrvo9/PDDK3x8jIisvgPmzp1b4eNps2bNKnxcnz9/flbH6WXLlkXv3r2jXr168eijj5b6aeLKlSujT58+sWrVqpgyZYrhEDbAypUrs/puXnM4l7WHcFuzT7Aph3mpyr50dfTLszmuGOZl3dbsO917773RvHnzzLxvvvkmjj766Igo2+falGrjcU1/kw1Rsv98t9P/jeIGzdf/hB+Jkr54TV5u5wtVwzGS6pRtP35TyKYvXeGhXVasWBErVqwo9Sab2ltvvRVz586N3/3ud6VOqCMi6tSpE4MGDYoRI0bEW2+9FXvssccmr688aq6ZdZScMOfk5JQK0SMi2rdvHzk5OZEkSZx22mkxYsSIKCoqipNOOqnUBzwiom7dujFs2LD461//Gg8++GAMGDAgq7p///vfR8QPVziufbV406ZNo1WrVpkxee+///6slnHNoVv69u0bEf+7Tm+44YYYMWJEpl3Jazdr1izmz59fap2uXcfChQsj4ocr0dc+odt6660jNzc3ioqK4uSTT45nnnlmnfV98sknWS0PEV999VV1l7BJ2DcqJ229jR07NiIifvGLX5QKuyIiCgoKolevXlFYWJhpV9G2l19+eakx0dcM0UselwTp11xzTbRr167Cx8eIyOo74PTTT4+Iih1PjzvuuAof1++6664Kv+79998fN954Y0REDBgwoEzHLy8vL44++uiYNGlS3HjjjaXG6SY7Dz74YFbfzWuu67Xvg7Lm45EjR9aKIV5qQr88m+OKYT/WreTihMaNG5cK0SMimjdvHo0aNYolS5bE8OHDN3i4v8qqzcc1fQoqw35T89lGG8b6ozpl24+vaSocpI8dOzbGjBmzMWtZr/nz50dExLbbblvu/JLpJe1qAjXX7DqOPPLIcqcffvjh8dBDD0VExJdffhkREV27di23bcn0knbZ1L106dKIiDj11FPLbXvSSSfF5ZdfnmlXGWsGP2vWVnJiFhGZ1z/llFPiT3/6U5l1umYdJT9iOe6448p9vwEDBsTdd98d6/uxi5Nq1sW+UfVKjk/HHHNMufMHDBgQhYWFmXbZto0oO5xLiS233DL++9//RkTljusVbZvN8TSb43q2x+nPP/88IiIOO+ywctsfdthhMWnSpEw7Kifb7+YS6xoi48ADD6yRQ+2tS03ol1fmuEJZJf8gcvLJJ5c7/8QTT4zrrruu1D+cbGq1+bimTwE/Tj7bUHtVth9fU1Q4SL/wwgvjN7/5Tebx4sWLo23bthulqHVp1qxZRPxwE6MuXbqUmT9nzpxS7WoCNdfsOu6777741a9+VWb6ww8/nPn/knBo2rRpmSu71zRt2rRS7bKpu2HDhrFgwYK48cYbo2fPnmXa3nrrrRERG/ST6JIryNeurSREL3n9BQsWxE033VSqXXl1LFy4MJIkibvuuitOOumkMu83efLkiIhS482X5+KLL4527dplv0A/Yf/+97/L3CT2x8i+UTmffPLJOk8q2rRpE3PmzIl77rknLrroojLzSz63JcexbNqWWFdHpyREj6jccb2ibbM5nmZzXM/2OL311lvHa6+9Fo899liccsopZdo/9thjmXZUXrbfzSWmTp0av/vd78q0r00hekTN6Jdne1yhfPn5+bF8+fK4+eab4/DDDy8zf8KECZl21aU2H9f0KaiMtD4VNYPP9oaxj1OdKtuPrykqHKTn5+dXawcuImLXXXeNVq1axZ133lnueKl33nlntG7dOnbddddqrLI0NdfMOsaPHx+nnXZaJEkSH3/8cZkx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J/r06RM9e/aM6dOnx8iRI2P48OHxxBNPbORKa7Zs12OJWbNmleoftGjRYiNVWDs899xzMWLEiPj3v/8dhYWFsWrVqjj44IPju+++W+dzXnrppTj22GPjpJNOijfffDP69+8f/fv3jxkzZmzCymuWyqzHiIjGjRuX2h8/+eSTTVRxzbT11lvHn/70p3j99dfjtddei5///OfRr1+/eOedd8ptb18sX7brMcK+uD7ryufWZp9MV9H1GGGfLE9azri2WrEvJlVoyZIlyQ477JAUFhYm3bt3T84+++wkSZJk4cKFSb169ZLJkydn2s6cOTOJiGTatGlVWQIbYNSoUcluu+1W7jzbsHY4//zzk5/97GfrnF9cXJy0atUqufLKKzPTFi5cmOTn5yeTJk3aFCWSpbPPPjvZbrvtkuLiYp/DWqJPnz7JsGHDSk078sgjk0GDBiVJ4nNYG3z//fdJbm5u8sgjj5SavueeeyYXX3yxbVgLRERy//33Zx5XZJu9++67SUQkr776aqbNlClTkpycnOSLL77YZLXXBmuv3/L89re/Tbp06VJq2i9/+cvkkEMO2YiV1S4VWY/PPPNMEhHJggULNklNtdXXX3+dRETy3HPPrbPNMccck/Tp06fUtP322y859dRTN3Z5tUZF1uOECROSJk2abLqiaqnNN988ueWWW8qdZ1+suLT1aF9Mt658rjz2yXXLZj3aJ8tKyxnLUxv2xSq9In3EiBHRp0+f6NWrV6npr7/+eqxatarU9M6dO8c222wT06ZNq8oS2ECzZ8+ONm3aRIcOHWLQoEHx6aefRoRtWFs89NBDsffee8eAAQOiRYsWsccee8TNN9+cmT9nzpyYO3duqe3YpEmT2G+//WzHGmjlypVxxx13xLBhwyInJ8fnsJbYf//9Y+rUqfH+++9HRMR//vOfeOGFF6J3794R4XNYG6xevTqKiorK/BSzfv368cILL9iGtVBFttm0adOiadOmsffee2fa9OrVK+rUqRMvv/zyJq+5tps2bVqZc4JDDjnEZ6SSdt9992jdunX84he/iBdffLG6y6lxFi1aFBERzZo1W2cb++T6VWQ9RkQsXbo02rVrF23btl3vFcM/NUVFRXH33XfHd999F127di23jX1x/SqyHiPsi2nWlc+Vxz65btmsxwj7ZHnWlTOWpzbsi3Wr6oXuvvvueOONN0qNH1pi7ty5kZeXF02bNi01vWXLlj/58f1qkv322y8mTpwYnTp1iq+++irGjBkTBxxwQMyYMcM2rCU++uijGDduXPzmN7+Jiy66KF599dU466yzIi8vL4YMGZLZVi1btiz1PNuxZnrggQdi4cKFMXTo0IhwLK0tLrjggli8eHF07tw5cnNzo6ioKC6//PIYNGhQRITPYS3QqFGj6Nq1a1x22WWx4447RsuWLWPSpEkxbdq02H777W3DWqgi22zu3LllhsuoW7duNGvWzHathLlz55a7vhcvXhzLli2L+vXrV1NltUvr1q1j/Pjxsffee8eKFSvilltuiR49esTLL78ce+65Z3WXVyMUFxfHyJEjo1u3brHzzjuvs9269kmf7x9UdD126tQpbrvttth1111j0aJF8Ze//CX233//eOedd2LrrbfehBXXLG+//XZ07do1li9fHg0bNoz7778/dtppp3Lb2hfXLZv1aF9ct7R8rjz2yfJlux7tk2Wl5YyNGjUq07427ItVEqR/9tlncfbZZ0dhYeFPfiD92qzkasmIiF133TX222+/aNeuXdxzzz1OdmqJ4uLi2HvvveOPf/xjRETsscceMWPGjBg/fnwMGTKkmqsjW7feemv07t072rRpU92lkIV77rkn7rzzzrjrrruiS5cumbGB27Rp43NYi/zjH/+IYcOGxVZbbRW5ubmx5557xrHHHhuvv/56dZcG/IR06tQpOnXqlHm8//77x4cffhhXX311/OMf/6jGymqOESNGxIwZM1LHXGX9Kroeu3btWuoK4f333z923HHHuPHGG+Oyyy7b2GXWWJ06dYrp06fHokWL4t57740hQ4bEc889t84QmPJlsx7ti+WTz1WNyqxH+2RZaTnjSSedVI2VVV6VDO3y+uuvx9dffx177rln1K1bN+rWrRvPPfdcXHfddVG3bt1o2bJlrFy5MhYuXFjqefPmzYtWrVpVRQlsBE2bNo2OHTvGBx98EK1atbINa4HWrVuX6WTsuOOOmZ/OlGyrefPmlWpjO9Y8n3zySTz11FMxfPjwzDSfw9rhvPPOiwsuuCAGDhwYu+yyS5xwwgnx61//OsaOHRsRPoe1xXbbbRfPPfdcLF26ND777LN45ZVXYtWqVdGhQwfbsBaqyDZr1apVfP3116Xmr169OubPn2+7VkKrVq3KXd+NGzd2gcYG2nfffeODDz6o7jJqhDPPPDMeeeSReOaZZ9Z7td+69kmf7+zW49rq1asXe+yxx09+n8zLy4vtt98+9tprrxg7dmzstttuce2115bb1r64btmsx7XZF3+wvnyuqKiozHPsk2VVZj2uzT5Z1po5Y3lqw75YJUH6QQcdFG+//XZMnz4987f33nvHoEGDMv9fr169mDp1auY5s2bNik8//TR1vCuq19KlS+PDDz+M1q1bx1577WUb1gLdunWLWbNmlZr2/vvvR7t27SIiYtttt41WrVqV2o6LFy+Ol19+2XasYSZMmBAtWrSIPn36ZKb5HNYO33//fdSpU/rrNTc3N4qLiyPC57C2adCgQbRu3ToWLFgQTzzxRPTr1882rIUqss26du0aCxcuLPWrg6effjqKi4tjv/322+Q113Zdu3Yttb4jIgoLC31GqsD06dOjdevW1V1GtUqSJM4888y4//774+mnn45tt912vc+xT5ZVmfW4tqKionj77bd/8vvk2oqLi2PFihXlzrMvVlzaelybffEH68vncnNzyzzHPllWZdbj2uyTZa2ZM5anVuyLG+supmvfzfa0005Lttlmm+Tpp59OXnvttaRr165J165dN9bbUwnnnHNO8uyzzyZz5sxJXnzxxaRXr15J8+bNk6+//jpJEtuwNnjllVeSunXrJpdffnkye/bs5M4770w222yz5I477si0+dOf/pQ0bdo0efDBB5O33nor6devX7Ltttsmy5Ytq8bKWVNRUVGyzTbbJOeff36ZeT6HNd+QIUOSrbbaKnnkkUeSOXPmJPfdd1/SvHnz5Le//W2mjc9hzff4448nU6ZMST766KPkySefTHbbbbdkv/32S1auXJkkiW1YEy1ZsiR58803kzfffDOJiOSqq65K3nzzzeSTTz5JkqRi2+zQQw9N9thjj+Tll19OXnjhhWSHHXZIjj322OpapBplfev3ggsuSE444YRM+48++ijZbLPNkvPOOy+ZOXNmcsMNNyS5ubnJ448/Xl2LUCNkux6vvvrq5IEHHkhmz56dvP3228nZZ5+d1KlTJ3nqqaeqaxFqhNNPPz1p0qRJ8uyzzyZfffVV5u/777/PtDnhhBOSCy64IPP4xRdfTOrWrZv85S9/SWbOnJmMGjUqqVevXvL2229XxyLUCJVZj2PGjEmeeOKJ5MMPP0xef/31ZODAgUlBQUHyzjvvVMci1AgXXHBB8txzzyVz5sxJ3nrrreSCCy5IcnJykieffDJJEvtiRWW7Hu2LFbd2PmefrJz1rUf7ZFnryxlr4764yYL0ZcuWJWeccUay+eabJ5tttllyxBFHJF999dXGensq4Ze//GXSunXrJC8vL9lqq62SX/7yl8kHH3yQmW8b1g4PP/xwsvPOOyf5+flJ586dk5tuuqnU/OLi4uR3v/td0rJlyyQ/Pz856KCDklmzZlVTtZTniSeeSCKi3O3ic1jzLV68ODn77LOTbbbZJikoKEg6dOiQXHzxxcmKFSsybXwOa75//vOfSYcOHZK8vLykVatWyYgRI5KFCxdm5tuGNc8zzzyTRESZvyFDhiRJUrFt9u233ybHHnts0rBhw6Rx48bJiSeemCxZsqQalqbmWd/6HTJkSNK9e/cyz9l9992TvLy8pEOHDsmECRM2ed01Tbbr8Yorrki22267pKCgIGnWrFnSo0eP5Omnn66e4muQ8tZhRJTax7p3755ZryXuueeepGPHjkleXl7SpUuX5NFHH920hdcwlVmPI0eOTLbZZpskLy8vadmyZXLYYYclb7zxxqYvvgYZNmxY0q5duyQvLy/Zcsstk4MOOigT/iaJfbGisl2P9sWKWzufs09WzvrWo32yrPXljLVxX8xJkiTZBBe+AwAAAABArVQlY6QDAAAAAMCPlSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAYCN79tlnIycnJxYuXFjdpQBQCYJ0gAqYO3du/OpXv4oOHTpEfn5+tG3bNg4//PCYOnVqdZeWMXTo0MjJyYmcnJzIy8uL7bffPn7/+9/H6tWrq7u09crJyYkHHnigussAAIBS/ep69erFtttuG7/97W9j+fLlFX6NHj16xMiRI0tN23///eOrr76KJk2aVHHFAGwKdau7AICa7uOPP45u3bpF06ZN48orr4xddtklVq1aFU888USMGDEi3nvvveouMePQQw+NCRMmxIoVK+Kxxx6LESNGRL169eLCCy/M+rWKiooiJycn6tTxb64AAPy0lPSrV61aFa+//noMGTIkcnJy4oorrqj0a+bl5UWrVq2qsEoANiXpCMB6nHHGGZGTkxOvvPJKHHXUUdGxY8fo0qVL/OY3v4l///vfERHx6aefRr9+/aJhw4bRuHHjOOaYY2LevHmlXufhhx+OffbZJwoKCqJ58+ZxxBFHZOYtWLAgBg8eHJtvvnlsttlm0bt375g9e3Zm/rfffhvHHntsbLXVVrHZZpvFLrvsEpMmTSpTa35+frRq1SratWsXp59+evTq1SseeuihiIhYsWJFnHvuubHVVltFgwYNYr/99otnn30289yJEydG06ZN46GHHoqddtop8vPz49NPP40VK1bE+eefH23bto38/PzYfvvt49Zbb808b8aMGdG7d+9o2LBhtGzZMk444YT45ptvMvN79OgRZ511Vvz2t7+NZs2aRatWrWL06NGZ+e3bt4+IiCOOOCJycnIyjwEAoLqU9Kvbtm0b/fv3j169ekVhYWFErL9vPnTo0Hjuuefi2muvzVzZ/vHHH5cZ2qWk//3EE0/EjjvuGA0bNoxDDz00vvrqq8xrrV69Os4666xo2rRpbLHFFnH++efHkCFDon///ptydQAQgnSAVPPnz4/HH388RowYEQ0aNCgzv2nTplFcXBz9+vWL+fPnx3PPPReFhYXx0UcfxS9/+ctMu0cffTSOOOKIOOyww+LNN9+MqVOnxr777puZP3To0HjttdfioYceimnTpkWSJHHYYYfFqlWrIiJi+fLlsddee8Wjjz4aM2bMiFNOOSVOOOGEeOWVV1Lrr1+/fqxcuTIiIs4888yYNm1a3H333fHWW2/FgAED4tBDDy0V2H///fdxxRVXxC233BLvvPNOtGjRIgYPHhyTJk2K6667LmbOnBk33nhjNGzYMCIiFi5cGD//+c9jjz32iNdeey0ef/zxmDdvXhxzzDGl6rj99tujQYMG8fLLL8ef//zn+P3vf585EXn11VcjImLChAnx1VdfZR4DAEBNMGPGjHjppZciLy8vItbfN7/22muja9eucfLJJ8dXX30VX331VbRt27bc1/7+++/jL3/5S/zjH/+I559/Pj799NM499xzM/OvuOKKuPPOO2PChAnx4osvxuLFiw2JCFBdEgDW6eWXX04iIrnvvvvW2ebJJ59McnNzk08//TQz7Z133kkiInnllVeSJEmSrl27JoMGDSr3+e+//34SEcmLL76YmfbNN98k9evXT+655551vm+fPn2Sc845J/N4yJAhSb9+/ZIkSZLi4uKksLAwyc/PT84999zk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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Удаляем символ '%' и преобразуем столбец CocoaPercent в числовой формат\n", "df['CocoaPercent'] = df['CocoaPercent'].str.replace('%', '').astype(float)\n", "\n", "# Выбираем столбцы для анализа\n", "columns_to_check = ['CocoaPercent', 'Rating']\n", "\n", "# Функция для подсчета выбросов\n", "def count_outliers(df, columns):\n", " outliers_count = {}\n", " for col in columns:\n", " Q1 = df[col].quantile(0.25)\n", " Q3 = df[col].quantile(0.75)\n", " IQR = Q3 - Q1\n", " lower_bound = Q1 - 1.5 * IQR\n", " upper_bound = Q3 + 1.5 * IQR\n", " \n", " # Считаем количество выбросов\n", " outliers = df[(df[col] < lower_bound) | (df[col] > upper_bound)]\n", " outliers_count[col] = len(outliers)\n", " \n", " return outliers_count\n", "\n", "# Подсчитываем выбросы\n", "outliers_count = count_outliers(df, columns_to_check)\n", "\n", "# Выводим количество выбросов для каждого столбца\n", "for col, count in outliers_count.items():\n", " print(f\"Количество выбросов в столбце '{col}': {count}\")\n", "\n", "# Создаем диаграммы размахов\n", "plt.figure(figsize=(15, 10))\n", "for i, col in enumerate(columns_to_check, 1):\n", " plt.subplot(2, 2, i)\n", " sns.boxplot(x=df[col])\n", " plt.title(f'Box Plot of {col}')\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Можно заметить, что оба столбца содержат выбросы, однако их значительно больше в столбце CocoaPercent. Кроме того, экстремальные значения здесь могут быть редкими экспериментальными продуктами и не отражать массовый рынок, а значит искажать статические модели и предсказания. С другой стороны, у столбца Rating выбросы несут информацию о таких крайних случаях, как исключительное качество продукта или совсем неудачный продукт. Такие данные могут быть ценны, особенно если целью является определение лучших и худших образцов для создания маркетинговых стратегий. Значит имеет смысл очистить от выбросов только столбец CocoaPercent.\n", "\n", "### Очищаем CocoaPercent от выбросов" ] }, { "cell_type": "code", "execution_count": 534, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Количество удаленных строк: 186\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAusAAAJOCAYAAAAOKElgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9GklEQVR4nO3deXyNZ+L///dJJCeJbHaSJogiirGkKFpLaau2tFrKaElr69Dqoqqqg7RjtNWpmo4uZhBVpfWpDh1USZmpZUoZS1GCWIrGHtqQRHJ9//DL+TlOdiKXej0fD49Hz33uc5/rvtxOX273ueMwxhgBAAAAsI5XaQ8AAAAAQO6IdQAAAMBSxDoAAABgKWIdAAAAsBSxDgAAAFiKWAcAAAAsRawDAAAAliLWAQAAAEsR6wAAAICliHUA19T+/fvlcDiUkJBQ2kNx89VXX6lx48by8/OTw+HQmTNnSntIKCVDhw7VPffcU+zXx8XFqUaNGtduQKXM4XBo/PjxrscffPCBIiMjlZ6eXnqDAuBCrAOWSkhIkMPhcPtVuXJltW/fXkuXLr3u41m1apXbWHx8fBQVFaV+/fpp37591+Q91q5dq/Hjx1/zkD558qR69eolf39/TZ06VbNnz1bZsmXzfc3evXs1ZMgQRUVFyc/PT8HBwWrdurWmTJmi8+fPX9PxlZQrjyE/Pz/VqVNHTz31lFJSUkp7eFdtx44dGj9+vPbv31/o1yQnJ+sf//iHXn75ZY/nzp49q/j4eDVq1EiBgYHy9/dXgwYNNGrUKB05cuQajtxucXFxysjI0IcffljaQwEgqUxpDwBA/l599VXVrFlTxhilpKQoISFBnTt31pdffqmuXbte9/EMHz5czZo1U2ZmpjZt2qRp06Zp8eLF2rZtm8LCwq5q22vXrlV8fLzi4uIUGhp6bQYsacOGDTp37pxee+01dezYscD1Fy9erJ49e8rpdKpfv35q0KCBMjIytHr1ao0cOVLbt2/XtGnTrtn4SlrOMXThwgWtXr1a77//vpYsWaIffvhBAQEBpT28YtuxY4fi4+PVrl27Qp/pnjJlimrWrKn27du7Ld+3b586duyogwcPqmfPnho8eLB8fX21detWTZ8+XV988YV2795dAnthHz8/P/Xv319vv/22nn76aTkcjtIeEnBTI9YBy91///26/fbbXY8HDBigKlWqaO7cuaUS63fddZcefvhhSdLjjz+uOnXqaPjw4Zo1a5ZGjx593cdTGMeOHZOkQv0FIDk5Wb1791b16tX1zTffqFq1aq7nhg0bpj179mjx4sUlNdQScfkxNHDgQFWoUEFvv/22Fi5cqD59+lzVttPS0m6Y4M/MzNScOXP05JNPui2/ePGievTooZSUFK1atUp33nmn2/MTJkzQG2+8cT2HWup69eqlN998UytXrtTdd99d2sMBbmpcBgPcYEJDQ+Xv768yZdz/rv3rr79qxIgRioiIkNPpVN26dfXWW2/JGCNJOn/+vKKjoxUdHe12GcepU6dUrVo1tWrVSllZWUUeT87/yJOTk/Nd75tvvtFdd92lsmXLKjQ0VLGxsdq5c6fr+fHjx2vkyJGSpJo1a7ou3SjoEof58+crJiZG/v7+qlixoh599FEdPnzY9Xy7du3Uv39/SVKzZs3kcDgUFxeX5/befPNN/fLLL5o+fbpbqOe49dZb9cwzz7geX7x4Ua+99ppq1aolp9OpGjVq6OWXX871et+lS5eqbdu2CgoKUnBwsJo1a6ZPPvmkSPsjSVu3blVcXJzrEp2qVavqiSee0MmTJ/Odqxy5/Z59/PHHrvctX768evfurUOHDrm9rl27dmrQoIE2btyoNm3aKCAgwHU5yYULFzR+/HjVqVNHfn5+qlatmnr06KG9e/e6Xp+dna133nlH9evXl5+fn6pUqaIhQ4bo9OnTbu9To0YNde3aVatXr1bz5s3l5+enqKgoffTRR651EhIS1LNnT0lS+/btXcfLqlWr8tzv1atX68SJEx7/uvL5559ry5YtGjNmjEeoS1JwcLAmTJiQ35QWet8WLlyoLl26KCwsTE6nU7Vq1dJrr73m8WcvZ6537Nih9u3bKyAgQOHh4XrzzTc93js9PV3jxo3TrbfeKqfTqYiICL344osex2B6erqee+45VapUSUFBQerevbt++umnXPcnJiZG5cuX18KFC/PdbwAlj1gHLJeamqoTJ07o+PHj2r59u/7whz/ol19+0aOPPupaxxij7t27a/LkyerUqZPefvtt1a1bVyNHjtTzzz8vSfL399esWbO0Z88ejRkzxvXaYcOGKTU1VQkJCfL29i7y+HJirEKFCnmus2LFCt133306duyYxo8fr+eff15r165V69atXTHeo0cP11neyZMna/bs2Zo9e7YqVaqU53YTEhLUq1cveXt7a+LEiRo0aJAWLFigO++803Xd+5gxYzR48GBJly4HmT17toYMGZLnNr/88ktFRUWpVatWhdr/gQMHauzYsWratKkmT56stm3bauLEierdu7fHWLt06aJTp05p9OjRev3119W4cWN99dVXRdofSVq+fLn27dunxx9/XO+++6569+6tefPmqXPnzq6/nOXnyt+zCRMmqF+/fqpdu7befvttPfvss0pMTFSbNm08vj9w8uRJ3X///WrcuLHeeecdtW/fXllZWeratavi4+MVExOjv/zlL3rmmWeUmpqqH374wfXaIUOGaOTIka5r/x9//HHNmTNH9913nzIzM93eZ8+ePXr44Yd1zz336C9/+YvKlSunuLg4bd++XZLUpk0bDR8+XJL08ssvu46XevXq5bnfa9eulcPhUJMmTdyWL1q0SJL02GOPFTh3eSnsviUkJCgwMFDPP/+8pkyZopiYGI0dO1YvvfSSxzZPnz6tTp06qVGjRvrLX/6i6OhojRo1yu07K9nZ2erevbveeustdevWTe+++64eeOABTZ48WY888ojb9gYOHKh33nlH9957r15//XX5+PioS5cuee5T06ZNtWbNmmLPCYBrxACw0syZM40kj19Op9MkJCS4rfvPf/7TSDJ/+tOf3JY//PDDxuFwmD179riWjR492nh5eZn//Oc/Zv78+UaSeeeddwocz8qVK40kM2PGDHP8+HFz5MgRs3jxYlOjRg3jcDjMhg0bjDHGJCcnG0lm5syZrtc2btzYVK5c2Zw8edK1bMuWLcbLy8v069fPtWzSpElGkklOTi5wPBkZGaZy5cqmQYMG5vz5867l//rXv4wkM3bsWNeynLnMGWNeUlNTjSQTGxtb4PsbY8zmzZuNJDNw4EC35S+88IKRZL755htjjDFnzpwxQUFBpkWLFm5jNcaY7OzsIu9PWlqax1jmzp1rJJn//Oc/Hvu9YsUKc/z4cXPo0CEzb948U6FCBePv729++ukns3//fuPt7W0mTJjgtr1t27aZMmXKuC1v27atkWQ++OADt3VnzJhhJJm3337bY1w5+/ftt98aSWbOnDluz3/11Vcey6tXr+6xL8eOHTNOp9OMGDHCtSzn+F25cqXH++bm0UcfNRUqVPBY3qRJExMSElKobRhjTP/+/U316tVdj4uyb7n93g0ZMsQEBASYCxcuuJblzPVHH33kWpaenm6qVq1qHnroIdey2bNnGy8vL/Ptt9+6bfODDz4wksyaNWuMMf//sTp06FC39X7/+98bSWbcuHEe4xo8eLDx9/fPZyYAXA+cWQcsN3XqVC1fvlzLly/Xxx9/rPbt22vgwIFasGCBa50lS5bI29vbdaYxx4gRI2SMcTsTN378eNWvX1/9+/fX0KFD1bZtW4/X5eeJJ55QpUqVFBYWpi5duujXX3/VrFmz3K6rv9zRo0e1efNmxcXFqXz58q7lv/vd73TPPfdoyZIlhX7vy33//fc6duyYhg4dKj8/P9fyLl26KDo6uljXlZ89e1aSFBQUVKj1c8ae868XOUaMGCFJrjEsX75c586d00svveQ2VkmuL+8VZX/8/f1d/33hwgWdOHFCd9xxhyRp06ZNHuPs2LGjKlWqpIiICPXu3VuBgYH64osvFB4ergULFig7O1u9evXSiRMnXL+qVq2q2rVra+XKlW7bcjqdevzxx92Wff7556pYsaKefvppj/fO2b/58+crJCRE99xzj9v7xMTEKDAw0ON9brvtNt11112ux5UqVVLdunWv6s5DJ0+eVLly5TyWnz17ttC/57kpyr5d/nt37tw5nThxQnfddZfS0tL0448/um03MDDQ7V/QfH191bx5c7c5mD9/vurVq6fo6Gi398651CnnvXOO1Sv/rD/77LN57le5cuV0/vx5paWlFXFGAFxLfMEUsFzz5s3dQrhPnz5q0qSJnnrqKXXt2lW+vr46cOCAwsLCPIIj55KAAwcOuJb5+vpqxowZatasmfz8/DRz5swi3e1h7Nixuuuuu+Tt7a2KFSuqXr16HtfPXy7nvevWrevxXL169bRs2TL9+uuvBd5KsSjbjY6O1urVq4u0PenStcnSpYgq7Bi8vLx06623ui2vWrWqQkNDXWPMueykQYMG+W5LKtz+nDp1SvHx8Zo3b57ry7M5UlNTPV4/depU1alTR2XKlFGVKlVUt25deXldOleTlJQkY4xq166d67h8fHzcHoeHh8vX19dt2d69e1W3bt18j4OkpCSlpqaqcuXKuT5/5X5ERkZ6rFOuXDmPa8CLyuRymVBwcPBV/SWgKPu2fft2vfLKK/rmm29cfznMceXv3S233OLxZ7NcuXLaunWr23vv3Lkzz8vFct4751itVauW2/O5HW85cuaKu8EApYtYB24wXl5eat++vaZMmaKkpCTVr1+/yNtYtmyZpEtnZZOSklSzZs1Cv7Zhw4aFuv3hjSg4OFhhYWFu11kXxvWOmV69emnt2rUaOXKkGjdurMDAQGVnZ6tTp07Kzs72WP/Kv/BdLjs7Ww6HQ0uXLs31OwuBgYFujy8/M1wU2dnZqly5subMmZPr81fGZl7fn8gttgurQoUKucZ+dHS0/ve//+nQoUOKiIgo8nYLu29nzpxR27ZtFRwcrFdffVW1atWSn5+fNm3apFGjRnn83hVmDrKzs9WwYUO9/fbbua5bnP3Jcfr0aQUEBBT79xzAtUGsAzegixcvSpJ++eUXSVL16tW1YsUKnTt3zu3ses4/q1evXt21bOvWrXr11Vf1+OOPa/PmzRo4cKC2bdumkJCQEhlrznvv2rXL47kff/xRFStWdJ1VL0r0Xr7dK28tt2vXLrd9LoquXbtq2rRpWrdunVq2bFngGLKzs5WUlOT2xcaUlBSdOXPGNYacs5k//PCDx1n4ou7P6dOnlZiYqPj4eI0dO9a1TlJSUhH3VK6xGWNUs2ZN1alTp9jb+O6775SZmelxJv7ydVasWKHWrVtfs/gr6l+SoqOjNWfOHKWmprod7926ddPcuXP18ccfF+v2o4Xdt1WrVunkyZNasGCB2rRp41pe0J2UCnrvLVu2qEOHDvnOR86xmvOvIDly+3N5+bjy+8IugOuDa9aBG0xmZqa+/vpr+fr6uv5H2rlzZ2VlZelvf/ub27qTJ0+Ww+HQ/fff73ptXFycwsLCNGXKFCUkJCglJUXPPfdciY23WrVqaty4sWbNmuV2Z5EffvhBX3/9tTp37uxalhPthfkJprfffrsqV66sDz74wO0WdUuXLtXOnTvzvctFfl588UWVLVtWAwcOzPWnfO7du1dTpkyRJNfY33nnHbd1cs5y5ozh3nvvVVBQkCZOnKgLFy64rZtzlrSw+5NztvXKM8xXjqGwevToIW9vb8XHx3ts0xhTqNtBPvTQQzpx4oTH8Xf5OHv16qWsrCy99tprHutcvHixWD+1tijHiyS1bNlSxhht3LjRbfnDDz+shg0basKECVq3bp3H686dO+d2B6UrFXbfcvu9y8jI0HvvvVeo8ef13ocPH9bf//53j+fOnz+vX3/9VZJcnwF//etf3dbJ77jZtGlToe+KBKDkcGYdsNzSpUtdZ8iPHTumTz75RElJSXrppZdc11h369ZN7du315gxY7R//341atRIX3/9tRYuXKhnn33WdWb3T3/6kzZv3qzExEQFBQXpd7/7ncaOHatXXnlFDz/8sFs4X0uTJk3S/fffr5YtW2rAgAE6f/683n33XYWEhGj8+PGu9WJiYiRdut1i79695ePjo27duuV6PbuPj4/eeOMNPf7442rbtq369OmjlJQUTZkyRTVq1Cj2X0Bq1aqlTz75RI888ojq1avn9hNM165dq/nz57vu096oUSP1799f06ZNc13isH79es2aNUsPPPCA66dkBgcHa/LkyRo4cKCaNWum3//+9ypXrpy2bNmitLQ0zZo1q9D7ExwcrDZt2ujNN99UZmamwsPD9fXXXxf77GytWrX0pz/9SaNHj9b+/fv1wAMPKCgoSMnJyfriiy80ePBgvfDCC/luo1+/fvroo4/0/PPPa/369brrrrv066+/asWKFRo6dKhiY2PVtm1bDRkyRBMnTtTmzZt17733ysfHR0lJSZo/f76mTJni+mFbhdW4cWN5e3vrjTfeUGpqqpxOp+6+++48rx2/8847VaFCBa1YscLtXy98fHy0YMECdezYUW3atFGvXr3UunVr+fj4aPv27frkk09Urly5PO+1Xth9a9WqlcqVK6f+/ftr+PDhcjgcmj179lVd2vPYY4/ps88+05NPPqmVK1eqdevWysrK0o8//qjPPvtMy5Yt0+23367GjRurT58+eu+995SamqpWrVopMTFRe/bsyXW7Gzdu1KlTpxQbG1vssQG4RkrhDjQACiG3Wzf6+fmZxo0bm/fff991S7wc586dM88995wJCwszPj4+pnbt2mbSpEmu9TZu3GjKlCljnn76abfXXbx40TRr1syEhYWZ06dP5zmenFs3zp8/P99x53brRmOMWbFihWndurXx9/c3wcHBplu3bmbHjh0er3/ttddMeHi48fLyKtRtHD/99FPTpEkT43Q6Tfny5U3fvn3NTz/95LZOYW/deLndu3ebQYMGmRo1ahhfX18TFBRkWrdubd599123W+xlZmaa+Ph4U7NmTePj42MiIiLM6NGj3dbJsWjRItOqVSvXHDRv3tzMnTu3yPvz008/mQcffNCEhoaakJAQ07NnT3PkyBGPW/AVZb8///xzc+ed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+EGDBw/WY489pvXr1xdpn/z9/SVJGRkZ+vbbb9WvXz8988wz2rFjhz788EMlJCS4gjzH+PHj9eCDD2rbtm164oknCtyXp556SuvWrdO8efO0detW9ezZU506dXL7y0daWpreeustzZ49W//5z3908OBBvfDCC5KkF154Qb169XIF/NGjR9WqVasi7ScA/KYYAICH7777zkgyCxYsyHe9r7/+2nh7e5uDBw+6lm3fvt1IMuvXrzfGGNOyZUvTt2/fXF+/e/duI8msWbPGtezEiRPG39/ffPbZZ3m+b5cuXcyIESPyfH7lypVGkjl9+rQxxpgjR46YVq1amfDwcJOenm46dOhg/vznP7u9Zvbs2aZatWqux5LMs88+67ZOfvty4MAB4+3tbQ4fPuy2vEOHDmb06NHGGGNmzpxpJJk9e/a4np86daqpUqWK63H//v1NbGxsnvsGADcTrlkHgFwYYwq13s6dOxUREaGIiAjXsttuu02hoaHauXOnmjVrps2bN2vQoEF5vr5MmTJq0aKFa1mFChVUt25d7dy5U5KUlZWlP//5z/rss890+PBhZWRkKD09XQEBAQWO75ZbbpExRmlpaWrUqJE+//xz+fr6asuWLVqzZo3bmfSsrCxduHBBaWlprm3ffvvtbtvLb1+2bdumrKws1alTx215enq6KlSo4HocEBCgWrVquR5Xq1ZNx44dK3BfAOBmRKwDQC5q164th8NxTb5EmnP5SXFNmjRJU6ZM0TvvvKOGDRuqbNmyevbZZ5WRkVHga7/99lsFBwercuXKCgoKci3/5ZdfFB8frx49eni8xs/Pz/XfV14ClN++/PLLL/L29tbGjRs9vsAaGBjo+u8rv6TqcDgK/ZcjALjZcM06AOSifPnyuu+++zR16lT9+uuvHs+fOXNGklSvXj0dOnRIhw4dcj23Y8cOnTlzRrfddpsk6Xe/+12et3qsV6+eLl68qO+++8617OTJk9q1a5fr9WvWrFFsbKweffRRNWrUSFFRUdq9e3eh9qNmzZqqVauWW6hLUtOmTbVr1y7deuutHr+8vPL+X0N++9KkSRNlZWXp2LFjHtusWrVqocYrSb6+vsrKyir0+gDwW0asA0Aepk6dqqysLDVv3lyff/65kpKStHPnTv31r39Vy5YtJUkdO3ZUw4YN1bdvX23atEnr169Xv3791LZtW9clJOPGjdPcuXM1btw47dy5U9u2bdMbb7wh6dIZ/NjYWA0aNEirV6/Wli1b9Oijjyo8PFyxsbGudZYvX661a9dq586dGjJkiMfdZopq7Nix+uijjxQfH6/t27dr586dmjdvnl555ZV8X5ffvtSpU0d9+/ZVv379tGDBAiUnJ2v9+vWaOHGiFi9eXOix1ahRQ1u3btWuXbt04sQJ1xdtAeBmRKwDQB6ioqK0adMmtW/fXiNGjFCDBg10zz33KDExUe+//76kS5dwLFy4UOXKlVObNm3UsWNHRUVF6dNPP3Vtp127dpo/f74WLVqkxo0b6+6773a7k8vMmTMVExOjrl27qmXLljLGaMmSJa7LRV555RU1bdpU9913n9q1a6eqVate9Q8Nuu+++/Svf/1LX3/9tZo1a6Y77rhDkydPVvXq1fN9XWH2pV+/fhoxYoTq1q2rBx54QBs2bFBkZGShxzZo0CDVrVtXt99+uypVqqQ1a9YUez8B4EbnMFwoCAAAAFiJM+sAAACApYh1AAAAwFLEOgAAAGApYh0AAACwFLEOAAAAWIpYBwAAACxFrAMAAACWItYBAAAASxHrAAAAgKWIdQAAAMBSxDoAAABgKWIdAAAAsNT/Azri8JotG/kKAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Выбираем столбцы для очистки\n", "columns_to_clean = ['CocoaPercent']\n", "\n", "# Функция для удаления выбросов\n", "def remove_outliers(df, columns):\n", " for col in columns:\n", " Q1 = df[col].quantile(0.25)\n", " Q3 = df[col].quantile(0.75)\n", " IQR = Q3 - Q1\n", " lower_bound = Q1 - 1.5 * IQR\n", " upper_bound = Q3 + 1.5 * IQR\n", " \n", " # Удаляем строки, содержащие выбросы\n", " df = df[(df[col] >= lower_bound) & (df[col] <= upper_bound)]\n", " \n", " return df\n", "\n", "# Удаляем выбросы\n", "df_cleaned = remove_outliers(df, columns_to_clean)\n", "\n", "# Выводим количество удаленных строк\n", "print(f\"Количество удаленных строк: {len(df) - len(df_cleaned)}\")\n", "\n", "# Создаем диаграммы размаха для очищенных данных\n", "plt.figure(figsize=(15, 6))\n", "\n", "# Диаграмма размаха для CocoaPercent\n", "plt.subplot(1, 2, 1)\n", "sns.boxplot(x=df_cleaned['CocoaPercent'])\n", "plt.title('Box Plot of CocoaPercent (Cleaned)')\n", "plt.xlabel('Cocoa Percent')\n", "\n", "plt.tight_layout()\n", "plt.show()\n", "\n", "# Сохраняем очищенный датасет\n", "df_cleaned.to_csv(\"..//..//static//csv//flavors_of_cacao_cleaned.csv\", index=False)\n", "df = df_cleaned" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Видно, что выбросов практически не осталось.\n", "\n", "### Теперь проверим на пустые значения" ] }, { "cell_type": "code", "execution_count": 535, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Company (Maker-if known) 0\n", "Specific Bean Originor Bar Name 0\n", "REF 0\n", "ReviewDate 0\n", "CocoaPercent 0\n", "CompanyLocation 0\n", "Rating 0\n", "BeanType 1\n", "Broad BeanOrigin 1\n", "dtype: int64\n", "\n", "Company (Maker-if known) False\n", "Specific Bean Originor Bar Name False\n", "REF False\n", "ReviewDate False\n", "CocoaPercent False\n", "CompanyLocation False\n", "Rating False\n", "BeanType True\n", "Broad BeanOrigin True\n", "dtype: bool\n", "\n", "BeanType процент пустых значений: %0.06\n", "Broad BeanOrigin процент пустых значений: %0.06\n" ] } ], "source": [ "# Количество пустых значений признаков\n", "print(df.isnull().sum())\n", "\n", "print()\n", "\n", "# Есть ли пустые значения признаков\n", "print(df.isnull().any())\n", "\n", "print()\n", "\n", "# Процент пустых значений признаков\n", "for i in df.columns:\n", " null_rate = df[i].isnull().sum() / len(df) * 100\n", " if null_rate > 0:\n", " print(f\"{i} процент пустых значений: %{null_rate:.2f}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В датасете имеется пара пустых значений. Удалим их." ] }, { "cell_type": "code", "execution_count": 536, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Количество пустых значений в каждом столбце после удаления:\n", "Company (Maker-if known) 0\n", "Specific Bean Originor Bar Name 0\n", "REF 0\n", "ReviewDate 0\n", "CocoaPercent 0\n", "CompanyLocation 0\n", "Rating 0\n", "BeanType 0\n", "Broad BeanOrigin 0\n", "dtype: int64\n" ] } ], "source": [ "# Удаление пропущенных значений в столбцах BeanType и Broad BeanOrigin\n", "df = df.dropna(subset=['BeanType', 'Broad BeanOrigin'])\n", "\n", "# Проверка на пропущенные значения после удаления\n", "missing_values_after_drop = df.isnull().sum()\n", "\n", "# Вывод результатов после удаления\n", "print(\"\\nКоличество пустых значений в каждом столбце после удаления:\")\n", "print(missing_values_after_drop)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Пустых значений в датасете теперь нет.\n", "\n", "### Можно перейти к созданию выборок" ] }, { "cell_type": "code", "execution_count": 537, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Размер обучающей выборки: (964, 8)\n", "Размер контрольной выборки: (321, 8)\n", "Размер тестовой выборки: (322, 8)\n" ] } ], "source": [ "# Разделение на признаки (X) и целевую переменную (y)\n", "# Предположим, что Rating - это целевая переменная\n", "X = df.drop('Rating', axis=1)\n", "y = df['Rating']\n", "\n", "# Разбиение на обучающую и остальную выборку (контрольную + тестовую)\n", "X_train, X_rem, y_train, y_rem = train_test_split(X, y, train_size=0.6, random_state=42)\n", "\n", "# Разбиение остатка на контрольную и тестовую выборки\n", "X_val, X_test, y_val, y_test = train_test_split(X_rem, y_rem, test_size=0.5, random_state=42)\n", "\n", "# Вывод размеров выборок\n", "print(\"Размер обучающей выборки:\", X_train.shape)\n", "print(\"Размер контрольной выборки:\", X_val.shape)\n", "print(\"Размер тестовой выборки:\", X_test.shape)" ] }, { "cell_type": "code", "execution_count": 538, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Распределение классов в обучающей выборке:\n", "Rating\n", "3.50 0.242739\n", "3.00 0.199170\n", "3.25 0.155602\n", "2.75 0.137967\n", "3.75 0.125519\n", "2.50 0.062241\n", "4.00 0.050830\n", "2.00 0.012448\n", "2.25 0.007261\n", "5.00 0.002075\n", "1.50 0.002075\n", "1.75 0.001037\n", "1.00 0.001037\n", "Name: proportion, dtype: float64\n", "\n", "Распределение классов в контрольной выборке:\n", "Rating\n", "3.50 0.211838\n", "3.00 0.168224\n", "3.25 0.165109\n", "2.75 0.137072\n", "3.75 0.127726\n", "2.50 0.074766\n", "4.00 0.074766\n", "2.00 0.021807\n", "2.25 0.009346\n", "1.50 0.006231\n", "1.00 0.003115\n", "Name: proportion, dtype: float64\n", "\n", "Распределение классов в тестовой выборке:\n", "Rating\n", "3.25 0.211180\n", "3.50 0.198758\n", "3.00 0.164596\n", "2.75 0.145963\n", "3.75 0.136646\n", "4.00 0.068323\n", "2.50 0.062112\n", "2.00 0.006211\n", "1.00 0.003106\n", "2.25 0.003106\n", "Name: proportion, dtype: float64\n" ] } ], "source": [ "# Функция для анализа сбалансированности\n", "def analyze_balance(y_train, y_val, y_test):\n", " print(\"Распределение классов в обучающей выборке:\")\n", " print(y_train.value_counts(normalize=True))\n", " \n", " print(\"\\nРаспределение классов в контрольной выборке:\")\n", " print(y_val.value_counts(normalize=True))\n", " \n", " print(\"\\nРаспределение классов в тестовой выборке:\")\n", " print(y_test.value_counts(normalize=True))\n", "\n", "# Анализ сбалансированности\n", "analyze_balance(y_train, y_val, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Выборки несбалансированны в частности из-за того, что некоторые классы занимают крайне малую долю в данных. При необходимости получить сбалансированный набор можно использовать специальные методы, к примеру oversampling и undersampling. Но в данном случае просто так их использовать не получится, потому что задача модели состоит в том, чтобы предсказать числовые (регрессионые) значения, а большинство реализаций в таком случае применить не получится. К тому же в Rating мало уникальных значений, что вызовет проблемы при использовании методов, предназначенных для регрессии (таких как к примеру SMOGN). Поэтому здесь применение таких методов не является целесообразным.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Датасет №2 (качество воды) \n", "\n", "Ссылка: https://www.kaggle.com/datasets/adityakadiwal/water-potability\n", "\n", "Проблемная область: качество питьевой воды и факторы, влияющие на ее безопасность для здоровья.\n", "\n", "Объекты наблюдения: водоемы, содержащие воду разного качества." ] }, { "cell_type": "code", "execution_count": 539, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Index(['ph', 'Hardness', 'Solids', 'Chloramines', 'Sulfate', 'Conductivity',\n", " 'Organic_carbon', 'Trihalomethanes', 'Turbidity', 'Potability'],\n", " dtype='object')\n" ] } ], "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from sklearn.model_selection import train_test_split\n", "from imblearn.over_sampling import SMOTE\n", "\n", "# вывод всех столбцов\n", "df = pd.read_csv(\"..//..//static//csv//water_potability.csv\")\n", "print(df.columns)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Атрибуты: \n", "* ph – параметр для оценки кислотно-щелочного баланса воды;\n", "* Hardness – жесткость воды, определяемая содержанием кальция и магния;\n", "* Solids – общее количество растворенных веществ, указывающее на минерализацию воды;\n", "* Chloramines – концентрация хлора и хлораминов, использующихся для дезинфекции воды;\n", "* Sulfate – содержание сульфатов, присутствующих в воде;\n", "* Conductivity – электропроводность воды, измеряющая уровень ионов в растворе;\n", "* Organic_carbon – уровень органического углерода, происходящего из разлагающихся органических веществ;\n", "* Trihalomethanes – концентрация трихалометанов, образующихся при обработке хлором;\n", "* Turbidity – мутность воды, указывающая на количество взвешенных твердых частиц;\n", "* Potability – показатель пригодности воды для питья (1 – пригодна, 0 – непригодна).\n", "\n", "Примеры бизнес целей и целей технического проекта:\n", "1. Совершенствование систем очистки воды.\n", " * Бизнес-цель: разработка и внедрение инновационных технологий очистки воды, чтобы уменьшить расходы на водоочистные сооружения и повысить их эффективность.\n", " * Цель технического проекта: проектирование и тестирование новых фильтров и процессов очистки на основе данных о загрязнении воды.\n", "2. Интеграция данных для управления водными ресурсами.\n", " * Бизнес-цель: объединение данных о водных ресурсах для комплексного анализа и управления, что позволит более эффективно распределять ресурсы.\n", " * Цель технического проекта: разработка платформы для интеграции данных с различных датчиков и источников информации, использующей машинное обучение для прогнозирования изменений качества воды.\n", "3. Повышение осведомленности о качестве воды.\n", " * Бизнес-цель: информирование населения о состоянии водоемов и возможных рисках для здоровья.\n", " * Цель технического проекта: разработка платформы для публичного доступа к данным о качестве воды.\n", "\n", "Входные данные и целевой признак могут быть следующими:\n", "1. Входные данные:\n", " * pH значение;\n", " * Жесткость воды;\n", " * Общее количество растворенных веществ;\n", " * Концентрация хлора и хлораминов;\n", " * Содержание сульфатов;\n", " * Электропроводность;\n", " * Уровень органического углерода;\n", " * Концентрация трихалометанов;\n", " * Мутность воды.\n", "2. Целевой признак:\n", " * Пригодность воды для питья.\n", "\n", "Актуальность: анализ качества питьевой воды и факторов, влияющих на ее безопасность, играет очень важную роль в охране здоровья населения. Так мониторинг факторов, влияющих на качество воды, позволит предотвращать вспышки заболеваний и способствовать повышению уровня жизни.\n", "\n", "### Проверяем на выбросы" ] }, { "cell_type": "code", "execution_count": 540, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Количество выбросов в столбце 'Hardness': 83\n", "Количество выбросов в столбце 'Solids': 47\n", "Количество выбросов в столбце 'Organic_carbon': 25\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABdIAAAPdCAYAAACOcJpIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACO4UlEQVR4nOzdd5gV5d0//s8usIW69CJIU2mCWNCvsSARBWyYxBJbwJ5gjcYntgD2FjXGx54I2HuNFXtUwIIIKKIgqFGBAC697/z+8Lfn4bAwLAgsi6/XdXGxZ+aemXvm3nPms+8zZ05OkiRJAAAAAAAAq5Vb0R0AAAAAAIDNmSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB3gJ5g6dWrk5OTE0KFDK7orWV588cXo2rVrFBQURE5OThQXF1d0l9bqjTfeiJycnHjjjTcquisAAPyMqOnL2meffWKfffbJPF6XY9S/f/9o1arVRusbQEURpAObhaFDh0ZOTk7Wv0aNGkWPHj3ihRde2OT9KQ11S/9Vq1Yt2rRpE7/73e/iyy+/3CDbePfdd2Pw4MEbvCCeNWtWHHHEEVFYWBi33HJL3HvvvVGjRo3Vti097h988MFq5++zzz6x/fbbb9D+AQCwZVLTbzjrUtNHRIwbNy4OO+ywaNmyZRQUFMRWW20V++23X9x8880btF8AP2dVK7oDACu79NJLo3Xr1pEkSUyfPj2GDh0aBxxwQDz77LNx0EEHbfL+nHnmmdGtW7dYtmxZjB49Ou6888547rnnYty4cdGsWbOftO533303Lrnkkujfv38UFRVtmA5HxPvvvx/z5s2Lyy67LHr27LnB1gsAAOWhpv/p1qWmf/fdd6NHjx6x9dZbx8knnxxNmjSJb775JkaOHBk33XRTnHHGGT+5Py1btoxFixZFtWrVfvK6ACorQTqwWenTp0/ssssumccnnnhiNG7cOB588MEKKbr32muvOOywwyIi4vjjj4/tttsuzjzzzBg2bFhccMEFm7w/5TFjxoyIiA1ayG8ISZLE4sWLo7CwsKK7AgDARqSm/+nWpaa/4oorok6dOvH++++XaV+6np8qJycnCgoKNsi6ACort3YBNmtFRUVRWFgYVatmv++3YMGCOPfcc6NFixaRn58f7dq1i7/+9a+RJElERCxatCjat28f7du3j0WLFmWWmz17djRt2jR+8YtfxIoVK9a5P7/85S8jImLKlCmp7V577bXYa6+9okaNGlFUVBR9+/aNCRMmZOYPHjw4zjvvvIiIaN26debjplOnTk1d76OPPho777xzFBYWRoMGDeLYY4+Nb7/9NjN/n332iX79+kVERLdu3SInJyf69++/zvuZZsiQIfHLX/4yGjVqFPn5+dGxY8e47bbbyrRr1apVHHTQQfHSSy/FLrvsEoWFhXHHHXdERMR//vOfOPTQQ6NGjRrRqFGj+OMf/xhLliwps47SW8t8+umn0aNHj6hevXpstdVWce2115Zpu2TJkhg0aFBss802kZ+fHy1atIj/+Z//KbPe4cOHx5577hlFRUVRs2bNaNeuXVx44YVZbW6++ebo1KlTVK9ePerWrRu77LJLPPDAAz/lsAEA/Gyp6bNt6Jp+8uTJ0alTp9WG7o0aNcp6vHz58rjsssuibdu2kZ+fH61atYoLL7xwtbX4ytZ0j/Snnnoqtt9++ygoKIjtt98+nnzyydUu/9BDD8XOO+8ctWrVitq1a0fnzp3jpptuSt0mwObGFenAZmXOnDkxc+bMSJIkZsyYETfffHPMnz8/jj322EybJEnikEMOiddffz1OPPHE6Nq1a7z00ktx3nnnxbfffhs33nhjFBYWxrBhw2KPPfaIiy66KG644YaIiDjttNNizpw5MXTo0KhSpco692/y5MkREVG/fv01tnnllVeiT58+0aZNmxg8eHAsWrQobr755thjjz1i9OjR0apVq/j1r38dn3/+eTz44INx4403RoMGDSIiomHDhmtc79ChQ+P444+Pbt26xVVXXRXTp0+Pm266Kd5555346KOPoqioKC666KJo165d3HnnnZmP1LZt23at+1V63Fe1bNmyMtNuu+226NSpUxxyyCFRtWrVePbZZ2PAgAFRUlISp512WlbbiRMnxlFHHRWnnnpqnHzyydGuXbtYtGhR7LvvvvH111/HmWeeGc2aNYt77703XnvttdX27YcffojevXvHr3/96zjiiCPiscceiz//+c/RuXPn6NOnT0RElJSUxCGHHBJvv/12nHLKKdGhQ4cYN25c3HjjjfH555/HU089FRERn3zySRx00EHRpUuXuPTSSyM/Pz8mTZoU77zzTmZ7d911V5x55plx2GGHxVlnnRWLFy+OsWPHxqhRo+Loo49e67EEAPi5U9Nv2pq+ZcuWMWLEiBg/fvxav9/opJNOimHDhsVhhx0W5557bowaNSquuuqqmDBhwhpD8DV5+eWX4ze/+U107Ngxrrrqqpg1a1Ycf/zx0bx586x2w4cPj6OOOir23XffuOaaayIiYsKECfHOO+/EWWedtU7bBKhQCcBmYMiQIUlElPmXn5+fDB06NKvtU089lUREcvnll2dNP+yww5KcnJxk0qRJmWkXXHBBkpubm7z11lvJo48+mkRE8re//W2t/Xn99deTiEjuvvvu5L///W/y3XffJc8991zSqlWrJCcnJ3n//feTJEmSKVOmJBGRDBkyJLNs165dk0aNGiWzZs3KTPv444+T3Nzc5He/+11m2nXXXZdERDJlypS19mfp0qVJo0aNku233z5ZtGhRZvq//vWvJCKSgQMHZqaVHsvSPqZZ03Ff+V+nTp2yllm4cGGZ9fTq1Stp06ZN1rSWLVsmEZG8+OKLWdP/9re/JRGRPPLII5lpCxYsSLbZZpskIpLXX389M7179+5JRCT33HNPZtqSJUuSJk2aJL/5zW8y0+69994kNzc3+fe//521rdtvvz2JiOSdd95JkiRJbrzxxiQikv/+979rPCZ9+/Yts88AAKydmj7dxqrpX3755aRKlSpJlSpVkt133z35n//5n+Sll15Kli5dmtVuzJgxSUQkJ510Utb0P/3pT0lEJK+99lpmWvfu3ZPu3btnHq/pGDVt2jQpLi7O6ktEJC1btsxMO+uss5LatWsny5cvX+u+AGzO3NoF2KzccsstMXz48Bg+fHjcd9990aNHjzjppJPiiSeeyLR5/vnno0qVKnHmmWdmLXvuuedGkiTxwgsvZKYNHjw4OnXqFP369YsBAwZE9+7dyyyX5oQTToiGDRtGs2bN4sADD4wFCxbEsGHDsu75uLLvv/8+xowZE/3794969eplpnfp0iX222+/eP7558u97ZV98MEHMWPGjBgwYEDWvQkPPPDAaN++fTz33HPrtd5SKx/3lf916dKlTNuV73FeerVR9+7d48svv4w5c+ZktW3dunX06tUra9rzzz8fTZs2zdynMiKievXqccopp6y2bzVr1sy6eikvLy923XXX+PLLLzPTHn300ejQoUO0b98+Zs6cmflX+rHd119/PSL+7x6TTz/9dJSUlKx2e0VFRfGf//wn3n///dXOBwAgnZp+9TZWTb/ffvvFiBEj4pBDDomPP/44rr322ujVq1dstdVW8cwzz2Talfb7nHPOyVr+3HPPjYhYp+2XHqN+/fpFnTp1svrSsWPHrLZFRUWxYMGCGD58+DrvG8DmxK1dgM3KrrvumlXQHnXUUbHjjjvG6aefHgcddFDk5eXFV199Fc2aNYtatWplLduhQ4eIiPjqq68y0/Ly8uLuu++Obt26RUFBQQwZMiRycnLK3Z+BAwfGXnvtFVWqVIkGDRpEhw4dytzbcWWl227Xrl2ZeR06dIiXXnopFixYEDVq1Ch3H9a23vbt28fbb7+9Tutb1arHvVTdunXL3PLlnXfeiUGDBsWIESNi4cKFWfPmzJmTVUi3bt26zDq/+uqr2GabbcqMw+r2LSKiefPmZdrWrVs3xo4dm3n8xRdfxIQJE9b4MdrSL1k68sgj4x//+EecdNJJcf7558e+++4bv/71r+Owww6L3Nwf31v+85//HK+88krsuuuusc0228T+++8fRx99dOyxxx6rXTcAANnU9Ou+3p9a03fr1i2eeOKJWLp0aXz88cfx5JNPxo033hiHHXZYjBkzJjp27BhfffVV5ObmxjbbbJO1bJMmTaKoqCjrmJd3X7bddtsy89q1axejR4/OPB4wYEA88sgj0adPn9hqq61i//33jyOOOCJ69+69nnsLUDFckQ5s1nJzc6NHjx7x/fffxxdffLFe63jppZciImLx4sXrvI7OnTtHz549o0ePHtG5c+fUgvvnYPLkybHvvvvGzJkz44Ybbojnnnsuhg8fHn/84x8jIspc5b3y1evra033vUz+/y+hKt1u586dV3tV/fDhw2PAgAGZ/rz11lvxyiuvxHHHHRdjx46NI488Mvbbb7/MF1V16NAhJk6cGA899FDsueee8fjjj8eee+4ZgwYN+sn7AgDwc6Sm33Ty8vKiW7duceWVV8Ztt90Wy5Yti0cffTSrzbq8CbEhNGrUKMaMGRPPPPNM5r74ffr0yXyhKkBlIUgHNnvLly+PiIj58+dHxI9fpvPdd9/FvHnzstp99tlnmfmlxo4dG5deemkcf/zxseOOO8ZJJ51U5vYjG1LptidOnFhm3meffRYNGjTIXLmyLgVs2nonTpyYtc8b07PPPhtLliyJZ555Jk499dQ44IADomfPnusUmLds2TImT56cFYRHrH7fyqtt27Yxe/bs2HfffaNnz55l/q181U9ubm7su+++ccMNN8Snn34aV1xxRbz22muZ279ERNSoUSOOPPLIGDJkSHz99ddx4IEHxhVXXBGLFy9e7z4CAPycqek3fU1f+qmA77//PrP9kpKSMm9ETJ8+PYqLi9dp+6VtV/emxur2Ly8vLw4++OC49dZbY/LkyXHqqafGPffcE5MmTSr3NgEqmiAd2KwtW7YsXn755cjLy8t8zPOAAw6IFStWxP/+7/9mtb3xxhsjJycn+vTpk1m2f//+0axZs7jpppti6NChMX369MzV0xtD06ZNo2vXrjFs2LAoLi7OTB8/fny8/PLLccABB2SmlRbfK7dbk1122SUaNWoUt99+eyxZsiQz/YUXXogJEybEgQceuMH2IU3p1eErh+Bz5syJIUOGlHsdBxxwQHz33Xfx2GOPZaYtXLgw7rzzzvXu1xFHHBHffvtt3HXXXWXmLVq0KBYsWBAREbNnzy4zv2vXrhERmeM6a9asrPl5eXnRsWPHSJIkli1btt59BAD4uVLT/2hj1fSvv/56mYtUIv7vnuilF5WU9vtvf/tbVrsbbrghImKdtr/yMVr5TY3hw4fHp59+mtV21fo6Nzc3811MKx8HgM3dlvt5JqBSeuGFFzJXocyYMSMeeOCB+OKLL+L888+P2rVrR0TEwQcfHD169IiLLroopk6dGjvssEO8/PLL8fTTT8fZZ58dbdu2jYiIyy+/PMaMGROvvvpq1KpVK7p06RIDBw6Miy++OA477LCsAnhDuu6666JPnz6x++67x4knnhiLFi2Km2++OerUqRODBw/OtNt5550jIuKiiy6K3/72t1GtWrU4+OCDV3uvxWrVqsU111wTxx9/fHTv3j2OOuqomD59etx0003RqlWrjfqHxMr233//zNUkp556asyfPz/uuuuuaNSoUeZKl7U5+eST43//93/jd7/7XXz44YfRtGnTuPfee6N69err3a/jjjsuHnnkkfj9738fr7/+euyxxx6xYsWK+Oyzz+KRRx6Jl156KXbZZZe49NJL46233ooDDzwwWrZsGTNmzIhbb701mjdvHnvuuWdmH5s0aRJ77LFHNG7cOCZMmBD/+7//GwceeGCZe3gCAFCWmn7T1vRnnHFGLFy4MH71q19F+/btY+nSpfHuu+/Gww8/HK1atYrjjz8+IiJ22GGH6NevX9x5551RXFwc3bt3j/feey+GDRsWhx56aPTo0WOdtnvVVVfFgQceGHvuuWeccMIJMXv27Lj55pujU6dOmU8eREScdNJJMXv27PjlL38ZzZs3j6+++ipuvvnm6Nq1a+aNFYBKIQHYDAwZMiSJiKx/BQUFSdeuXZPbbrstKSkpyWo/b9685I9//GPSrFmzpFq1asm2226bXHfddZl2H374YVK1atXkjDPOyFpu+fLlSbdu3ZJmzZolP/zwwxr78/rrrycRkTz66KOp/Z4yZUoSEcmQIUOypr/yyivJHnvskRQWFia1a9dODj744OTTTz8ts/xll12WbLXVVklubm4SEcmUKVNSt/fwww8nO+64Y5Kfn5/Uq1cvOeaYY5L//Oc/WW1Kj+X777+fuq7ytO3evXvSqVOnrGnPPPNM0qVLl6SgoCBp1apVcs011yR33313mf63bNkyOfDAA1e73q+++io55JBDkurVqycNGjRIzjrrrOTFF19MIiJ5/fXXU7efJEnSr1+/pGXLllnTli5dmlxzzTVJp06dkvz8/KRu3brJzjvvnFxyySXJnDlzkiRJkldffTXp27dv0qxZsyQvLy9p1qxZctRRRyWff/55Zj133HFHsvfeeyf169dP8vPzk7Zt2ybnnXdeZh0AAKyemr5iavoXXnghOeGEE5L27dsnNWvWTPLy8pJtttkmOeOMM5Lp06dntV22bFlyySWXJK1bt06qVauWtGjRIrnggguSxYsXZ7Xr3r170r1797Ueo8cffzzp0KFDkp+fn3Ts2DF54oknytTqjz32WLL//vsnjRo1SvLy8pKtt946OfXUU5Pvv/9+rfsGsDnJSZLVfP4HAAAAAACICPdIBwAAAACAVIJ0AAAAAABIIUgHAAAAAIAUgnQAAAAAAEghSAcAAAAAgBRV13fBkpKS+O6776JWrVqRk5OzIfsEAABbtCRJYt68edGsWbPIzf1p17aoywEAYP2sS12+3kH6d999Fy1atFjfxQEA4Gfvm2++iebNm/+kdajLAQDgpylPXb7eQXqtWrUyG6ldu/b6rgYAAH525s6dGy1atMjU1D+FuhwAANbPutTl6x2kl35stHbt2gp2AABYDxviVizqcgAA+GnKU5f7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AAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUlSt6A6srxUrVsTYsWNj9uzZUa9evejSpUtUqVKloru10ZVnv8t7bCrqGJZud8aMGTFhwoSIiNhqq62ib9++UaVKlUyfateuHZMnT47x48dHYWFh7L///rHDDjvEuHHjYsyYMRER0bVr1+jatWtUqVIlli5dGk8//XR899130aRJk2jTpk3MnTs3ioqKoqSkJMaOHRslJSVRq1atmDdvXuTm5sb2228fU6dOjWnTpkWzZs2ib9++ERHxxBNPxNtvvx1JkkTt2rWjbt268dVXX8WSJUsiIqJ69eoxd+7cqFGjRrRu3ToKCwtj8uTJMXv27IiIaNiwYURElJSUbPTjCUDFeOmll+Lvf/97rFixIubPnx9z586NFStWRPXq1aN+/fpRVFQUjRo1imbNmsXWW28dr732WixcuDDq168fHTp0iOLi4pg0aVJMnz49mjRpEr169YqddtopIiLGjBkTH330UUyfPj0aNmwYderUiXr16kWDBg3KnK9/6vl8dctHROo6S5eZOXNmFBcXR1FRUaZvKy+78jk4Ivu8/VP7v6mXAwDY3CxfvjwefvjhGDt2bEybNi1mz54d8+fPj4KCgthzzz1jn332ifnz50e9evWiU6dO8cknn8S0adPi7bffjiVLlkTz5s3j1FNPjcLCwojIrvFmz54d8+bNi5ycnLVmL7Nnz45PPvkkZs6cGUuWLIltt9026tatG0VFRZlcpkGDBtGpU6cYN25cjB49OmbMmBENGjSI2rVrx4IFC8psp9SKFStizJgxq82B1if/KioqiojI1LClP69rXbihasp12YcxY8Zkjl2jRo1ip512is6dO8cnn3xSKWvbyliX5yRJkqzPgnPnzo06derEnDlzonbt2hu6X6neeuutuPXWW2PatGmZaU2aNIkBAwbE3nvvvUn7simVZ7/Le2wq6hiubrulcnNzo6CgIBYuXLhO6ywqKopOnTrFyJEjY8WKFT+pfzk5ObGeT4nVKigoiAsvvHCL/r1kw/j888/jlFNOiQUdD4mSGg0qujvrLHfBzKjx6TOVsv+lfb/zzjtju+22q+juUAlceeWV8fLLL2+Udefl5UXVqlVTz4Urn69/6vl8dcuv/AdFebeZtuzq2pxzzjk/qf+bermNYUPW0hVZl5cqPY95LWVzUtnrq7WpzPXXxqS24+eg9PVtXTKM0uB5dfbYY4/o1avXGmu8iA2TveTm5q71gsNVa8UbbrihTG1ZVFQUvXv3jjfeeGO98q81KW9duKFqynXJ8FZ3HCLKHtPKko9W1rq80t3a5a233opBgwZFmzZt4pZbbonnn38+brnllmjTpk0MGjQo3nrrrYru4kZRnv0u77GpqGNYut3c3B9/7YqKiuLoo4+OXXbZJSJ+vHp74cKF0bJly8wy1atXj4iIHXfcMWtd/fv3j+uvvz46d+4cxcXF8c4770RBQUEccsghERHRtm3bzDuqET8G2quuMyIyfSldpvQElJOTU2Z+eazafvHixTFw4MAt9vcS4Ofm9ttvz4TopeeKdVGzZs2sx6VXXDRq1CgiIpYuXZoJ0Zs3b77aZerUqRODBg2K22+//Sedz1dXD5x88slRXFwcxcXFcfLJJ5dZZ+k269SpExERu+22W/zpT3+K3XbbLSIis2zPnj0z26lVq1bk5OREv379Muftn9L/9a1jfq41JACw5XnsscciItbpQsDS2rVKlSqx//77Z3KWKlWqxDvvvBMDBw7M1HgRP2YkHTt2jIiIrbfeerXZy8rtIyLy8/OztlWqadOmEfF/n9qvX7/+avtYup2Va8Xi4uLo3LlzXH/99XHDDTdk6smHHnoo6tSpU+786+STT46IiM6dO8fWW2+d2V7nzp0jJycnTj755HLVhRuqplzXDK80RO/YsWOceeaZ0aJFi6xjetFFF1Wa2rYy1+WV6or0FStWxDHHHBNt2rSJyy+/PCu0LCkpiYsvvjimTJkS991332b/UYB1Ud79LikpibZt26a2GTZsWPzud7/b5MewdB9atWoV77//ftSuXTseffTRqFq1aixbtiwOOuigKCkpiRo1amReHP7f//t/cfnll8df/vKXGDVqVFStWjWSJIlly5ZF48aN44EHHohly5ZF7969I+LHd66SJIm2bdvGJZdcEsccc0zMmDEjIn4MKGbOnBlVq1aNxx9/PA4++ODM9DZt2sTo0aNj6dKlWX0uKipKvaJudapUqRK77LJLjB49OpYtW5aZ3qRJk7j//vu3qN9LNqzKfsVUZb4iylVLlNfSpUujV69e6/3JpdVdBVSlSpXo1q1bTJkyJWbNmhXLly/PTG/YsGG0adMmLr300vjLX/4So0ePjogfz0+tW7eO999/P3bddde44oor1vl8vrraonRa69atIyJi6tSpmeVLSkrioosuivfeey/T35VrjtJzecSPH7d9//33o1q1arHTTjvFZZddFgMHDowpU6bEPffcEwMHDozRo0fH8uXL17n/61sLbo41pCvSYeOr7PXV2lTm+mtjUtuxpVtTTVqlSpV46qmn4pBDDokkSVZ7tXpOTk40atQoHnjggcjJyYmLL744Jk2alMlOGjRoEPPmzYuddtoprrjiioiIuPjii2Py5Mkxffr0iPgxR8nNzY1WrVrFe++9l3U1dIMGDWLFihVRXFwcVapUieXLl0deXl4sX748kiSJJEkyt3sprRWTJImPPvookiSJevXqRatWrWL06NGxYsWKqFKlSuy8885Z9WJp3bls2bJo2LBhPPDAA5n6bU351yWXXBLHHXdc5udjjz02li5dGgUFBXHPPffEoEGDMrVq6c+rqws3VE1Z3vWU7kPpbYRLj0WSJHH00UdnLsJJkiTq168f9913X2ZcN9d8tLLX5eW+R/qSJUsy94cu3cimVnrPp7/85S9lrvzNzc2NY445Jk477bQYO3ZsmSuYK7Py7ndExMCBA1PbPP300xVyDEv3YY899oiRI0fGiSeeGFWr/vjrN378+MzvVqtWrTL3vTruuOOiatWqseuuu8aIESNi6dKlcfTRR8cDDzwQ06dPj7Fjx8akSZMy2yj9OMjAgQNj/PjxmRNBRGR+Xrp0afzzn//Mmn7UUUfFyJEjM9O22267+Pzzz6N69eqrDdKbN28e//nPf1a7nytWrIjmzZvHqFGjsqZPmzYtnn/++WjXrl15Dxk/M1999VVFd+FnzxiwNq+88kpqiF56/ohY/bmiTZs28cUXX2RNW7FiRWy11VZZ56HS6aXn66pVq8axxx4bI0aMiIiI6dOnx5577hkjR46MXXfddb3O56urLVaeFhFZy+fm5mbOx6X9XbnmWPlcXnoeXLJkSRx77LFRtWrVTH/Gjx+ftS/r2v/1rQW3tBpyc6jL18RrKZsTv48/b8afLdWaatIjjzwyJk2alJm3ujb77bdfvPzyy5maZ+U8KSJi5syZERFx7LHHZmqmVduU5it77LFHmdu0zJw5M4444oh45JFHYu+9947XXnutzEWLXbt2jTfeeCNTK0ZEphaeNm1aHHnkkZnHK1asyOpLRHbdWZoNldZva8q/xo8fn/Xz9OnT49xzz43rr78+xo8fn1WrptWFG6qmLO96SvehVOmxKP0updJ9iIj4/vvvy4zr5ljbVva6vNxB+lVXXRWXXHLJxuzLWpW+A1N6pdSqSqeXtttSlHe/y9Pmu+++K1e7DX0MS9dX+mK3++67l5kXkf3lnKV9Kf1oUETEAQccEA888EBmudL9WVnr1q0zf6CvzqrBxsrrj/jxi08///zzrD9QV7bqR+xXtablSl/cgM1T6RUXsL6aNWuWCdJr1apVZv6q55tSazpvRPzfuXDV83bpMmta59rO56urLdKmrbyt0j+G1tRu5f1Ztf+zZ8/OqgHWtf/rWwtuaTXk5lCXr4nXUmBz4fWIn5sDDjggJk6cmNrmiCOOiJdffnmD5EyrBuSlmjVrFhER7du3j9dee63M/JVvvbu6da9aH67aZk113qrtV86/SjOilX8urUlXrk9X/XlVG6qmLO96Vs28Vl3/ynX16ta7Oda2lb0uL3eQfsEFF8Q555yTeTx37tzM/Xg2lXr16kVExJQpU6JTp05l5k+ZMiWr3ZaivPtdnjalL2ib+hiWrq/0BXHEiBGZj4CvvK2V340q7ePKf5A///zzWess3Z+VTZkyJbX/zZs3jw8++CDzeNUA49tvv83q66rmz5+/xnWnLXfuuee6Ip01+uqrrxT7Feyiiy7K+o4GWNUrr7wSjzzyyBrnr1zozps3r8z8NQXmazpvRPzfuXDlc/3Ky6xpnWs7n6+utlh52qrtVt5WXl7eGpdddX9W7X+9evWy1r+u/V/fWnBLqyE3h7p8TbyWsjlRX/28eT1iS7WmmvT555+Pbt26pS5butzq6r6VrVwzralNaU24qtKa+LPPPlvt/MWLF2dtZ1Wr1oer1m9rqvNWXefK+dfK+1v6c2mgvnJ9uurPq9pQNWV517Nq5lXaftV9WN16y9OPilDZ6/JyB+n5+fmpf+htCl26dMnca3p199G5//77o2nTptGlS5cK7OWGV979Lv05rU3fvn3j8ccf3+THsHQfvv3226hSpUr885//jN69e0fVqlVj++23j/z8/CgpKYmpU6dmlrn33nvj8ssvj/feey9yc3OjatWq8eijj0ZEROPGjaNLly7RoUOHuOWWWyLi/+6Rfv/998cll1wSjRo1Wu090k888cR46qmnMtNHjRoVeXl5mXdTS68mLP2yt1Wt6bYuET/ek+w///lPVKtWrcw90g844IDN7t5UwP9p2bKl+2iSqlWrVvHoo4+u8fYupeePiNWfK7788ssy06pUqRLffvttNG7ceLX3SL///vvj0ksvjfvuuy9ThxUVFWXOp++991707dt3nc/nq6stSqfdd999ERFZy5eUlMR7772X1d+Vly09l5fue25ublSrVi3uu+++uOyyyzL92X777WPgwIGRn58fy5cvX+f+r28tuKXVkJtDXb4mXkuBzYXXI7ZUa6pJH3744TjqqKMy90Zf3T3Shw8fnslTSmuglbOT0nuk33fffZk3Iu+///5o3LhxmXukf/vtt5Gbm1vmHunDhw+PnJyczBdGrnqP9DFjxmTVikmSRH5+fuYe6aUZTek90kv7Ulq/ldadpfdIX7l+W1P+dckll2RqwUsuuSQaN24cd999d6Y+HTRoUJmfV1cXbqiasrzrKd2H0quzS49Fly5dMvtQeuzq16+fNa6ba21b2evy3LU32XxUqVIlBgwYECNGjIiLL744Pvnkk1i4cGF88skncfHFF8eIESPiD3/4wxYXVpZ3v0877bS1tsnLy6uQY1i6D6NGjYrGjRvHDz/8EIcddljccccdccEFF8SSJUti2bJlUVxcnLlqYOTIkXHIIYfEiBEjYocddoilS5dmwunevXvHmDFj4rzzzstsY968ebHbbrvFu+++G6eeemrW1YBz586NkpKSWLp0aRx55JGZ6TNnzoyRI0fG0qVLo23btpnpOTk5UVxcXOZ+TWuTJEmMGjUqK0SPiBgwYMAW93sJ8HOTl5eXdQ7JyclZp+VXrFgRNWrUKDN95MiRUVJSkgnRS9tWrVo13n333Tj00ENjxIgRmftiFxUVxahRo+Lwww+PkSNHrtf5fHW1xZIlS+Kggw6KESNGZD45tmTJksw6R44cGYcffniMGjUqioqK4t13340LLrggnn322bj44osz/Rs1alT88pe/jCVLlsSIESPiV7/6VYwYMSL233//OOecczLfe7I+/V/fWvDnWkMCAFuevLy82G+//cpMX7FiRRx88MFrvEd61apVI0mSmDlzZlx99dVx7rnnxrvvvhuzZs3KtKlfv36mhjvppJPi9NNPj3fffTfrDfwFCxZEt27dYuTIkWVuZzhv3rz44YcfIiIyte3SpUujcePGmf4UFxdH3bp1M9sZOXJkLFmyJJYuXRp5eXkxcuTIWLZsWRx++OGxbNmyGDFiRJx11lnx4YcfxocffhjnnHNOLFmyJEpKSqKoqCg+++yzteZfgwYNioMOOijefffdOOeccyI/Pz9++OGHqFatWqY+Peigg2LQoEGpdeGGqinLu57SfVi2bFksXbo0RowYEaeffno89dRTUa1atfjhhx8yx+6EE06Izz77bLOvbSt7XZ6TpH1rVop1+UbTDe2tt96KW2+9NeuG+02bNo0//OEPsffee2/SvmxK5dnv8h6bijqGq9tuqdzc3CgoKFjjleBrUrdu3ejYsWOMHDkyVqxY8ZP6t7p3bH+KgoKCuPDCC7fo30s2jM8//zxOOeWUWNDxkCip0aCiu7POchfMjBqfPlMp+1/a9zvvvNNVS5TLlVdeGS+//PJGWXdeXl5UrVo19Vy48vn6p57PV7d83bp1I0mSrC/cXts2SxUVFUVErPbLulde/x//+Mef1P9NvdzGsCFr6Yqsy0uVnse8lrI5qez11dpU5vprY1Lb8XNQ+vq2LhlGlSpV1piZ7LHHHtGrV6811ngRGyZ7WfUK9jVtZ+Va8YYbbihTWxYVFUXv3r3jjTfeWK/8a03KWxduqJpyXTK81R2HiLLHtLLko5W1Lq+UQXrEj++0jR07NmbPnh316tWLLl26bLbvVmxI5dnv8h6bijqGpdudMWNGTJgwISJ+/ILPvn37RpUqVTJ9ql27dkyePDnGjx8fhYWFsf/++8cOO+wQ48aNizFjxkTEj9/23LVr16hSpUosXbo0nn766fjuu++iSZMm0aZNm5g7d24UFRVFSUlJjB07NkpKSqJWrVoxb968zEfRp06dGtOmTYtmzZpF3759IyLiiSeeiLfffjuSJInatWtH3bp146uvvsrcq6t69eoxd+7cqFGjRrRu3ToKCwtj8uTJmY/bNGzYMN5///24/fbbo3379hv9mFL5VfY/9CrzH3L+2GJdlT5ff/Ob38TEiRNjxYoVMX/+/Jg7d26sWLEiqlevHvXr14+ioqJo1KhRNGvWLLbeeut47bXXYuHChVG/fv3o0KFDFBcXx6RJk2L69OnRpEmT6NWrV+y0004RETFmzJj46KOPYvr06dGwYcOoU6dO1KtXLxo0aFDmfP1Tz+erWz4iUtdZuszMmTOjuLg4ioqKMn1bedmVz8ER2eftn9r/Tb3chiZIh42vstdXa1OZ66+NSW3Hz0Hp69utt94a48aNi7Fjx8a0adNi9uzZMX/+/CgoKIg999wz9tlnn5g/f37Uq1cvOnXqFJ988klMmzYt3n777ViyZEk0b948Tj311CgsLIyI7Bpv9uzZMW/evMjJyVlr9jJ79uz45JNPYubMmbFkyZLYdttto27dulFUVJTJZRo0aBCdOnWKcePGxejRo2PGjBnRoEGDqF27dixYsKDMdkqtWLEixowZs9ocaH3yr5Uv/Fj553WtCzdUTbku+zBmzJjMsWvUqFHstNNO0blz5/jkk08qvLZdH5WxLq+0QTpszvwxybqq7H/oVeY/5PyxxbryGs+GIEiHja+y11drU5nrr41JbcfPgfMubDjrUktXqnukAwAAAADApiZIBwAAAACAFIJ0AAAAAABIIUgHAAAAAIAUgnQAAAAAAEghSAcAAAAAgBSCdAAAAAAASCFIBwAAAACAFIJ0AAAAAABIIUgHAAAAAIAUgnQAAAAAAEghSAcAAAAAgBSCdAAAAAAASCFIBwAAAACAFIJ0AAAAAABIIUgHAAAAAIAUgnQAAAAAAEghSAcAAAAAgBSCdAAAAAAASCFIBwAAAACAFIJ0AAAAAABIIUgHAAAAAIAUgnQAAAAAAEghSAcAAAAAgBSCdAAAAAAASCFIBwAAAACAFIJ0AAAAAABIIUgHAAAAAIAUgnQAAAAAAEghSAcAAAAAgBSCdAAAAAAASCFIBwAAAACAFIJ0AAAAAABIIUgHAAAAAIAUgnQAAAAAAEghSAcAAAAAgBSCdAAAAAAASCFIBwAAAACAFIJ0AAAAAABIIUgHAAAAAIAUgnQAAAAAAEghSAcAAAAAgBSCdAAAAAAASCFIBwAAAACAFIJ0AAAAAABIIUgHAAAAAIAUgnQAAAAAAEghSAcAAAAAgBSCdAAAAAAASCFIBwAAAACAFIJ0AAAAAABIIUgHAAAAAIAUgnQAAAAAAEghSAcAAAAAgBSCdAAAAAAASCFIBwAAAACAFIJ0AAAAAABIIUgHAAAAAIAUgnQAAAAAAEghSAcAAAAAgBSCdAAAAAAASCFIBwAAAACAFIJ0AAAAAABIIUgHAAAAAIAUgnQAAAAAAEghSAcAAAAAgBSCdAAAAAAASCFIBwAAAACAFIJ0AAAAAABIIUgHAAAAAIAUgnQAAAAAAEghSAcAAAAAgBSCdAAAAAAASCFIBwAAAACAFIJ0AAAAAABIIUgHAAAAAIAUgnQAAAAAAEghSIeNYOutt44777wztt5664ruCgAbmNd4KMvzAgA2HeddqBhVK7oDsCUqKCiI7bbbrqK7AcBG4DUeyvK8AIBNx3kXKoYr0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFJUregOAPB/chfPqegurJfcRcVZ/1cmlfWYAwDls6We6ytz/bUxbanjDUDFE6QDbAbq1KkT1fLyI758s6K78pMUTnmroruwXqrl5UedOnUquhsAwAa0pdRXa1NZ66+NSW0HwMYgSAfYDDRu3Djuu/eemDPHFTQVoU6dOtG4ceOK7gYAsAGpr36+1HYAbAyCdIDNROPGjRX8AAAbkPoKANhQfNkoAAAAAACkEKQDAAAAAEAKQToAAAAAAKQQpAMAAAAAQApBOgAAAAAApBCkAwAAAABACkE6AAAAAACkEKQDAAAAAEAKQToAAAAAAKQQpAMAAAAAQApBOgAAAAAApBCkAwAAAABACkE6AAAAAACkEKQDAAAAAEAKQToAAAAAAKQQpAMAAAAAQApBOgAAAAAApBCkAwAAAABACkE6AAAAAACkEKQDAAAAAEAKQToAAAAAAKQQpAMAAAAAQApBOgAAAAAApBCkAwAAAABACkE6AAAAAACkEKQDAAAAAEAKQToAAAAAAKQQpAMAAAAAQApBOgAAAAAApBCkAwAAAABACkE6AAAAAACkEKQDAAAAAEAKQToAAAAAAKQQpAMAAAAAQApBOgAAAAAApBCkAwAAAABACkE6AAAAAACkqLq+CyZJEhERc+fO3WCdAQCAn4PSGrq0pv4p1OUAALB+1qUuX+8gfd68eRER0aJFi/VdBQAA/KzNmzcv6tSp85PXEaEuBwCA9VWeujwnWc/LYEpKSuK7776LWrVqRU5Oznp1cGOZO3dutGjRIr755puoXbt2RXeHDcjYbrmM7ZbL2G65jO2WzfhuXEmSxLx586JZs2aRm/vT7rZYUXW535HKxXhVHsaqcjFelYvxqlyMV+VSWcdrXery9b4iPTc3N5o3b76+i28StWvXrlQDR/kZ2y2Xsd1yGdstl7HdshnfjeenXoleqqLrcr8jlYvxqjyMVeVivCoX41W5GK/KpTKOV3nrcl82CgAAAAAAKQTpAAAAAACQYosM0vPz82PQoEGRn59f0V1hAzO2Wy5ju+UytlsuY7tlM76sjd+RysV4VR7GqnIxXpWL8apcjFfl8nMYr/X+slEAAAAAAPg52CKvSAcAAAAAgA1FkA4AAAAAACkE6QAAAAAAkEKQDgAAAAAAKQTpAAAAAACQotIG6YMHD46cnJysf+3bt8/MX7x4cZx22mlRv379qFmzZvzmN7+J6dOnV2CPWZO33norDj744GjWrFnk5OTEU089lTU/SZIYOHBgNG3aNAoLC6Nnz57xxRdfZLWZPXt2HHPMMVG7du0oKiqKE088MebPn78J94LVWdvY9u/fv8zzuHfv3lltjO3m6aqrropu3bpFrVq1olGjRnHooYfGxIkTs9qU53X466+/jgMPPDCqV68ejRo1ivPOOy+WL1++KXeFVZRnbPfZZ58yz93f//73WW2M7ebntttuiy5dukTt2rWjdu3asfvuu8cLL7yQme85y7q45ZZbolWrVlFQUBC77bZbvPfeexXdpS3OpqqRx44dG3vttVcUFBREixYt4tprry3Tl0cffTTat28fBQUF0blz53j++ec3+P5WdpuyNnrjjTdip512ivz8/Nhmm21i6NChZfrjOZpuU50TjdWGd/XVV0dOTk6cffbZmWnGa/OxIbI6Y7Vpffvtt3HsscdG/fr1o7CwMDp37hwffPBBZr56YxVJJTVo0KCkU6dOyffff5/599///jcz//e//33SokWL5NVXX00++OCD5P/9v/+X/OIXv6jAHrMmzz//fHLRRRclTzzxRBIRyZNPPpk1/+qrr07q1KmTPPXUU8nHH3+cHHLIIUnr1q2TRYsWZdr07t072WGHHZKRI0cm//73v5NtttkmOeqoozbxnrCqtY1tv379kt69e2c9j2fPnp3Vxthunnr16pUMGTIkGT9+fDJmzJjkgAMOSLbeeutk/vz5mTZrex1evnx5sv322yc9e/ZMPvroo+T5559PGjRokFxwwQUVsUv8/8oztt27d09OPvnkrOfunDlzMvON7ebpmWeeSZ577rnk888/TyZOnJhceOGFSbVq1ZLx48cnSeI5S/k99NBDSV5eXnL33Xcnn3zySXLyyScnRUVFyfTp0yu6a1uUTVEjz5kzJ2ncuHFyzDHHJOPHj08efPDBpLCwMLnjjjsybd55552kSpUqybXXXpt8+umnycUXX5xUq1YtGTdu3EY/BpXJpqqNvvzyy6R69erJOeeck3z66afJzTffnFSpUiV58cUXM208R9duU5wTjdWG99577yWtWrVKunTpkpx11lmZ6cZr8/FTszpjtWnNnj07admyZdK/f/9k1KhRyZdffpm89NJLyaRJkzJt1BvZKnWQvsMOO6x2XnFxcVKtWrXk0UcfzUybMGFCEhHJiBEjNlEPWR+r/pFQUlKSNGnSJLnuuusy04qLi5P8/PzkwQcfTJIkST799NMkIpL3338/0+aFF15IcnJykm+//XaT9Z10awrS+/btu8ZljG3lMWPGjCQikjfffDNJkvK9Dj///PNJbm5uMm3atEyb2267Laldu3ayZMmSTbsDrNGqY5skPwbpK//xsipjW3nUrVs3+cc//uE5yzrZddddk9NOOy3zeMWKFUmzZs2Sq666qgJ7tWXbWDXyrbfemtStWzfrOfznP/85adeuXebxEUcckRx44IFZ/dltt92SU089dYPu45ZmY9VG//M//5N06tQpa1tHHnlk0qtXr8xjz9H1s6HPicZqw5o3b16y7bbbJsOHD8+qRY3X5uWnZnXGatP685//nOy5555rnK/eKKvS3tolIuKLL76IZs2aRZs2beKYY46Jr7/+OiIiPvzww1i2bFn07Nkz07Z9+/ax9dZbx4gRIyqqu6yHKVOmxLRp07LGsk6dOrHbbrtlxnLEiBFRVFQUu+yyS6ZNz549Izc3N0aNGrXJ+8y6eeONN6JRo0bRrl27+MMf/hCzZs3KzDO2lcecOXMiIqJevXoRUb7X4REjRkTnzp2jcePGmTa9evWKuXPnxieffLIJe0+aVce21P333x8NGjSI7bffPi644IJYuHBhZp6x3fytWLEiHnrooViwYEHsvvvunrOU29KlS+PDDz/M+l3Jzc2Nnj17qrM3oQ1VI48YMSL23nvvyMvLy7Tp1atXTJw4MX744YdMm5W3U9rGeKfbWLXR2sbDc3TdbaxzorHasE477bQ48MADyxxT47X5+SlZnbHatJ555pnYZZdd4vDDD49GjRrFjjvuGHfddVdmvnqjrKoV3YH1tdtuu8XQoUOjXbt28f3338cll1wSe+21V4wfPz6mTZsWeXl5UVRUlLVM48aNY9q0aRXTYdZL6Xit/CJa+rh03rRp06JRo0ZZ86tWrRr16tUz3pu53r17x69//eto3bp1TJ48OS688MLo06dPjBgxIqpUqWJsK4mSkpI4++yzY4899ojtt98+IqJcr8PTpk1b7XO7dB4Vb3VjGxFx9NFHR8uWLaNZs2YxduzY+POf/xwTJ06MJ554IiKM7eZs3Lhxsfvuu8fixYujZs2a8eSTT0bHjh1jzJgxnrOUy8yZM2PFihWr/V347LPPKqhXPz8bqkaeNm1atG7dusw6SufVrVt3jc99z/s125i10ZrazJ07NxYtWhQ//PCD52g5bexzorHacB566KEYPXp0vP/++2XmeW5tXn5qVmesNq0vv/wybrvttjjnnHPiwgsvjPfffz/OPPPMyMvLi379+qk3VqPSBul9+vTJ/NylS5fYbbfdomXLlvHII49EYWFhBfYMKK/f/va3mZ87d+4cXbp0ibZt28Ybb7wR++67bwX2jHVx2mmnxfjx4+Ptt9+u6K6wga1pbE855ZTMz507d46mTZvGvvvuG5MnT462bdtu6m6yDtq1axdjxoyJOXPmxGOPPRb9+vWLN998s6K7BbBFURtVDs6JlcM333wTZ511VgwfPjwKCgoqujushayucikpKYlddtklrrzyyoiI2HHHHWP8+PFx++23R79+/Sq4d5unSn1rl5UVFRXFdtttF5MmTYomTZrE0qVLo7i4OKvN9OnTo0mTJhXTQdZL6Xit+i3OK49lkyZNYsaMGVnzly9fHrNnzzbelUybNm2iQYMGMWnSpIgwtpXB6aefHv/617/i9ddfj+bNm2eml+d1uEmTJqt9bpfOo2KtaWxXZ7fddouIyHruGtvNU15eXmyzzTax8847x1VXXRU77LBD3HTTTZ6zlFuDBg2iSpUqqbUZG9+GqpHL87xeUxvjvXobuzZaU5vatWtHYWGh5+g62NjnRGO1YXz44YcxY8aM2GmnnaJq1apRtWrVePPNN+Pvf/97VK1aNRo3bmy8NmPrmtUZq02radOm0bFjx6xpHTp0yNyOR71R1hYTpM+fPz8mT54cTZs2jZ133jmqVasWr776amb+xIkT4+uvv47dd9+9AnvJumrdunU0adIkayznzp0bo0aNyozl7rvvHsXFxfHhhx9m2rz22mtRUlKSCXeoHP7zn//ErFmzomnTphFhbDdnSZLE6aefHk8++WS89tprZT6mVZ7X4d133z3GjRuXddIdPnx41K5du8zJnE1nbWO7OmPGjImIyHruGtvKoaSkJJYsWeI5S7nl5eXFzjvvnPW7UlJSEq+++qo6exPaUDXy7rvvHm+99VYsW7Ys02b48OHRrl27qFu3bqbNytspbWO8s22q2mht4+E5uv429DnRWG0Y++67b4wbNy7GjBmT+bfLLrvEMccck/nZeG2+1jWrM1ab1h577BETJ07Mmvb5559Hy5YtI0K9sVoV/GWn6+3cc89N3njjjWTKlCnJO++8k/Ts2TNp0KBBMmPGjCRJkuT3v/99svXWWyevvfZa8sEHHyS77757svvuu1dwr1mdefPmJR999FHy0UcfJRGR3HDDDclHH32UfPXVV0mSJMnVV1+dFBUVJU8//XQyduzYpG/fvknr1q2TRYsWZdbRu3fvZMcdd0xGjRqVvP3228m2226bHHXUURW1S/z/0sZ23rx5yZ/+9KdkxIgRyZQpU5JXXnkl2WmnnZJtt902Wbx4cWYdxnbz9Ic//CGpU6dO8sYbbyTff/995t/ChQszbdb2Orx8+fJk++23T/bff/9kzJgxyYsvvpg0bNgwueCCCypil/j/rW1sJ02alFx66aXJBx98kEyZMiV5+umnkzZt2iR77713Zh3GdvN0/vnnJ2+++WYyZcqUZOzYscn555+f5OTkJC+//HKSJJ6zlN9DDz2U5OfnJ0OHDk0+/fTT5JRTTkmKioqSadOmVXTXtiibokYuLi5OGjdunBx33HHJ+PHjk4ceeiipXr16cscdd2TavPPOO0nVqlWTv/71r8mECROSQYMGJdWqVUvGjRu36Q5GJbCpaqMvv/wyqV69enLeeeclEyZMSG655ZakSpUqyYsvvphp4zm6dpvinGisNp7u3bsnZ511Vuax8dp8/NSszlhtWu+9915StWrV5Iorrki++OKL5P7770+qV6+e3HfffZk26o1slTZIP/LII5OmTZsmeXl5yVZbbZUceeSRyaRJkzLzFy1alAwYMCCpW7duUr169eRXv/pV8v3331dgj1mT119/PYmIMv/69euXJEmSlJSUJH/5y1+Sxo0bJ/n5+cm+++6bTJw4MWsds2bNSo466qikZs2aSe3atZPjjz8+mTdvXgXsDStLG9uFCxcm+++/f9KwYcOkWrVqScuWLZOTTz65zInN2G6eVjeuEZEMGTIk06Y8r8NTp05N+vTpkxQWFiYNGjRIzj333GTZsmWbeG9Y2drG9uuvv0723nvvpF69ekl+fn6yzTbbJOedd14yZ86crPUY283PCSeckLRs2TLJy8tLGjZsmOy7776ZwCBJPGdZNzfffHOy9dZbJ3l5ecmuu+6ajBw5sqK7tMXZVDXyxx9/nOy5555Jfn5+stVWWyVXX311mb488sgjyXbbbZfk5eUlnTp1Sp577rmNtt+V1aasjV5//fWka9euSV5eXtKmTZusbZTyHE23qc6JxmrjWDVIN16bjw2R1RmrTevZZ59Ntt9++yQ/Pz9p3759cuedd2bNV29ky0mSJNm417wDAAAAAEDltcXcIx0AAAAAADYGQToAAAAAAKQQpAMAAAAAQApBOgAAAAAApBCkAwAAAABACkE6AAAAAACkEKQDAAAAAEAKQTrAFuSNN96InJycKC4uruiuAADAz9rgwYOja9eumcf9+/ePQw89NHWZffbZJ84+++yN2i8A1o8gHWAjWlOxLPAGAIDN23//+9/4wx/+EFtvvXXk5+dHkyZNolevXvHOO++s1/puuummGDp06IbtJACbTNWK7gAA627p0qWRl5dX0d0AAIAt1m9+85tYunRpDBs2LNq0aRPTp0+PV199NWbNmrVe66tTp84G7iEAm5Ir0gEq2KxZs+Koo46KrbbaKqpXrx6dO3eOBx98MKvNPvvsE6effnqcffbZ0aBBg+jVq1dERDz//POx3XbbRWFhYfTo0SOmTp2atdzQoUOjqKgoXnrppejQoUPUrFkzevfuHd9//31Wu3/84x/RoUOHKCgoiPbt28ett96ambd06dI4/fTTo2nTplFQUBAtW7aMq666KiIikiSJwYMHZ67SadasWZx55pkb4SgBAMCmU1xcHP/+97/jmmuuiR49ekTLli1j1113jQsuuCAOOeSQiIj4+uuvo2/fvlGzZs2oXbt2HHHEETF9+vQ1rnPVT6suWLAgfve730XNmjWjadOmcf3115dZ5tZbb41tt902CgoKonHjxnHYYYdt8H0FoHwE6QAVbPHixbHzzjvHc889F+PHj49TTjkljjvuuHjvvfey2g0bNizy8vLinXfeidtvvz2++eab+PWvfx0HH3xwjBkzJk466aQ4//zzy6x/4cKF8de//jXuvffeeOutt+Lrr7+OP/3pT5n5999/fwwcODCuuOKKmDBhQlx55ZXxl7/8JYYNGxYREX//+9/jmWeeiUceeSQmTpwY999/f7Rq1SoiIh5//PG48cYb44477ogvvvginnrqqejcufPGO1gAALAJ1KxZM2rWrBlPPfVULFmypMz8kpKS6Nu3b8yePTvefPPNGD58eHz55Zdx5JFHlnsb5513Xrz55pvx9NNPx8svvxxvvPFGjB49OjP/gw8+iDPPPDMuvfTSmDhxYrz44oux9957b5D9A2DdubULwEb2r3/9K2rWrJk1bcWKFZmft9pqq6xg+4wzzoiXXnopHnnkkdh1110z07fddtu49tprM48vvPDCaNu2bebKlXbt2sW4cePimmuuydrWsmXL4vbbb4+2bdtGRMTpp58el156aWb+oEGD4vrrr49f//rXERHRunXr+PTTT+OOO+6Ifv36xddffx3bbrtt7LnnnpGTkxMtW7bMLPv1119HkyZNomfPnlGtWrXYeuuts/oMAACVUdWqVWPo0KFx8sknx+233x477bRTdO/ePX77299Gly5d4tVXX41x48bFlClTokWLFhERcc8990SnTp3i/fffj27duqWuf/78+fHPf/4z7rvvvth3330j4scLZ5o3b55p8/XXX0eNGjXioIMOilq1akXLli1jxx133Hg7DUAqV6QDbGQ9evSIMWPGZP37xz/+kZm/YsWKuOyyy6Jz585Rr169qFmzZrz00kvx9ddfZ61n5513zno8YcKE2G233bKm7b777mW2X7169UyIHhHRtGnTmDFjRkT8+HHSyZMnx4knnpi56qZmzZpx+eWXx+TJkyPix4+gjhkzJtq1axdnnnlmvPzyy5l1HX744bFo0aJo06ZNnHzyyfHkk0/G8uXL1/NIAQDA5uM3v/lNfPfdd/HMM89E796944033oiddtophg4dGhMmTIgWLVpkQvSIiI4dO0ZRUVFMmDBhreuePHlyLF26NKuer1evXrRr1y7zeL/99ouWLVtGmzZt4rjjjov7778/Fi5cuGF3EoByE6QDbGQ1atSIbbbZJuvfVlttlZl/3XXXxU033RR//vOf4/XXX48xY8ZEr169YunSpWXWsz6qVauW9TgnJyeSJImIH6+EiYi46667soL+8ePHx8iRIyMiYqeddoopU6bEZZddFosWLYojjjgic2/GFi1axMSJE+PWW2+NwsLCGDBgQOy9996xbNmy9eorAABsTgoKCmK//faLv/zlL/Huu+9G//79Y9CgQZtk27Vq1YrRo0fHgw8+GE2bNo2BAwfGDjvsEMXFxZtk+wBkE6QDVLB33nkn+vbtG8cee2zssMMO0aZNm/j888/XulyHDh3K3Ee9NPwur8aNG0ezZs3iyy+/LBP2t27dOtOudu3aceSRR8Zdd90VDz/8cDz++OMxe/bsiIgoLCyMgw8+OP7+97/HG2+8ESNGjIhx48atUz8AAKAy6NixYyxYsCA6dOgQ33zzTXzzzTeZeZ9++mkUFxdHx44d17qetm3bRrVq1WLUqFGZaT/88EOZvwOqVq0aPXv2jGuvvTbGjh0bU6dOjddee23D7RAA5eYe6QAVbNttt43HHnss3n333ahbt27ccMMNMX369LUW4L///e/j+uuvj/POOy9OOumk+PDDD2Po0KHrvP1LLrkkzjzzzKhTp0707t07lixZEh988EH88MMPcc4558QNN9wQTZs2jR133DFyc3Pj0UcfjSZNmkRRUVEMHTo0VqxYEbvttltUr1497rvvvigsLMy6jzoAAFQ2s2bNisMPPzxOOOGE6NKlS9SqVSs++OCDuPbaa6Nv377Rs2fP6Ny5cxxzzDHxt7/9LZYvXx4DBgyI7t27xy677LLW9desWTNOPPHEOO+886J+/frRqFGjuOiiiyI39/+ud/zXv/4VX375Zey9995Rt27deP7556OkpCTr9i8AbDqCdIAKdvHFF8eXX34ZvXr1iurVq8cpp5wShx56aMyZMyd1ua233joef/zx+OMf/xg333xz7LrrrnHllVfGCSecsE7bP+mkk6J69epx3XXXxXnnnRc1atSIzp07x9lnnx0RP36k9Nprr40vvvgiqlSpEt26dYvnn38+cnNzo6ioKK6++uo455xzYsWKFdG5c+d49tlno379+ut7OAAAoMLVrFkzdtttt7jxxhtj8uTJsWzZsmjRokWcfPLJceGFF0ZOTk48/fTTccYZZ8Tee+8dubm50bt377j55pvLvY3rrrsu5s+fHwcffHDUqlUrzj333Ky/AYqKiuKJJ56IwYMHx+LFi2PbbbeNBx98MDp16rQxdhmAtchJSm+UCwAAAAAAlOEe6QAAAAAAkEKQDgAAAAAAKQTpAAAAAACQQpAOAAAAAAApBOkAAAAAAJBCkA4AAAAAACkE6QAAAAAAkEKQDgAAAAAAKQTpAAAAAACQQpAOAAAAAAApBOkAAAAAAJBCkA4AAAAAACkE6QAAAAAAkEKQDgAAAAAAKQTpAAAAAACQQpAOAAAAAAApBOkAAAAAAJBCkA4AAAAAACkE6cAWaerUqZGTkxNDhw6t6K5kefHFF6Nr165RUFAQOTk5UVxcXNFd2uj69+8frVq1quhurLfBgwdHTk5OzJw5s6K7AgAAAFQQQTqQaujQoZGTk5P1r1GjRtGjR4944YUXNnl/3njjjay+VKtWLdq0aRO/+93v4ssvv9wg23j33Xdj8ODBGzzknjVrVhxxxBFRWFgYt9xyS9x7771Ro0aN1GU++eSTOPbYY2OrrbaK/Pz8aNasWRxzzDHxySefbNC+AQAAALBmVSu6A0DlcOmll0br1q0jSZKYPn16DB06NA444IB49tln46CDDtrk/TnzzDOjW7dusWzZshg9enTceeed8dxzz8W4ceOiWbNmP2nd7777blxyySXRv3//KCoq2jAdjoj3338/5s2bF5dddln07Nlzre2feOKJOOqoo6JevXpx4oknRuvWrWPq1Knxz3/+Mx577LF46KGH4le/+tUG69/Gctddd0VJSUlFdwMAAABgvQnSgXLp06dP7LLLLpnHJ554YjRu3DgefPDBCgnS99prrzjssMMiIuL444+P7bbbLs4888wYNmxYXHDBBZu8P+UxY8aMiIhyhfOTJ0+O4447Ltq0aRNvvfVWNGzYMDPvrLPOir322iuOO+64GDt2bLRp02aN61mwYMFar3rf2KpVq1ah219fm8OxAwAAADYPbu0CrJeioqIoLCyMqlWz349bsGBBnHvuudGiRYvIz8+Pdu3axV//+tdIkiQiIhYtWhTt27eP9u3bx6JFizLLzZ49O5o2bRq/+MUvYsWKFevcn1/+8pcRETFlypTUdq+99lrstddeUaNGjSgqKoq+ffvGhAkTMvMHDx4c5513XkREtG7dOnMLmalTp6au99FHH42dd945CgsLo0GDBnHsscfGt99+m5m/zz77RL9+/SIiolu3bpGTkxP9+/df4/quu+66WLhwYdx5551ZIXpERIMGDeKOO+6IBQsWxLXXXpvV95ycnPj000/j6KOPjrp168aee+4ZERElJSUxePDgaNasWVSvXj169OgRn376abRq1SqrH7Nnz44//elP0blz56hZs2bUrl07+vTpEx9//HFWH0pvsfPII4/EFVdcEc2bN4+CgoLYd999Y9KkSVltV3eP9JKSkrjpppuic+fOUVBQEA0bNozevXvHBx98kHqcV/XZZ5/FEUccEQ0bNozCwsJo165dXHTRRZn5X331VQwYMCDatWsXhYWFUb9+/Tj88MPLjGfpLYzefPPNGDBgQDRq1CiaN2+e1WbmzJlxxBFHRO3ataN+/fpx1llnxeLFi7PaLF++PC677LJo27Zt5OfnR6tWreLCCy+MJUuWZLVr1apVHHTQQfH222/HrrvuGgUFBdGmTZu455571mn/AQAAgE3DFelAucyZMydmzpwZSZLEjBkz4uabb4758+fHsccem2mTJEkccsgh8frrr8eJJ54YXbt2jZdeeinOO++8+Pbbb+PGG2+MwsLCGDZsWOyxxx5x0UUXxQ033BAREaeddlrMmTMnhg4dGlWqVFnn/k2ePDkiIurXr7/GNq+88kr06dMn2rRpE4MHD45FixbFzTffHHvssUeMHj06WrVqFb/+9a/j888/jwcffDBuvPHGaNCgQUREmTB7ZUOHDo3jjz8+unXrFldddVVMnz49brrppnjnnXfio48+iqKiorjooouiXbt2ceedd2Zuk9O2bds1rvPZZ5+NVq1axV577bXa+XvvvXe0atUqnnvuuTLzDj/88Nh2223jyiuvzLyBccEFF8S1114bBx98cPTq1Ss+/vjj6NWrV5kg+Msvv4ynnnoqDj/88GjdunVMnz497rjjjujevXt8+umnZW6bc/XVV0dubm786U9/ijlz5sS1114bxxxzTIwaNWqN+xbx4ycahg4dGn369ImTTjopli9fHv/+979j5MiRWZ98SDN27NjYa6+9olq1anHKKadEq1atYvLkyfHss8/GFVdcERE/3k7n3Xffjd/+9rfRvHnzmDp1atx2222xzz77xKeffhrVq1fPWueAAQOiYcOGMXDgwFiwYEHWvCOOOCJatWoVV111VYwcOTL+/ve/xw8//JAVfp900kkxbNiwOOyww+Lcc8+NUaNGxVVXXRUTJkyIJ598Mmt9kyZNisMOOyxOPPHE6NevX9x9993Rv3//2HnnnaNTp07lOgYAAADAJpIApBgyZEgSEWX+5efnJ0OHDs1q+9RTTyURkVx++eVZ0w877LAkJycnmTRpUmbaBRdckOTm5iZvvfVW8uijjyYRkfztb39ba39ef/31JCKSu+++O/nvf/+bfPfdd8lzzz2XtGrVKsnJyUnef//9JEmSZMqUKUlEJEOGDMks27Vr16RRo0bJrFmzMtM+/vjjJDc3N/nd736XmXbdddclEZFMmTJlrf1ZunRp0qhRo2T77bdPFi1alJn+r3/9K4mIZODAgZlppceytI9rUlxcnERE0rdv39R2hxxySBIRydy5c5MkSZJBgwYlEZEcddRRWe2mTZuWVK1aNTn00EOzpg8ePDiJiKRfv36ZaYsXL05WrFiR1W7KlClJfn5+cumll2amlY5Dhw4dkiVLlmSm33TTTUlEJOPGjctM69evX9KyZcvM49deey2JiOTMM88ss08lJSWp+7yyvffeO6lVq1by1VdfrXEdCxcuLLPciBEjkohI7rnnnsy00rHZc889k+XLl2e1Lz2uhxxySNb0AQMGJBGRfPzxx0mSJMmYMWOSiEhOOumkrHZ/+tOfkohIXnvttcy0li1bJhGRvPXWW5lpM2bMSPLz85Nzzz23vIcAAAAA2ETc2gUol1tuuSWGDx8ew4cPj/vuuy969OgRJ510UjzxxBOZNs8//3xUqVIlzjzzzKxlzz333EiSJF544YXMtMGDB0enTp2iX79+MWDAgOjevXuZ5dKccMIJ0bBhw2jWrFkceOCBsWDBghg2bNgar2b+/vvvY8yYMdG/f/+oV69eZnqXLl1iv/32i+eff77c217ZBx98EDNmzIgBAwZEQUFBZvqBBx4Y7du3X+0V42szb968iIioVatWarvS+XPnzs2a/vvf/z7r8auvvhrLly+PAQMGZE0/44wzyqwzPz8/cnN/PDWsWLEiZs2aFTVr1ox27drF6NGjy7Q//vjjIy8vL/O49Ar6L7/8co39fvzxxyMnJycGDRpUZl5OTs4al1vZf//733jrrbfihBNOiK233nqN6ygsLMz8vGzZspg1a1Zss802UVRUtNr9Ofnkk9f4iYjTTjst63Hp8Sv93Sn9/5xzzslqd+6550ZElPld6NixY9YnDho2bBjt2rVLPXYAAABAxXBrF6Bcdt1116yQ+qijjoodd9wxTj/99DjooIMiLy8vvvrqq2jWrFmZALhDhw4R8eP9qkvl5eXF3XffHd26dYuCgoIYMmRIuUPUiIiBAwfGXnvtFVWqVIkGDRpEhw4dytyvfWWl227Xrl2ZeR06dIiXXnppvb5cMm297du3j7fffnud1hfxfwF5aaC+JmsK3Fu3br3aPm6zzTZZ0+vVqxd169bNmlZ67/Jbb701pkyZknW/+tXdNmfVELt0fT/88MMa+z158uRo1qxZ1hsa66o0bN5+++1T2y1atCiuuuqqGDJkSHz77beZW91E/Hi7olWteuxWtu2222Y9btu2beTm5mbut/7VV19Fbm5umePcpEmTKCoqyvr9jyh77CJ+PH5pxw4AAACoGIJ0YL3k5uZGjx494qabboovvvhive7p/NJLL0VExOLFi+OLL75IDTFX1blz5+jZs+c6b7MyqFOnTjRt2jTGjh2b2m7s2LGx1VZbRe3atbOmr3wV9rq68sor4y9/+UuccMIJcdlll0W9evUiNzc3zj777CgpKSnTfk1Xb68cWFekM844I4YMGRJnn3127L777lGnTp3IycmJ3/72t6vdn3U5dmt646e8bwht7scOAAAA+D9u7QKst+XLl0dExPz58yMiomXLlvHdd9+VuZL6s88+y8wvNXbs2Lj00kvj+OOPjx133DFOOumk1V4hvKGUbnvixIll5n322WfRoEGDzNXo63JlfNp6J06cmLXP6+Kggw6KKVOmrPGK9n//+98xderUOOigg8rdx0mTJmVNnzVrVpmrnx977LHo0aNH/POf/4zf/va3sf/++0fPnj2juLh4vfZjddq2bRvfffddzJ49e73X0aZNm4iIGD9+fGq7xx57LPr16xfXX399HHbYYbHffvvFnnvuuV7788UXX2Q9njRpUpSUlESrVq0i4sfjXFJSUqbd9OnTo7i4eL1/FwAAAICKJ0gH1suyZcvi5Zdfjry8vMytWw444IBYsWJF/O///m9W2xtvvDFycnKiT58+mWX79+8fzZo1i5tuuimGDh0a06dPjz/+8Y8brb9NmzaNrl27xrBhw7JC1PHjx8fLL78cBxxwQGZaaaBenrB1l112iUaNGsXtt98eS5YsyUx/4YUXYsKECXHggQeuV3/PO++8KCwsjFNPPTVmzZqVNW/27Nnx+9//PqpXrx7nnXfeWte17777RtWqVeO2227Lmr7qOEX8eJX0qldEP/roo/Htt9+ux16s3m9+85tIkiQuueSSMvPKezV2w4YNY++994677747vv766zWuY3X7c/PNN2fdsqa8brnlljLriYjM73Xp79Df/va3rHY33HBDRMR6/y4AAAAAFc+tXYByeeGFFzJXls+YMSMeeOCB+OKLL+L888/P3Frk4IMPjh49esRFF10UU6dOjR122CFefvnlePrpp+Pss8+Otm3bRkTE5ZdfHmPGjIlXX301atWqFV26dImBAwfGxRdfHIcddlhWqL0hXXfdddGnT5/Yfffd48QTT4xFixbFzTffHHXq1InBgwdn2u28884REXHRRRfFb3/726hWrVocfPDBq71/erVq1eKaa66J448/Prp37x5HHXVUTJ8+PW666aZo1arVer85sO2228awYcPimGOOic6dO8eJJ54YrVu3jqlTp8Y///nPmDlzZjz44IOZY5qmcePGcdZZZ8X1118fhxxySPTu3Ts+/vjjeOGFF6JBgwZZV+AfdNBBmU8K/OIXv4hx48bF/fffn7kCfEPo0aNHHHfccfH3v/89vvjii+jdu3eUlJTEv//97+jRo0ecfvrp5VrP3//+99hzzz1jp512ilNOOSVzfJ577rkYM2ZMZn/uvffeqFOnTnTs2DFGjBgRr7zyymrv9742U6ZMyRy/ESNGxH333RdHH3107LDDDhERscMOO0S/fv3izjvvjOLi4ujevXu89957MWzYsDj00EOjR48e67xNAAAAYPMgSAfKZeDAgZmfCwoKon379nHbbbfFqaeempmem5sbzzzzTAwcODAefvjhGDJkSLRq1Squu+66OPfccyMiYvTo0XHllVfG6aefnhUsnn/++fH000/HySefHJ988kkUFRVt8H3o2bNnvPjiizFo0KAYOHBgVKtWLbp37x7XXHNN1v3Zu3XrFpdddlncfvvt8eKLL0ZJSUlMmTJljV9E2r9//6hevXpcffXV8ec//zlq1KgRv/rVr+Kaa675Sftx+OGHR/v27eOqq67KhOf169ePHj16xIUXXrjWL9pc2TXXXBPVq1ePu+66K1555ZXYfffd4+WXX44999wzCgoKMu0uvPDCWLBgQTzwwAPx8MMPx0477RTPPfdcnH/++eu9H6szZMiQ6NKlS/zzn/+M8847L+rUqRO77LJL/OIXvyj3OnbYYYcYOXJk/OUvf4nbbrstFi9eHC1btowjjjgi0+amm26KKlWqxP333x+LFy+OPfbYI1555ZXo1avXOvf54YcfjoEDB8b5558fVatWjdNPPz2uu+66rDb/+Mc/ok2bNjF06NB48skno0mTJnHBBRfEoEGD1nl7AAAAwOYjJ/GtZgA/S8XFxVG3bt24/PLL46KLLqro7gAAAABsttwjHeBnYNGiRWWmld7Le5999tm0nQEAAACoZNzaBeBn4OGHH46hQ4fGAQccEDVr1oy33347Hnzwwdh///1jjz32qOjuZZkzZ85qg/+VNWnSZBP1BgAAAECQDvCz0KVLl6hatWpce+21MXfu3MwXkF5++eUV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3r17Z8SIERk4cGBuueWWrFixotKjrpPV1+u6667L7373u7Rr1y4PPPBAbr/99uy///557rnncu+996Zdu3b59a9/nQ8//DA333xzampqUl1dnQEDBuTjjz/O/vvvn/vuuy81NTX1r9+0adNUV1enpqYmDz74YAYOHJiqqqokyXvvvZcBAwZsku8bAKyrVfvcPn36JPnkD61/9atf5ZVXXkn//v2TpH4fmSTjxo3L/vvvn5YtW6Zdu3Z55513UlVVlZqamowaNSp77bVX9t577/zjP/5jBg4cmOrq6nXapzbWY5vVbQzruDHMAAAAbNrW+tIuy5Yty7Jly+pvL168+CsZqGT69OmZP39+rr322jRp0vDPAJo0aZIzzjgjQ4cOzfTp07Pnnntu8Pm+qNXX66GHHsqKFStyzjnnpFmzTzbPqvWaOXNmzj777IwcOTK33nprFixYUP8a/fv3z7PPPptrr702M2fObLCtVqxYUf+L4cyZM3PmmWdm0qRJSZKFCxemW7dumTRpUh555JHsvPPOG3DN4bP94Q9/qPQIrCe2JRuT2bNnZ/78+enSpUuSZPDgwZk5c2bmz5+fAw44IJMnT05dXV394//zP/+zfj986KGHZsKECamrq8uyZcsyY8aM+uONJk2a1O9f33rrrbU+Fmmsxzar2xjWcWOYAQAA2LStdUi/8cYbM3z48K9yls+1cOHCJEn37t3XuHzV/aset6lYfb2eeOKJJMnAgQPrl6++Xqvu/+Mf/9jgNVadgd69e/f6SP5ZP2v1104+OdsuWfvrxAKsixtuuKHSI8CnPPfcc0mSfv361e+HV/9D6FXefPPNHHvssUmSLbfcssGyvzzeWP34ZG2PRRrrsc3qNoZ13BhmAAAANm1rHdK/973v5bLLLqu/vXjx4vqzuTaU2traJMm8efPSu3fvTy2fN29eg8dtKlZfr86dOydJJk2alOOOO67+/lWPWxXJt99++zz//PP1r7Hql/958+YV17+2trb+9VY57bTTMm7cuFx++eXOSGej8Yc//EGAbSSuvvrqdO3atdJjQJJPzkgfOXJk9t133zz33HOZPn169tprryRpcFm0VTp37ly/31y6dGmDZX+5v119/7q2xyKN9dhmdRvDOm4MMwAAAJu2tQ7pNTU1a/wFc0Pq169fOnbsmLFjx2bEiBEN/mruypUrM3bs2HTq1Cn9+vWr4JTrbvX1uu666zJmzJj84he/yFFHHZUmTZrUr9duu+2WH/zgB2natGn+9m//NpMmTcqiRYtSV1eXyZMn17/GsGHDUlNTUx/XmzZtmqZNm6aqqiq77bZbrr/++lRVVaWuri61tbV57bXX0qlTpxxzzDFp2rRphd8NoLHp2rVrdtppp0qPAUmSnj17ZuzYsfVR/MEHH8yZZ56Zjh071v9tr1X7yCQ59thjM2LEiHTo0CEvvvhi/fLq6ur666wnnxyH/Ou//mtqampSW1u71scijfXYZnUbwzpuDDMAAACbtk3qy0abNm2aCy64IJMmTco111yTl156KR988EFeeumlXHPNNZk0aVLOP//8TS4Gr75eP/jBD3LYYYflnXfeyYknnpi/+Zu/yTPPPJN99tknp556at55552cfPLJad68eYYOHZply5blo48+yrPPPptmzZrlmWeeyUknnfSpa6R/9NFHWbZsWQYPHpxJkybVB4JWrVrl2Wef3STfNwBYV6v2uTNmzEjyyZdun3LKKenVq1cmT56cJA2ukX7aaaflmWeeyZIlS/LOO++kXbt29ddIv+yyyzJlypRMmTIlF198cSZNmpSPPvponfapjfXYZnUbwzpuDDMAAACbtqq61X9bXAeLFy9OmzZt8u6776Z169bre66iiRMnZvTo0Zk/f379fZ06dcr555+fgw8+eIPOsj6tab1W17Rp05x88skZMmRIg+eMGjUqixYt+kI/c5tttsl3v/vdTfp9o3F6+eWXc9555+X93b6elS22qfQ4602T9/8vLWb+ptGt15qsWtfbbrvNGelsdO69996MGTNmnZ/XqVOnHHLIIXnsscc+te9t165dLr300i+0T22sxzar2xjWcWOYYZVKHksDAADrbpMM6cknZ1lPnz49CxcurP8r1I3hLKLV16t169Z59dVXM3/+/HTu3DknnHBCqqur1/icadOmZerUqVmwYEG23XbbtGnTJrW1tamtrc3HH3+cxx9/PPPnz0+HDh3Sq1evLF++PHfccUfGjBmTXXbZpQJrCmVC+qZPSGdjtur/MZdffnmqq6sza9asJJ9E1R49emThwoWZNWtWVq5cmSZNmmTXXXdN+/bt6483Vu17p02bliTZY489sscee3ypY5HGemyzuo1hHTeGGZLKH0sDAADrZq2vkb6xadq0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/fbblR6J9ejdd99NktTW1iZJpkyZkuXLlzf4vO+yyy7ZYYcdfN4bkb/c7quMHTs222yzTfr06ZPvfe97+eCDDyoxHgAAwGbDGemNSP/+/XPnnXdm5513zltvvZXhw4fnoIMOyowZM9KqVatKj8cGMH/+/CRJhw4dGtzfoUOH+mU0TkcddVS+8Y1vpHv37pk7d26+//3v5+ijj86kSZPStGnTSo/Hl7Ry5cpccsklOeCAA9KnT58kn3zeq6ur07Zt2waP9XlvPNa03ZPk9NNPT9euXdO5c+dMnz49f/d3f5fZs2fn/vvvr+C0AAAAjZuQ3oisftmHfv36pX///unatWv+7d/+Leecc04FJwO+aqtftqdv377p169fevbsmQkTJuTwww+v4GSsD0OHDs2MGTN878Vm5rO2+3nnnVf/33379k2nTp1y+OGHZ+7cuenZs+eGHhMAAGCz4NIujVjbtm2z00475ZVXXqn0KGwgq66Xu2DBggb3L1iwwLV0NzM9evTINtts4/PfCFx44YV5+OGH87vf/S7bb799/f0dO3bMRx99lEWLFjV4vM974/BZ231N+vfvnyQ+7wAAAF8hIb0RW7JkSebOnZtOnTpVehQ2kO7du6djx44ZP358/X2LFy/O5MmTM3DgwApOxob2xz/+MW+//bbP/yasrq4uF154YR544IE8+eST6d69e4Ple++9d7bYYosGn/fZs2fn9ddf93nfhH3edl+TadOmJYnPOwAAwFfIpV0akSuuuCLHH398unbtmjfffDPDhg1L06ZNc9ppp1V6NNajJUuWNDjrcN68eZk2bVpqa2uzww475JJLLsmIESOy4447pnv37rn22mvTuXPnDB48uHJD86WVtnttbW2GDx+ek046KR07dszcuXNz1VVXpVevXhk0aFAFp+bLGDp0aO655578x3/8R1q1alV/3fM2bdqkefPmadOmTc4555xcdtllqa2tTevWrXPRRRdl4MCBGTBgQIWn54v6vO0+d+7c3HPPPTnmmGOy9dZbZ/r06bn00ktz8MEHp1+/fhWeHgAAoPGqqqurq6v0EKwfp556aiZOnJi333472267bQ488MDccMMNrpfayEyYMCGHHXbYp+7/9re/nTvvvDN1dXUZNmxYbrvttixatCgHHnhgRo8enZ122qkC07K+lLb7LbfcksGDB2fq1KlZtGhROnfunK997Wv54Q9/+KkvnmXTUVVVtcb7f/nLX+ass85KkixdujSXX355xo0bl2XLlmXQoEEZPXq0S7tswj5vu7/xxhs588wzM2PGjLz//vvp0qVLTjzxxFxzzTVp3br1Bp4WAABg8yGkAwAAAABAgWukAwAAAABAgZAOAAAAAAAFQjoAAAAAABQI6QAAAAAAUCCkAwAAAABAgZAOAAAAAAAFQjoAAAAAABQI6QAAAAAAUCCkA2wiXnvttVRVVWXatGmVHuUznXXWWRk8eHClxwAAAABYr4R0gP/vjTfeyNlnn53OnTunuro6Xbt2zcUXX5y333670qMlSbp06ZK33norffr0qfQoAAAAAJsVIR0gyauvvpp99tknc+bMybhx4/LKK69kzJgxGT9+fAYOHJiFCxeu8XkfffTRBpuxadOm6dixY5o1a7bBfubaWrFiRVauXFnpMQAAAAC+EkI6QJKhQ4emuro6//Vf/5VDDjkkO+ywQ44++ug88cQT+dOf/pSrr746SdKtW7f88Ic/zF//9V+ndevWOe+885Ikt99+e7p06ZKtttoqJ554YkaNGpW2bdvWv/7cuXNzwgknpEOHDmnZsmX23XffPPHEEw1m6NatW370ox/l7LPPTqtWrbLDDjvktttuq1++pku7vPTSSznuuOPSunXrtGrVKgcddFDmzp27Vut8xx13pHfv3qmpqUmnTp1y4YUX1i8bNWpU+vbtmxYtWqRLly654IILsmTJkvrld955Z9q2bZvf/OY32W233VJTU5PXX3+9fvnw4cOz7bbbpnXr1hkyZEiDP3BYtmxZvvvd76Z9+/bZcsstc+CBB+a5556rXz5hwoRUVVVl/Pjx2WeffbLVVltl//33z+zZs9dqvQAAAADWNyEd2OwtXLgwv/3tb3PBBRekefPmDZZ17NgxZ5xxRn71q1+lrq4uSfLTn/40u+++e6ZOnZprr702Tz/9dIYMGZKLL74406ZNy5FHHpkbbrihwessWbIkxxxzTMaPH5+pU6fmqKOOyvHHH98gPifJyJEjs88++2Tq1Km54IILcv75539mQP7Tn/6Ugw8+ODU1NXnyySczZcqUnH322fn4448/d51vueWWDB06NOedd17+53/+J7/5zW/Sq1ev+uVNmjTJTTfdlJdeeil33XVXnnzyyVx11VUNXuODDz7Ij3/84/zzP/9zXnrppbRv3z5JMn78+MyaNSsTJkzIuHHjcv/992f48OH1z7vqqqty33335a677soLL7yQXr16ZdCgQZ866//qq6/OyJEj8/zzz6dZs2Y5++yzP3e9AAAAAL4KVXWryhDAZmry5MkZMGBAHnjggTV+UeY//MM/5LLLLsuCBQuy3377Zc8998wDDzxQv/zUU0/NkiVL8vDDD9ffd+aZZ+bhhx/OokWLPvPn9unTJ0OGDKk/E7xbt2456KCDcvfddydJ6urq0rFjxwwfPjxDhgzJa6+9lu7du2fq1KnZY4898v3vfz/33ntvZs+enS222GKd1nm77bbLd77znYwYMWKtHv/v//7vGTJkSP7v//4vySdnpH/nO9/JtGnTsvvuu9c/7qyzzspDDz2UN954I1tttVWSZMyYMbnyyivz7rvv5sMPP0y7du1y55135vTTT0+SLF++PN26dcsll1ySK6+8MhMmTMhhhx2WJ554IocffniS5JFHHsmxxx6bDz/8MFtuueU6rSsAAADAl+WMdID/b23/XHGfffZpcHv27NnZb7/9Gtz3l7eXLFmSK664Irvuumvatm2bli1bZtasWZ86I71fv371/11VVZWOHTvmz3/+8xrnmDZtWg466KB1juh//vOf8+abb9ZH6jVZFbG32267tGrVKt/61rfy9ttv54MPPqh/THV1dYN5V9l9993rI3qSDBw4MEuWLMkbb7yRuXPnZvny5TnggAPql2+xxRbZb7/9MmvWrAavs/prd+rUqX52AAAAgA1NSAc2e7169UpVVdWnQu4qs2bNSrt27bLtttsmSVq0aLHOP+OKK67IAw88kB/96Ed56qmnMm3atPTt2/dTX1b6l1G8qqrqM7/E8y8vQ7O2Pu95r732Wo477rj069cv9913X6ZMmZKbb745ScMvV23evHmqqqq+0AxrY/X3YtXP8YWmAAAAQCUI6cBmb+utt86RRx6Z0aNH58MPP2ywbP78+Rk7dmxOOeWUz4zGO++8c4Mvy0zyqdtPP/10zjrrrJx44onp27dvOnbsmNdee+1Lzd2vX7889dRTWb58+To9r1WrVunWrVvGjx+/xuVTpkzJypUrM3LkyAwYMCA77bRT3nzzzbV+/RdffLHB+/jss8+mZcuW6dKlS3r27Jnq6uo8/fTT9cuXL1+e5557Lrvttts6rQcAAADAhiKkAyT5p3/6pyxbtiyDBg3KxIkT88Ybb+Sxxx7LkUceme222+5TXx66uosuuiiPPPJIRo0alTlz5uTWW2/No48+2iC877jjjrn//vszbdq0vPjiizn99NO/9NnVF154YRYvXpxTTz01zz//fObMmZO77777M7+cdHXXX399Ro4cmZtuuilz5szJCy+8kJ///OdJPjlDf/ny5fn5z3+eV199NXfffXfGjBmz1nN99NFHOeecczJz5sw88sgjGTZsWC688MI0adIkLVq0yPnnn58rr7wyjz32WGbOnJlzzz03H3zwQc4555wv/F4AAAAAfJWEdIB8Erqff/759OjRI9/85jfTs2fPnHfeeTnssMMyadKk1NbWfuZzDzjggIwZMyajRo3K7rvvnsceeyyXXnppgy/FHDVqVNq1a5f9998/xx9/fAYNGpS99trrS8289dZb58knn8ySJUtyyCGHZO+9987tt9++VtdM//a3v52f/exnGT16dHr37p3jjjsuc+bMSfLJNc5HjRqVH//4x+nTp0/Gjh2bG2+8ca3nOvzww7Pjjjvm4IMPzimnnJKvf/3ruf766+uX//3f/31OOumkfOtb38pee+2VV155Jb/97W/Trl27dX4PAAAAADaEqrq1/XY9ANbaueeem//93//NU089VelRAAAAAPiSmlV6AIDG4Kc//WmOPPLItGjRIo8++mjuuuuujB49utJjAQAAALAeOCMdYD345je/mQkTJuS9995Ljx49ctFFF2XIkCEVm6dly5afuezRRx/NQQcdtAGnAQAAANi0CekAjdArr7zymcu22267NG/efANOAwAAALBpE9IBAAAAAKCgSaUHAAAAAACAjZmQDgAAAAAABUI6AAAAAAAUCOkAAAAAAFAgpAMAAAAAQIGQDgAAAAAABUI6AAAAAAAU/D+mlB5z2JzOYQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Выбираем столбцы для анализа\n", "columns_to_check = ['Hardness', 'Solids', 'Organic_carbon']\n", "\n", "# Функция для подсчета выбросов\n", "def count_outliers(df, columns):\n", " outliers_count = {}\n", " for col in columns:\n", " Q1 = df[col].quantile(0.25)\n", " Q3 = df[col].quantile(0.75)\n", " IQR = Q3 - Q1\n", " lower_bound = Q1 - 1.5 * IQR\n", " upper_bound = Q3 + 1.5 * IQR\n", " \n", " # Считаем количество выбросов\n", " outliers = df[(df[col] < lower_bound) | (df[col] > upper_bound)]\n", " outliers_count[col] = len(outliers)\n", " \n", " return outliers_count\n", "\n", "# Подсчитываем выбросы\n", "outliers_count = count_outliers(df, columns_to_check)\n", "\n", "# Выводим количество выбросов для каждого столбца\n", "for col, count in outliers_count.items():\n", " print(f\"Количество выбросов в столбце '{col}': {count}\")\n", "\n", "# Создаем диаграммы размахов\n", "plt.figure(figsize=(15, 10))\n", "for i, col in enumerate(columns_to_check, 1):\n", " plt.subplot(2, 2, i)\n", " sns.boxplot(x=df[col])\n", " plt.title(f'Box Plot of {col}')\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В каждом из выбранных столбцов присутствуют выбросы. Очистим их." ] }, { "cell_type": "code", "execution_count": 541, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Количество удаленных строк: 145\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABdIAAAJOCAYAAACz9fURAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABtf0lEQVR4nO3dd5gV5fk/4GcpS69Kl67SBAuWIAoqKqAitmCIUewarIkaNUSxG7sGazQCMcbeYy8oithFUREREY0FDAg2EGTf3x/+9nw97DIsCOwu3vd1cemZec+c953ZOc/M58yZU5BSSgEAAAAAAJSqSnl3AAAAAAAAKjJBOgAAAAAAZBCkAwAAAABABkE6AAAAAABkEKQDAAAAAEAGQToAAAAAAGQQpAMAAAAAQAZBOgAAAAAAZBCkAwAAAABABkE6lcKHH34YBQUFMWbMmPLuSp5HHnkkNtlkk6hZs2YUFBTEvHnzyrtLy/X0009HQUFBPP300+XdlZ/lpZdeisLCwpg5c+ZKPX9tWQ/FDjzwwGjXrl3u8Zw5c6JOnTrx0EMPlV+nAFaSul/SdtttF9ttt13u8Yqso6VrxM/18ccfR82aNWPChAkr9fyKun1X1hlnnBEFBQW5x4sXL47WrVvH1VdfXY69AtYmFfV9szKeD/9cq7qmrmnFNet///tfeXclj2OLfI4tKi5B+i/MmDFjoqCgIO9f06ZNY/vtt4+HH354jfenOMws/le9evXo0KFDHHDAAfHBBx+sktd4/vnn44wzzljlRX3OnDkxZMiQqFWrVlx11VVx0003RZ06dUptW7zeX3nllVLnb7fddrHRRhut0v6t7UaMGBFDhw6Ntm3blph3zz33xMCBA2PdddeNwsLCaNmyZQwZMiSeeuqpcuhp+VhnnXXi0EMPjdNOO628uwKUI3V/1VmRuh8RMXny5Nhnn32ibdu2UbNmzWjVqlXstNNOMWrUqFXar/Jw1llnxVZbbRW9e/cuMe/pp5+OvfbaK5o3bx6FhYXRtGnTGDRoUNx9993l0NPyUb169fjjH/8Y5557bixcuLC8uwP8hLq46qxoXYyIePvtt+N3v/tdtGrVKmrUqBEtW7aM/fbbL95+++1V2jcqH8cW2RxbVBzVyrsDlI+zzjor2rdvHymlmDVrVowZMyZ22WWXeOCBB2K33XZb4/059thjY4sttojFixfHa6+9Fn//+9/jwQcfjMmTJ0fLli1/1rKff/75OPPMM+PAAw+Mhg0brpoOR8TLL78cX3/9dZx99tmx4447rrLlsnyTJk2KJ554Ip5//vm86SmlOPjgg2PMmDGx6aabxh//+Mdo3rx5fPbZZ3HPPfdEv379YsKECbH11luXU8/XrCOPPDL+9re/xVNPPRU77LBDeXcHKEfq/s+3InX/+eefj+233z7atGkThx12WDRv3jw+/vjjeOGFF+KKK66IY4455mf3p23btrFgwYKoXr36z17Wivjiiy9i7NixMXbs2BLzRo4cGWeddVZssMEGccQRR0Tbtm1jzpw58dBDD8Xee+8dN998c/z2t79do/0tLwcddFCccsop8e9//zsOPvjg8u4OsBR18edb0fPhu+++O4YOHRqNGzeOQw45JNq3bx8ffvhh/OMf/4g777wzbr311thzzz1XWf9Wl+uvvz6KiorKuxtrFccWZePYomIQpP9CDRw4MDbffPPc40MOOSSaNWsWt9xyS7kcOGy77baxzz77RMSPbw4bbrhhHHvssTF27Ng49dRT13h/ymL27NkREav0YGRVSCnFwoULo1atWuXdldVm9OjR0aZNm/jVr36VN/2SSy6JMWPGxPHHHx+XXnpp3lehRowYETfddFNUq/bLedvr0qVLbLTRRjFmzBhBOvzCqfs/34rU/XPPPTcaNGgQL7/8con2xcv5uQoKCqJmzZqrZFkr4l//+ldUq1YtBg0alDf9zjvvjLPOOiv22Wef+Pe//50X8J900knx6KOPxuLFi9d0d8tNw4YNY+edd44xY8Y42YUKSF38+VakLk6fPj3233//6NChQ4wfPz6aNGmSm3fcccfFtttuG/vvv3+8+eab0aFDh2Uu59tvv13uVe+r25r+AHtVqQjrblkcW5SNY4uKwa1diIgfd8hatWqVCBm//fbbOOGEE6J169ZRo0aN6NSpU1x88cWRUoqIiAULFkTnzp2jc+fOsWDBgtzz5s6dGy1atIitt946lixZssL9KQ79ZsyYkdnuqaeeim233Tbq1KkTDRs2jMGDB8eUKVNy888444w46aSTIiKiffv2ua/Mffjhh5nLveOOO6Jnz55Rq1atWHfddeN3v/tdfPLJJ7n52223XQwbNiwiIrbYYosoKCiIAw88cIXHmWX06NGxww47RNOmTaNGjRrRtWvXuOaaa0q0a9euXey2227x6KOPxuabbx61atWK6667LiIi/vvf/8Yee+wRderUiaZNm8Yf/vCH+P7770sso/jWMu+8805sv/32Ubt27WjVqlVceOGFJdp+//33MXLkyFh//fWjRo0a0bp16/jTn/5UYrmPP/54bLPNNtGwYcOoW7dudOrUKf785z/ntRk1alR069YtateuHY0aNYrNN988/v3vfy933dx7772xww475AXlCxYsiPPPPz86d+4cF198cd68Yvvvv39sueWWmct+8cUXY8CAAdGgQYOoXbt29O3bt8R92mbOnBnDhw+PTp06Ra1atWKdddaJX//61yX+roq/OjphwoT44x//GE2aNIk6derEnnvuGV988UWJ13744Ydzf8/16tWLXXfdtdSvOd57772x0UYbRc2aNWOjjTaKe+65Z5nj2WmnneKBBx7I7bMAEer+0lZ13Z8+fXp069at1HChadOmeY9/+OGHOPvss6Njx45Ro0aNaNeuXfz5z38utV7/1LLuBVrWGnHrrbdGz549o169elG/fv3o3r17XHHFFZmvWbz8rbbaKurWrZs3/bTTTovGjRvHjTfeWGrI0L9//+WGU++++27ss88+0bhx46hZs2Zsvvnmcf/99+e1mTt3bpx44onRvXv3qFu3btSvXz8GDhwYb7zxRl674tsl3H777XHuuefGeuutFzVr1ox+/frF+++/X+K1y1L/IyKee+652GKLLaJmzZrRsWPH3DFXaXbaaad47rnnYu7cuZnjBsqfuphvVdfFiy66KL777rv4+9//nheiR0Ssu+66cd1118W3336bd/5ZfI/od955J377299Go0aNYptttomIiKKiojjjjDOiZcuWUbt27dh+++3jnXfeiXbt2uX1Y3XUjNLukV5UVBRXXHFFdO/ePWrWrBlNmjSJAQMGLPPWrsvy7rvvxpAhQ6JJkyZRq1at6NSpU4wYMSI3f0XPQ5955pkYPnx4NG3aNNZbb728Nv/73/9iyJAhUb9+/VhnnXXiuOOOK3HLkLIeoxRnEs8991xsueWWUbNmzejQoUP885//LNO4HVs4tqhMfjmXZpJn/vz58b///S9SSjF79uwYNWpUfPPNN/G73/0u1yalFLvvvnuMGzcuDjnkkNhkk03i0UcfjZNOOik++eSTuOyyy6JWrVoxduzY6N27d4wYMSIuvfTSiIg46qijYv78+TFmzJioWrXqCvdv+vTpEfHjfZ6X5YknnoiBAwdGhw4d4owzzogFCxbEqFGjonfv3vHaa69Fu3btYq+99or33nsvbrnllrjsssti3XXXjYgoUbx/asyYMXHQQQfFFltsEeeff37MmjUrrrjiipgwYUK8/vrr0bBhwxgxYkR06tQp/v73v+e+FtixY8fljqt4vS+ttE9Rr7nmmujWrVvsvvvuUa1atXjggQdi+PDhUVRUFEcddVRe26lTp8bQoUPjiCOOiMMOOyw6deoUCxYsiH79+sVHH30Uxx57bLRs2TJuuummZd4n/Msvv4wBAwbEXnvtFUOGDIk777wzTj755OjevXsMHDgwIn48QNh9993jueeei8MPPzy6dOkSkydPjssuuyzee++9uPfeeyPix3vf7bbbbtGjR48466yzokaNGvH+++/nFY3rr78+jj322Nhnn31yRfvNN9+MF198MfOrWZ988kl89NFHsdlmm+VNLy4mxx9//Er9zUX8eCA6cODA6NmzZ4wcOTKqVKmS+0Dj2WefzYXwL7/8cjz//PPxm9/8JtZbb7348MMP45prrontttsu3nnnnahdu3beco855pho1KhRjBw5Mj788MO4/PLL4+ijj47bbrst1+amm26KYcOGRf/+/eOCCy6I7777Lq655prYZptt4vXXX88drD322GOx9957R9euXeP888+POXPmxEEHHVTiwKhYz54947LLLou3337bffjhF0zdX7N1v23btjFx4sR46623lvvee+ihh8bYsWNjn332iRNOOCFefPHFOP/882PKlCmZH5SWpqw14vHHH4+hQ4dGv3794oILLoiIiClTpsSECRPiuOOOW+byFy9eHC+//HL8/ve/z5s+bdq0ePfdd+Pggw+OevXqrVCfi7399tvRu3fvaNWqVZxyyilRp06duP3222OPPfaIu+66K/d1/w8++CDuvffe+PWvfx3t27ePWbNmxXXXXRd9+/aNd955p8QtEP76179GlSpV4sQTT4z58+fHhRdeGPvtt1+8+OKLuTZlrf+TJ0+OnXfeOZo0aRJnnHFG/PDDDzFy5Mho1qxZqWPq2bNnpJTi+eefL5crXIFlUxfXbF184IEHol27drHtttuWOr9Pnz7Rrl27ePDBB0vM+/Wvfx0bbLBBnHfeebkPME499dS48MILY9CgQdG/f/944403on///iWC4NVRM0pzyCGHxJgxY2LgwIFx6KGHxg8//BDPPvtsvPDCC3nffMjy5ptvxrbbbhvVq1ePww8/PNq1axfTp0+PBx54IM4999yIWPHz0OHDh0eTJk3i9NNPj2+//TZv3pAhQ6Jdu3Zx/vnnxwsvvBB/+9vf4ssvv8wLv1fkGOX999+PffbZJw455JAYNmxY3HjjjXHggQdGz549o1u3bssct2MLxxaVTuIXZfTo0SkiSvyrUaNGGjNmTF7be++9N0VEOuecc/Km77PPPqmgoCC9//77uWmnnnpqqlKlSho/fny64447UkSkyy+/fLn9GTduXIqIdOONN6Yvvvgiffrpp+nBBx9M7dq1SwUFBenll19OKaU0Y8aMFBFp9OjRuedusskmqWnTpmnOnDm5aW+88UaqUqVKOuCAA3LTLrroohQRacaMGcvtz6JFi1LTpk3TRhttlBYsWJCb/p///CdFRDr99NNz04rXZXEfsyxrvf/0X7du3fKe891335VYTv/+/VOHDh3yprVt2zZFRHrkkUfypl9++eUpItLtt9+em/btt9+m9ddfP0VEGjduXG563759U0Skf/7zn7lp33//fWrevHnae++9c9NuuummVKVKlfTss8/mvda1116bIiJNmDAhpZTSZZddliIiffHFF8tcJ4MHDy4x5rJ44oknUkSkBx54IG/6FVdckSIi3XPPPWVaTvHfXvF6KCoqShtssEHq379/KioqyrX77rvvUvv27dNOO+2UN21pEydOLLEOi7f7jjvumLfMP/zhD6lq1app3rx5KaWUvv7669SwYcN02GGH5S3z888/Tw0aNMibvskmm6QWLVrknptSSo899liKiNS2bdsS/Xr++edTRKTbbrutTOsFWLuo+9lWV91/7LHHUtWqVVPVqlVTr1690p/+9Kf06KOPpkWLFuW1mzRpUoqIdOihh+ZNP/HEE1NEpKeeeio3rW/fvqlv3765x8taR2WpEccdd1yqX79++uGHH5Y7lp96//33U0SkUaNG5U2/7777UkSkyy67rEzLKa3v/fr1S927d08LFy7MTSsqKkpbb7112mCDDXLTFi5cmJYsWVJieTVq1EhnnXVWblrx31qXLl3S999/n5tefLwwefLk3GuUtf7vscceqWbNmmnmzJm5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3LlzRPx4j7E99tijzOP+6dgifvwhnE022aTUNsU/fnLMMcfE6NGj4/jjj49evXpFgwYNoqCgIH7zm9+UegX+8tZt8XNuuummaN68eYl2WQfRy1O8norvhwgQoe6vSYWFhbHFFlvEFltsERtuuGEcdNBBcccdd+RdubamT4aaNm0akyZNikcffTQefvjhePjhh2P06NFxwAEHxNixY5f5vLLU4JVRXAdPPPHEZV6BVXwif95558Vpp50WBx98cJx99tnRuHHjqFKlShx//PE/qwYvr/4v78dfS6MGQ+WhLq4+DRo0iBYtWuRdoFWaN998M1q1apULUIv9nHPdVV0zytuKnoeuyLpb1rFIWY9RVnbdObZYMY4typ8gnZwffvghIiK++eabiPjxh7KeeOKJ+Prrr/M+FX733Xdz84u9+eabcdZZZ8VBBx0UkyZNikMPPTQmT56cd9X0qlT82lOnTi0x7913341111039+n7ipyc/nS5S18dPHXq1Lwxr04PPPBAfP/993H//ffnfdpZfIuPsmjbtm289dZbkVLKWwelrbOy6tixY7zxxhvRr1+/5a7XKlWqRL9+/aJfv35x6aWXxnnnnRcjRoyIcePG5Q4S69SpE/vuu2/su+++sWjRothrr73i3HPPjVNPPTXvq4Q/VVxQl/4F+2222SYaNWoUt9xyS/z5z39e4R/1Kf5xnPr16y/3IPbOO++MYcOGxSWXXJKbtnDhwpg3b94KvebSr920adPM1y7++yv+hPunlrVdi9dT8ZUzAMXU/TVf94uvfvzss89yr19UVBTTpk3Le5+eNWtWzJs3b4Vef0VrRGFhYQwaNCgGDRoURUVFMXz48LjuuuvitNNOK3H1WbE2bdpErVq1StTgDTfcMDp16hT33XdfXHHFFbkPnsuqQ4cOERFRvXr1MtXg7bffPv7xj3/kTZ83b95KnVSWtf43adIkatWqpQbDWkxdXH11cbfddovrr78+nnvuudhmm21KzH/22Wfjww8/jCOOOKLMfXz//ffzPqyYM2dOiTB2VdeM0nTs2DEeffTRmDt37kpflV5cB996663MdqvyPHTpD3vef//9KCoqinbt2kXEqj1GyeLYwrFFZeMe6UTEj/fXeuyxx6KwsDC3Q+6yyy6xZMmSuPLKK/PaXnbZZVFQUBADBw7MPffAAw+Mli1bxhVXXBFjxoyJWbNmxR/+8IfV1t8WLVrEJptsEmPHjs0rGm+99VY89thjscsuu+SmFR9AlKW4bL755tG0adO49tpr8z4dfPjhh2PKlCmx6667rrIxZCkOgZf+qtbo0aPLvIxddtklPv3007jzzjtz07777rv4+9//vtL9GjJkSHzyySdx/fXXl5i3YMGC3C+Bz507t8T84k9ii9dr8b3QihUWFkbXrl0jpRSLFy9eZh9atWoVrVu3jldeeSVveu3atePkk0+OKVOmxMknn1zqJ9//+te/4qWXXip1uT179oyOHTvGxRdfnDt4/qkvvvgi9/9Vq1YtsfxRo0blfQVsRfTv3z/q168f5513XqljL37tn/7d//Sre48//ni88847pS771VdfjQYNGqzUVTXA2kvd/9Hqqvvjxo0rtQ4Vf0W3+Cvzxf2+/PLL89oVf/NrRV5/RWrE0jW4SpUqud9rybo6qnr16rH55puXqMEREWeeeWbMmTMnDj300FwY9VOPPfZY/Oc//yl1uU2bNo3tttsurrvuutyHDD+1vBp8xx135O5zuqLKWv+rVq0a/fv3j3vvvTc++uij3PwpU6bkrkJd2quvvhoFBQXRq1evleobsOaoiz9aXXXxpJNOilq1asURRxxRogbNnTs3jjzyyKhdu3acdNJJy11Wv379olq1anHNNdfkTV96O0Ws+ppRmr333jtSSqV+q7qsV7I3adIk+vTpEzfeeGNejVl6GavyPPSqq64qsZyIyP1dr8pjlCyOLRxbVDauSP+Fevjhh3OfpM+ePTv+/e9/x7Rp0+KUU07JfZVq0KBBsf3228eIESPiww8/jI033jgee+yxuO++++L444/Pfcp2zjnnxKRJk+LJJ5+MevXqRY8ePeL000+Pv/zlL7HPPvvkFfFV6aKLLoqBAwdGr1694pBDDokFCxbEqFGjokGDBnHGGWfk2vXs2TMiIkaMGBG/+c1vonr16jFo0KBS7xdXvXr1uOCCC+Kggw6Kvn37xtChQ2PWrFlxxRVXRLt27VbrwdBP7bzzzrkrxY444oj45ptv4vrrr4+mTZuWWgRKc9hhh8WVV14ZBxxwQLz66qvRokWLuOmmm6J27dor3a/9998/br/99jjyyCNj3Lhx0bt371iyZEm8++67cfvtt8ejjz4am2++eZx11lkxfvz42HXXXaNt27Yxe/bsuPrqq2O99dbLXYGw8847R/PmzaN3797RrFmzmDJlSlx55ZWx6667LvcHRQYPHhz33HNPiavtTzrppHj77bfjkksuiXHjxsU+++wTzZs3j88//zzuvffeeOmll+L5558vdZlVqlSJG264IQYOHBjdunWLgw46KFq1ahWffPJJjBs3LurXrx8PPPBARPx4RcVNN90UDRo0iK5du8bEiRPjiSeeKPX+aWVRv379uOaaa2L//fePzTbbLH7zm99EkyZN4qOPPooHH3wwevfunTswPP/882PXXXeNbbbZJg4++OCYO3dujBo1Krp161ZqkX788cdj0KBB7qEGv3Dq/pqt+8ccc0x89913seeee0bnzp1j0aJF8fzzz8dtt90W7dq1i4MOOigiIjbeeOMYNmxY/P3vf4958+ZF375946WXXoqxY8fGHnvsEdtvv/0KvW5Za8Shhx4ac+fOjR122CHWW2+9mDlzZowaNSo22WST5V7hNHjw4BgxYkR89dVXeV+/33fffWPy5Mlx7rnnxuuvvx5Dhw6Ntm3bxpw5c+KRRx6JJ598Mv79738vc7lXXXVVbLPNNtG9e/c47LDDokOHDjFr1qyYOHFi/Pe//4033ngjIn6swcVXfW699dYxefLkuPnmm3NXnq2oFan/Z555ZjzyyCOx7bbbxvDhw+OHH37Ird/Sblnw+OOPR+/evVf6+ABYfdTFNVsXN9hggxg7dmzst99+0b179zjkkEOiffv28eGHH8Y//vGP+N///he33HJLbp1madasWRx33HFxySWXxO677x4DBgyIN954Ix5++OFYd9118857VnXNKM32228f+++/f/ztb3+LadOmxYABA6KoqCieffbZ2H777ePoo48u03L+9re/xTbbbBObbbZZHH744bn18+CDD8akSZNy41lV56EzZszIrb+JEyfGv/71r/jtb38bG2+8cUSs+mOULI4tHFtUKolflNGjR6eIyPtXs2bNtMkmm6RrrrkmFRUV5bX/+uuv0x/+8IfUsmXLVL169bTBBhukiy66KNfu1VdfTdWqVUvHHHNM3vN++OGHtMUWW6SWLVumL7/8cpn9GTduXIqIdMcdd2T2e8aMGSki0ujRo/OmP/HEE6l3796pVq1aqX79+mnQoEHpnXfeKfH8s88+O7Vq1SpVqVIlRUSaMWNG5uvddtttadNNN001atRIjRs3Tvvtt1/673//m9emeF2+/PLLmcsqS9u+ffumbt265U27//77U48ePVLNmjVTu3bt0gUXXJBuvPHGEv1v27Zt2nXXXUtd7syZM9Puu++eateundZdd9103HHHpUceeSRFRBo3blzm66eU0rBhw1Lbtm3zpi1atChdcMEFqVu3bqlGjRqpUaNGqWfPnunMM89M8+fPTyml9OSTT6bBgwenli1bpsLCwtSyZcs0dOjQ9N577+WWc91116U+ffqkddZZJ9WoUSN17NgxnXTSSbllZHnttddSRKRnn3221Pl33nln2nnnnVPjxo1TtWrVUosWLdK+++6bnn766Vyb4r+9n66HlFJ6/fXX01577ZXrV9u2bdOQIUPSk08+mWvz5ZdfpoMOOiitu+66qW7duql///7p3XffTW3btk3Dhg3LtVvWdl/Wa48bNy71798/NWjQINWsWTN17NgxHXjggemVV17Ja3fXXXelLl26pBo1aqSuXbumu+++u9RtNWXKlBQR6YknnljOGgXWVup++dT9hx9+OB188MGpc+fOqW7duqmwsDCtv/766ZhjjkmzZs3Ka7t48eJ05plnpvbt26fq1aun1q1bp1NPPTUtXLgwr13fvn1T3759l7uOylIjiutk06ZNU2FhYWrTpk064ogj0meffbbcsc2aNStVq1Yt3XTTTaXOLz4GaNq0aapWrVpq0qRJGjRoULrvvvuW2/fp06enAw44IDVv3jxVr149tWrVKu22227pzjvvzLVZuHBhOuGEE1KLFi1SrVq1Uu/evdPEiRNLrJ9l/a0t67XLUv9TSumZZ55JPXv2TIWFhalDhw7p2muvTSNHjkxLn1bNmzcvFRYWphtuuGF5qxRYg9TF8qmLxd588800dOjQ1KJFi1S9evXUvHnzNHTo0DR58uQSbYvfW7/44osS83744Yd02mmnpebNm6datWqlHXbYIU2ZMiWts8466cgjj8y1Wx01o7Tzrh9++CFddNFFqXPnzqmwsDA1adIkDRw4ML366qtlXjcppfTWW2+lPffcMzVs2DDVrFkzderUKZ122mm5+T/3PDSl/1uv77zzTtpnn31SvXr1UqNGjdLRRx+dFixYkNe2rMcoy8okll7Py+LYwrFFZVKQUgX51QSAFdCvX79o2bJl3HTTTeXdlQrr+OOPj/Hjx+e+/gUAq8IhhxwS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QToAAAAAAGQQpAMAAAAAQAZBOgAAAAAAZBCkAwAAAABABkE6AAAAAABkEKQDAAAAAEAGQToAAAAAAGQQpAMAAAAAQAZBOgAAAAAAZBCkAwAAAABABkE6AAAAAABkqFbeHSi2ZMmSePPNN2Pu3LnRuHHj6NChQ1xwwQUxY8aMqF69ekREFBUVlXMvAfglW7JkSbzzzjsREfHXv/41qlatGo0bN45Zs2ZFSinWW2+9OPXUU6Nu3brl3FMAYGnF55OXXHJJfP7551G9evX41a9+FUcddVTUqlWrnHu3ZhSfd//vf/+LefPmxcKFCyPCuTYAFd/UqVPj448/jsaNG0ePHj2iatWqa7wPFSJIHz9+fFx99dXx+eefZ7Y76qijYuTIkdGnT5811DMA+NH48ePjggsuiG+//TYiIj744IMSbWbOnBm77bZbdO7cOa699to13UUAYBnGjx8fZ599dkT8eCJe7D//+U/85z//id69e8e5555bXt1bI7LOu0eMGBHHHXecc20AKpzXXnstIn78ILxY8+bNY/jw4Wu8bpX7rV3Gjx8fI0eOjA4dOsRVV10VG264Yd78PffcM7bYYouI+PHT89NPPz3Gjx9fHl0F4Bdq/Pjxcfrpp+dC9OV5991348gjj1zNvQIAyqK4ji9evDg3rXfv3tG0adPc4wkTJsSIESPKo3trRPF5d4MGDaKgoCC22mqrOPHEE6Nbt24REVG3bt0YOXKkc20AKpTx48fHddddFxERp5xySjz00ENx1VVXRYcOHcqlbpVrkL5kyZK4+uqro1evXnHOOedE27Zt47333ouIiC233DJ69eoVL7zwQhxyyCF5z7vyyitjyZIl5dFlAH5hlixZElddddUy52+55ZZRpcqP5bSgoCD39bJ33303vvnmmzXSRwCgdEuWLIkrr7wyb9qVV14Z5557btx6662x1VZb5aZPmDAhFixYsKa7uNoVn3f/6le/ivnz50evXr3i/PPPj9122y2OOeaYiIj45ptv4le/+lVcc801zrUBqBCK61f37t0jIqJDhw5Ru3bt6NatW5xzzjnRq1evNV63ynxrl++//z6+//773OOvvvrqZ7/4m2++GZ9//nmcdtppUaVKlTj//PNz84YNGxYRP97OZdq0aRER0a1bt3j77bdj9uzZ8dBDD0WnTp1+dh9gWWbOnFneXaCMbCtW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ZBCkAwAAAABABkE6AAAAAABkEKQDAAAAAEAGQToAAAAAAGQQpAMAAAAAQAZBOgAAAAAAZBCkAwAAAABABkE6AAAAAABkEKQDAAAAAEAGQToAAAAAAGQQpAMAAAAAQAZBOgAAAAAAZBCkAwAAAABAhmor+8SUUkREfPXVV6usMwDA/ymuscU19+dSuwFg9VK7AaByWZHavdJB+tdffx0REa1bt17ZRQAAZfD1119HgwYNVslyItRuAFjd1G4AqFzKUrsL0kp+VF5UVBSffvpp1KtXLwoKClaqg2X11VdfRevWrePjjz+O+vXrr9bXWtOMrfJZW8cVYWyV0do6rghji/jxE/Gvv/46WrZsGVWq/Py7sa2q2r02b5vKxHYof7ZBxWA7lD/b4P9UlNr9S9smxrt2M961m/Gu3SrDeFekdq/0FelVqlSJ9dZbb2WfvlLq169fYVf6z2Vslc/aOq4IY6uM1tZxRRjbqriardiqrt1r87apTGyH8mcbVAy2Q/mzDX5UkWr3L22bGO/azXjXbsa7dqvo4y1r7fZjowAAAAAAkEGQDgAAAAAAGSpFkF6jRo0YOXJk1KhRo7y7ssoZW+Wzto4rwtgqo7V1XBHGVpFV9v6vLWyH8mcbVAy2Q/mzDSqeX9o2Md61m/Gu3Yx37ba2jXelf2wUAAAAAAB+CSrFFekAAAAAAFBeBOkAAAAAAJBBkA4AAAAAABnKNUgfP358DBo0KFq2bBkFBQVx77335uYtXrw4Tj755OjevXvUqVMnWrZsGQcccEB8+umnecuYO3du7LffflG/fv1o2LBhHHLIIfHNN9+s4ZGUlDW2pR155JFRUFAQl19+ed70iji2soxrypQpsfvuu0eDBg2iTp06scUWW8RHH32Um79w4cI46qijYp111om6devG3nvvHbNmzVqDoyjd8sb2zTffxNFHHx3rrbde1KpVK7p27RrXXnttXpuKOLbzzz8/tthii6hXr140bdo09thjj5g6dWpem7L0+6OPPopdd901ateuHU2bNo2TTjopfvjhhzU5lBKWN7a5c+fGMcccE506dYpatWpFmzZt4thjj4358+fnLaeija0s26xYSikGDhxY6t9sRRtXRNnHNnHixNhhhx2iTp06Ub9+/ejTp08sWLAgN7+ivT+WZVyff/557L///tG8efOoU6dObLbZZnHXXXfltalo41qWq666Ktq1axc1a9aMrbbaKl566aXy7lKlsLw6k1KK008/PVq0aBG1atWKHXfcMaZNm5bXpix/I2+++WZsu+22UbNmzWjdunVceOGFJfpyxx13ROfOnaNmzZrRvXv3eOihh1b5eCuiNVkTn3766dhss82iRo0asf7668eYMWNK9OeXui9dc8010aNHj6hfv37Ur18/evXqFQ8//HBuvm2w5v31r3+NgoKCOP7443PTbIeK64wzzoiCgoK8f507d858TmV+32/Xrl2J8RYUFMRRRx1VavsxY8aUaFuzZs013OuyWxXHB6WpqPvVqsiBlrYy+8Sasrzte+CBB5bo+4ABA5a73Mq4fSOi1H25oKAgLrroomUus6Ju31V1XLm0ld3nV7dVlb8sbWX3gXKTytFDDz2URowYke6+++4UEemee+7JzZs3b17acccd02233ZbefffdNHHixLTlllumnj175i1jwIABaeONN04vvPBCevbZZ9P666+fhg4duoZHUlLW2H7q7rvvThtvvHFq2bJluuyyy/LmVcSxLW9c77//fmrcuHE66aST0muvvZbef//9dN9996VZs2bl2hx55JGpdevW6cknn0yvvPJK+tWvfpW23nrrNTySkpY3tsMOOyx17NgxjRs3Ls2YMSNdd911qWrVqum+++7LtamIY+vfv38aPXp0euutt9KkSZPSLrvsktq0aZO++eabXJvl9fuHH35IG220Udpxxx3T66+/nh566KG07rrrplNPPbU8hpSzvLFNnjw57bXXXun+++9P77//fnryySfTBhtskPbee+/cMiri2MqyzYpdeumlaeDAgSX+ZiviuFIq29ief/75VL9+/XT++eent956K7377rvptttuSwsXLsy1qWjvj2UZ10477ZS22GKL9OKLL6bp06ens88+O1WpUiW99tpruTYVbVylufXWW1NhYWG68cYb09tvv50OO+yw1LBhw7z3eUq3vDrz17/+NTVo0CDde++96Y033ki77757at++fVqwYEGuzfL+RubPn5+aNWuW9ttvv/TWW2+lW265JdWqVStdd911uTYTJkxIVatWTRdeeGF655130l/+8pdUvXr1NHny5NW+DsrbmqqJH3zwQapdu3b64x//mN555500atSoVLVq1fTII4/k2vyS96X7778/Pfjgg+m9995LU6dOTX/+859T9erV01tvvZVSsg3WtJdeeim1a9cu9ejRIx133HG56bZDxTVy5MjUrVu39Nlnn+X+ffHFF8tsX9nf92fPnp031scffzxFRBo3blyp7UePHp3q16+f95zPP/98zXZ6BayK44OlVeT9alXkQEtb0X1iTVre9h02bFgaMGBAXt/nzp2buczKun1TSnnj/Oyzz9KNN96YCgoK0vTp05e5zIq6fVfFcWVpVmafXxNWRf5SmpXZB8pTuQbpP5UVNhd76aWXUkSkmTNnppRSeuedd1JEpJdffjnX5uGHH04FBQXpk08+WZ3dXSHLGtt///vf1KpVq/TWW2+ltm3b5gXplWFspY1r3333Tb/73e+W+Zx58+al6tWrpzvuuCM3bcqUKSki0sSJE1dXV1dYaWPr1q1bOuuss/KmbbbZZmnEiBEppcozttmzZ6eISM8880xKqWz9fuihh1KVKlXyDkCvueaaVL9+/fT999+v2QFkWHpspbn99ttTYWFhWrx4cUqpcoxtWeN6/fXXU6tWrdJnn31W4m+2MowrpdLHttVWW6W//OUvy3xOZXh/LG1cderUSf/85z/z2jVu3Dhdf/31KaXKMa6UUtpyyy3TUUcdlXu8ZMmS1LJly3T++eeXY68qn6X32aKiotS8efN00UUX5abNmzcv1ahRI91yyy0ppbL9jVx99dWpUaNGefv5ySefnDp16pR7PGTIkLTrrrvm9WerrbZKRxxxxCodY2Wwumrin/70p9StW7e819p3331T//79c4/tS/kaNWqUbrjhBttgDfv666/TBhtskB5//PHUt2/fXJBuO1RsI0eOTBtvvHGZ269t7/vHHXdc6tixYyoqKip1/ujRo1ODBg3WbKdWkZU5PihNZdmvViYHKs2K7hPlZVlB+uDBg1doOWvT9h08eHDaYYcdMttUlu27MseVS1vZfb48rEz+UpqV2QfKU6W6R/r8+fOjoKAgGjZsGBE/fvW/YcOGsfnmm+fa7LjjjlGlSpV48cUXy6mXZVNUVBT7779/nHTSSdGtW7cS8yvj2IqKiuLBBx+MDTfcMPr37x9NmzaNrbbaKu+rPK+++mosXrw4dtxxx9y0zp07R5s2bWLixInl0Ouy23rrreP++++PTz75JFJKMW7cuHjvvfdi5513jojKM7bir9U0btw4IsrW74kTJ0b37t2jWbNmuTb9+/ePr776Kt5+++012PtsS49tWW3q168f1apVi4jKMbbSxvXdd9/Fb3/727jqqquiefPmJZ5TGcYVUXJss2fPjhdffDGaNm0aW2+9dTRr1iz69u0bzz33XO45leH9sbRttvXWW8dtt90Wc+fOjaKiorj11ltj4cKFsd1220VE5RjXokWL4tVXX817v6hSpUrsuOOOFep9rjKaMWNGfP7553nrtkGDBrHVVlvlvRcv729k4sSJ0adPnygsLMy16d+/f0ydOjW+/PLLXJufvk5xm1/iNlxdNXF569i+9H+WLFkSt956a3z77bfRq1cv22ANO+qoo2LXXXctsa5sh4pv2rRp0bJly+jQoUPst99+ebfSXNra9L6/aNGi+Ne//hUHH3xwFBQULLPdN998E23bto3WrVvH4MGDK9Tx74ooy/HB0ta2/WrpHGhZVmSfqGiefvrpaNq0aXTq1Cl+//vfx5w5c5bZdm3avrNmzYoHH3wwDjnkkOW2rQzbd2WOK5e2Mvt8eVmZ/GVZVmQfKG+VJkhfuHBhnHzyyTF06NCoX79+RPx4v9mmTZvmtatWrVo0btw4Pv/88/LoZpldcMEFUa1atTj22GNLnV8ZxzZ79uz45ptv4q9//WsMGDAgHnvssdhzzz1jr732imeeeSYifhxXYWFhiSLYrFmzCjuuYqNGjYquXbvGeuutF4WFhTFgwIC46qqrok+fPhFROcZWVFQUxx9/fPTu3Ts22mijiChbvz///PO8k6Ti+cXzKoLSxra0//3vf3H22WfH4YcfnptW0ce2rHH94Q9/iK233joGDx5c6vMq+rgiSh/bBx98EBE/3gfvsMMOi0ceeSQ222yz6NevX+6+cBX9/XFZ2+z222+PxYsXxzrrrBM1atSII444Iu65555Yf/31I6Lijyvix31oyZIlpf5tVZQ+VlbF6y9r3Zblb6Qs+/6y2vzStuHqrInLavPVV1/FggUL7EsRMXny5Khbt27UqFEjjjzyyLjnnnuia9eutsEadOutt8Zrr70W559/fol5tkPFttVWW8WYMWPikUceiWuuuSZmzJgR2267bXz99deltl+b3vfvvffemDdvXhx44IHLbNOpU6e48cYb47777ot//etfUVRUFFtvvXX897//XXMdXUXKcnywtLVpvyotByrNiu4TFcmAAQPin//8Zzz55JNxwQUXxDPPPBMDBw6MJUuWlNp+bdq+Y8eOjXr16sVee+2V2a4ybN+VPa5c2srs8+VhZfOX0qzoPlDesj8SqCAWL14cQ4YMiZRSXHPNNeXdnZ/t1VdfjSuuuCJee+21zE/RK5uioqKIiBg8eHD84Q9/iIiITTbZJJ5//vm49tpro2/fvuXZvZ9t1KhR8cILL8T9998fbdu2jfHjx8dRRx0VLVu2LHGFR0V11FFHxVtvvZV3de/aYnlj++qrr2LXXXeNrl27xhlnnLFmO/czlDau+++/P5566ql4/fXXy7FnP19pYyt+HzniiCPioIMOioiITTfdNJ588sm48cYbSz3Zr2iW9bd42mmnxbx58+KJJ56IddddN+69994YMmRIPPvss9G9e/dy6i38cq3NNbEy6NSpU0yaNCnmz58fd955ZwwbNix34QWr38cffxzHHXdcPP744xX6Rxgp3cCBA3P/36NHj9hqq62ibdu2cfvtt5fpys7K7B//+EcMHDgwWrZsucw2vXr1il69euUeb7311tGlS5e47rrr4uyzz14T3WQVWJEcqDLvE7/5zW9y/9+9e/fo0aNHdOzYMZ5++uno169fOfZs9bvxxhtjv/32W24dqgzb95d2XLkq85fKtg9U+CvSi988Z86cGY8//njep5DNmzeP2bNn57X/4YcfYu7cuaXe6qCiePbZZ2P27NnRpk2bqFatWlSrVi1mzpwZJ5xwQrRr1y4iKufY1l133ahWrVp07do1b3qXLl1yX7tp3rx5LFq0KObNm5fXZtasWRV2XBERCxYsiD//+c9x6aWXxqBBg6JHjx5x9NFHx7777hsXX3xxRFT8sR199NHxn//8J8aNGxfrrbdebnpZ+t28efMSvyxd/Lgij63Y119/HQMGDIh69erFPffcE9WrV8/Nq8hjW9a4nnrqqZg+fXo0bNgw9x4SEbH33nvnbhNSkccVseyxtWjRIiJiue8jFfX9cVnjmj59elx55ZVx4403Rr9+/WLjjTeOkSNHxuabbx5XXXVVRFTscRVbd911o2rVqqX+bVWUPlZWxesva92W5W+kLPv+str8krbh6q6Jy2pTv379qFWrln0pIgoLC2P99dePnj17xvnnnx8bb7xxXHHFFbbBGvLqq6/G7NmzY7PNNssdSzzzzDPxt7/9LapVqxbNmjWzHSqRhg0bxoYbbhjvv/9+qfPXlvf9mTNnxhNPPBGHHnroCj2vevXqsemmmy5z/VRkZTk+WNrasF9l5UBlsbx9oiLr0KFDrLvuusvs+9qwfSN+zMWmTp26wvtzRMXbvj/nuHJpK7PPr2k/J38pi+XtA+WtQgfpxW+e06ZNiyeeeCLWWWedvPm9evWKefPmxauvvpqb9tRTT0VRUVFstdVWa7q7Zbb//vvHm2++GZMmTcr9a9myZZx00knx6KOPRkTlHFthYWFsscUWMXXq1Lzp7733XrRt2zYiInr27BnVq1ePJ598Mjd/6tSp8dFHH+VdNVDRLF68OBYvXhxVquTvMlWrVs1dQVtRx5ZSiqOPPjruueeeeOqpp6J9+/Z588vS7169esXkyZPzApziA5qlA881aXlji/jxk9Cdd945CgsL4/777y/xaXdFHNvyxnXKKaeUeA+JiLjsssti9OjREVExxxWx/LG1a9cuWrZsmfk+UhHfH5c3ru+++y4iIvM9pCKOa2mFhYXRs2fPvPeLoqKiePLJJyv0e3hl0L59+2jevHneuv3qq6/ixRdfzHsvXt7fSK9evWL8+PGxePHiXJvHH388OnXqFI0aNcq1+enrFLf5JWzDNVUTl7eO7UslFRUVxffff28brCH9+vWLyZMn5x1LbL755rHffvvl/t92qDy++eabmD59eu6ChKWtLe/7o0ePjqZNm8auu+66Qs9bsmRJTJ48eZnrpyIry/HB0ir7frW8HKgslrdPVGT//e9/Y86cOcvse2XfvsX+8Y9/RM+ePWPjjTde4edWlO27Ko4rl7Yy+/yasiryl7JY3j5Q7srpR05TSj/+Svzrr7+eXn/99RQR6dJLL02vv/56mjlzZlq0aFHafffd03rrrZcmTZqUPvvss9y/4l+BTymlAQMGpE033TS9+OKL6bnnnksbbLBBGjp0aDmO6kdZYytN27Zt02WXXZY3rSKObXnjuvvuu1P16tXT3//+9zRt2rQ0atSoVLVq1fTss8/mlnHkkUemNm3apKeeeiq98sorqVevXqlXr17lNaSc5Y2tb9++qVu3bmncuHHpgw8+SKNHj041a9ZMV199dW4ZFXFsv//971ODBg3S008/nbcffffdd7k2y+v3Dz/8kDbaaKO08847p0mTJqVHHnkkNWnSJJ166qnlMaSc5Y1t/vz5aauttkrdu3dP77//fl6bH374IaVUMcdWlm22tFjqF9Er4rhSKtvYLrvsslS/fv10xx13pGnTpqW//OUvqWbNmun999/Ptalo74/LG9eiRYvS+uuvn7bddtv04osvpvfffz9dfPHFqaCgID344IO55VS0cZXm1ltvTTVq1EhjxoxJ77zzTjr88MNTw4YN0+eff17eXavwlldn/vrXv6aGDRum++67L7355ptp8ODBqX379mnBggW5ZSzvb2TevHmpWbNmaf/9909vvfVWuvXWW1Pt2rXTddddl2szYcKEVK1atXTxxRenKVOmpJEjR6bq1aunyZMnr7mVUU7WVE384IMPUu3atdNJJ52UpkyZkq666qpUtWrV9Mgjj+Ta/JL3pVNOOSU988wzacaMGenNN99Mp5xySiooKEiPPfZYSsk2KC99+/ZNxx13XO6x7VBxnXDCCenpp59OM2bMSBMmTEg77rhjWnfdddPs2bNTSintv//+6ZRTTsm1Xxve95csWZLatGmTTj755BLzlh7vmWeemR599NE0ffr09Oqrr6bf/OY3qWbNmuntt99ek10us1VxfLDDDjukUaNG5R5X5P1qVeRAS493eftEecoa79dff51OPPHENHHixDRjxoz0xBNPpM022yxtsMEGaeHChbllrC3bt9j8+fNT7dq10zXXXFPqMirL9l0Vx5UppdSpU6d099135x6XZZ8vD6sif0kpf7xl3QcqknIN0seNG5ciosS/YcOGpRkzZpQ6LyLSuHHjcsuYM2dOGjp0aKpbt26qX79+Ouigg9LXX39dfoP6/7LGVprSgvSKOLayjOsf//hHWn/99VPNmjXTxhtvnO699968ZSxYsCANHz48NWrUKNWuXTvtueee6bPPPlvDIylpeWP77LPP0oEHHphatmyZatasmTp16pQuueSSVFRUlFtGRRzbsvaj0aNH59qUpd8ffvhhGjhwYKpVq1Zad9110wknnJAWL168hkeTb3ljW9Y2jYg0Y8aM3HIq2tjKss1Ke85Pg/SUKt64Uir72M4///y03nrrpdq1a6devXrlfRiXUsV7fyzLuN5777201157paZNm6batWunHj16pH/+8595y6lo41qWUaNGpTZt2qTCwsK05ZZbphdeeKG8u1QpLK/OFBUVpdNOOy01a9Ys1ahRI/Xr1y9NnTo1bxll+Rt544030jbbbJNq1KiRWrVqlf7617+W6Mvtt9+eNtxww1RYWJi6deuW94HO2mxN1sRx48alTTbZJBUWFqYOHTqU+h7+S92XDj744NS2bdtUWFiYmjRpkvr165cL0VOyDcrL0kG67VBx7bvvvqlFixapsLAwtWrVKu277755Fxz07du3xHlnZX/ff/TRR1NElKiLKZUc7/HHH5/7e2rWrFnaZZdd0muvvbYGe7tiVsXxQdu2bdPIkSPzplXU/WpV5EBLj3d5+0R5yhrvd999l3beeefUpEmTVL169dS2bdt02GGHlQjE15btW+y6665LtWrVSvPmzSt1GZVl+66q48qln1OWfb48rKr85afPKes+UJEUpJRSAAAAAAAAparQ90gHAAAAAIDyJkgHAAAAAIAMgnQAAAAAAMggSAcAAAAAgAyCdAAAAAAAyCBIBwAAAACADIJ0AAAAAADIIEgHAAAAAIAMgnRYyz399NNRUFAQ8+bNK++uAABldMYZZ8Qmm2ySe3zggQfGHnvskfmc7bbbLo4//vjV2i8A+CX68MMPo6CgICZNmlTeXVmmshwrAD+PIB3WsGUVN4E3AKw9vvjii/j9738fbdq0iRo1akTz5s2jf//+MWHChJVa3hVXXBFjxoxZtZ0EgAri448/joMPPjhatmwZhYWF0bZt2zjuuONizpw55d21iIho3bp1fPbZZ7HRRhuVd1eAclStvDsArBqLFi2KwsLC8u4GABARe++9dyxatCjGjh0bHTp0iFmzZsWTTz650oFAgwYNVnEPAaBi+OCDD6JXr16x4YYbxi233BLt27ePt99+O0466aR4+OGH44UXXojGjRuXeN6aPAeuWrVqNG/efI281opasmRJFBQUlHc34BfBFelQAc2ZMyeGDh0arVq1itq1a0f37t3jlltuyWuz3XbbxdFHHx3HH398rLvuutG/f/+IiHjooYdiww03jFq1asX2228fH374Yd7zxowZEw0bNoxHH300unTpEnXr1o0BAwbEZ599ltfuhhtuiC5dukTNmjWjc+fOcfXVV+fmLVq0KI4++uho0aJF1KxZM9q2bRvnn39+RESklOKMM87IXYHXsmXLOPbYY1fDWgKAimnevHnx7LPPxgUXXBDbb799tG3bNrbccss49dRTY/fdd4+IiI8++igGDx4cdevWjfr168eQIUNi1qxZy1zm0t9o+/bbb+OAAw6IunXrRosWLeKSSy4p8Zyrr746Nthgg6hZs2Y0a9Ys9tlnn1U+VgD4uY466qgoLCyMxx57LPr27Rtt2rSJgQMHxhNPPBGffPJJjBgxIiIi2rVrF2effXYccMABUb9+/Tj88MMjIuL666+P1q1bR+3atWPPPfeMSy+9NBo2bJhb/vTp02Pw4MHRrFmzqFu3bmyxxRbxxBNP5PWhXbt2cd5558XBBx8c9erVizZt2sTf//733PzSbu3y9ttvx2677Rb169ePevXqxbbbbhvTp08v05hvvPHG6NatW9SoUSNatGgRRx99dG7epZdeGt27d486depE69atY/jw4fHNN9/k5hef099///3RtWvXqFGjRnz00Ue5+WeeeWY0adIk6tevH0ceeWQsWrQoN+/777+PY489Npo2bRo1a9aMbbbZJl5++eXc/OJvyj/55JOx+eabR+3atWPrrbeOqVOnlmlcsLYTpEMFtHDhwujZs2c8+OCD8dZbb8Xhhx8e+++/f7z00kt57caOHRuFhYUxYcKEuPbaa+Pjjz+OvfbaKwYNGhSTJk2KQw89NE455ZQSy//uu+/i4osvjptuuinGjx8fH330UZx44om5+TfffHOcfvrpce6558aUKVPivPPOi9NOOy3Gjh0bERF/+9vf4v7774/bb789pk6dGjfffHO0a9cuIiLuuuuuuOyyy+K6666LadOmxb333hvdu3dffSsLACqYunXrRt26dePee++N77//vsT8oqKiGDx4cMydOzeeeeaZePzxx+ODDz6Ifffdt8yvcdJJJ8UzzzwT9913Xzz22GPx9NNPx2uvvZab/8orr8Sxxx4bZ511VkydOjUeeeSR6NOnzyoZHwCsKnPnzo1HH300hg8fHrVq1cqb17x589hvv/3itttui5RSRERcfPHFsfHGG8frr78ep512WkyYMCGOPPLIOO6442LSpEmx0047xbnnnpu3nG+++SZ22WWXePLJJ+P111+PAQMGxKBBg/LC54iISy65JDbffPN4/fXXY/jw4fH73/9+mQHyJ598En369IkaNWrEU089Fa+++mocfPDB8cMPPyx3zNdcc00cddRRcfjhh8fkyZPj/vvvj/XXXz83v0qVKvG3v/0t3n777Rg7dmw89dRT8ac//SlvGd99911ccMEFccMNN8Tbb78dTZs2jYiIJ598MqZMmRJPP/103HLLLXH33XfHmWeemXven/70p7jrrrti7Nix8dprr8X6668f/fv3j7lz5+Ytf8SIEXHJJZfEK6+8EtWqVYuDDz54ueOCX4QErFHDhg1LVatWTXXq1Mn7V7NmzRQR6csvvyz1ebvuums64YQTco/79u2bNt1007w2p556auratWvetJNPPjlvuaNHj04Rkd5///1cm6uuuio1a9Ys97hjx47p3//+d95yzj777NSrV6+UUkrHHHNM2mGHHVJRUVGJfl5yySVpww03TIsWLVr+ygCAtdSdd96ZGjVqlGrWrJm23nrrdOqpp6Y33ngjpZTSY489lqpWrZo++uijXPu33347RUR66aWXUkopjRw5Mm288ca5+cOGDUuDBw9OKaX09ddfp8LCwnT77bfn5s+ZMyfVqlUrHXfccSmllO66665Uv3799NVXX63egQLAz/DCCy+kiEj33HNPqfMvvfTSFBFp1qxZqW3btmmPPfbIm7/vvvumXXfdNW/afvvtlxo0aJD5ut26dUujRo3KPW7btm363e9+l3tcVFSUmjZtmq655pqUUkozZsxIEZFef/31lNKP597t27dfqfPeli1bphEjRpS5/R133JHWWWed3OPic/pJkybltRs2bFhq3Lhx+vbbb3PTrrnmmlS3bt20ZMmS9M0336Tq1aunm2++OTd/0aJFqWXLlunCCy9MKaU0bty4FBHpiSeeyLV58MEHU0SkBQsWrPBYYW3jinQoB9tvv31MmjQp798NN9yQm79kyZI4++yzo3v37tG4ceOoW7duPProoyU+Me/Zs2fe4ylTpsRWW22VN61Xr14lXr927drRsWPH3OMWLVrE7NmzI+LHr4pPnz49DjnkkNwVdXXr1o1zzjkn9zW1Aw88MCZNmhSdOnWKY489Nh577LHcsn7961/HggULokOHDnHYYYfFPffcU6ZP5QFgbbL33nvHp59+Gvfff38MGDAgnn766dhss81izJgxMWXKlGjdunW0bt06175r167RsGHDmDJlynKXPX369Fi0aFFezW/cuHF06tQp93innXaKtm3bRocOHWL//fePm2++Ob777rtVO0gAWEXS/7/ifHk233zzvMdTp06NLbfcMm/a0o+/+eabOPHEE6NLly7RsGHDqFu3bkyZMqXE+XWPHj1y/19QUBDNmzfPnScvbdKkSbHttttG9erVy9TvYrNnz45PP/00+vXrt8w2TzzxRPTr1y9atWoV9erVi/333z/mzJmTV8cLCwvz+lts4403jtq1a+ce9+rVK7755pv4+OOPY/r06bF48eLo3bt3bn716tVjyy23LHH88dNlt2jRItd3+KUTpEM5qFOnTqy//vp5/1q1apWbf9FFF8UVV1wRJ598cowbNy4mTZoU/fv3z7u3WfFyVsbSxb6goCB34FJ877Xrr78+L+h/66234oUXXoiIiM022yxmzJgRZ599dixYsCCGDBmSu+9q69atY+rUqXH11VdHrVq1Yvjw4dGnT59YvHjxSvUVACqrmjVrxk477RSnnXZaPP/883HggQfGyJEj18hr16tXL1577bW45ZZbokWLFnH66afHxhtvHPPmzVsjrw8AZbH++utHQUHBMj9InjJlSjRq1CiaNGkSESt3DnziiSfGPffcE+edd148++yzMWnSpOjevXuJ8+vSzpOLiopKXebSt6Epq+U978MPP4zddtstevToEXfddVe8+uqrcdVVV0VE5PW3Vq1aq/UHRn+6LopfZ1nrAn5JBOlQAU2YMCEGDx4cv/vd72LjjTeODh06xHvvvbfc53Xp0qXEfdSLw++yatasWbRs2TI++OCDEmF/+/btc+3q168f++67b1x//fVx2223xV133ZW7r1qtWrVi0KBB8be//S2efvrpmDhxYkyePHmF+gEAa5uuXbvGt99+G126dImPP/44Pv7449y8d955J+bNmxddu3Zd7nI6duwY1atXjxdffDE37csvvyxxrFCtWrXYcccd48ILL4w333wzPvzww3jqqadW3YAA4GdaZ511Yqeddoqrr746FixYkDfv888/j5tvvjn23XffZYbGnTp1yvuxzIgo8XjChAlx4IEHxp577hndu3eP5s2bx4cffviz+t2jR4949tlnV/iCsXr16kW7du3iySefLHX+q6++GkVFRXHJJZfEr371q9hwww3j008/LfPy33jjjbz1+MILL0TdunWjdevW0bFjx9xvrBVbvHhxvPzyy2U6/gAiqpV3B4CSNthgg7jzzjvj+eefj0aNGsWll14as2bNWm5xO/LII+OSSy6Jk046KQ499NB49dVXY8yYMSv8+meeeWYce+yx0aBBgxgwYEB8//338corr8SXX34Zf/zjH+PSSy+NFi1axKabbhpVqlSJO+64I5o3bx4NGzaMMWPGxJIlS2KrrbaK2rVrx7/+9a+oVatWtG3bdiXXBgBULnPmzIlf//rXcfDBB0ePHj2iXr168corr8SFF14YgwcPjh133DG6d+8e++23X1x++eXxww8/xPDhw6Nv374lvrJemrp168YhhxwSJ510UqyzzjrRtGnTGDFiRFSp8n/XyPznP/+JDz74IPr06RONGjWKhx56KIqKivJu/wIAFcGVV14ZW2+9dfTv3z/OOeecaN++fbz99ttx0kknRatWrUr8eOhPHXPMMdGnT5+49NJLY9CgQfHUU0/Fww8/nBe8b7DBBnH33XfHoEGDoqCgIE477bSffXX10UcfHaNGjYrf/OY3ceqpp0aDBg3ihRdeiC233HK5tfaMM86II488Mpo2bRoDBw6Mr7/+OiZMmBDHHHNMrL/++rF48eIYNWpUDBo0KCZMmBDXXnttmfu1aNGiOOSQQ+Ivf/lLfPjhhzFy5Mg4+uijo0qVKlGnTp34/e9/HyeddFI0btw42rRpExdeeGF89913ccghh/ys9QG/FK5IhwroL3/5S2y22WbRv3//2G677aJ58+axxx57LPd5bdq0ibvuuivuvffe2HjjjePaa6+N8847b4Vf/9BDD40bbrghRo8eHd27d4++ffvGmDFjclek16tXLy688MLYfPPNY4sttogPP/wwHnrooahSpUo0bNgwrr/++ujdu3f06NEjnnjiiXjggQdinXXWWeF+AEBlVLdu3dhqq63isssuiz59+sRGG20Up512Whx22GFx5ZVXRkFBQdx3333RqFGj6NOnT+y4447RoUOHuO2228r8GhdddFFsu+22MWjQoNhxxx1jm222yfvtlIYNG8bdd98dO+ywQ3Tp0iWuvfbauOWWW6Jbt26rY8gAsNI22GCDeOWVV6JDhw4xZMiQ6NixYxx++OGx/fbbx8SJE6Nx48bLfG7v3r3j2muvjUsvvTQ23njjeOSRR+IPf/hD1KxZM9fm0ksvjUaNGsXWW28dgwYNiv79+8dmm232s/q8zjrrxFNPPRXffPNN9O3bN3r27BnXX399me6ZPmzYsLj88svj6quvjm7dusVuu+0W06ZNi4gf73F+6aWXxgUXXBAbbbRR3HzzzXH++eeXuV/9+vWLDTbYIPr06RP77rtv7L777nHGGWfk5v/1r3+NvffeO/bff//YbLPN4v33349HH300GjVqtMLrAH6JClJZf9EBAAAAACqwww47LN5999149tlny7srwFrGrV0AAAAAqJQuvvji2GmnnaJOnTrx8MMPx9ixY+Pqq68u724BayFXpAMAAABQKQ0ZMiSefvrp+Prrr6NDhw5xzDHHxJFHHllu/albt+4y5z388MOx7bbbrsHeAKuSIB0AAAAAVoH3339/mfNatWoVtWrVWoO9AVYlQToAAAAAAGSoUt4dAAAAAACAikyQDgAAAAAAGQTpAAAAAACQQZAOAAAAAAAZBOkAAAAAAJBBkA4AAAAAABkE6QAAAAAAkEGQDgAAAAAAGf4f2hEgsvJ8eOEAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Выбираем столбцы для очистки\n", "columns_to_clean = ['Hardness', 'Solids', 'Organic_carbon']\n", "\n", "# Функция для удаления выбросов\n", "def remove_outliers(df, columns):\n", " for col in columns:\n", " Q1 = df[col].quantile(0.25)\n", " Q3 = df[col].quantile(0.75)\n", " IQR = Q3 - Q1\n", " lower_bound = Q1 - 1.5 * IQR\n", " upper_bound = Q3 + 1.5 * IQR\n", " \n", " # Удаляем строки, содержащие выбросы\n", " df = df[(df[col] >= lower_bound) & (df[col] <= upper_bound)]\n", " \n", " return df\n", "\n", "# Удаляем выбросы\n", "df_cleaned = remove_outliers(df, columns_to_clean)\n", "\n", "# Выводим количество удаленных строк\n", "print(f\"Количество удаленных строк: {len(df) - len(df_cleaned)}\")\n", "\n", "# Создаем диаграммы размаха для очищенных данных\n", "plt.figure(figsize=(15, 6))\n", "\n", "# Диаграмма размаха для Hardness\n", "plt.subplot(1, 3, 1)\n", "sns.boxplot(x=df_cleaned['Hardness'])\n", "plt.title('Box Plot of Hardness (Cleaned)')\n", "plt.xlabel('Hardness')\n", "\n", "# Диаграмма размаха для Solids\n", "plt.subplot(1, 3, 2)\n", "sns.boxplot(x=df_cleaned['Solids'])\n", "plt.title('Box Plot of Solids (Cleaned)')\n", "plt.xlabel('Solids')\n", "\n", "# Диаграмма размаха для Organic_carbon\n", "plt.subplot(1, 3, 3)\n", "sns.boxplot(x=df_cleaned['Organic_carbon'])\n", "plt.title('Box Plot of Organic_carbon (Cleaned)')\n", "plt.xlabel('Organic_carbon')\n", "\n", "plt.tight_layout()\n", "plt.show()\n", "\n", "# Сохраняем очищенный датасет\n", "df_cleaned.to_csv(\"..//..//static//csv//water_potability_cleaned.csv\", index=False)\n", "df = df_cleaned" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Количество выбросов уменьшилось.\n", "\n", "### Теперь проверим на пустые значения" ] }, { "cell_type": "code", "execution_count": 542, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ph 466\n", "Hardness 0\n", "Solids 0\n", "Chloramines 0\n", "Sulfate 746\n", "Conductivity 0\n", "Organic_carbon 0\n", "Trihalomethanes 154\n", "Turbidity 0\n", "Potability 0\n", "dtype: int64\n", "\n", "ph True\n", "Hardness False\n", "Solids False\n", "Chloramines False\n", "Sulfate True\n", "Conductivity False\n", "Organic_carbon False\n", "Trihalomethanes True\n", "Turbidity False\n", "Potability False\n", "dtype: bool\n", "\n", "ph процент пустых значений: %14.88\n", "Sulfate процент пустых значений: %23.83\n", "Trihalomethanes процент пустых значений: %4.92\n" ] } ], "source": [ "# Количество пустых значений признаков\n", "print(df.isnull().sum())\n", "\n", "print()\n", "\n", "# Есть ли пустые значения признаков\n", "print(df.isnull().any())\n", "\n", "print()\n", "\n", "# Процент пустых значений признаков\n", "for i in df.columns:\n", " null_rate = df[i].isnull().sum() / len(df) * 100\n", " if null_rate > 0:\n", " print(f\"{i} процент пустых значений: %{null_rate:.2f}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В трех столбцах встречается большое число пустых значений. Поэтому вместо удаления заменим их значения на медиану." ] }, { "cell_type": "code", "execution_count": 543, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Количество пустых значений в каждом столбце после замены:\n", "ph 0\n", "Hardness 0\n", "Solids 0\n", "Chloramines 0\n", "Sulfate 0\n", "Conductivity 0\n", "Organic_carbon 0\n", "Trihalomethanes 0\n", "Turbidity 0\n", "Potability 0\n", "dtype: int64\n" ] } ], "source": [ "# Замена значений\n", "df[\"ph\"] = df[\"ph\"].fillna(df[\"ph\"].median())\n", "df[\"Sulfate\"] = df[\"Sulfate\"].fillna(df[\"Sulfate\"].median())\n", "df[\"Trihalomethanes\"] = df[\"Trihalomethanes\"].fillna(df[\"Trihalomethanes\"].median())\n", "\n", "# Проверка на пропущенные значения после замены\n", "missing_values_after_drop = df.isnull().sum()\n", "\n", "# Вывод результатов после замены\n", "print(\"\\nКоличество пустых значений в каждом столбце после замены:\")\n", "print(missing_values_after_drop)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Пустых значений в датасете теперь нет.\n", "\n", "### Можно перейти к созданию выборок" ] }, { "cell_type": "code", "execution_count": 544, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Размер обучающей выборки: (1878, 9)\n", "Размер контрольной выборки: (626, 9)\n", "Размер тестовой выборки: (627, 9)\n" ] } ], "source": [ "# Разделение на признаки (X) и целевую переменную (y)\n", "# Предположим, что Potability - это целевая переменная\n", "X = df.drop('Potability', axis=1)\n", "y = df['Potability']\n", "\n", "# Разбиение на обучающую и остальную выборку (контрольную + тестовую)\n", "X_train, X_rem, y_train, y_rem = train_test_split(X, y, train_size=0.6, random_state=42)\n", "\n", "# Разбиение остатка на контрольную и тестовую выборки\n", "X_val, X_test, y_val, y_test = train_test_split(X_rem, y_rem, test_size=0.5, random_state=42)\n", "\n", "# Вывод размеров выборок\n", "print(\"Размер обучающей выборки:\", X_train.shape)\n", "print(\"Размер контрольной выборки:\", X_val.shape)\n", "print(\"Размер тестовой выборки:\", X_test.shape)" ] }, { "cell_type": "code", "execution_count": 545, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Распределение классов в обучающей выборке:\n", "Potability\n", "0 0.613951\n", "1 0.386049\n", "Name: proportion, dtype: float64\n", "\n", "Распределение классов в контрольной выборке:\n", "Potability\n", "0 0.616613\n", "1 0.383387\n", "Name: proportion, dtype: float64\n", "\n", "Распределение классов в тестовой выборке:\n", "Potability\n", "0 0.614035\n", "1 0.385965\n", "Name: proportion, dtype: float64\n" ] } ], "source": [ "# Функция для анализа сбалансированности\n", "def analyze_balance(y_train, y_val, y_test):\n", " print(\"Распределение классов в обучающей выборке:\")\n", " print(y_train.value_counts(normalize=True))\n", " \n", " print(\"\\nРаспределение классов в контрольной выборке:\")\n", " print(y_val.value_counts(normalize=True))\n", " \n", " print(\"\\nРаспределение классов в тестовой выборке:\")\n", " print(y_test.value_counts(normalize=True))\n", "\n", "# Анализ сбалансированности\n", "analyze_balance(y_train, y_val, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Такие выборки сложно назвать сбалансированными. Сделаем приращение данных методом выборки с избытком (oversampling)" ] }, { "cell_type": "code", "execution_count": 546, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Сбалансированность обучающей выборки после SMOTE:\n", "Potability\n", "1 0.5\n", "0 0.5\n", "Name: proportion, dtype: float64\n" ] } ], "source": [ "smote = SMOTE(random_state=42)\n", "\n", "# Применение SMOTE для балансировки обучающей выборки\n", "X_train_resampled, y_train_resampled = smote.fit_resample(X_train, y_train)\n", "\n", "# Проверка сбалансированности после SMOTE\n", "print(\"Сбалансированность обучающей выборки после SMOTE:\")\n", "print(y_train_resampled.value_counts(normalize=True))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Можно увидеть, что выборка была успешно сбалансирована." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Датасет №3 (данные о диабете) \n", "\n", "Ссылка: https://www.kaggle.com/datasets/akshaydattatraykhare/diabetes-dataset\n", "\n", "Проблемная область: диагностика диабета и выявление факторов, влияющих на риск его возникновения.\n", "\n", "Объекты наблюдения: женщины в возрасте от 21 года из группы индейцев племени Пима." ] }, { "cell_type": "code", "execution_count": 547, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Index(['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin',\n", " 'BMI', 'DiabetesPedigreeFunction', 'Age', 'Outcome'],\n", " dtype='object')\n" ] } ], "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from sklearn.model_selection import train_test_split\n", "from imblearn.under_sampling import RandomUnderSampler\n", "\n", "# вывод всех столбцов\n", "df = pd.read_csv(\"..//..//static//csv//diabetes.csv\")\n", "print(df.columns)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Атрибуты: \n", "* Pregnancies – количество беременностей у пациентки;\n", "* Glucose – уровень глюкозы в крови;\n", "* BloodPressure – артериальное давление;\n", "* SkinThickness – толщина кожи;\n", "* Insulin – уровень инсулина в крови;\n", "* BMI – индекс массы тела (Body Mass Index);\n", "* DiabetesPedigreeFunction – вероятность наследственной предрасположенности к диабету;\n", "* Age – возраст пациентки;\n", "* Outcome – признак, показывающий, диагностирован ли диабет (1 – да, 0 – нет).\n", "\n", "Примеры бизнес целей и целей технического проекта:\n", "1. Разработка программ ранней диагностики диабета.\n", " * Бизнес-цель: создание системы раннего выявления пациентов с высоким риском диабета для снижения затрат на лечение и улучшения прогноза.\n", " * Цель технического проекта: создание алгоритмов машинного обучения для предсказания вероятности заболевания на основе медицинских данных.\n", "2. Оптимизация медицинского мониторинга пациентов.\n", " * Бизнес-цель: эффективное распределение ресурсов здравоохранения за счет фокусирования на группах риска.\n", " * Цель технического проекта: разработка платформы для интеграции медицинских данных, которая позволит отслеживать ключевые показатели здоровья и предсказывать осложнения.\n", "3. Повышение осведомленности о факторах риска диабета среди населения.\n", " * Бизнес-цель: внедрение образовательных кампаний, направленных на изменение образа жизни с целью профилактики диабета.\n", " * Цель технического проекта: создание системы оповещения пациентов с рекомендациями на основе их медицинских показателей.\n", "\n", "Входные данные и целевой признак могут быть следующими:\n", "1. Входные данные:\n", " * количество беременностей;\n", " * уровень глюкозы в крови;\n", " * артериальное давление;\n", " * толщина кожи;\n", " * уровень инсулина в крови;\n", " * индекс массы тела;\n", " * вероятность наследственной предрасположенности к диабету;\n", " * возраст.\n", "2. Целевой признак:\n", " * Диагностика диабета (1 – да, 0 – нет).\n", "\n", "Актуальность: анализ медицинских данных для ранней диагностики диабета играет ключевую роль в профилактике этого заболевания и управлении им. Выявление факторов риска позволяет принимать превентивные меры, снижая вероятность осложнений и улучшая качество жизни пациентов.\n", "\n", "### Проверяем на выбросы" ] }, { "cell_type": "code", "execution_count": 548, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Количество выбросов в столбце 'Age': 9\n", "Количество выбросов в столбце 'BloodPressure': 45\n", "Количество выбросов в столбце 'BMI': 19\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABdIAAAPeCAYAAAAI5OjmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABxnUlEQVR4nOzdeZyd4/0//tdkH5FFREiEiDWKoLZG7HvE1to+SiVEqaV2xSfWNqpqqypCq6KVUkHtW9T2QVo7tdQaCUJC00RERGTu3x++OT8jcZuJJDOTPJ+PxzySc9/Xuc773Nfc51z3a+5zn6qiKIoAAAAAAABz1KyhCwAAAAAAgMZMkA4AAAAAACUE6QAAAAAAUEKQDgAAAAAAJQTpAAAAAABQQpAOAAAAAAAlBOkAAAAAAFBCkA4AAAAAACUE6QAAAAAAUEKQDtBIvfXWW6mqqsqwYcMaupRa7r777qyzzjpp06ZNqqqqMmnSpIYuCQCAJmhRm+9WVVXljDPOmCd91ceDDz6YqqqqPPjggwv8sQEWJoJ0YKE3bNiwVFVV1frp0qVLttxyy9x1110LvJ5ZE9lZPy1btsyKK66Y/fffP2+++eY8eYzHHnssZ5xxxjwPuf/zn/9kr732SnV1dS655JL8+c9/Ttu2bb/xfpdeemmqqqqy0UYbzdN6AAAw352X6jPfbWzbvT4GDhxYq+727dtn7bXXzvnnn5/p06c3dHkAjVKLhi4AYEH5+c9/np49e6YoiowfPz7Dhg3LjjvumNtuuy077bTTAq/nyCOPzAYbbJAZM2bk6aefzhVXXJE77rgj//rXv9KtW7dv1fdjjz2WM888MwMHDkzHjh3nTcFJnnjiiUyZMiW/+MUvss0229T5fsOHD88KK6yQxx9/PK+//npWXnnleVYTAABfMN/99uZmvtvYtntdtW7dOn/4wx+SJJMmTcqNN96Y448/Pk888USuu+66Bq4OoPERpAOLjH79+mX99dev3B40aFCWXnrpXHvttQ0ywd10002zxx57JEkOOOCArLrqqjnyyCNz9dVX5+STT17g9dTFhAkTkqReByujR4/OY489lptuuimHHHJIhg8fntNPP30+VQgAsOgy3/325ma+29i2e121aNEi++23X+X2YYcdlo022ih//etfc8EFF8zxjx1FUeTTTz9NdXX1giz1W/n8889TU1OTVq1aNXQpQBPn0i7AIqtjx46prq5Oixa1/6Y4derUHHfccVluueXSunXrrLbaajnvvPNSFEWSZNq0aenVq1d69eqVadOmVe43ceLEdO3aNRtvvHFmzpxZ73q22mqrJF8Ez2Xuv//+bLrppmnbtm06duyYXXfdNS+//HJl/RlnnJETTjghSdKzZ8/KxzXfeuut0n5HjBiR9dZbL9XV1encuXP222+/vPvuu5X1W2yxRQYMGJAk2WCDDVJVVZWBAwd+4/MaPnx4llhiifTv3z977LFHhg8fPsd2//nPf/KjH/0o7du3T8eOHTNgwIA899xzc7xu5r///e/sscce6dSpU9q0aZP1118/t9566zfWAgCwKDHfrW1+zXe/6uu2+5w888wz6devX9q3b5/FF188W2+9df7xj3/M1u7NN9/MnnvumU6dOmWxxRbL9773vdxxxx2ztXvnnXey2267pW3btunSpUuOOeaYOl+qpVmzZtliiy2SpLItV1hhhey000655557sv7666e6ujqXX355ki/OYj/66KMrv0crr7xyzjnnnNTU1NTq97rrrst6662Xdu3apX379llrrbVy0UUXVdbPmDEjZ555ZlZZZZW0adMmSy65ZDbZZJOMHDmy0maLLbao1PZlAwcOzAorrFC5Peu6++edd15+85vfZKWVVkrr1q3z0ksvJXEcAXw7zkgHFhmTJ0/Ohx9+mKIoMmHChFx88cX5+OOPa52FURRFdtlllzzwwAMZNGhQ1llnndxzzz054YQT8u677+bCCy9MdXV1rr766vTt2zeDBw/OBRdckCQ5/PDDM3ny5AwbNizNmzevd31vvPFGkmTJJZf82jb33Xdf+vXrlxVXXDFnnHFGpk2blosvvjh9+/bN008/nRVWWCE/+MEP8uqrr+baa6/NhRdemM6dOydJllpqqa/td9iwYTnggAOywQYb5Oyzz8748eNz0UUX5dFHH80zzzyTjh07ZvDgwVlttdVyxRVXVD6+utJKK33j8xo+fHh+8IMfpFWrVtlnn31y2WWX5YknnsgGG2xQaVNTU5Odd945jz/+eA499ND06tUrt9xyS+VA5stefPHF9O3bN8suu2xOOumktG3bNtdff31222233Hjjjfn+97//jTUBACyMzHcbZr5bl+0+Jy+++GI23XTTtG/fPj/72c/SsmXLXH755dliiy3y0EMPVb5faPz48dl4443zySef5Mgjj8ySSy6Zq6++OrvssktuuOGGyvx32rRp2XrrrTN27NgceeSR6datW/785z/n/vvv/8bnMMucxuiVV17JPvvsk0MOOSQ//vGPs9pqq+WTTz7J5ptvnnfffTeHHHJIll9++Tz22GM5+eST89577+U3v/lNkmTkyJHZZ599svXWW+ecc85Jkrz88st59NFHc9RRRyX54g8jZ599dg466KBsuOGG+eijj/Lkk0/m6aefzrbbblvn2r/sqquuyqeffpqDDz44rVu3TqdOnRxHAN9eAbCQu+qqq4oks/20bt26GDZsWK22N998c5GkGDJkSK3le+yxR1FVVVW8/vrrlWUnn3xy0axZs+Lhhx8uRowYUSQpfvOb33xjPQ888ECRpPjjH/9YfPDBB8W4ceOKO+64o1hhhRWKqqqq4oknniiKoihGjx5dJCmuuuqqyn3XWWedokuXLsV//vOfyrLnnnuuaNasWbH//vtXlp177rlFkmL06NHfWM9nn31WdOnSpVhzzTWLadOmVZbffvvtRZLitNNOqyybtS1n1fhNnnzyySJJMXLkyKIoiqKmpqbo3r17cdRRR9Vqd+ONN862/WbOnFlstdVWs22DrbfeulhrrbWKTz/9tLKspqam2HjjjYtVVlmlTnUBACxMzHfLza/5bn22e1EURZLi9NNPr9zebbfdilatWhVvvPFGZdm4ceOKdu3aFZtttlll2dFHH10kKf7v//6vsmzKlClFz549ixVWWKGYOXNmURRF8Zvf/KZIUlx//fWVdlOnTi1WXnnlIknxwAMPVJYPGDCgaNu2bfHBBx8UH3zwQfH6668Xv/zlL4uqqqqid+/elXY9evQokhR33313refyi1/8omjbtm3x6quv1lp+0kknFc2bNy/Gjh1bFEVRHHXUUUX79u2Lzz///Gu349prr13079//a9cXRVFsvvnmxeabbz7b8gEDBhQ9evSo3J71O9W+fftiwoQJtdo6jgC+LZd2ARYZl1xySUaOHJmRI0fmmmuuyZZbbpmDDjooN910U6XNnXfemebNm+fII4+sdd/jjjsuRVHkrrvuqiw744wzssYaa2TAgAE57LDDsvnmm892vzIHHnhgllpqqXTr1i39+/fP1KlTc/XVV9e6vuKXvffee3n22WczcODAdOrUqbK8d+/e2XbbbXPnnXfW+bG/7Mknn8yECRNy2GGHpU2bNpXl/fv3T69eveb4kdG6Gj58eJZeeulsueWWSZKqqqrsvffeue6662p9HPjuu+9Oy5Yt8+Mf/7iyrFmzZjn88MNr9Tdx4sTcf//92WuvvTJlypR8+OGH+fDDD/Of//wn22+/fV577bVaH88FAFiUmO/O2fyc7yZ12+5fNXPmzNx7773ZbbfdsuKKK1aWd+3aNT/84Q/zyCOP5KOPPkryxZhtuOGG2WSTTSrtFl988Rx88MF56623KpctufPOO9O1a9fKdemTZLHFFsvBBx88xxqmTp2apZZaKksttVRWXnnl/O///m/69OmTv/3tb7Xa9ezZM9tvv32tZSNGjMimm26aJZZYojIn//DDD7PNNttk5syZefjhh5N8cZmbqVOn1rpMy1d17NgxL774Yl577bWvbVNfu+++e61PKDiOAOYFl3YBFhkbbrhhrUn7Pvvsk3XXXTdHHHFEdtppp7Rq1SpjxoxJt27d0q5du1r3XX311ZMkY8aMqSxr1apV/vjHP2aDDTZImzZtctVVV6WqqqrO9Zx22mnZdNNN07x583Tu3Dmrr7566XUUZz32aqutNtu61VdfPffcc0+mTp2atm3b1rmGb+q3V69eeeSRR+rV3ywzZ87Mddddly233LLWdTA32mijnH/++fn73/+e7bbbrlJD165ds9hii9XqY+WVV651+/XXX09RFDn11FNz6qmnzvFxJ0yYkGWXXXauagYAaMrMd+vf77eZ785Sl+3+VR988EE++eSTr32uNTU1efvtt7PGGmtkzJgxlcu8fLVd8sXzW3PNNTNmzJisvPLKs43RnB4jSdq0aZPbbrstSdK6dev07Nkz3bt3n61dz549Z1v22muv5fnnn//ay+nM+tLWww47LNdff3369euXZZddNtttt1322muv7LDDDpW2P//5z7Prrrtm1VVXzZprrpkddtghP/rRj9K7d+859l0XX63ZcQQwLwjSgUVWs2bNsuWWW+aiiy7Ka6+9ljXWWKPefdxzzz1Jkk8//TSvvfbaHCeZX2ettdbKNttsU+/HbCruv//+vPfee7nuuuty3XXXzbZ++PDhlSC9rmZ9cdHxxx8/21kxs3w1fAcAWFSZ7zaMebHdF4TmzZvXaXyqq6tnW1ZTU5Ntt902P/vZz+Z4n1VXXTVJ0qVLlzz77LO55557ctddd+Wuu+7KVVddlf333z9XX311kmSzzTbLG2+8kVtuuSX33ntv/vCHP+TCCy/M0KFDc9BBByX54pOtxf/7Mtwv+7ovvf1qzY4jgHlBkA4s0j7//PMkyccff5wk6dGjR+67775MmTKl1lk6//73vyvrZ3n++efz85//PAcccECeffbZHHTQQfnXv/6VDh06zJdaZz32K6+8Mtu6f//73+ncuXPl7Jz6nCn05X632mqrWuteeeWVWs+5PoYPH54uXbrkkksumW3dTTfdlL/97W8ZOnRoqqur06NHjzzwwAP55JNPap2V/vrrr9e636yPvbZs2XKRPCgDAKgv8935N98t89Xt/lVLLbVUFltssa99rs2aNctyyy2X5Iv6v67drPWz/n3hhRdSFEWt7TOn+35bK620Uj7++OM6zclbtWqVnXfeOTvvvHNqampy2GGH5fLLL8+pp55aCa87deqUAw44IAcccEA+/vjjbLbZZjnjjDMqQfoSSyyRN998c7a+v/wJijKOI4B5wTXSgUXWjBkzcu+996ZVq1aVj0XuuOOOmTlzZn73u9/VanvhhRemqqoq/fr1q9x34MCB6datWy666KIMGzYs48ePzzHHHDPf6u3atWvWWWedXH311Zk0aVJl+QsvvJB77703O+64Y2XZrAOML7f7Ouuvv366dOmSoUOHZvr06ZXld911V15++eX079+/3rVOmzYtN910U3baaafsscces/0cccQRmTJlSm699dYkyfbbb58ZM2bk97//faWPmpqa2UL4Ll26ZIsttsjll1+e9957b7bH/eCDD+pdKwDAwsp89wvzY75bZk7b/auaN2+e7bbbLrfcckveeuutyvLx48fnL3/5SzbZZJO0b98+yRdj9vjjj2fUqFGVdlOnTs0VV1yRFVZYId/5zncq7caNG5cbbrih0u6TTz7JFVdcMU+fX5LstddeGTVqVOUTC182adKkyh8S/vOf/9Ra16xZs8olW2aNxVfbLL744ll55ZVrjdVKK62Uf//737Xm+88991weffTROtXrOAKYF5yRDiwy7rrrrspZGxMmTMhf/vKXvPbaaznppJMqk9Sdd945W265ZQYPHpy33nora6+9du69997ccsstOfroo7PSSislSYYMGZJnn302f//739OuXbv07t07p512Wk455ZTssccetSb589K5556bfv36pU+fPhk0aFCmTZuWiy++OB06dMgZZ5xRabfeeuslSQYPHpz/+Z//ScuWLbPzzjvP8XqSLVu2zDnnnJMDDjggm2++efbZZ5+MHz8+F110UVZYYYW5Oli69dZbM2XKlOyyyy5zXP+9730vSy21VIYPH5699947u+22WzbccMMcd9xxef3119OrV6/ceuutmThxYpLaZxxdcskl2WSTTbLWWmvlxz/+cVZcccWMHz8+o0aNyjvvvJPnnnuu3vUCACwMzHcX3Hz3y+qy3edkyJAhGTlyZDbZZJMcdthhadGiRS6//PJMnz49v/71ryvtTjrppFx77bXp169fjjzyyHTq1ClXX311Ro8enRtvvDHNmn1xjuSPf/zj/O53v8v++++fp556Kl27ds2f//zn2b6HaF444YQTcuutt2annXbKwIEDs95662Xq1Kn517/+lRtuuCFvvfVWOnfunIMOOigTJ07MVlttle7du2fMmDG5+OKLs84661T+yPCd73wnW2yxRdZbb7106tQpTz75ZG644YYcccQRlcc78MADc8EFF2T77bfPoEGDMmHChAwdOjRrrLFG5UtZv4njCOBbKwAWcldddVWRpNZPmzZtinXWWae47LLLipqamlrtp0yZUhxzzDFFt27dipYtWxarrLJKce6551baPfXUU0WLFi2Kn/70p7Xu9/nnnxcbbLBB0a1bt+K///3v19bzwAMPFEmKESNGlNY9evToIklx1VVX1Vp+3333FX379i2qq6uL9u3bFzvvvHPx0ksvzXb/X/ziF8Wyyy5bNGvWrEhSjB49uvTx/vrXvxbrrrtu0bp166JTp07FvvvuW7zzzju12szalk888URpXzvvvHPRpk2bYurUqV/bZuDAgUXLli2LDz/8sCiKovjggw+KH/7wh0W7du2KDh06FAMHDiweffTRIklx3XXX1brvG2+8Uey///7FMsssU7Rs2bJYdtlli5122qm44YYbSusCAFgYme8u+Pnul9vWdbsnKU4//fRay55++uli++23LxZffPFiscUWK7bccsvisccem+2x3njjjWKPPfYoOnbsWLRp06bYcMMNi9tvv322dmPGjCl22WWXYrHFFis6d+5cHHXUUcXdd99dJCkeeOCBSrsBAwYUbdu2/cbn2KNHj6J///5zXDdlypTi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rrhiLrnkktx555255JJLsuKKK+b000/Pww8/XGk7dOjQXHfddWnfvn2OP/743HjjjTn++OPTvn37XHfddRk6dOhc9Vsf86tf6sc4zD9fDdG7d+9eup6FT0PvX/V5rQeA+aU+70f1Of6pq4Z+P66PplTrVwnSAYAGM23atMok8o477sjBBx+c7t275+CDD84dd9xRmUxOmzYtM2fOzKWXXpo+ffpkyJAhWWONNbLYYotljTXWyJAhQ9KnT59cdtllmTlzZj777LOMGDEiSyyxREaMGJGddtopSy65ZHbaaadayz/77LN69Vsf86tf6sc4zD+33npr5f+nnHJKHnzwwVxzzTV58MEHc8opp8yxHQuXht6/6vNaDwDzS33ej+pz/FNXDf1+XB9NqdY5qfOlXaZPn57p06dXbn/00UfzpaC5MWbMmEXysWFB8/sOzI2y147LL788SbLnnnvOdu3AVq1aZY899si1116byy+/PJtvvnnef//9nHrqqWnWrPa5AM2aNcu+++6bww8/PM8//3xef/31zJw5M4MGDUqLFrWnOy1atMiBBx6Y888/P7fccktWXnnlOve77rrr1vl5P//88/OlX+pnYR2HxjA3//I10bfZZpta67bZZpsMGTKk0s710hdODb1/3XLLLXV+rd9zzz3n+ePPC+bXiy5j33gYC+qi7PekPu9H7777bpK6Hf8cffTRdaqtod+P66Mp1TondQ7Szz777Jx55pnzs5a5NrfXDgLqx74GzGvvvPNOkmTHHXec4/odd9wx1157bd55551MnDgxSdKzZ885tp21fOLEiRk3blySpE+fPnNsO2v5uHHj0qlTpzr3Wx/1qZf5Z2Edh8Y0N//q5VxmWXrppTN+/PgFXA0LUkPvX/V5rW+szK+h4dkP+bbq835Un+Ofumro9+P6aEq1zkmdg/STTz45xx57bOX2Rx99lOWWW26+FFVfgwcPTo8ePRrksceMGeNFl0VGQ+5rQNNV9l7ZvXv3PPnkk7nzzjtz8MEHz7b+zjvvrLSbFXiPHj06a6yxxmxtR48enSTp1KlTunXrliQZNWpUdtppp9najho1KknSrVu3evVbH/OrX+pnYR2HxjQ3/7oDPSH6wq+h96/6vNY3VubXiy5ZQuNhP6QuyvbZ+rwfFUVR5+Ofumro9+P6aEq1zkmdg/TWrVundevW87OWudajR4+suuqqDV0GLPTsa8C8dsghh+Tmm2/OiBEjMnDgwFofb/zss89yww03VNq1atUqyyyzTIYPH54hQ4bU+ihgTU1Nhg8fnq5du6Z3795ZY401MnTo0Fx55ZXZYYcdan3E8vPPP88f//jHNG/ePLvuumuaN29e537ro3fv3vOlX+pnYR2HxjA3P/bYYyuXd7nvvvtqXd7lvvvuq9WOhVND71+77rprnV/rGyvza2h49kO+rfq8H82cObPOxz911dDvx/XRlGqdE182CgA0mOrq6vTt2zczZsxI//79c/nll+ftt9/O5Zdfnv79+2fGjBnp27dvqqur07x58xx22GEZNWpUTjnllLz44ov55JNP8uKLL+aUU07JqFGjcuihh6Z58+Zp1apV9txzz/z3v//Nnnvumdtuuy0ffvhhbrvttlrLW7VqVa9+62N+9Uv9GIf558vXPR8yZEi22GKL7L333tliiy0q10f/ajsWLg29f9XntR4A5pf6vB/V5/inrhr6/bg+mlKtc1JVFEUxN3f86KOP0qFDh0yePDnt27ef13XVyauvvpqDDz44V1xxRYP99XBWDVO/s0tq2nZukBrmh2ZTP0zbl25d6J4Xc2fW70ND7mtA01WX9+vBgwfn0UcfnW153759Z/sI5cMPP5xLL70077//fmVZ165dc+ihh2azzTar1Xbo0KEZMWJErW99b968efbcc8/85Cc/met+62N+9Uv9NKZxmB/z6Iacm2+xxRZfu+7BBx9cYHXQcBp6/6rPa31j0RiOZWlYsoSG5ziX+qjL63Z93o/qc/xTVw39flwfjanW+syj63xpFwCA+eWss87KtGnTcvnll+edd95J9+7dc8ghh8zxTIzNNtssffv2zfPPP5+JEyemU6dO6d279xzPWvjJT36SAw88MLfcckvGjRuXbt26Zdddd53j2Yn16bc+5le/1I9xmH8efPDB3HrrrZXLvCRfXM7FmeiLjobev+rzWg8A80t93o/qc/xTVw39flwfTanWLxOkAwCNQnV1dY4++ug6tW3evHnWXXfdOrWd9VHLed1vfcyvfqkf4zD/7LLLLoLzRVxD71/1ea0HgPmlPu9H9Tn+qauGfj+uj6ZU6yyukQ4AAAAAACUE6QAAAAAAUEKQDgAAAAAAJQTpAAAAAABQQpAOAAAAAAAlBOkAAAAAAFBCkA4A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eumlnH/++VliiSUqbX7961/nt7/9bYYOHZp//vOfadu2bbbffvt8+umnDVj5ouuJJ56otZ+NHDkySbLnnnsmsa81Vuecc04uu+yy/O53v8vLL7+cc845J7/+9a9z8cUXV9rY1xa8v/71rzn22GNz+umn5+mnn87aa6+d7bffPhMmTGjo0hZpjrmaLvP2xs/cr+kwd2jcpk6dmrXXXjuXXHLJHNfXZWz23XffvPjiixk5cmRuv/32PPzwwzn44IMX1FNYpJSN1yeffJKnn346p556ap5++uncdNNNeeWVV7LLLrvUatfkx6toBCZMmFAkKR566KGiKIpi0qRJRcuWLYsRI0ZU2rz88stFkmLUqFENVSZzsMQSSxR/+MMfjFkjN2XKlGKVVVYpRo4cWWy++ebFUUcdVRSFfa0xOv3004u11157juuMV+N14oknFptsssnXrq+pqSmWWWaZ4txzz60smzRpUtG6devi2muvXRAl8g2OOuqoYqWVVipqamrsa41Y//79iwMPPLDWsh/84AfFvvvuWxSFfa2hbLjhhsXhhx9euT1z5syiW7duxdlnn92AVfFVjrmaBvP2psHcr+kwd2g6khR/+9vfKrfrMjYvvfRSkaR44oknKm3uuuuuoqqqqnj33XcXWO2Loq+O15w8/vjjRZJizJgxRVEsHOPVKK6RPnny5CRJp06dkiRPPfVUZsyYkW222abSplevXll++eUzatSoBqmR2mbOnJnrrrsuU6dOTZ8+fYxZI3f44Yenf//+tcYnsa81Vq+99lq6deuWFVdcMfvuu2/Gjh2bxHg1ZrfeemvWX3/97LnnnunSpUvWXXfd/P73v6+sHz16dN5///1aY9ehQ4dstNFGxq4R+Oyzz3LNNdfkwAMPTFVVlX2tEdt4443z97//Pa+++mqS5LnnnssjjzySfv36JbGvNYTPPvssTz31VK1t3qxZs2yzzTa2eSPjmKtpMG9vGsz9mg5zh6arLmMzatSodOzYMeuvv36lzTbbbJNmzZrln//85wKvmdomT56cqqqqdOzYMcnCMV4tGrqAmpqaHH300enbt2/WXHPNJMn777+fVq1aVTb0LEsvvXTef//9BqiSWf71r3+lT58++fTTT7P44ovnb3/7W77zne/k2WefNWaN1HXXXZenn346TzzxxGzr7GuNz0YbbZRhw4ZltdVWy3vvvZczzzwzm266aV544QXj1Yi9+eabueyyy3Lsscfmf//3f/PEE0/kyCOPTKtWrTJgwIDK+Cy99NK17mfsGoebb745kyZNysCBA5N4bWzMTjrppHz00Ufp1atXmjdvnpkzZ+ass87KvvvumyT2tQbw4YcfZubMmXPc5v/+978bqCq+yjFX02De3nSY+zUd5g5NV13G5v3330+XLl1qrW/RokU6depk/BrYp59+mhNPPDH77LNP2rdvn2ThGK8GD9IPP/zwvPDCC7WuAUzjtdpqq+XZZ5/N5MmTc8MNN2TAgAF56KGHGrosvsbbb7+do446KiNHjkybNm0auhzqYNaZEUnSu3fvbLTRRunRo0euv/76VFdXN2BllKmpqcn666+fX/7yl0mSddddNy+88EKGDh2aAQMGNHB1fJMrr7wy/fr1S7du3Rq6FL7B9ddfn+HDh+cvf/lL1lhjjTz77LM5+uij061bN/salHDM1fiZtzct5n5Nh7kDLHgzZszIXnvtlaIoctlllzV0OfNUg17a5Ygjjsjtt9+eBx54IN27d68sX2aZZfLZZ59l0qRJtdqPHz8+yyyzzAKuki9r1apVVl555ay33no5++yzs/baa+eiiy4yZo3UU089lQkTJuS73/1uWrRokRYtWuShhx7Kb3/727Ro0SJLL720cWvkOnbsmFVXXTWvv/66/awR69q1a77zne/UWrb66qtXLssza3zGjx9fq42xa3hjxozJfffdl4MOOqiyzL7WeJ1wwgk56aST8j//8z9Za6218qMf/SjHHHNMzj777CT2tYbQuXPnNG/e3DZvxBxzNQ3m7U2LuV/TYe7QdNVlbJZZZpnZvtz8888/z8SJE41fA5kVoo8ZMyYjR46snI2eLBzj1SBBelEUOeKII/K3v/0t999/f3r27Flr/XrrrZeWLVvm73//e2XZK6+8krFjx6ZPnz4LulxK1NTUZPr06caskdp6663zr3/9K88++2zlZ/3118++++5b+b9xa9w+/vjjvPHGG+natav9rBHr27dvXnnllVrLXn311fTo0SNJ0rNnzyyzzDK1xu6jjz7KP//5T2PXwK666qp06dIl/fv3ryyzrzVen3zySZo1qz19bd68eWpqapLY1xpCq1atst5669Xa5jU1Nfn73/9umzcwx1xNi3l702Lu13SYOzRddRmbPn36ZNKkSXnqqacqbe6///7U1NRko402WuA1L+pmheivvfZa7rvvviy55JK11i8U49UQ33B66KGHFh06dCgefPDB4r333qv8fPLJJ5U2P/nJT4rll1++uP/++4snn3yy6NOnT9GnT5+GKJf/56STTioeeuihYvTo0cXzzz9fnHTSSUVVVVVx7733FkVhzJqKzTffvDjqqKMqt41b43LccccVDz74YDF69Oji0UcfLbbZZpuic+fOxYQJE4qiMF6N1eOPP160aNGiOOuss4rXXnutGD58eLHYYosV11xzTaXNr371q6Jjx47FLbfcUjz//PPFrrvuWvTs2bOYNm1aA1a+aJs5c2ax/PLLFyeeeOJs6+xrjdOAAQOKZZddtrj99tuL0aNHFzfddFPRuXPn4mc/+1mljX1twbvuuuuK1q1bF8OGDSteeuml4uCDDy46duxYvP/++w1d2iLNMVfTZ97eeJn7NR3mDo3blClTimeeeaZ45plniiTFBRdcUDzzzDPFmDFjiqKo29jssMMOxbrrrlv885//LB555JFilVVWKfbZZ5+GekoLtbLx+uyzz4pddtml6N69e/Hss8/WmntMnz690kdTH68GCdKTzPHnqquuqrSZNm1acdhhhxVLLLFEsdhiixXf//73i/fee68hyuX/OfDAA4sePXoUrVq1KpZaaqli6623roToRWHMmoqvTsiNW+Oy9957F127di1atWpVLLvsssXee+9dvP7665X1xqvxuu2224o111yzaN26ddGrV6/iiiuuqLW+pqamOPXUU4ull166aN26dbH11lsXr7zySgNVS1EUxT333FMkmeM42Ncap48++qg46qijiuWXX75o06ZNseKKKxaDBw+uNTm3rzWMiy++uFh++eWLVq1aFRtuuGHxj3/8o6FLWuQ55mr6zNsbN3O/psHcoXF74IEH5vheNWDAgKIo6jY2//nPf4p99tmnWHzxxYv27dsXBxxwQDFlypQGeDYLv7LxGj169NfOPR544IFKH019vKqKoigWwInvAAAAAADQJDXol40CAAAAAEBjJ0gHAAAAAIASgnQAAAAAACghSAcAAAAAgBKCdAAAAAAAKCFIBwAAAACAEoJ0AAAAAAAoIUgHAAAAmrS33norVVVVefbZZ+fr4zz44IOpqqrKpEmT5uvjAND4CNIBAACARm3gwIGpqqqq/Cy55JLZYYcd8vzzzzdoXbOC9Vk/Sy+9dHbfffe8+eabDVoXAPOeIB2giRk1alSaN2+e/v37N3QpAACwwOywww5577338t577+Xvf/97WrRokZ122qmhy0qSvPLKKxk3blxGjBiRF198MTvvvHNmzpw5W7uiKPL55583QIVfrzHWBNAYCdIBmpgrr7wyP/3pT/Pwww9n3LhxDV0OAAAsEK1bt84yyyyTZZZZJuuss05OOumkvP322/nggw/m2P6hhx7KhhtumNatW6dr16456aSTagXG06dPz5FHHpkuXbqkTZs22WSTTfLEE0/U6uPOO+/Mqquumurq6my55ZZ566235vhYXbp0SdeuXbPZZpvltNNOy0svvZTXX3+9csb6XXfdlfXWWy+tW7fOI488kpqampx99tnp2bNnqqurs/baa+eGG26o9Pff//43++67b5ZaaqlUV1dnlVVWyVVXXZUk+eyzz3LEEUeka9euadOmTXr06JGzzz47yZwvcTNp0qRUVVXlwQcfTJK5rglgUSdIB2hCPv744/z1r3/NoYcemv79+2fYsGG11t96661ZZZVV0qZNm2y55Za5+uqrZ7uG4yOPPJJNN9001dXVWW655XLkkUdm6tSpC/aJAADAt/Dxxx/nmmuuycorr5wll1xytvXvvvtudtxxx2ywwQZ57rnnctlll+XKK6/MkCFDKm1+9rOf5cYbb8zVV1+dp59+OiuvvHK23377TJw4MUny9ttv5wc/+EF23nnnPPvssznooINy0kknfWNt1dXVSb4IvGc56aST8qtf/Sovv/xyevfunbPPPjt/+tOfMnTo0Lz44os55phjst9+++Whhx5Kkpx66ql56aWXctddd+Xll1/OZZddls6dOydJfvvb3+bWW2/N9ddfn1deeSXDhw/PCiusUO9tWN+aABZ1LRq6AADq7vrrr0+vXr2y2mqrZb/99svRRx+dk08+OVVVVRk9enT22GOPHHXUUTnooIPyzDPP5Pjjj691/zfeeCM77LBDhgwZkj/+8Y/54IMPcsQRR+SII46onOECAACN0e23357FF188STJ16tR07do1t99+e5o1m/0cwUsvvTTLLbdcfve736Wqqiq9evXKuHHjcuKJJ+a0007LtGnTctlll2XYsGHp169fkuT3v/99Ro4cmSuvvDInnHBCLrvssqy00ko5//zzkySrrbZa/vWvf+Wcc8752hrfe++9nHfeeVl22WWz2mqr5bHHHkuS/PznP8+2226b5Isz4X/5y1/mvvvuS58+fZIkK664Yh555JFcfvnl2XzzzTN27Nisu+66WX/99ZOkVlA+duzYrLLKKtlkk01SVVWVHj16zNX2rG9NAIs6QTpAE3LllVdmv/32S/LFNSInT56chx56KFtssUUuv/zyrLbaajn33HOTfDHRf+GFF3LWWWdV7n/22Wdn3333zdFHH50kWWWVVfLb3/42m2++eS677LK0adNmgT8nAACoiy233DKXXXZZki8ufXLppZemX79+efzxx2dr+/LLL6dPnz6pqqqqLOvbt28+/vjjvPPOO5k0aVJmzJiRvn37Vta3bNkyG264YV5++eVKHxtttFGtfmeFzF/VvXv3FEWRTz75JGuvvXZuvPHGtGrVqrJ+ViCeJK+//no++eSTSog9y2effZZ11103SXLooYdm9913z9NPP53tttsuu+22WzbeeOMkX3zx6rbbbpvVVlstO+ywQ3baaadst91237wBv6K+NQEs6gTpAE3EK6+8kscffzx/+9vfkiQtWrTI3nvvnSuvvDJbbLFFXnnllWywwQa17rPhhhvWuv3cc8/l+eefz/DhwyvLiqJITU1NRo8endVXX33+PxEAAJgLbdu2zcorr1y5/Yc//CEdOnTI73//+xx00EENWFnyf//3f2nfvn26dOmSdu3azba+bdu2lf9//PHHSZI77rgjyy67bK12rVu3TpL069cvY8aMyZ133pmRI0dm6623zuGHH57zzjsv3/3udzN69Ojcddddue+++7LXXntlm222yQ033FA5O78oikqfM2bMmGPN9a0JYFEnSAdoIq688sp8/vnn6datW2VZURRp3bp1fve739Wpj48//jiHHHJIjjzyyNnWLb/88vOsVgAAmN+qqqrSrFmzTJs2bbZ1q6++em688cYURVE5K/3RRx9Nu3bt0r179yy55JJp1apVHn300cqlUWbMmJEnnnii8unN1VdfPbfeemutfv/xj3/MsZaePXumY8eOdar7O9/5Tlq3bp2xY8eWXjJlqaWWyoABAzJgwIBsuummOeGEE3LeeeclSdq3b5+99947e++9d/bYY4/ssMMOmThxYpZaaqkkX1xiZtaZ5F/+4tFvWxPAokyQDtAEfP755/nTn/6U888/f7aPbe6222659tprs9pqq+XOO++ste6JJ56odfu73/1uXnrppVpn8gAAQFMwffr0vP/++0m+uLTL7373u3z88cfZeeedZ2t72GGH5Te/+U1++tOf5ogjjsgrr7yS008/Pccee2yaNWuWtm3b5tBDD80JJ5yQTp06Zfnll8+vf/3rfPLJJxk0aFCS5Cc/+UnOP//8nHDCCTnooIPy1FNPZdiwYd/6ebRr1y7HH398jjnmmNTU1GSTTTbJ5MmT8+ijj6Z9+/YZMGBATjvttKy33npZY401Mn369Nx+++2VT49ecMEF6dq1a9Zdd900a9YsI0aMyDLLLJOOHTumWbNm+d73vpdf/epX6dmzZyZMmJBTTjllntQEsKgTpAM0Abfffnv++9//ZtCgQenQoUOtdbvvvnuuvPLKXH/99bngggty4oknZtCgQXn22WcrE/1ZZ+GceOKJ+d73vpcjjjgiBx10UNq2bZuXXnopI0eOrPNZ7QAA0BDuvvvudO3aNckXwW+vXr0yYsSIbLHFFnnrrbdqtV122WVz55135oQTTsjaa6+dTp06ZdCgQbVC5V/96lepqanJj370o0yZMiXrr79+7rnnniyxxBJJvvjE5o033phjjjkmF198cTbccMP88pe/zIEHHvitn8svfvGLLLXUUjn77LPz5ptvpmPHjvnud7+b//3f/02StGrVKieffHLeeuutVFdXZ9NNN811111Xee6//vWv89prr6V58+bZYIMNcuedd1Yu6/LHP/4xgwYNynrrrZfVVlstv/71r+t0DfVvqglgUVdVfPnCWQA0SjvvvHNqampyxx13zLbu8ccfz0YbbZTnnnsub731Vo477ri8/fbb6dOnT/bee+8ceuihmTZtWuWLRJ944okMHjw4o0aNSlEUWWmllbL33nubIAMAAAB8DUE6wELsrLPOytChQ/P22283dCkAAAAATZZLuwAsRC699NJssMEGWXLJJfPoo4/m3HPPzRFHHNHQZQEAAAA0aYJ0gIXIa6+9liFDhmTixIlZfvnlc9xxx+Xkk09u6LIAAAAAmjSXdgEAAAAAgBLNGroAAAAAAABozATpAAAAAABQQpAOAAAAAAAlBOkAAAAAAFBCkA4AAAAAACUE6QAAAAAAUEKQDgAAAAAAJQTpAAAAAABQQpAOAAAAAAAlBOkAAAAAAFBCkA4AAAAAACUE6QAAAAAAUEKQDgAAAAAAJQTpAI3YW2+9laqqqgwbNqyhS6nl7rvvzjrrrJM2bdqkqqoqkyZNauiSAAAAAOYbQTqwSBg2bFiqqqpq/XTp0iVbbrll7rrrrgVez4MPPlirlpYtW2bFFVfM/vvvnzfffHOePMZjjz2WM844Y56H3P/5z3+y1157pbq6Opdcckn+/Oc/p23btnNsW9/tPqvNQQcdNMf+Bg8eXGnz4YcfVpYPHDgwiy+++Lx5ggAAAABf0aKhCwBYkH7+85+nZ8+eKYoi48ePz7Bhw7Ljjjvmtttuy0477bTA6znyyCOzwQYbZMaMGXn66adzxRVX5I477si//vWvdOvW7Vv1/dhjj+XMM8/MwIED07Fjx3lTcJInnngiU6ZMyS9+8Ytss802dbpPfbZ7mzZtcuONN+bSSy9Nq1ataq279tpr06ZNm3z66afz7PkAAAAAfBNnpAOLlH79+mW//fbLj370oxx//PH5v//7v7Rs2TLXXnttg9Sz6aabZr/99ssBBxyQiy++OOedd14mTpyYq6++ukHqqYsJEyYkSb3C+fps9x122CEfffTRbGesP/bYYxk9enT69+//reoHAAAAqC9BOrBI69ixY6qrq9OiRe0P6EydOjXHHXdclltuubRu3TqrrbZazjvvvBRFkSSZNm1aevXqlV69emXatGmV+02cODFdu3bNxhtvnJkzZ9a7nq222ipJMnr06NJ2999/fzbddNO0bds2HTt2zK677pqXX365sv6MM87ICSeckCTp2bNn5XIob731Vmm/I0aMyHrrrZfq6up07tw5++23X959993K+i222CIDBgxIkmywwQapqqrKwIED6/08v267J8myyy6bzTbbLH/5y19qLR8+fHjWWmutrLnmmvV+PAAAAIBvw6VdgEXK5MmT8+GHH6YoikyYMCEXX3xxPv744+y3336VNkVRZJdddskDDzyQQYMGZZ111sk999yTE044Ie+++24uvPDCVFdX5+qrr07fvn0zePDgXHDBBUmSww8/PJMnT86wYcPSvHnzetf3xhtvJEmWXHLJr21z3333pV+/fllxxRVzxhlnZNq0abn44ovTt2/fPP3001lhhRXygx/8IK+++mquvfbaXHjhhencuXOSZKmllvrafocNG5YDDjggG2ywQc4+++yMHz8+F110UR599NE888wz6dixYwYPHpzVVlstV1xxReVyLSuttNI3Pq+6bPcv++EPf5ijjjoqH3/8cRZffPF8/vnnGTFiRI499liXdQEAAAAWOEE6sEj56jW9W7dunT/+8Y/ZdtttK8tuvfXW3H///RkyZEgGDx6c5IuAfM8998xFF12UI444IiuttFI22mij/OxnP8s555yT73//+xk/fnyuu+66/OY3v8mqq65ap3qmTJmSDz/8MDNmzMgzzzyTo446KlVVVdl9992/9j4nnHBCOnXqlFGjRqVTp05Jkt122y3rrrtuTj/99Fx99dXp3bt3vvvd7+baa6/NbrvtlhVWWKG0jhkzZuTEE0/MmmuumYcffjht2rRJkmyyySbZaaedcuGFF+bMM8/Mtttum3fffTdXXHFF+vXrl/XXX79Oz7Mu2/3L9thjjxxxxBG5+eabs99+++Xee+/Nhx9+mH322SdXXXVVnR4TAAAAYF5xaRdgkXLJJZdk5MiRGTlyZK655ppsueWWOeigg3LTTTdV2tx5551p3rx5jjzyyFr3Pe6441IURa1rd59xxhlZY401MmDAgBx22GHZfPPNZ7tfmQMPPDBLLbVUunXrlv79+2fq1Km5+uqrvzagfu+99/Lss89m4MCBlRA9SXr37p1tt902d955Z50f+8uefPLJTJgwIYcddlglRE+S/v37p1evXrnjjjvmqt9Z6rLdv2yJJZbIDjvsULmG+l/+8pdsvPHG6dGjx7eqAwAAAGBuOCMdWKRsuOGGtULqffbZJ+uuu26OOOKI7LTTTmnVqlXGjBmTbt26pV27drXuu/rqqydJxowZU1nWqlWr/PGPf8wGG2yQNm3a5KqrrkpVVVWd6znttNOy6aabpnnz5uncuXNWX331OV43fJZZj73aaqvNtm711VfPPffck6lTp6Zt27Z1ruGb+u3Vq1ceeeSRevX3VXXZ7l/1wx/+MD/60Y8yduzY3Hzzzfn1r3/9rWoAAAAAmFvOSAcWac2aNcuWW26Z9957L6+99tpc9XHPPfckST799NN697HWWmtlm222yZZbbpm11lqrNERfmNRlu++yyy5p3bp1BgwYkOnTp2evvfZawFUCAAAAfEGQDizyPv/88yTJxx9/nCTp0aNHxo0blylTptRq9+9//7uyfpbnn38+P//5z3PAAQdk3XXXzUEHHZTJkyfPt1pnPfYrr7wy27p///vf6dy5c+Vs9PqcGV/W7yuvvDJfLqny1e3+VdXV1dltt93y4IMPZtttt618YSoAAADAgiZIBxZpM2bMyL333ptWrVpVLt2y4447ZubMmfnd735Xq+2FF16Yqqqq9OvXr3LfgQMHplu3brnooosybNiwjB8/Psccc8x8q7dr165ZZ511cvXVV2fSpEmV5S+88ELuvffe7LjjjpVlswL1L7f7Ouuvv366dOmSoUOHZvr06ZXld911V15++eX0799/nj2HZM7bfU6OP/74nH766Tn11FPn6eMDAAAA1MeicQ0BgP/nrrvuqpxZPmHChPzlL3/Ja6+9lpNOOint27dPkuy8887ZcsstM3jw4Lz11ltZe+21c++99+aWW27J0UcfnZVWWilJMmTIkDz77LP5+9//nnbt2qV379457bTTcsopp2SPPfaoFWrPS+eee2769euXPn36ZNCgQZk2bVouvvjidOjQIWeccUal3XrrrZckGTx4cP7nf/4nLVu2zM477zzH66e3bNky55xzTg444IBsvvnm2WeffTJ+/PhcdNFFWWGFFb71Hwfqst3nZO21187aa6/9rR4bAAAA4NsSpAOLlNNOO63y/zZt2qRXr1657LLLcsghh1SWN2vWLLfeemtOO+20/PWvf81VV12VFVZYIeeee26OO+64JMnTTz+dX/7ylzniiCOy5ZZbVu570kkn5ZZbbsmPf/zjvPjii+nYseM8fw7bbLNN7r777px++uk57bTT0rJly2y++eY555xz0rNnz0q7DTbYIL/4xS8ydOjQ3H333ampqcno0aO/9otIBw4cmMUWWyy/+tWvcuKJJ6Zt27b5/ve/n3POOedbP4+6bHcAAACAxqqqKIqioYsAAAAAAIDGyjXSAQAAAACghCAdAAAAAABKCNIBAAAAAKCEIB0AAAAAAEoI0gEAAAAAoIQgHQAAAAAASgjSAQAAAACgRIu5vWNNTU3GjRuXdu3apaqqal7WBAAAC62iKDJlypR069YtzZo5rwUAAJqCuQ7Sx40bl+WWW25e1gIAAIuMt99+O927d2/oMgAAgDqY6yC9Xbt2Sb44AGjfvv08KwgAABZmH330UZZbbrnKfBoAAGj85jpIn3U5l/bt2wvSAQCgnlweEQAAmg4XZQQAAAAAgBKCdAAAAAAAKCFIBwAA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QpAOAAAAAAAlBOkAAAAAAFBCkA4AAAAAACVaNHQBc2vs2LEZNGhQZsyYkZYtW+bKK6/M8ssv39BlAQDz0WeffZZbbrkl48aNS7du3bLrrrumefPmef755zNx4sR07NgxSTJp0qR06tQpvXv3TvPmzev9ODNnzqz0+W36WRD9zq9aF0a2FQAAMLeaZJC+1VZbpaampnJ7xowZ2X///dOsWbPcf//9DVgZADC/DB06NCNGjMjMmTMryy677LJUV1dn6tSpc7zPMsssk8MOOyybbbZZnR/n4YcfzqWXXpr333//W/WzIPqdX7UujGwrAADg22hyl3b5coi+2GKL5ac//WkWW2yxJElNTU222mqrhiwPAJgPhg4dmuuuuy7t27fP8ccfnxtvvDG77LJLampqMnXq1PTu3TtJstZaa2WttdZKVVVVfvzjH2fFFVfM6aefnocffrhOj/Pwww/n9NNPz4orrphLLrkkd955Zy655JJ697Mg+p1ftS6MbCsAAODbalJB+tixYysh+vXXX58777wzu+++e+68885cf/31Sb4I08eOHduQZQIA89Bnn32WESNGZIkllsiIESOy0047pWPHjnn88cfTp0+fdOzYMc8//3y+973v5aKLLspFF12UPn365Pbbb8+ZZ56ZPn365LLLLqt1JvuczJw5M5deemn69OmTIUOGZI011shiiy2WNdZYI0OGDKlzPwui3/lV68LItgIAAOaFOl/aZfr06Zk+fXrl9kcffTRfCiozaNCgJF+cid6lS5da67p06ZLFFlssn3zySQYNGpSRI0cu8Prg2xgzZkxDl7DQsm0XPNucefk7cMstt2TmzJkZNGhQWrT4Yury/PPP5/3338+pp56ahx56KNdff32WXXbZNGv2xTkC++67bw4//PC88MILlf8///zzWXfddb/2cb7c56x+ZmnWrFmd+1kQ/c6vWhdGthUAADAv1DlIP/vss3PmmWfOz1q+0YwZM5L8/4H6V+2///4ZOnRopR00JWeddVZDlwDzjN9n5qVx48YlSfr06VNZNnHixCRJz5498+qrryZJrT/49+zZs9Ju1v1m3efrfLnPOflyn/UxP/qdX7UujGwrAABgXqhzkH7yySfn2GOPrdz+6KOPstxyy82Xor5Oy5YtM2PGjFx55ZXZfffdZ1v/pz/9qdIOmprBgwenR48eDV3G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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Выбираем столбцы для анализа\n", "columns_to_check = ['Age', 'BloodPressure', 'BMI']\n", "\n", "# Функция для подсчета выбросов\n", "def count_outliers(df, columns):\n", " outliers_count = {}\n", " for col in columns:\n", " Q1 = df[col].quantile(0.25)\n", " Q3 = df[col].quantile(0.75)\n", " IQR = Q3 - Q1\n", " lower_bound = Q1 - 1.5 * IQR\n", " upper_bound = Q3 + 1.5 * IQR\n", " \n", " # Считаем количество выбросов\n", " outliers = df[(df[col] < lower_bound) | (df[col] > upper_bound)]\n", " outliers_count[col] = len(outliers)\n", " \n", " return outliers_count\n", "\n", "# Подсчитываем выбросы\n", "outliers_count = count_outliers(df, columns_to_check)\n", "\n", "# Выводим количество выбросов для каждого столбца\n", "for col, count in outliers_count.items():\n", " print(f\"Количество выбросов в столбце '{col}': {count}\")\n", "\n", "# Создаем диаграммы размахов\n", "plt.figure(figsize=(15, 10))\n", "for i, col in enumerate(columns_to_check, 1):\n", " plt.subplot(2, 2, i)\n", " sns.boxplot(x=df[col])\n", " plt.title(f'Box Plot of {col}')\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В каждом из выбранных столбцов присутствуют выбросы. Очистим их." ] }, { "cell_type": "code", "execution_count": 549, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Количество удаленных строк: 61\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABdIAAAJOCAYAAACz9fURAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABY+klEQVR4nO3dd5gV5fk//nsX2EIvgjRBioJBbFiCKGhQFBH1Y/3aAioRRYMtKkoUG2IvsYGxYBQxgjUKKjYMaGJFjRUURUXRiCBdYOf3h7898bDLUGRZ2H29rmsv3Zk5c+55ZpjnmffOmZOTJEkSAAAAAABAqXLLuwAAAAAAANiQCdIBAAAAACCFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0qn0Pvvss8jJyYmRI0eWdylZnnrqqdhuu+2ioKAgcnJyYs6cOeVd0hr74osvoqCgICZPnrxWr99Q983auuiiiyInJyfz+9KlS2OzzTaLW2+9tRyrAvjZhnrOLav+MCcnJy666KJ1sq418eKLL0ZOTk68+OKL6/29KxrjjGzGGcCGbkM9727s194DBgyIvffee61f37dv39h8883XXUHlbMUx3vDhw6NFixaxZMmS8iuKCkOQzjozcuTIyMnJyfpp1KhR7LnnnjF+/Pj1Xk/xhWrxT7Vq1aJ169bx+9//Pj799NN18h4vv/xyXHTRReu8o/3+++/j8MMPj8LCwrjlllvi3nvvjRo1aqzydbfeemvk5OTELrvssk7rWVuXXHJJ7LLLLtGlS5cS81588cU4+OCDo3HjxpGXlxeNGjWK3r17x8MPP1wOlZaPatWqxZlnnhlDhw6NxYsXl3c5wDqiP1x31qQ/3NDafU307ds3q+7atWvHtttuG9dee62LvhTGGemMM6Di2tD6PGON0tu9eJl+/fqVur7Bgwdnlvnvf/+bmd63b9+oWbPmatU/ffr0uOOOO+L8888vMe/HH3+Miy++OLbddtuoWbNmFBYWxtZbbx3nnntuzJw5c7XWXxH07ds3fvrppxgxYkR5l0IFULW8C6DiueSSS6JVq1aRJEnMmjUrRo4cGfvtt1/84x//iP3333+91zNw4MDYaaedYunSpfHmm2/G7bffHk8++WS8++670bRp01+17pdffjkuvvji6Nu3b9StW3fdFBwRr732WsybNy8uvfTS2GuvvVb7daNGjYrNN988Xn311Zg2bVq0bdt2ndW0pr777ru455574p577ikxb8iQIXHJJZfEFltsEf3794+WLVvG999/H+PGjYtDDjkkRo0aFUcddVQ5VL3+HXfccTFo0KC4//774/jjjy/vcoB1SH/4661Nf7ihtfvqys/PjzvuuCMiIubMmRMPPfRQ/OlPf4rXXnstHnjggXKubsNjnLF6jDOgYtvQ+jxjjZLtXlBQEA899FDceuutkZeXlzVv9OjRUVBQ8Kv+2HnjjTdGq1atYs8998ya/umnn8Zee+0VM2bMiMMOOyxOPPHEyMvLi3feeSfuvPPOeOSRR+Ljjz9e6/fdmBQUFESfPn3iuuuuiz/+8Y9Zn96CNSVIZ53r2bNn7LjjjpnfTzjhhNh0001j9OjR5dKZ77777nHooYdGxM8XE1tuuWUMHDgw7rnnnjjvvPPWez2r49tvv42IWKMBwvTp0+Pll1+Ohx9+OPr37x+jRo2KIUOGlFGFq3bfffdF1apVo3fv3lnTx44dG5dcckkceuihcf/990e1atUy884+++x4+umnY+nSpeu73HJTt27d6NGjR4wcOdIFLlQw+sNfb236ww2t3VdX1apV45hjjsn8PmDAgNhll13i73//e1x33XWlBhBJksTixYujsLBwfZb6qyxbtiyKiopKhAlryjhj9RhnQMW2ofV5xhol233fffeNxx9/PMaPHx8HHnhgZvrLL78c06dPj0MOOSQeeuihtap96dKlMWrUqDjppJOypi9btiwOPvjgmDVrVrz44oux2267Zc0fOnRoXHnllWv1nhurww8/PK666qp44YUX4ne/+115l8NGzKNdKHN169aNwsLCqFo1++82CxYsiLPOOis222yzyM/Pj3bt2sU111wTSZJERMSiRYuiffv20b59+1i0aFHmdbNnz44mTZrErrvuGsuXL1/jeopPmtOnT09d7vnnn4/dd989atSoEXXr1o0DDzwwPvjgg8z8iy66KM4+++yIiGjVqlXmI1mfffZZ6nrHjBkTnTp1isLCwthkk03imGOOia+++iozf4899og+ffpERMROO+0UOTk50bdv31Vu16hRo6JevXrRq1evOPTQQ2PUqFGlLvf999/HscceG7Vr1466detGnz594u233y71WXUffvhhHHrooVG/fv0oKCiIHXfcMR5//PFV1hIR8eijj8Yuu+xS4iNpF1xwQdSvXz/uuuuurIvbYvvss88qB32rU9fs2bPjT3/6U3Ts2DFq1qwZtWvXjp49e8bbb7+dtVzxxxAffPDBGDp0aDRv3jwKCgqie/fuMW3atBLv/e9//zv23XffqFOnTlSvXj26detW6rNZJ02aFDvttFMUFBREmzZtUj9Gtvfee8ekSZNi9uzZqdsNbNz0h9nKqj9c0cravTRvvfVW9OzZM2rXrh01a9aM7t27x7/+9a8Sy3366adx2GGHRf369aN69erx29/+Np588skSy3355Zdx0EEHRY0aNaJRo0ZxxhlnrPajWnJzc2OPPfaIiMi05eabbx77779/PP3007HjjjtGYWFhpn+ZM2dOnH766ZnjqG3btnHllVdGUVFR1nofeOCB6NSpU9SqVStq164dHTt2jBtvvDEzf+nSpXHxxRfHFltsEQUFBdGgQYPYbbfdYsKECZll9thjj0xtv7TiM1aLn4V7zTXXxA033BBt2rSJ/Pz8eP/99yPCOMM4A1jXjDWybQhjjWbNmkXXrl3j/vvvz5o+atSo6NixY2y99dZr/H7FJk2aFP/9739L3En/0EMPxdtvvx2DBw8uEaJHRNSuXTuGDh2auu6ioqK44YYbokOHDlFQUBCbbrpp9O/fP3744Yes5R577LHo1atXNG3aNPLz86NNmzZx6aWXljhe9thjj9h6663j/fffjz333DOqV68ezZo1i6uuuqrEey9ZsiSGDBkSbdu2jfz8/Nhss83inHPOKTGGWrJkSZxxxhnRsGHDqFWrVhxwwAHx5Zdflro9nTp1ivr168djjz2Wut2wKu5IZ52bO3du/Pe//40kSeLbb7+Nm266KebPn591l1WSJHHAAQfECy+8ECeccEJst9128fTTT8fZZ58dX331VVx//fVRWFgY99xzT3Tp0iUGDx4c1113XUREnHLKKTF37twYOXJkVKlSZY3r++STTyIiokGDBitd5tlnn42ePXtG69at46KLLopFixbFTTfdFF26dIk333wzNt988zj44IPj448/jtGjR8f1118fm2yySURENGzYcKXrHTlyZBx33HGx0047xbBhw2LWrFlx4403xuTJk+Ott96KunXrxuDBg6Ndu3Zx++23Zz4y1qZNm1Vu16hRo+Lggw+OvLy8OPLII+O2226L1157LXbaaafMMkVFRdG7d+949dVX4+STT4727dvHY489lhk8/NJ7770XXbp0iWbNmsWgQYOiRo0a8eCDD8ZBBx0UDz30UPzf//3fSmtZunRpvPbaa3HyySdnTZ86dWp8+OGHcfzxx0etWrVWuU2lWd26Pv3003j00UfjsMMOi1atWsWsWbNixIgR0a1bt3j//fdL3Nl3xRVXRG5ubvzpT3+KuXPnxlVXXRVHH310/Pvf/84s8/zzz0fPnj2jU6dOMWTIkMjNzY277747fve738U///nP2HnnnSMi4t13340ePXpEw4YN46KLLoply5bFkCFDYtNNNy11mzp16hRJksTLL7+8Qd8tCawZ/WH59Ier0+6lee+992L33XeP2rVrxznnnBPVqlWLESNGxB577BETJ07MfP/IrFmzYtddd42FCxfGwIEDo0GDBnHPPffEAQccEGPHjs30Q4sWLYru3bvHjBkzYuDAgdG0adO499574/nnn1/lNhQrbR999NFHceSRR0b//v3jD3/4Q7Rr1y4WLlwY3bp1i6+++ir69+8fLVq0iJdffjnOO++8+Prrr+OGG26IiIgJEybEkUceGd27d8/cifbBBx/E5MmT47TTTouIn8OKYcOGRb9+/WLnnXeOH3/8MV5//fV488031/qLzO6+++5YvHhxnHjiiZGfnx/169c3zjDOANYBY42NY6xx1FFHxWmnnRbz58+PmjVrxrJly2LMmDFx5pln/qrHurz88suRk5MT22+/fdb04j/+HnvssWu97v79+2facODAgTF9+vS4+eab46233orJkydn/lg9cuTIqFmzZpx55plRs2bNeP755+PCCy+MH3/8Ma6++uqsdf7www+x7777xsEHHxyHH354jB07Ns4999zo2LFj9OzZMyJ+ziwOOOCAmDRpUpx44omx1VZbxbvvvhvXX399fPzxx/Hoo49m1tevX7+477774qijjopdd901nn/++ejVq9dKt2mHHXZY6y8oh4wE1pG77747iYgSP/n5+cnIkSOzln300UeTiEguu+yyrOmHHnpokpOTk0ybNi0z7bzzzktyc3OTl156KRkzZkwSEckNN9ywynpeeOGFJCKSu+66K/nuu++SmTNnJk8++WSy+eabJzk5Oclrr72WJEmSTJ8+PYmI5O677868drvttksaNWqUfP/995lpb7/9dpKbm5v8/ve/z0y7+uqrk4hIpk+fvsp6fvrpp6RRo0bJ1ltvnSxatCgz/YknnkgiIrnwwgsz04rbsrjGVXn99deTiEgmTJiQJEmSFBUVJc2bN09OO+20rOUeeuihEu23fPny5He/+12JNujevXvSsWPHZPHixZlpRUVFya677ppsscUWqfVMmzYtiYjkpptuypr+2GOPJRGRXH/99au1XaXtm9Wta/Hixcny5ctLrC8/Pz+55JJLMtOKj5OtttoqWbJkSWb6jTfemERE8u6772beY4sttkj22WefpKioKLPcwoULk1atWiV77713ZtpBBx2UFBQUJJ9//nlm2vvvv59UqVIlKe20O3PmzCQikiuvvHK12gXYsOkP05VVf7gm7Z4kSRIRyZAhQzK/H3TQQUleXl7yySefZKbNnDkzqVWrVtK1a9fMtNNPPz2JiOSf//xnZtq8efOSVq1aJZtvvnmm77nhhhuSiEgefPDBzHILFixI2rZtm0RE8sILL2Sm9+nTJ6lRo0by3XffJd99910ybdq05PLLL09ycnKSbbbZJrNcy5Ytk4hInnrqqaxtufTSS5MaNWokH3/8cdb0QYMGJVWqVElmzJiRJEmSnHbaaUnt2rWTZcuWrbQdt91226RXr14rnZ8kSdKtW7ekW7duJab36dMnadmyZeb34mOqdu3aybfffpu1rHGGcQaw9ow10m1IY41TTjklmT17dpKXl5fce++9SZIkyZNPPpnk5OQkn332WTJkyJAkIpLvvvsu87riccGqHHPMMUmDBg1KTN9+++2TOnXqrPL1v3y/X/bf//znP5OISEaNGpW13FNPPVVi+sKFC0usr3///kn16tWz+tJu3bolEZH87W9/y0xbsmRJ0rhx4+SQQw7JTLv33nuT3NzcrHFWkiTJ8OHDk4hIJk+enCRJkkyZMiWJiGTAgAFZyx111FElxnjFTjzxxKSwsDClJWDVPNqFde6WW26JCRMmxIQJE+K+++6LPffcM/r16xcPP/xwZplx48ZFlSpVYuDAgVmvPeussyJJkqxvvL7ooouiQ4cO0adPnxgwYEB069atxOvSHH/88dGwYcNo2rRp9OrVKxYsWBD33HNP1jPNfunrr7+OKVOmRN++faN+/fqZ6dtss03svffeMW7cuNV+7196/fXX49tvv40BAwZEQUFBZnqvXr2iffv2pX4kfHWNGjUqNt1008wXjOTk5MQRRxwRDzzwQNZHqp566qmoVq1a/OEPf8hMy83NjVNOOSVrfbNnz47nn38+Dj/88Jg3b17897//jf/+97/x/fffxz777BNTp07N+kjcir7//vuIiKhXr17W9B9//DEiYq3vEluTuvLz8yM39+dT3PLly+P777+PmjVrRrt27eLNN98sse7jjjsu63mtu+++e0RE5lvmp0yZElOnTo2jjjoqvv/++8x7L1iwILp37x4vvfRSFBUVxfLly+Ppp5+Ogw46KFq0aJFZ31ZbbRX77LNPqdtV3E6//KZ2YOOnPyxdWfaHEavX7itavnx5PPPMM3HQQQdF69atM9ObNGkSRx11VEyaNCnTh40bNy523nnnrI9K16xZM0488cT47LPPMo8tGTduXDRp0iTzrNiIiOrVq8eJJ55Yag0LFiyIhg0bRsOGDaNt27Zx/vnnR+fOneORRx7JWq5Vq1Yl+pMxY8bE7rvvHvXq1cv0T8Uf9V6+fHm89NJLEfHzR88XLFiQ9ZiWFdWtWzfee++9mDp16kqXWVOHHHJI1l2DxhnGGcC6YaxRug1trFGvXr3Yd999Y/To0RERcf/998euu+4aLVu2/FV1fP/99yX6woif+8O17Qsjfh5X1KlTJ/bee++scUWnTp2iZs2a8cILL2SW/eX3tBT3nbvvvnssXLgwPvzww6z11qxZM+uu/by8vNh5550zfWHxe2+11VbRvn37rPcufkxQ8XsXHxsrHp+nn376SrerXr16sWjRoli4cOEatgj8j0e7sM7tvPPOWR3lkUceGdtvv32ceuqpsf/++0deXl58/vnn0bRp0xIn96222ioiIj7//PPMtLy8vLjrrrsyz4G8++671+hbli+88MLYfffdo0qVKrHJJpvEVlttlfqc1OL3bteuXYl5W221VTz99NOxYMGCqFGjxmrXsKr1tm/fPiZNmrRG6yu2fPnyeOCBB2LPPffMevbcLrvsEtdee20899xz0aNHj0wNTZo0ierVq2eto23btlm/T5s2LZIkiQsuuCAuuOCCUt/322+/jWbNmqXWlvz/z9wrVrt27Yj4uYNdG2tSV1FRUdx4441x6623xvTp07P+oFDaRwt/eTEa8b+LzuJnwBUHCqU9BqfY3LlzY8mSJbFo0aLYYostSsxv165dqYPB4nby7eFQsegP13y9v6Y/LLY67b6i7777LhYuXLjSbS0qKoovvvgiOnToEJ9//nnmMS8rLhfx8/ZtvfXW8fnnn0fbtm1L7KPS3iMioqCgIP7xj39ExM8hbatWraJ58+YllmvVqlWJaVOnTo133nlnpR9xL/4itQEDBsSDDz4YPXv2jGbNmkWPHj3i8MMPj3333Tez7CWXXBIHHnhgbLnllrH11lvHvvvuG8cee2xss802pa57daxYs3GGcQawbhhrrPl6y2uscdRRR8Wxxx4bM2bMiEcffbTUZ4OvjRX7woif+8NfhtNraurUqTF37txo1KhRqfOLxxURPz8S7c9//nM8//zzmT9oF5s7d27W782bNy9xPNWrVy/eeeedrPf+4IMPVjmm+fzzzyM3N7fEo3hWNs6K0B+ybgjSKXO5ubmx5557xo033hhTp06NDh06rPE6nn766YiIWLx4cUydOrXUi8iV6dixY4kv36hInn/++fj666/jgQceiAceeKDE/FGjRmWC9NVV/MVkf/rTn1Z6d9OK4fsvFV9ArvhFJO3bt4+In5/tuTbWpK7LL788Lrjggjj++OPj0ksvjfr160dubm6cfvrpJb54LSJW+sy/4s62+DVXX311bLfddqUuW7NmzdX+ErlfKm6n4mf9ARWT/rB8rIt2Xx+qVKmyWvvnl3d+FSsqKoq99947zjnnnFJfs+WWW0ZERKNGjWLKlCnx9NNPx/jx42P8+PFx9913x+9///u45557IiKia9eu8cknn8Rjjz0WzzzzTNxxxx1x/fXXx/Dhw6Nfv34R8fMFaGkX7iv7IroVazbO+B/jDGBdMtYoH6vT7gcccEDk5+dHnz59YsmSJXH44Yf/6vdt0KBBib4w4uf+8K233oovvvgiNttsszVeb1FRUTRq1ChGjRpV6vzikHvOnDnRrVu3qF27dlxyySXRpk2bKCgoiDfffDPOPffcEv3hqvrC4vfu2LFj5jn9K1qb7Sn2ww8/RPXq1UsdS8HqEqSzXixbtiwiIubPnx8RES1btoxnn3025s2bl/WX8eKP/vzyI07vvPNOXHLJJXHcccfFlClTol+/fvHuu+9GnTp1yqTW4vf+6KOPSsz78MMPY5NNNsn8RXxN/pL5y/UWfyyp2EcffbTWH+saNWpUNGrUKG655ZYS8x5++OF45JFHYvjw4VFYWBgtW7aMF154IRYuXJh1V/q0adOyXlf8sfZq1aqt1UCoRYsWUVhYWOLb2bfccsto165dPPbYY3HjjTdGzZo112i9a1LX2LFjY88994w777wza/qcOXPW6kKy+C/dtWvXTn3vhg0bRmFhYakfiS/tmIr437fYF98VAlRc+sOy6w/TrNjuK2rYsGFUr159pduam5ubuXBr2bLlSpcrnl/83//85z+RJElW+6ysL/g12rRpE/Pnz1+tPjsvLy969+4dvXv3jqKiohgwYECMGDEiLrjggkxIXL9+/TjuuOPiuOOOi/nz50fXrl3joosuygTp9erVK/VOt1/e1ZjGOKMk4wxgXTHW2DDHGoWFhXHQQQfFfffdFz179lwnf9xs3759jBo1KubOnZu1j3r37h2jR4+O++67L84777w1Xm+bNm3i2WefjS5duqSGzi+++GJ8//338fDDD0fXrl0z01fsn9f0vd9+++3o3r176j5v2bJlFBUVxSeffJJ1F3raOGv69On6Qn41z0inzC1dujSeeeaZyMvLy5y09ttvv1i+fHncfPPNWctef/31kZOTk/nG5qVLl0bfvn2jadOmceONN8bIkSNj1qxZccYZZ5RZvU2aNIntttsu7rnnnpgzZ05m+n/+85945plnYr/99stMK+7Uf7ncyuy4447RqFGjGD58eNbdROPHj48PPvgg9dulV2bRokXx8MMPx/777x+HHnpoiZ9TTz015s2bl/nW7n322SeWLl0af/3rXzPrKCoqKhHCN2rUKPbYY48YMWJEfP311yXe97vvvkutq1q1arHjjjvG66+/XmLexRdfHN9//33069cvM9j4pWeeeSaeeOKJUte7JnVVqVKlxN1yY8aMSX3mappOnTpFmzZt4pprril1cFT83lWqVIl99tknHn300ZgxY0Zm/gcffJC5u2NFb7zxRuTk5ETnzp3XqjZg46A//FlZ9IdpSmv3FVWpUiV69OgRjz32WHz22WeZ6bNmzYr7778/dtttt8xjQ/bbb7949dVX45VXXskst2DBgrj99ttj8803j9/85jeZ5WbOnBljx47NLLdw4cK4/fbb1+n2RUQcfvjh8corr5Taz8yZMyfT3xY/W7xYbm5u5pEtxftixWVq1qwZbdu2zdpXbdq0iQ8//DCr33377bdj8uTJq1WvcUZJxhnAumCs8bMNcawR8fMnnoYMGbLSx4etqc6dO0eSJPHGG29kTT/00EOjY8eOMXTo0KzxSrF58+bF4MGDV7reww8/PJYvXx6XXnppiXnLli3L7IPiO8x/2R/+9NNPceutt67N5mTe+6uvvsrKLIotWrQoFixYEBGROW7/8pe/ZC1zww03rHTdb775Zuy6665rXRtEuCOdMjB+/PjMX7e//fbbuP/++2Pq1KkxaNCgzEVo7969Y88994zBgwfHZ599Fttuu20888wz8dhjj8Xpp5+euSvnsssuiylTpsRzzz0XtWrVim222SYuvPDC+POf/xyHHnpoVse6Ll199dXRs2fP6Ny5c5xwwgmxaNGiuOmmm6JOnTpx0UUXZZbr1KlTREQMHjw4/t//+39RrVq16N27d6nPcKtWrVpceeWVcdxxx0W3bt3iyCOPjFmzZsWNN94Ym2+++VoNUB5//PGYN29eHHDAAaXO/+1vfxsNGzaMUaNGxRFHHBEHHXRQ7LzzznHWWWfFtGnTon379vH444/H7NmzIyL7r/y33HJL7LbbbtGxY8f4wx/+EK1bt45Zs2bFK6+8El9++WW8/fbbqbUdeOCBMXjw4Pjxxx8z+z0i4ogjjoh33303hg4dGm+99VYceeSR0bJly/j+++/jqaeeiueeey7uv//+la53devaf//9M3dT7LrrrvHuu+/GqFGjsr5Ebk3k5ubGHXfcET179owOHTrEcccdF82aNYuvvvoqXnjhhahdu3bm2bYXX3xxPPXUU7H77rvHgAEDYtmyZXHTTTdFhw4dsp7/VmzChAnRpUuXUp+pCmy89Ifrrz/8pdVp99JcdtllMWHChNhtt91iwIABUbVq1RgxYkQsWbIk6zmmgwYNitGjR0fPnj1j4MCBUb9+/bjnnnti+vTp8dBDD2W+gPIPf/hD3HzzzfH73/8+3njjjWjSpEnce++9Jb6nZF04++yz4/HHH4/9998/+vbtG506dYoFCxbEu+++G2PHjo3PPvssNtlkk+jXr1/Mnj07fve730Xz5s3j888/j5tuuim22267zIX/b37zm9hjjz2iU6dOUb9+/Xj99ddj7Nixceqpp2be7/jjj4/rrrsu9tlnnzjhhBPi22+/jeHDh0eHDh1KPB91ZYwzshlnAGvDWGPjGmtsu+22se222/6q9/6l3XbbLRo0aBDPPvts1p331apVi4cffjj22muv6Nq1axx++OHRpUuXqFatWrz33ntx//33R7169WLo0KGlrrdbt27Rv3//GDZsWEyZMiV69OgR1apVi6lTp8aYMWPixhtvjEMPPTR23XXXqFevXvTp0ycGDhwYOTk5ce+995b6+LfVdeyxx8aDDz4YJ510UrzwwgvRpUuXWL58eXz44Yfx4IMPxtNPPx077rhjbLfddnHkkUfGrbfeGnPnzo1dd901nnvuuRKfti/2xhtvxOzZs+PAAw9c69ogIiISWEfuvvvuJCKyfgoKCpLtttsuue2225KioqKs5efNm5ecccYZSdOmTZNq1aolW2yxRXL11VdnlnvjjTeSqlWrJn/84x+zXrds2bJkp512Spo2bZr88MMPK63nhRdeSCIiGTNmTGrd06dPTyIiufvuu7OmP/vss0mXLl2SwsLCpHbt2knv3r2T999/v8TrL7300qRZs2ZJbm5uEhHJ9OnTU9/v73//e7L99tsn+fn5Sf369ZOjjz46+fLLL7OWKW7L1157LXVdvXv3TgoKCpIFCxasdJm+ffsm1apVS/773/8mSZIk3333XXLUUUcltWrVSurUqZP07ds3mTx5chIRyQMPPJD12k8++ST5/e9/nzRu3DipVq1a0qxZs2T//fdPxo4dm1pXkiTJrFmzkqpVqyb33ntvqfOfe+655MADD0waNWqUVK1aNWnYsGHSu3fv5LHHHssss7J9szp1LV68ODnrrLOSJk2aJIWFhUmXLl2SV155JenWrVvSrVu3zHIrO05W9t5vvfVWcvDBBycNGjRI8vPzk5YtWyaHH3548txzz2UtN3HixKRTp05JXl5e0rp162T48OHJkCFDkhVPu3PmzEny8vKSO+64Y1VNCmwk9Ifrvz/85bKr2+4RkQwZMiRr2ptvvpnss88+Sc2aNZPq1asne+65Z/Lyyy+XeK9PPvkkOfTQQ5O6desmBQUFyc4775w88cQTJZb7/PPPkwMOOCCpXr16sskmmySnnXZa8tRTTyURkbzwwguZ5fr06ZPUqFFjldvYsmXLpFevXqXOmzdvXnLeeeclbdu2TfLy8pJNNtkk2XXXXZNrrrkm+emnn5IkSZKxY8cmPXr0SBo1apTk5eUlLVq0SPr37598/fXXmfVcdtllyc4775zUrVs3KSwsTNq3b58MHTo0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QToAAAAAAKQQpAMAAAAAQApBOgAAAAAApBCkAwAAAABACkE6AAAAAACkEKQDAAAAAEAKQToAAAAAAKQQpAMAAAAAQApBOgAAAAAApBCkAwAAAABACkE6AAAAAACkEKQDAAAAAEAKQToAAAAAAKQQpAMAAAAAQApBOgAAAAAApBCkAwAAAABACkE6AAAAAACkEKQDAAAAAEAKQToAAAAAAKQQpAMAAAAAQApBOgAAAAAApBCkAwAAAABACkE6AAAAAACkEKQDAAAAAEAKQToAAAAAAKQQpAMAAAAAQApBOgAAAAAApBCkAwAAAABACkE6AAAAAACkEKQDAAAAAEAKQToAAAAAAKQQpAMAAAAAQApBOgAAAAAApBCkAwAAAABACkE6AAAAAACkEKQDAAAAAEAKQToAAAAAAKQQpAMAAAAAQApBOgAAAAAApBCkAwAAAABACkE6AAAAAACkEKQDAAAAAEAKQToAAAAAAKQQpAMAAAAAQApBOgAAAAAApBCkAwAAAABACkE6AAAAAACkEKQDAAAAAEAKQToAAAAAAKSoWt4FAMDGbP78+TFs2LCYOXNmNG3aNM4777yoWbNmeZe1XixfvjzeeeedmD17dtSvXz+22WabqFKlSnmXBQCpFi1aFCNGjIgvv/wymjdvHv3794/CwsLyLgsAWIkN5dpTkA4Aa+mkk06KDz/8MPP79OnTY//994/27dvH8OHDy7GysvfSSy/FrbfeGt98801mWuPGjWPAgAHRtWvXcqwMAFZu8ODBMXny5Mzvr7/+ejz66KPRpUuXGDp0aDlWBgCU5s0334wLL7xwg7j29GgXAFgLxSF6Tk5O9OjRI+64447o0aNH5OTkxIcffhgnnXRSeZdYZl566aUYMmRItG7dOm655ZYYN25c3HLLLdG6desYMmRIvPTSS+VdIgCUUByiV6tWLY466qi477774qijjopq1arF5MmTY/DgweVdIgCwghEjRmww156CdABYQ/Pnz8+E6OPHj4/zzz8/2rZtG+eff36MHz8+E6bPnz+/vEtd55YvXx633nprdO7cOS677LLo0KFDVK9ePTp06BCXXXZZdO7cOW677bZYvnx5eZcKABmLFi3KhOhPPvlknHjiidG8efM48cQT48knn8yE6YsWLSrvUgGAiCgqKoqIiI4dO24w156r/WiXJUuWxJIlSzK///jjj2VSUETE559/XmbrLs/3gtI4BmHDVtq/0WHDhkVExN577x0FBQVZ8woKCmKvvfaKCRMmxLBhw8r1Y+Jl0Xe/88478c0338QFF1wQubnZf4/Pzc2No48+Ok455ZR45513Yvvtt09dl/MfZcWxteGybygrqzq2RowYERERhx12WOTl5WXNy8vLi0MPPTRGjx4dI0aMiNNPP72sylylinrdzYbBPq887GsqgkmTJkVExH777ferrz3XldUO0ocNGxYXX3xxWdaS4dl0VCaOd9j4zJw5MyIiDj/88FLnH3bYYTFhwoTMcuWlLPru2bNnR0REq1atSp1fPL14uTTOf1D5+HdPefnyyy8j4ueL8dLst99+MXr06Mxy5cV1N7Au+PdNRdK0adNSp6/Jtee6stpB+nnnnRdnnnlm5vcff/wxNttsszIpavDgwdGyZcsyWfeKPv/8cycYytX6PN6BNVdaP9G0adOYPn16PPjgg3H++eeXeM2YMWMyy5Wnsui769evHxE/f7Fqhw4dSsyfPn161nJpnP8oK8Z3Gy7/7ikrq/p337x583j99ddj3LhxceKJJ5aYP27cuMxy5amiXnezYdA/Vh7+fVMRvPTSS3HffffFzJkzY5tttikxf02uPdeV1Q7S8/PzIz8/vyxryWjZsmVsueWW6+W9oLw53mHjc95558X+++8fEyZMiDPPPDPr8S6LFy+OZ599NrNceSqLvnubbbaJxo0bx6hRo+Kyyy7L+ohdUVFRjBo1Kpo0aVLqQGdFzn9Q+fh3T3np379/PProozFmzJjo27dv1uNdfvrppxg7dmxmufLkuhtYF/z7piIoKiqK++67L8aNGxc9evT4Vdee64ovGwWANVSzZs1o3759JEkSPXv2jKFDh8bHH38cQ4cOjZ49e0aSJNG+ffuoWbNmeZe6zlWpUiUGDBgQr7zySvz5z3+O9957LxYuXBjvvfde/PnPf45XXnklTj755KhSpUp5lwoAGYWFhdGlS5dYunRp9OrVK0aMGBFffPFFjBgxInr16hVLly6NLl26RGFhYXmXCgBEZILzd999d4O59lztO9IBgP8ZPnx4nHTSSfHhhx/GhAkTYsKECZl57du3j+HDh5djdWWra9eucfHFF8ett94ap5xySmZ6kyZN4uKLL46uXbuWY3UAULqhQ4fG4MGDY/LkyTF69OgY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eOKJeOmll+LEE09cX5vAr+T6P9vqtEdExB/+8IesfuKqq64qp4rLlnwi26raI6LyHBsrqqzXCqVZWVtEVL7jY4O9lkrK0LfffptERDJx4sQkSZJkzpw5SbVq1ZIxY8Zklvnggw+SiEheeeWVsiyl0qpXr15yxx13aPv1aN68eckWW2yRTJgwIenWrVty2mmnJUni+C9rQ4YMSbbddttS52n7snfuuecmu+2220rnFxUVJY0bN06uvvrqzLQ5c+Yk+fn5yejRo9dHiZSTynpOrMznJOeDbKeddlrSpk2bpKioqMLv+169eiXHH3981rSDDz44Ofroo5Mkqfj7fuHChUmVKlWSJ554Imv6DjvskAwePLhCb39EJI888kjm99XZ1vfffz+JiOS1117LLDN+/PgkJycn+eqrr9Zb7aw7rv+zrdgeSZJkjYUqI/lEtuL2SJLKe2xU1muF0qysLZKk8h0fG/K1VJk+I33u3LkREVG/fv2IiHjjjTdi6dKlsddee2WWad++fbRo0SJeeeWVsiyl0lm+fHk88MADsWDBgujcubO2X49OOeWU6NWrV1ZbRzj+14epU6dG06ZNo3Xr1nH00UfHjBkzIkLbrw+PP/547LjjjnHYYYdFo0aNYvvtt4+//vWvmfnTp0+Pb775Jmsf1KlTJ3bZZRf7oIKrzOfEynpOcj74n59++inuu+++OP744yMnJ6fC7/tdd901nnvuufj4448jIuLtt9+OSZMmRc+ePSOi4u/7ZcuWxfLly6OgoCBremFhYUyaNKnCb/8vrc62vvLKK1G3bt3YcccdM8vstddekZubG//+97/Xe838eq7/s63YHsVGjRoVm2yySWy99dZx3nnnxcKFC8ujvPVKPpFtxfYoVhmPjcp8rbCilbVFscp2fGyo11JVy2rFRUVFcfrpp0eXLl1i6623joiIb775JvLy8qJu3bpZy2666abxzTfflFUplcq7774bnTt3jsWLF0fNmjXjkUceid/85jcxZcoUbb8ePPDAA/Hmm29mPQuzmOO/bO2yyy4xcuTIaNeuXXz99ddx8cUXx+677x7/+c9/tP168Omnn8Ztt90WZ555Zpx//vnx2muvxcCBAyMvLy/69OmTaedNN90063X2QcVWmc+Jlfmc5HzwP48++mjMmTMn+vbtGxEV/7gfNGhQ/Pjjj9G+ffuoUqVKLF++PIYOHRpHH310RESF3/e1atWKzp07x6WXXhpbbbVVbLrppjF69Oh45ZVXom3bthV++39pdbb1m2++iUaNGmXNr1q1atSvX7/CtUdl4Po/W2ntERFx1FFHRcuWLaNp06bxzjvvxLnnnhsfffRRPPzww+VYbdmRT2RbWXtEVL5jI6JyXyusKK0tIirf8bEhX0uVWZB+yimnxH/+85+sZ9hQ9tq1axdTpkyJuXPnxtixY6NPnz4xceLE8i6rUvjiiy/itNNOiwkTJpS4E4myV3y3W0TENttsE7vssku0bNkyHnzwwSgsLCzHyiqHoqKi2HHHHePyyy+PiIjtt98+/vOf/8Tw4cOjT58+5Vwd5aGynxMr8znJ+eB/7rzzzujZs2c0bdq0vEtZLx588MEYNWpU3H///dGhQ4eYMmVKnH766dG0adNKs+/vvffeOP7446NZs2ZRpUqV2GGHHeLII4+MN954o7xLgzLl+j/bytrjl98B0LFjx2jSpEl07949Pvnkk2jTps36LrPMySeyraw9fvOb31S6Y6OyXyv80uq0RWU7Pjbka6kyebTLqaeeGk888US88MIL0bx588z0xo0bx08//RRz5szJWn7WrFnRuHHjsiil0snLy4u2bdtGp06dYtiwYbHtttvGjTfeqO3XgzfeeCO+/fbb2GGHHaJq1apRtWrVmDhxYvzlL3+JqlWrxqabbmofrEd169aNLbfcMqZNm+b4Xw+aNGmSuZui2FZbbZX5+FVxO6/4Tdr2QcXlnJitMp2TnA9+9vnnn8ezzz4b/fr1y0yr6Pv+7LPPjkGDBsX/+3//Lzp27BjHHntsnHHGGTFs2LCIqBz7vk2bNjFx4sSYP39+fPHFF/Hqq6/G0qVLo3Xr1pVi+4utzrY2btw4vv3226z5y5Yti9mzZ1e49qjoXP9nW1l7lGaXXXaJiIhp06atj9LWO/lEtpW1R2kq+rHhWuF/VtUWy5cvL/Gain58rGhDupZap0F6kiRx6qmnxiOPPBLPP/98tGrVKmt+p06dolq1avHcc89lpn300UcxY8aMrOdCse4UFRXFkiVLtP160L1793j33XdjypQpmZ8dd9wxjj766Mz/2wfrz/z58+OTTz6JJk2aOP7Xgy5dusRHH32UNe3jjz+Oli1bRkREq1atonHjxln74Mcff4x///vf9kEF5ZyYrTKdk5wPfnb33XdHo0aNolevXplpFX3fL1y4MHJzsy8vqlSpEkVFRRFRefZ9RESNGjWiSZMm8cMPP8TTTz8dBx54YKXa/tXZ1s6dO8ecOXOy7tZ//vnno6ioKBMQsGFz/Z9tVe1RmilTpkTEz3+ErgzkE9mK26M0Ff3YcK3wP6tqiypVqpR4TUU/Pla0QV1LrctvLj355JOTOnXqJC+++GLy9ddfZ34WLlyYWeakk05KWrRokTz//PPJ66+/nnTu3Dnp3Lnzuiyj0ho0aFAyceLEZPr06ck777yTDBo0KMnJyUmeeeaZJEm0fXlY8ZuV7YOyc9ZZZyUvvvhiMn369GTy5MnJXnvtlWyyySbJt99+mySJti9rr776alK1atVk6NChydSpU5NRo0Yl1atXT+67777MMldccUVSt27d5LHHHkveeeed5MADD0xatWqVLFq0qBwrZ32qTOfEynxOcj5IkuXLlyctWrRIzj333BLzKvK+79OnT9KsWbPkiSeeSKZPn548/PDDySabbJKcc845mWUq+r5/6qmnkvHjxyeffvpp8swzzyTbbrttsssuuyQ//fRTkiQVa/vnzZuXvPXWW8lbb72VRERy3XXXJW+99Vby+eefJ0myetu67777Jttvv33y73//O5k0aVKyxRZbJEceeWR5bRJryPV/tlW1x7Rp05JLLrkkef3115Pp06cnjz32WNK6deuka9eu5Vx52ZBPZEtrj8p2bKxMZbpWWJVftkVlPD425GupdRqkR0SpP3fffXdmmUWLFiUDBgxI6tWrl1SvXj35v//7v+Trr79el2VUWscff3zSsmXLJC8vL2nYsGHSvXv3TCeVJNq+PKzYEdgHZeeII45ImjRpkuTl5SXNmjVLjjjiiGTatGmZ+dq+7P3jH/9Itt566yQ/Pz9p3759cvvtt2fNLyoqSi644IJk0003TfLz85Pu3bsnH330UTlVS3moTOfEyn5Oquzng6effjqJiFK3qSLv+x9//DE57bTTkhYtWiQFBQVJ69atk8GDBydLlizJLFPR9/3f//73pHXr1kleXl7SuHHj5JRTTknmzJmTmV+Rtv+FF14o9dqvT58+SZKs3rZ+//33yZFHHpnUrFkzqV27dnLccccl8+bNK4etYW24/s+2qvaYMWNG0rVr16R+/fpJfn5+0rZt2+Tss89O5s6dW76FlxH5RLa09qhsx8bKVKZrhVX5ZVtUxuNjQ76WykmSJCn7+94BAAAAAGDjVCZfNgoAAAAAABWFIB0AAAAAAFII0gEAAAAAIIUgHQAAAAAAUgjSAQAAAAAghSAdAAAAAABSCNIBAAAAACCFIB0AAAAAAFII0gEAqNQ+++yzyMnJiSlTppTp+7z44ouRk5MTc+bMKdP3AQAA1j1BOlQAr7zySlSpUiV69epV3qUAwAanb9++kZOTk/lp0KBB7LvvvvHOO++Ua13FwXrxz6abbhqHHHJIfPrpp+VaFwCQbXXGEsXz/vWvf2W9dsmSJdGgQYPIycmJF198MWv5Rx99dD1tAbAuCNKhArjzzjvjj3/8Y7z00ksxc+bM8i4HADY4++67b3z99dfx9ddfx3PPPRdVq1aN/fffv7zLioiIjz76KGbOnBljxoyJ9957L3r37h3Lly8vsVySJLFs2bJyqHDlNsSaAKAsrM5YYrPNNou77747a9ojjzwSNWvWXJ+lAmVEkA4bufnz58ff//73OPnkk6NXr14xcuTIrPmPP/54bLHFFlFQUBB77rln3HPPPSU+Vj5p0qTYfffdo7CwMDbbbLMYOHBgLFiwYP1uCACUofz8/GjcuHE0btw4tttuuxg0aFB88cUX8d1335W6/MSJE2PnnXeO/Pz8aNKkSQwaNCgrMF6yZEkMHDgwGjVqFAUFBbHbbrvFa6+9lrWOcePGxZZbbhmFhYWx5557xmeffVbqezVq1CiaNGkSXbt2jQsvvDDef//9mDZtWuaO9fHjx0enTp0iPz8/Jk2aFEVFRTFs2LBo1apVFBYWxrbbbhtjx47NrO+HH36Io48+Oho2bBiFhYWxxRZbZC7qf/rppzj11FOjSZMmUVBQEC1btoxhw4ZFROmPuJkzZ07WHXRrWxMAbOxWZyzRp0+feOCBB2LRokWZaXfddVf06dOnPEoG1jFBOmzkHnzwwWjfvn20a9cujjnmmLjrrrsiSZKIiJg+fXoceuihcdBBB8Xbb78d/fv3j8GDB2e9/pNPPol99903DjnkkHjnnXfi73//e0yaNClOPfXU8tgcAChz8+fPj/vuuy/atm0bDRo0KDH/q6++iv322y922mmnePvtt+O2226LO++8My677LLMMuecc0489NBDcc8998Sbb74Zbdu2jX322Sdmz54dERFffPFFHHzwwdG7d++YMmVK9OvXLwYNGrTK2goLCyPi58C72KBBg+KKK66IDz74ILbZZpsYNmxY/O1vf4vhw4fHe++9F2eccUYcc8wxMXHixIiIuOCCC+L999+P8ePHxwcffBC33XZbbLLJJhER8Ze//CUef/zxePDBB+Ojjz6KUaNGxeabb77GbbimNQFARbKysUSnTp1i8803j4ceeigiImbMmBEvvfRSHHvsseVVKrAOVS3vAoBf584774xjjjkmIn7+qNncuXNj4sSJsccee8SIESOiXbt2cfXVV0dERLt27eI///lPDB06NPP6YcOGxdFHHx2nn356RERsscUW8Ze//CW6desWt912WxQUFKz3bQKAde2JJ57IfKx6wYIF0aRJk3jiiSciN7fkfSW33nprbLbZZnHzzTdHTk5OtG/fPmbOnBnnnntuXHjhhbFo0aK47bbbYuTIkdGzZ8+IiPjrX/8aEyZMiDvvvDPOPvvsuO2226JNmzZx7bXXRsTPffC7774bV1555Upr/Prrr+Oaa66JZs2aRbt27eLll1+OiIhLLrkk9t5774j4+U74yy+/PJ599tno3LlzRES0bt06Jk2aFCNGjIhu3brFjBkzYvvtt48dd9wxIiIrKJ8xY0ZsscUWsdtuu0VOTk60bNlyrdpzTWsCgI3d6o4ljj/++LjrrrvimGOOiZEjR8Z+++0XDRs2LI+SgXXMHemwEfvoo4/i1VdfjSOPPDIiIqpWrRpHHHFE3HnnnZn5O+20U9Zrdt5556zf33777Rg5cmTUrFkz87PPPvtEUVFRTJ8+ff1sCACUsT333DOmTJkSU6ZMiVdffTX22Wef6NmzZ3z++ecllv3ggw+ic+fOkZOTk5nWpUuXmD9/fnz55ZfxySefxNKlS6NLly6Z+dWqVYudd945Pvjgg8w6dtlll6z1FofMK2revHnUqFEjmjZtGgsWLIiHHnoo8vLyMvOLA/GIiGnTpsXChQtj7733zuq7//a3v8Unn3wSEREnn3xyPPDAA7HddtvFOeeckwnkI37+srQpU6ZEu3btYuDAgfHMM8+sSTOudU0AsLFb3bHEMcccE6+88kp8+umnMXLkyDj++OPLqWJgXXNHOmzE7rzzzli2bFk0bdo0My1JksjPz4+bb755tdYxf/786N+/fwwcOLDEvBYtWqyzWgGgPNWoUSPatm2b+f2OO+6IOnXqxF//+tfo169fOVYW8c9//jNq164djRo1ilq1apWYX6NGjcz/z58/PyIinnzyyWjWrFnWcvn5+RERmYv6cePGxYQJE6J79+5xyimnxDXXXBM77LBDTJ8+PcaPHx/PPvtsHH744bHXXnvF2LFjM3fUFT8iLiJi6dKlpda8pjUBwMYubSzxy8e/NWjQIPbff/844YQTYvHixdGzZ8+YN29eeZQMrGOCdNhILVu2LP72t7/FtddeGz169Miad9BBB8Xo0aOjXbt2MW7cuKx5K34R2g477BDvv/9+1oAAACq6nJycyM3NzfoysGJbbbVVPPTQQ5EkSeau9MmTJ0etWrWiefPm0aBBg8jLy4vJkydnHo2ydOnSeO211zKPSttqq63i8ccfz1rvv/71r1JradWqVdStW3e16v7Nb34T+fn5MWPGjNRHpjRs2DD69OkTffr0id133z3OPvvsuOaaayIionbt2nHEEUfEEUccEYceemjsu+++MXv27MzHzr/++uvYfvvtIyKyvnj019YEABVJ2lji+OOPj/322y/OPffcqFKlSjlUB5QFQTpspJ544on44Ycf4oQTTog6depkzTvkkEPizjvvjAcffDCuu+66OPfcc+OEE06IKVOmxMiRIyMiMsHAueeeG7/97W/j1FNPjX79+kWNGjXi/fffjwkTJqz2Xe0AsKFbsmRJfPPNNxER8cMPP8TNN98c8+fPj969e5dYdsCAAXHDDTfEH//4xzj11FPjo48+iiFDhsSZZ54Zubm5UaNGjTj55JPj7LPPjvr160eLFi3iqquuioULF8YJJ5wQEREnnXRSXHvttXH22WdHv3794o033sj0wb9GrVq14k9/+lOcccYZUVRUFLvttlvMnTs3Jk+eHLVr144+ffrEhRdeGJ06dYoOHTrEkiVL4oknnoitttoqIiKuu+66aNKkSWy//faRm5sbY8aMicaNG0fdunUjNzc3fvvb38YVV1wRrVq1im+//Tb+/Oc/r5OaAGBjtyZjiX333Te+++67qF279vouEyhDgnTYSN15552x1157lQjRI34O0q+66qqYN29ejB07Ns4666y48cYbo3PnzjF48OA4+eSTMx+13mabbWLixIkxePDg2H333SNJkmjTpk0cccQR63uTAKDMPPXUU9GkSZOI+Dn4bd++fYwZMyb22GOP+Oyzz7KWbdasWYwbNy7OPvvs2HbbbaN+/fpxwgknZIXKV1xxRRQVFcWxxx4b8+bNix133DGefvrpqFevXkT8/Hi0hx56KM4444y46aabYuedd47LL798nTwn9dJLL42GDRvGsGHD4tNPP426devGDjvsEOeff35EROTl5cV5550Xn332WRQWFsbuu+8eDzzwQGbbr7rqqpg6dWpUqVIldtpppxg3blzmsS533XVXnHDCCdGpU6do165dXHXVVSU++bY2NQHAxi5tLLGinJyc2GSTTdZzhUBZy0l++RBEoMIbOnRoDB8+PL744ovyLgUAAAAANgruSIcK7tZbb42ddtopGjRoEJMnT46rr746Tj311PIuCwAAAAA2GoJ0qOCmTp0al112WcyePTtatGgRZ511Vpx33nnlXRYAAAAAbDQ82gUAAAAAAFLklncBAAAAAACwIROkAwAAAABACkE6AAAAAACkEKQDAAAAAEAKQToAAAAAAKQQpAMAAAAAQApBOgAAAAAApBCkAwAAAABACkE6AAAAAACk+P8A6lvWrEI2sPoAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Выбираем столбцы для очистки\n", "columns_to_clean = ['Age', 'BloodPressure', 'BMI']\n", "\n", "# Функция для удаления выбросов\n", "def remove_outliers(df, columns):\n", " for col in columns:\n", " Q1 = df[col].quantile(0.25)\n", " Q3 = df[col].quantile(0.75)\n", " IQR = Q3 - Q1\n", " lower_bound = Q1 - 1.5 * IQR\n", " upper_bound = Q3 + 1.5 * IQR\n", " \n", " # Удаляем строки, содержащие выбросы\n", " df = df[(df[col] >= lower_bound) & (df[col] <= upper_bound)]\n", " \n", " return df\n", "\n", "# Удаляем выбросы\n", "df_cleaned = remove_outliers(df, columns_to_clean)\n", "\n", "# Выводим количество удаленных строк\n", "print(f\"Количество удаленных строк: {len(df) - len(df_cleaned)}\")\n", "\n", "# Создаем диаграммы размаха для очищенных данных\n", "plt.figure(figsize=(15, 6))\n", "\n", "# Диаграмма размаха для Age\n", "plt.subplot(1, 3, 1)\n", "sns.boxplot(x=df_cleaned['Age'])\n", "plt.title('Box Plot of Age (Cleaned)')\n", "plt.xlabel('Age')\n", "\n", "# Диаграмма размаха для BloodPressure\n", "plt.subplot(1, 3, 2)\n", "sns.boxplot(x=df_cleaned['BloodPressure'])\n", "plt.title('Box Plot of BloodPressure (Cleaned)')\n", "plt.xlabel('BloodPressure')\n", "\n", "# Диаграмма размаха для BMI\n", "plt.subplot(1, 3, 3)\n", "sns.boxplot(x=df_cleaned['BMI'])\n", "plt.title('Box Plot of BMI (Cleaned)')\n", "plt.xlabel('BMI')\n", "\n", "plt.tight_layout()\n", "plt.show()\n", "\n", "# Сохраняем очищенный датасет\n", "df_cleaned.to_csv(\"..//..//static//csv//diabetes_cleaned.csv\", index=False)\n", "df = df_cleaned" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Количество выбросов уменьшилось.\n", "\n", "### Теперь проверим на пустые значения" ] }, { "cell_type": "code", "execution_count": 550, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Pregnancies 0\n", "Glucose 0\n", "BloodPressure 0\n", "SkinThickness 0\n", "Insulin 0\n", "BMI 0\n", "DiabetesPedigreeFunction 0\n", "Age 0\n", "Outcome 0\n", "dtype: int64\n", "\n", "Pregnancies False\n", "Glucose False\n", "BloodPressure False\n", "SkinThickness False\n", "Insulin False\n", "BMI False\n", "DiabetesPedigreeFunction False\n", "Age False\n", "Outcome False\n", "dtype: bool\n", "\n" ] } ], "source": [ "# Количество пустых значений признаков\n", "print(df.isnull().sum())\n", "\n", "print()\n", "\n", "# Есть ли пустые значения признаков\n", "print(df.isnull().any())\n", "\n", "print()\n", "\n", "# Процент пустых значений признаков\n", "for i in df.columns:\n", " null_rate = df[i].isnull().sum() / len(df) * 100\n", " if null_rate > 0:\n", " print(f\"{i} процент пустых значений: %{null_rate:.2f}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Пустых значений в датасете нет. \n", "\n", "### Можно перейти к созданию выборок" ] }, { "cell_type": "code", "execution_count": 551, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Размер обучающей выборки: (424, 8)\n", "Размер контрольной выборки: (141, 8)\n", "Размер тестовой выборки: (142, 8)\n" ] } ], "source": [ "# Разделение на признаки (X) и целевую переменную (y)\n", "# Предположим, что Outcome - это целевая переменная\n", "X = df.drop('Outcome', axis=1)\n", "y = df['Outcome']\n", "\n", "# Разбиение на обучающую и остальную выборку (контрольную + тестовую)\n", "X_train, X_rem, y_train, y_rem = train_test_split(X, y, train_size=0.6, random_state=42)\n", "\n", "# Разбиение остатка на контрольную и тестовую выборки\n", "X_val, X_test, y_val, y_test = train_test_split(X_rem, y_rem, test_size=0.5, random_state=42)\n", "\n", "# Вывод размеров выборок\n", "print(\"Размер обучающей выборки:\", X_train.shape)\n", "print(\"Размер контрольной выборки:\", X_val.shape)\n", "print(\"Размер тестовой выборки:\", X_test.shape)" ] }, { "cell_type": "code", "execution_count": 552, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Распределение классов в обучающей выборке:\n", "Outcome\n", "0 0.658019\n", "1 0.341981\n", "Name: proportion, dtype: float64\n", "\n", "Распределение классов в контрольной выборке:\n", "Outcome\n", "0 0.680851\n", "1 0.319149\n", "Name: proportion, dtype: float64\n", "\n", "Распределение классов в тестовой выборке:\n", "Outcome\n", "0 0.640845\n", "1 0.359155\n", "Name: proportion, dtype: float64\n" ] } ], "source": [ "# Функция для анализа сбалансированности\n", "def analyze_balance(y_train, y_val, y_test):\n", " print(\"Распределение классов в обучающей выборке:\")\n", " print(y_train.value_counts(normalize=True))\n", " \n", " print(\"\\nРаспределение классов в контрольной выборке:\")\n", " print(y_val.value_counts(normalize=True))\n", " \n", " print(\"\\nРаспределение классов в тестовой выборке:\")\n", " print(y_test.value_counts(normalize=True))\n", "\n", "# Анализ сбалансированности\n", "analyze_balance(y_train, y_val, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Такие выборки сложно назвать сбалансированными. В этот раз используем метод выборки с недостатком (undersampling)." ] }, { "cell_type": "code", "execution_count": 553, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Сбалансированность обучающей выборки после undersampling:\n", "Outcome\n", "0 0.5\n", "1 0.5\n", "Name: proportion, dtype: float64\n" ] } ], "source": [ "undersampler = RandomUnderSampler(random_state=42)\n", "\n", "X_train_resampled, y_train_resampled = undersampler.fit_resample(X_train, y_train)\n", "\n", "print(\"Сбалансированность обучающей выборки после undersampling:\")\n", "print(y_train_resampled.value_counts(normalize=True))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Можно увидеть, что выборка была успешно сбалансирована." ] } ], "metadata": { "kernelspec": { "display_name": "aimenv", "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.5" } }, "nbformat": 4, "nbformat_minor": 2 }