diff --git a/.gitignore b/.gitignore index 207d123..8b52d1a 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,6 @@ ipython_config.py # Remove previous ipynb_checkpoints # git rm -r .ipynb_checkpoints/ +# virtual +aimenv/ +static/ \ No newline at end of file diff --git a/README.md b/README.md index 724296a..0a33ff3 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,10 @@ # AIM-PIbd-32-Puchkina-A-A -МИИ \ No newline at end of file +## МИИ + +ФИО: Пучкина Анна\ +Группа: ПИбд-32\ +Ссылки на dataset: +1. https://www.kaggle.com/datasets/deepcontractor/car-price-prediction-challenge +2. https://www.kaggle.com/datasets/thebumpkin/14400-classic-rock-tracks-with-spotify-data +3. https://www.kaggle.com/datasets/shariful07/student-flexibility-in-online-learning \ No newline at end of file diff --git a/lab_2/lab2.ipynb b/lab_2/lab2.ipynb new file mode 100644 index 0000000..e68a077 --- /dev/null +++ b/lab_2/lab2.ipynb @@ -0,0 +1,1303 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Лабораторная работа №2" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "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 RandomOverSampler\n", + "from imblearn.under_sampling import RandomUnderSampler\n", + "from sklearn.preprocessing import LabelEncoder\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### **Цены на автомобили**\n", + "https://www.kaggle.com/datasets/deepcontractor/car-price-prediction-challenge\n", + "\n", + "Этот набор данных предоставляет подробную информацию о продаже автомобилей, включая их уникальные идентификаторы, цены, сборы и налоги, а также характеристики производителя и модели. В данных представлены год производства, категория автомобиля, наличие кожаного салона, тип топлива, объем двигателя, пробег, количество цилиндров, тип коробки передач, привод, количество дверей, расположение руля, цвет и количество подушек безопасности. Эти данные могут быть использованы для анализа рынка автомобилей, прогнозирования цен на основе различных факторов, а также для изучения влияния технических и визуальных характеристик на стоимость автомобилей." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Выгрузка данных из csv файла \"Цены на автомобили\" в датафрейм" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index(['ID', 'Price', 'Levy', 'Manufacturer', 'Model', 'Prod. year',\n", + " 'Category', 'Leather interior', 'Fuel type', 'Engine volume', 'Mileage',\n", + " 'Cylinders', 'Gear box type', 'Drive wheels', 'Doors', 'Wheel', 'Color',\n", + " 'Airbags'],\n", + " dtype='object')\n" + ] + } + ], + "source": [ + "df1 = pd.read_csv(\"..//static//csv//car_price_prediction.csv\")\n", + "print(df1.columns)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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OaBER0erRYsWGjdunNzc3DRjxgzdcccdWrNmjVq1auVQ79///nfddNNNevXVV2WMyXff7N+/X5JUsWLFXNssXbpU0dHRqlWrlsaPH68LFy7ovffe02233aZffvlFNWvWVK9evfT777/rv//9r9555x37WY2goKBclztz5kwNHjxYLVu2VExMjI4ePWo/0NyyZYvKlSunF154QfXq1dPHH39sv/yudu3ahbKd6enp6tKli26//Xa9+eabeX4r//DDD2vmzJmKjo7WI488ovT0dK1Zs0Y//fST/czWK6+8ohdffFG9e/fWI488ouPHj+u9995Tu3bt7NuTk27dusnf319ffvmloqKiHObNmTNHDRs2tO+39957r3bu3KnHH39cNWvW1LFjxxQbG6tDhw4VaECLnPrl5MmTio6O1gMPPKB+/fopJCREFy5cUPv27bVv3z6NGDFC4eHhmjt3rgYNGqQzZ87oySeflCQZY9SjRw+tXbtWjz76qBo0aKB58+bZw29BWfX/rFmz9Mgjj6hVq1YaOnSoJOW5n4wfP14TJkxQp06d9Nhjj2nPnj368MMPtXHjRq1bt87hrOPp06fVtWtX9erVS71799ZXX32l5557To0bN1Z0dHSedWddjvfcc8+pY8eOevLJJ9WmTRsNGzZMkjRs2DD738ETTzyh+Ph4vf/++9qyZYtDHc585mTJ6f0DUIoYAHChH3/80bi7uxt3d3cTGRlpnn32WbNkyRKTlpbm0G7v3r3Gzc3N3HPPPSYjI8NhXmZmpv3/z58/n20dw4YNM76+vubixYv2ad26dTM1atTI1nbjxo1GkpkxY0a2ddx0002mS5cu2dYXHh5u7rzzTvu0cePGGUmmT58+TvXBihUrjCQzffp0c/z4cXPkyBGzaNEiU7NmTWOz2czGjRuNMcbEx8dnq61p06YmODjYnDx50j5t27Ztxs3NzQwYMMA+bdKkSUaSiY+Pt6wnLS3NBAcHm0aNGpkLFy7Ypy9cuNBIMi+99JJ92owZM4wke415yWq7dOlSc/z4cXP48GHzxRdfmIoVKxofHx/z559/GmOMGThwoJFknn/++WzLGDhwoMP7tnz5ciPJPPHEE9naZr1PBw4cMO7u7uaVV15xmL99+3ZTpkyZbNOv1qdPHxMcHGzS09Pt0xISEoybm5uZOHGiMcaY06dPG0lm0qRJ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m5ubJk6cmO1b3KzXZ337fOXy0tLS9MEHH2Rbvp+fX46X7mUFjauHPm7RooVq166tN998U+fOncv2uuPHj+e6jUWlcuXKatq0qT799FOHenfs2KEff/xRd911l31abtuVk1tuuUXBwcGaNm2aUlNT7dN/+OEH7d69u0T9MOi9994rY0yOl01n7Qe9evWSu7u7JkyYkG1fM8bo5MmTluvp1KmTKlSooDlz5mjOnDlq1aqVw6WY58+f18WLFx1eU7t2bZUtW9ahD4vCXXfdpcTERM2ZM8c+LT09Xe+99578/f3towHeddddSk9P14cffmhvl5GRoffeey/bMmvXrq3ffvvNYb/etm1btqH3nel/6fL+58y+16lTJ3l6eurdd991eP3//d//KSkpqdj2vd69eysjI0Mvv/xytnnp6en2bcnPZw6A0u+GPuOUl0OHDmnGjBk6dOiQqlSpIunypXmLFy/WjBkzsl2icfHiRf3nP//R888/74pygVLr8ccf1/nz53XPPfeofv36SktL0/r16zVnzhzVrFnTfiN1nTp19MILL+jll19W27Zt1atXL3l5eWnjxo2qUqWKYmJi1KZNG5UvX14DBw7UE088IZvNplmzZuUYzFq0aKE5c+Zo1KhRatmypfz9/dW9e3fVrl1b5cqV07Rp01S2bFn5+fmpdevWCg8P1yeffKLo6Gg1bNhQgwcPVtWqVfXXX39pxYoVCggI0HfffVfc3adJkyYpOjpakZGRevjhh+3DkQcGBmr8+PEO2ytdHor9gQcekIeHh7p3757j/U8eHh56/fXXNXjwYEVFRalPnz724chr1qypp556qrg2z1KHDh3Uv39/vfvuu9q7d6+6du2qzMxMrVmzRh06dNCIESNUu3Zt/etf/9KYMWN04MAB9ezZU2XLllV8fLzmzZunoUOH6umnn85zPR4eHurVq5e++OILpaSk6M0333SY//vvv6tjx47q3bu3IiIiVKZMGc2bN09Hjx7VAw88UJRdoKFDh+qjjz7SoEGDtHnzZtWsWVNfffWV1q1bp8mTJ6ts2bKSpO7du+u2227T888/rwMHDigiIkLffPNNjl8gPPTQQ3r77bfVpUsXPfzwwzp27JimTZumhg0bOtzH40z/S5f3v6VLl+rtt99WlSpVFB4ertatW2dbb1BQkMaMGaMJEyaoa9euuvvuu7Vn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6enpOnXqFH3r5H771Vdf6fz58xowYIDDdPbbnFn17f79+/X+++9rx44datiwoSSpSZMmWrNmjaZOnapp06ax3+bCmf22c+fO2r9/v06cOKEyZcqoXLlyCg0NVa1atSTxmTBixAj7gBjVqlWzTw8NDVVaWprOnDnjcCxw9OhRe7848zcfGhqabbS4o0ePKiAgQD4+PkWxSSXGtfStM3Lr26x517PC6Ntdu3apY8eOGjp0qMaOHeswryTtt3zFU4IEBgYqKChIe/fu1aZNm+yX5T3//PP69ddftXXrVvtDkt555x3NmDFDkhQZGant27c7/IMTGxurgICAbAeuN6Lc+jYnWf2bdeBP3+Ytt76tWbOmqlSpkm1o0t9//101atSQdLlvz5w5o82bN9vnL1++XJmZmfYAeyNzZr/9v//7P919990KCgpymM5+m7fc+jbr/sarz4C4u7vbz6Ky3+bNmf22UqVKKleunJYvX65jx47p7rvvlnTj9q0xRiNGjNC8efO0fPlyhYeHO8xv0aKFPDw8tGzZMvu0PXv26NChQ4qMjJTk3N98ZGSkwzKy2mQt43pUGH3rjMjISK1evVqXLl2yT4uNjVW9evVUvnz5a9+QEqiw+nbnzp3q0KGDBg4cqFdeeSXbekrUflvsw1HcgM6ePWu2bNlitmzZYiSZt99+22zZssUcPHjQGGPMl19+aVasWGH2799v5s+fb2rUqGF69eqV5zJ11YhG6enpplGjRqZz585m69atZvHixSYoKMiMGTOmKDfN5a61b/ft22cmTpxoNm3aZOLj482CBQtMrVq1TLt27ext6NuC77fvvPOOCQgIMHPnzjV79+41Y8eONd7e3mbfvn32Nl27djXNmjUzP//8s1m7dq256aabTJ8+fYp1W4tbYX0m7N2719hsNvPDDz9km8d+W7C+TUtLM3Xq1DFt27Y1P//8s9m3b5958803jc1mM4sWLbK3Y78t2H47ffp0ExcXZ/bt22dmzZplKlSoYEaNGuXQ5kbs28cee8wEBgaalStXmoSEBPvj/Pnz9jaPPvqoqV69ulm+fLnZtGmTiYyMNJGRkfb5zvzN//HHH8bX19c888wzZvfu3Wbq1KnG3d3dLF68uFi3tzgVRt8ac/nzdsuWLWbYsGGmbt269r+FrFH0zpw5Y0JCQkz//v3Njh07zBdffGF8fX3N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+fmpTp06ql69erbQlJMGDRpo27ZtSklJsU9bt26d3NzcVK9ePQUGBqpy5cr6+eef7fPT09O1efNmh+UEBQUpISHB/jw5OVnx8fH25zfffLP+/PNP/f777znW4enpqYyMDMtaDx8+rMOHD9un7dq1S2fOnFFERITltuZXs2bNlJGRoWPHjqlOnToOj9DQUEmX+6pHjx7q16+fmjRpolq1auW6jQCAokVwAgAUmb59+8rb21sDBw7Ujh07tGLFCj3++OPq37+/QkJCJElPPvmkXnvtNc2fP1+//fab/vGPf+jMmTMOy7njjjs0a9YsrVmzRtu3b9fAgQMdztJERUWpXbt2uvfeexUbG6v4+Hj98MMPWrx4saTLl9edO3dOy5Yt04kTJ3T+/PlstXbq1EmNGzdW37599csvv2jDhg0aMGCAoqKidMsttxR639StW1d9+/bVgAED9M033yg+Pl4bNmxQTEyMFi1aJEm66aabFBsbq/Xr12v37t0aNmyYwyh/AIDiQ3ACABQZX19fLVmyRKdOnVLLli113333qWPHjg4//Dp69Gj1799fAwcOVGRkpMqWLat77rnHYTljxoxRVFSU/va3v6lbt27q2bOnateu7dDm66+/VsuWLdWnTx9FRETo2WeftZ9latOmjR599FHdf//9CgoK0htvvJGtVpvNpgULFqh8+fJq166dOnXqpFq1amnOnDlF0DOXzZgxQwMGDNDo0aNVr1499ezZUxs3blT16tUlSWPHjlXz5s3VpUsXtW/fXqGhoerZs2eR1QMAyJ3N5OfuWwAAAAC4AXHGCQAAAAAsEJwAAAAAwALBCQAAAAAsEJwAAAAAwALBCQAAAAAsEJwAAAAAwALBCQAAAAAsEJwAAAAAwALBCQAAAAAsEJwAAAAAwALBCQAAAAAs/D8spZsEcYvTQwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Преобразуем год производства в целочисленный тип\n", + "df1['Prod. year'] = df1['Prod. year'].astype(int)\n", + "\n", + "# Визуализация данных\n", + "plt.figure(figsize=(10, 6))\n", + "plt.scatter(df1['Prod. year'], df1['Price'])\n", + "plt.xlabel('Production Year')\n", + "plt.ylabel('Price')\n", + "plt.title('Scatter Plot of Price vs Production Year')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Зашумленность не очень высокая. Покрытие данных высокое и подошло бы для поставленной задачи по актуальности." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Выбросы:\n", + " ID Price Levy Manufacturer Model Prod. year \\\n", + "14 45732604 59464 891 HYUNDAI Santa FE 2016 \n", + "36 45369569 51746 1077 TOYOTA CHR Limited 2019 \n", + "47 45732544 55390 1017 HYUNDAI Santa FE 2017 \n", + "56 44316016 87112 - MERCEDES-BENZ GLA 250 2019 \n", + "73 45732043 53154 891 HYUNDAI Santa FE 2016 \n", + "... ... ... ... ... ... ... \n", + "19144 45733642 56814 1017 HYUNDAI Sonata 2017 \n", + "19161 45677230 64290 - LEXUS RX 450 F SPORT 2012 \n", + "19180 45803164 63886 1076 HYUNDAI Sonata 2020 \n", + "19188 45571892 61154 579 TOYOTA RAV 4 2017 \n", + "19211 45802856 50037 891 HYUNDAI Santa FE 2016 \n", + "\n", + " Category Leather interior Fuel type Engine volume Mileage Cylinders \\\n", + "14 Jeep Yes Diesel 2 76000 km 4.0 \n", + "36 Jeep No Petrol 2 10200 km 4.0 \n", + "47 Jeep Yes Diesel 2 100734 km 4.0 \n", + "56 Jeep Yes Petrol 2.0 Turbo 5323 km 4.0 \n", + "73 Jeep Yes Diesel 2 84506 km 4.0 \n", + "... ... ... ... ... ... ... \n", + "19144 Sedan Yes Petrol 2 67365 km 4.0 \n", + "19161 Jeep Yes Hybrid 3.5 97000 km 6.0 \n", + "19180 Sedan Yes LPG 2 5305 km 4.0 \n", + "19188 Jeep No Hybrid 2.5 71234 km 4.0 \n", + "19211 Jeep Yes Diesel 2 121902 km 4.0 \n", + "\n", + " Gear box type Drive wheels Doors Wheel Color Airbags \n", + "14 Automatic Front 04-May Left wheel White 4 \n", + "36 Tiptronic Front 04-May Left wheel Red 12 \n", + "47 Automatic Front 04-May Left wheel Black 4 \n", + "56 Tiptronic 4x4 04-May Left wheel Grey 0 \n", + "73 Automatic Front 04-May Left wheel Silver 4 \n", + "... ... ... ... ... ... ... \n", + "19144 Automatic Front 04-May Left wheel Black 4 \n", + "19161 Variator 4x4 04-May Left wheel Black 12 \n", + "19180 Automatic Front 04-May Left wheel Silver 4 \n", + "19188 Tiptronic 4x4 04-May Left wheel White 12 \n", + "19211 Automatic Front 04-May Left wheel Black 4 \n", + "\n", + "[1073 rows x 18 columns]\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2QAAAIjCAYAAABswtioAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAADQtUlEQVR4nOzdeXhTVfoH8G+SNk3XQAulZWtDQSGURZClQotiK0sFHFFEh0VFREQU0RFxYREV0Zmfu6h1FAd0VBwRECiCqCwWQWqRUkDEFgS6QAtt6ULa5v7+qDc2TXJz06TN0u/neXhmmnty77k3NzFvzjnvqxAEQQARERERERG1OKW7O0BERERERNRaMSAjIiIiIiJyEwZkREREREREbsKAjIiIiIiIyE0YkBEREREREbkJAzIiIiIiIiI3YUBGRERERETkJgzIiIiIiIiI3IQBGRERERERkZswICOiZpeXlweFQoFVq1a5uytm0tPT0b9/f2g0GigUCly8eLHZjnXnnXciNja22fbfGrnzvlq1ahUUCgXy8vJa/Nje4v7770dKSkqTn79//35cc801CA4OhkKhQFZWlus65yNiY2Nx5513mv7+7rvvoFAo8N1335kea42fPddeey2uvfZa09/u/KyYPHkyJk2a1OLHJe/CgIzICYcOHcItt9yCmJgYaDQadOrUCSkpKXj99deb7Zgff/wxXnnlFYvHz549iyVLlrTolxbxP/7iP39/f3Tr1g3Tpk3D77//7pJj/PDDD1iyZInLg6Xi4mJMmjQJgYGBePPNN7F69WoEBwdbbSt++Rb/aTQaXHHFFXjggQdQWFjo0n55kyVLlphdl6CgIOj1ejz11FMoKytzd/dc4vnnn8eXX37p7m4AADIyMqBUKrFw4UKr21esWAGFQoFNmza1cM8s5ebm4r333sMTTzxhdfuRI0dM7yVr7+2amhrceuutKCkpwcsvv4zVq1cjJiYGb731Vot/qY6NjcWNN95odZv4Gfj555+3aJ+8iSAIWL16NZKSktCmTRsEBQWhT58+eOaZZ1BRUdHk/ebk5GDJkiUe/6PIggUL8L///Q8HDx50d1fIkwlE1CR79uwR1Gq10L17d2HZsmVCWlqasGjRIuGGG24Q4uLimu24qampQkxMjMXj+/fvFwAIH3zwQbMdu7Fvv/1WACA8+OCDwurVq4X3339feOCBBwS1Wi2Eh4cLZ86cEQRBEHJzc5vct5deekkAIOTm5rq071u2bBEACNu2bbPb9oMPPhAACM8884ywevVqIS0tTZg+fbqgVCoFnU4nVFRU2N2HwWAQqqurXdF1j7F48WIBgLBy5Uph9erVwsqVK4W//e1vAgAhISFBMBqNzXp8Z+4ruYKDg4Xp06dbPF5bWytUVVU1+zk2dt999wn+/v5Cdna22eN5eXlCUFCQcOutt7Zof2x56KGHhCuuuMLm9ieeeEKIiooSAgIChLS0NIvtR44cEQBYbOvdu7cwYsQIV3dXUkxMjJCammp1m/gZuHbt2hbtkygmJsbs/hT78+2335oec+dnT21trTBp0iQBgJCYmCi8/PLLwjvvvCNMmTJFUCqVQnx8vFBQUNCkfa9du9biXEUjRowwu0+MRqNQVVUl1NbWNvFMnDN48GBh6tSpbjk2eQc/dwSBRL7gueeeg1arxf79+9GmTRuzbUVFRe7pVDOoqKiwOXIkSkxMxC233AIAuOuuu3DFFVfgwQcfxIcffmjz13x3E1+jxq+dlDFjxuDqq68GANxzzz2IiIjA//3f/2H9+vW4/fbbrT5HvH7+/v5O99lT3XLLLWjXrh0A4L777sPEiRPxxRdfYO/evUhISLD6nMrKSgQFBbVkN11KpVJBpVK1+HFfeOEFrF+/HrNmzcKuXbugUCgAAHPnzoW/vz9effXVFumH1OtXU1ODjz76CPfdd5/V7YIg4OOPP8Ydd9yB3NxcfPTRR7jnnnvM2jTl/dlUtbW1MBqNUKvVzX4sd3DnZ8+LL76Izz77DI8++iheeukl0+P33nsvJk2ahJtuugl33nkntmzZ0qz9EEdjXUXOfxcbmjRpEhYvXoy33noLISEhLusH+Q5OWSRqohMnTqB3795WvzBERkZaPLZmzRoMHjwYQUFBaNu2LZKSkvD111+btq9fvx6pqano2LEjAgICEBcXh2XLlqGurs7U5tprr8WmTZtw8uRJ0zSx2NhYfPfddxg0aBCA+oBI3NZwas+PP/6I0aNHQ6vVIigoCCNGjMCePXvM+ihOQcvJycEdd9yBtm3bYvjw4Q5fm5EjRwKon7YkZceOHUhMTERwcDDatGmDCRMm4MiRI2b9+cc//gEA0Ol0pvOyN0Vl7dq1GDhwIAIDA9GuXTtMmTIFZ86cMW2/9tprMX36dADAoEGDoFAozNZhNPU877zzToSEhODEiRMYO3YsQkND8fe//920rfE6DqPRiFdffRV9+vSBRqNB+/btMXr0aPz0009m7dasWWM6n/DwcEyePBl//PGHZN8+//xzKBQKfP/99xbb3nnnHSgUCmRnZwMACgoKcNddd6Fz584ICAhAdHQ0JkyY0OSpQI2vy7XXXov4+HgcOHAASUlJCAoKMk1lKyoqwowZM9ChQwdoNBr069cPH374ocU+L168iDvvvBNarRZt2rTB9OnTrU51a7x2RNSU669QKFBRUYEPP/zQdO+J94mtNWRvvfUWevfujYCAAHTs2BFz5syx6Kd4PXJycnDdddchKCgInTp1wosvvmjnygJarRavvvoq9uzZg/feew8AsG7dOmzcuBEvvPACoqOjYTQa8corr6B3797QaDTo0KEDZs2ahQsXLpjtS85nTsP+Wnv9rNm9ezfOnz+P5ORkq9v37NmDvLw8TJ48GZMnT8bOnTtx+vRp0/Y777wTI0aMAADceuutUCgUuPbaaxEbG4vDhw/j+++/N70eDV/rixcvYt68eejSpQsCAgLQvXt3rFixAkaj0dRGXEv0z3/+E6+88gri4uIQEBCAnJwcu9derpMnT+L+++/HlVdeicDAQERERODWW2+1uFfEe2jPnj2YP38+2rdvj+DgYPztb3/DuXPnzNoKgoBnn30WnTt3RlBQEK677jocPnxYVn8a3/sNr8G7775rugaDBg3C/v37LZ6/du1a6PV6aDQaxMfHY926dbLWpVVVVeGll17CFVdcgeXLl1tsHzduHKZPn4709HTs3bvX9LhCocCSJUss2jdcL7dq1SrceuutAIDrrrvOdD80XDvXkK01ZEePHsUtt9yC8PBwaDQaXH311diwYYNZG/F1+v7773H//fcjMjISnTt3BgCUl5dj3rx5iI2NRUBAACIjI5GSkoLMzEyzfaSkpKCiogLbtm2TumTUinGEjKiJYmJikJGRgezsbMTHx0u2Xbp0KZYsWYJrrrkGzzzzDNRqNX788Ufs2LEDN9xwA4D6D/2QkBDMnz8fISEh2LFjBxYtWoSysjLTL4tPPvkkSktLcfr0abz88ssAgJCQEPTq1QvPPPMMFi1ahHvvvReJiYkAgGuuuQZAfeAzZswYDBw4EIsXL4ZSqcQHH3yAkSNHYteuXRg8eLBZf2+99Vb06NEDzz//PARBcPjanDhxAgAQERFhs8327dsxZswYdOvWDUuWLEFVVRVef/11DBs2DJmZmYiNjcXNN9+MX3/9Ff/973/x8ssvm0Zh2rdvb3O/q1atwl133YVBgwZh+fLlKCwsNH2B/fnnn9GmTRs8+eSTuPLKK/Huu+/imWeegU6nQ1xcnEvOs7a2FqNGjcLw4cPxz3/+U3IUaMaMGVi1ahXGjBmDe+65B7W1tdi1axf27t1rGol77rnn8PTTT2PSpEm45557cO7cObz++utISkoynY81qampCAkJwWeffWb6civ69NNP0bt3b9N9O3HiRBw+fBhz585FbGwsioqKsG3bNpw6dapJyQCsXZfi4mKMGTMGkydPxpQpU9ChQwdUVVXh2muvxW+//YYHHngAOp0Oa9euxZ133omLFy/ioYceAlD/ZXTChAnYvXs37rvvPvTq1Qvr1q0zBdVNZe/6r169Gvfccw8GDx6Me++9FwAk75MlS5Zg6dKlSE5OxuzZs3Hs2DGsXLkS+/fvx549e8xGKi5cuIDRo0fj5ptvxqRJk/D5559jwYIF6NOnD8aMGSPZ71tvvRWpqalYsGABrr/+ejz00EO45pprMGvWLADArFmzTO+DBx98ELm5uXjjjTfw888/m/VDzmeOyNrrZ8sPP/wAhUKBq666yur2jz76CHFxcRg0aBDi4+MRFBSE//73v6YfX2bNmoVOnTrh+eefx4MPPohBgwahQ4cOqKiowNy5cxESEoInn3wSAEz9qKysxIgRI3DmzBnMmjULXbt2xQ8//ICFCxciPz/fYt3tBx98gOrqatx7770ICAhAeHi45DWvqanB+fPnLR4vLS21eGz//v344YcfMHnyZHTu3Bl5eXlYuXIlrr32WuTk5Fh8JsydOxdt27bF4sWLkZeXh1deeQUPPPAAPv30U1ObRYsW4dlnn8XYsWMxduxYZGZm4oYbboDBYJDst5SPP/4Y5eXlmDVrFhQKBV588UXcfPPN+P333033yKZNm3DbbbehT58+WL58OS5cuIAZM2agU6dOdve/e/duXLhwAQ899BD8/Kx/3Zw2bRo++OADfPXVVxg6dKjsviclJeHBBx/Ea6+9hieeeAK9evUCANP/ynH48GEMGzYMnTp1wuOPP47g4GB89tlnuOmmm/C///0Pf/vb38za33///Wjfvj0WLVpkWvt233334fPPP8cDDzwAvV6P4uJi7N69G0eOHMGAAQNMz9Xr9QgMDMSePXss9ksEgGvIiJrq66+/FlQqlaBSqYSEhAThscceE7Zu3SoYDAazdsePHxeUSqXwt7/9TairqzPb1nD9SWVlpcUxZs2aJQQFBZnN/3d0DZnRaBR69OghjBo1yuJ4Op1OSElJMT0mrgm6/fbbZV0Dcb3C+++/L5w7d044e/assGnTJiE2NlZQKBTC/v37BUGwvtanf//+QmRkpFBcXGx67ODBg4JSqRSmTZtmesyRNWQGg0GIjIwU4uPjhaqqKtPjX331lQBAWLRokekxcV2Y2EcpYtvt27cL586dE/744w/hk08+ESIiIoTAwEDh9OnTgiAIwvTp0wUAwuOPP26xj+nTp5u9bjt27DCtv2tMfJ3y8vIElUolPPfcc2bbDx06JPj5+Vk83tjtt98uREZGmq2byM/PF5RKpfDMM88IgiAIFy5cEAAIL730kt3r0Jh4vxw7dkw4d+6ckJubK7zzzjtCQECA0KFDB9PauhEjRggAhLffftvs+a+88ooAQFizZo3pMYPBICQkJAghISFCWVmZIAiC8OWXXwoAhBdffNHUrra2VkhMTLS4rxqvHRE15foLgu01ZOI9Id6XRUVFglqtFm644Qaz9/kbb7xheo807CMA4T//+Y/pscuXLwtRUVHCxIkTLY5lTV5enhAcHCyEh4cL/v7+wqFDhwRBEIRdu3YJAISPPvrIrH16errF43I/c2y9frZMmTJFiIiIsLrNYDAIERERwpNPPml67I477hD69etn1s7W2ixba8iWLVsmBAcHC7/++qvZ448//rigUqmEU6dOCYLw12dRWFiYUFRUJOt8YmJiBACS/xr209p1zcjIsHjNxXsoOTnZ7J57+OGHBZVKJVy8eFEQhL/urdTUVLN2TzzxhADA7hqyxve+eA0iIiKEkpIS0+Pr168XAAgbN240PdanTx+hc+fOQnl5uemx7777TgBg9b9DDYnv73Xr1tlsU1JSIgAQbr75ZtNjAITFixdbtG28Xs6RNWTW/ht0/fXXC3369DG7141Go3DNNdcIPXr0MD0mvk7Dhw+3WIOm1WqFOXPm2Dy/hq644gphzJgxstpS68Mpi0RNlJKSgoyMDIwfPx4HDx7Eiy++iFGjRqFTp05mUx6+/PJLGI1GLFq0CEql+VtOXP8BAIGBgab/X15ejvPnzyMxMRGVlZU4evRok/uZlZWF48eP44477kBxcTHOnz+P8+fPo6KiAtdffz127txpNqUHgM21H7bcfffdaN++PTp27IjU1FTTNC9xlKex/Px8ZGVl4c477zT7Zbpv375ISUnB5s2bHT9RAD/99BOKiopw//33m60XSE1NRc+ePZ3OPpecnIz27dujS5cumDx5MkJCQrBu3TqLX4tnz55td1//+9//oFAosHjxYott4n3xxRdfwGg0YtKkSabX7fz584iKikKPHj3w7bffSh7jtttuQ1FRkdk0ns8//xxGoxG33XYbgPr7Tq1W47vvvrOY0ibXlVdeifbt20On02HWrFno3r07Nm3aZDYSEBAQgLvuusvseZs3b0ZUVJTZ+jt/f388+OCDuHTpkmm65ebNm+Hn52d2XVUqFebOnduk/gLyrr8jtm/fDoPBgHnz5pm9z2fOnImwsDCLey8kJARTpkwx/a1WqzF48GDZ2UljYmKwePFilJSUYP78+abRzrVr10Kr1SIlJcXsnhk4cCBCQkLM7hlHPnOsvX62FBcXo23btla3bdmyBcXFxWav+e23346DBw/KnoJnzdq1a5GYmIi2bduanXdycjLq6uqwc+dOs/YTJ06UHGlvbMiQIdi2bZvFv3/+858WbRte15qaGhQXF6N79+5o06aNxVQ2oH49VcN7LjExEXV1dTh58iSAv+6tuXPnmrWbN2+e7P5bc9ttt5m9TuLMCvEePHv2LA4dOoRp06aZrXsaMWIE+vTpY3f/5eXlAIDQ0FCbbcRtLZ2VtaSkBDt27MCkSZNM9/758+dRXFyMUaNG4fjx42bT3IH693LjdaNt2rTBjz/+iLNnz9o9pnhvElnDKYtEThg0aBC++OILGAwGHDx4EOvWrcPLL7+MW265BVlZWdDr9Thx4gSUSiX0er3kvg4fPoynnnoKO3bssPiPk7VpMXIdP34cACSnd5WWlpr9h1mn0zl0jEWLFiExMREqlQrt2rVDr169bE5RAWD6onHllVdabOvVqxe2bt3q8KJpe/vt2bMndu/e7dD+GnvzzTdxxRVXwM/PDx06dMCVV15pEWT7+fmZ1hdIOXHiBDp27Cg5Ver48eMQBAE9evSwut3eYn1xzeCnn36K66+/HkD9dMX+/fvjiiuuAFD/RXvFihV45JFH0KFDBwwdOhQ33ngjpk2bhqioKLvnAdQHN2FhYfD390fnzp2tTuvr1KmTRdKEkydPokePHhbXUJx2JL6eJ0+eRHR0tMVieGuvs1xyrr8jbN17arUa3bp1M20Xde7c2SLwa9u2LX755RfZxxTXjTb84eP48eMoLS21uo4VME845MhnjrXXT4pgY6rzmjVroNPpEBAQgN9++w1A/TTQoKAgfPTRR3j++edlH6Oh48eP45dffrEZZDVOtOToZ1y7du2sromz9jlXVVWF5cuX44MPPsCZM2fMroW1z/KuXbua/S1+Fos/kIj3TuPPgfbt29sMfOWQe9zu3btbPLd79+5Wg8uGxGBLDMyskRO0NYfffvsNgiDg6aefxtNPP221TVFRkdmPbdbumRdffBHTp09Hly5dMHDgQIwdOxbTpk1Dt27dLNoKgtCkH3uodWBARuQCarUagwYNwqBBg3DFFVfgrrvuwtq1a63++m7NxYsXMWLECISFheGZZ55BXFwcNBoNMjMzsWDBAosRLEeIz33ppZfQv39/q20af9Ft+AuvHH369LG5gN+XDB482OaonyggIMAiwGgqo9EIhUKBLVu2WM3oZy9bV0BAAG666SasW7cOb731FgoLC7Fnzx6LL73z5s3DuHHj8OWXX2Lr1q14+umnsXz5cuzYscPmOqCGkpKSTOv7bHH0nmoqhUJhNRhonKjC3WxlaLQVyMhlNBoRGRmJjz76yOp2MWBx9DPHkdcvIiLC6mhrWVkZNm7ciOrqaqs/Mnz88cd47rnnmvSl1Wg0IiUlBY899pjV7eIPEKLmvB/nzp2LDz74APPmzUNCQgK0Wi0UCgUmT55s9bO8ue4Fe5r7uOIPK7/88gtuuukmq23EHyDs/WAJuPY9LL4Ojz76KEaNGmW1TeNA1No9M2nSJCQmJmLdunX4+uuv8dJLL2HFihX44osvLNaCXrhwweaPa0QMyIhcTPzCnp+fD6D+11+j0YicnBybAdF3332H4uJifPHFF0hKSjI9bi1Loa0vK7YeF0crwsLCPCZoiomJAQAcO3bMYtvRo0fRrl070+iYI1/OGu5XzPQnOnbsmGm7J4iLi8PWrVtRUlJic5QmLi4OgiBAp9NZfKGU67bbbsOHH36Ib775BkeOHIEgCKbpio2P9cgjj+CRRx7B8ePH0b9/f/zrX//CmjVrmnRcOWJiYvDLL7/AaDSaBbHidDnx9YqJicE333yDS5cumQWh1u6ftm3bWp3213iESs71B+Tffw3vvYa/jhsMBuTm5rbYey8uLg7bt2/HsGHDJIMORz5zHNWzZ0989NFHKC0thVarNT3+xRdfoLq6GitXrrQI4I8dO4annnoKe/bskczsKvU5d+nSJY/4jPv8888xffp0/Otf/zI9Vl1d3eTi9uK9dfz4cbN769y5c02eZuzIccWRzIasPdbY8OHD0aZNG3z88cd48sknrQaA//nPfwDArPB227ZtLa6VwWAw/TdV5Mxok3gd/f39nb5noqOjcf/99+P+++9HUVERBgwYgOeee84sIKutrcUff/yB8ePHO3Us8l1cQ0bURN9++63VXxLF9U/i1KWbbroJSqUSzzzzjMWvo+Lzxf9QNdyfwWDAW2+9ZbH/4OBgq9NexACm8X/IBg4ciLi4OPzzn//EpUuXLJ7XOL1yS4iOjkb//v3x4YcfmvU3OzsbX3/9NcaOHWt6zNZ5WXP11VcjMjISb7/9Ni5fvmx6fMuWLThy5AhSU1Nddg7OmjhxIgRBwNKlSy22iffBzTffDJVKhaVLl1rca4IgoLi42O5xkpOTER4ejk8//RSffvopBg8ebDb1prKyEtXV1WbPiYuLQ2hoqNk1bA5jx45FQUGBWTa52tpavP766wgJCTFlhxw7dixqa2uxcuVKU7u6ujq8/vrrFvuMi4vD0aNHze7rgwcPWpR4kHP9gfr7T869l5ycDLVajddee83s+f/+979RWlraYvfepEmTUFdXh2XLlllsq62tNZ2LI585jkpISIAgCDhw4IDZ42vWrEG3bt1w33334ZZbbjH79+ijjyIkJMTmyJ7I1usxadIkZGRkYOvWrRbbLl68iNraWqfOyREqlcri/fr66683eYQnOTkZ/v7+eP3118322zhzpKt17NgR8fHx+M9//mP2347vv/8ehw4dsvv8oKAgPProozh27JgpK2ZDmzZtwqpVqzBq1CizDItxcXEWa/7effddi+vnyH8bGouMjMS1116Ld955xyLQA+T9d7Gurs7iv8WRkZHo2LGjxWdnTk4OqqurTZmPiRrjCBlRE82dOxeVlZX429/+hp49e8JgMOCHH37Ap59+itjYWNMC+O7du+PJJ5/EsmXLkJiYiJtvvhkBAQHYv38/OnbsiOXLl+Oaa65B27ZtMX36dDz44INQKBRYvXq11YBv4MCB+PTTTzF//nwMGjQIISEhGDduHOLi4tCmTRu8/fbbCA0NRXBwMIYMGQKdTof33nsPY8aMQe/evXHXXXehU6dOOHPmDL799luEhYVh48aNLX358NJLL2HMmDFISEjAjBkzTGnvtVqtWQ2agQMHAqhP+T958mT4+/tj3LhxVteX+fv7Y8WKFbjrrrswYsQI3H777aa097GxsXj44Ydb6vTsuu666zB16lS89tprOH78OEaPHg2j0Yhdu3bhuuuuwwMPPIC4uDg8++yzWLhwIfLy8nDTTTchNDQUubm5WLduHe699148+uijksfx9/fHzTffjE8++QQVFRUWSQh+/fVXXH/99Zg0aRL0ej38/Pywbt06FBYWYvLkyc15CXDvvffinXfewZ133okDBw4gNjYWn3/+Ofbs2YNXXnnFtK5k3LhxGDZsGB5//HHk5eVBr9fjiy++sPrDxN13343/+7//w6hRozBjxgwUFRXh7bffRu/evc3WScm5/kD9/bd9+3b83//9Hzp27AidTochQ4ZYHLd9+/ZYuHAhli5ditGjR2P8+PE4duwY3nrrLQwaNMgsgUdzGjFiBGbNmoXly5cjKysLN9xwA/z9/XH8+HGsXbsWr776Km655RaHPnMcNXz4cERERGD79u2mkeqzZ8/i22+/xYMPPmj1OQEBARg1ahTWrl2L1157zea+Bw4ciJUrV+LZZ59F9+7dERkZiZEjR+If//gHNmzYgBtvvBF33nknBg4ciIqKChw6dAiff/458vLy7E6rdZUbb7wRq1evhlarhV6vR0ZGBrZv3y5ZBkRK+/bt8eijj2L58uW48cYbMXbsWPz888/YsmVLs5/T888/jwkTJmDYsGG46667cOHCBbzxxhuIj4+3+gNfY48//jh+/vlnrFixAhkZGZg4cSICAwOxe/durFmzBr169bKoO3jPPfeYCsynpKTg4MGD2Lp1q8W59u/fHyqVCitWrEBpaSkCAgIwcuRIm+snG3vzzTcxfPhw9OnTBzNnzkS3bt1QWFiIjIwMnD59GgcPHpR8fnl5OTp37oxbbrkF/fr1Q0hICLZv3479+/ebjY4CwLZt2xAUFISUlBRZfaNWqIWyORL5nC1btgh333230LNnTyEkJERQq9VC9+7dhblz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1re2+hSAWLNmjbnM9evXxdNPPy3CwsKEXq8XDz30kCgsLLSoR8n7fceOHaJ///5Cp9OJbt26WZyjLVKrb0eMGGGznvz8fHOZH3/8Udx9993C399fdO7cWSxbtsxFV+keavTt4sWLbdYRHx9vcS5Pum81Qgjh6CgbERERERERtRzXkBEREREREbkJAzIiIiIiIiI3YUBGRERERETkJgzIiIiIiIiI3IQBGRERERERkZswICMiIiIiInITBmRERERERERuwoCMiIiIiIjITRiQERFRu/H4449j0qRJTj9PQkICVqxY4fTzEBGR92NARkREbvX4449Do9FAo9FAp9Ohe/fueOWVV9DQ0ODupslau3YtQkNDrV4/cOAA5syZ47Tzrlu3DkFBQTh9+rTF65cuXUJYWBjefvttp52biIjUxYCMiIjcbty4cSgsLERubi4WLFiAJUuW4I033rBZtq6uzsWta7nIyEjo9Xqn1T99+nSMHTsWjz/+OIxGo/n12bNnY9CgQXjmmWdUP6c39DsRkTdiQEZERG7n7++PmJgYxMfH46mnnsLo0aOxadMmAD9PM3z11VfRqVMn9OrVCwBw7NgxjBo1CoGBgYiIiMCcOXNw7do1c52NjY14/vnnERoaioiICLz44osQQlic19bUwv79+2PJkiXmn8vKyjB37lxER0cjICAAffr0webNm7Fz507MmjUL5eXl5hE+0+81r/fcuXOYOHEigoODYTAY8Mgjj6C4uNh8fMmSJejfvz/WrVuHhIQEhISE4Fe/+hUqKyvt9tmqVatw6tQpvPnmmwCaRuv27t2LNWvWoK6uDi+88AI6d+6MoKAgDBkyBDt37jT/7pUrVzBlyhR07twZer0effv2xccff2xR/z333IP58+fj2WefRceOHTF27Fi7bSEiotZjQEZERB4nMDDQYkRm+/btOHnyJNLS0rB582ZUVVVh7NixCAsLw4EDB7BhwwZ8++23mD9/vvl3/va3v2Ht2rX44IMP8N1336G0tBQbN25sUTuMRiPGjx+PvXv3Yv369cjOzsayZcvg4+ODoUOHYsWKFTAYDCgsLERhYSFeeOEFm3VMnDgRpaWl2LVrF9LS0nDmzBk8+uijFuXy8vLw5ZdfYvPmzdi8eTN27dqFZcuW2W1bZGQk3nvvPbz88stIS0vDc889h7feegtxcXGYP38+MjIy8Mknn+Do0aP4r//6L4wbNw65ubkAgJqaGgwaNAhbtmxBVlYW5syZg+nTp2P//v0W5/jnP/8JnU6HvXv3YuXKlS3qOyIiUkgQERG50cyZM8XEiROFEEIYjUaRlpYm/P39xQsvvGA+Hh0dLWpra82/895774mwsDBx7do182tbtmwRWq1WFBUVCSGEiI2NFa+//rr5eH19vejSpYv5XEIIER8fL5YvX27Rnn79+onFixcLIYT45ptvhFarFSdPnrTZ9jVr1oiQkBCr12+u9//+7/+Ej4+POHfunPn48ePHBQCxf/9+IYQQixcvFnq9XlRUVJjLLFy4UAwZMsTmeW82Y8YModVqzdd19uxZ4ePjIy5evGhR7t577xWpqal265kwYYJYsGCB+ecRI0aIAQMGyJ6fiIgc4+vugJCIiGjz5s0IDg5GfX09jEYjHnvsMYtpg3379oVOpzP/nJOTg379+iEoKMj82rBhw2A0GnHy5EkEBASgsLAQQ4YMMR/39fXFHXfcYTVtUcqRI0fQpUsX9OzZs9XXlpOTg7i4OMTFxZlfS0pKQmhoKHJycjB48GAATdMcO3ToYC4TGxuLkpIS2fpffvllfPjhh1i0aBGApqmcjY2NVm2ura1FREQEgKbpnK+99ho+++wzXLx4EXV1daitrbVa9zZo0KDWXTQRESnGgIyIiNxu5MiRePfdd6HT6dCpUyf4+lr+5+nmwEtNWq3WKkCrr683///AwECnnNcWPz8/i581Go1Fwg57TH1l+t9r167Bx8cHhw4dgo+Pj0XZ4OBgAMAbb7yBt956CytWrEDfvn0RFBSEZ5991ipxh7P6nYiIfsY1ZERE5HZBQUHo3r07unbtahWM2dK7d2/8+OOPqKqqMr+2d+9eaLVa9OrVCyEhIYiNjcW+ffvMxxsaGnDo0CGLeiIjI1FYWGj+uaKiAvn5+eafb7/9dly4cAGnTp2y2Q6dTofGxkbZtp4/fx7nz583v5adnY2ysjIkJSXJXmtLDRgwAI2NjSgpKUH37t0t/sXExABo6quJEydi2rRp6NevH7p162b3GomIyLkYkBERkdeZOnUqAgICMHPmTGRlZWHHjh34zW9+g+nTpyM6OhoA8Lvf/Q7Lli3Dl19+iRMnTuDpp59GWVmZRT2jRo3CunXrsGfPHhw7dgwzZ860GFUaMWIEUlJSMHnyZKSlpSE/Px9ff/01tm3bBqBpmuG1a9ewfft2XL58GdXV1VZtHT16NPr27YupU6fi8OHD2L9/P2bMmIERI0bgjjvuUL1vevbsialTp2LGjBn44osvkJ+fj/3792Pp0qXYsmULAKBHjx5IS0vD999/j5ycHMydO9ci6yMREbkOAzIiIvI6er0e33zzDUpLSzF48GD88pe/xL333muxIfKCBQswffp0zJw5E8nJyejQoQMeeughi3pSU1MxYsQI/OIXv8CECRMwadIk3HLLLRZlPv/8cwwePBhTpkxBUlISXnzxRfOo2NChQzFv3jw8+uijiIyMxOuvv27VVo1Gg6+++gphYWFISUnB6NGj0a1bN3z66adO6Jkma9aswYwZM7BgwQL06tULkyZNwoEDB9C1a1cAwKJFizBw4ECMHTsW99xzD2JiYjBp0iSntYeIiOzTiJasbiYiIiIiIiLVcISMiIiIiIjITRiQERERERERuQkDMiIiIiIiIjdhQEZEREREROQmDMiIiIiIiIjchAEZERERERGRmzAgIyIiIiIichMGZERERERERG7CgIyIiIiIiMhNGJARERERERG5CQMyIiIiIiIiN/l/lHXYWyotWAEAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Преобразуем год производства в целочисленный тип\n", + "df1['Prod. year'] = df1['Prod. year'].astype(int)\n", + "\n", + "# Статистический анализ для определения выбросов\n", + "Q1 = df1['Price'].quantile(0.25)\n", + "Q3 = df1['Price'].quantile(0.75)\n", + "IQR = Q3 - Q1\n", + "\n", + "# Определение порога для выбросов\n", + "threshold = 1.5 * IQR\n", + "outliers = (df1['Price'] < (Q1 - threshold)) | (df1['Price'] > (Q3 + threshold))\n", + "\n", + "# Вывод выбросов\n", + "print(\"Выбросы:\")\n", + "print(df1[outliers])\n", + "\n", + "# Обработка выбросов\n", + "# В данном случае мы заменим выбросы на медианное значение\n", + "median_price = df1['Price'].median()\n", + "df1.loc[outliers, 'Price'] = median_price\n", + "\n", + "# Визуализация данных после обработки\n", + "plt.figure(figsize=(10, 6))\n", + "plt.scatter(df1['Prod. year'], df1['Price'])\n", + "plt.xlabel('Production Year')\n", + "plt.ylabel('Price')\n", + "plt.title('Scatter Plot of Price vs Production Year (After Handling Outliers)')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Очистим от строк с пустыми значениями наш датасет" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Количество удаленных строк: 0\n", + "\n", + "DataFrame после удаления строк с пропущенными значениями:\n", + " ID Price Levy Manufacturer Model Prod. year Category \\\n", + "0 45654403 13328 1399 LEXUS RX 450 2010 Jeep \n", + "1 44731507 16621 1018 CHEVROLET Equinox 2011 Jeep \n", + "2 45774419 8467 - HONDA FIT 2006 Hatchback \n", + "3 45769185 3607 862 FORD Escape 2011 Jeep \n", + "4 45809263 11726 446 HONDA FIT 2014 Hatchback \n", + "... ... ... ... ... ... ... ... \n", + "19232 45798355 8467 - MERCEDES-BENZ CLK 200 1999 Coupe \n", + "19233 45778856 15681 831 HYUNDAI Sonata 2011 Sedan \n", + "19234 45804997 26108 836 HYUNDAI Tucson 2010 Jeep \n", + "19235 45793526 5331 1288 CHEVROLET Captiva 2007 Jeep \n", + "19236 45813273 470 753 HYUNDAI Sonata 2012 Sedan \n", + "\n", + " Leather interior Fuel type Engine volume Mileage Cylinders \\\n", + "0 Yes Hybrid 3.5 186005 km 6.0 \n", + "1 No Petrol 3 192000 km 6.0 \n", + "2 No Petrol 1.3 200000 km 4.0 \n", + "3 Yes Hybrid 2.5 168966 km 4.0 \n", + "4 Yes Petrol 1.3 91901 km 4.0 \n", + "... ... ... ... ... ... \n", + "19232 Yes CNG 2.0 Turbo 300000 km 4.0 \n", + "19233 Yes Petrol 2.4 161600 km 4.0 \n", + "19234 Yes Diesel 2 116365 km 4.0 \n", + "19235 Yes Diesel 2 51258 km 4.0 \n", + "19236 Yes Hybrid 2.4 186923 km 4.0 \n", + "\n", + " Gear box type Drive wheels Doors Wheel Color Airbags \n", + "0 Automatic 4x4 04-May Left wheel Silver 12 \n", + "1 Tiptronic 4x4 04-May Left wheel Black 8 \n", + "2 Variator Front 04-May Right-hand drive Black 2 \n", + "3 Automatic 4x4 04-May Left wheel White 0 \n", + "4 Automatic Front 04-May Left wheel Silver 4 \n", + "... ... ... ... ... ... ... \n", + "19232 Manual Rear 02-Mar Left wheel Silver 5 \n", + "19233 Tiptronic Front 04-May Left wheel Red 8 \n", + "19234 Automatic Front 04-May Left wheel Grey 4 \n", + "19235 Automatic Front 04-May Left wheel Black 4 \n", + "19236 Automatic Front 04-May Left wheel White 12 \n", + "\n", + "[19237 rows x 18 columns]\n" + ] + } + ], + "source": [ + "# Удаление строк с пропущенными значениями\n", + "df_dropna = df1.dropna()\n", + "\n", + "# Вывод количества удаленных строк\n", + "num_deleted_rows = len(df1) - len(df_dropna)\n", + "print(f\"\\nКоличество удаленных строк: {num_deleted_rows}\")\n", + "\n", + "print(\"\\nDataFrame после удаления строк с пропущенными значениями:\")\n", + "print(df_dropna)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Теперь создадим выборки" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Размер обучающей выборки: 11542\n", + "Размер контрольной выборки: 3847\n", + "Размер тестовой выборки: 3848\n" + ] + } + ], + "source": [ + "# Загрузка данных\n", + "df = pd.read_csv(\"..//static//csv//car_price_prediction.csv\")\n", + "\n", + "# Разделение данных на обучающую и временную выборки\n", + "train_df, temp_df = train_test_split(df, test_size=0.4, random_state=42)\n", + "\n", + "# Разделение остатка на контрольную и тестовую выборки\n", + "val_df, test_df = train_test_split(temp_df, test_size=0.5, random_state=42)\n", + "\n", + "# Проверка размеров выборок\n", + "print(\"Размер обучающей выборки:\", len(train_df))\n", + "print(\"Размер контрольной выборки:\", len(val_df))\n", + "print(\"Размер тестовой выборки:\", len(test_df))\n", + "\n", + "# Сохранение выборок в файлы\n", + "train_df.to_csv(\"..//static//csv//train_data.csv\", index=False)\n", + "val_df.to_csv(\"..//static//csv//val_data.csv\", index=False)\n", + "test_df.to_csv(\"..//static//csv//test_data.csv\", index=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Проанализируем сбалансированность выборок" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Распределение Category в обучающей выборке:\n", + "Category\n", + "Sedan 5289\n", + "Jeep 3246\n", + "Hatchback 1684\n", + "Minivan 396\n", + "Coupe 318\n", + "Universal 216\n", + "Microbus 184\n", + "Goods wagon 151\n", + "Pickup 31\n", + "Cabriolet 20\n", + "Limousine 7\n", + "Name: count, dtype: int64\n", + "Процент автомобилей категории 'Седан': 45.82%\n", + "Процент автомобилей категории 'Джип': 28.12%\n", + "\n", + "Распределение Category в контрольной выборке:\n", + "Category\n", + "Sedan 1697\n", + "Jeep 1109\n", + "Hatchback 608\n", + "Minivan 129\n", + "Coupe 105\n", + "Universal 73\n", + "Microbus 57\n", + "Goods wagon 42\n", + "Pickup 17\n", + "Cabriolet 9\n", + "Limousine 1\n", + "Name: count, dtype: int64\n", + "Процент автомобилей категории 'Седан': 44.11%\n", + "Процент автомобилей категории 'Джип': 28.83%\n", + "\n", + "Распределение Category в тестовой выборке:\n", + "Category\n", + "Sedan 1750\n", + "Jeep 1118\n", + "Hatchback 555\n", + "Minivan 122\n", + "Coupe 109\n", + "Universal 75\n", + "Microbus 65\n", + "Goods wagon 40\n", + "Cabriolet 7\n", + "Pickup 4\n", + "Limousine 3\n", + "Name: count, dtype: int64\n", + "Процент автомобилей категории 'Седан': 45.48%\n", + "Процент автомобилей категории 'Джип': 29.05%\n", + "\n", + "Необходима аугментация данных для балансировки классов.\n", + "Необходима аугментация данных для балансировки классов.\n", + "Необходима аугментация данных для балансировки классов.\n" + ] + } + ], + "source": [ + "train_df = pd.read_csv(\"..//static//csv//train_data.csv\")\n", + "val_df = pd.read_csv(\"..//static//csv//val_data.csv\")\n", + "test_df = pd.read_csv(\"..//static//csv//test_data.csv\")\n", + "\n", + "# Оценка сбалансированности\n", + "def check_balance(df, name):\n", + " counts = df['Category'].value_counts()\n", + " print(f\"Распределение Category в {name}:\")\n", + " print(counts)\n", + " print(f\"Процент автомобилей категории 'Седан': {counts['Sedan'] / len(df) * 100:.2f}%\")\n", + " print(f\"Процент автомобилей категории 'Джип': {counts['Jeep'] / len(df) * 100:.2f}%\")\n", + " print()\n", + "\n", + "# Определение необходимости аугментации данных\n", + "def need_augmentation(df):\n", + " counts = df['Category'].value_counts()\n", + " ratio = counts['Sedan'] / counts['Jeep']\n", + " if ratio > 1.5 or ratio < 0.67:\n", + " print(\"Необходима аугментация данных для балансировки классов.\")\n", + " else:\n", + " print(\"Аугментация данных не требуется.\")\n", + " \n", + "check_balance(train_df, \"обучающей выборке\")\n", + "check_balance(val_df, \"контрольной выборке\")\n", + "check_balance(test_df, \"тестовой выборке\")\n", + "\n", + "need_augmentation(train_df)\n", + "need_augmentation(val_df)\n", + "need_augmentation(test_df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "По результатам анализа требуется приращение, соотношения отзывов вне допустимого диапазона" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Оверсэмплинг:\n", + "Распределение Category в обучающей выборке:\n", + "Category\n", + "Jeep 5289\n", + "Hatchback 5289\n", + "Sedan 5289\n", + "Goods wagon 5289\n", + "Cabriolet 5289\n", + "Universal 5289\n", + "Minivan 5289\n", + "Microbus 5289\n", + "Coupe 5289\n", + "Pickup 5289\n", + "Limousine 5289\n", + "Name: count, dtype: int64\n", + "Процент автомобилей категории 'Седан': 9.09%\n", + "Процент автомобилей категории 'Джип': 9.09%\n", + "\n", + "Распределение Category в контрольной выборке:\n", + "Category\n", + "Jeep 1697\n", + "Sedan 1697\n", + "Minivan 1697\n", + "Coupe 1697\n", + "Hatchback 1697\n", + "Goods wagon 1697\n", + "Universal 1697\n", + "Microbus 1697\n", + "Pickup 1697\n", + "Cabriolet 1697\n", + "Limousine 1697\n", + "Name: count, dtype: int64\n", + "Процент автомобилей категории 'Седан': 9.09%\n", + "Процент автомобилей категории 'Джип': 9.09%\n", + "\n", + "Распределение Category в тестовой выборке:\n", + "Category\n", + "Jeep 1750\n", + "Hatchback 1750\n", + "Sedan 1750\n", + "Coupe 1750\n", + "Minivan 1750\n", + "Goods wagon 1750\n", + "Microbus 1750\n", + "Universal 1750\n", + "Cabriolet 1750\n", + "Pickup 1750\n", + "Limousine 1750\n", + "Name: count, dtype: int64\n", + "Процент автомобилей категории 'Седан': 9.09%\n", + "Процент автомобилей категории 'Джип': 9.09%\n", + "\n", + "Андерсэмплинг:\n", + "Распределение Category в обучающей выборке:\n", + "Category\n", + "Cabriolet 7\n", + "Coupe 7\n", + "Goods wagon 7\n", + "Hatchback 7\n", + "Jeep 7\n", + "Limousine 7\n", + "Microbus 7\n", + "Minivan 7\n", + "Pickup 7\n", + "Sedan 7\n", + "Universal 7\n", + "Name: count, dtype: int64\n", + "Процент автомобилей категории 'Седан': 9.09%\n", + "Процент автомобилей категории 'Джип': 9.09%\n", + "\n", + "Распределение Category в контрольной выборке:\n", + "Category\n", + "Cabriolet 1\n", + "Coupe 1\n", + "Goods wagon 1\n", + "Hatchback 1\n", + "Jeep 1\n", + "Limousine 1\n", + "Microbus 1\n", + "Minivan 1\n", + "Pickup 1\n", + "Sedan 1\n", + "Universal 1\n", + "Name: count, dtype: int64\n", + "Процент автомобилей категории 'Седан': 9.09%\n", + "Процент автомобилей категории 'Джип': 9.09%\n", + "\n", + "Распределение Category в тестовой выборке:\n", + "Category\n", + "Cabriolet 3\n", + "Coupe 3\n", + "Goods wagon 3\n", + "Hatchback 3\n", + "Jeep 3\n", + "Limousine 3\n", + "Microbus 3\n", + "Minivan 3\n", + "Pickup 3\n", + "Sedan 3\n", + "Universal 3\n", + "Name: count, dtype: int64\n", + "Процент автомобилей категории 'Седан': 9.09%\n", + "Процент автомобилей категории 'Джип': 9.09%\n", + "\n" + ] + } + ], + "source": [ + "# Загрузка данных\n", + "train_df = pd.read_csv(\"..//static//csv//train_data.csv\")\n", + "val_df = pd.read_csv(\"..//static//csv//val_data.csv\")\n", + "test_df = pd.read_csv(\"..//static//csv//test_data.csv\")\n", + "\n", + "# Преобразование категориальных признаков в числовые\n", + "def encode(df):\n", + " label_encoders = {}\n", + " for column in df.select_dtypes(include=['object']).columns:\n", + " if column != 'Category': # Пропускаем целевую переменную\n", + " le = LabelEncoder()\n", + " df[column] = le.fit_transform(df[column])\n", + " label_encoders[column] = le\n", + " return label_encoders\n", + "\n", + "# Преобразование целевой переменной в числовые значения\n", + "def encode_target(df):\n", + " le = LabelEncoder()\n", + " df['Category'] = le.fit_transform(df['Category'])\n", + " return le\n", + "\n", + "# Применение кодирования\n", + "label_encoders = encode(train_df)\n", + "encode(val_df)\n", + "encode(test_df)\n", + "\n", + "# Кодирование целевой переменной\n", + "le_target = encode_target(train_df)\n", + "encode_target(val_df)\n", + "encode_target(test_df)\n", + "\n", + "# Проверка типов данных\n", + "def check_data_types(df):\n", + " for column in df.columns:\n", + " if df[column].dtype == 'object':\n", + " print(f\"Столбец '{column}' содержит строковые данные.\")\n", + "\n", + "check_data_types(train_df)\n", + "check_data_types(val_df)\n", + "check_data_types(test_df)\n", + "\n", + "# Функция для выполнения oversampling\n", + "def oversample(df):\n", + " if 'Category' not in df.columns:\n", + " print(\"Столбец 'Category' отсутствует.\")\n", + " return df\n", + " \n", + " X = df.drop('Category', axis=1)\n", + " y = df['Category']\n", + " \n", + " oversampler = RandomOverSampler(random_state=42)\n", + " X_resampled, y_resampled = oversampler.fit_resample(X, y)\n", + " \n", + " resampled_df = pd.concat([X_resampled, y_resampled], axis=1)\n", + " return resampled_df\n", + "\n", + "# Функция для выполнения undersampling\n", + "def undersample(df):\n", + " if 'Category' not in df.columns:\n", + " print(\"Столбец 'Category' отсутствует.\")\n", + " return df\n", + " \n", + " X = df.drop('Category', axis=1)\n", + " y = df['Category']\n", + " \n", + " undersampler = RandomUnderSampler(random_state=42)\n", + " X_resampled, y_resampled = undersampler.fit_resample(X, y)\n", + " \n", + " resampled_df = pd.concat([X_resampled, y_resampled], axis=1)\n", + " return resampled_df\n", + "\n", + "# Применение oversampling и undersampling к каждой выборке\n", + "train_df_oversampled = oversample(train_df)\n", + "val_df_oversampled = oversample(val_df)\n", + "test_df_oversampled = oversample(test_df)\n", + "\n", + "train_df_undersampled = undersample(train_df)\n", + "val_df_undersampled = undersample(val_df)\n", + "test_df_undersampled = undersample(test_df)\n", + "\n", + "# Обратное преобразование целевой переменной в строковые метки\n", + "def decode_target(df, le_target):\n", + " df['Category'] = le_target.inverse_transform(df['Category'])\n", + "\n", + "decode_target(train_df_oversampled, le_target)\n", + "decode_target(val_df_oversampled, le_target)\n", + "decode_target(test_df_oversampled, le_target)\n", + "\n", + "decode_target(train_df_undersampled, le_target)\n", + "decode_target(val_df_undersampled, le_target)\n", + "decode_target(test_df_undersampled, le_target)\n", + "\n", + "# Проверка результатов\n", + "def check_balance(df, name):\n", + " if 'Category' not in df.columns:\n", + " print(f\"Столбец 'Category' отсутствует в {name}.\")\n", + " return\n", + " \n", + " counts = df['Category'].value_counts()\n", + " print(f\"Распределение Category в {name}:\")\n", + " print(counts)\n", + " \n", + " if 'Sedan' in counts and 'Jeep' in counts:\n", + " print(f\"Процент автомобилей категории 'Седан': {counts['Sedan'] / len(df) * 100:.2f}%\")\n", + " print(f\"Процент автомобилей категории 'Джип': {counts['Jeep'] / len(df) * 100:.2f}%\")\n", + " else:\n", + " print(\"Отсутствуют одна или обе категории (Седан/Внедорожник).\")\n", + " print()\n", + "\n", + "# Проверка сбалансированности после oversampling\n", + "print(\"Оверсэмплинг:\")\n", + "check_balance(train_df_oversampled, \"обучающей выборке\")\n", + "check_balance(val_df_oversampled, \"контрольной выборке\")\n", + "check_balance(test_df_oversampled, \"тестовой выборке\")\n", + "\n", + "# Проверка сбалансированности после undersampling\n", + "print(\"Андерсэмплинг:\")\n", + "check_balance(train_df_undersampled, \"обучающей выборке\")\n", + "check_balance(val_df_undersampled, \"контрольной выборке\")\n", + "check_balance(test_df_undersampled, \"тестовой выборке\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### **Классические рок-треки (по данным Spotify)**\n", + "https://www.kaggle.com/datasets/thebumpkin/14400-classic-rock-tracks-with-spotify-data\n", + "\n", + " Этот набор данных, содержащий 1200 уникальных альбомов и 14 400 треков, представляет собой не просто коллекцию — это хроника эволюции классического рока. Каждый трек тщательно каталогизирован с 18 столбцами данных, включая ключевые метаданные, такие как название трека, исполнитель, альбом и год выпуска, наряду с функциями Spotify audio, которые позволяют получить представление о звуковом ландшафте этих неподвластных времени мелодий. Бизнес-цель может заключаться в улучшении стратегии маркетинга и продвижения музыкальных треков. Предположим как этот набор может быть полезен для бизнеса: Персонализированные рекомендации: Создание алгоритмов, которые будут рекомендовать пользователям музыку на основе их предпочтений. Цель технического проекта: Разработать и внедрить систему рекомендаций, которая будет предсказывать и рекомендовать пользователям музыкальные треки на основе их предпочтений и поведения. Входные данные: Данные о пользователях: Идентификатор пользователя, история прослушиваний, оценки треков, время прослушивания, частота прослушивания. Данные о треках: Атрибуты треков (название, исполнитель, альбом, год, длительность, танцевальность, энергичность, акустичность и т.д.). Данные о взаимодействии: Время и частота взаимодействия пользователя с определенными треками. Целевой признак: Рекомендации: Булева переменная, указывающая, должен ли конкретный трек быть рекомендован пользователю (1 - рекомендуется, 0 - не рекомендуется)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Выгрузка данных из csv файла \"Данные о клиентах\" в датафрейм" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index(['Track', 'Artist', 'Album', 'Year', 'Duration', 'Time_Signature',\n", + " 'Danceability', 'Energy', 'Key', 'Loudness', 'Mode', 'Speechiness',\n", + " 'Acousticness', 'Instrumentalness', 'Liveness', 'Valence', 'Tempo',\n", + " 'Popularity'],\n", + " dtype='object')\n" + ] + } + ], + "source": [ + "df = pd.read_csv(\"..//static//csv//UltimateClassicRock.csv\")\n", + "print(df.columns)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Анализируем датафрейм при помощи \"ящика с усами\". Есть смещение в сторону меньших значений, это можно исправить при помощи oversampling и undersampling." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAx8AAAIjCAYAAABia6bHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAzVUlEQVR4nO3dd5RV5dnw4XsGptBRUYoCgg3ELqhAFFQs2DXqp6KIvUAUjTEaC9iisb72khcBA/ZEUINRFEskRikLSxTUCKJB5FXpAgPM/v5wzQnDDFV8BsbrWosVdjvnmT07zvmxy+RlWZYFAADATyy/qgcAAAD8PIgPAAAgCfEBAAAkIT4AAIAkxAcAAJCE+AAAAJIQHwAAQBLiAwAASEJ8AAAASYgPgCo0ZcqUyMvLi0GDBlX1UFiBXr16xZZbbrnOXzcvLy/69++/zl8XYH0mPoBqYdCgQZGXl1fuz2abbRb77rtvvPDCC8nH89prr5UbS0FBQbRu3Tp69uwZn3322Tp5j3/84x/Rv3//mDVr1jp5vaqQYj9tKKrD9xNgVWpW9QAA1qVrr702WrVqFVmWxddffx2DBg2KQw45JJ577rk47LDDko/nggsuiA4dOsTixYtj/Pjx8dBDD8Vf//rXeP/996NZs2Y/6rX/8Y9/xDXXXBO9evWKhg0brpsBV5Gfcj+trxYsWBA1a/73x3B1+n4CrIj4AKqV7t27R/v27XPTZ5xxRjRu3Dgee+yxKomPvffeO4499tiIiDjttNNi2223jQsuuCAGDx4cl19+efLxrK9+LvuptLQ0SkpKori4OIqLi6t6OADJuewKqNYaNmwYtWrVKvcvzBER8+fPj1//+tfRvHnzKCoqiu222y5uvfXWyLIsIn74V+k2bdpEmzZtYsGCBbntvvvuu2jatGl06tQpli5dusbj2W+//SIiYvLkyStdb9SoUbH33ntHnTp1omHDhnHkkUfGRx99lFvev3//+M1vfhMREa1atcpdtjRlypRVjmH5y9PK/rz22msV1u3Vq1el6y5/r8LTTz8d7du3j3r16pVb79Zbb13leCpT2X667777ol27dlFUVBTNmjWL3r17V7hEqWvXrrHDDjvEuHHjolOnTlGrVq1o1apVPPDAA+XWK7tMb/n9VXYZWGX7Ylm33nprdOrUKTbZZJOoVatW7L777vH0009XWC8vLy/69OkTQ4cOzY39b3/7W25Z2X5c2fezS5cusfPOO1c6ju222y4OOuiglY4VYH3izAdQrcyePTu++eabyLIsZsyYEXfffXfMmzcvTj755Nw6WZbFEUccEa+++mqcccYZscsuu8SLL74Yv/nNb+I///lP3HHHHVGrVq0YPHhwdO7cOa644oq4/fbbIyKid+/eMXv27Bg0aFDUqFFjjcf373//OyIiNtlkkxWu8/LLL0f37t2jdevW0b9//1iwYEHcfffd0blz5xg/fnxsueWWccwxx8THH38cjz32WNxxxx3RqFGjiIjYdNNNV2scBxxwQPTs2TMiIsaMGRN33XXXCtdt1KhR3HHHHbnpU045pdzyt956K44//vjYeeed46abbooGDRrEN998ExdddNFqjaUyy++n/v37xzXXXBPdunWL8847LyZNmhT3339/jBkzJkaPHh0FBQW5bWfOnBmHHHJIHH/88XHiiSfGk08+Geedd14UFhbG6aefvtZjWtadd94ZRxxxRPTo0SNKSkri8ccfj+OOOy6ef/75OPTQQ8utO2rUqHjyySejT58+0ahRo0pvXl/Z9/OUU06Js846Kz744IPYYYcdctuMGTMmPv7447jyyivXydcEkEQGUA0MHDgwi4gKf4qKirJBgwaVW3fYsGFZRGTXX399ufnHHntslpeXl3366ae5eZdffnmWn5+fvfHGG9lTTz2VRUT2P//zP6scz6uvvppFRPbwww9n//d//5dNmzYt++tf/5ptueWWWV5eXjZmzJgsy7Js8uTJWURkAwcOzG27yy67ZJtttln27bff5ua9++67WX5+ftazZ8/cvFtuuSWLiGzy5MmrvZ9KSkqyiMj69OmTm1f2db366qsV1u/Ro0fWqlWrcvMiIuvXr19u+vLLL88iIvvqq69y88q+rltuuWWl41md/TRjxoyssLAwO/DAA7OlS5fmtr3nnnty25bp0qVLFhHZbbfdlpu3aNGi3D4tKSnJsuy/x8vy+65sPMvui1NPPTVr2bJlufW+//77ctMlJSXZDjvskO23334V9lV+fn72r3/9q8LXvvx+XNH3c9asWVlxcXH229/+ttz8Cy64IKtTp042b968Cq8NsL5y2RVQrdx7770xcuTIGDlyZAwZMiT23XffOPPMM+Mvf/lLbp0RI0ZEjRo14oILLii37a9//evIsqzc07H69+8f7dq1i1NPPTXOP//86NKlS4XtVub000+PTTfdNJo1axaHHnpozJ8/PwYPHlzuvpRlffXVVzFhwoTo1atXbLzxxrn5O+20UxxwwAExYsSI1X7vyixcuDAiYrXvNygpKYmioqKVrjN37tzIz8//UTdJr2w/vfzyy1FSUhJ9+/aN/Pz//tg666yzon79+vHXv/613GvVrFkzzjnnnNx0YWFhnHPOOTFjxowYN27cWo9xWbVq1cr9febMmTF79uzYe++9Y/z48RXW7dKlS2y//fZr/V4NGjSII488Mh577LHcZYFLly6NJ554Io466qioU6fOWr82QGouuwKqlT322KPcB/sTTzwxdt111+jTp08cdthhUVhYGJ9//nk0a9Ys6tWrV27btm3bRkTE559/nptXWFgYDz/8cHTo0CGKi4tj4MCBkZeXt9rjufrqq2PvvfeOGjVqRKNGjaJt27YV7j9ZVtl7b7fddhWWtW3bNl588cWYP3/+Wn/g/OabbyLihw+0q2PWrFlRt27dla7TsWPHuOeee+LCCy+MSy+9NBo0aBAzZ85co3GtbD+taJ8UFhZG69aty32/IiKaNWtWYf9su+22EfHD71XZa6+91mhslXn++efj+uuvjwkTJsSiRYty8ys7Nlq1avWj369nz57xxBNPxN///vfYZ5994uWXX46vv/66wiVwAOs78QFUa/n5+bHvvvvGnXfeGZ988km0a9dujV/jxRdfjIgfzhp88skna/Rhcscdd4xu3bqt8Xv+VMpusF7dX5o3ffr0aNmy5UrXOeGEE2L8+PFx9913x0MPPbRW40q9n1YUkKvzEIG///3vccQRR8Q+++wT9913XzRt2jQKCgpi4MCB8eijj1ZYf9mzJGvroIMOisaNG8eQIUNin332iSFDhkSTJk3Wq2MLYHW47Aqo9pYsWRIREfPmzYuIiJYtW8a0adNi7ty55dabOHFibnmZ9957L6699to47bTTYtddd40zzzwzZs+e/ZONtey9J02aVGHZxIkTo1GjRrl/1V+TMzBlxo4dGxGxwsu+lrV48eL49NNPc2eEViQ/Pz9uvfXW6Nq1a2yzzTa5S97WlRXtk5KSkpg8eXKFOJo2bVrMnz+/3LyPP/44Iv4bXRtttFFERIWnZS1/FqUyf/7zn6O4uDhefPHFOP3006N79+7rJAJW9v2sUaNGnHTSSfH000/HzJkzY9iwYXHiiSeu1UMPAKqS+ACqtcWLF8dLL70UhYWFuQ/RhxxySCxdujTuueeecuvecccdkZeXF927d89t26tXr2jWrFnceeedMWjQoPj6669/1FOcVqVp06axyy67xODBg8t9MP7ggw/ipZdeikMOOSQ3ryxC1uQ3Yj/99NOx3XbbRZs2bVa57vDhw2PBggW5x96uzN133x2jRo2KoUOHRrdu3aJz586rPaZV6datWxQWFsZdd92Vu+chImLAgAExe/bsCk+XWrJkSTz44IO56ZKSknjwwQdj0003jd133z0iIrbaaquIiHjjjTdy6y1dunS1ztzUqFEj8vLyyp0lmTJlSgwbNmytvr4yq/p+nnLKKTFz5sw455xzKjzBDWBD4bIroFp54YUXcmcwZsyYEY8++mh88skncdlll0X9+vUjIuLwww+PfffdN6644oqYMmVK7LzzzvHSSy/F8OHDo2/fvrkPpmXX9L/yyitRr1692GmnneLqq6+OK6+8Mo499thyIbAu3XLLLdG9e/fo2LFjnHHGGblH7TZo0KDc79co+yB9xRVXxAknnBAFBQVx+OGHV3o/yGeffRY333xzvPPOO3HMMceUOzMxZsyYiIgYOXJktGjRIpo0aRL9+vWL++67Lzp16hQHHnjgSsf7r3/9Ky699NLo379/dOjQYR3sgfI23XTTuPzyy+Oaa66Jgw8+OI444oiYNGlS3HfffdGhQ4cKH8KbNWsWf/jDH2LKlCmx7bbbxhNPPBETJkyIhx56KPdI3nbt2sVee+0Vl19+eXz33Xex8cYbx+OPP547S7Yyhx56aNx+++1x8MEHx0knnRQzZsyIe++9N7beeut477331vrrXNX3c9ddd40ddtghnnrqqWjbtm3stttua/1eAFWmip+2BbBOVPao3eLi4myXXXbJ7r///qy0tLTc+nPnzs0uuuiirFmzZllBQUG2zTbbZLfccktuvXHjxmU1a9bMfvWrX5XbbsmSJVmHDh2yZs2aZTNnzlzheMoe2frUU0+tdNyVPWo3y7Ls5Zdfzjp37pzVqlUrq1+/fnb44YdnH374YYXtr7vuumzzzTfP8vPzV/rY3RU9inj5PwMHDsy+/PLLrHnz5lnfvn2z2bNnV3itWOYRsQsXLsx22mmn7Be/+EW2ZMmSCl/X6j5q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4gMAAEhCfAAAAEmIDwAAIAnxAQAAJCE+AACAJMQHAACQhPgAAACSEB8AAEAS4gMAAEhCfAAAAEmIDwAAIAnxAQAAJCE+AACAJMQHAACQhPgAAACSqFnVAwAAWNaIESPi5ptvzk1feumlccghh+Sm33jjjbj66qtz09dee23ss88+uelPP/00zjrrrMiyLPLy8uKPf/xjbL311rnlb775Zlx55ZW56euvvz5+8YtfrHJZRMQ//vGP+N3vfpeb/v3vfx+dOnXKTU+cODHOPffc3PQDDzwQbdq0yU1//PHHcfbZZ+emH3roodh2220jIuLDDz+M888/P7fsvvvui+233361to2ImD59epx33nkxb968qFu3btx///3RpEmTiIiYMmVKnHHGGbF06dKoUaNGDBgwILbccsvctlOnTo0zzjgjFi9eHAUFBTFgwIBo0aJFbvm8efPixhtvjGnTpkWzZs3i8ssvj7p16+aWf/fdd3HxxRfHt99+G5tsskncfvvtsfHGG69yXBERJSUlMXz48NxrH3nkkVFYWLjayxcsWBAPPvhgfPnll7HFFlvEOeecE7Vq1frR20ZELF26NN5777347rvvYuONN46ddtopatSosdpj+ymtamzrq7wsy7K12XDOnDnRoEGDmD17dtSvX39dj2uNlP2fcfn/E7J+Kvt+zd/+iCit06iqh7PeyJ//TdT58Fn7ZR0q26f+2wDrp8p+fnft2nWF67/22ms/6fKVWd/f++CDD46FCxdWWFZcXByLFi2Kyj7u5eXlxauvvhr77bdflJaWVlien58fo0aNinPPPTcmTpxYYXmbNm3igQceiGOOOSa+++67Css33njj+P7771c4rr/97W/xwAMPxFNPPRVLly7NLatRo0Ycd9xxce65565y+RVXXBGjR4+u8PqdO3eO5s2br/W2N9xwQ7zxxhtx3333xfTp03PLmjRpEueff37ss88+qxzbT2lVY6sKq9sGLrsCANYLy3/AXvZf5itbvuOOO65weY0aNeKUU04p9y/By2+/yy67rHAsyy9bftvdd999hcvz8vLil7/8ZeTl5VW6PD8/P0444YTIz6/8Y9iRRx65wteubNuuXbvmPuA3adIk+vXrlzuzsHDhwlx4FBUVxTnnnBNFRUUREZFlWXTt2jUXHrVr145f/epXUbt27YiIKC0tja5du8bEiRMjLy8vDjzwwPjf//3fOPDAAyMvLy8mTpwY+++/fy48tt9++7jttttyZ2u+++67lY5r//33j8cffzzq168fl1xySfz5z3+OSy65JOrXrx+PP/54nHvuuStd3qNHjxg9enQUFBTESSedFEOGDImTTjopCgoKYvTo0T9q23PPPTf69esXrVu3jnvvvTdGjBgR9957b7Ru3Tr69esXV1xxxUpf/4EHHqj0e7suvPHGGysd2xtvvPGTvfe64MwHyTnzUTlnPtY9Zz5g/bbsz+9PP/00d6nV1VdfHfvtt19uvVGjRsW1116bm7755ptjjz32yE2/8847cemll+amhwwZEltssUVu+ssvv4yTTz45N33rrbdG+/btc9MDBgyIP/3pTxERceqpp8Zpp52WWzZ27Ni45JJLctO333577Lbbbrnp8ePHx8UXX5ybHjRoULlomjJlSvTq1Ss3/cgjj5S7nOnll1+O66+/PiIirrrqqth///1zyz777LM4/fTTV7jt1KlTo2fPnrnpYcOGRcOGDXPTH3zwQfTp0yciIu6+++5ysTZ9+vQ44YQTctNPPvlkbLbZZrnpGTNmxPHHH5+b/tvf/hbFxcW56YULF8bBBx+cm37++efLXYY1efLk3H5cfp/MmjUrjjrqqIiIqFu3bgwbNixq1vzvnQBLliyJ4447LmbOnBkNGzaMp59+usLyY489NmbNmhU1a9aMESNGlLvUad68eXHYYYdFRMRzzz0X9erVW+1tS0pK4pBDDoklS5bEnnvuGTfeeGO50CstLY3f/e538c9//nOFYzvuuONizpw58cILL6zzS7CWLl0aPXr0iNatW8f1119fYWxXXnllTJ48OYYMGZL8EqzVbYPVvudj0aJFsWjRonJvsL75/PPPq3oIrAbfJ1JzzMH6adn/by57j8ey4VE2vWx8LBselU0vGx6VTS8bHhGRC4+IiMGDB5eLj+XXXTY8Kpte/mzN8tPLxkNE5MIjIuK6664rFx+tW7de6bbLTy8bHhERF154Ye7vV199dTzzzDO56WXvuYiIcuFRNp2fnx+lpaWRl5dXLjwifrhsqnbt2vH9999HnTp1yoVHRJQLsv79+8egQYPKjbNevXoxd+7cKC0tLffhPSKiZs2asfPOO8drr70Wu+yyS6XLW7ZsGbNmzYodd9yxwgf8F154Iff3AQMGRN++fVd728LCwthnn31i1KhRUVRUVOHsVH5+fmy++eYREXHggQdWOrbTTz89brvtthg+fHgcd9xxsS699957MX369LjqqqsqHVuPHj2id+/e8d5778Wuu+66Tt97XVnt+Ljxxhvjmmuu+SnH8qPdcMMNVT0EYD3kvw2w4Vj+wzprb9l7EebNm7fG29evXz9mzZpV6f0iy6pTp06Fecu+37ffflth+bbbbhvjxo2LkpKSSl+zLHaWj54yZWNq1KjilQLTpk3L/f3LL79co20jfriXZdSoUTF37txKl5f9Y3yzZs0qXd6xY8cK41hXyi5xa9WqVaXLy+ZXdg/O+mK14+Pyyy8vV7Fz5syJ5s2b/ySDWltXXHFFtGzZsqqHwSp8/vnnPgySlP82wPqpsp8HU6ZMqZrBVEM1atTIBcjyZyZWR9lVLsveu1KZ+fPnV5hXt27dmDlzZkREbLLJJhWWf/zxxxERK7wsqexekcpuVl92TN98802FZctGwfJnvVa1bUTkbq5f9nKtZZXdM7OiuHjrrbcqjGNdKXuC2OTJk6Ndu3YVlk+ePLnceuuj1Y6PoqKi3M5eX7Vs2dJ13UAF/tsA679LL700d+nVqFGjKtzzsax33nmnwj0fyyp7bOqy08saO3ZsucupTjnllHL3fCy/7rLGjx9f4Z6PZU2ZMqXCPR/Lmjp1arnLpa688spy93ws67PPPlvptlOnTi23fNasWeUuvbrzzjtz93wse9laRJR7SlLED/d4LH/PR9mN6FmWxcKFCyvc8/H9999HxA/xUfYY3TK333577vK1/v37Vxhn2VmF/Pz8WLJkSYX7Jt59992IiJgwYUKly8su2Xv//fejpKSkXMR079497r333oiIOOOMM8q996q2LSkpyd2wvWjRoigtLa1wX8V//vOfiIh46aWX4uyzz64wtocffjhq1KhR4cEB68JOO+0UTZo0iaFDh1Z6z8fQoUOjadOmsdNOO63z915X3HBOcm44r5wbztc9N5zD+m35n9/LP1Fq8803z33Qq0ybNm0qfQRsxH8febr8o1CX1a5du/jXv/61xssifvgQ+N5771W6LC8vLw4//PB47rnnKr1kKT8/P44++uh45plnKn3E7SGHHBIjRoyo9LVXtW2TJk3ijDPOiAEDBlQIjKKioujRo0cMHTq03H28ZWrXrh09e/aMRx55JBcW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IxXHGik4zqq3lZ3xKOOGcwAAIAnxAQAAJFEt4qOoqCj69esXRUVFVT0UqjnHGqk41kjFsUYKjjPKrPUN5wAAAGuiWpz5AAAA1n/iAwAASEJ8AAAASYgPAAAgiWoRH/fee29sueWWUVxcHHvuuWe88847VT0kNmA33nhjdOjQIerVqxebbbZZHHXUUTFp0qRy6yxcuDB69+4dm2yySdStWzd++ctfxtdff11FI6a6uOmmmyIvLy/69u2bm+dYY135z3/+EyeffHJssskmUatWrdhxxx1j7NixueVZlsXVV18dTZs2jVq1akW3bt3ik08+qcIRsyFaunRpXHXVVdGqVauoVatWbLXVVnHdddfFss83cqz9vG3w8fHEE0/ExRdfHP369Yvx48fHzjvvHAcddFDMmDGjqofGBur111+P3r17xz//+c8YOXJkLF68OA488MCYP39+bp2LLroonnvuuXjqqafi9ddfj2nTpsUxxxxThaNmQzdmzJh48MEHY6eddio337HGujBz5szo3LlzFBQUxAsvvBAffvhh3HbbbbHRRhvl1rn55pvjrrvuigceeCDefvvtqFOnThx00EGxcOHCKhw5G5o//OEPcf/998c999wTH330UfzhD3+Im2++Oe6+++7cOo61n7lsA7fHHntkvXv3zk0vXbo0a9asWXbjjTdW4aioTmbMmJFFRPb6669nWZZls2bNygoKCrKnnnoqt85HH32URUT21ltvVdUw2YDNnTs322abbbKRI0dmXbp0yS688MIsyxxrrDu//e1vs1/84hcrXF5aWpo1adIku+WWW3LzZs2alRUVFWWPPfZYiiFSTRx66KHZ6aefXm7eMccck/Xo0SPLMscaWbZBn/koKSmJcePGRbdu3XLz8vPzo1u3bvHWW29V4cioTmbPnh0RERtvvHFERIwbNy4WL15c7rhr06ZNtGjRwnHHWundu3cceuih5Y6pCMca686zzz4b7du3j+OOOy4222yz2HXXXeOPf/xjbvnkyZNj+vTp5Y61Bg0axJ577ulYY4106tQpXnnllfj4448jIuLdd9+NN998M7p37x4RjjUialb1AH6Mb775JpYuXRqNGzcuN79x48YxceLEKhoV1UlpaWn07ds3OnfuHDvssENEREyfPj0KCwujYcOG5dZt3LhxTJ8+vQpGyYbs8ccfj/Hjx8eYMWMqLHOssa589tlncf/998fFF18cv/vd72LMmDFxwQUXRGFhYZx66qm546myn6eONdbEZZddFnPmzIk2bdpEjRo1YunSpXHDDTdEjx49IiIca2zY8QE/td69e8cHH3wQb775ZlUPhWroiy++iAsvvDBGjhwZxcXFVT0cqrHS0tJo3759/P73v4+IiF133TU++OCDeOCBB+LUU0+t4tFRnTz55JMxdOjQePTRR6Ndu3YxYcKE6Nu3bzRr1syxRkRs4DecN2rUKGrUqFHhyS9ff/11NGnSpIpGRXXRp0+feP755+PVV1+NLbbYIje/SZMmUVJSErNmzSq3vuOONTVu3LiYMWNG7LbbblGzZs2oWbNmvP7663HXXXdFzZo1o3Hjxo411ommTZvG9ttvX25e27ZtY+rUqRERuePJz1N+rN/85jdx2WWXxQknnBA77rhjnHLKKXHRRRfFjTfeGBGONTbw+CgsLIzdd989Xnnlldy80tLSeOWVV6Jjx45VODI2ZFmWRZ8+feKZZ56JUaNGRatWrcot33333aOgoKDccTdp0qSYOnWq4441sv/++8f7778fEyZMyP1p37599OjRI/d3xxrrQufOnSs8Mvzjjz+Oli1bRkREq1atokmTJuWOtTlz5sTbb7/tWGONfP/995GfX/7jZY0aNaK0tDQiHGvEhv+0q8cffzwrKirKBg0alH344YfZ2WefnTVs2DCbPn16VQ+NDdR5552XNWjQIHvttdeyr776Kvfn+++/z61z7rnnZi1atMhGjRqVjR07NuvYsWPWsWPHKhw11cWyT7vKMsca68Y777yT1axZM7vhhhuyTz75JBs6dGhWu3btbMiQIbl1brrppqxhw4bZ8OHDs/feey878sgjs1atWmULFiyowpGzoTn11FOzzTffPHv++eezyZMnZ3/5y1+yRo0aZZdeemluHcfaz9sGHx9ZlmV333131qJFi6ywsDDbY489sn/+859VPSQ2YBFR6Z+BAwfm1lmwYEF2/vnnZxtttFFWu3bt7Oijj86++uqrqhs01cby8eFYY1157rnnsh122CErKirK2rRpkz300EPllpeWlmZXXXVV1rhx46yoqCjbf//9s0mTJlXRaNlQzZkzJ7vwwguzFi1aZMXFxVnr1q2zK664Ilu0aFFuHcfaz1teli3zKycBAAB+Ihv0PR8AAMCGQ3wAAABJiA8AACAJ8QEAACQhPgAAgCTEBwAAkIT4AAAAkhAfAABAEuIDgB+la9eu0bdv3x/9Ov37949ddtnlR78OAOsv8QGwAevVq1fk5eVFXl5eFBYWxtZbbx3XXnttLFmypKqHtsYuueSSeOWVV3LTvXr1iqOOOqrqBgTAOlezqgcAwI9z8MEHx8CBA2PRokUxYsSI6N27dxQUFMTll19e1UNbLVmWxdKlS6Nu3bpRt27dqh4OAD8hZz4ANnBFRUXRpEmTaNmyZZx33nnRrVu3ePbZZ2PmzJnRs2fP2GijjaJ27drRvXv3+OSTT3LbDRo0KBo2bBjDhg2LbbbZJoqLi+Oggw6KL774IrdOZWcf+vbtG127dl3heP70pz9F+/bto169etGkSZM46aSTYsaMGbnlr732WuTl5cULL7wQu+++exQVFcWbb75Z7rKr/v37x+DBg2P48OG5MzuvvfZa7LffftGnT59y7/d///d/UVhYWO6sCQDrJ/EBUM3UqlUrSkpKolevXjF27Nh49tln46233oosy+KQQw6JxYsX59b9/vvv44YbbohHHnkkRo8eHbNmzYoTTjjhR73/4sWL47rrrot33303hg0bFlOmTIlevXpVWO+yyy6Lm266KT766KPYaaedyi275JJL4vjjj4+DDz44vvrqq/jqq6+iU6dOceaZZ8ajjz4aixYtyq07ZMiQ2HzzzWO//fb7UeMG4KfnsiuAaiLLsnjllVfixRdfjO7du8ewYcNi9OjR0alTp4iIGDp0aDRv3jyGDRsWxx13XET8EAr33HNP7LnnnhERMXjw4Gjbtm288847sccee6zVOE4//fTc31u3bh133XVXdOjQIebNm1fusqprr702DjjggEpfo27dulGrVq1YtGhRNGnSJDf/mGOOiT59+sTw4cPj+OOPj4gfzuCU3fsCwPrNmQ+ADdzzzz8fdevWjeLi4ujevXv8v//3/6JXr15Rs2bNXFRERGyyySax3XbbxUcffZSbV7NmzejQoUNuuk2bNtGwYcNy66ypcePGxeGHHx4tWrSIevXqRZcuXSIiYurUqeXWa9++/Rq/dnFxcZxyyinx8MMPR0TE+PHj44MPPqj0zAoA6x/xAbCB23fffWPChAnxySefxIIFC2Lw4MHr7CxAfn5+ZFlWbt6yl20tb/78+XHQQQdF/fr1Y+jQoTFmzJh45plnIiKipKSk3Lp16tRZqzGdeeaZMXLkyPjyyy9j4MCBsd9++0XLli3X6rUASEt8AGzg6tSpE1tvvXW0aNEiatb84Wratm3bxpIlS+Ltt9/Orfftt9/GpEmTYvvtt8/NW7JkSYwdOzY3PWnSpJg1a1a0bds2IiI23XTT+Oqrr8q934QJE1Y4lokTJ8a3334bN910U+y9997Rpk2bcjebr4nCwsJYunRphfk77rhjtG/fPv74xz/Go48+Wu4yLwDWb+IDoBraZptt4sgjj4yzzjor3nzzzXj33Xfj5JNPjs033zyOPPLI3HoFBQXxq1/9Kt5+++0YN25c9OrVK/baa6/c/R777bdfjB07Nh555JH45JNPol+/fvHBBx+s8H1btGgRhYWFcffdd8dnn30Wzz77bFx33XVr9TVsueWW8d5778WkSZPim2++KXfG5cwzz4ybbropsiyLo48+eq1eH4D0xAdANTVw4MDYfffd47DDDouOHTtGlmUxYsSIKCgoyK1Tu3bt+O1vfxsnnXRSdO7cOerWrRtPPPFEbvlBBx0UV111VVx66aXRoUOHmDt3bvTs2XOF77npppvGoEGD4qmnnortt98+brrpprj11lvXavxnnXVWbLfddtG+ffvYdNNNY/To0bllJ554YtSsWTNOPPHEKC4uXqvXByC9vGz5i3kB+FkYNGhQ9O3bN2bNmlXVQ1ljU6ZMia222irGjBkTu+22W1UPB4DV5FG7AGwwFi9eHN9++21ceeWVsddeewkPgA2My64A2GCMHj06mjZtGmPGjIkHHnigqocDwBpy2RUAAJCEMx8AAEAS4gMAAEhCfAAAAEmIDwAAIAnxAQAAJCE+AACAJMQHAACQhPgAAACS+P87fxg1bSChrgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Box plot для столбца 'Popularity'\n", + "plt.figure(figsize=(10, 6))\n", + "sns.boxplot(x=df['Popularity'])\n", + "plt.title('Box Plot для Popularity')\n", + "plt.xlabel('Popularity')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Решим проблему пустых значений при помощи удаления таких строк." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [], + "source": [ + "df_cleaned = df.dropna()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Разбиение набора данных на обучающую, контрольную и тестовую выборки" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Размер обучающей выборки: 8650\n", + "Размер контрольной выборки: 2884\n", + "Размер тестовой выборки: 2884\n" + ] + } + ], + "source": [ + "# Разделение на обучающую и тестовую выборки\n", + "train_df, test_df = train_test_split(df_cleaned, test_size=0.2, random_state=42)\n", + "\n", + "# Разделение обучающей выборки на обучающую и контрольную\n", + "train_df, val_df = train_test_split(train_df, test_size=0.25, random_state=42)\n", + "\n", + "print(\"Размер обучающей выборки:\", len(train_df))\n", + "print(\"Размер контрольной выборки:\", len(val_df))\n", + "print(\"Размер тестовой выборки:\", len(test_df))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Оценка сбалансированности выборок, по результатам видно что баланса тут мало" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Распределение Popularity в обучающей выборке:\n", + "Popularity\n", + "23 258\n", + "15 250\n", + "26 246\n", + "21 245\n", + "14 245\n", + " ... \n", + "84 1\n", + "87 1\n", + "91 1\n", + "79 1\n", + "86 1\n", + "Name: count, Length: 88, dtype: int64\n", + "\n", + "Распределение Popularity в контрольной выборке:\n", + "Popularity\n", + "17 90\n", + "26 86\n", + "21 83\n", + "24 83\n", + "28 80\n", + " ..\n", + "85 1\n", + "83 1\n", + "84 1\n", + "80 1\n", + "77 1\n", + "Name: count, Length: 85, dtype: int64\n", + "\n", + "Распределение Popularity в тестовой выборке:\n", + "Popularity\n", + "22 86\n", + "21 85\n", + "12 84\n", + "20 82\n", + "26 81\n", + " ..\n", + "76 2\n", + "71 2\n", + "79 1\n", + "82 1\n", + "80 1\n", + "Name: count, Length: 80, dtype: int64\n", + "\n" + ] + } + ], + "source": [ + "def check_balance(df, name):\n", + " counts = df['Popularity'].value_counts()\n", + " print(f\"Распределение Popularity в {name}:\")\n", + " print(counts)\n", + " print()\n", + "\n", + "check_balance(train_df, \"обучающей выборке\")\n", + "check_balance(val_df, \"контрольной выборке\")\n", + "check_balance(test_df, \"тестовой выборке\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Выполним овер- и андер- слемпинг." + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Распределение Popularity в обучающей выборке после oversampling:\n", + "Popularity\n", + "44 258\n", + "20 258\n", + "30 258\n", + "27 258\n", + "8 258\n", + " ... \n", + "78 258\n", + "79 258\n", + "74 258\n", + "81 258\n", + "86 258\n", + "Name: count, Length: 88, dtype: int64\n", + "\n", + "Распределение Popularity в контрольной выборке после oversampling:\n", + "Popularity\n", + "21 90\n", + "11 90\n", + "28 90\n", + "23 90\n", + "37 90\n", + " ..\n", + "61 90\n", + "84 90\n", + "80 90\n", + "77 90\n", + "0 90\n", + "Name: count, Length: 85, dtype: int64\n", + "\n", + "Распределение Popularity в тестовой выборке после oversampling:\n", + "Popularity\n", + "14 86\n", + "47 86\n", + "27 86\n", + "13 86\n", + "66 86\n", + " ..\n", + "63 86\n", + "79 86\n", + "71 86\n", + "82 86\n", + "80 86\n", + "Name: count, Length: 80, dtype: int64\n", + "\n" + ] + } + ], + "source": [ + "def oversample(df):\n", + " X = df.drop('Popularity', axis=1)\n", + " y = df['Popularity']\n", + " \n", + " oversampler = RandomOverSampler(random_state=42)\n", + " X_resampled, y_resampled = oversampler.fit_resample(X, y)\n", + " \n", + " resampled_df = pd.concat([X_resampled, y_resampled], axis=1)\n", + " return resampled_df\n", + "\n", + "train_df_oversampled = oversample(train_df)\n", + "val_df_oversampled = oversample(val_df)\n", + "test_df_oversampled = oversample(test_df)\n", + "\n", + "check_balance(train_df_oversampled, \"обучающей выборке после oversampling\")\n", + "check_balance(val_df_oversampled, \"контрольной выборке после oversampling\")\n", + "check_balance(test_df_oversampled, \"тестовой выборке после oversampling\")" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Распределение Popularity в обучающей выборке после undersampling:\n", + "Popularity\n", + "0 1\n", + "1 1\n", + "2 1\n", + "3 1\n", + "4 1\n", + " ..\n", + "84 1\n", + "85 1\n", + "86 1\n", + "87 1\n", + "91 1\n", + "Name: count, Length: 88, dtype: int64\n", + "\n", + "Распределение Popularity в контрольной выборке после undersampling:\n", + "Popularity\n", + "0 1\n", + "1 1\n", + "2 1\n", + "3 1\n", + "4 1\n", + " ..\n", + "82 1\n", + "83 1\n", + "84 1\n", + "85 1\n", + "87 1\n", + "Name: count, Length: 85, dtype: int64\n", + "\n", + "Распределение Popularity в тестовой выборке после undersampling:\n", + "Popularity\n", + "0 1\n", + "1 1\n", + "2 1\n", + "3 1\n", + "4 1\n", + " ..\n", + "76 1\n", + "77 1\n", + "79 1\n", + "80 1\n", + "82 1\n", + "Name: count, Length: 80, dtype: int64\n", + "\n" + ] + } + ], + "source": [ + "def undersample(df):\n", + " X = df.drop('Popularity', axis=1)\n", + " y = df['Popularity']\n", + " \n", + " undersampler = RandomUnderSampler(random_state=42)\n", + " X_resampled, y_resampled = undersampler.fit_resample(X, y)\n", + " \n", + " resampled_df = pd.concat([X_resampled, y_resampled], axis=1)\n", + " return resampled_df\n", + "\n", + "train_df_undersampled = undersample(train_df)\n", + "val_df_undersampled = undersample(val_df)\n", + "test_df_undersampled = undersample(test_df)\n", + "\n", + "check_balance(train_df_undersampled, \"обучающей выборке после undersampling\")\n", + "check_balance(val_df_undersampled, \"контрольной выборке после undersampling\")\n", + "check_balance(test_df_undersampled, \"тестовой выборке после undersampling\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### **Онлайн обучение**\n", + "\n", + "https://www.kaggle.com/datasets/shariful07/student-flexibility-in-online-learning\n", + "\n", + "\n", + "Этот набор данных предоставляет информацию о студентах и их характеристиках, связанных с обучением и использованием технологий. В данных представлены следующие атрибуты: уровень образования студента (например, бакалавриат, магистратура), тип учебного заведения (государственное или частное), пол, возраст, тип используемого устройства, является ли студент IT-специалистом, местоположение, финансовое состояние, тип интернета, тип сети и уровень гибкости в обучении. Эти данные могут быть использованы для анализа влияния различных факторов на успеваемость студентов, оптимизации образовательных программ и разработки стратегий поддержки студентов в условиях цифровизации образования." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Выгрузка данных из csv файла \"Онлайн обучение\" в датафрейм" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index(['Education Level', 'Institution Type', 'Gender', 'Age', 'Device',\n", + " 'IT Student', 'Location', 'Financial Condition', 'Internet Type',\n", + " 'Network Type', 'Flexibility Level'],\n", + " dtype='object')\n" + ] + } + ], + "source": [ + "df = pd.read_csv(\"..//static//csv//students_adaptability_level_online_education.csv\")\n", + "print(df.columns)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "При помощи ящика с усами и колонки возраста проверим набор на баланс." + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAx8AAAIjCAYAAABia6bHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAodElEQVR4nO3deXSV1b344W/CEKiEcBUEooA4gbXiVMThoqKooHWoWMXrRJ1aBXGqVa9V0erSJd5qxaH1LjT2Sq1iUetVqqBoa2sdQByuFYHGEQQBCYggIPv3R3+kRsjEsAPkedbKanPO++7sczbvOfl4zntSkFJKAQAAsJ4VNvQEAACAxkF8AAAAWYgPAAAgC/EBAABkIT4AAIAsxAcAAJCF+AAAALIQHwAAQBbiAwAAyEJ8AGzi3nvvvSgoKIiysrKGngoAjZz4AKijsrKyKCgoqPK15ZZbRp8+fWLs2LHZ5/Pcc89VmUuzZs1i2223jVNPPTX+8Y9/rJOf8de//jWGDRsW8+fPXyfjNbQnn3wyCgoKorS0NFasWNHQ0wFodJo29AQANjbXXnttdO3aNVJKMWvWrCgrK4vDDz88Hn/88fje976XfT5Dhw6Nnj17xrJly2LSpElx9913xxNPPBFvvvlmlJaWrtXYf/3rX+Oaa66JQYMGRZs2bdbNhBvQqFGjYpttton33nsvnn322ejbt29DTwmgUfHKB0A99e/fP04++eQ45ZRT4ic/+Un8+c9/jmbNmsUDDzzQIPPp3bt3nHzyyfHDH/4wRowYETfffHPMmzcv7rvvvgaZz4Zq0aJF8dhjj8VFF10Uu+++e4waNaqhpwTQ6IgPgLXUpk2baNmyZTRtWvXF5EWLFsXFF18cnTp1iqKioujWrVvcfPPNkVKKiIjFixdH9+7do3v37rF48eLK/ebNmxcdO3aMfffdN7766qt6z+eggw6KiIjy8vIat3v22Wejd+/esdlmm0WbNm3i6KOPjr///e+V1w8bNiwuueSSiIjo2rVr5du73nvvvVrn8M23p638eu6551bZdtCgQavddtiwYVW2e/jhh+O73/1uFBcXV9nu5ptvrnU+ERGPPPJILF68OH7wgx/EwIEDY8yYMbFkyZJVtlu8eHEMHTo02rZtG8XFxXHUUUfFxx9/vNo5ffzxx3H66adH+/bto6ioKHbeeee455576jQfgMbI264A6qmioiLmzJkTKaWYPXt2jBgxIj7//PM4+eSTK7dJKcVRRx0VEyZMiDPOOCN22223eOqpp+KSSy6Jjz/+OG655ZZo2bJl3HfffbHffvvFFVdcEb/4xS8iImLw4MFRUVERZWVl0aRJk3rPb/r06RERscUWW1S7zfjx46N///6x7bbbxrBhw2Lx4sUxYsSI2G+//WLSpEmxzTbbxLHHHhvvvvtuPPDAA3HLLbdE27ZtIyKiXbt2dZrHIYccEqeeempERLzyyitx2223Vbtt27Zt45Zbbqn8/pRTTqly/YsvvhjHH3987LrrrnHjjTdGSUlJzJkzJy688MI6zSXin2+56tOnT3To0CEGDhwYl112WTz++OPxgx/8oMp2gwYNioceeihOOeWU2HvvveP555+PI444YpXxZs2aFXvvvXcUFBTEkCFDol27djF27Ng444wzYsGCBXHBBRfUeW4AjUYCoE7uvffeFBGrfBUVFaWysrIq2z766KMpItJ1111X5fLjjjsuFRQUpGnTplVedvnll6fCwsL0pz/9KY0ePTpFRLr11ltrnc+ECRNSRKR77rknffrpp2nGjBnpiSeeSNtss00qKChIr7zySkoppfLy8hQR6d57763cd7fddktbbrllmjt3buVlr7/+eiosLEynnnpq5WXDhw9PEZHKy8vrfD8tXbo0RUQaMmRI5WUrb9eECRNW2f6kk05KXbt2rXJZRKSrr7668vvLL788RUSaOXNm5WUrb9fw4cNrndOsWbNS06ZN03//939XXrbvvvumo48+usp2EydOTBGRLrjggiqXDxo0aJU5nXHGGaljx45pzpw5VbYdOHBgKikpSV988UWt8wJobLztCqCe7rjjjhg3blyMGzcu7r///ujTp0+ceeaZMWbMmMptnnzyyWjSpEkMHTq0yr4XX3xxpJSqfDrWsGHDYuedd47TTjstzj333DjggANW2a8mp59+erRr1y5KS0vjiCOOiEWLFsV9990X3/3ud1e7/cyZM2Py5MkxaNCg2HzzzSsv79GjRxxyyCHx5JNP1vlnr87KtzK1aNGiTtsvXbo0ioqKatxm4cKFUVhYuMYnvf/ud7+LwsLCGDBgQOVlJ554YowdOzY+++yzysv++Mc/RkTEueeeW2X/8847r8r3KaX4/e9/H0ceeWSklGLOnDmVX4cddlhUVFTEpEmT1miuAJsyb7sCqKe99tqryi/2J554Yuy+++4xZMiQ+N73vhfNmzeP999/P0pLS6O4uLjKvjvttFNERLz//vuVlzVv3jzuueee6NmzZ7Ro0SLuvffeKCgoqPN8rrrqqujdu3c0adIk2rZtGzvttNMq55983cqf3a1bt1Wu22mnneKpp56KRYsWxWabbVbnOXzdnDlzIiKipKSkTtvPnz8/WrVqVeM2++yzT9x+++1x/vnnx09/+tMoKSmpEg21uf/++2OvvfaKuXPnxty5cyMiYvfdd4+lS5fG6NGj4+yzz46If943hYWF0bVr1yr7b7/99lW+//TTT2P+/Plx9913x913373anzl79uw6zw+gsRAfAGupsLAw+vTpE7/85S9j6tSpsfPOO9d7jKeeeioi/vmqwdSpU1f55bcmu+yyywb1kbErT0jfZptt6rT9J598El26dKlxm4EDB8akSZNixIgR1f6yX52pU6fGK6+8EhERO+ywwyrXjxo1qjI+6mrl3wg5+eST47TTTlvtNj169KjXmACNgfgAWAeWL18eERGff/55RER06dIlxo8fHwsXLqzy6sc777xTef1Kb7zxRlx77bXxwx/+MCZPnhxnnnlmvPnmm3V+5aC+Vv7sKVOmrHLdO++8E23btq181aM+r8Cs9Oqrr0ZEVPu2r69btmxZTJs2Lfr161fjdoWFhXHzzTfHm2++GeXl5XHnnXfGrFmzqpzkX51Ro0ZFs2bN4n/+539WOYH/hRdeiNtuuy0++OCD6Ny5c3Tp0iVWrFgR5eXlVUJl2rRpVfZr165dFBcXx1dffbVBhR/Ahs45HwBradmyZfH0009H8+bNK99Wdfjhh8dXX30Vt99+e5Vtb7nlligoKIj+/ftX7jto0KAoLS2NX/7yl1FWVhazZs2q16c41VfHjh1jt912i/vuu6/KXy5/66234umnn47DDz+88rKVEVKfv3D+8MMPR7du3aJ79+61bvvYY4/F4sWLKz8euCYjRoyIZ599NkaNGhV9+/aN/fbbr07zGTVqVPTu3TtOOOGEOO6446p8rfwo4ZV/o+Wwww6LiIg777xzlZ/9dU2aNIkBAwbE73//+3jrrbdW+ZmffvppneYG0Nh45QOgnsaOHVv5Csbs2bPjt7/9bUydOjUuu+yyaN26dUREHHnkkdGnT5+44oor4r333otdd901nn766XjsscfiggsuiO222y4iIq677rqYPHlyPPPMM1FcXBw9evSIq666Kn72s5/FcccdVyUE1qXhw4dH//79Y5999okzzjij8qN2S0pKqvwtiz333DMiIq644ooYOHBgNGvWLI488sjVng/yj3/8I2666aZ4+eWX49hjj43777+/8rqVb3saN25cdO7cOTp06BBXX3113HnnnbHvvvvGoYceWuN8/+///i9++tOfxrBhw6Jnz551vp0vvfRSTJs2LYYMGbLa67faaqvYY489YtSoUXHppZfGnnvuGQMGDIhbb7015s6dW/lRu++++25EVH0l6MYbb4wJEyZEr1694qyzzopvf/vbMW/evJg0aVKMHz8+5s2bV+d5AjQaDfxpWwAbjdV91G6LFi3Sbrvtlu666660YsWKKtsvXLgwXXjhham0tDQ1a9Ys7bDDDmn48OGV202cODE1bdo0nXfeeVX2W758eerZs2cqLS1Nn332WbXzWflRu6NHj65x3qv7qN2UUho/fnzab7/9UsuWLVPr1q3TkUcemd5+++1V9v/5z3+ettpqq1RYWFjjx+5W91HE3/y6995700cffZQ6deqULrjgglRRUbHKWPG1j7VdsmRJ6tGjR/r3f//3tHz58lVuV00ftXveeeeliEjTp0+vdpthw4aliEivv/56SimlRYsWpcGDB6fNN988tWrVKh1zzDFpypQpKSLSjTfeWGXfWbNmpcGDB6dOnTqlZs2apQ4dOqSDDz443X333dX+PIDGrCCl//+ndgFgLZSVlcWwYcNq/AvoBx54YAwaNCgGDRqUbV7rwuTJk2P33XeP+++/P0466aSGng7ARss5HwDwNYsXL17lsltvvTUKCwtj//33b4AZAWw6nPMBwDqx3Xbbxfe///0atznkkEMqz3fZUN10000xceLE6NOnTzRt2jTGjh0bY8eOjbPPPjs6derU0NMD2Kh52xUAfM24cePimmuuibfffjs+//zz6Ny5c5xyyilxxRVX1PjHGwGonfgAAACycM4HAACQhfgAAACyWOM3r65YsSJmzJgRxcXFVf7oEgAA0LiklGLhwoVRWloahYXVv76xxvExY8YMn/oBAABU+vDDD2Prrbeu9vo1jo/i4uLKH9C6des1HQYAANjILViwIDp16lTZCNVZ4/hY+Var1q1biw8AAKDW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3XRT3HbbbfGrX/0qXnrppdhss83isMMOiyVLllQ75oMPPhgXXXRRXH311TFp0qTYdddd47DDDovZs2evr5ux0atpHb744ouYNGlSXHnllTFp0qQYM2ZMTJkyJY466qhax915551j5syZlV8vvPDC+pj+JqO24yEiol+/flXu0wceeKDGMR0P9VfbOnz9/p85c2bcc889UVBQEAMGDKhxXMdD3T3//PMxePDg+Nvf/hbjxo2LZcuWxaGHHhqLFi2q3ObCCy+Mxx9/PEaPHh3PP/98zJgxI4499tgax12T55TGrLZ1mDFjRsyYMSNuvvnmeOutt6KsrCz++Mc/xhlnnFHr2PV9LGvM6nI8REScddZZVe7Tm266qcZxHQ/1U9s6dOrUaZXnh2uuuSZatWoV/fv3r3HstT4eEmskItIjjzxS+f2KFStShw4d0vDhwysvmz9/fioqKkoPPPBAtePstddeafDgwZXff/XVV6m0tDTdcMMN62Xem5pvrsPqvPzyyyki0vvvv1/tNldffXXadddd1+3kGpHVrcNpp52Wjj766HqN43hYO3U5Ho4++uh00EEH1biN42HtzJ49O0VEev7551NK/3wuaNasWRo9enTlNn//+99TRKQXX3xxtWOs6XMK//LNdVidhx56KDVv3jwtW7as2m3W5LGMf1ndOhxwwAHp/PPPr/MYjoe1V5fjYbfddkunn356jeOsi+PBKx/rSHl5eXzyySfRt2/fystKSkqiV69e8eKLL652n6VLl8bEiROr7FNYWBh9+/atdh/qr6KiIgoKCqJNmzY1bjd16tQoLS2NbbfdNk466aT44IMP8kxwE/bcc8/FlltuGd26dYtzzjkn5s6dW+22jof1b9asWfHEE0/U6b/0Oh7W3Mq38Wy++eYRETFx4sRYtmxZlX/b3bt3j86dO1f7b3tNnlOo6pvrUN02rVu3jqZNm9Y4Vn0ey6iqunUYNWpUtG3bNr7zne/E5ZdfHl988UW1Yzge1l5tx8PEiRNj8uTJdXp+WNvjoeajjTr75JNPIiKiffv2VS5v37595XXfNGfOnPjqq69Wu88777yzfibayCxZsiQuvfTSOPHEE6N169bVbterV68oKyuLbt26Vb702Lt373jrrbeiuLg444w3Hf369Ytjjz02unbtGtOnT4///M//jP79+8eLL74YTZo0WWV7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m29Wbv+zn/0srr/++vjss8+iTZs2ceaZZ0aTJk3i17/+deU2L7zwQhxwwAGxaNGiaNGiRUPcLAAamFc+AKhiypQp8fLLL8eJJ54YERFNmzaNE044IUaOHFl5fc+ePavss9dee1X5/vXXX4+ysrJo1apV5ddhhx0WK1asiPLy8jw3BIANTtOGngAAG5aRI0fG8uXLq5xgnlKKoqKiuP322+s0xueffx4/+tGPYujQoatc17lz53U2VwA2LuIDgErLly+P3/zmN/Ff//Vfceihh1a57phjjokHHnggunXrFk8++WSV61555ZUq3++xxx7x9ttvx/bbb7/e5wzAxsM5HwBUevTRR+OEE06I2bNnR0lJSZXrLr300nj22WfjoYceim7dusWFF14YZ5xxRkyePDkuvvji+Oijj2L+/PlRUlISb7zxRuy9995x+umnx5lnnhmbbbZZvP322zFu3Lg6v3oCwKbHOR8AVBo5cmT07dt3lfCIiBgwYEC8+uqrsXDhwnj44YdjzJgx0aNHj7jrrrsqP+2qqKgoIiJ69OgRzz//fLz77rvRu3fv2H333eOqq67yt0IAGjmvfACw1q6//vr41a9+FR9++GFDTwWADZhzPgCotzvvvDN69uwZW2yxRfzlL3+J4cOH+xseANRKfABQb1OnTo3rrrsu5s2bF507d46LL744Lr/88oaeFgAbOG+7AgAAsnDCOQAAkIX4AAAAshAfAABAFuIDAADIQnwAAABZiA8AACAL8QEAAGQhPgAAgCz+H5vgjBoO/VN3AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Box plot для столбца 'Age'\n", + "plt.figure(figsize=(10, 6))\n", + "sns.boxplot(x=df['Age'])\n", + "plt.title('Box Plot для Age')\n", + "plt.xlabel('Age')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Теперь проверим на шум" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1YAAAIjCAYAAAAAxIqtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABKEUlEQVR4nO3dd3xUVf7/8fekhzQw1EAKTSIdERCQpiiwLEgRsEJAQBFFFleRdemyKFhYYZFFad8VG2wAFVmluksVKSKCSIko0iSQIiQkIef3B78MDGkz3CSTgdfz8cjjkdx75sxn5t5zk3fuvWdsxhgjAAAAAMB183J3AQAAAADg6QhWAAAAAGARwQoAAAAALCJYAQAAAIBFBCsAAAAAsIhgBQAAAAAWEawAAAAAwCKCFQAAAABYRLACAAAAAIsIVgBQCv3000+y2WxauHChu0tBCYqLi1NMTIy7y3BJ+/bt1b59++t6rM1m04QJE4q0npKS1xidMGGCbDabU49fuHChbDabfvrpp+IpEECJI1gBKFHfffedHnjgAUVHRysgIEBVq1bVvffeq5kzZxbbc77//vuaMWNGruXHjx/XhAkTtHv37mJ77mtt2LBBNpvN/uXr66saNWqof//+OnLkSJE8x+bNmzVhwgQlJSUVSX/u9vnnn8tmsykiIkLZ2dnuLseSmJgYh+1/9Vd6erq7yyvVUlJSNHHiRDVq1EjBwcEKDAxU/fr1NXr0aB0/ftzd5eXrb3/7m5YvX+7uMgCUAB93FwDg5rF582Z16NBBUVFRGjJkiCpXrqxffvlFW7du1d///nc988wzxfK877//vvbu3auRI0c6LD9+/LgmTpyomJgYNW7cuFieOz8jRoxQs2bNlJmZqZ07d2ru3LlauXKlvvvuO0VERFjqe/PmzZo4caLi4uJUtmzZoinYjRYvXqyYmBj99NNPWrdunTp27Ojukixp3LixnnvuuVzL/fz89M4773hcePzyyy+L/TmOHDmijh076ueff1afPn00dOhQ+fn5ac+ePZo3b56WLVumH3/8sdjrKMxf//pXvfjiiw7L/va3v+mBBx5Qjx49HJY/9thjevDBB+Xv71+CFQIoTgQrACVmypQpCgsL0/bt23P9wX/69Gn3FFUMzp8/r6CgoALbtGnTRg888IAkaeDAgbr11ls1YsQILVq0SGPGjCmJMj3C+fPntWLFCk2dOlULFizQ4sWLPT5YVa1aVY8++mie67y8PO9CEj8/v2LtPysrS7169dKpU6e0YcMG3XXXXQ7rp0yZoldffbVYa3CWj4+PfHyc+9PK29tb3t7exVwRgJLkeUdwAB7r8OHDqlevXp5nUSpWrJhr2XvvvafmzZurTJkyKleunNq2bevw3/EVK1aoa9euioiIkL+/v2rWrKnJkyfr0qVL9jbt27fXypUrdfToUfslVzExMdqwYYOaNWsm6XKwyVl39f0S27ZtU+fOnRUWFqYyZcqoXbt22rRpk0ONOfdU7Nu3Tw8//LDKlSuX6w8/Z9x9992SpISEhALbrVu3Tm3atFFQUJDKli2r+++/X/v373eo5/nnn5ckVa9e3f66nLmPI79L1DZs2JCrbVxcXJ5tr71fZunSpbrjjjsUEhLi0O61114rtB5JWrZsmdLS0tSnTx89+OCDio+Pz/OSubS0NI0YMULly5dXSEiIunfvrl9//TXPmn799VcNGjRIlSpVkr+/v+rVq6f58+c7VU9e/U2fPl02m+267zO62rX3WOXcx/Paa69p7ty5qlmzpvz9/dWsWTNt377d4bF79uxRXFycatSooYCAAFWuXFmDBg1SYmKiQ7ucffbQoUP2s5phYWEaOHCgLly4kKumwsbhtfdYZWRkaNy4cWratKnCwsIUFBSkNm3aaP369df1nvz73//Wt99+q5deeinPsRUaGqopU6Y4LFuyZImaNm2qwMBAlS9fXo8++qh+/fVXhzZxcXEKDg7Wr7/+qh49eig4OFgVKlTQn//8Z4djiCQlJSUpLi5OYWFhKlu2rAYMGJDnpbbX3mNls9l0/vx5LVq0yL7vx8XFScr/HqvZs2erXr168vf3V0REhIYPH57rudq3b6/69etr37596tChg8qUKaOqVatq2rRphbybAIoTZ6wAlJjo6Ght2bJFe/fuVf369QtsO3HiRE2YMEGtWrXSpEmT5Ofnp23btmndunW67777JF3+wyQ4OFijRo1ScHCw1q1bp3HjxiklJUXTp0+XJL300ktKTk7WsWPH9Oabb0qSgoODddttt2nSpEkaN26chg4dqjZt2kiSWrVqJelygOnSpYuaNm2q8ePHy8vLSwsWLNDdd9+t//3vf2revLlDvX369FHt2rX1t7/9TcYYl9+bw4cPS5LCw8PzbbNmzRp16dJFNWrU0IQJE5SWlqaZM2eqdevW2rlzp2JiYtSrVy/9+OOP+uCDD/Tmm2+qfPnykqQKFSo4Vce9996r/v37S5K2b9+ut956K9+25cuXt7+n0uVLm662ZcsW9e3bV40aNdIrr7yisLAwnTlzRn/605+cqkW6fBlghw4dVLlyZT344IN68cUX9emnn6pPnz4O7eLi4vTxxx/rscce05133qmvvvpKXbt2zdXfqVOndOedd8pms+npp59WhQoVtGrVKj3++ONKSUnJdbloYZKSkjR16lSXHpOZmakzZ844LCtTpozKlCmT72Pef/99paam6oknnpDNZtO0adPUq1cvHTlyRL6+vpKk1atX68iRIxo4cKAqV66s77//XnPnztX333+vrVu35ppUoW/fvqpevbqmTp2qnTt36t1331XFihUdzv44Mw6vlZKSonfffVcPPfSQhgwZotTUVM2bN0+dOnXS119/7fJlt5988omk3PtXfhYuXKiBAweqWbNmmjp1qk6dOqW///3v2rRpk3bt2uXwj51Lly6pU6dOatGihV577TWtWbNGr7/+umrWrKlhw4ZJkowxuv/++7Vx40Y9+eSTuu2227Rs2TINGDCg0Fr+9a9/afDgwWrevLmGDh0qSapZs2a+7SdMmKCJEyeqY8eOGjZsmA4cOKC3335b27dv16ZNm+zbWpLOnTunzp07q1evXurbt6+WLl2q0aNHq0GDBurSpYtT7xWAImYAoIR8+eWXxtvb23h7e5uWLVuaF154wXzxxRcmIyPDod3BgweNl5eX6dmzp7l06ZLDuuzsbPv3Fy5cyPUcTzzxhClTpoxJT0+3L+vatauJjo7O1Xb79u1GklmwYEGu56hdu7bp1KlTruerXr26uffee+3Lxo8fbySZhx56yKn3YP369UaSmT9/vvntt9/M8ePHzcqVK01MTIyx2Wxm+/btxhhjEhISctXWuHFjU7FiRZOYmGhf9u233xovLy/Tv39/+7Lp06cbSSYhIcGpmowxJiMjw0gyTz/9tH3ZkiVLjCSzfv36XO0feeQRU716dYdlksz48ePtP48ZM8ZIMidOnLAvy3ld06dPL7SmU6dOGR8fH/POO+/Yl7Vq1crcf//9Du127NhhJJmRI0c6LI+Li8tV0+OPP26qVKlizpw549D2wQcfNGFhYXnuUwW9xhdeeMFU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N23aVDVr1tRrr72m33//Pdfjfvvtt3xfY3GpUqWKGjdurEWLFjnUu3fvXn355Zf6wx/+YF+W3+sqyNKlS1WnTh3FxsYW2nbFihVKS0vL9YdrXmbOnKl169bZP3+qdevWTtWzePFitWnTRv369dMDDzzg8JUznfwHH3wgSerUqZMk5dr2M2fOdPjZ29tbvXv31r///W/t3bs313M6u123bNmiFStW6JVXXrmuEFsc8hoPkjRjxozr7tOZcehsLdu2bdOWLVuuq44HHnhADRo00JQpU/LsIzU1VS+99JKky/8YqFixoubMmaOLFy/a26xatUr79+/Pc6bIwvzhD39QVlaW3n77bfuyS5cu5dq/8hMUFOTUWOzYsaP8/Pz01ltvObx38+bNU3Jy8nXVDqBkccYKQIl55plndOHCBfXs2VOxsbHKyMjQ5s2b9dFHHykmJkYDBw6UdPnemJdeekmTJ09WmzZt1KtXL/n7+2v79u2KiIjQ1KlT1apVK5UrV04DBgzQiBEjZLPZ9K9//SvPP/iaNm2qjz76SKNGjVKzZs0UHBysbt26qWbNmipbtqzmzJmjkJAQBQUFqUWLFqpevbreffdddenSRfXq1dPAgQNVtWpV/frrr1q/fr1CQ0P16aeflvTbp+nTp6tLly5q2bKlHn/8cft062FhYQ6frdS0aVNJl6eaf/DBB+Xr66tu3brlef/VkSNHNG3aNH399dfq1auX3nvvPfu6nEvxVq9eraioKFWuXFnjx4/X7Nmz1apVq3yn287x/fff64UXXtCECRPsnxnmjG3btunQoUN6+umn81xftWpV3X777Vq8eLFGjx6tpk2bqnfv3poxY4YSExPt063/+OOPkhzPGLzyyitav369WrRooSFDhqhu3bo6e/asdu7cqTVr1ujs2bOF1vfll1/q3nvvLVVnEEJDQ9W2bVtNmzZNmZmZqlq1qr788stCPxetIM6Mw7z88Y9/VHx8vHr27KmuXbsqISFBc+bMUd26dfP8R0VhfH19FR8fr44dO6pt27bq27evWrduLV9fX33//fd6//33Va5cOU2ZMkW+vr569dVXNXDgQLVr104PPfSQfbr1mJgYl6b6z9GtWze1bt1aL774on766SfVrVtX8fHxTt/H2bRpU61Zs0ZvvPGGIiIiVL16dbVo0SJXuwoVKmjMmDGaOHGiOnfu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0mPgnJxQdfToUa1evbrAs1V5KVu2rG699VYdOnSomCq8+dSoUUPly5fP9z1lPBSv//3vfzpw4IAGDx7s8mMZD855+umn9dlnn2n9+vWqVq2afXnlypWVkZGhpKQkh/YF7dvX8zsFl+W3HXKkpqaqc+fOCgkJ0bJly+Tr6+tS/4Udy3BZYdvhai1atJCkfN9TxsP1c2Y7LF26VBcuXFD//v1d7v96xgPBCoWqXr26KleurLVr19qXpaSkaNu2bWrZsmWej/Hz81PTpk0dHpOdna21a9fm+xgULidUHTx4UGvWrFF4eLjLffz+++86fPiwqlSpUgwV3pyOHTumxMTEfN9TxkPxmjdvnpo2bapGjRq5/FjGQ8GMMXr66ae1bNkyrVu3TtWrV3dY37RpU/n6+jrs2wcOHNDPP/+c7759Pb9TbnaFbQfp8nt43333yc/PT5988kmhZ2/zUtix7GbnzHa41u7duyUp3/eU8eA6V7bDvHnz1L17d1WoUMHl57mu8WBp6gvcMFJTU82uXbvMrl27jCTzxhtvmF27dtlnm3vllVdM2bJlzYoVK8yePXvM/fffb6pXr27S0tLsfdx9991m5syZ9p8//PBD4+/vbxYuXGj27dtnhg4dasqWLWtOnjxZ4q/PUxS0HTIyMkz37t1NtWrVzO7du82JEyfsXxcvXrT3ce12eO6558yGDRtMQkKC2bRpk+nYsaMpX768OX36tDteokcoaDukpqaaP//5z2bLli0mISHBrFmzxtx+++2mdu3aJj093d4H48G6wo5LxhiTnJxsypQpY95+++08+2A8WDNs2DATFhZmNmzY4HDMuXDhgr3Nk08+aaKiosy6devMN998Y1q2bGlatmzp0E+dOnVMfHy8/WdnfqfgisK2Q3JysmnRooVp0KCBOXTokEObrKwsez9Xbwdnj2W4orDtcOjQITNp0iTzzTffmISEBLNixQpTo0YN07ZtW4d+GA/WOHNcMsaYgwcPGpvNZlatWpVnP8UxHghWMMYYs379eiMp19eAAQOMMZenAx07dqypVKmS8ff3N/fcc485cOCAQx/R0dFm/PjxDstmzpxpoqKijJ+fn2nevLnZunVrCb0iz1TQdkhISMhznSSzfv16ex/Xbod+/fqZKlWqGD8/P1O1alXTr18/c+jQoZJ/cR6koO1w4cIFc99995kKFSoYX19fEx0dbYYMGZIrIDEerCvsuGSMMf/85z9NYGCgSUpKyrMPxoM1+R1zFixYYG+TlpZmnnrqKVOuXDlTpkwZ07NnT3PixIlc/Vz9GGd+p+CKwrZDfmNFkklISHDoJ+cxzh7LcEVh2+Hnn382bdu2Nbfccovx9/c3tWrVMs8//7xJTk7O1Q/j4fo5c1wyxpgxY8aYyMhIc+nSpXz7KerxYPv/HQMAAAAArhP3WAEAAACARQQrAAAAALCIYAUAAAAAFhGsAAAAAMAighUAAAAAWESwAgAAAACLCFYAAAAAYBHBCgAAAAAsIlgBAAAAgEUEKwDATWfLli3y9vZW165d3V0KAOAGYTPGGHcXAQBASRo8eLCCg4M1b948HThwQBEREe4uCQDg4ThjBQC4qfz+++/66KOPNGzYMHXt2lULFy50WP/JJ5+odu3aCggIUIcOHbRo0SLZbDYlJSXZ22zcuFFt2rRRYGCgIiMjNWLECJ0/f75kXwgAoFQhWAEAbioff/yxYmNjVadOHT366KOaP3++ci7eSEhI0AMPPKAePXro22+/1RNPPKGXXnrJ4fGHDx9W586d1bt3b+3Zs0cfffSRNm7cqKefftodLwcAUEpwKSAA4KbSunVr9e3bV88++6yysrJUpUoVLVmyRO3bt9eLL76olStX6rvvvrO3/+tf/6opU6bo3LlzKlu2rAYPHixvb2/985//tLfZuHGj2rVrp/PnzysgIMAdLwsA4GacsQIA3DQOHDigr7/+Wg899JAkycfHR/369dO8efPs65s1a+bwmObNmzv8/O2332rhwoUKDg62f3Xq1EnZ2dlKSEgomRcCACh1fNxdAAAAJWXevHnKyspymKzCGCN/f3/NmjXLqT5+//13PfHEExoxYkSudVFRUUVWKwDAsxCsAAA3haysLP3f//2fXn/9dd13330O63r06KEPPvhAderU0eeff+6wbvv27Q4/33777dq3b59q1apV7DUDADwH91gBAG4Ky5cvV79+/XT69GmFhYU5rBs9erTWrVunjz/+WHXq1NGf/vQnPf7449q9e7eee+45HTt2TElJSQoLC9OePXt05513atCgQRo8eLCCgoK0b98+rV692umzXgCAGw/3WAEAbgrz5s1Tx44dc4UqSerdu7e++eYbpaamaunSpYqPj1fDhg319ttv22cF9Pf3lyQ1bNhQX331lX788Ue1adNGTZo00bhx4/gsLAC4yXHGCgCAAkyZMkVz5szRL7/84u5SAAClGPdYAQBwldmzZ6tZs2YKDw/Xpk2bNH36dD6jCgBQKIIVAABXOXjwoF5++WWdPXtWUVFReu655zRmzBh3lwUAKOW4FBAAAAAALGLyCgAAAACwiGAFAAAAABYRrAAAAADAIoIVAAAAAFhEsAIAAAAAiwhWAAAAAGARwQoAAAAALCJYAQAAAIBF/w9QGXIrORoYpAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Scatter plot для столбцов 'Age' и 'Financial Condition'\n", + "plt.figure(figsize=(10, 6))\n", + "sns.scatterplot(x='Age', y='Financial Condition', data=df)\n", + "plt.title('Scatter Plot для Age и Financial Condition')\n", + "plt.xlabel('Age')\n", + "plt.ylabel('Financial Condition')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Удаление строк с пустыми значениями" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [], + "source": [ + "df_cleaned = df.dropna()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Разбиение набора данных на обучающую, контрольную и тестовую выборки" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Размер обучающей выборки: 723\n", + "Размер контрольной выборки: 241\n", + "Размер тестовой выборки: 241\n" + ] + } + ], + "source": [ + "# Разделение на обучающую и тестовую выборки\n", + "train_df, test_df = train_test_split(df, test_size=0.2, random_state=42)\n", + "\n", + "# Разделение обучающей выборки на обучающую и контрольную\n", + "train_df, val_df = train_test_split(train_df, test_size=0.25, random_state=42)\n", + "\n", + "print(\"Размер обучающей выборки:\", len(train_df))\n", + "print(\"Размер контрольной выборки:\", len(val_df))\n", + "print(\"Размер тестовой выборки:\", len(test_df))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Применение методов приращения данных (аугментации)" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Распределение Gender в обучающей выборке после oversampling:\n", + "Gender\n", + "Male 397\n", + "Female 397\n", + "Name: count, dtype: int64\n", + "\n", + "Распределение Gender в контрольной выборке после oversampling:\n", + "Gender\n", + "Male 140\n", + "Female 140\n", + "Name: count, dtype: int64\n", + "\n", + "Распределение Gender в тестовой выборке после oversampling:\n", + "Gender\n", + "Female 126\n", + "Male 126\n", + "Name: count, dtype: int64\n", + "\n", + "Распределение Gender в обучающей выборке после undersampling:\n", + "Gender\n", + "Female 326\n", + "Male 326\n", + "Name: count, dtype: int64\n", + "\n", + "Распределение Gender в контрольной выборке после undersampling:\n", + "Gender\n", + "Female 101\n", + "Male 101\n", + "Name: count, dtype: int64\n", + "\n", + "Распределение Gender в тестовой выборке после undersampling:\n", + "Gender\n", + "Female 115\n", + "Male 115\n", + "Name: count, dtype: int64\n", + "\n" + ] + } + ], + "source": [ + "# Разделение на обучающую и тестовую выборки\n", + "train_df, test_df = train_test_split(df, test_size=0.2, random_state=42)\n", + "\n", + "# Разделение обучающей выборки на обучающую и контрольную\n", + "train_df, val_df = train_test_split(train_df, test_size=0.25, random_state=42)\n", + "\n", + "def check_balance(df, name):\n", + " counts = df['Gender'].value_counts()\n", + " print(f\"Распределение Gender в {name}:\")\n", + " print(counts)\n", + " print()\n", + "\n", + "def oversample(df):\n", + " X = df.drop('Gender', axis=1)\n", + " y = df['Gender']\n", + " \n", + " oversampler = RandomOverSampler(random_state=42)\n", + " X_resampled, y_resampled = oversampler.fit_resample(X, y)\n", + " \n", + " resampled_df = pd.concat([X_resampled, y_resampled], axis=1)\n", + " return resampled_df\n", + "\n", + "train_df_oversampled = oversample(train_df)\n", + "val_df_oversampled = oversample(val_df)\n", + "test_df_oversampled = oversample(test_df)\n", + "\n", + "check_balance(train_df_oversampled, \"обучающей выборке после oversampling\")\n", + "check_balance(val_df_oversampled, \"контрольной выборке после oversampling\")\n", + "check_balance(test_df_oversampled, \"тестовой выборке после oversampling\")\n", + "\n", + "def undersample(df):\n", + " X = df.drop('Gender', axis=1)\n", + " y = df['Gender']\n", + " \n", + " undersampler = RandomUnderSampler(random_state=42)\n", + " X_resampled, y_resampled = undersampler.fit_resample(X, y)\n", + " \n", + " resampled_df = pd.concat([X_resampled, y_resampled], axis=1)\n", + " return resampled_df\n", + "\n", + "train_df_undersampled = undersample(train_df)\n", + "val_df_undersampled = undersample(val_df)\n", + "test_df_undersampled = undersample(test_df)\n", + "\n", + "check_balance(train_df_undersampled, \"обучающей выборке после undersampling\")\n", + "check_balance(val_df_undersampled, \"контрольной выборке после undersampling\")\n", + "check_balance(test_df_undersampled, \"тестовой выборке после undersampling\")" + ] + } + ], + "metadata": { + "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 +}