AIM-PIbd-31-Belianin-N-N/laboratory_2/lab2.ipynb

3062 lines
2.3 MiB
Plaintext
Raw Permalink Normal View History

2024-10-12 05:17:25 +04:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Приступаем к работе...\n",
"\n",
"### Начнём анализ данных. Выгрузим в датафрейм первый набор (Цены на бриллианты)\n",
"\n",
"P.S. Кааажется будет трудно... :|"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['Unnamed: 0', 'carat', 'cut', 'color', 'clarity', 'depth', 'table',\n",
" 'price', 'x', 'y', 'z'],\n",
" dtype='object')\n",
"\n",
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 53943 entries, 0 to 53942\n",
"Data columns (total 11 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Unnamed: 0 53943 non-null int64 \n",
" 1 carat 53943 non-null float64\n",
" 2 cut 53943 non-null object \n",
" 3 color 53943 non-null object \n",
" 4 clarity 53943 non-null object \n",
" 5 depth 53943 non-null float64\n",
" 6 table 53943 non-null float64\n",
" 7 price 53943 non-null int64 \n",
" 8 x 53943 non-null float64\n",
" 9 y 53943 non-null float64\n",
" 10 z 53943 non-null float64\n",
"dtypes: float64(6), int64(2), object(3)\n",
"memory usage: 4.5+ MB\n"
]
}
],
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"# Первый датафрейм о бриллиантах\n",
"df = pd.read_csv(\".//static//csv//diamonds_prices2022.csv\")\n",
"print(df.columns)\n",
"\n",
"print()\n",
"\n",
"df.info()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Описание набора:** В этом наборе данных представлен датасет о ценах на бриллианты. Рассматривается набор данных, содержащий цены и атрибуты примерно для 54 000 бриллиантов круглой огранки. В наборе данных 53 940 бриллиантов с 10 характеристиками (карат, огранка, цвет, прозрачность, глубина, таблица, цена, x, y и z). Большинство переменных являются числовыми по своей природе, но переменные cut, color и clearity являются упорядоченными факторными переменными со следующими уровнями. О валюте для столбца price: это цена ($). Что касается столбцов x, y и z, то они представляют собой размеры алмаза в виде (( x: длина в мм, y: ширина в мм, z: глубина в мм))"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Unnamed: 0</th>\n",
" <th>carat</th>\n",
" <th>cut</th>\n",
" <th>color</th>\n",
" <th>clarity</th>\n",
" <th>depth</th>\n",
" <th>table</th>\n",
" <th>price</th>\n",
" <th>x</th>\n",
" <th>y</th>\n",
" <th>z</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0.23</td>\n",
" <td>Ideal</td>\n",
" <td>E</td>\n",
" <td>SI2</td>\n",
" <td>61.5</td>\n",
" <td>55.0</td>\n",
" <td>326</td>\n",
" <td>3.95</td>\n",
" <td>3.98</td>\n",
" <td>2.43</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>0.21</td>\n",
" <td>Premium</td>\n",
" <td>E</td>\n",
" <td>SI1</td>\n",
" <td>59.8</td>\n",
" <td>61.0</td>\n",
" <td>326</td>\n",
" <td>3.89</td>\n",
" <td>3.84</td>\n",
" <td>2.31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>0.23</td>\n",
" <td>Good</td>\n",
" <td>E</td>\n",
" <td>VS1</td>\n",
" <td>56.9</td>\n",
" <td>65.0</td>\n",
" <td>327</td>\n",
" <td>4.05</td>\n",
" <td>4.07</td>\n",
" <td>2.31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>0.29</td>\n",
" <td>Premium</td>\n",
" <td>I</td>\n",
" <td>VS2</td>\n",
" <td>62.4</td>\n",
" <td>58.0</td>\n",
" <td>334</td>\n",
" <td>4.20</td>\n",
" <td>4.23</td>\n",
" <td>2.63</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0.31</td>\n",
" <td>Good</td>\n",
" <td>J</td>\n",
" <td>SI2</td>\n",
" <td>63.3</td>\n",
" <td>58.0</td>\n",
" <td>335</td>\n",
" <td>4.34</td>\n",
" <td>4.35</td>\n",
" <td>2.75</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0 carat cut color clarity depth table price x y \\\n",
"0 1 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 \n",
"1 2 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 \n",
"2 3 0.23 Good E VS1 56.9 65.0 327 4.05 4.07 \n",
"3 4 0.29 Premium I VS2 62.4 58.0 334 4.20 4.23 \n",
"4 5 0.31 Good J SI2 63.3 58.0 335 4.34 4.35 \n",
"\n",
" z \n",
"0 2.43 \n",
"1 2.31 \n",
"2 2.31 \n",
"3 2.63 \n",
"4 2.75 "
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Для наглядности\n",
"df.head()\n"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Unnamed: 0</th>\n",
" <th>carat</th>\n",
" <th>depth</th>\n",
" <th>table</th>\n",
" <th>price</th>\n",
" <th>x</th>\n",
" <th>y</th>\n",
" <th>z</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>53943.000000</td>\n",
" <td>53943.000000</td>\n",
" <td>53943.000000</td>\n",
" <td>53943.000000</td>\n",
" <td>53943.000000</td>\n",
" <td>53943.000000</td>\n",
" <td>53943.000000</td>\n",
" <td>53943.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>26972.000000</td>\n",
" <td>0.797935</td>\n",
" <td>61.749322</td>\n",
" <td>57.457251</td>\n",
" <td>3932.734294</td>\n",
" <td>5.731158</td>\n",
" <td>5.734526</td>\n",
" <td>3.538730</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>15572.147122</td>\n",
" <td>0.473999</td>\n",
" <td>1.432626</td>\n",
" <td>2.234549</td>\n",
" <td>3989.338447</td>\n",
" <td>1.121730</td>\n",
" <td>1.142103</td>\n",
" <td>0.705679</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>1.000000</td>\n",
" <td>0.200000</td>\n",
" <td>43.000000</td>\n",
" <td>43.000000</td>\n",
" <td>326.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>13486.500000</td>\n",
" <td>0.400000</td>\n",
" <td>61.000000</td>\n",
" <td>56.000000</td>\n",
" <td>950.000000</td>\n",
" <td>4.710000</td>\n",
" <td>4.720000</td>\n",
" <td>2.910000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>26972.000000</td>\n",
" <td>0.700000</td>\n",
" <td>61.800000</td>\n",
" <td>57.000000</td>\n",
" <td>2401.000000</td>\n",
" <td>5.700000</td>\n",
" <td>5.710000</td>\n",
" <td>3.530000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>40457.500000</td>\n",
" <td>1.040000</td>\n",
" <td>62.500000</td>\n",
" <td>59.000000</td>\n",
" <td>5324.000000</td>\n",
" <td>6.540000</td>\n",
" <td>6.540000</td>\n",
" <td>4.040000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>53943.000000</td>\n",
" <td>5.010000</td>\n",
" <td>79.000000</td>\n",
" <td>95.000000</td>\n",
" <td>18823.000000</td>\n",
" <td>10.740000</td>\n",
" <td>58.900000</td>\n",
" <td>31.800000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0 carat depth table price \\\n",
"count 53943.000000 53943.000000 53943.000000 53943.000000 53943.000000 \n",
"mean 26972.000000 0.797935 61.749322 57.457251 3932.734294 \n",
"std 15572.147122 0.473999 1.432626 2.234549 3989.338447 \n",
"min 1.000000 0.200000 43.000000 43.000000 326.000000 \n",
"25% 13486.500000 0.400000 61.000000 56.000000 950.000000 \n",
"50% 26972.000000 0.700000 61.800000 57.000000 2401.000000 \n",
"75% 40457.500000 1.040000 62.500000 59.000000 5324.000000 \n",
"max 53943.000000 5.010000 79.000000 95.000000 18823.000000 \n",
"\n",
" x y z \n",
"count 53943.000000 53943.000000 53943.000000 \n",
"mean 5.731158 5.734526 3.538730 \n",
"std 1.121730 1.142103 0.705679 \n",
"min 0.000000 0.000000 0.000000 \n",
"25% 4.710000 4.720000 2.910000 \n",
"50% 5.700000 5.710000 3.530000 \n",
"75% 6.540000 6.540000 4.040000 \n",
"max 10.740000 58.900000 31.800000 "
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Описание данных (основные статистические показатели)\n",
"df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Unnamed: 0 0\n",
"carat 0\n",
"cut 0\n",
"color 0\n",
"clarity 0\n",
"depth 0\n",
"table 0\n",
"price 0\n",
"x 0\n",
"y 0\n",
"z 0\n",
"dtype: int64"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Процент пропущенных значений признаков\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}')\n",
"\n",
"# Проверка на пропущенные данные\n",
"df.isnull().sum()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Unnamed: 0 False\n",
"carat False\n",
"cut False\n",
"color False\n",
"clarity False\n",
"depth False\n",
"table False\n",
"price False\n",
"x False\n",
"y False\n",
"z False\n",
"dtype: bool"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isnull().any()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Пропущенных данных в колонках нет :)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Анализ сведений о наборе данных\n",
"\n",
"**Набор данных:** Набор данных содержит 53 940 наблюдений, каждое из которых представляет собой бриллиант с характеристиками, такими как вес (карат), огранка, цвет, прозрачность, глубина, размеры (x, y, z), а также цена.\n",
"\n",
"**Проблемная область:** Проблемной областью может быть задача оценки стоимости бриллианта на основе его характеристик, что важно для торговли бриллиантами, определения их рыночной стоимости и других бизнес-задач.\n",
"\n",
"Проанализируем содержимое...\n",
"\n",
"*Объекты наблюдения:* Каждый бриллиант будет объектом наблюдения. \n",
"\n",
"*Атрибуты объектов:* Основные атрибуты представляют собой числовые характеристики такие, как carat (вес), depth (глубина в бриллианте - расстояние от площадки до каллеты. Калетта - нижняя часть бриллианта), table (площадка - большая грань бриллианта), x,y,z - размеры. Категориальные характеристики такие, как cut (огранка), color (цвет) и clarity (прозрачность). \n",
"\n",
"*Связи между объектами:* Вес бриллианта влияет на цену (carat -> price), также существует связь между качеством огранки и ценой (cut -> price)\n",
"\n",
"## Бизнес-цель\n",
"1. Автоматизация процесса оценки стоимости бриллианта \n",
"Построить модель для оценки цены бриллианты на основе его характеристик. Эффект для бизнеса от анализа данных заключается в улучшении бизнес-процессов (повышение эффективности операционных процессов), повышении доходов, сокращении затрат и улучшению клиентских отношений. \n",
"2. Оптимизация ассортимента и продаж \n",
"Построить модель для анализа данных, какие характеристики бриллиантов наиболее востребованы и наилучшим образом влияют на рост продаж. Эффект для бизнеса в том, что компании могут оптимизировать ассортимент на более востребованные, что приведёт к увеличению продаж.\n",
"\n",
"### Техническая цель\n",
"1. Разработка модели для оценки стоимости бриллиантов \n",
"Создать модель машинного обучения, которая на вход получает характеристики бриллианта (вес, огранка, цвет и т.д.) и предсказывает его цену. \n",
"На вход поступают характеристики, а целевой признак - цена бриллианта. \n",
"2. Оптимизация ассортимента и прогнозирование спроса \n",
"Создать модель для предсказания спроса (популярности) определённых категорий бриллиаантов в зависимости от их характеристик. НА вход поступают характеристики бриллианта, а целевой признак - показатели продаж или востребованность товара."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB8UAAAMBCAYAAAB2kmVMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACYeElEQVR4nOzdeZxWZcE//s/MAMM6oAgIogi4ppLmVu6ouW+VWl8tce9JzTUrs0R9LFstLZ/UTMjMfDJ79NHSXHJ5SjA3MjOXEFcERNl3Zs7vD39zxzgj68DA4f1+veYF97mv+zrXWe77nOt8zlJVFEURAAAAAAAAACih6rZuAAAAAAAAAACsLEJxAAAAAAAAAEpLKA4AAAAAAABAaQnFAQAAAAAAACgtoTgAAAAAAAAApSUUBwAAAAAAAKC0hOIAAAAAAAAAlJZQHAAAAAAAAIDSEooDAAAAAAAAUFpCcQBoRVVVVbn44ovbuhkAAABQSvrdzT300EOpqqrKQw891Cbjv/jii1NVVZXJkye3yfgBYGkIxQFYI4wcOTJVVVVN/nr37p2hQ4fm7rvvbuvmrbDnnnsuF198cV555ZW2bkqpfOtb38rtt9/e1s0AAABY7el3syT62ACsyYTiAKxRLr300vzyl7/MjTfemC9/+ct5++23c9BBB+Wuu+5q66atkOeeey6XXHKJznkr02EHAABYNvrdfBB9bADWZO3augEAsCwOPPDA7LDDDpXXJ510Uvr06ZNf//rXOeSQQ9qwZaxsDQ0NmT9/fjp27NjWTQEAACgt/W4AoIxcKQ7AGq1Hjx7p1KlT2rVrep7XrFmzct5552XDDTdMbW1tNt9883z/+99PURRJkjlz5mSLLbbIFltskTlz5lQ+9+6776Zv377ZZZddUl9fnyQ5/vjj07Vr17z88svZf//906VLl/Tr1y+XXnpppb7Fefrpp3PggQemrq4uXbt2zT777JPRo0dX3h85cmSOOuqoJMnQoUMrt6lbmmeBbbzxxs1ub1dVVZWRI0c2K9v4jK/3/x1//PFNyj344IPZfffds8466zQpd8YZZyyxPXPnzs3FF1+czTbbLB07dkzfvn3zyU9+MmPHjq2U+f73v59ddtklPXv2TKdOnbL99tvnt7/9bbO6Gsf5q1/9KltttVVqa2tzzz33LHUdVVVVmTVrVn7xi1984LQCAACwePrdq1e/+4033sgRRxyRLl26pHfv3jnnnHMyb968Fss+9thjOeCAA9K9e/d07tw5e+65Z/7yl7+02Obnn38+Rx99dOrq6tKzZ8+cddZZmTt3bqXc0vSxp06dmuOPPz49evRI9+7dc8IJJ2T27NlLnCYAWBVcKQ7AGmXatGmZPHlyiqLIpEmT8uMf/zgzZ87MZz/72UqZoihy2GGH5cEHH8xJJ52UbbfdNn/84x9z/vnn580338wPf/jDdOrUKb/4xS+y66675sILL8wVV1yRJDn99NMzbdq0jBw5MjU1NZU66+vrc8ABB+SjH/1ovvvd7+aee+7J8OHDs3Dhwlx66aUf2N5//OMf2X333VNXV5cvf/nLad++fa699trstddeefjhh7Pzzjtnjz32yJlnnpmrrroqX/va17LlllsmSeXfJdl2221z3nnnJUnGjRuXiy66aLHlf/nLX1b+f8455zR5b9y4cTn44IPTt2/fXHTRRenVq1eS5HOf+9wS21FfX59DDjkkDzzwQD7zmc/krLPOyowZM3Lffffl2WefzeDBg5MkV155ZQ477LAce+yxmT9/fm655ZYcddRRueuuu3LwwQc3qfNPf/pTfvOb3+SMM87Ieuutl4033nip6/jlL3+Zk08+OTvttFNOPfXUJKm0AQAAgJbpdze3uvS758yZk3322SevvfZazjzzzPTr1y+//OUv86c//alZ2T/96U858MADs/3222f48OGprq7OiBEjsvfee+f//u//stNOOzUpf/TRR2fjjTfO5ZdfntGjR+eqq67KlClTcuONN1amaUl97KOPPjoDBw7M5ZdfnqeeeirXX399evfune985ztLnDYAWOkKAFgDjBgxokjS7K+2trYYOXJkk7K33357kaS47LLLmgw/8sgji6qqquJf//pXZdgFF1xQVFdXF4888khx6623FkmKH/3oR00+N2zYsCJJ8cUvfrEyrKGhoTj44IOLDh06FG+//XZleJJi+PDhlddHHHFE0aFDh2Ls2LGVYePHjy+6detW7LHHHpVhjeN+8MEHl2m+9OvXrzjkkEMqrx9//PEiSTFixIhmZS+88MKiqqqqybABAwYUw4YNq7y+9tpriyTFqFGjmpRLUpx++umLbcsNN9xQJCmuuOKKZu81NDRU/j979uwm782fP7/Yeuuti7333rvZOKurq4t//OMfzepb2jq6dOnSZPoAAABomX53y1anfvePfvSjIknxm9/8pjJs1qxZxSabbNJk2hoaGopNN9202H///Zv1xwcOHFh8/OMfrwwbPnx4kaQ47LDDmozrtNNOK5IUf/vb3yrDPqiP3VjHiSee2GT4Jz7xiaJnz56LnSYAWFXcPh2ANcrVV1+d++67L/fdd19uuummDB06NCeffHJ+97vfVcr84Q9/SE1NTc4888wmnz3vvPNSFEXuvvvuyrCLL744W221VYYNG5bTTjste+65Z7PPNVr0NmaNtzWbP39+7r///hbL19fX5957780RRxyRQYMGVYb37ds3xxxzTP785z9n+vTpyzUfGs2dO3epn7E9f/781NbWLrbMjBkzkiQ9e/Zc5rbcdtttWW+99fLFL36x2XtVVVWV/3fq1Kny/ylTpmTatGnZfffd89RTTzX73J577pkPfehDzYYvSx0AAAAsPf3uplanfvcf/vCH9O3bN0ceeWRlWOfOnStXbjcaM2ZMXnrppRxzzDF55513Mnny5EyePDmzZs3KPvvsk0ceeSQNDQ1NPnP66ac3ed3Yt//DH/6w1O37j//4jyavd99997zzzjsrvAwAoDW4fToAa5SddtopO+ywQ+X1//t//y/bbbddzjjjjBxyyCHp0KFDXn311fTr1y/dunVr8tnG26K9+uqrlWEdOnTIDTfckB133DEdO3bMiBEjmgS4jaqrq5t0sJNks802S5K88sorLbb17bffzuzZs7P55ps3e2/LLbdMQ0NDXn/99Wy11VZLN/HvU19fn6lTp6Z79+5LVX7q1Knp2rXrYst87GMfS5Kcf/75ufzyyyu3cVsaY8eOzeabb97sOXPvd9ddd+Wyyy7LmDFjmjz3rKX5PnDgwBWuAwAAgKWn3/1vq1u/+9VXX80mm2zSbP69f/pfeumlJMmwYcM+sK5p06ZlnXXWqbzedNNNm7w/ePDgVFdXf+C8b8lGG23U5HVj/VOmTEldXd1S1wMAK4MrxQFYo1VXV2fo0KF56623Kp2+ZfXHP/4xyXtnfy9vHW3htddeS0NDQ+U520syYcKErL/++osts8suu+R73/teHnjggXzoQx9Kr169lqmDviT/93//l8MOOywdO3bMf/3Xf+UPf/hD7rvvvhxzzDEpiqJZ+UWvCF/eOgAAAFh++t1rVr87SeUq8O9973uVq/7f/7ek8H55Tjpf9Bnxi9JXB2B14EpxANZ4CxcuTJLMnDkzSTJgwIDcf//9mTFjRpOz1p9//vnK+42eeeaZXHrppTnhhBMyZsyYnHzyyfn73//e7CzwhoaGvPzyy5Wz1JPkxRdfTJIP7Bz36tUrnTt3zgsvvNDsveeffz7V1dXZcMMNkyxfZ/OJJ55IkiZn8C/Oc889l4985CNLLPelL30pL730Um677bbceOON6dChQz7+8Y8v8XODBw/OY489lgULFqR9+/YtlrntttvSsWPH/PGPf2xyS7kRI0Ys1TQsax2uHAcAAFhx+t2rR797wIABefbZZ1MURZPpef/0Dx48OElSV1eXfffdd6na/tJLLzW5W9u//vWvZicE6GMDsCZzpTgAa7QFCxbk3nvvTYcOHSq3aTvooINSX1+fn/zkJ03K/vCHP0xVVVUOPPDAymePP/749OvXL1deeWVGjhy
"text/plain": [
"<Figure size 2000x1500 with 4 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Построим графики boxplot для обнаружения выбросов\n",
"plt.figure(figsize=(20, 15))\n",
"\n",
"# Создание boxplot\n",
"for i, column in enumerate(['carat', 'depth', 'table', 'price'], 1):\n",
" plt.subplot(4, 2, i)\n",
" sns.boxplot(x=df[column])\n",
" plt.title(f\"Boxplot для {column}\")\n",
" \n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Проблемы наборов\n",
"*Зашумленность данных:* Может быть обнаружена через большое количество выбросов (аномальных значений). Выбросы могут выходить за нормальные границы. Они наблюдаются во всех графиках, которые мы построили. Если у определённого параметра много выбросов, то данные могут быть зашумлены или содержат необычные значения, которые стоит анализировать и, возможно, удалить или скорректировать. Графики boxplot помогают визуализировать распределение данных и выявить выбросы, которые находятся за пределами \"усов\" боксплота.\n",
"\n",
"Попробуем решить устранить проблему выбросов для table и depth. Используется метод усреднения данных для устранения выбросов. Метод стандартных отклонений."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 2000x1500 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Вычисление среднего и стандартного отклонения для столбцов\n",
"means = df[['carat', 'depth', 'table']].mean()\n",
"std_devs = df[['carat', 'depth', 'table']].std()\n",
"\n",
"# Определение порога для выбросов (например, 3 стандартных отклонения)\n",
"threshold = 3\n",
"\n",
"# Функция для замены выбросов на среднее значение\n",
"def replace_outliers_with_mean(column):\n",
" mean_value = column.mean()\n",
" upper_limit = mean_value + threshold * column.std()\n",
" lower_limit = mean_value - threshold * column.std()\n",
" \n",
" return column.where((column >= lower_limit) & (column <= upper_limit), mean_value)\n",
"\n",
"# Применение функции к каждому столбцу\n",
"for column in ['depth', 'table', 'carat']:\n",
" df[column] = replace_outliers_with_mean(df[column])\n",
"\n",
"# Графическое отображение после замены выбросов\n",
"plt.figure(figsize=(20, 15))\n",
"for i, column in enumerate(['carat', 'depth', 'table'], 1):\n",
" plt.subplot(4, 2, i)\n",
" sns.boxplot(x=df[column])\n",
" plt.title(f\"Boxplot для {column} после замены выбросов на среднее значение\")\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Этот подход позволяет вам обрабатывать выбросы, не прибегая к квантилям и он наверяка избавит от выбросов. Однако стоит отметить, что использование стандартных отклонений может не всегда быть оптимальным для всех распределений данных, потому что данные могут быть плохо распределены. А использование медианы с квантилями вместо среднего значения помогает лучше справиться с выбросами, особенно если распределение данных имеет сильные отклонения."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 2000x1500 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Вычисление квантилей для каждого столбца\n",
"Q1 = df[['carat', 'depth', 'table']].quantile(0.01)\n",
"Q3 = df[['carat', 'depth', 'table']].quantile(0.99)\n",
"IQR = Q3 - Q1\n",
"\n",
"# Определение границ для выбросов\n",
"lower_bound = Q1 - 1.5 * IQR\n",
"upper_bound = Q3 + 1.5 * IQR\n",
"\n",
"# Функция для замены выбросов на медианное значение\n",
"def replace_outliers_with_median(column):\n",
" median_value = column.median()\n",
" return column.where((column >= lower_bound[column.name]) & (column <= upper_bound[column.name]), median_value)\n",
"\n",
"# Применение функции к каждому столбцу\n",
"for column in ['depth', 'table', 'carat']:\n",
" df[column] = replace_outliers_with_median(df[column])\n",
"\n",
"# Графическое отображение после замены выбросов\n",
"plt.figure(figsize=(20, 15))\n",
"for i, column in enumerate(['carat', 'depth', 'table'], 1):\n",
" plt.subplot(4, 2, i)\n",
" sns.boxplot(x=df[column])\n",
" plt.title(f\"Boxplot для {column} после замены выбросов на медиану\")\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Актуальность данных* — это проблема, которая возникает, когда данные устарели или больше не отражают текущую ситуацию. Это часто встречается в данных о ценах. \n",
"*Просачивание данных* происходит, когда в обучающей выборке присутствует информация, которая не должна быть известна модели на этапе обучения. В данном случае это может происходить, если некоторые переменные, такие как цена, сильно коррелируют с целевым признаком и тем самым искажают результат. Проверка на наличие утечек данных. \n",
"*Смещение в данных* может возникать, если датасет не полностью репрезентативен для реальной популяции бриллиантов. Например, если в датасете больше дешёвых или дорогих бриллиантов, это создаёт смещение в оценке моделей \n",
"Код ниже проверяет данные на распредение признаков и просачивание данных."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABdEAAAKyCAYAAAA6kpdwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeXwU9f3H8ffsbnZz3+TiCOG+5VApHoiCBMSDarWiVqoo6A+8qEixHni0qNSDChVtq2jForaKVqnKKSoRBQkIAnIEuZJACMnmTnZ3fn8kWbIk4TJkE/J6Ph7z2Jnv9zvf+cwyjwU+M/tZwzRNUwAAAAAAAAAAoBaLvwMAAAAAAAAAAKCpIokOAAAAAAAAAEA9SKIDAAAAAAAAAFAPkugAAAAAAAAAANSDJDoAAAAAAAAAAPUgiQ4AAAAAAAAAQD1IogMAAAAAAAAAUA+S6AAAAAAAAAAA1IMkOgAAAAAAAAAA9SCJDgAAAAAnacWKFTIMQytWrPB3KAAAADjNSKIDAACgWZs3b54Mw/AugYGB6tKliyZNmqTs7Gx/hwcAAACgmbP5OwAAAACgITz++ONKSUlRaWmpvvzyS7300ktatGiRNm7cqODgYH+HhzPM4MGDVVJSIrvd7u9QAAAAcJqRRAcAAMAZYeTIkTr77LMlSbfddptiYmL03HPP6YMPPtCYMWP8HB3OFKWlpbLb7bJYLAoMDPR3OAAAAGgElHMBAADAGemSSy6RJGVkZEiScnNzdf/996t3794KDQ1VeHi4Ro4cqfXr19fat7S0VNOnT1eXLl0UGBioxMREXX311dqxY4ckadeuXT4lZI5ehgwZ4p2runb222+/rQcffFAJCQkKCQnRlVdeqT179tQ69urVqzVixAhFREQoODhYF110kb766qs6z3HIkCF1Hn/69Om1xr755psaMGCAgoKCFB0dreuvv77O4x/r3GryeDx64YUX1LNnTwUGBio+Pl4TJkzQ4cOHfca1b99el19+ea3jTJo0qdacdcU+c+bMWu+pJJWVlenRRx9Vp06d5HA41LZtWz3wwAMqKyur872qaciQIerVq5fWrl2r8847T0FBQUpJSdHcuXN9xlX/2S1YsEAPPfSQWrdureDgYDmdznproq9evVqXXXaZoqKiFBISoj59+mjWrFk+Y7Zs2aJf/epXio6OVmBgoM4++2x9+OGHx40bAAAA/sGT6AAAADgjVSe8Y2JiJEk7d+7UwoULde211yolJUXZ2dl6+eWXddFFF+mHH35QUlKSJMntduvyyy/X0qVLdf311+uee+5RQUGBFi9erI0bN6pjx47eY4wZM0aXXXaZz3GnTZtWZzx//OMfZRiGpk6dqgMHDuiFF17QsGHDlJ6erqCgIEnSsmXLNHLkSA0YMECPPvqoLBaLXnvtNV1yySX64osvdO6559aat02bNpoxY4YkqbCwUHfeeWedx3744Yd13XXX6bbbbtPBgwf14osvavDgwVq3bp0iIyNr7TN+/HhdeOGFkqT33ntP77//vk//hAkTNG/ePN1yyy26++67lZGRodmzZ2vdunX66quvFBAQUOf7cDLy8vK851aTx+PRlVdeqS+//FLjx49X9+7d9f333+v555/Xjz/+qIULFx537sOHD+uyyy7TddddpzFjxuidd97RnXfeKbvdrltvvdVn7BNPPCG73a77779fZWVl9ZZwWbx4sS6//HIlJibqnnvuUUJCgjZv3qyPPvpI99xzjyRp06ZNOv/889W6dWv9/ve/V0hIiN555x2NHj1a//nPf/TLX/7y5N8oAAAAnF4mAAAA0Iy99tprpiRzyZIl5sGDB809e/aYCxYsMGNiYsygoCBz7969pmmaZmlpqel2u332zcjIMB0Oh/n4449721599VVTkvncc8/VOpbH4/HuJ8mcOXNmrTE9e/Y0L7roIu/28uXLTUlm69atTafT6W1/5513TEnmrFmzvHN37tzZTE1N9R7HNE2zuLjYTElJMS+99NJaxzrvvPPMXr16ebcPHjxoSjIfffRRb9uuXbtMq9Vq/vGPf/TZ9/vvvzdtNlut9m3btpmSzNdff93b9uijj5o1/+vwxRdfmJLM+fPn++z7ySef1GpPTk42R40aVSv2iRMnmkf/d+To2B944AEzLi7OHDBggM97+s9//tO0WCzmF1984bP/3LlzTUnmV199Vet4NV100UWmJPPZZ5/1tpWVlZl9+/Y14+LizPLyctM0j/zZdejQwSwuLvaZo7pv+fLlpmmapsvlMlNSUszk5GTz8OHDPmNr/nkOHTrU7N27t1laWurTf95555mdO3c+ZtwAAADwD8q5AAAA4IwwbNgwtWrVSm3bttX111+v0NBQvf/++2rdurUkyeFwyGKp/Oev2+3WoUOHFBoaqq5du+q7777zzvOf//xHsbGxuuuuu2od4+jyIyfj5ptvVlhYmHf7V7/6lRITE7Vo0SJJUnp6urZt26YbbrhBhw4dUk5OjnJyclRUVKShQ4dq5cqV8ng8PnOWlpYety73e++9J4/Ho+uuu847Z05OjhISEtS5c2ctX77cZ3x5ebmkyverPu+++64iIiJ06aWX+sw5YMAAhYaG1pqzoqLCZ1xOTo5KS0uPGfe+ffv04osv6uGHH1ZoaGit43fv3l3dunXzmbO6hM/Rx6+LzWbThAkTvNt2u10TJkzQgQMHtHbtWp+xY8eO9X5boD7r1q1TRkaG7r333lpP9ldfN7m5uVq2bJmuu+46FRQUeOM+dOiQUlNTtW3bNu3bt++4sQMAAKBxUc4FAAAAZ4Q5c+aoS5custlsio+PV9euXb1Jc6myBMisWbP017/+VRkZGXK73d6+6pIvUmUZmK5du8pma9h/Knfu3Nln2zAMderUSbt27ZIkbdu2TVJlwrY++fn5ioqK8m7n5OTUmvdo27Ztk2ma9Y47uuxKXl6eJNVKXB89Z35+vuLi4ursP3DggM/2Z599platWh0zzqM9+uijSkpK0oQJE/Tvf/+71vE3b95c75xHH78uSUlJCgkJ8Wnr0qWLpMq68L/4xS+87SkpKcedr7p8UK9eveods337dpmmqYcfflgPP/xwvbFX3/gBAABA00ASHQAAAGeEc889V2effXa9/X/605/08MMP69Zbb9UTTzyh6OhoWSwW3XvvvbWe8PaH6hhmzpypvn371jmmZmK7vLxcmZmZuvTSS487r2EY+t///ier1XrMOSUpKytLkpSQkHDMOePi4jR//vw6+49Obg8cOFBPPvmkT9vs2bP1wQcf1Ln/5s2bNW/ePL355pt11lb3eDzq3bu3nnvuuTr3b9u2bb2xn4rjPYV+oqr/jO+//36lpqbWOaZTp04NciwAAAA0HJLoAAAAaBH+/e9/6+KLL9Y//vEPn/a8vDzFxsZ6tzt27KjVq1eroqKiQX4cs1r1k+bVTNPU9u3b1adPH+9xJSk8PFzDhg077nzr169XRUXFMW8cVM9rmqZSUlK8T1ofyw8//CDDMNS1a9djzrlkyRKdf/75J5Rgjo2NrXVOx/rxz2nTpqlv37769a9/Xe/x169fr6FDh55yiZ39+/erqKjI52n0H3/8UZLUvn37k56v+s9v48aN9f75dejQQVLl0/8n8mcMAACApoGa6AAAAGgRrFarTNP0aXv33Xdr1aC+5pprlJOTo9mzZ9ea4+j9T8Ybb7yhgoIC7/a///1vZWZmauTIkZKkAQMGqGPHjvrzn/+swsLCWvsfPHiwVuxWq1WXX375MY979dVXy2q16rHHHqsVv2maOnTokHfb5XLpP//5j84999xjlnO57rrr5Ha79cQTT9Tqc7lc3pIwpyItLU0ffPCBnnrqqXoT5Nddd5327dunv/3tb7X6SkpKVFRUdNzjuFwuvfzyy97t8vJyvfzyy2rVqpUGDBhw0nH3799fKSkpeuGFF2qdf/X7HhcXpyFDhujll19WZmZmrTmO/jMGAABA08CT6AAAAGgRLr/8cj3++OO65ZZbdN555+n777/X/PnzvU8HV7v55pv1xhtvaPLkyfrmm2904YUXqqioSEu
"text/plain": [
"<Figure size 1500x1000 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1sAAAIjCAYAAAD1OgEdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABPvklEQVR4nO3deVwW5f7/8fcNyiIKKiq44kIqLmliKbmRophYmpYtroVLirmVeuh43FrsaGpWLnk0LVNTs6zUVNz3XdwzM8wtsFzAjUWY3x/9mK+3oIIyEPJ6Ph7348Fcc801n7kZkLczc902wzAMAQAAAACylENOFwAAAAAADyPCFgAAAABYgLAFAAAAABYgbAEAAACABQhbAAAAAGABwhYAAAAAWICwBQAAAAAWIGwBAAAAgAUIWwAAAABgAcIWAADAbfr06aPmzZtn+34vXLggNzc3LV++PNv3DSDrEbYAPBROnDihXr16qWLFinJxcZG7u7saNGigSZMm6caNGzldHoBcJCoqSjNmzNDbb79t2T6WL1+ukSNHpmn39PRU9+7d9Z///MeyfQPIPjbDMIycLgIAHsSyZcv0wgsvyNnZWV26dFGNGjWUmJiozZs3a/HixerWrZumT5+e02UCyCUGDBign376SceOHbNsH3379tXkyZOV3p9hR48eVbVq1bRmzRo1bdrUshoAWC9fThcAAA8iKipKL730knx8fLR27VqVLFnSXBcWFqZff/1Vy5Yty8EKAeQmSUlJmjt3rl5//fUcq8HPz081atTQ7NmzCVtALsdthABytbFjx+rq1auaOXOmXdBK5evrq/79+5vLNptNffv21dy5c1WlShW5uLjI399fGzduTLPt2bNn9dprr8nLy0vOzs6qXr26Pv/883TrGDlypGw2W5pXYGCgXb/AwEDVqFEjzfYffvihbDabTp48abbdvHlT7777ripXrixnZ2e7cXfv3p3pfunp1q2bChYsmKb9m2++kc1m0/r16+3aExISNGLECPn6+srZ2Vlly5bVkCFDlJCQYNcv9X2+XevWrVW+fPk0x/7kk0/K09NTrq6u8vf31zfffHPXulMFBgam+76nvm59PyVpypQpql69upydnVWqVCmFhYXp8uXLd93Hnb63t75S36fAwMA03/Ndu3aZ/W51t/FS3yPDMFS+fHm1adMmTV3x8fHy8PBQr1697lr/zZs39c4776hSpUpydnZW+fLl9fbbb6f5npUvXz7dWrp37y5JOnnypGw2mz788ENNnDhRPj4+cnV1VZMmTXTo0CG7sQ4cOKBu3bqZt/V6e3vrtdde04ULF9J9b//66y+79t27d8tms2n27NlmW7du3dKcO1999ZUcHBz0wQcf3LXf6dOn5erqmu45cbvNmzfrr7/+UlBQUJp18fHxGjlypCpXriwXFxeVLFlS7dq104kTJyRJ69evT/fnJvW9Sz2ebt26afLkyZLsz4NbNW/eXD/++GO6V74A5B5c2QKQq/3444+qWLGinnzyyQxvs2HDBi1YsED9+vWTs7OzpkyZopYtW2rnzp1mEIqJiVH9+vXN0FC8eHH99NNPCg0NVVxcnAYMGJDu2FOnTjXDS3h4+AMd2/jx4/Wf//xHzz33nIYOHSpnZ2dt2rQpzS2RGe33oFJSUvTss89q8+bN6tmzp/z8/HTw4EFNnDhRv/zyi5YsWXJf406aNEnPPvusOnbsqMTERH399dd64YUXtHTpUoWEhNxz+zJlymjMmDF2bcuXL9f8+fPt2kaOHKlRo0YpKChIvXv31rFjxzR16lTt2rVLW7ZsUf78+dMdv127dvL19TWXBw4cKD8/P/Xs2dNs8/Pzu2N9Q4cOveO65s2bq0uXLnZt48eP16VLlyT9/Yd4p06dNHbsWF28eFFFixY1+/3444+Ki4tTp06d7ji+JHXv3l1ffPGFnn/+eb355pvasWOHxowZo6NHj+q7776z61u7dm29+eabdm23Hrskffnll7py5YrCwsIUHx+vSZMmqWnTpjp48KC8vLwkSREREfrtt9/06quvytvbW4cPH9b06dN1+PBhbd++PU2wuB+rVq3Sa6+9pr59++pf//rXXfsOHz5c8fHxGRp369atstlseuyxx+zak5OT1bp1a61Zs0YvvfSS+vfvrytXrigiIkKHDh1SpUqVMlx7r169dO7cOUVERGjOnDnp9vH399fEiRN1+PDhdP+DBkAuYQBALhUbG2tIMtq0aZPhbSQZkozdu3ebbb///rvh4uJiPPfcc2ZbaGioUbJkSeOvv/6y2/6ll14yPDw8jOvXr9u1v/3224Yku/7Vq1c3mjRpYtevSZMmRvXq1dPUNW7cOEOSERUVZbYFBAQYfn5+RkpKitk2a9YsQ5Kxa9euTPdLT9euXQ03N7c07YsWLTIkGevWrTPb5syZYzg4OBibNm2y6ztt2jRDkrFlyxazTZIRFhaWZtyQkBDDx8fHru329zIxMdGoUaOG0bRp07vWbhgZfz/Pnz9vODk5GS1atDCSk5PNfp9++qkhyfj888/vua9UPj4+RteuXe9Yz63f8+XLlxuSjJYtWxq3/5Ob0ffo2LFjhiRj6tSpdv2effZZo3z58nbf99tFRkYakozu3bvbtb/11luGJGPt2rV2xxUSEnLHsaKiogxJhqurq3HmzBmzfceOHYYkY+DAgWbb7d9TwzCM+fPnG5KMjRs3mm0jRowwJBl//vmnXd9du3YZkoxZs2aZbV27djXfl927dxsFCxY0XnjhBbvv5+39DMMwDh06ZDg4OBhPP/10mp+x9HTq1Mnw9PRM0/75558bkowJEyakWZf6PVi3bl2anxvD+L/37tbjCQsLS3NO3Grr1q2GJGPBggV3rRfAPxu3EQLIteLi4iRJhQoVytR2AQEB8vf3N5fLlSunNm3aaOXKlUpOTpZhGFq8eLGeeeYZGYahv/76y3wFBwcrNjZWe/futRsz9X/NXVxc7rn/5ORkuzH/+usvXb9+PU2/K1euqEiRIve8CpDRfg9q0aJF8vPzU9WqVe1qT32mZN26dXb94+Pj0xxnUlJSmnFdXV3Nry9duqTY2Fg1atQozXv8IFavXq3ExEQNGDBADg7/909fjx495O7ubslzfYZhKDw8XO3bt1e9evXue5zKlSurXr16mjt3rtl28eJF/fTTT+rYseNdv++p04cPGjTIrj316tX9HHfbtm1VunRpc/mJJ55QvXr17KYqv/V7mnoe1K9fX5LS/b5evHjR7jyJjY294/5/++03hYSEqHbt2pozZ47d9zM94eHhqlOnjl544YUMHd+FCxdUpEiRNO2LFy9WsWLF9MYbb6RZZ8XPXmoNt99iCSB34TZCALmWu7u7pL/DRmY88sgjadoqV66s69ev688//5SDg4MuX76s6dOn3/FWvPPnz9st//XXX8qfP78KFChwz/3//PPPKl68+D37BQQEaMaMGfrss8/UunVrOTs76+rVq/fd70EdP35cR48evWPtt78nM2fO1MyZM9P08/HxsVteunSp3n33XUVGRto9R5SVf8D+/vvvkqQqVarYtTs5OalixYrm+qw0d+5cHT58WAsXLtS8efMeaKwuXbqob9+++v333+Xj46NFixYpKSlJnTt3vut2v//+uxwcHNLcCujt7a3ChQvf13Hf6edn4cKF5vLFixc1atQoff3112nOi/SC1O3flzu5du2agoODFRMTI09Pz3ueI5s3b9aPP/6oNWvW6NSpUxnah6R0n5M6ceKEqlSponz5sudPp9QarP5PFADWImwByLXc3d1VqlSpNA/nP6iUlBRJUqdOndS1a9d0+zz66KN2yydPnlS5cuUy9IdR+fLl9b///c+ubdGiRWmC3ZgxY3T27Nl7zoqW0X4PKiUlRTVr1tSECRPSXV+2bFm75TZt2qSZJGPYsGGKjo42lzdt2qRnn31WjRs31pQpU1SyZEnlz59fs2bNeuCAkpMSExP1n//8R6GhoapcufIDj/fSSy9p4MCBmjt3rt5++2199dVXqlu3boZDSnb/wd6hQwdt3bpVgwcPVu3atVWwYEG
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Проверка распределения признаков\n",
"plt.figure(figsize=(15, 10))\n",
"for i, column in enumerate(['price', 'cut'], 1):\n",
" plt.subplot(3, 1, i)\n",
" sns.histplot(df[column], bins=20, kde=True)\n",
" plt.title(f\"Распределение {column}\")\n",
"plt.tight_layout()\n",
"plt.show()\n",
"\n",
"# Средняя цена по типу огранки (cut)\n",
"cut_price_mean = df.groupby('cut')['price'].mean().sort_values()\n",
"plt.figure(figsize=(10, 6))\n",
"sns.barplot(x=cut_price_mean.index, y=cut_price_mean.values)\n",
"plt.title(\"Средняя цена по типу огранки (cut)\")\n",
"plt.xlabel(\"Огранка\")\n",
"plt.ylabel(\"Средняя цена\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Для решения проблем с просачиваниям, проведём корелляционый анализ между признаками и целевым признаком. "
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Корреляция признаков с ценой (price):\n",
"price 1.000000\n",
"carat 0.921591\n",
"x 0.884433\n",
"y 0.865419\n",
"z 0.861249\n",
"clarity_SI2 0.128427\n",
"table 0.127118\n",
"color_I 0.097130\n",
"cut_Premium 0.095685\n",
"color_J 0.081714\n",
"color_H 0.059229\n",
"clarity_SI1 0.008940\n",
"color_G 0.008564\n",
"cut_Very Good 0.006589\n",
"cut_Good -0.000307\n",
"clarity_VS2 -0.001066\n",
"clarity_VS1 -0.009879\n",
"depth -0.010630\n",
"color_F -0.024166\n",
"clarity_IF -0.049593\n",
"clarity_VVS2 -0.052375\n",
"clarity_VVS1 -0.095261\n",
"cut_Ideal -0.097160\n",
"color_E -0.101101\n",
"Unnamed: 0 -0.306875\n",
"Name: price, dtype: float64\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA2QAAAIjCAYAAABswtioAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB6/ElEQVR4nO3dd3wUdf7H8ffsbnbTE5KQhECA0HuLgoiiAoKKhVPPhmdDUQ9UDk89fhY4PUWxF07Pu1P0xH6KngVFEEFBlNAhIGDopJHek935/RGysiS0sGES8no+3Ed2Z777nc9MVtg3M9/vGKZpmgIAAAAAnHA2qwsAAAAAgOaKQAYAAAAAFiGQAQAAAIBFCGQAAAAAYBECGQAAAABYhEAGAAAAABYhkAEAAACARQhkAAAAAGARAhkAAAAAWIRABgAAThiPx6NevXrp0Ucf9XvfhmFo2rRpfu9Xkvbt26eQkBB98cUXDdI/gOaLQAYAJ9CsWbNkGIb3ERgYqC5dumjixInKyMiwujygwb3zzjvauXOnJk6caHUpxyQ6Olo333yzHnzwQatLAXCSMUzTNK0uAgCai1mzZunGG2/Uww8/rKSkJJWVlen777/Xf/7zH7Vr107r1q1TcHCw1WUCDaZfv34aNGiQ/vGPf/i977KyMjkcDjkcDr/3LUmpqanq0aOH5s+fr2HDhjXINgA0P5whAwALnH/++br22mt18803a9asWZo0aZLS0tL0ySefWF0a0GBWrlyp1atX64orrvBbnx6PR2VlZZKkwMDABgtjktS9e3f16tVLs2bNarBtAGh+CGQA0AjU/Gt7WlqaJCknJ0d//vOf1bt3b4WGhio8PFznn3++Vq9eXeu9ZWVlmjZtmrp06aLAwEC1atVKl156qbZu3SpJ2rZtm89lkgc/zj77bG9fCxculGEYeu+99/R///d/io+PV0hIiC6++GLt3Lmz1raXLVum8847TxEREQoODtZZZ52lH374oc59PPvss+vcfl1jft566y0lJycrKChIUVFRuuqqq+rc/uH27UAej0fPPfecevbsqcDAQMXFxenWW29Vbm6uT7v27dvrwgsvrLWdiRMn1uqzrtqffPLJWsdUksrLyzV16lR16tRJLpdLiYmJuvfee1VeXl7nsTrQ2WefrV69etVa/tRTT8kwDG3bts1neV5eniZNmqTExES5XC516tRJTzzxhDwej7dNzXF76qmnavXbq1evOj8TH3744SFrvOGGG9S+ffsj7sucOXPkdDo1dOhQn+XTpk2TYRjauHGjrrjiCoWHhys6Olp33XWXN2zVMAxDEydO1OzZs9WzZ0+5XC7NnTvXu+7g38nu3bs1btw4JSQkyOVyKSkpSbfffrsqKiq8bY7mmNU499xz9b///U9cYATAXxrun5EAAEetJjxFR0dLkn799VfNmTNHv//975WUlKSMjAz94x//0FlnnaUNGzYoISFBkuR2u3XhhRdq/vz5uuqqq3TXXXepsLBQ8+bN07p169SxY0fvNq6++mpdcMEFPtudMmVKnfU8+uijMgxD9913nzIzM/Xcc89pxIgRWrVqlYKCgiRJCxYs0Pnnn6/k5GRNnTpVNptNr7/+uoYNG6bFixdr4MCBtfpt06aNpk+fLkkqKirS7bffXue2H3zwQV1xxRW6+eablZWVpRdffFFDhw7VypUrFRkZWes948eP15lnnilJ+uijj/Txxx/7rL/11lu9l4veeeedSktL00svvaSVK1fqhx9+UEBAQJ3H4Vjk5eV59+1AHo9HF198sb7//nuNHz9e3bt319q1a/Xss8/ql19+0Zw5c4572zVKSkp01llnaffu3br11lvVtm1bLVmyRFOmTNHevXv13HPP+W1b9bFkyRL16tXrkMf7iiuuUPv27TV9+nT9+OOPeuGFF5Sbm6s333zTp92CBQv0/vvva+LEiYqJiTlkGNyzZ48GDhyovLw8jR8/Xt26ddPu3bv14YcfqqSkRE6n85iPWXJysp599lmtX7++zqAMAMfMBACcMK+//ropyfzmm2/MrKwsc+fOnea7775rRkdHm0FBQeauXbtM0zTNsrIy0+12+7w3LS3NdLlc5sMPP+xd9tprr5mSzGeeeabWtjwej/d9kswnn3yyVpuePXuaZ511lvf1t99+a0oyW7dubRYUFHiXv//++6Yk8/nnn/f23blzZ3PUqFHe7ZimaZaUlJhJSUnmueeeW2tbp59+utmrVy/v66ysLFOSOXXqVO+ybdu2mXa73Xz00Ud93rt27VrT4XDUWr5582ZTkvnGG294l02dOtU88K+3xYsXm5LM2bNn+7x37ty5tZa3a9fOHD16dK3aJ0yYYB78V+bBtd97771mbGysmZyc7HNM//Of/5g2m81cvHixz/tfeeUVU5L5ww8/1Nregc466yyzZ8+etZY/+eSTpiQzLS3Nu+yRRx4xQ0JCzF9++cWn7V/+8hfTbrebO3bsME2zfp+JDz744JA1Xn/99Wa7du0Oux+maZpt2rQxL7vsslrLa35nF198sc/yP/7xj6Ykc/Xq1d5lkkybzWauX7++Vj8H/06uu+4602azmT///HOttjWf26M9ZjWWLFliSjLfe++9I+4vABwNLlkEAAuMGDFCLVu2VGJioq666iqFhobq448/VuvWrSVJLpdLNlv1H9Fut1v79u1TaGiounbtqhUrVnj7+e9//6uYmBjdcccdtbZx8CV2x+K6665TWFiY9/Xll1+uVq1aeaf8XrVqlTZv3qxrrrlG+/btU3Z2trKzs1VcXKzhw4dr0aJFtS73KisrU2Bg4GG3+9FHH8nj8eiKK67w9pmdna34+Hh17txZ3377rU/7msvOXC7XIfv84IMPFBERoXPPPdenz+TkZIWGhtbqs7Ky0qdddnZ2rcvmDrZ79269+OKLevDBBxUaGlpr+927d1e3bt18+qy5TPXg7R+PDz74QGeeeaZatGjhs60RI0bI7XZr0aJFPu1LSkpq7avb7a6z78LCQmVnZysvL6/e9e3bt08tWrQ45PoJEyb4vK75XB881fxZZ52lHj16HHZbHo9Hc+bM0UUXXaRTTjml1vqa/z+O9ZjV1J+dnX3Y7QPA0eKSRQCwwMyZM9WlSxc5HA7FxcWpa9eu3gAmVX+ZfP755/X3v/9daWlpPl+Say5rlKovdezatavfJzLo3Lmzz2vDMNSpUyfveKXNmzdLkq6//vpD9pGfn+/z5Ts7O7tWvwfbvHmzTNM8ZLuDL3WrCQcHh6CD+8zPz1dsbGyd6zMzM31ef/3112rZsuVh6zzY1KlTlZCQoFtvvbXWWKvNmzcrNTX1kH0evP3jsXnzZq1Zs+aotzV16lRNnTq1Vru4uLhay2666Sbv89DQUF100UV69tln62x7OOZhxl4d/Hvv2LGjbDZbrXFySUlJR9xOVlaWCgoKjnhZ4bEes5r6j+cfPADgQAQyALDAwIED6/xX+xqPPfaYHnzwQd1000165JFHFBUVJZvNpkmTJtU50cCJVlPDk08+qX79+tXZ5sCQVFFRob179+rcc889Yr+GYejLL7+U3W4/bJ+SlJ6eLkmKj48/bJ+xsbGaPXt2nesP/iI+aNAg/e1vf/NZ9tJLLx1yBszU1FTNmjVLb731Vp1jozwej3r37q1nnnmmzvcnJiYesvZj5fF4dO655+ree++tc32XLl18Xo8fP16///3vfZbdcsstdb73oYce0plnnqnKykqlpKTo4YcfVl5e3jHdKDk6OrrWRCqHc6jQUzOO0R+O9ZjV1B8TE+O3GgA0bwQyAGiEPvzwQ51zzjn697//7bM8Ly/P54tgx44dtWzZMlVWVvplYooaNWfAapimqS1btqhPnz7e7UpSeHi4RowYccT+Vq9ercrKysOG0Jp+TdNUUlJSrS/CddmwYYMMw1DXrl0P2+c333yjIUOGHNUX+ZiYmFr7dLiJN6ZMmaJ+/frpyiuvPOT2V69ereHDhzf4WZWOHTuqqKjoqH4nUvUZqYPbhoSE1Nm2d+/e3rbnn3++duzYoTfeeENVVVVHXV+3bt28M4nWZfP
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.model_selection import train_test_split\n",
"\n",
"# Преобразуем все категориальные данные в числовые\n",
"# Проверим, какие столбцы являются категориальными\n",
"categorical_columns = df.select_dtypes(include=['object']).columns\n",
"\n",
"# Применяем one-hot encoding к категориальным столбцам\n",
"df_encoded = pd.get_dummies(df, columns=categorical_columns, drop_first=True)\n",
"\n",
"# Вычисляем корреляцию для преобразованных данных\n",
"correlations = df_encoded.corr()['price'].sort_values(ascending=False)\n",
"print(\"Корреляция признаков с ценой (price):\")\n",
"print(correlations)\n",
"\n",
"# Визуализация распределения цены (price)\n",
"plt.figure(figsize=(10, 6))\n",
"sns.histplot(df['price'], bins=30, kde=True)\n",
"plt.title('Распределение цены (price)')\n",
"plt.xlabel('Цена')\n",
"plt.ylabel('Количество')\n",
"plt.show()\n",
"\n",
"# Разделение данных на обучающую и тестовую выборки\n",
"X = df_encoded.drop('price', axis=1)\n",
"y = df_encoded['price']\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=df['cut'])\n"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Количество дубликатов: 0\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA/YAAAIjCAYAAACpnIB8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAADZIklEQVR4nOzdeVxU9f7H8dewIwiIoOCC4gqappIpWVrmbptL3UxzLdO0Utuu92Zq3bJsMc20XS1b1EorNdfUMpdcc8MlxaAUBRdwAxTO74/zm1EEFRA4DLyfj8dpzpw58/1+zjAz+ZnvZjMMw0BEREREREREnJKL1QGIiIiIiIiISP4psRcRERERERFxYkrsRURERERERJyYEnsRERERERERJ6bEXkRERERERMSJKbEXERERERERcWJK7EVEREREREScmBJ7ERERERERESemxF5ERKQUOnXqFAcPHuTMmTNWhyJSohmGwfHjx9m3b5/VoYhICabEXkREpBQwDIMPP/yQ5s2bU6ZMGfz8/AgPD2fmzJlWh+YU/v77b6ZPn+64f/DgQb744gvrAhJ27NjBvHnzHPe3bt3KggULrAvoEqdOneKFF16gbt26eHh4UL58eerUqcOePXusDk1ESigl9iJSrEyfPh2bzebYvLy8qFOnDkOHDuXIkSNWhydyTWvWrGHMmDGcPHnS6lCyeOihhxg0aBCRkZF8/vnnLF26lGXLltG1a1erQ3MKNpuNIUOGsHjxYg4ePMhzzz3Hr7/+anVYpdqpU6d47LHHWLduHfv27eOpp55i+/btVofFsWPHiI6OZtKkSXTv3p3vv/+epUuXsnLlSqpXr251eCJSQrlZHYCISE5eeuklwsPDSU1NZfXq1UydOpWFCxeyY8cOypQpY3V4Ile0Zs0axo4dS9++fQkICLA6HAA+++wzZs2axcyZM3nooYesDscpVa5cmUcffZQOHToAEBoaysqVK60NqpSLjo52bAB16tTh0UcftTgqePbZZzl8+DBr166lfv36VocjIqWEEnsRKZY6duzITTfdBMAjjzxC+fLlefvtt/n+++/p0aOHxdFJaXLmzBl8fHysDuO6vPHGG/To0UNJ/XV65513eOKJJ0hKSuKGG25w+vdFSTBv3jx27drFuXPnaNCgAR4eHpbGc/ToUWbMmMH777+vpF5EipS64ouIU2jdujUAsbGxABw/fpxnnnmGBg0a4Ovri5+fHx07duSPP/7I9tzU1FTGjBlDnTp18PLyIjQ0lK5du7J//37AHCt7aff/y7fbb7/dUdbKlSux2WzMmjWL//znP4SEhODj48M999xDfHx8trrXr19Phw4d8Pf3p0yZMrRq1Yrffvstx2u8/fbbc6x/zJgx2c6dOXMmUVFReHt7ExgYyIMPPphj/Ve7tktlZmbyzjvvUL9+fby8vKhYsSKPPfYYJ06cyHJe9erVueuuu7LVM3To0Gxl5hT7G2+8ke01BUhLS2P06NHUqlULT09PqlatynPPPUdaWlqOr9Xl1q9fT6dOnShXrhw+Pj40bNiQiRMnOh7ftm0bffv2pUaNGnh5eRESEkL//v05duxYlnLGjBmDzWZj165dPPTQQ5QrV45bb70112WMGTOGZ599FoDw8HDHa33w4MErxn753z0oKIjOnTuzY8eOXF37nDlzHO+FoKAgevXqxT///ON4/MyZM+zYsYOqVavSuXNn/Pz88PHx4fbbb8/SlfzAgQPYbDYmTJiQrY41a9Zgs9n46quvHDFf/je0v9cuHYee29fdPgTn0tdp8eLF3HLLLZQpUwZ/f3/uuuuubK+J/e+VlJTkOLZx48ZscQDccMMN2WIG+Omnn7jtttvw8fGhbNmydO7cmZ07d2Y5p2/fvo4u1DVr1qRZs2YcP34cb2/va/59L3++XXx8fK6e37dv36t+P13+/NxcD8Du3bt54IEHCA4Oxtvbm7p16/Lf//4XuPi6Xm27tLfCtd6DOV1HuXLlsr0H7aZMmUL9+vXx9PSkUqVKDBkyJNvQlkvfg/Xq1SMqKoo//vgjx++3nOT2c2ez2Rg6dOgVy7n8vbthwwYyMzNJT0/npptuwsvLi/Lly9OjRw/i4uKyPf/nn392/L0CAgK49957iYmJyXKO/e9h/5v5+flRvnx5nnrqKVJTU7PFe+n37oULF+jUqROBgYHs2rXLcXzatGm0bt2aChUq4OnpSb169Zg6dWq22FxcXHjxxRezHP/yyy+x2WzZzhcRa6nFXkScgj0JL1++PGAmIfPmzeP+++8nPDycI0eO8MEHH9CqVSt27dpFpUqVAMjIyOCuu+5i+fLlPPjggzz11FOcOnWKpUuXsmPHDmrWrOmoo0ePHnTq1ClLvSNHjswxnldeeQWbzcbzzz/P0aNHeeedd2jTpg1bt27F29sbMP9R1LFjR6Kiohg9ejQuLi6Of0z9+uuv3HzzzdnKrVKlCuPGjQPg9OnTDB48OMe6R40axQMPPMAjjzxCYmIi7777Li1btmTLli05dv8eOHAgt912GwDfffcdc+fOzfL4Y489xvTp0+nXrx9PPvkksbGxTJ48mS1btvDbb7/h7u6e4+uQFydPnnRc26UyMzO55557WL16NQMHDiQyMpLt27czYcIE9u7dm2VyrJwsXbqUu+66i9DQUJ566ilCQkKIiYlh/vz5PPXUU45zDhw4QL9+/QgJCWHnzp18+OGH7Ny5k3Xr1mVLBO6//35q167Nq6++imEYuS6ja9eu7N27l6+++ooJEyYQFBQEQHBw8FWvISIigv/+978YhsH+/ft5++236dSpU46JwKXsf7OmTZsybtw4jhw5wsSJE/ntt98c7wV7Ev36668TEhLCs88+i5eXFx999BFt2rRh6dKltGzZkho1atCiRQu++OILhg8fnqWeL774grJly3LvvfdeNZ7L5fV1t/v111/p1KkT1apVY/To0Zw/f54pU6bQokULNmzYQJ06dfIUx5V8/vnn9OnTh/bt2/P6669z9uxZpk6dyq233sqWLVuuOh76xRdfzJZU5UVun//YY4/Rpk0bx/2HH36YLl26ZJkbwf7+yu31bNu2jdtuuw13d3cGDhxI9erV2b9/Pz/++COvvPIKXbt2pVatWo7yhw8fTmRkJAMHDnQci4yMBHL3HrQLCgpy/HD0999/M3HiRDp16kR8fLzjvDFjxjB27FjatGnD4MGD2bNnD1OnTmXDhg3X/C56/vnnr/l6Xiq/n7ursX/ehg4dSlRUFK+99hqJiYlMmjSJ1atXs2XLFsf3wrJly+jYsSM1atRgzJgxnDt3jnfffZcWLVqwefPmbO+/Bx54gOrVqzNu3DjWrVvHpEmTOHHiBJ999tkV43nkkUdYuXIlS5cupV69eo7jU6dOpX79+txzzz24ubnx448/8vjjj5OZmcmQIUMA8wf1xx9/nHHjxnHffffRpEkTDh8+zBNPPEGbNm0YNGhQvl8nESkEhohIMTJt2jQDMJYtW2YkJiYa8fHxxtdff22UL1/e8Pb2Nv7++2/DMAwjNTXVyMjIyPLc2NhYw9PT03jppZccxz799FMDMN5+++1sdWVmZjqeBxhvvPFGtnPq169vtGrVynF/xYoVBmBUrlzZSElJcRyfPXu2ARgTJ050lF27dm2jffv2jnoMwzDOnj1rhIeHG23bts1W1y233GLccMMNjvuJiYkGYIwePdpx7ODBg4arq6vxyiuvZHnu9u3bDTc3t2zH9+3bZwDGjBkzHMdGjx5tXPr1/+uvvxqA8cUXX2R57qJFi7Idr1atmtG5c+dssQ8ZMsS4/H8pl8f+3HPPGRUqVDCioqKyvKaff/654eLiYvz6669Znv/+++8bgPHbb79lq8/uwoULRnh4uFGtWjXjxIkTWR67/HW/3FdffWUAxi+//OI4Zn9tevToke383JbxxhtvGIARGxt7xbgv1apVqyyvh2EYxn/+8x8DMI4ePXrF56WnpxsVKlQwbrjhBuPcuXOO4/PnzzcA48UXXzQM4+L728PDw9i7d6/jvMTERKN8+fJGVFSU49gHH3xgAEZMTEyWeoKCgow
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA/YAAAIjCAYAAACpnIB8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAADpxUlEQVR4nOzdeXwT1d4G8Cfd0r2le1laSgu0IIiAQkEREalYFQH1qiggKIqgAipe7quAqOCGCMridgEFroKyqCCyKArKJptAKYsUytItLd33dt4/jpM0dE+TzEx5vp9PSZpMZk7SpPSZ8zvn6CRJkkBEREREREREmuSgdAOIiIiIiIiIyHIM9kREREREREQaxmBPREREREREpGEM9kREREREREQaxmBPREREREREpGEM9kREREREREQaxmBPREREREREpGEM9kREREREREQaxmBPRER0DSouLsbly5eRnp6udFOImr28vDycO3cOBQUFSjeFiJopBnsiIrrmnTt3DjqdDu+99169286cORM6nc4OrbK+bdu24d5774Wvry/c3NzQqlUrPP/880o3SzNmz56NyspKAEBlZSXmzJmjcIuubfn5+fjggw+M32dnZ2PhwoXKNagKSZLwySefoHfv3nB3d4e3tzciIiKwYsUKpZtGRM0Ugz0Rqc6yZcug0+mMX66urujQoQMmTpyItLQ0pZtHKrRq1SqzP/CpukWLFiEuLg45OTmYP38+tm7diq1bt2LWrFlKN00zli9fjvfeew8XL17E3LlzsXz5cqWbdE1zc3PDK6+8gpUrV+LChQuYOXMmvv/+e6WbBQB45JFH8PTTTyMmJgZffvkltm7dim3btmHYsGFKN42ImiknpRtARFSbWbNmISIiAsXFxdi1axcWL16MTZs24dixY3B3d1e6eaQiq1atwrFjxzBp0iSlm6JKp0+fxpQpUzBu3DgsWrRIsxUHSps1axZGjhyJl19+GXq9nr2vCnN0dMRrr72GkSNHorKyEt7e3ti4caPSzcIXX3yBr7/+GitWrMAjjzyidHOI6BrBYE9EqjV48GD07NkTAPDEE0/A398f77//PjZs2ICHH35Y4dYRaceCBQsQEhKCBQsWMNQ3wb/+9S/cdtttOHPmDNq3b4/AwEClm3TNe+GFF/Cvf/0LFy5cQExMDHx9fZVuEt599108/PDDDPVEZFcs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
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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xRVljtusWTNbyMvIyNBDDz3k8NxPPfWUbr/9dt13331KTU3Vyy+/rF69emnLli0OK6Jjx47VNddcI0latGiRFi9ebLf/gQcesHVdPPLII0pKStIrr7yiLVu26Mcff5SPj4/D30NVnD592vbaSioqKtKNN96otWvXauzYserQoYN+++03vfjii/rf//7nMKBY3X333Zo+fbo++eQTjR8/3rY9Ly9Pn332mYYNGyZ/f/8K5xUZGakXX3xRkiVoz507V9dff70OHTpUYXV5+fLlGjRokC688EJNmzZN2dnZevnll9WzZ09t3rzZFo5OnDihN998U8HBwXrkkUfUpEkTffjhh7rlllu0YMECjRgxQsHBwbr55pv1ySef6IUXXpDZbLad5z//+Y8Mw9Cdd95Z4esobePGjfrpp580fPhwNWvWTAcOHNDrr7+uPn36aOfOneVePrNv3z716dNHgYGBmjx5sgIDA/Xvf/9b/fv3V2Jionr16lWleZSnOn8fVnPmzNGxY8eqfe7KPv+WW25RmzZtbI8nTpyoDh06aOzYsbZtHTp0qNLrOXLkiK644gqdPn1aY8eOVfv27XX48GF99tlnysrKUq9evfTBBx/Yjm+tYP/f//2fbdtVV10lqfLvQSvrcdPS0vTaa6/ptttu0/bt29WuXTtJxZ1Xl19+uWbOnKljx45p7ty5+vHHH8v9t8Vq6tSpFX7QVlp1/+4qcuLECUmWf7fbtm2rZ555Rjk5OXr11VfVs2dPbdy4URdddJEkaceOHbrmmmsUGhqqxx9/XD4+PnrjjTfUp08frV69Wj169LA79vjx4xUeHq5p06Zpz549ev3113Xw4EHbBxCOPP3003r77bf1ySef2H3gOX/+fAUHB2vSpEkKDg7W999/r6lTpyo9PV2zZ8+WZHlfzZgxQ5MnT9att96qG2+8UZmZmbrnnnvUvn17TZ8+vVq/IwB1mAEADcy7775rSDKWL19upKamGocOHTI+/vhjo3HjxkZAQIDxxx9/GIZhGDk5OUZhYaHdc5OSkgw/Pz9j+vTptm3vvPOOIcl44YUXypyrqKjI9jxJxuzZs8uMufjii43evXvbHq9cudKQZFxwwQVGenq6bfunn35qSDLmzp1rO3bbtm2NhIQE23kMwzCysrKMuLg447rrritzrquuusro1KmT7XFqaqohyXj66adt2w4cOGCYzWbjH//4h91zf/vtN8Pb27vM9r179xqSjPfee8+27emnnzZK/k/MDz/8YEgyFixYYPfcpUuXltnesmVLY/DgwWXmPm7cOKP0/2yVnvvjjz9uREVFGd27d7f7nX7wwQeGl5eX8cMPP9g9f968eYYk48cffyxzvpLi4+ONHj162G1btGiRIclYuXJlhc8dNWqU0bJlS7ttb775piHJ+Pnnnyt87iWXXGJERUUZJ06csG379ddfDS8vL2PkyJG2bZIMScaqVats27KysowOHToYMTExRl5enmEYhvHdd98Zkoz//ve/dufp0qWL3e9r9OjRRosWLcrMp/TvOysrq8yYdevWGZKM999/37bN+p62/q6GDRtmmM1mY/v27bYxaWlpRuPGjY3u3bvbtln/Vjdu3Gjb5ug9axiGMXjwYLvfc1X+Pkq/X48fP26EhIQYgwYNqtR/45o+v6SWLVsao0a
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA/8AAAIjCAYAAABViau2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB80klEQVR4nOzde3yP9f/H8edn5/NmttkwzPnMzxxCIcYcSk7JoRwiJZIU8q0cUolOhOhIBxKFinI+JYdqyCGEaMQwzGzsfP3++LRP+9gcNts+8/G4327XbZ/Pdb2v63pdH9c+9rwO78tkGIYhAAAAAABgtxxsXQAAAAAAAChYhH8AAAAAAOwc4R8AAAAAADtH+AcAAAAAwM4R/gEAAAAAsHOEfwAAAAAA7BzhHwAAAAAAO0f4BwAAAADAzhH+AQBAgUhMTNTx48d14cIFW5cC2L24uDgdPnxYaWlpti4FQBFF+AcAoADMnTtXJpNJx44du63XkVuLFi1Sq1at5O3tLS8vL5UpU0ZTpkyxdVm3hYSEBE2dOtXyPi4uTjNnzrRdQdCJEyc0d+5cy/tjx45p3rx5tisoi9TUVE2ZMkV16tSRq6urihUrpkqVKmnt2rW2Lg1AEUX4B1DoMgNL5uDm5qbKlStr6NChOn36tK3Lg527fPmyxo8frw0bNuR63mPHjslkMunNN9/M/8LswPPPP6/u3bvL29tbH374oVavXq01a9boySeftHVptwV3d3e9+OKLmjdvno4fP67x48fr+++/t3VZdzSTyaQhQ4Zo5cqVOnbsmEaNGqWffvrJ1mUpOTlZEREReumll9SiRQstWrRIq1ev1rp169S4cWNblwegiHKydQEA7lwvv/yywsLClJSUpM2bN2vWrFn64YcftHfvXnl4eNi6PNipy5cva8KECZKkFi1a2LYYO7Jx40ZNnjxZkyZN0vPPP2/rcm5Ljo6OmjBhgvr06aOMjAz5+Pho+fLlti7rjlaqVCk99thjatu2rSQpJCQkTwcO89vkyZO1fft2rVy5ku8xADeN8A/AZtq1a6f69etLkgYOHKjixYvr7bff1rfffquePXvauDoAufHmm2+qSZMmBP9b9Oyzz+qhhx7S8ePHVa1aNfn5+dm6pDve1KlT9dRTTyk2NlY1a9aUp6enTetJS0vT1KlT9eyzzxL8AeQKl/0DKDJatmwpSTp69Kgk6fz583ruuedUq1YteXl5ycfHR+3atdPvv/+ebd6kpCSNHz9elStXlpubm0JCQtSlSxcdOXJE0n+Xa19ryPoH1IYNG2QymfTVV1/pf//7n4KDg+Xp6amOHTvq+PHj2da9fft2tW3bVr6+vvLw8FDz5s31888/57iNLVq0yHH948ePz9b2iy++UHh4uNzd3eXv768ePXrkuP7rbVtWGRkZmjp1qmrUqCE3NzeVKFFCjz/+eLbO2MqVK6f77rsv23qGDh2abZk51f7GG29k+0wl82Wq48aNU8WKFeXq6qrQ0FCNGjVKycnJOX5WV9u+fbvat2+vYsWKydPTU7Vr19a0adMs01u0aJHjH8L9+vVTuXLlJJk/q8DAQEnShAkTrvv558a+ffvUsmVLubu7q3Tp0nrllVeUkZGRY9sff/xR99xzjzw9PeXt7a0OHTpo3759Vm12796tfv36qXz58nJzc1NwcLAeffRRnTt3Lk/19evXz2q/KFasmFq0aHHTly+vW7fOUrOfn58eeOAB7d+/36rNtm3bVLNmTfXo0UP+/v5yd3dXgwYNtHTpUkubhIQEeXp66umnn862jhMnTsjR0VGTJk2y1Jz575bV1f9ef//9t5588klVqVJF7u7uKl68uB588MFs/SBk/l5nPWv766+/qnXr1vL29panp2eOn0nmbUq//fabZVxsbGyO+819992XY8038x0xfvx4y+9X6dKl1bhxYzk5OSk4ODhb3TnJOn+mhISEm5o/c97rDVnnv9nvvH/++UcDBgxQyZIl5erqqrCwMA0ePFgpKSnZbv/Kach6r/3N7INXb4e3t7caNmxotQ9mWrRokeX7NSAgQA8//LD++ecfqzZZ98EKFSqoUaNGOn/+vNzd3W+qr42b/b271ndupqv33YMHD+rChQvy9vZW8+bN5eHhIV9fX913333au3dvtvl37typdu3aycfHR15eXmrVqpW2bdtm1Sbz32PTpk16/PHHVbx4cfn4+KhPnz45/h/Rr18/q3GDBg2Sm5ub1X7y7bffqkOHDpZ//woVKmjixIlKT0+3tNm/f7/c3d3Vp08fq+Vt3rxZjo6OGj169DU/FwC5x5l/AEVGZlAvXry4JOmvv/7S0qVL9eCDDyosLEynT5/W+++/r+bNm+uPP/5QyZIlJUnp6em67777tHbtWvXo0UNPP/20Ll26pNWrV2vv3r2qUKGCZR09e/ZU+/btrdY7ZsyYHOt59dVXZTKZNHr0aJ05c0ZTp05VRESEdu3aJXd3d0nmP0jbtWun8PBwjRs3Tg4ODpozZ45atmypn376SQ0bNsy23NKlS1sCTkJCggYPHpzjul966SV1795dAwcO1NmzZzV9+nQ1a9ZMO3fuzPFs4KBBg3TPPfdIkhYvXqwlS5ZYTX/88cc1d+5c9e/fX8OGDdPRo0c1Y8YM7dy5Uz///LOcnZ1z/BxyIy4uzrJtWWVkZKhjx47avHmzBg0apGrVqmnPnj1655139Oeff+b4x3lWq1ev1n333aeQkBA9/fTTCg4O1v79+7Vs2bIcg+S1BAYGatasWRo8eLA6d+6sLl26SJJq166dq+3MKiYmRvfee6/S0tL0/PPPy9PTUx988IFlH8nq888/V9++fRUZGanJkyfr8uXLmjVrlu6++27t3LnTEjRWr16tv/76S/3791dwcLD27dunDz74QPv27dO2bduyhbybERAQoHfeeUeSOWhPmzZN7du31/Hjx697dnnNmjVq166dypcvr/Hjx+vKlSuaPn26mjZtqh07dlhqPnfunD744AN5eXlp2LBhCgwM1BdffKEuXbpo3rx56tmzp7y8vNS5c2d99dVXevvtt+Xo6GhZz5dffinDMNS7d+9cbdevv/6qLVu2qEePHipdurSOHTumWbNmqUWLFvrjjz+ueQvR4cOH1aJFC3l4eGjkyJHy8PDQhx9+qIiICK1evVrNmjXLVR3XkpfviExvvfXWLfWDcrPzd+nSRRUrVrS8f+aZZ1StWjUNGjTIMq5atWq52p6TJ0+qYcOGiouL06BBg1S1alX9888/+vrrr3X58mU1a9ZMn3/+uWX5r776qiTphRdesIxr0qSJpJvfBzNlLjc2NlbvvfeeHnzwQe3du1dVqlSRJMv3YIMGDTRp0iSdPn1a06ZN088//3zN79dMY8eOVVJS0g0/00x5/b27nsyDgGPGjFGlSpU0YcIEJSUlaebMmWratKl+/fVXVa5cWZL5wOQ999wjHx8fjRo1Ss7Oznr//ffVokULbdy4UY0aNbJa9tChQ+Xn56fx48fr4MGDmjVrlv7++2/LAYicjBs3Th9//LG++uorqwOwc+fOlZeXl0aMGCEvLy+tW7dOY8eOVXx8vN544w1J5v1q4sSJGjlypLp166aOHTsqMTFR/fr1U9WqVfXyyy/n6TMCcA0GABSyOXPmGJKMNWvWGGfPnjWOHz9uLFiwwChevLjh7u5unDhxwjAMw0hKSjLS09Ot5j169Kjh6upqvPzyy5Zxn3zyiSHJePvtt7OtKyMjwzKfJOONN97I1qZGjRpG8+bNLe/Xr19vSDJKlSplxMfHW8YvXLjQkGRMmzbNsuxKlSoZkZGRlvUYhmFcvnzZCAsLM1q3bp1tXU2aNDFq1qxpeX/27FlDkjFu3DjLuGPHjhmOjo7Gq6++ajXvnj17DCcnp2zjDx06ZEgyPv30U8u4cePGGVm/4n/66SdDkjFv3jyreVesWJFtfNmyZY0OHTpkq33IkCHG1f9tXF37qFGjjKCgICM8PNzqM/38888NBwcH46effrKaf/bs2YYk4+eff862vkxpaWlGWFiYUbZsWePChQtW07J+7s2bN7daZ6a+ffs
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA/8AAAIjCAYAAABViau2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACAi0lEQVR4nOzde3zO9f/H8ee183kzswOGOZ/JRKOQxpwSKiXlkChN39BRB6d+pVRCREc6UKjoQOSQUkiGnCVNI8aGbYydP78/rna1y4Zttl1z7XG/3T63Xdfnen8+n9fn2ue6tufn8P6YDMMwBAAAAAAA7JaDrQsAAAAAAACli/APAAAAAICdI/wDAAAAAGDnCP8AAAAAANg5wj8AAAAAAHaO8A8AAAAAgJ0j/AMAAAAAYOcI/wAAAAAA2DnCPwAAKLfOnj2rw4cPKzU11dalAHbNMAydPn1aBw8etHUpAEoJ4R8AgHJm/fr1MplMWr9+va1LKXOGYeidd97RDTfcIA8PD/n4+CgsLEyffPKJrUu7Jhw9elTz58+3PD98+LAWLFhgu4Kg3bt3a9myZZbnO3bs0PLly21XUB5nz57Vc889pwYNGsjFxUWVK1dW/fr1deDAAVuXBqAUEP4BFMn8+fNlMpksg5ubm+rXr69Ro0bpxIkTti4Pdu78+fOaOHFisULx4cOHrbZdR0dH1ahRQ3379tWOHTtKvFYUzz333KOHHnpIjRo10scff6zVq1drzZo16tevn61LuyaYTCZFR0dr1apVOnz4sJ588klt2LDB1mVVaGfPntWDDz6ozZs36+DBg3r00Ue1a9cuW5elU6dOKSIiQjNnztQdd9yhr776SqtXr9b69etVq1YtW5cHoBQ42boAANemyZMnKywsTGlpafr55581Z84crVixQrt375aHh4ety4OdOn/+vCZNmiRJ6tSpU7HmMWDAAPXo0UPZ2dnat2+f5syZo++++06bN29Wy5YtS67Yq9ChQwdduHBBLi4uti6lTH300UdatGiRPvnkE91zzz22LueaVK1aNQ0fPlzdunWTJIWEhFTIM0jKk4iICMsgSfXr19fw4cNtXJX0xBNP6Pjx49q0aZOaNGli63IAlAHCP4Bi6d69u1q3bi1JeuCBB1S5cmVNmzZNX331lQYMGGDj6oBLa9Wqle69917L8/bt26t3796aM2eO3n777QKnSU1NlaenZ1mVKAcHB7m5uZXZ8sqLV199VQMGDCD4X6Xp06frkUceUWJiopo2bVqm2y4KtmzZMu3du1cXLlxQs2bNbL5j7+TJk/rwww81d+5cgj9QgXDaP4AS0blzZ0lSbGysJOn06dN6/PHH1axZM3l5ecnHx0fdu3fX77//nm/atLQ0TZw4UfXr15ebm5tCQkLUr18/HTp0SFL+07UvHvIeAc69VnrRokV65plnFBwcLE9PT/Xu3VtHjhzJt+xff/1V3bp1k6+vrzw8PNSxY0f98ssvBa5jp06dClz+xIkT87X95JNPFB4eLnd3d/n7++vuu+8ucPmXW7e8cnJyNH36dDVp0kRubm4KCgrSgw8+qDNnzli1q1Wrlnr16pVvOaNGjco3z4Jqf/XVV/O9p5KUnp6uCRMmqG7dunJ1dVVoaKiefPJJpaenF/heXezXX39Vjx49VKlSJXl6eqp58+aaMWOG5fVOnToVeCR/yJAhltNPDx8+rCpVqkiSJk2adNn3vygu3nZzL2358ccf9fDDDyswMFDVq1e3tP/uu+900003ydPTU97e3urZs6f27NmTr24vLy/FxcWpV69e8vLyUrVq1TR79mxJ0q5du9S5c2d5enqqZs2aWrhwodX0BV3zX6tWLQ0ZMiRf/Re/d7nTLl68WJMmTVK1atXk7e2tO+64Q8nJyUpPT9fo0aMVGBgoLy8vDR06tFC/x4u3/4CAAPXs2VO7d+++4rSStGTJEstnIiAgQPfee6/++ecfy+upqanavXu3QkND1bNnT/n4+MjT01OdOnWyOm39r7/+kslk0htvvJFvGRs3bpTJZNKnn35a4Hsj/feZy3td/M6dOzVkyBDVrl1bbm5uCg4O1v33369Tp05ZTZu7bRw+fNgybtWqVWrXrp08PDzk6+urXr165XtPJk6cKJPJpMTERMu4rVu35qtDkpo2bVrgZ6Gw213u56VOnTpq27atTp8+LXd393x1FyTv9LmOHDlSqOmHDBly2e/pi6cvzPpI0v79+9W/f39VqVJF7u7uatCggZ599llJ/72vlxvyfoautA0WtB6VKlXKtw3meuutt9SkSRO5urqqatWqio6OVlJSklWbvNtg48aNFR4ert9//73A7/mCFPZzZzKZNGrUqEvO5+Jt97ffflNOTo4yMjLUunVrubm5qXLlyhowYIDi4uLyTb9u3TrL78vPz0+33Xab9u3bZ9Um9/eR+zvz8fFR5cqV9eijjyotLS1fvXm/u7OystSjRw/5+/tr7969lvHz5s1T586dFRgYKFdXVzVu3Fhz5szJV5uDg4PGjx9vNX7hwoUymUz52gMVGUf+AZSI3KBeuXJlSeZ/0JctW6Y777xTYWFhOnHihN5++2117NhRe/fuVdWqVSVJ2dnZ6tWrl9auXau7775bjz76qM6ePavVq1dr9+7dqlOnjmUZuadr5zVu3LgC63nxxRdlMpn01FNP6eTJk5o+fboiIyO1Y8cOubu7SzL/w9C9e3eFh4drwoQJcnBwsPyjsWHDBrVp0ybffKtXr64pU6ZIks6dO6eRI0cWuOznn39e/fv31wMPPKCEhAS9+eab6tChg7Zv3y4/P79804wYMUI33XSTJOnLL7/U0qVLrV5/8MEHNX/+fA0dOlT/+9//FBsbq1mzZmn79u365Zdf5OzsXOD7UBRJSUmWdcsrJydHvXv31s8//6wRI0aoUaNG2rVrl9544w398ccfVh1ZFWT16tXq1auXQkJC9Oijjyo4OFj79u3Tt99+q0cffbTQ9VWpUkVz5szRyJEj1bdvX8s14M2bNy/Sel7s4m0318MPP6wqVapo/Pjxlp7mP/74Yw0ePFhRUVF65ZVXdP78ec2ZM0c33nijtm/fbhWcsrOz1b17d3Xo0EFTp07VggULNGrUKHl6eurZZ5/VwIED1a9fP82dO1eDBg1SRESEwsLCrmpd8poyZYrc3d319NNP688//9Sbb74pZ2dnOTg46MyZM5o4caI2b96s+fPnKywsLN8/zgVp2LChnn32WRmGoUOHDmnatGnq0aNHgWEhr9xt9/rrr9eUKVN04sQJzZgxQ7/88ovlM5EbtF955RUFBwfriSeekJubm959911FRkZq9erV6tChg2rXrq327dtrwYIFGjNmjNVyFixYIG9vb912221Feq9Wr16tv/76S0OHDlVwcLD27Nmjd955R3v27NHmzZsvGdI2bNigHj16qGbNmpowYYIyMzP11ltvqX379vrtt99Uv379ItVxKUXZ7i42fvz4fMGrKAo7/YMPPqjIyEjL8/vuu8/qcyrJsvOusOuzc+dO3XTTTXJ2dtaIESNUq1YtHTp0SN98841efPFF9evXT3Xr1rXMf8yYMWrUqJFGjBhhGdeoUSNJhdsGcwUEBFh2Lh09elQzZsxQjx49dOTIEUu7iRMnatKkSYqMjNTIkSN14MABzZkzR7/99tsVv5OfeuqpK76feRX3c3c5uZ+3UaNGKTw8XC+//LISEhI0c+ZM/fzzz9q+fbsCAgIkSWvWrFH37t1Vu3ZtTZw4URcuXNCbb76p9u3ba9u2bfm2v/79+6tWrVqaMmWKNm/erJkzZ+rMmTP66KOPLlnPAw88oPXr12v16tVq3LixZfycOXPUpEkT9e7dW05OTvrmm2/08MMPKycnR9HR0ZLMO3AffvhhTZkyRX369FGrVq10/PhxPfLII4qMjNRDDz1U7PcJsDsGABTBvHnzDEnGmjVrjISEBOPIkSPGZ599ZlSuXNlwd3c3jh49ahiGYaSlpRnZ2dlW08bGxhqurq7G5MmTLeM++OADQ5Ixbdq0fMvKycmxTCfJePXVV/O1adKkidGxY0fL8x9
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA/8AAAIjCAYAAABViau2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACIb0lEQVR4nOzdfXxP9f/H8edns302Y5thVxnm+ppMNErUmIuUkIsuXOQqXxKrSOWyvhQRRSSFvshFRUWR6y6MMhTCT5kohsUujF2f3x+f9snHZraZfebjcb/dzm2fc877nPM6Z+dzttc57/N+mwzDMAQAAAAAAByWk70DAAAAAAAANxfJPwAAAAAADo7kHwAAAAAAB0fyDwAAAACAgyP5BwAAAADAwZH8AwAAAADg4Ej+AQAAAABwcCT/AAAAAAA4OJJ/AABwSzEMQ+fPn9fRo0ftHQrg8NLT03X27FmdOHHC3qEAuEEk/wAAIJtWrVqpVatW9g7DKjExUa+88opq1qwpV1dXlS1bVjVq1NCRI0fsHdot4fvvv9e2bdus49u2bdMPP/xgv4CgtWvXat++fdbxNWvW6ODBg/YL6ApHjx7VwIEDFRAQIFdXV/n5+Sk0NFSGYdg7NAA3gOQfQI4WLVokk8lkHdzc3FSjRg0NGzZMZ86csXd4cHCXLl3ShAkTbJKVvJgxY4ZMJpM2bdp0zTLvv/++TCaTvvjiixuMsvB8+eWX6tSpk/z8/OTq6iofHx+1bNlS06dPV0JCgr3Ds7u///5boaGhevvtt9WtWzd9/vnn2rhxo7Zt26bKlSvbO7xbwsmTJ/Wf//xH+/fv1/79+/Wf//xHJ0+etHdYt7X9+/fr2Wef1dGjR7Vz5049/fTTSkxMtHdY2rlzp5o2baotW7boxRdf1IYNG7Rx40atWbNGJpPJ3uEBuAEmg1t4AHKwaNEi9evXT5MmTVJwcLCSk5P1/fff63//+58qVaqkAwcOqGTJkvYOEw4qNjZW5cuX1/jx4zVhwoQ8L3fq1CkFBQWpT58++vDDD3Ms07p1a+3fv1+nT5+Wi4tLIUVcMJmZmerfv78WLVqk+vXrq2vXrgoKClJiYqIiIyP1+eefq3nz5tq8eXORx5b11D+/N2Buhqeeekqff/65vv32W9WtW9fe4dySUlJS1LJlS/3444+SpNDQUG3btk2urq52juz2de7cOTVv3ly//fabJKlLly769NNP7RpTamqqGjZsKE9PT33zzTfy8vKyazwAClcJewcAoHhr3769mjRpIkkaMGCAypYtqxkzZujzzz9Xr1697BwdYCswMFCtW7fWZ599prlz58psNtvM/+uvv/Ttt99q0KBBN5T4G4ah5ORkubu731C8U6dO1aJFizRy5EhNnz7d5qnas88+q9OnT+ujjz66oW3c6s6ePavFixdr3rx5JP43wGw2a8eOHTpw4IAkqV69enJ2drZzVLe38uXL68CBA9ab6bVr17Z3SPryyy915MgRHT58mMQfcEBU+weQL/fff78kKTo6WpJ0/vx5Pf/886pfv75KlSolT09PtW/fXj///HO2ZZOTkzVhwgTVqFFDbm5uCggIUJcuXfT7779Lko4fP27zqsHVw5XvH2/btk0mk0krVqzQSy+9JH9/f3l4eOihhx7KsSrrrl271K5dO3l5ealkyZK67777rvm+a6tWrXLcfk5PoJcsWaKQkBC5u7vLx8dHPXv2zHH7ue3blTIzMzVz5kzVrVtXbm5u8vPz0+DBg3XhwgWbcpUrV9aDDz6YbTvDhg3Lts6cYp82bVq2YypZng6OHz9e1apVk9lsVlBQkEaNGqWUlJQcj9XVdu3apQ4dOqhMmTLy8PBQgwYNNGvWLOv8a71H3rdvX2v17ePHj6t8+fKSpIkTJ+Z6/HPyxBNPKD4+XuvWrcs2b/ny5crMzNTjjz8uKf/He8OGDWrSpInc3d313nvv6b777lPDhg1zjKNmzZoKDw+/ZpyXLl3SG2+8obp161p/H1cLCAjQ6NGjbaalp6fr1VdfVdWqVWU2m1W5cmW99NJLOf6O3n33XdWtW1dms1mBgYEaOnSo4uLispWbP3++qlatKnd3dzVt2lTffffdNeO+2pXnsrOzs+644w4NGjQox+1cLS/78tNPPykzM1Opqalq0qSJ3NzcVLZsWfXq1cumAbKFCxfKZDJp79692bYzefJkOTs766+//rLGfPX5lPWq0/Hjx63TPv/8c3Xs2FGBgYEym82qWrWqXn31VWVkZNgse+X5m2XmzJmqVauWzGaz/P39NXjwYJ0/f96mTKtWrVSvXj2baW+++Wa2OGJjY3OMOT/nb9++feXs7KyGDRuqYcOG+uyzz2QymfL02kTW8ldatWpVnpavXLlyrtf1K5fP6/5I0tdff6377rtPpUuXlqenp+666y4tW7ZM0rWv4Tldd/P6fbpyP5ycnOTv768ePXpkawQvKSlJzz33nIKCgmQ2m1WzZk29+eab2d6Vz/p9ms1mhYSEqHbt2te8LuckL9+7rL+Tn3zyyTXXc/W5u3PnTgUHB+vTTz9V1apV5erqqooVK2rUqFG6fPlytuXzco3JOs+joqLUvHlzubu7Kzg4WPPmzbMplxXvlbWNTp06pcqVK6tJkya6ePGiJEvthHHjxikkJEReXl7y8PDQvffeq61bt9qsb/z48XJycspWc2rQoEFydXXN8f8UwNHx5B9AvmQl6mXLlpUkHTt2TGvWrNGjjz6q4OBgnTlzxpoU/frrrwoMDJQkZWRk6MEHH9TmzZvVs2dPPfvss0pMTNTGjRt14MABVa1a1bqNXr16qUOHDjbbHTNmTI7x/Pe//5XJZNLo0aN19uxZzZw5U2FhYdq3b5/1qeyWLVvUvn17hYSEWP8ZWLhwoe6//3599913atq0abb1VqhQQVOmTJEkXbx4UUOGDMlx22PHjlX37t01YMAAnTt3Tu+8845atmypvXv3ytvbO9sygwYN0r333itJ+uyzz7R69Wqb+YMHD7a+cjF8+HBFR0dr9uzZ2rt3r3744YdCqaYeFxdn3bcrZWZm6qGHHtL333+vQYMGqXbt2tq/f7/eeust/d///Z/WrFmT63o3btyoBx98UAEBAXr22Wfl7++vQ4cOae3atXr22WfzHF/58uU1d+5cDRkyRI888oi6dOkiSWrQoEGelu/SpYuGDBmiZcuWWZfNsmzZMlWqVEktWrSQlL/jfeTIEfXq1UuDBw/WwIEDVbNmTZUqVUoDBw7UgQMHbJK4n376Sf/3f/+nV1555Zpxfv/994qLi9Pzzz+fryewAwYM0OLFi9WtWzc999xz2rVrl6ZMmaJDhw7ZnE8TJkzQxIkTFRYWpiFDhujIkSOaO3eufvrpJ5t9++CDDzR48GA1b95cI0aM0LFjx/TQQw/Jx8dHQUFBeYop6/eUnp6uyMhIzZ8/X5cvX9b//ve/G96Xv//+W5LlxlZISIhef/11nTt3Tm+//ba+//577d27V+XKlVO3bt00dOhQLV26VHfeeafNdpYuXapWrVrpjjvuyPNxliw3BEqVKqWIiAiVKlVKW7Zs0bhx45SQkKBp06Zdc7nJkyfr5ZdfVsuWLTV06FDrebVr1y7t2rUrW42Ugiro9SI9PV0vv/xygbebn+VnzpxpTdoOHTqkyZMn66WXXrI+5S5VqlS+92fRokV66qmnVLduXY0ZM0be3t7au3ev1q9fr8cee0wvv/yyBgwYIMly42TkyJE2194r5fX7JEn33nuvBg0apMzMTB04cEAzZ87UqVOnrDfLDMPQQw89pK1bt6p///5q1KiRNmzYoBdeeEF//fWX3nrrrWsep2tdl3NT0O9dbv7++28dO3ZML730krp06aLnnntOu3fv1rRp03TgwAGtW7fOevMkr9cYSbpw4YI6dOig7t27q1evXlq5cqWGDBkiV1dXPfXUUznGEh8fr/bt28vFxUVfffWV9VxJSEjQggUL1KtXLw0cOFCJiYn64IMPFB4erh9//FGNGjWSJL3yyiv68ssv1b9/f+3fv1+lS5fWhg0b9P777+vVV1+95o1bwKE
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA/8AAAIjCAYAAABViau2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB/JklEQVR4nOzdeXwN9/7H8ffJnpAFkUUFse9bqIYWJcRSreqCqq1aS2lLuqguti5aWqWlXF3o75ZrK26LUnurQtuQ2tUSVSWILUT2zO+P05zrSJDESU4cr+fjMQ/nzHxn5jPHzOF9ZuY7JsMwDAEAAAAAAIflZO8CAAAAAABA4SL8AwAAAADg4Aj/AAAAAAA4OMI/AAAAAAAOjvAPAAAAAICDI/wDAAAAAODgCP8AAAAAADg4wj8AAAAAAA6O8A8AAArkwoULOnTokDIyMuxdCuDQsrKylJCQoCNHjti7FAC3McI/AAD/mDNnjkwmk44ePWrvUoql9PR0TZw4UQ0aNJC7u7tKlSqlatWqad26dfYu7bawe/duLVu2zPI+NjZWK1assF9B0ObNm7Vx40bL+40bN+rnn3+2X0FXiY+P1/Dhw1WxYkW5ubmpbNmyql27thITE+1dGoDbFOEfQLGSHb6yBw8PD1WvXl3Dhg3TqVOn7F0eUCiu3e+vHbZu3WrvEpWamqqIiAi9+eabat26tRYtWqQ1a9Zo/fr1Cg8Pt3d5t4VLly5p0KBB2rp1qw4ePKgXXnhBu3btsndZd7S//vpLzz77rHbt2qVdu3bp2Wef1V9//WXvsnTo0CE1bdpU8+fP16BBg7R8+XKtWbNG69atU4kSJexdHoDblIu9CwCA3IwfP16hoaFKSUnR5s2bNWPGDK1cuVK7d++Wl5eXvcsDCkX2fn+tqlWr2qEaa++//762bdum1atXq3Xr1vYu57YUHh5uGSSpevXqeuaZZ+xc1Z2tW7dumjJliurXry/J/HfUrVs3O1clDRo0SG5ubtq6davuuusue5cDwEEQ/gEUSx07dlSTJk0kSU8//bTKlCmjyZMn67///a969uxp5+qAvLly5Uq+fqy6er8vTjIyMjRlyhS9+OKLBP9btGzZMu3du1fJycmqV6+e3Nzc7F3SHc3d3V1btmzR7t27JUl169aVs7OzXWuKiYnR+vXr9cMPPxD8AdgUl/0DuC20adNGkhQXFydJOnfunF566SXVq1dPJUuWlI+Pjzp27Kjff/89x7wpKSkaO3asqlevLg8PDwUHB6tbt246fPiwJOno0aM3vOT66rCzceNGmUwmLViwQK+99pqCgoJUokQJPfjgg7leKrpt2zZ16NBBvr6+8vLyUqtWra57P2nr1q1zXf/YsWNztP36668VFhYmT09PlS5dWj169Mh1/TfatqtlZWVpypQpqlOnjjw8PBQYGKhBgwbp/PnzVu0qVaqkBx54IMd6hg0blmOZudU+adKkHJ+pZL6kfMyYMapatarc3d0VEhKiV155Rampqbl+Vtfatm2bOnXqpFKlSqlEiRKqX7++pk6datVm/fr1uu+++1SiRAn5+fnpoYce0r59+/K0/E8//VR16tSRu7u7ypUrp6FDh+rChQtWbVq3bq26desqJiZGLVu2lJeXl1577bU8Lf9WVapUyfL36uTkpKCgIHXv3l3Hjh3L0/w3274DBw7o/Pnz8vb2VqtWreTl5SVfX1898MADltAkSRs2bJDJZNLSpUtzrGPevHkymUyKjo621NyvXz+rNtnH19X3YP/000967LHHVKFCBcu+MWLECCUnJ1vNO3bs2Bz74Ny5c9WwYUN5eHioTJky6tmzZ47PpF+/fipZsqTVuMWLF+eoQ5JKliyZo2Ypb8dj69atLft97dq1FRYWpt9//z3X4zE3V8+f7ddff83T/Nf7brne90Fev19udNz169fvpuu8um+NvB5jV8/v7++vzp07W+2DkvnHqrfeektVqlSRu7u7KlWqpNdeey3H90n2Pujs7KwGDRqoQYMGWrJkiUwmkypVqnTDzzR7/psdd9nfwR988MF1l3Ptvrt161Z5eHjo8OHDls8kKChIgwYN0rlz53LMv2jRIsvfl7+/v5588kn9/fffVm2y9/MjR44oMjJSJUqUULly5TR+/HgZhpGj3jlz5ljGXbp0SWFhYQoNDdXJkyct4z/44AM1b95cZcqUkaenp8LCwrR48WKr9c6ePVsmk0lffvml1fh3331XJpNJK1euvO7nAsD2OPMP4LaQHdTLlCkjSTpy5IiWLVumxx57TKGhoTp16pT+9a9/qVWrVtq7d6/KlSsnScrMzNQDDzygdevWqUePHnrhhRd06dIlrVmzRrt371aVKlUs6+jZs6c6depktd5Ro0blWs8777wjk8mkkSNH6vTp05oyZYoiIiIUGxsrT09PSeaw2bFjR4WFhWnMmDFycnLS7Nmz1aZNG/3000+6++67cyy3fPnymjBhgiTp8uXLGjJkSK7rfvPNN/X444/r6aef1pkzZ/TJJ5+oZcuW2rFjh/z8/HLMM3DgQN13332SpCVLluQIZ4MGDdKcOXPUv39/Pf/884qLi9O0adO0Y8cO/fzzz3J1dc31c8iPCxcuWLbtallZWXrwwQe1efNmDRw4ULVq1dKuXbv00Ucf6Y8//rDqIC03a9as0QMPPKDg4GC98MILCgoK0r59+7R8+XK98MILkqS1a9eqY8eOqly5ssaOHavk5GR98sknatGihbZv337D/+iPHTtW48aNU0REhIYMGaIDBw5oxowZ+vXXX3N8NmfPnlXHjh3Vo0cPPfnkkwoMDMzXZ3Tx4kUlJCRYjTOZTJb9/kbuu+8+DRw4UFlZWdq9e7emTJmiEydO6KeffrrhfHnZvrNnz0oyHw/VqlXTuHHjlJKSounTp6tFixb69ddfVb16dbVu3VohISGaO3euHn74Yav1zJ07V1WqVMl3/wCLFi3SlStXNGTIEJUpU0a//PKLPvnkEx0/flyLFi267nzz5s3Tk08+qQYNGmjChAk6e/asPv74Y23evFk7duyQv79/vuq4noIcj9lGjhx5S+vO6/yvv/66nn76aUlSQkKCRowYYfWdcLW8bs/NjrtBgwYpIiLCstzevXvr4YcftrqkvmzZspLyd4zVrFlTr7/+ugzD0OHDhzV58mR16tTJKnA//fTT+uqrr/Too4/qxRdf1LZt2zRhwgTt27cv1x+msmVkZOj111/P02earaDH3Y2cPXtWKSkpGjJkiNq0aaPBgwfr8OHDmj59urZt26Zt27bJ3d1dkizf202bNtWECRN06tQpTZ06VT///HOO/S8zM1MdOnTQPffco4kTJ2rVqlUaM2aMMjIyNH78+FxrSU9P1yOPPKJjx47p559/VnBwsGXa1KlT9eCDD6pXr15KS0vT/Pnz9dhjj2n58uXq3LmzJKl///5asmSJoqKi1K5dO4WEhGjXrl0aN26cBgwYkOPfXACFzACAYmT27NmGJGPt2rXGmTNnjL/++suYP3++UaZMGcPT09M4fvy4YRiGkZKSYmRmZlrNGxcXZ7i7uxvjx4+3jPvyyy8NScbkyZNzrCsrK8synyRj0qRJOdrUqVPHaNWqleX9hg0bDEnGXXfdZSQmJlrGL1y40JBkTJ061bLsatWqGZGRkZb1GIZhXLlyxQgNDTXatWuXY13Nmzc36tata3l/5swZQ5IxZswYy7ijR48azs7OxjvvvGM1765duwwXF5cc4w8ePGhIMr766ivLuDFjxhhXf/3/9NNPhiRj7ty5VvOuWrUqx/iKFSsanTt3zlH70KFDjWv/Sbm29ldeecUICAgwwsLCrD7Tf//734aTk5Px008/Wc0/c+ZMQ5Lx888/51hftoyMDCM0NNSoWLGicf78eatpV3/uDRs2NAICAoyzZ89axv3++++Gk5OT0adPH8u47P0vLi7OMAzDOH36tOHm5ma0b9/ean+bNm2aIcn48ssvLeNatWplSDJmzpx53XqvJ3u9uQ3u7u43nb9ixYpG3759rcY98cQThpeX1w3ny+v2Ze/3/v7+RkJCgqXdH3/8Ybi
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA/8AAAIjCAYAAABViau2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACC70lEQVR4nOzde3yP9f/H8edn580OmrEDw5zPZKSlRMYcUkrJoXIWTWIV6VtO/UqRooh04hu+SUWFnCZUDtWQQ0gZU2wM22x23vX749M++dicttlnPh732+267fO5rvd1Xa/rs+vz2Z6f67rel8kwDEMAAAAAAMBuOdi6AAAAAAAAcH0R/gEAAAAAsHOEfwAAAAAA7BzhHwAAAAAAO0f4BwAAAADAzhH+AQAAAACwc4R/AAAAAADsHOEfAAAAAAA752TrAgAAwI0rKytLZ86cUV5enoKCgmxdDmDX0tLSdObMGXl6euqWW26xdTkAbjAc+QcAQNL8+fNlMpl05MgRW5dS5v3yyy/q06eP/Pz85OrqqsDAQPXo0cPWZd0wZs2apaSkJMvzGTNmKC0tzXYFQa+++qry8vIkSXl5eZoyZYqNK/rX0qVL1b59e3l5ecnT01NVq1bV1KlTbV0WgBsQ4R9AmZEfvvIHNzc31alTRyNGjFBCQoKtywOuq9jYWI0YMUJ16tSRh4eHPDw81KBBA0VGRmr37t22Ls/iq6++0p133qnffvtNr7zyitatW6d169bpvffes3VpN4xvvvlGEydO1LFjx7Ro0SK99NJLcnd3t3VZN7UFCxbojTfe0F9//aXp06drwYIFti5JkvT888+rZ8+e8vLy0vvvv69169Zp/fr1evLJJ21dGoAbEKf9AyhzJk+erJCQEGVkZOiHH37QnDlztGrVKu3du1ceHh62Lg8ocStWrNAjjzwiJycn9e3bV02bNpWDg4MOHDigL7/8UnPmzFFsbKyqVatm0zrPnDmjwYMHKyIiQkuXLpWLi4tN67lRvfDCC7rvvvs0c+ZMOTg4aPr06XJw4HiMLU2ePFmPP/64xo4dK1dXVy1cuNDWJWnTpk16/fXXNWXKFD3//PO2LgeAHSD8AyhzOnfurBYtWkiSBg8erAoVKujNN9/UV199pd69e9u4OuDqnD9//qq+rPrzzz/Vq1cvVatWTdHR0QoMDLSa/vrrr+vdd98tE+Hw448/VkZGhubPn0/wL4a7775bR48e1f79+xUcHKwqVarYuqSb3iOPPKJ27drpjz/+UO3atVWxYkVbl6Q33nhDd9xxB8EfQImx/X8SAHAF99xzjyTzadGS+ejjs88+q8aNG8vT01Pe3t7q3Lmzfv311wLzZmRkaOLEiapTp47c3NwUGBioBx98UH/++ack6ciRI1aXGlw8tG3b1rKsjRs3ymQyacmSJXrhhRcUEBCgcuXK6b777tOxY8cKrHv79u3q1KmTfHx85OHhobvvvls//vhjodvYtm3bQtc/ceLEAm0XLlyo0NBQubu7y9fXV7169Sp0/Zfbtgvl5eVpxowZatiwodzc3OTv768nnnhCZ8+etWpXvXp13XvvvQXWM2LEiALLLKz2adOmFXhNJSkzM1MTJkxQrVq15OrqquDgYI0ZM0aZmZmFvlYX2759u7p06aJbbrlF5cqVU5MmTTRz5kyrNhs2bNBdd92lcuXKqXz58rr//vu1f//+q1r+u+++q4YNG8rV1VVBQUGKjIy0ul5bMv/+GjVqpJiYGLVp00YeHh564YUXrmr5U6dOVVpamj7++OMCwV+SnJycNHLkSAUHB192ORdfNuPh4aHGjRvrgw8+uKo6Dh8+rIcffli+vr7y8PDQ7bffrpUrV1q12bZtm5o1a6ZXX31VwcHBcnV1Ve3atfXaa69ZrpeWzOG2adOmha6nbt26ioiIsKr54n4W2rZta7WfZGVlafz48QoNDZWPj4/KlSunu+66S999912B5V+878XHx+vxxx9XxYoV5erqqkaNGun999+3mif/vfLGG29YjW/UqFGB/fWNN94otOa///5bAwcOlL+/v1xdXdWwYUN99NFHVm3yP0M2btyo8uXLKywsTFWqVFHXrl0v+X6/1PwXupr58+e93HDh/FezPdLlP2Ov9PlqMpnUv39/y7KuZh+8eDtcXV1Vp04dTZkyRYZhWLXduXOnOnfuLG9vb3l6eqp9+/batm2bVZsL98FKlSrpjjvuUIUKFdSkSROZTCbNnz//sr+Tq33f9e/fX56enpdd1sW/g23btqlRo0bq1auXfH195e7urpYtW2r58uUF5j158qQGDRokf39/ubm5qWnTpgUuXbhwP3/rrbdUrVo1ubu76+6779bevXsL1Fu9enWrcQsXLpSDg4Nee+01y7jdu3erf//+qlGjhtzc3BQQEKCBAwfq9OnTljbp6emqV6+e6tWrp/T0dMv4M2fOKDAwUHfccYdyc3Mv+9oAKBkc+QdQ5uUH9QoVKkgy/4O4fPlyPfzwwwoJCVFCQoLee+893X333frtt98sPY7n5ubq3nvvVXR0tHr16qWnn35a586d07p167R3717VrFnTso7evXurS5cuVusdN25cofW88sorMplMGjt2rE6ePKkZM2YoPDxcu3btsly3u2HDBnXu3FmhoaGaMGGCHBwc9PHHH+uee+7R999/r9tuu63AcqtUqWLpZCo1NVXDhw8vdN0vvfSSevbsqcGDB+vUqVN655131KZNG+3cuVPly5cvMM/QoUN11113SZK+/PJLLVu2zGr6E088ofnz52vAgAEaOXKkYmNjNWvWLO3cuVM//vijnJ2dC30drkVSUlKhHWjl5eXpvvvu0w8//KChQ4eqfv362rNnj9566y39/vvvhf6Te6F169bp3nvvVWBgoJ5++mkFBARo//79WrFihZ5++mlJ0vr169W5c2fVqFFDEydOVHp6ut555x21bt1aO3bsKPAP7oUmTpyoSZMmKTw8XMOHD9fBgwc1Z84c/fzzzwVem9OnT6tz587q1auXHn30Ufn7+1/Va7NixQrVqlVLrVq1uqr2V/LWW2/Jz89PKSkp+uijjzRkyBBVr15d4eHhl5wnISFBd9xxh86fP6+RI0eqQoUKWrBgge677z59/vnneuCBByzb+MMPP+iHH37QwIEDFRoaqujoaI0bN05HjhzR3LlzJUmPPfaYhgwZor1796pRo0aW9fz888/6/fff9eKLL17TNqWkpOiDDz5Q7969NWTIEJ07d04ffvihIiIi9NNPP6lZs2aFzpeVlaXw8HAdOHBAw4cPV926dbV8+XINHTpUp0+fLrEjqgkJCbr99ttlMpk0YsQIVaxYUd9++60GDRqklJQUjRo16pLzbt68WatWrSryuq92/vr16+uTTz6xPJ83b57279+vt956yzKuSZMm17Q9V/qMDQ8Pt1pn/ufPhePyP4evdh/M98ILL6h+/fpKT0+3fCFbqVIlDRo0SJK0b98+3XXXXfL29taYMWPk7Oys9957T23bttWmTZsu+3775JNPtGfPniu+phcqyvvuSk6fPq158+bJ09NTI0eOVMWKFbVw4UI9+OCDWrRokeVMuPT0dLVt21Z//PGHRowYoZCQEC1dulT9+/dXUlKS5bMw33//+1+dO3dOkZGRysjI0MyZM3XPPfdoz549l/zcWrt2rQYOHKgRI0ZYvW/WrVunw4cPa8CAAQoICNC+ffs0b9487du3T9u2bZPJZJK7u7sWLFig1q1b6z//+Y/efPNNSVJkZKSSk5M1f/58OTo6Fvl1AnANDAAoIz7++GNDkrF+/Xrj1KlTxrFjx4xPP/3UqFChguHu7m789ddfhmEYRkZGhpGbm2s1b2xsrOHq6mpMnjzZMu6jjz4yJBlvvvlmgXXl5eVZ5pNkTJs2rUCbhg0bGnfffbfl+XfffWdIMipXrmykpKRYxn/22WeGJGPmzJmWZdeuXduIiIiwrMcwDOP8+fNGSEiI0aFDhwLruuOOO4xGjRpZnp86dcqQZEyYMMEy7siRI4ajo6PxyiuvWM27Z88ew8nJqcD4Q4cOGZKMBQsWWMZNmDD
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA/8AAAIjCAYAAABViau2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB/K0lEQVR4nOzdeXwN9/7H8ffJvsiCJBIEse9blKZatA2xlKpuVFtUUaUtaVG/26Lt7dVqayvldtWFli50oZTYqqIIqV0t0VBCYktEZJ3fH6c515EgiSQnTl7Px2MeOWfmOzOfOZkT3rN8x2QYhiEAAAAAAGC3HGxdAAAAAAAAKFmEfwAAAAAA7BzhHwAAAAAAO0f4BwAAAADAzhH+AQAAAACwc4R/AAAAAADsHOEfAAAAAAA7R/gHAAAAAMDOEf4BAECRpaSk6MiRI0pNTbV1KYBdMwxDZ86c0YEDB2xdCoCbFOEfAABJ8+bNk8lk0pEjR2xdSplmGIbef/993XrrrfLw8JC3t7dCQkL0xRdf2Lq0m8KxY8c0b948y/sjR45o/vz5tisI2rVrl5YsWWJ5Hxsbq6VLl9quoMukpKTopZdeUoMGDeTi4qLKlSurfv362r9/v61LA3ATIvwDKDNyw1fu4Obmpvr162vkyJE6efKkrcsDSkTufr9169Z8p3fq1ElNmzYt5aqu7pFHHtFTTz2lRo0a6fPPP9fKlSu1atUq9enTx9al3RRMJpNGjBihFStW6MiRIxo7dqx+/fVXW5dVrqWkpGjYsGHatGmTDhw4oOeee047d+60dVk6ffq0wsLCNHPmTD3wwAP6/vvvtXLlSq1du1a1atWydXkAbkJOti4AAK706quvKiQkRJcuXdKGDRs0Z84cLVu2TLt27ZKHh4etywPKrc8++0wLFy7UF198oUceecTW5dyUqlWrpiFDhqhr166SpKCgIK1du9a2RZVzYWFhlkGS6tevryFDhti4KmnMmDE6ceKEoqOj1aRJE1uXA8AOEP4BlDndunVTmzZtJElPPvmkKleurKlTp+r7779Xv379bFwdUDAXL160u4NVb731lvr160fwv0HTp0/XM888o6SkJDVt2lSenp62LqncW7Jkifbs2aO0tDQ1a9ZMLi4uNq3n1KlT+vTTTzV37lyCP4Biw2X/AMq8u+66S5IUFxcnSTpz5oxeeOEFNWvWTBUqVJC3t7e6deumP/74I8+8ly5d0qRJk1S/fn25ubkpKChIffr00aFDhySZ77e9/FaDK4dOnTpZlrV27VqZTCYtXLhQ//d//6fAwEB5enqqV69eOnr0aJ51//777+ratat8fHzk4eGhjh076rfffst3Gzt16pTv+idNmpSn7RdffKHQ0FC5u7urUqVK6tu3b77rv9a2XS4nJ0fTp09XkyZN5ObmpipVqmjYsGE6e/asVbtatWrpnnvuybOekSNH5llmfrW/9dZbeT5TSUpPT9fEiRNVt25dubq6Kjg4WGPHjlV6enq+n9WVfv/9d3Xv3l0VK1aUp6enmjdvrhkzZli1Wb16te644w55enrK19dX9957r/bu3Vug5b/33ntq0qSJXF1dVbVqVY0YMULnzp2zapN7aX5MTIw6dOggDw8P/d///V+Bll9crtyH/Pz81KNHD+3atatA83/99deW/crPz0+PPvqo/v77b8v01NRU7dq1S8HBwerRo4e8vb3l6empTp06WV22fvjwYZlMJk2bNi3POjZu3CiTyaQvv/zSUvOV+0Pufnv5ffE7duzQwIEDVbt2bbm5uSkwMFBPPPGETp8+bTVvfv02rFixQrfddps8PDzk4+Oje+65J89nMmnSJJlMJiUlJVnGbd26NU8dktS0adM8NUvSzz//bNnHvLy81KNHD+3evduqzcCBAy2Xa9epU0ft2rXTmTNn5O7uXqD+Ji6fP9fRo0cLNP/AgQOv+bfuyvkLsj2StG/fPj300EPy9/eXu7u7GjRooH/961+S/ve5Xmu4/KqH6+2D+W1HxYoV8+yDuQr63c39fTZu3FihoaH6448/8v1bmZ+Cfu9MJpNGjhx51eVcue9u2bJFOTk5ysjIUJs2beTm5qbKlSurX79+io+PzzN/Qf7G5f4+cn9n3t7eqly5sp577jldunQpT72X/w3PyspS9+7dValSJe3Zs8cy/pNPPtFdd92lgIAAubq6qnHjxpozZ06e2hwcHDRhwgSr8QsWLJDJZMrTHkDJ4cw/gDIvN6hXrlxZkjlcLFmyRA8++KBCQkJ08uRJ/fe//1XHjh21Z88eVa1aVZKUnZ2te+65R1FRUerbt6+ee+45paSkaOXKldq1a5fq1KljWUe/fv3UvXt3q/WOHz8+33pef/11mUwmjRs3TqdOndL06dMVHh6u2NhYubu7SzL/Z6dbt24KDQ3VxIkT5eDgYPlP0q+//qq2bdvmWW716tU1efJkSdKFCxc0fPjwfNf98ssv66GHHtKTTz6pxMREvfvuu+rQoYO2b98uX1/fPPMMHTpUd9xxhyTpu+++0+LFi62mDxs2TPPmzdOgQYP07LPPKi4uTrNmzdL27dv122+/ydnZOd/PoTDOnTtn2bbL5eTkqFevXtqwYYOGDh2qRo0aaefOnZo2bZr+/PNPq0648rNy5Urdc889CgoK0nPPPafAwEDt3btXP/30k5577jlJ0qpVq9StWzfVrl1bkyZNUlpamt599121b99e27Ztu+a9s5MmTdIrr7yi8PBwDR8+XPv379ecOXO0ZcuWPJ/N6dOn1a1bN/Xt21ePPvqoqlSpUqjP6Pz581bhM1dmZmaBl9GwYUP961//kmEYOnTokKZOnaru3bvnGxYul/v7v+WWWzR58mSdPHlSM2bM0G+//WbZr3KD9ptvvqnAwECNGTNGbm5u+uCDDxQeHq6VK1eqQ4cOql27ttq3b6/58+dr9OjRVuuZP3++vLy8dO+99xZ4myTz7/nw4cMaNGiQAgMDtXv3br3//vvavXu3Nm3adNWQ9uuvv6p79+6qWbOmJk6cqMzMTL333ntq3769tmzZovr16xeqjqv5/PPPNWDAAEVEROjNN9/UxYsXNWfOHN1+++3avn37NfexCRMm5AlehVHQ+YcNG6bw8HDL+8cee0z33XefVV8N/v7+hdqeHTt26I477pCzs7OGDh2qWrVq6dChQ/rxxx/1+uuvq0+fPqpbt65l+aNHj1ajRo00dOhQy7hGjRpJKtg+mMvPz89ycOnYsWOaMWOGunfvrqNHj1raFea7e6Vx48Zd9/O8XFG/d9eS+30bOXKkQkND9cYbbygxMVEzZ87Uhg0btH37dvn5+Ukq/N+4hx56SLVq1dLkyZO1adMmzZw5U2fPntVnn3121XqefPJJrV27VitXrlTjxo0t4+fMmaMmTZqoV69ecnJy0o8//qinn35aOTk5GjFihCTzAfynn35akydPVu/evdW6dWudOHFCzzzzjMLDw/XUU08V+XMCUEgGAJQRn3zyiSHJWLVqlZGYmGgcPXrU+Oqrr4zKlSsb7u7uxrFjxwzDMIxLly4Z2dnZVvPGxcUZrq6uxquvvmoZ9/HHHxuSjKlTp+ZZV05OjmU+ScZbb72Vp02TJk2Mjh07Wt6vWbPGkGRUq1bNSE5OtoxftGiRIcmYMWOGZdn16tUzIiIiLOsxDMO4ePGiERISYnTu3DnPum677TajadOmlveJiYmGJGPixImWcUeOHDEcHR2N119/3WrenTt3Gk5OTnnGHzhwwJBkfPrpp5ZxEydONC7/0//rr78akoz58+dbzbt8+fI842vWrGn06NEjT+0jRowwrvzn5Mrax44dawQEBBihoaFWn+nnn39uODg4GL/++qvV/HPnzjUkGb/99lue9eXKysoyQkJCjJo1axpnz561mnb5596yZUsjICDAOH36tGXcH3/8YTg4OBiPP/64ZVzu/hcXF2cYhmGcOnXKcHFxMbp06WK1v82aNcuQZHz88ceWcR07djQkGXPnzr1qvVeTu95rDU2aNLnucjp27Gj12RqGYfzf//2fIck4derUVefLyMgwAgICjKZNmxp
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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xcTEaM+ePbrpppvM63j00UfVvXt3i/WOHTu22HreeOMNmUwmvfjiizpx4oSmT5+u8PBwJSQkmK/rXb9+vbp166bQ0FCNHz9eDg4O+uyzz3Tvvffqxx9/VLt27Yr0W7duXfMgVOfPn9eIESOKXferr76qPn36aOjQoTp58qQ++OADdezYUTt37pSPj0+RZYYPH64777xTkrRs2TItX77cYv6TTz6pefPmadCgQXr22WeVmJiomTNnaufOnfrpp5/k7Oxc7PtQGmfPni12gK38/Hzdf//92rRpk4YPH66QkBDt3r1b06ZN06+//lrs/wRfKiYmRj169FBgYKCee+45BQQEaP/+/fr222/13HPPSZLWrVunbt266cYbb9SECRN08eJFffDBB+rQoYN27NhR5H+ALzVhwgRNnDhR4eHhGjFihA4ePKjZs2dr+/btRd6bU6dOqVu3burbt6+eeOIJ+fv7l+m9+jvTpk2Tr6+v0tPT9emnn2rYsGFq0KCBwsPDr7hMSkqKbr/9dl24cEHPPvusatWqpfnz5+v+++/X0qVL9eCDD5q3YdOmTdq0aZMGDx6s0NBQxcbGauzYsTp8+LDmzJkjSerXr5+GDRumPXv2qHnz5ub1bN++Xb/++qteeeWVUm1Tenq6Pv74Yz366KMaNmyYzp07p08++UQRERHatm2bWrduXexy2dnZCg8P14EDBzRixAg1btxYK1as0PDhw3Xq1CmrHVFNSUnRbbfdJpPJpJEjR6p27dr67rvvNGTIEKWnp2vUqFFXXPaHH37QqlWryrzuki4fEhKif//73+bXc+fO1f79+zVt2jTztJYtW5Zqe/7ud2h4eLjFOgt/v1w6rfD3bEn3wUIvv/yyQkJCdPHiRfMXrn5+fhoyZIgkae/evbrzzjvl5eWlMWPGyNnZWf/617909913a+PGjWrfvv0V36t///vf2r1799++p5cqy+fu75w6dUpz586Vp6ennn32WdWuXVsLFixQr169tHDhQvOZbhcvXtTdd9+t33//XSNHjlRwcLCWLFmigQMH6uzZs+bfdYX+7//+T+fOnVNUVJQyMzM1Y8YM3Xvvvdq9e/cVfy+tXbtWgwcP1siRIy0+NzExMTp06JAGDRqkgIAA7d27V3PnztXevXu1ZcsWmUwmubu7a/78+erQoYP++c9/6r333pMkRUVFKS0tTfPmzZOjo2OZ3ycA18AAgErqs88+MyQZ69atM06ePGkcOXLE+Pzzz41atWoZ7u7uxtGjRw3DMIzMzEwjLy/PYtnExETD1dXVmDRpknnap59+akgy3nvvvSLrys/PNy8nyXjnnXeKtGnWrJlx1113mV9///33hiTjhhtuMNLT083Tv/jiC0OSMWPGDHPfjRo1MiIiIszrMQzDuHDhghEcHGx07ty5yLpuv/12o3nz5ubXJ0+eNCQZ48ePN087fPiw4ejoaLzxxhsWy+7evdtwcnIqMv23334zJBnz5883Txs/frxx6Z+CH3/80ZBkLFy40GLZ1atXF5lev359IzIyskjtUVFRxuV/Xi6vfcyYMYafn58RGhpq8Z7++9//NhwcHIwff/zRYvk5c+YYkoyffvqpyPoK5ebmGsHBwUb9+vWNM2fOWMy79H1v3bq14efnZ5w6dco87ZdffjEcHByM/v37m6c
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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Rg3dfPPN+v777636mz59uhwcHBQVFWU1fdy4cXJxcSn033sApceRfwCVhjmo161bV5J05MgRrVmzRvfcc4+CgoJ08uRJ/d///Z9uvfVW7d+/XwEBAZKk3Nxc3XHHHYqKitJ9992nJ554QmfPnlVkZKT27t2rZs2aWdYxdOhQ9e3b12q9U6dOLbSel19+WSaTSU8//bSSkpI0b948hYaGKjY2Vu7u7pKkzZs3q0+fPgoODrb8J8YcOH/88Uddf/31Bfpt2LChZs+eLUk6d+6cHnnkkULX/cILL+jee+/VmDFjdOrUKb3zzju65ZZbtGvXLtWqVavAMuPGjdPNN98sSfryyy+1evVqq/njx4/XkiVLNGrUKD3++OOKj4/XggULtGvXLv38889ydnYu9HUoiZSUFMu2XSwvL0933nmnfvrpJ40bN05t2rTRnj179NZbb+k///mP1qxZU2S/kZGRuuOOO+Tv768nnnhCfn5+OnDggNauXasnnnjissu99957ateune688045OTnpm2++0aOPPqq8vDyFh4dbtY2Li9PQoUM1fvx4jR07ttCwfsstt+jxxx/X22+/rWeffdZyFLBNmzZ68MEH9cknn2jjxo1WX54kJiZq8+bNmj59epHbWFwXjwMgSc7OzsU6+nf33Xdr4MCBysnJUXR0tBYvXqz09HT961//KnK5MWPGaOnSpRo8eLCefPJJ7dixQ7Nnz9aBAwcs+9g///wjKf8LouDgYL366qs6deqU3n77bf3000/atWuX6tWrp8GDBys8PFzLly/Xtddea7We5cuXq3v37mrQoEFJXg4tWbJENWvWVEREhGrWrKnNmzdr2rRpSktL0+uvv37Z5V555RU999xzuuWWWxQeHm55P+zYsUM7duwoszM+Svu+y8nJ0XPPPVfq9ZZk+Xnz5llC24EDB/TKK69Y7d81a9Ys8fYsWbJEDz30kNq1a6epU6eqVq1a2rVrlzZs2KBhw4bpueee05gxYyTl79OTJk2y+gy7WHH2QbObb75Z48aNU15envbu3at58+bpxIkT+vHHHyXln9Vz55136vvvv9fo0aPVqVMnbdy4UZMnT9bff/+tt95667Kv0+U+34pS2vddUf755x8dOXJEzz77rAYOHKgnn3xSv/32m15//XXt3btX69ats3x5MmPGDL344osKDQ3VI488ori4OL333nv69ddfC+x/Z86cUd++fXXvvfdq6NChWrlypR555BG5uLjooYceKrSW1NRU9enTR87Ozlq/fr1lX0lLS9MHH3ygoUOHauzYsTp79qw+/PBDhYWF6ZdfflGnTp0kSc8//7y++eYbjR49Wnv27JGnp6c2btyo999/X7NmzaoUlzQBdsUAgAr28ccfG5KMTZs2GadOnTKOHz9urFixwqhbt67h7u5u/PXXX4ZhGEZGRoaRm5trtWx8fLzh6upqzJw50zLto48+MiQZc+fOLbCuvLw8y3KSjNdff71Am3bt2hm33nqr5fn3339vSDIaNGhgpKWlWaavXLnSkGTMnz/f0neLFi2MsLAwy3oMwzAuXLhgBAUFGT179iywrm7duhnXXHON5fmpU6cMScb06dMt044ePWo4OjoaL7/8stWye/bsMZycnApMP3TokCHJWLp0qWXa9OnTjYs/4n/88UdDkrF
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA/8AAAIjCAYAAABViau2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACA/klEQVR4nOzdeXxM9/7H8fdkmySyiZBEBbHvVCxNFVUhVKlu6Gap0hY/RW8XXSzVlupGS6kuuEUXbWmLUrsqSoPaXSWKkpCShJB1zu+PaYaRCIkkE5PX8/E4DzPnfM85nzM5GXmf5XtMhmEYAgAAAAAATsvF0QUAAAAAAICiRfgHAAAAAMDJEf4BAAAAAHByhH8AAAAAAJwc4R8AAAAAACdH+AcAAAAAwMkR/gEAAAAAcHKEfwAAAAAAnJybowsAAAClR3p6uk6fPi2LxaKKFSs6uhzAqaWkpOj06dPy8fFR2bJlHV0OAAfjzD8A4IYyZswYmUymQl9u1apV1bdv30JfLqTff/9dDz30kIKCgmQ2mxUaGqr77rvP0WXdMKZMmaLExETb+0mTJiklJcVxBUFvvPGGLBaLJMlisWj8+PEOruii+fPnq3379vL19ZWPj48qV66siRMnOrosACUA4R9AkZk1a5ZMJpNt8PT0VK1atTRkyBDFx8c7ujwgT3v27NGYMWN0+PDhIl3P+vXr1blzZ910003y9PRU5cqV1bVrV82bN8+unclk0pAhQ+zGTZs2TQ888IAqV64sk8lUIg9efP/997rtttu0Z88evf7661q+fLmWL1+ujz76yNGl3TB+/PFHjRkzRkePHtXcuXP1yiuvyMvLy9FllWqzZ8/W22+/rWPHjumdd97R7NmzHV2SJOmFF15Qjx495Ovrq48//ljLly/XihUrNGjQIEeXBqAE4LJ/AEXu1VdfVXh4uFJTU7V+/XpNmzZNS5Ys0a5du+Tt7e3o8gBJ0v79++XicvGY+J49ezR27Fjdfvvtqlq1apGsc/78+erZs6eaNGmip59+WmXLllVsbKzWrVunjz/+WA899FCe87/55ps6e/asWrRooRMnThRJjdfj9OnTevzxxxUdHa358+fLw8PD0SXdkF588UV169ZNkydPlouLi9555x27fRXF79VXX1Xv3r31/PPPy2w2a86cOY4uSWvXrtWbb76p8ePH64UXXnB0OQBKIMI/gCLXuXNnNWvWTJL0+OOPq1y5cnr33Xf1/fff68EHH3RwdSjNDMNQamqqvLy8ZDabi339Y8aMUb169bRp06YcwfjkyZNXnX/t2rW2s/4+Pj5FVWaBzZw5U6mpqZo1axbB/zq0bdtWf/31l/bu3auwsDBVqlTJ0SWVej179lS7du30559/qmbNmipfvryjS9Lbb7+tW2+9leAP4Io4bAyg2N1xxx2SpNjYWEnWs4P/+c9/1LBhQ/n4+MjPz0+dO3fWH3/8kWPe1NRUjRkzRrVq1ZKnp6dCQ0N177336uDBg5Kkw4cP291qcPlw++2325a1Zs0amUwmffXVV3rxxRcVEhKiMmXKqFu3bjp69GiOdf/222/q1KmT/P395e3trbZt2+rXX3/NdRtvv/32XNc/ZsyYHG3nzJmjiIgIeXl5KTAwUL169cp1/Xlt26UsFosmTZqk+vXry9PTU8HBwXriiSd05swZu3ZVq1bVXXfdlWM9Q4YMybHM3Gp/6623cnymkpSWlqbRo0erRo0aMpvNCgsL03PPPae0tLRcP6vL/fbbb7rzzjtVtmxZlSlTRo0aNdLkyZPznGfmzJm64447VKFCBZnNZtWrV0/Tpk3L0S57m5ctW6ZmzZrJy8vLdvn5pff8z5o1Sw888IAkqV27drbPec2aNerTp4+CgoKUkZGRY/kdO3ZU7dq1r2k7JengwYNq3rx5rsG4QoUKV52/SpUqBe7/4PLbcry9vdWwYUN98skn1zT/oUOH9MADDygwMFDe3t665ZZbtHjxYrs2mzZtUpMmTfTGG28oLCxMZrNZNWvW1IQJE2z3S0vWcNu4ceNc11O7dm1FR0fb1Xz5rRi333673X6Ynp6uUaNGKSIiQv7+/ipTpoxat26t1atX51j+5ft2XFycevfurfLly8tsNqtBgwb6+OOP7ebJ/l18++237cY3aNAgx+/D22+/nWvNf//9tx577DEFBwfLbDarfv36+uyzz+zaZH9HrVmzRgEBAYqMjFSlSpXUpUuXK36fXGn+S13L/Nnz5jVcOv+1bI+U93f41b6/L7+15Vr2wcu3w2w2q1atWho/frwMw7Bru23bNnXu3Fl+fn7y8fFR+/bttWnTJrs2l+6DFSpU0K233qpy5cqpUaNGMplMmjVrVp4/k2v9vevbt+9VD+hd/jPYtGmTGjRooF69eikwMFBeXl5q3ry5Fi5cmGPekydPqn///goODpanp6caN26c49aFS/fz9957T1WqVJGXl5fatm2rXbt25aj38iuk5syZIxcXF02YMME2bseOHerbt6+qVasmT09PhYSE6LHHHtM///xja3PhwgXVqVNHderU0YULF2zjT58+rdDQUN16663KysrK87MBkDvO/AModtlBvVy5cpKsf8AtXLhQDzzwgMLDwxUfH6+PPvpIbdu21Z49e2w9gmdlZemuu+7SypUr1atXLz399NM6e/asli9frl27dql69eq2dTz44IO688477dY7cuTIXOt5/fXXZTKZ9Pzzz+vkyZOaNGmSoqKitH37dtt9tatWrVLnzp0VERGh0aNHy8XFxRY4f/nlF7Vo0SLHcitVqmTrBOrcuXN66qmncl33K6+8oh49eujxxx/XqVOn9MEHH6hNmzbatm2bAgICcswzcOBAtW7dWpL03XffacGCBXbTn3jiCc2aNUv9+vXT0KFDFRsbqylTpmjbtm369ddf5e7unuvnkB+JiYm5dnBlsVjUrVs3rV+/XgMHDlTdunW1c+dOvffee/rf//6X6x+hl1q+fLnuuusuhYaG6umnn1ZISIj27t2rRYsW6emnn77ifNOmTVP9+vXVrVs3ubm56ccff9SgQYNksVg0ePBgu7b79+/Xgw8+qCeeeEIDBgzINay3adNGQ4cO1fvvv68XX3xRdevWlSTVrVtXjz76qP773/9q2bJldgdP4uLitGrVKo0ePTrPbbxUlSpVtHLlSh07dsxhZ3Pfe+89BQUFKTk5WZ999pkGDBigqlWrKioq6orzxMfH69Zbb9X58+c1dOhQlStXTrNnz1a3bt30zTff6J577pEk/fPPP1q/fr3Wr1+vxx57TBEREVq5cqVGjhypw4cPa/r06ZKkRx99VAMGDNCuXbvUoEED23q2bNmi//3vf3r55ZfztU3Jycn65JNP9OCDD2rAgAE6e/asPv30U0VHR2vz5s1q0qRJrvOlp6crKipK+/bt01NPPaXatWtr4cKFGjhwoP75559CO6MaHx+vW265xdaPQ/ny5fXTTz+pf//+Sk5O1rBhw64477p167RkyZICr/ta569bt64+//xz2/sZM2Zo7969eu+992zjGjVqlK/tudp3eFRUlN06s7/fLh2X/T1/rftgtuzf4wsXLtgO+FaoUEH9+/eXJO3evVutW7eWn5+fnnvuObm7u+ujjz7S7bffrrVr16ply5ZX/Kw+//xz7dy586qf6aUK8nt3Nf/8849mzJghHx8fDR06VOXLl9ecOXN07733au7cubYr7S5cuKDbb79df/75p4YMGaLw8HDNnz9fffv2VWJiYo7v2v/+9786e/asBg8erNTUVE2ePFl33HGHdu7cqeDg4Fxr+fnnn/XYY49pyJAhdr83y5cv16FDh9SvXz+FhIRo9+7dmjFjhnbv3q1NmzbJZDLJy8tLs2fPVqtWrfTSSy/p3XfflSQNHjxYSUlJmjVrllxdXQv8OQGlmgEARWTmzJmGJGPFihXGqVOnjKNHjxpffvmlUa5cOcPLy8s4duyYYRiGkZqaamRlZdnNGxsba5jNZuPVV1+1jfvss88MSca7776bY10Wi8U2nyTjrbfeytGmfv36Rtu2bW3vV69ebUgybrrpJiM
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA/8AAAIjCAYAAABViau2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACFMUlEQVR4nOzde3zO9f/H8ee1zc62YXbAMOc5s9ByzphDSieHyjlSVKxSOqD6lhLFNyKd6IdvUlEici4ZashZYkJsNofNDnb8/P642pXLZpht11we99vtc9t1fT7vz+fzuq59dvG8Pp/3+2MyDMMQAAAAAACwWw62LgAAAAAAABQvwj8AAAAAAHaO8A8AAAAAgJ0j/AMAAAAAYOcI/wAAAAAA2DnCPwAAAAAAdo7wDwAAAACAnSP8AwAAAABg55xsXQAAALh1ZGRk6OzZs8rJyVGlSpVsXQ5g11JSUnT27Fl5enqqXLlyti4HgI1x5h8AcFOZOHGiTCZTkW+3evXqGjRoUJFvF9Jvv/2mhx56SL6+vnJxcVFgYKDuv/9+W5d105gxY4bOnz9veT5t2jSlpKTYriDozTffVE5OjiQpJydHkyZNsnFF/1q8eLE6deqksmXLytPTU1WrVtXkyZNtXRaAUoDwD6DYzJ07VyaTyTK5urqqTp06GjVqlOLi4mxdHlCgffv2aeLEiTp69Gix7mfTpk3q1q2bKleuLFdXV1WtWlU9e/bUwoULrdqZTCaNGjXK8vz48eN69dVX1bJlS5UrV06+vr7q0KGD1qxZU6z1Xq9vv/1Wbdq00b59+/TGG29o9erVWr16tT788ENbl3bTWLZsmSZOnKjjx49rwYIFeuWVV+Tm5mbrsm5p8+bN05QpU3TixAlNnTpV8+bNs3VJkqQXXnhBvXv3VtmyZfXRRx9p9erVWrNmjZ544glblwagFOCyfwDF7rXXXlNwcLAuXryoTZs2adasWVqxYoX27Nkjd3d3W5cHSJIOHjwoB4d/vxPft2+fXn31VXXo0EHVq1cvln0uXrxYffr0UdOmTfX000+rXLlyiomJ0U8//aSPPvpIDz300BXX/fbbb/X222+rV69eGjhwoLKysvT555+rc+fO+vTTTzV48OBiqfl6nD17Vo8++qgiIiK0ePFiOTs727qkm9KLL76ou+++W9OnT5eDg4OmTp1qdayi5L322msaMGCAnn/+ebm4uGj+/Pm2LkkbN27U22+/rUmTJumFF16wdTkASiHCP4Bi161bN912222SpEcffVQVKlTQu+++q2+//Vb9+vWzcXW4lRmGoYsXL8rNzU0uLi4lvv+JEyeqfv362rJlS55gfPr06QLX7dixo44dOyZfX1/LvBEjRqhp06YaP358qQj/n332mS5evKi5c+cS/G9A+/bt9ddff2n//v0KCgpSlSpVbF3SLa9Pnz7q2LGj/vzzT9WuXVsVK1a0dUmaMmWK7rjjDoI/gCvia2MAJe7OO++UJMXExEgynx189tln1ahRI3l6esrLy0vdunXT77//nmfdixcvauLEiapTp45cXV0VGBio++67T4cPH5YkHT161KqrweVThw4dLNvasGGDTCaTFi1apBdffFEBAQHy8PDQ3XffrePHj+fZ99atW9W1a1d5e3vL3d1d7du31y+//JLva+zQoUO++584cWKetvPnz1doaKjc3NxUvnx59e3bN9/9F/TaLpWTk6Np06apQYMGcnV1lb+/vx577DGdO3fOql316tV111135dnPqFGj8mwzv9rfeeedPO+pJKWnp2vChAmqVauWXFxcFBQUpLFjxyo9PT3f9+pyW7duVffu3VWuXDl5eHiocePGmj59eoHrfPbZZ7rzzjvl5+cnFxcX1a9fX7NmzcrTLvc1r1q1Srfddpvc3Nwsl59f2ud/7ty5evDBByWZQ3bu+7xhwwYNHDhQvr6+yszMzLP9Ll26qG7dutf0OiXp8OHDatGiRb7B2M/Pr8B1GzRoYBX8JcnFxUXdu3fXiRMndOHChQLXv7xbjru7uxo1aqSPP/74mmo/cuSIHnzwQZUvX17u7u66/fbbtXz5cqs2W7ZsUdOmTfXmm28qKChILi4uql27tt566y1Lf2nJHG6bNGmS737q1q2riIgIq5ov74rRoUMHq+MwIyND48ePV2hoqLy9veXh4aG2bdtq/fr1ebZ/+bEdGxurAQMGqGLFinJxcVHDhg310UcfWa2T+7c4ZcoUq/kNGzbM8/cwZcqUfGv++++/NWTIEPn7+8vFxUUNGjTQp59+atUm9zNqw4YN8vHxUVhYmKpUqaIePXpc8fPkSutf6lrWz123oOnS9a/l9UgFf4Zf7fPbZDJZjctxLcfg5a/DxcVFderU0aRJk2QYhlXbHTt2qFu3bvLy8pKnp6c6deqkLVu2WLW59Bj08/PTHXfcoQoVKqhx48YymUyaO3dugb+Ta/27GzRokDw9PQvc1uW/gy1btqhhw4bq27evypcvLzc3N7Vo0UJLly7Ns+7p06c1dOhQ+fv7y9XVVU2aNMnTdeHS4/y9995TtWrV5Obmpvbt22vPnj156r38Cqn58+fLwcFBb731lmXerl27NGjQINWoUUOurq4KCAjQkCFDdObMGUubtLQ01atXT/Xq1VNaWppl/tmzZxUYGKg77rhD2dnZBb43APLHmX8AJS43qFeoUEGS+T9wS5cu1YMPPqjg4GDFxcXpww8/VPv27bVv3z7LiODZ2dm66667tHbtWvXt21dPP/20Lly4oNWrV2vPnj2qWbOmZR/9+vVT9+7drfY7bty4fOt54403ZDKZ9Pzzz+v06dOaNm2awsPDtXPnTku/2nXr1qlbt24KDQ3VhAkT5ODgYAmcP//8s1q2bJlnu1WqVLEMApWcnKzHH388332/8sor6t27tx599FHFx8fr/fffV7t27bRjxw75+PjkWWf48OFq27atJOmbb77RkiVLrJY/9thjmjt3rgYPHqynnnpKMTExmjFjhnbs2KFffvlFZcqUyfd9uB7nz5/Pd4CrnJwc3X333dq0aZOGDx+ukJAQ7d69W++9957++OOPfP8TeqnVq1frrrvuUmBgoJ5++mkFBARo//79+v777/X0009fcb1Zs2apQYMGuvvuu+Xk5KRly5bpiSeeUE5OjkaOHGnV9uDBg+rXr58ee+wxDRs2LN+w3q5dOz311FP673//qxdffFEhISGSpJCQEPXv31+ff/65Vq1aZfXlSWxsrNatW6cJEyYU+BovVa1aNa1du1YnTpwosrO5sbGxcnd3v+YuNe+99558fX2VlJSkTz/9VMOGDVP16tUVHh5+xXXi4uJ0xx13KDU1VU899ZQqVKigefPm6e6779ZXX32le++9V5J05swZbdq0SZs2bdKQIUMUGhqqtWvXaty4cTp69Khmz54tSerfv7+GDRumPXv2qGHDhpb9/Prrr/rjjz/08ssvX9d7kJSUpI8//lj9+vXTsGHDdOHCBX3yySeKiIjQtm3b1LRp03zXy8jIUHh4uA4cOKDHH39cdevW1dKlSzV8+HCdOXOmyM6oxsXF6fbbb7eM41CxYkX98MMPGjp0qJKSkjR69OgrrvvTTz9pxYoVhd73ta4fEhKi//u//7M8nzNnjvbv36/33nvPMq9x48bX9Xqu9hkeHh5utc/cz7dL5+V+zl/rMZgr9+84LS3N8oWvn5+fhg4dKknau3ev2rZtKy8vL40dO1ZlypTRhx9+qA4dOmjjxo1q1arVFd+r//u//9Pu3buv+p5eqjB/d1dz5swZzZkzR56ennrqqadUsWJFzZ8/X/fdd58WLFhgudIuLS1NHTp00J9//qlRo0YpODhYixcv1qBBg3T+/Pk8n7Wff/65Lly4oJEjR+rixYuaPn267rzzTu3evVv+/v751vLjjz9qyJAhGjVqlNXfzerVq3XkyBENHjxYAQEB2rt3r+bMmaO9e/dqy5YtMplMcnNz07x589S6dWu99NJLevfddyVJI0eOVGJioubOnStHR8dCv0/ALc0AgGLy2WefGZKMNWvWGPHx8cbx48eNL774wqhQoYL
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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37dv3+uu88pLW663D+a2Hf7+/oqOjrbZByXLl1VvvvmmqlSpIrPZrMqVK+uVV17J8ZmWvQ86OzurQYMGatCggb755huZTKZ8nT2Un/dd9t+BDz744JrLuXrf3bBhg9zd3bVv3z7raxIUFKRBgwbp9OnTOeafP3++9ffl7++vxx57TH/99ZdNm+z9fP/+/YqKipKXl5dCQkI0duxYm0uZsuudMWOGdVxKSorCw8MVFhamY8eOWcd/8MEHatasmcqWLSsPDw+Fh4fr66+/tlnv9OnTZTKZ9OWXX9qMf/vtt2UymbRkyZJrvi4AbHHkH0CxyA7qZcuWlSTt379fCxcu1COPPKKwsDAdP35c//73v9WiRQvt2rVLISEhkqTMzEzdf//9Wrlypbp3765nn31WKSkpWr58uXbs2KEqVapY19GjRw917NjRZr0jR47MtZ633npLJpNJL730kk6cOKGJEycqMjJS8fHx8vDwkCStWrVKHTp0UHh4uEaPHi0nJydr4Pzpp5/UpEmTHMutUKGCxo0bJ0k6f/68hgwZkuu6X3/9dT366KN68skndfLkSX388ce67777tHXrVvn6+uaYZ+DAgbr33nslSd98802OYDRo0CDNmDFD/fr10zPPPKMDBw5o8uTJ2rp1q3755Re5urrm+jrciLNnz1q37UpZWVl64IEH9PPPP2vgwIGqVauWtm/frg8//FC///67TedkuVm+fLnuv/9+BQcH69lnn1VQUJB2796tRYsW6dlnn73mfFOnTlWdOnX0wAMPyMXFRd9//72eeuopZWVlaejQoTZtExIS1KNHDw0aNEgDBgzINazfd999euaZZ/TRRx/plVdeUa1atSRJtWrV0uOPP67//Oc/WrZsmc2XJ4mJiVq1apVGjx6d5zZeqVevXho4cGCOZW3fvl07duzQqFGjrOMqVaqkzMxM/d///Z/69OmT73UU1L333quBAwcqKytLO3bs0MSJE3X06FH99NNPec43ZswYvfHGG4qMjNSQIUOUkJCgqVOnavPmzdb979SpU5Is78lq1arpjTfe0OXLlzVlyhQ1b95cmzdvVvXq1dWyZUuFhoZq9uzZeuihh2zWM3v2bFWpUuWG+weYP3++Ll68qCFDhqhs2bLatGmTPv74Yx05ckTz58+/5nxz5szRY489pgYNGmjcuHE6deqUPvroI/3888/aunWr/P39b6iOaynIZ0K2l1566abWnd/5X331VT355JOSpKSkJI0YMcLmc+lK+d2e6733Bw0apMjISOtyH3/8cT300EM2p9QHBARIyt8+mK1mzZp69dVXZRiG9u3bpwkTJqhjx442gfvJJ5/UzJkz1bVrVz333HPauHGjxo0bp927d+f6xVS2jIwMvfrqq/l6TbMV9H2Xl1OnTuny5csaMmSIWrdurcGDB2vfvn2aMmWKNm7cqI0bN1rPfMr+23HXXXdp3LhxOn78uCZNmqRffvklx/6XmZmp9u3b6+6779Z7772npUuXavTo0crIyNDYsWNzrSU9PV0PP/yw9Sym4OBg67RJkybpgQceUK9evZSWlqa5c+fqkUce0aJFixQdHS1J6tevn7755hvFxMSobdu2Cg0N1fbt2/XGG2+of//+Of7uA8iDAQCFaPr06YYkY8WKFcbJkyeNw4cPG3PnzjX
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA/8AAAIjCAYAAABViau2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACHdklEQVR4nOzdeXwN9/7H8ffJvkhCZFVB7DsVS0NrawhNq0pbVGup2kqLdNXF1tur1VulpXTF/ZVLuaUtStFSKmiD2nPVUpRIgiRCZJ3fH6c5dSSISHLieD0fj3nknJnvzHzmZM5J3nNmvmMyDMMQAAAAAACwWw62LgAAAAAAAJQswj8AAAAAAHaO8A8AAAAAgJ0j/AMAAAAAYOcI/wAAAAAA2DnCPwAAAAAAdo7wDwAAAACAnSP8AwAAAABg5wj/AADAZpKTk/X7778rOzvb1qUAdi03N1dJSUk6fPiwrUsBYCOEfwBAmTdhwgSZTKZiX261atU0YMCAYl8uri4rK0tTpkxRkyZN5OrqqgoVKqhWrVpat26drUu7JezZs0fLli2zPN+5c6dWrFhhu4KgTZs2af369Zbn69ev188//2y7gi4THx+v0aNHq2rVqnJxcZG/v7/q16+v1NRUW5cGwAYI/wCK1dy5c2UymSyDm5ubateurZEjR+r06dO2Lg+4pn379mnChAk6evRoiSy/cePGqlKligzDuGqbNm3aKDAw0PJNeGJiokaNGqW6devK3d1dAQEBatmypV566SWlpaVZ5vvqq6/Uq1cvVa9eXR4eHqpTp46ee+45JScnl8i2FEVGRoYiIiL0+uuvq3379lq8eLHWrFmjH374QeHh4bYu75Zw/vx5DR06VFu2bNHBgwc1atQo7d6929Zl3daOHz+up59+Wrt379bu3bv19NNP6/jx47YuS7///rtatGihhQsXaujQoVq+fLnWrFmjdevWydPT09blAbABJ1sXAMA+TZo0SaGhobp06ZI2bdqkWbNmaeXKldqzZ488PDxsXR4gSYqLi5ODw9/Hwfft26eJEyeqffv2qlatWrGvr2/fvnr55Ze1ceNGtW3bNt/0o0ePKiYmRiNHjpSTk5POnj2r5s2bKzU1VU8++aTq1q2rM2fOaNeuXZo1a5aGDx+ucuXKSZKGDBmiSpUq6fHHH1eVKlW0e/duzZgxQytXrtT27dvl7u5e7Ntzo95++21t3bpVq1evVvv27W1dzi0pPDzcMkhS7dq1NXjwYBtXdXvr0aOHpk2bpsaNG0sy/4569Ohh46qkoUOHysXFRVu2bNEdd9xh63IAlAGEfwAlomvXrmrevLkk6amnnlLFihU1depUff311+rTp4+Nq8PtzDAMXbp0Se7u7nJ1dS3VdT/22GMaO3asFixYUGD4/89//iPDMNS3b19J0meffaZjx47p559/VuvWra3apqamysXFxfJ8yZIl+QJ1WFiY+vfvr/nz5+upp54q/g26AdnZ2Zo2bZqee+45gv9NWrZsmfbt26f09HQ1atTIaj9A6XN1ddXmzZu1Z88eSVLDhg3l6Oho05piY2P1ww8/6Pvvvyf4A7DgtH8ApaJjx46SpCNHjkiSzp49q+eff16NGjVSuXLl5O3tra5du+q3337LN++lS5c0YcIE1a5dW25ubgoODlaPHj106NAhSeZvSy+/1ODK4fKgsX79eplMJi1atEivvPKKgoKC5OnpqW7duhV4mubWrVvVpUsX+fj4yMPDQ+3atbvqtZzt27cvcP0TJkzI1/aLL75QWFiY3N3d5evrq969exe4/mtt2+Vyc3M1bdo0NWjQQG5ubgoMDNTQoUN17tw5q3bVqlXT/fffn289I0eOzLfMgmp/55138r2mkvl07vHjx6tmzZpydXVVSEiIXnzxRWVkZBT4Wl1p69atuu+++1ShQgV5enqqcePGmj59+jXnmTNnjjp27KiAgAC5urqqfv36mjVrVr52edu8evVqNW/eXO7u7vroo48s0/Ku+Z87d64eeeQRSVKHDh0sr/P69evVv39/+fn5KSsrK9/yO3furDp16hRqO0NCQtS2bVstWbKkwGUtWLBANWrUUKtWrSRJhw4dkqOjo+666658bb29veXm5mZ5XlCgfuihhyRJ+/fvv25t1apVs2yzg4ODgoKC1KtXLx07dqxQ2/bhhx+qQYMGcnV1VaVKlTRixAirSw7i4uJ07tw5eXl5qV27dvLw8JCPj4/uv/9+S2iSpB9//FEmk0lLly7Nt44FCxbIZDIpJibGUvOVfTbkvccvvwZ748aNeuSRR1SlShXL/jlmzBilp6dbzVtQ3xLz589X06ZN5ebmpooVK6pPnz75XpMBAwZYzsDIs2TJknx1SFK5cuUK7GeiMJ8J7du3t/ye69evr7CwMP32228FfiYU5PL58/zyyy+Fmv9qn29X+0wq7Gfctd77AwYMuO46L79E53r7YEHb4efnp6ioKKt9UDIfrHrjjTdUo0YNubq6qlq1anrllVfyfabl7YOOjo5q0qSJmjRpoq+++komk6lQZw8V5n2X93fgX//611WXc+W+u2XLFrm5uenQoUOW1yQoKEhDhw7V2bNn882/ePFiy+/Lz89Pjz/+uP7880+rNnn7+eHDhxUZGSlPT09VqlRJkyZNsrqUKa/euXPnWsadP39eYWFhCg0N1alTpyzj//Wvf6l169aqWLGi3N3dFRYWpiVLllitd86cOTKZTPr888+txv/zn/+UyWTSypUrr/q6ALDGN/8ASkVeUK9YsaIk6fDhw1q2bJkeeeQRhYaG6vTp0/roo4/Url077du3T5UqVZIk5eTk6P7779e6devUu3dvjRo1SufPn9eaNWu0Z88e1ahRw7KOPn366L777rNa79ixYwus580335TJZNJLL72khIQETZs2TREREdq5c6fl9OgffvhBXbt2VVhYmMaPHy8HBwdL4Ny4caNatmyZb7mVK1fW5MmTJUlpaWkaPnx4get+/fXX9eijj+qpp55SYmKiPvjgA7Vt21Y7duxQ+fLl880zZMgQ3XPPPZLM13ZfGYyGDh2quXPnauDAgXr22Wd15MgRzZgxQzt27NDPP/8sZ2fnAl+HG5GcnGzZtsvl5uaqW7du2rRpk4YMGaJ69epp9+7deu+99/S///3PqnOygqxZs0b333+/goODNWrUKAUFBWn//v1avny5Ro0addX5Zs2apQYNGqhbt25ycnLSt99+q6efflq5ubkaMWKEVdu4uDj16dNHQ4cO1eDBgwsM623bttWzzz6r999/X6+88orq1asnSapXr56eeOIJ/fvf/9bq1autDp7Ex8frhx9+0Pjx46+5jZfr27evhgwZkm9Zu3fv1p49ezRu3DjLuKpVqyonJ0f/93//p/79+xd6HZfXJ0l+fn6Fan/PPfdoyJAhys3N1Z49ezRt2jSdPHlSGzduvOZ8EyZM0MSJExUREaHhw4crLi5Os2bN0i+//GLZ/86cOSPJ/J6sVauWJk6cqEuXLmnmzJlq06aNfvnlF9WuXVvt27dXSEiI5s+fbzl4kWf+/PmqUaPGDfcPsHjxYl28eFHDhw9XxYoVtW3bNn3wwQc6ceKEFi9efNX5FixYoMcff1xNmjTR5MmTdebMGb3//vvatGmTduzYUejX9XqK8pmQ56WXXrqpdRd2/ldffdVy9khSUpLGjBlj9bl0ucJuz/Xe+0OHDlVERIRluU888YQeeughq1Pq/f39JRVuH8xTt25dvfrqqzIMQ4cOHdLUqVN13333WQXup556SvPmzdPDDz+s5557Tlu3btXkyZO1f//+Ag9M5cnOztarr75aqNc0T1Hfd9dy5swZXbp0ScOHD1fHjh01bNgwHTp0SDNnztTWrVu1detWy5lPeX87WrRoocmTJ+v06dOaPn26fv7553z7X05Ojrp06aK77rpLU6ZM0apVqzR+/HhlZ2dr0qRJBdaSlZWlnj17Ws5iCg4OtkybPn26unXrpr59+yozM1MLFy7UI488ouXLlysqKkqSNHDgQH311VeKjo5Wp06dFBISot27d2vixIkaNGhQvr/7AK7
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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t7e3nn76aauYr3TlvA83+t2U99mcO3euZd3vv/+uhx56SBUqVJCbm5vuvvvufMck7zto6dKlVuvLly+fb/6Jgj6XknnYRs+ePeXr6ytXV1c1a9bMMvQjT94QrEOHDsnf31/33HOPKlasqEaNGuWLuyCXvz5Pbm7uDb3+yuFfBS2Xv/5G9kcyj48fNWqUatasKRcXF1WrVk39+vVTcnKy5bhea7n8++xG3oNX7oe7u7saNmyojz76KF9s69at03333ScPDw/5+PjowQcfzPdZuvw9WK1aNYWHh6tcuXIKCAiwfNdcy41+7tq2basGDRpctZ4r37sZGRnatWuXgoKCFBUVJS8vL3l4eKht27b68ccf873+zz//1COPPCJfX1+5u7urZcuW+b6jbuZvbdu2bfP9TXnjjTfk4OCghQsXWtb9+OOPeuSRR1S9enXL35lRo0bpwoULljInT55UpUqV1LZtW6vhVX/88Yc8PDz06KOPXvW4ALczuv0DKFZ5iXrFihUlmf95WL58uR555BEFBwfrxIkTev/999WmTRvt2bNHVapUkSTl5OSoa9euio2NVe/evfX888/r3LlziomJ0a5du1S7dm1LG4899pi6dOli1e7YsWMLjOeNN96QyWTSmDFjdPLkSU2fPl0RERHatm2b3NzcJJn/mevcubPCwsI0fvx4OTg4WBLOH3/8Uc2bN89Xb7Vq1SwTaqWnp+uZZ54psO1XX31VvXr10lNPPaVTp07p3XffVevWrbV161b5+Pjke82QIUN03333SZK+/PJLLVu2zGr7008/rblz52rgwIEaMWKEEhISNHPmTG3dulU///yznJycCjwONyMlJaXAycJyc3PVrVs3/fTTTxoyZIhCQkK0c+dOTZs2Tb///vt1E8KYmBh17dpVgYGBev755xUQEKC9e/dq5cqV15zYbfbs2brzzjvVrVs3lStXTl9//bWeffZZ5ebmatiwYVZl9+/fr8cee0xPP/20Bg8eXGCy3rp1a40YMULvvPOO/vGPfygkJESSFBISor59++rTTz/VmjVrrE6eJCUlad26dRo/fvw19/Fyffr00ZAhQ/LVtXPnTu3atUvjxo2zrHv44Yf1zDPPaOHChfnG3S5cuFA1atSwJPs1atSQJC1ZskSPPPJIoYbXJCUlyc/P74bL//e//5UkJScn67333tMjjzyiXbt2XfNkyO7du3XffffJy8tLo0ePlpOTk95//321bdtWGzZssJz4OH36tH777TeVK1dOw4YNU+3atbV8+XINGTJEp0+f1ssvvyyTyaQnnnhCkydP1pkzZ+Tr62tp5+uvv1ZaWpqeeOKJmzoGN/rddKUzZ86odevWOnfunEaMGKGAgADNnz9fDz/8sBYsWKDHHnvspuK4mt27d6tVq1aqWrWqXn75ZXl4eGjx4sXq3r27vvjiCz300ENXfe1///tf7dy5s9Bt3+jrW7dubXlvSObvPEn65z//aVl3zz33SLrx/UlPT7ecnHryySfVtGlTJScn66uvvtKRI0cs49TzfPDBB9q7d6+mTZtmWdeoUSNLmzfyHswzbdo0+fn5KS0tTR9//LEGDx6smjVrWobHrF27Vp07d1atWrU0YcIEXbhwQe+++65atWqlLVu2XHMI0dSpU296PpzCfO6u5fTp05Kkt95
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Корреляция признаков в обучающей выборке:\n",
" Unnamed: 0 carat depth table x y \\\n",
"Unnamed: 0 1.000000 -0.397135 -0.038173 -0.109717 -0.406396 -0.404400 \n",
"carat -0.397135 1.000000 0.012244 0.184243 0.951931 0.945835 \n",
"depth -0.038173 0.012244 1.000000 -0.274986 -0.030762 -0.032418 \n",
"table -0.109717 0.184243 -0.274986 1.000000 0.195246 0.188413 \n",
"x -0.406396 0.951931 -0.030762 0.195246 1.000000 0.991915 \n",
"y -0.404400 0.945835 -0.032418 0.188413 0.991915 1.000000 \n",
"z -0.399257 0.928342 0.076986 0.152752 0.967789 0.962323 \n",
"cut_Good -0.042108 0.034264 0.192864 0.163059 0.027477 0.030305 \n",
"cut_Ideal 0.114386 -0.163612 -0.020022 -0.560157 -0.162808 -0.155536 \n",
"cut_Premium -0.052857 0.111731 -0.225003 0.373514 0.125573 0.107317 \n",
"cut_Very Good -0.035069 0.017264 0.034832 0.137452 0.007004 0.019726 \n",
"color_E 0.052187 -0.132396 -0.023732 0.007044 -0.132446 -0.130469 \n",
"color_F 0.016246 -0.048969 -0.016200 -0.007303 -0.046116 -0.045376 \n",
"color_G 0.027986 -0.024513 -0.003837 -0.038404 -0.026801 -0.026822 \n",
"color_H -0.062449 0.100708 0.022672 0.017285 0.095782 0.093429 \n",
"color_I -0.045077 0.153477 0.021523 0.014445 0.149141 0.148534 \n",
"color_J -0.050254 0.152898 0.021672 0.040373 0.162742 0.162404 \n",
"clarity_IF 0.077743 -0.119400 -0.033011 -0.078131 -0.130391 -0.127557 \n",
"clarity_SI1 -0.053072 0.073320 0.050914 0.055756 0.080001 0.078622 \n",
"clarity_SI2 -0.160840 0.255131 0.006453 0.097077 0.272073 0.267797 \n",
"clarity_VS1 0.025491 -0.056952 -0.022840 -0.030577 -0.058078 -0.055083 \n",
"clarity_VS2 0.032349 -0.033837 -0.006613 -0.010324 -0.036775 -0.037425 \n",
"clarity_VVS1 0.095239 -0.171270 -0.020592 -0.069129 -0.188238 -0.185525 \n",
"clarity_VVS2 0.091095 -0.131283 -0.017795 -0.062135 -0.143086 -0.140215 \n",
"\n",
" z cut_Good cut_Ideal cut_Premium ... color_H \\\n",
"Unnamed: 0 -0.399257 -0.042108 0.114386 -0.052857 ... -0.062449 \n",
"carat 0.928342 0.034264 -0.163612 0.111731 ... 0.100708 \n",
"depth 0.076986 0.192864 -0.020022 -0.225003 ... 0.022672 \n",
"table 0.152752 0.163059 -0.560157 0.373514 ... 0.017285 \n",
"x 0.967789 0.027477 -0.162808 0.125573 ... 0.095782 \n",
"y 0.962323 0.030305 -0.155536 0.107317 ... 0.093429 \n",
"z 1.000000 0.042419 -0.158216 0.087557 ... 0.094510 \n",
"cut_Good 0.042419 1.000000 -0.258011 -0.185394 ... -0.007642 \n",
"cut_Ideal -0.158216 -0.258011 1.000000 -0.478081 ... -0.024151 \n",
"cut_Premium 0.087557 -0.185394 -0.478081 1.000000 ... 0.029929 \n",
"cut_Very Good 0.018725 -0.169940 -0.438229 -0.314889 ... -0.005621 \n",
"color_E -0.129694 0.007180 0.001097 -0.017061 ... -0.201856 \n",
"color_F -0.046366 0.005680 0.002736 -0.014361 ... -0.197792 \n",
"color_G -0.026922 -0.024765 0.035195 0.002625 ... -0.220750 \n",
"color_H 0.094510 -0.007642 -0.024151 0.029929 ... 1.000000 \n",
"color_I 0.146920 0.006280 -0.011736 0.007090 ... -0.142441 \n",
"color_J 0.161595 0.016478 -0.039704 0.019348 ... -0.100320 \n",
"clarity_IF -0.129263 -0.032327 0.104625 -0.053332 ... 0.008773 \n",
"clarity_SI1 0.081263 0.056069 -0.081767 0.023309 ... 0.034336 \n",
"clarity_SI2 0.263557 0.043577 -0.108704 0.065610 ... 0.024856 \n",
"clarity_VS1 -0.055805 -0.020710 0.034568 -0.013400 ... -0.015491 \n",
"clarity_VS2 -0.037401 -0.021250 0.014164 0.024069 ... -0.033375 \n",
"clarity_VVS1 -0.184765 -0.035799 0.088938 -0.052519 ... 0.001434 \n",
"clarity_VVS2 -0.140629 -0.037519 0.075342 -0.060646 ... -0.030919 \n",
"\n",
" color_I color_J clarity_IF clarity_SI1 clarity_SI2 \\\n",
"Unnamed: 0 -0.045077 -0.050254 0.077743 -0.053072 -0.160840 \n",
"carat 0.153477 0.152898 -0.119400 0.073320 0.255131 \n",
"depth 0.021523 0.021672 -0.033011 0.050914 0.006453 \n",
"table 0.014445 0.040373 -0.078131 0.055756 0.097077 \n",
"x 0.149141 0.162742 -0.130391 0.080001 0.272073 \n",
"y 0.148534 0.162404 -0.127557 0.078622 0.267797 \n",
"z 0.146920 0.161595 -0.129263 0.081263 0.263557 \n",
"cut_Good 0.006280 0.016478 -0.032327 0.056069 0.043577 \n",
"cut_Ideal -0.011736 -0.039704 0.104625 -0.081767 -0.108704 \n",
"cut_Premium 0.007090 0.019348 -0.053332 0.023309 0.065610 \n",
"cut_Very Good 0.000094 0.008815 -0.033901 0.031762 0.005171 \n",
"color_E -0.157077 -0.110628 -0.043930 0.000156 0.005365 \n",
"color_F -0.153915 -0.108401 0.015369 -0.017832 -0.003781 \n",
"color_G -0.171780 -0.120983 0.078387 -0.083663 -0.045632 \n",
"color_H -0.142441 -0.100320 0.008773 0.034336 0.024856 \n",
"color_I 1.000000 -0.078066 -0.013824 0.019822 -0.001150 \n",
"color_J -0.078066 1.000000 -0.018986 0.016113 -0.000187 \n",
"clarity_IF -0.013824 -0.018986 1.000000 -0.105528 -0.084748 \n",
"clarity_SI1 0.019822 0.016113 -0.105528 1.000000 -0.256125 \n",
"clarity_SI2 -0.001150 -0.000187 -0.084748 -0.256125 1.000000 \n",
"clarity_VS1 0.019454 0.024517 -0.078583 -0.237493 -0.190726 \n",
"clarity_VS2 -0.007408 0.018553 -0.101376 -0.306378 -0.246046 \n",
"clarity_VVS1 -0.003091 -0.038902 -0.050966 -0.154031 -0.123699 \n",
"clarity_VVS2 -0.032959 -0.036901 -0.059965 -0.181225 -0.145538 \n",
"\n",
" clarity_VS1 clarity_VS2 clarity_VVS1 clarity_VVS2 \n",
"Unnamed: 0 0.025491 0.032349 0.095239 0.091095 \n",
"carat -0.056952 -0.033837 -0.171270 -0.131283 \n",
"depth -0.022840 -0.006613 -0.020592 -0.017795 \n",
"table -0.030577 -0.010324 -0.069129 -0.062135 \n",
"x -0.058078 -0.036775 -0.188238 -0.143086 \n",
"y -0.055083 -0.037425 -0.185525 -0.140215 \n",
"z -0.055805 -0.037401 -0.184765 -0.140629 \n",
"cut_Good -0.020710 -0.021250 -0.035799 -0.037519 \n",
"cut_Ideal 0.034568 0.014164 0.088938 0.075342 \n",
"cut_Premium -0.013400 0.024069 -0.052519 -0.060646 \n",
"cut_Very Good -0.003510 -0.015913 -0.008381 0.014051 \n",
"color_E -0.023478 0.031569 -0.004026 0.011237 \n",
"color_F -0.012930 0.004648 0.018415 0.012658 \n",
"color_G 0.059925 -0.028513 0.046097 0.061750 \n",
"color_H -0.015491 -0.033375 0.001434 -0.030919 \n",
"color_I 0.019454 -0.007408 -0.003091 -0.032959 \n",
"color_J 0.024517 0.018553 -0.038902 -0.036901 \n",
"clarity_IF -0.078583 -0.101376 -0.050966 -0.059965 \n",
"clarity_SI1 -0.237493 -0.306378 -0.154031 -0.181225 \n",
"clarity_SI2 -0.190726 -0.246046 -0.123699 -0.145538 \n",
"clarity_VS1 1.000000 -0.228148 -0.114701 -0.134951 \n",
"clarity_VS2 -0.228148 1.000000 -0.147970 -0.174094 \n",
"clarity_VVS1 -0.114701 -0.147970 1.000000 -0.087525 \n",
"clarity_VVS2 -0.134951 -0.174094 -0.087525 1.000000 \n",
"\n",
"[24 rows x 24 columns]\n"
]
}
],
"source": [
"# Проверка на наличие дубликатов\n",
"duplicates = df.duplicated().sum()\n",
"print(f\"Количество дубликатов: {duplicates}\")\n",
"\n",
"\n",
"# Проверим, какие столбцы являются категориальными\n",
"categorical_columns = X.select_dtypes(include=['object']).columns\n",
"\n",
"# Применяем one-hot encoding к категориальным столбцам\n",
"X_encoded = pd.get_dummies(X, columns=categorical_columns, drop_first=True)\n",
"\n",
"# Разделение на обучающую и тестовую выборки\n",
"X_train, X_test, y_train, y_test = train_test_split(X_encoded, y, test_size=0.2, random_state=42, stratify=df['cut'])\n",
"\n",
"# Визуализация распределений признаков\n",
"def visualize_distribution(X_train, X_test, feature):\n",
" plt.figure(figsize=(12, 6))\n",
" sns.histplot(X_train[feature], bins=30, color='blue', label='Train', kde=True)\n",
" sns.histplot(X_test[feature], bins=30, color='red', label='Test', kde=True)\n",
" plt.title(f'Распределение {feature} в обучающей и тестовой выборках')\n",
" plt.xlabel(feature)\n",
" plt.ylabel('Количество')\n",
" plt.legend()\n",
" plt.show()\n",
"\n",
"# Распределение для каждого из признаков\n",
"for feature in X_encoded.columns:\n",
" visualize_distribution(X_train, X_test, feature)\n",
"\n",
"# Проверка корреляции\n",
"correlations = X_train.corr()\n",
"print(\"Корреляция признаков в обучающей выборке:\")\n",
"print(correlations)\n",
"\n",
"\n",
"# Преобразование категориальных данных в числовые\n",
"df_encoded = pd.get_dummies(df, columns=['cut'], drop_first=True)\n",
"\n",
"# Разделение данных на обучающую и тестовую выборки\n",
"X = df_encoded.drop('price', axis=1)\n",
"y = df_encoded['price']\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Оценка выборок и Аугментация данных"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Сбалансированность в обучающей выборке:\n",
"price\n",
"605 109\n",
"789 106\n",
"828 102\n",
"625 101\n",
"544 98\n",
" ... \n",
"8952 1\n",
"13769 1\n",
"10719 1\n",
"6064 1\n",
"3169 1\n",
"Name: count, Length: 10680, dtype: int64\n",
"\n",
"Сбалансированность в тестовой выборке:\n",
"price\n",
"802 33\n",
"776 29\n",
"844 29\n",
"675 26\n",
"645 25\n",
" ..\n",
"7976 1\n",
"7022 1\n",
"8969 1\n",
"5074 1\n",
"4968 1\n",
"Name: count, Length: 5338, dtype: int64\n"
]
}
],
"source": [
"# Проверка сбалансированности целевой переменной в обучающей выборке\n",
"cut_counts_train = y_train.value_counts()\n",
"cut_counts_test = y_test.value_counts()\n",
"\n",
"print(\"Сбалансированность в обучающей выборке:\")\n",
"print(cut_counts_train)\n",
"print(\"\\nСбалансированность в тестовой выборке:\")\n",
"print(cut_counts_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"После того как мы оценили сбалансированность, можем решить, нужно ли использовать методы аугментации данных. Например, если одна из категорий в 'cut' значительно меньше других, это может потребовать применения oversampling или undersampling."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Количество дубликатов: 0\n",
"Распределение классов в обучающей выборке:\n",
"price\n",
"605 106\n",
"802 105\n",
"789 103\n",
"544 99\n",
"828 99\n",
" ... \n",
"12690 1\n",
"12304 1\n",
"8972 1\n",
"18018 1\n",
"5634 1\n",
"Name: count, Length: 10695, dtype: int64\n",
"\n",
"Сбалансированность после oversampling:\n",
"price\n",
"12592 106\n",
"6750 106\n",
"3750 106\n",
"506 106\n",
"2583 106\n",
" ... \n",
"1189 106\n",
"1013 106\n",
"956 106\n",
"4637 106\n",
"3601 106\n",
"Name: count, Length: 6622, dtype: int64\n"
]
}
],
"source": [
"# Проверка на наличие дубликатов\n",
"duplicates = df.duplicated().sum()\n",
"print(f\"Количество дубликатов: {duplicates}\")\n",
"\n",
"# Преобразуем все категориальные данные в числовые\n",
"categorical_columns = df.select_dtypes(include=['object']).columns\n",
"df_encoded = pd.get_dummies(df, columns=categorical_columns, drop_first=True)\n",
"\n",
"# Разделение данных на обучающую и тестовую выборки\n",
"X = df_encoded.drop('price', axis=1)\n",
"y = df_encoded['price']\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=df['cut'])\n",
"\n",
"# Проверка сбалансированности целевой переменной\n",
"class_counts = y_train.value_counts()\n",
"print(\"Распределение классов в обучающей выборке:\")\n",
"print(class_counts)\n",
"\n",
"# Фильтрация классов с недостаточным количеством образцов\n",
"# Установим минимальное количество образцов, чтобы сохранить класс\n",
"min_samples = 2\n",
"classes_to_keep = class_counts[class_counts >= min_samples].index\n",
"\n",
"X_train_filtered = X_train[y_train.isin(classes_to_keep)]\n",
"y_train_filtered = y_train[y_train.isin(classes_to_keep)]\n",
"\n",
"# Применение SMOTE или RandomOverSampler\n",
"from imblearn.over_sampling import SMOTE, RandomOverSampler\n",
"\n",
"# Используем SMOTE, если классов достаточно\n",
"if y_train_filtered.value_counts().min() > 1:\n",
" smote = SMOTE(random_state=42, k_neighbors=1)\n",
" X_resampled, y_resampled = smote.fit_resample(X_train_filtered, y_train_filtered)\n",
"else:\n",
" # Или RandomOverSampler\n",
" ros = RandomOverSampler(random_state=42)\n",
" X_resampled, y_resampled = ros.fit_resample(X_train_filtered, y_train_filtered)\n",
"\n",
"# Проверка сбалансированности после oversampling\n",
"resampled_counts = y_resampled.value_counts()\n",
"print(\"\\nСбалансированность после oversampling:\")\n",
"print(resampled_counts)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Итог произвели балансировку данных. Использовались методы oversampling (увеличение данных недопредставленных категорий) и\n",
"методы SMOTE. Произвелась аугментация данных (создавались дополительные данные из имеющихся). Использование методов, таких как SMOTE или RandomOverSampler, помогло увеличить количество экземпляров редких классов в обучающей выборке, что повысило шансы модели правильно классифицировать их. \n",
"\n",
"\n",
"### 2 Датасет: Цены на ноутбуки \n",
"Выгрузили второй датасет! (цены ноутбуки)"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['Company', 'Product', 'TypeName', 'Inches', 'Ram', 'OS', 'Weight',\n",
" 'Price_euros', 'Screen', 'ScreenW', 'ScreenH', 'Touchscreen',\n",
" 'IPSpanel', 'RetinaDisplay', 'CPU_company', 'CPU_freq', 'CPU_model',\n",
" 'PrimaryStorage', 'SecondaryStorage', 'PrimaryStorageType',\n",
" 'SecondaryStorageType', 'GPU_company', 'GPU_model'],\n",
" dtype='object')\n",
"\n",
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 1275 entries, 0 to 1274\n",
"Data columns (total 23 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Company 1275 non-null object \n",
" 1 Product 1275 non-null object \n",
" 2 TypeName 1275 non-null object \n",
" 3 Inches 1275 non-null float64\n",
" 4 Ram 1275 non-null int64 \n",
" 5 OS 1275 non-null object \n",
" 6 Weight 1275 non-null float64\n",
" 7 Price_euros 1275 non-null float64\n",
" 8 Screen 1275 non-null object \n",
" 9 ScreenW 1275 non-null int64 \n",
" 10 ScreenH 1275 non-null int64 \n",
" 11 Touchscreen 1275 non-null object \n",
" 12 IPSpanel 1275 non-null object \n",
" 13 RetinaDisplay 1275 non-null object \n",
" 14 CPU_company 1275 non-null object \n",
" 15 CPU_freq 1275 non-null float64\n",
" 16 CPU_model 1275 non-null object \n",
" 17 PrimaryStorage 1275 non-null int64 \n",
" 18 SecondaryStorage 1275 non-null int64 \n",
" 19 PrimaryStorageType 1275 non-null object \n",
" 20 SecondaryStorageType 1275 non-null object \n",
" 21 GPU_company 1275 non-null object \n",
" 22 GPU_model 1275 non-null object \n",
"dtypes: float64(4), int64(5), object(14)\n",
"memory usage: 229.2+ KB\n"
]
}
],
"source": [
"df = pd.read_csv(\".//static//csv//laptop_prices.csv\")\n",
"print(df.columns)\n",
"\n",
"print()\n",
"\n",
"df.info()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Датасет:* Цена ноутбука. Прайс-лист компании-производителя ноутбуков для регрессии \n",
"\n",
"Kaggle предоставляет следующие данные о датасете: Компания — производитель ноутбуков, Продукт — бренд и модель, Название типа — тип (ноутбук,ультрабук, игровой и т. д.), Дюймы — размер экрана, Разрешение экрана — разрешение экрана, Процессор — центральный процессор (ЦП), Оперативная память — оперативная память ноутбука, Память — жёсткий диск / SSD-накопитель, GPU — графические процессоры (GPU), OpSys — операционная система, Вес — вес ноутбука, Цена_в_евро — цена (в евро)\n",
"\n",
"*Объекты наблюдения:* Каждый объект наблюдения в наборе данных — это конкретная модель ноутбука, представленная в прайс-листе производителя.\n",
"*Атрибуты объектов:* компания, продукт, тип, диагональ экрана ОЗУ (оперативная память), Операционная система, вес, цена, разрешение экрана, IPS-панель, модель GPU, модель процессора (CPU_model), частота процессора, производитель CPU.\n",
"\n",
"*Связи между объектами:* Взаимосвязь между характеристиками ноутбуков и их ценой. Например, цена может зависеть от типа процессора, объема памяти, разрешения экрана, а также от производителя."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Company</th>\n",
" <th>Product</th>\n",
" <th>TypeName</th>\n",
" <th>Inches</th>\n",
" <th>Ram</th>\n",
" <th>OS</th>\n",
" <th>Weight</th>\n",
" <th>Price_euros</th>\n",
" <th>Screen</th>\n",
" <th>ScreenW</th>\n",
" <th>...</th>\n",
" <th>RetinaDisplay</th>\n",
" <th>CPU_company</th>\n",
" <th>CPU_freq</th>\n",
" <th>CPU_model</th>\n",
" <th>PrimaryStorage</th>\n",
" <th>SecondaryStorage</th>\n",
" <th>PrimaryStorageType</th>\n",
" <th>SecondaryStorageType</th>\n",
" <th>GPU_company</th>\n",
" <th>GPU_model</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Apple</td>\n",
" <td>MacBook Pro</td>\n",
" <td>Ultrabook</td>\n",
" <td>13.3</td>\n",
" <td>8</td>\n",
" <td>macOS</td>\n",
" <td>1.37</td>\n",
" <td>1339.69</td>\n",
" <td>Standard</td>\n",
" <td>2560</td>\n",
" <td>...</td>\n",
" <td>Yes</td>\n",
" <td>Intel</td>\n",
" <td>2.3</td>\n",
" <td>Core i5</td>\n",
" <td>128</td>\n",
" <td>0</td>\n",
" <td>SSD</td>\n",
" <td>No</td>\n",
" <td>Intel</td>\n",
" <td>Iris Plus Graphics 640</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Apple</td>\n",
" <td>Macbook Air</td>\n",
" <td>Ultrabook</td>\n",
" <td>13.3</td>\n",
" <td>8</td>\n",
" <td>macOS</td>\n",
" <td>1.34</td>\n",
" <td>898.94</td>\n",
" <td>Standard</td>\n",
" <td>1440</td>\n",
" <td>...</td>\n",
" <td>No</td>\n",
" <td>Intel</td>\n",
" <td>1.8</td>\n",
" <td>Core i5</td>\n",
" <td>128</td>\n",
" <td>0</td>\n",
" <td>Flash Storage</td>\n",
" <td>No</td>\n",
" <td>Intel</td>\n",
" <td>HD Graphics 6000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>HP</td>\n",
" <td>250 G6</td>\n",
" <td>Notebook</td>\n",
" <td>15.6</td>\n",
" <td>8</td>\n",
" <td>No OS</td>\n",
" <td>1.86</td>\n",
" <td>575.00</td>\n",
" <td>Full HD</td>\n",
" <td>1920</td>\n",
" <td>...</td>\n",
" <td>No</td>\n",
" <td>Intel</td>\n",
" <td>2.5</td>\n",
" <td>Core i5 7200U</td>\n",
" <td>256</td>\n",
" <td>0</td>\n",
" <td>SSD</td>\n",
" <td>No</td>\n",
" <td>Intel</td>\n",
" <td>HD Graphics 620</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Apple</td>\n",
" <td>MacBook Pro</td>\n",
" <td>Ultrabook</td>\n",
" <td>15.4</td>\n",
" <td>16</td>\n",
" <td>macOS</td>\n",
" <td>1.83</td>\n",
" <td>2537.45</td>\n",
" <td>Standard</td>\n",
" <td>2880</td>\n",
" <td>...</td>\n",
" <td>Yes</td>\n",
" <td>Intel</td>\n",
" <td>2.7</td>\n",
" <td>Core i7</td>\n",
" <td>512</td>\n",
" <td>0</td>\n",
" <td>SSD</td>\n",
" <td>No</td>\n",
" <td>AMD</td>\n",
" <td>Radeon Pro 455</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Apple</td>\n",
" <td>MacBook Pro</td>\n",
" <td>Ultrabook</td>\n",
" <td>13.3</td>\n",
" <td>8</td>\n",
" <td>macOS</td>\n",
" <td>1.37</td>\n",
" <td>1803.60</td>\n",
" <td>Standard</td>\n",
" <td>2560</td>\n",
" <td>...</td>\n",
" <td>Yes</td>\n",
" <td>Intel</td>\n",
" <td>3.1</td>\n",
" <td>Core i5</td>\n",
" <td>256</td>\n",
" <td>0</td>\n",
" <td>SSD</td>\n",
" <td>No</td>\n",
" <td>Intel</td>\n",
" <td>Iris Plus Graphics 650</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 23 columns</p>\n",
"</div>"
],
"text/plain": [
" Company Product TypeName Inches Ram OS Weight Price_euros \\\n",
"0 Apple MacBook Pro Ultrabook 13.3 8 macOS 1.37 1339.69 \n",
"1 Apple Macbook Air Ultrabook 13.3 8 macOS 1.34 898.94 \n",
"2 HP 250 G6 Notebook 15.6 8 No OS 1.86 575.00 \n",
"3 Apple MacBook Pro Ultrabook 15.4 16 macOS 1.83 2537.45 \n",
"4 Apple MacBook Pro Ultrabook 13.3 8 macOS 1.37 1803.60 \n",
"\n",
" Screen ScreenW ... RetinaDisplay CPU_company CPU_freq CPU_model \\\n",
"0 Standard 2560 ... Yes Intel 2.3 Core i5 \n",
"1 Standard 1440 ... No Intel 1.8 Core i5 \n",
"2 Full HD 1920 ... No Intel 2.5 Core i5 7200U \n",
"3 Standard 2880 ... Yes Intel 2.7 Core i7 \n",
"4 Standard 2560 ... Yes Intel 3.1 Core i5 \n",
"\n",
" PrimaryStorage SecondaryStorage PrimaryStorageType SecondaryStorageType \\\n",
"0 128 0 SSD No \n",
"1 128 0 Flash Storage No \n",
"2 256 0 SSD No \n",
"3 512 0 SSD No \n",
"4 256 0 SSD No \n",
"\n",
" GPU_company GPU_model \n",
"0 Intel Iris Plus Graphics 640 \n",
"1 Intel HD Graphics 6000 \n",
"2 Intel HD Graphics 620 \n",
"3 AMD Radeon Pro 455 \n",
"4 Intel Iris Plus Graphics 650 \n",
"\n",
"[5 rows x 23 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Для наглядности\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Inches</th>\n",
" <th>Ram</th>\n",
" <th>Weight</th>\n",
" <th>Price_euros</th>\n",
" <th>ScreenW</th>\n",
" <th>ScreenH</th>\n",
" <th>CPU_freq</th>\n",
" <th>PrimaryStorage</th>\n",
" <th>SecondaryStorage</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>1275.000000</td>\n",
" <td>1275.000000</td>\n",
" <td>1275.000000</td>\n",
" <td>1275.000000</td>\n",
" <td>1275.000000</td>\n",
" <td>1275.000000</td>\n",
" <td>1275.000000</td>\n",
" <td>1275.000000</td>\n",
" <td>1275.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>15.022902</td>\n",
" <td>8.440784</td>\n",
" <td>2.040525</td>\n",
" <td>1134.969059</td>\n",
" <td>1900.043922</td>\n",
" <td>1073.904314</td>\n",
" <td>2.302980</td>\n",
" <td>444.517647</td>\n",
" <td>176.069020</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>1.429470</td>\n",
" <td>5.097809</td>\n",
" <td>0.669196</td>\n",
" <td>700.752504</td>\n",
" <td>493.346186</td>\n",
" <td>283.883940</td>\n",
" <td>0.503846</td>\n",
" <td>365.537726</td>\n",
" <td>415.960655</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>10.100000</td>\n",
" <td>2.000000</td>\n",
" <td>0.690000</td>\n",
" <td>174.000000</td>\n",
" <td>1366.000000</td>\n",
" <td>768.000000</td>\n",
" <td>0.900000</td>\n",
" <td>8.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>14.000000</td>\n",
" <td>4.000000</td>\n",
" <td>1.500000</td>\n",
" <td>609.000000</td>\n",
" <td>1920.000000</td>\n",
" <td>1080.000000</td>\n",
" <td>2.000000</td>\n",
" <td>256.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>15.600000</td>\n",
" <td>8.000000</td>\n",
" <td>2.040000</td>\n",
" <td>989.000000</td>\n",
" <td>1920.000000</td>\n",
" <td>1080.000000</td>\n",
" <td>2.500000</td>\n",
" <td>256.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>15.600000</td>\n",
" <td>8.000000</td>\n",
" <td>2.310000</td>\n",
" <td>1496.500000</td>\n",
" <td>1920.000000</td>\n",
" <td>1080.000000</td>\n",
" <td>2.700000</td>\n",
" <td>512.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>18.400000</td>\n",
" <td>64.000000</td>\n",
" <td>4.700000</td>\n",
" <td>6099.000000</td>\n",
" <td>3840.000000</td>\n",
" <td>2160.000000</td>\n",
" <td>3.600000</td>\n",
" <td>2048.000000</td>\n",
" <td>2048.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Inches Ram Weight Price_euros ScreenW \\\n",
"count 1275.000000 1275.000000 1275.000000 1275.000000 1275.000000 \n",
"mean 15.022902 8.440784 2.040525 1134.969059 1900.043922 \n",
"std 1.429470 5.097809 0.669196 700.752504 493.346186 \n",
"min 10.100000 2.000000 0.690000 174.000000 1366.000000 \n",
"25% 14.000000 4.000000 1.500000 609.000000 1920.000000 \n",
"50% 15.600000 8.000000 2.040000 989.000000 1920.000000 \n",
"75% 15.600000 8.000000 2.310000 1496.500000 1920.000000 \n",
"max 18.400000 64.000000 4.700000 6099.000000 3840.000000 \n",
"\n",
" ScreenH CPU_freq PrimaryStorage SecondaryStorage \n",
"count 1275.000000 1275.000000 1275.000000 1275.000000 \n",
"mean 1073.904314 2.302980 444.517647 176.069020 \n",
"std 283.883940 0.503846 365.537726 415.960655 \n",
"min 768.000000 0.900000 8.000000 0.000000 \n",
"25% 1080.000000 2.000000 256.000000 0.000000 \n",
"50% 1080.000000 2.500000 256.000000 0.000000 \n",
"75% 1080.000000 2.700000 512.000000 0.000000 \n",
"max 2160.000000 3.600000 2048.000000 2048.000000 "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Описание данных (основные статистические показатели)\n",
"df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Company 0\n",
"Product 0\n",
"TypeName 0\n",
"Inches 0\n",
"Ram 0\n",
"OS 0\n",
"Weight 0\n",
"Price_euros 0\n",
"Screen 0\n",
"ScreenW 0\n",
"ScreenH 0\n",
"Touchscreen 0\n",
"IPSpanel 0\n",
"RetinaDisplay 0\n",
"CPU_company 0\n",
"CPU_freq 0\n",
"CPU_model 0\n",
"PrimaryStorage 0\n",
"SecondaryStorage 0\n",
"PrimaryStorageType 0\n",
"SecondaryStorageType 0\n",
"GPU_company 0\n",
"GPU_model 0\n",
"dtype: int64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Процент пропущенных значений признаков\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}')\n",
"\n",
"# Проверка на пропущенные данные\n",
"df.isnull().sum()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Company False\n",
"Product False\n",
"TypeName False\n",
"Inches False\n",
"Ram False\n",
"OS False\n",
"Weight False\n",
"Price_euros False\n",
"Screen False\n",
"ScreenW False\n",
"ScreenH False\n",
"Touchscreen False\n",
"IPSpanel False\n",
"RetinaDisplay False\n",
"CPU_company False\n",
"CPU_freq False\n",
"CPU_model False\n",
"PrimaryStorage False\n",
"SecondaryStorage False\n",
"PrimaryStorageType False\n",
"SecondaryStorageType False\n",
"GPU_company False\n",
"GPU_model False\n",
"dtype: bool"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isnull().any()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Пропущенных данных в колонках нет :)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Бизнес-цель\n",
"1. Оптимизация ценообразования \n",
"Использование данных для построения модели прогнозирования цены ноутбуков на основе характеристик. Эффект: Повышение продаж за счет правильного позиционирования товаров в разных ценовых сегментах.\n",
"2. Анализ рынка и планирование производства \n",
"Определение наиболее популярных и прибыльных конфигураций ноутбуков на основе данных о характеристиках и продажах. Эффект: Снижение издержек на производство непопулярных моделей и повышение прибыльности.\n",
"\n",
"### Техническая цель\n",
"1. Прогнозирование цены ноутбуков \n",
"Создать модель машинного обучения, которая на вход получает характеристики ноутбука (ОЗУ, CPU, объём памяти, экран и т.д.) и предсказывает его цену. \n",
"На вход поступают характеристики, а целевой признак - цена ноутбука. \n",
"2. Классификация сегмента ноутбука \n",
"Создать модель для предсказания ценового сегмента в зависимости от их характеристик. На вход поступают характеристики ноутбука, а целевой признак - определение ценового сегмента (бюджетный, средний, премиум)."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1UAAALOCAYAAABBKTnyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeZxO9f//8ec1+zCbYcbMMBg7IUtIZMmWJSqULYRIJLSgsrYgKQlpsbSQIhFKlmxl37N+LDPIvs5Yh5l5//7wva6fa65lmEuWPO6329y4zvuc9/t9znmfc67Xdc55vy3GGCMAAAAAQKZ43ekKAAAAAMC9jKAKAAAAADxAUAUAAAAAHiCoAgAAAAAPEFQBAAAAgAcIqgAAAADAAwRVAAAAAOABgioAAAAA8ABBFQAAwHXS0tJ08uRJ7du3705XBcA9gqAKAADc944ePaoePXoob9688vPzU0REhIoXL66kpKQ7XTUA9wCfO10BAP9dkyZN0vPPP2/77O/vrzx58qhOnTrq16+fcubMeQdrBwDX7NmzRzVq1NDVq1fVvXt3lS1bVj4+PgoMDFTWrFnvdPUA3AMIqgD86wYPHqy4uDhdvnxZf/75pz777DP9+uuv2rp1q7JkyXKnqwfgPte5c2f5+flp1apVypUr152uDoB7EEEVgH9dvXr19NBDD0mSOnbsqOzZs+ujjz7SrFmz1KJFiztcOwD3s/Xr1+uPP/7Q/PnzCagAZBrvVAG47R577DFJUnx8vCTp9OnTeu2111SyZEkFBQUpJCRE9erV0+bNmx2WvXz5sgYOHKjChQsrICBA0dHRevrpp7V3715JUkJCgiwWi8u/6tWr2/JasmSJLBaLfvjhB7355puKiopS1qxZ1ahRIx08eNCh7NWrV+vxxx9XaGiosmTJomrVqumvv/5yuo7Vq1d3Wv7AgQMd5v3uu+9Urlw5BQYGKjw8XM2bN3davrt1u15aWppGjhypBx54QAEBAcqZM6c6d+6sM2fO2M2XL18+NWzY0KGcbt26OeTprO7Dhw932KaSlJycrAEDBqhgwYLy9/dXbGys3njjDSUnJzvdVtdztd2sfwkJCQ71nz9/vkqXLq2AgAAVL15cM2bMcMh33759atasmcLDw5UlSxY9/PDDmjt3rt081vYwffp0h+WDgoLUrl07h+m//fabHn30UWXNmlXBwcFq0KCBtm3b5jDfzp079cwzzygiIkKBgYEqUqSI3nrrLbt5Dh06pA4dOigmJkb+/v6Ki4tTly5ddOXKlUytx42262nTptnaX44cOdS6dWsdOnTIbp527drZ7Yds2bKpevXqWr58uUN+6bVr105BQUEO06dPny6LxaIlS5bcVH0mTpwoi8WijRs3OuT5/vvvy9vbW4cOHcqwLVnb+KpVqxQQEKC9e/fqgQcekL+/v6KiotS5c2edPn3alveAAQPk6+urEydOOJTbqVMnhYWF6fLly5Kutc307aVTp04KCAhwWN+xY8fayo2JiVHXrl119uxZu3nSr0uOHDnUoEEDbd261aEuAO4M7lQBuO2sAVD27NklXfuiOHPmTDVr1kxxcXE6duyYPv/8c1WrVk3bt29XTEyMJCk1NVUNGzbUokWL1Lx5c73yyis6d+6cFixYoK1bt6pAgQK2Mlq0aKH69evbldu3b1+n9XnvvfdksVjUu3dvHT9+XCNHjlStWrW0adMmBQYGSpL++OMP1atXT+XKldOAAQPk5eWliRMn6rHHHtPy5ctVoUIFh3xz586tIUOGSJLOnz+vLl26OC27X79+euaZZ9SxY0edOHFCn376qapWraqNGzcqLCzMYZlOnTrp0UcflSTNmDFDP//8s116586dbe+zde/eXfHx8Ro9erQ2btyov/76S76+vk63w804e/asbd2ul5aWpkaNGunPP/9Up06dVKxYMf3999/6+OOP9b///U8zZ87MMO/rt5vVr7/+qu+//95h3t27d+vZZ5/Viy++qLZt22rixIlq1qyZ5s2bp9q1a0uSjh07pkceeUQXL15U9+7dlT17dn399ddq1KiRpk+frqeeeipT2+Dbb79V27ZtVbduXQ0bNkwXL17UZ599pipVqmjjxo3Kly+fJGnLli169NFH5evrq06dOilfvnzau3evZs+erffee0+SdPjwYVWoUEFnz55Vp06dVLRoUR06dEjTp0/XxYsX5efnd9PrcSPt2tpOypcvryFDhujYsWP65JNP9Ndffzm0vxw5cujjjz+WJP3zzz/65JNPVL9+fR08eNBpO82MG6lP06ZN1bVrV02ePFllypSxW37y5MmqXr26cuXKpbfeeksdO3aUJJ08eVI9e/a0O3asTp06pcuXL6tLly567LHH9OKLL2rv3r0aM2aMVq9erdWrV8vf31/PPfecBg8erB9++EHdunWzLX/lyhVNnz5dTZo0UUBAgNP1GjBggMaPH68ffvjB7keIgQMHatCgQapVq5a6dOmiXbt26bPPPtPatWsdjtWiRYvqrbfekjFGe/fu1UcffaT69evrwIEDnm52ALeCAYB/ycSJE40ks3DhQnPixAlz8OBBM3XqVJM9e3YTGBho/vnnH2OMMZcvXzapqal2y8bHxxt/f38zePBg27QJEyYYSeajjz5yKCstLc22nCQzfPhwh3keeOABU61aNdvnxYsXG0kmV65cJikpyTb9xx9/NJLMJ598Ysu7UKFCpm7durZyjDHm4sWLJi4uztSuXduhrEceecSUKFHC9vnEiRNGkhkwYIBtWkJCgvH29jbvvfee3bJ///238fHxcZi+e/duI8l8/fXXtmkDBgww15/Kly9fbiSZyZMn2y07b948h+l58+Y1DRo0cKh7165dTfrLQ/q6v/HGGyYyMtKUK1fObpt+++23xsvLyyxfvtxu+XHjxhlJ5q+//nIo73rVqlUzDzzwgMP04cOHG0kmPj7erv6SzE8//WSblpiYaKKjo02ZMmVs03r06GEk2dXp3LlzJi4uzuTLl8/W9qztYdq0aQ7lZ82a1bRt29Zu+bCwMPPCCy/YzXf06FETGhpqN71q1aomODjY7N+/327e69tSmzZtjJeXl1m7dq1D2db5bnY9MmrXV65cMZGRkaZEiRLm0qVLtvnmzJljJJn+/fvbprVt29bkzZvXrl5ffPGFkWTWrFnjUOfrtW3b1mTNmtVh+rRp04wks3jx4puuT4sWLUxMTIzdeWPDhg1Gkpk4caJDWdbzgrM06zFUs2ZNk5KSYptuPX99+umntmmVKlUyFStWtFt+xowZduthzLW2aW0vn3/+uUM+xhhz/Phx4+fnZ+rUqWO3HqNHjzaSzIQJE2zTqlWrZnecGWPMm2++aSSZ48ePO6wTgNuPx/8A/Otq1aqliIgIxcbGqnnz5goKCtLPP/9se3/B399fXl7XTkepqak6deqUgoKCVKRIEW3YsMGWz08//aQcOXLo5Zdfdigj/eNqN6NNmzYKDg62fW7atKmio6P166+/SpI2bdqk3bt3q2XLljp16pROnjypkydP6sKFC6pZs6aWLVumtLQ0uzwvX77s8ldrqxkzZigtLU3PPPOMLc+TJ08qKipKhQoV0uLFi+3mtz4G5u/v7zLPadOmKTQ0VLVr17bLs1y5cgoKCnLI8+rVq3bznTx50vYIkyuHDh3Sp59+qn79+jk81jVt2jQVK1ZMRYsWtcvT+shn+vI9FRMTY3eHJiQkRG3atNHGjRt19OhRSdfuclWoUEFVqlSxzRcUFKROnTopISFB27dvv+lyFyxYoLNnz6pFixZ26+nt7a2KFSva1vPEiRNatmyZ2rdvrzx58tjlYW2zaWlpmjlzpp544gnbu4fO5rvZ9cioXa9bt07Hjx/XSy+9ZNdWGzRooKJFizo8Vmgdu+nkyZPatGmTvvnmG0VHR6tYsWI3tM3St7Nz587Zpd9Mfdq0aaPDhw/btafJkycrMDBQTZo0uaH6pNerVy95e3vbPj/33HPKmTOnQ7mrV6+23W23lhsbG6tq1ao55Dlr1iy99NJLev311+3ubknSwoULdeXKFfXo0cN2/pO
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Визуализация выбросов для столбца Price_euros\n",
"plt.figure(figsize=(10, 6))\n",
"sns.boxplot(x=df['Price_euros'])\n",
"plt.title('Boxplot для цены ноутбуков (Price_euros)')\n",
"plt.show()\n",
"\n",
"\n",
"# Визуализация распределения моделей процессоров\n",
"plt.figure(figsize=(10, 6))\n",
"df['CPU_model'].value_counts().plot(kind='bar')\n",
"plt.title('Распределение процессоров ноутбуков')\n",
"plt.xlabel('Модель процессора')\n",
"plt.ylabel('Количество')\n",
"plt.xticks(rotation=90)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Проблема наборов \n",
"\n",
"**Зашумленность данных** — это наличие ненужной информации, ошибок или неверных значений, которые могут исказить анализ.\n",
"Например, в поле OS могут быть пробелы или некорректные названия операционных систем (например, \"No OS\", \"Windows\", \"Windows 10\").\n",
"\n",
"**Смещение данных** может возникнуть, если данные отражают предпочтения определённого производителя или сегмента. Если в данных преобладает один бренд (например, Apple), это может сместить модель в сторону этого производителя.\n",
"\n",
"**Актуальность данных** - неактуальные данные могут влиять на точность прогнозирования. Ноутбуки устаревают быстро, поэтому информация о старых моделях может быть неактуальной для анализа современных трендов.\n",
"\n",
"**Выбросы** — это значения, которые значительно отличаются от большинства данных. Поле Price_euros может содержать аномально высокие или низкие цены, которые не соответствуют реальности.\n",
"\n",
"**Просачивание данных** - это когда информация из тестовой выборки \"просачивается\" в обучение, что даёт модели несправедливое преимущество.\n",
"\n",
"Решение: Очистить данные, убрать пробелы, проверить на корректность. Чётко разделить данные для обучения и тестирования, исключить целевые признаки из обучения. Уравнять количество данных для разных производителей или использовать методы балансировки.\n",
"\n",
"Для устранения смещения применим рэсемплинг данных, либо же балансировку."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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+qmP/9tvv5WsWbMaj/PfJPb1fFLcfZFVjhw5jP9PmTJF/P39pUmTJpI6dWpZunSp9OrVS2JjY6V3796mtw8gAQoAz2n69OkqIrpmzRq9efOmXrx4UefMmaNZsmTRdOnS6aVLl1RVNSIiQmNiYmz+9uzZs+ri4qKffPKJsWzatGkqIvrNN9/E21ZsbKzxdyKiY8eOjbeOv7+/Vq9e3fh9/fr1KiKaM2dODQsLM5b//vvvKiI6fvx4474LFiyo9erVM7ajqvrgwQP19fXVOnXqxNvWa6+9psWKFTN+v3nzpoqIjhgxwlh27tw5TZUqlX7++ec2f3vo0CFNnTp1vOUnT55UEdGZM2cay0aMGKFxd82bN29WEdFff/3V5m9XrVoVb7mPj48GBgbGq71379765O7+ydo/+OAD9fT01LJly9o8pz///LM6OTnp5s2bbf5+6tSpKiK6devWeNuLq3r16sb9LV++XFOnTq0DBw60WScqKko9PT21WLFi+vDhQ2P5smXLVET0448/NpZ17txZM2TIoI0bN9Y+ffoYyzdv3qzp0qXTZs2aaYYMGeI91t69e8erLTAwUH18fGyWPXjwIF5txYoV05o1aybqPq3v3+nTpxvL2rRpo8WKFdPcuXNr586djeXWz9fZs2dV9fHnKE+ePNqgQYN49/Es7du314wZM9osy5Ahg822bty4oWnSpNG6devafFYnTpyoIqLTpk175jas79MmTZrYLO/Vq5eKiB44cEBVn/8z8ejRI/X19VUfHx+9e/euzbpxP6NPWr16tYqIzX7FWlu7du20UaNGxvLz58+rk5OTtmvXTkVEb968adz2Ip8dVdUffvhBRUTPnz9vLIv7Xld9sdfT+r5+0rx581REdP369Tbb8ff3f+pzohr/fayqWq9ePc2XL98z/w5A4tH9D8ALq127tmTLlk1y584tbdu2lYwZM8qiRYskZ86cIvL4LLmT0+PdS0xMjNy+fVsyZswohQsXlr179xr3s2DBAsmaNau899578baRUJeb59WpUyfJlCmT8XurVq0kR44csmLFChER2b9/v5w8eVLat28vt2/fllu3bsmtW7ckPDxcatWqJZs2bTKmtLaKiIh4aiuI1cKFCyU2NlbatGlj3OetW7fEy8tLChYsKOvXr7dZPyoqSkQeP19PM2/ePHFzc5M6derY3GfZsmUlY8aM8e4zOjraZr1bt24leFY+rsuXL8t3330nw4cPj9cFad68eVK0aFEpUqSIzX1au3w+uf2n2blzp7Rp00ZatmwpY8eOtblt9+7dcuPGDenVq5fNcxwYGChFihSR5cuXx7u/rl27yuzZs40uiNOnT5cWLVqIm5vbc9XzNHFbO+7evSuhoaFStWpVm/etVURERLzn+snuZk/as2ePzJs3T4KDg43PyNNMmjRJbt++LSNGjHihx/A879U1a9ZIVFSU9OvXz6aOd955R1xdXRN8zhPyZKuH9bNs/aw972di3759cvbsWenXr1+81ty4+4In39+lSpWScuXKybx58+LV1rVrV1m1apVcu3ZNRB7PqhgQECCFChV6rsf2LM/z2X3S87yeT76fnuza+Lzivo9DQ0Pl1q1bUr16dTlz5oyEhoYm6j4BPBvd/wC8sEmTJkmhQoUkderUkj17dilcuLDNgVlsbKy
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1kAAAJSCAYAAAAxsQ9EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACibklEQVR4nOzdd1gU5/f38bNYsIJiQ9QIdsWCoiD2gmIXjV2jsUfjN/ZCEjWmiCWxJJoYk9iSGHtJYu8t9m4sUaOxdxFBAYXz/OGz82MFjOLAYny/rmsv3dnZmTPLzux8Zu65x6KqKgAAAAAAUzjYuwAAAAAA+C8hZAEAAACAiQhZAAAAAGAiQhYAAAAAmIiQBQAAAAAmImQBAAAAgIkIWQAAAABgIkIWAAAAAJiIkAUAAAAAJiJkAQCQDEaPHi0xMTEiIhITEyPBwcF2rggAkFQIWQBk1qxZYrFYjEe6dOmkSJEi0qdPH7l+/bq9ywP+E2bPni2ff/65XLp0Sb744guZPXu2vUsCACSR1PYuAEDK8fHHH4uHh4dERETI9u3b5ZtvvpGVK1fKsWPHJEOGDPYuD3ilffzxx9KxY0cZOnSoODo6yk8//WTvkgAASYSQBcBQv359KV++vIiIdOvWTbJlyyYTJkyQ5cuXS9u2be1cHfBqa926tdSsWVPOnDkjhQsXlhw5cti7JABAEqG5IIAE1apVS0REzp07JyIid+7ckUGDBkmpUqUkU6ZM4uTkJPXr15fDhw/HeW9ERIR89NFHUqRIEUmXLp3kzp1bmjdvLmfPnhURkfPnz9s0UXz6UaNGDWNamzdvFovFIvPnz5f3339fXF1dJWPGjNKkSRO5ePFinHnv3r1b6tWrJ87OzpIhQwapXr267NixI95lrFGjRrzz/+ijj+KM+9NPP4m3t7ekT59eXFxcpE2bNvHO/1nLFltMTIxMmjRJPD09JV26dJIrVy7p2bOn3L1712Y8d3d3adSoUZz59OnTJ84046t9/PjxcT5TEZHIyEgZOXKkFCpUSBwdHSVfvnwyZMgQiYyMjPeziq1GjRpxpvfZZ5+Jg4ODzJ0712b4woULjc8te/bs0qFDB7l8+bLNOG+//bZYLBbx8vKKM6/g4GCxWCySKVOmOMua0MPd3d1m3M8//1wqVaok2bJlk/Tp04u3t7csWrQozrwsFov06dMnzvBGjRrZTNP6N541a5bNeO+++65YLBZ5++23jWHW5rjnz5+XnDlzGnWULl063mk87enmvP/2XT148KDUr19fnJycJFOmTFK7dm3ZtWtXnOmGhIRI//79xd3dXRwdHSVv3rzSsWNHuXXrls141r/Nv8335MmT0qJFC3FxcZF06dJJ+fLl5ddff33mson832f5+eefy8SJEyV//vySPn16qV69uhw7dizO+M87n39bvuDgYPH09JQMGTKIi4uLNGnSRA4cOBBvbRaLRZYtW2bzWkREhGTNmtWo3eqjjz565t8rvr93QuOeP3/eZpznWbet28v4vt+ZMmWK97sZ3+PSpUsiInLkyBF5++23pUCBApIuXTpxdXWVLl26yO3bt+NMH8D/4UwWgARZA1G2bNlEROTvv/+WZcuWScuWLcXDw0OuX78u3377rVSvXl2OHz8ubm5uIiISHR0tjRo1kg0bNkibNm2kb9++cv/+fVm3bp0cO3ZMChYsaMyjbdu20qBBA5v5BgUFxVvPZ599JhaLRYYOHSo3btyQSZMmib+/vxw6dEjSp08vIiIbN26U+vXri7e3t4wcOVIcHBxk5syZUqtWLdm2bZv4+PjEmW7evHmNTgjCwsKkV69e8c57+PDh0qpVK+nWrZvcvHlTvvrqK6lWrZocPHhQsmTJEuc9PXr0kKpVq4qIyJIlS2Tp0qU2r/fs2VNmzZolnTt3lvfee0/OnTsnU6ZMkYMHD8qOHTskTZo08X4OLyIkJCTeDhZiYmKkSZMmsn37dunRo4cUL15cjh49KhMnTpS//vorzg7lv5k5c6Z8+OGH8sUXX0i7du2M4dblq1ChggQHB8v169dl8uTJsmPHjjifW+rUqeXPP/+UgwcPStmyZW2mkS5dunjnW6dOHenYsaPNsC+++CJOUJ08ebI0adJE2rdvL1FRUTJv3jxp2bKl/P7779KwYcMXWtaEnDlzRr777rvnGvfHH3+Uo0ePvtD0rc15reL7rv75559StWpVcXJykiFDhkiaNGnk22+/lRo1asiWLVvE19fXeG/VqlXlxIkT0qVLFylXrpzcunVLfv31V7l06ZJkz57dZrrZs2eXiRMnGs/feuutOPOtXLmy5MmTR4YNGyYZM2aUBQsWSGBgoCxevFiaNWv2r8s3Z84cuX//vrz77rsSEREhkydPllq1asnRo0clV65cLzSf51m+NWvWSMOGDaVQoUJy/fp1+fnnn6Vy5cqyevVqqV69uk1t6dKlk5kzZ0pgYKAxbMmSJRIREZHg8nzzzTc2BwbOnTsnI0aMSHD8Zs2aSfPmzUVEZNu2bTJ9+vRnfl4JrduJ8fR3S0TExcVFRETWrVsnf//9t3Tu3FlcXV3lzz//lOnTp8uff/4pu3btinOgB8D/pwBeezNnzlQR0fXr1+vNmzf14sWLOm/ePM2WLZumT59eL126pKqqERERGh0dbfPec+fOqaOjo3788cfGsBkzZqiI6IQJE+LMKyYmxnifiOj48ePjjOPp6anVq1c3nm/atElFRPPkyaOhoaHG8AULFqiI6OTJk41pFy5cWAMCAoz5qKo+ePBAPTw8tE6dOnHmValSJS1ZsqTx/ObNmyoiOnLkSGPY+fPnNVWqVPrZZ5/ZvPfo0aOaOnXqOMNPnz6tIqKzZ882ho0cOVJjb3K3bdumIqI///yzzXtXr14dZ3j+/Pm1YcOGcWp/99139enN+NO1DxkyRHPmzKne3t42n+mPP/6oDg4Oum3bNpv3T5s2TUVEd+zYEWd+sVWvXt2Y3ooVKzR16tQ6cOBAm3GioqI0Z86cWrJkSX348KEx/Pfff1cR0REjRhjDOnXqpBkzZtTGjRtrnz59jOHbtm3T9OnTa2BgoGbMmDHOsr777rtxamvYsKHmz5/fZtiDBw/i1FayZEmtVatWoqZp/f7OnDnTGNaqVSstWbKk5suXTzt16mQMt65f586dU9Un69Ebb7yh9evXjzON+Fjfv3fvXpvh8X1XAwMDNW3atHr27Flj2JUrVzRz5sxarVo1Y9iIESNURHTJkiVx5hd73VFVbd++vXp4eNgMe3q+tWvX1lKlSmlERITNdCpVqqSFCxd+5vJZP8vY2xpV1d27d6uIaP/+/V94Pi+yfFZhYWFatGhRLVy4sLGds9bWtm1bTZ06tV67ds2mlnbt2sXZjlnX9Zs3b9pMf+/evfH+vR89eqQioqNGjTKGPf2dUX3+ddu6vVy4cGGcZcyYMWO8382nv1uxPb3uqKr+8ssvKiK6devWBN8HvO5oLgjA4O/vLzly5JB8+fJJmzZtJFOmTLJ06VLJkyePiIg4OjqKg8OTzUZ0dLTcvn1bMmXKJEWLFrVpZrN48WLJnj27/O9//4szj5c56tmxY0fJnDmz8bxFixaSO3duWblypYiIHDp0SE6fPi3t2rWT27dvy61bt+TWrVsSHh4utWvXlq1btxpdaFtFREQkeJbEasmSJRITEyOtWrUypnnr1i1xdXWVwoULy6ZNm2zGj4qKEpEnn1dCFi5cKM7OzlKnTh2baXp7e0umTJniTPPRo0c24926deuZR9FFRC5fvixfffWVDB8+PE5Tu4ULF0rx4sWlWLFiNtO0NhF9ev4J2bNnj7Rq1UrefPNNGT9+vM1r+/btkxs3bkjv3r1tPuOGDRtKsWLFZMWKFXGm16VLF5k7d67RZHHmzJnSvHlzcXZ2fq56EmI90ykicvfuXbl3755UrVo1TvMwkSffiac/60ePHj1z+vv375eFCxdKcHCwsY4kZOrUqXL79m0ZOXJk4hYmAdHR0bJ27VoJDAyUAgUKGMNz584t7dq1k+3bt0toaKiIPFlHy5QpE+8ZpqfX0aioqGd+l+/cuSMbN26
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Балансировка данных. Визуализация до ресэмплинга\n",
"plt.figure(figsize=(10, 6))\n",
"df['Company'].value_counts().plot(kind='bar', color='blue')\n",
"plt.title('Распределение компаний до ресэмплинга')\n",
"plt.xlabel('Компания')\n",
"plt.ylabel('Количество')\n",
"plt.xticks(rotation=45)\n",
"plt.show()\n",
"\n",
"# Пример ресэмплинга\n",
"brand_counts = df['Company'].value_counts()\n",
"min_count = brand_counts.min()\n",
"balanced_data = pd.concat([df[df['Company'] == brand].sample(min_count) for brand in brand_counts.index])\n",
"\n",
"# Визуализация после ресэмплинга\n",
"plt.figure(figsize=(10, 6))\n",
"balanced_data['Company'].value_counts().plot(kind='bar', color='green')\n",
"plt.title('Распределение компаний после ресэмплинга')\n",
"plt.xlabel('Компания')\n",
"plt.ylabel('Количество')\n",
"plt.xticks(rotation=45)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Рэсемплинг данных позволил нам изменить размер выборки, чтобы достичь более сбалансированного распределения классов, чтобы повысить общую эффективность анализа данных. Устанили перекос (дисбаланс) данных и добились более равномерное распределение компаний (брендов) ноутбуков."
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Количество выявленных выбросов: 101\n",
"Количество записей после удаления выбросов: 1174\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7oAAAIjCAYAAAAtGmdSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABDKklEQVR4nO3deZxWZd0/8O/MwMywOCD7IgKyuCCgoRhuaKBImlgKpjzuCi6k/korM0Mtsx6fxywllxa0R4tUVMzccF8CURNRUUQYNVF2WZV1zu8PXnPHMAOMxDB48X6/XvPS+5zrnPM9133dN/OZs+VlWZYFAAAAJCK/tgsAAACArUnQBQAAICmCLgAAAEkRdAEAAEiKoAsAAEBSBF0AAACSIugCAACQFEEXAACApAi6AACbUVZWFvPnz4+ZM2fWdikAVIOgCwBfUIcOHeL000+v7TKoYbNnz46LL7442rdvH4WFhdG8efPYa6+9YsmSJbVdGgCbIegCX2q333575OXl5X6Ki4uja9euMWLEiJgzZ05tl8d26PTTT68wZkpKSqJnz57xv//7v7Fy5craLo/txHvvvRf7779/jBkzJoYPHx4PPfRQjB8/Pp588slo0KBBbZcHwGbUqe0CALaGq6++Ojp27BgrVqyIF154IW6++eZ4+OGH480334z69evXdnlsZ4qKiuL3v/99REQsWrQoxo4dG5dcckm8/PLLMWbMmM0uP23atMjP97filA0fPjwKCwtj4sSJ0bZt29ouB4AvSNAFkjBw4MDYb7/9IiLi7LPPjqZNm8b1118f48aNi5NOOqmWq2N7U6dOnfiv//qv3Ovzzz8/DjjggPjrX/8a119/fbRp06bSMlmWxYoVK6JevXpRVFS0LcutFevv747m1Vdfjaeeeioef/xxIRfgS8qfo4Ekfe1rX4uIiNLS0oiIWLhwYVxyySXRvXv3aNiwYZSUlMTAgQPj9ddfr7TsihUr4sorr4yuXbtGcXFxtG7dOr71rW/FjBkzIiLi/fffr3Dq64Y/hx12WG5dzzzzTOTl5cVf//rX+NGPfhStWrWKBg0axLHHHhv/+te/Km37pZdeiqOOOioaNWoU9evXj759+8aLL75Y5T4edthhVW7/yiuvrNT2zjvvjF69ekW9evWiSZMm8e1vf7vK7W9q39ZXVlYWN9xwQ3Tr1i2Ki4ujZcuWMXz48Pj0008rtOvQoUMcc8wxlbYzYsSISuusqvbrrruuUp9GRKxcuTJGjhwZnTt3jqKiomjXrl18//vf3+JTj/Pz83PbeP/99yvU/thjj8V+++0X9erVi1tvvTU3b8NrdBctWhT/7//9v+jQoUMUFRXFLrvsEqeeemrMnz+/Rup+55134oQTTogmTZpEcXFx7LfffvHggw9WaHPllVdW6ueIf5/yX76vm9vfmTNnxuDBg6NJkyZRv379+OpXvxp///vfK633xhtvjG7dukX9+vVj5513jv322y/+/Oc/b3ZfNveZ25gOHTrkxmd+fn60atUqTjzxxPjwww9zbcrH9P/8z/9sdD0b9tPEiROjuLg4ZsyYEd26dYuioqJo1apVDB8+PBYuXFhh2cMOOyz23nvvePXVV+PAAw+MevXqRceOHeOWW26ptJ25c+fGWWedFS1btozi4uLo2bNn3HHHHZXalZWVxa9//evo3r17FBcXR/PmzeOoo46KV155Jddm9OjR8bWvfS1atGgRRUVFsddee8XNN9+80T66+OKLK80bMGBA5OXlVfiMln9nPfPMMxXaHn300Rv9fgHYHjmiCySp/Bfkpk2bRsS6X9QfeOCBGDx4cHTs2DHmzJkTt956a/Tt2zemTp2aO4K3du3aOOaYY+LJJ5+Mb3/723HRRRfF0qVLY/z48fHmm29Gp06dcts46aST4utf/3qF7V522WVV1nPNNddEXl5e/OAHP4i5c+fGDTfcEP3794/Jkyfnjpg99dRTMXDgwOjVq1eMHDky8vPzc7/MPv/889G7d+9K691ll13i2muvjYiIZcuWxXnnnVfltq+44ooYMmRInH322TFv3ry48cYb49BDD43XXnstGjduXGmZYcOGxSGHHBIREffdd1/cf//9FeYPHz48br/99jjjjDPiwgsvjNLS0rjpppvitddeixdffDHq1q1bZT98EYsWLcrt2/rKysri2GOPjRdeeCGGDRsWe+65Z7zxxhvxq1/9Kt5999144IEHtmh7G46ZiHWnKJ900kkxfPjwOOecc2L33Xevctlly5bFIYccEm+//XaceeaZ8ZWvfCXmz58fDz74YHz00UfRrFmzrVr3W2+9FQcddFC0bds2fvjDH0aDBg3i7rvvjuOOOy7Gjh0b3/zmN7eoD6ra3zlz5sSBBx4Yn332WVx44YXRtGnTuOOOO+LYY4+Ne++9N7et3/3ud3HhhRfGCSecEBdddFGsWLEipkyZEi+99FKcfPLJG93mF/nMVeWQQw6JYcOGRVlZWbz55ptxww03xMcffxzPP//8FvVBRMSCBQtixYoVcd5558XXvva1OPfcc2PGjBkxatSoeOmll+Kll16qcFT/008/ja9//esxZMiQOOmkk+Luu++O8847LwoLC+PMM8+MiIjPP/88DjvssHjvvfdixIgR0bFjx7jnnnvi9NNPj0WLFsVFF12UW99ZZ50Vt99+ewwcODDOPvvsWLNmTTz//PMxceLE3JkrN998c3Tr1i2OPfbYqFOnTvztb3+L888/P8rKyuKCCy6osD/FxcVx1113xXXXXZf7bH700Ufx5JNPRnFx8Wb747nnnouHH354i/sToFZkAF9io0ePziIie+KJJ7J58+Zl//rXv7IxY8ZkTZs2zerVq5d99NFHWZZl2YoVK7K1a9dWWLa0tDQrKirKrr766ty0P/7xj1lEZNdff32lbZWVleWWi4jsuuuuq9SmW7duWd++fXOvn3766SwisrZt22ZLlizJTb/77ruziMh+/etf59bdpUuXbMCAAbntZFmWffbZZ1nHjh2zI444otK2DjzwwGzvvffOvZ43b14WEdnIkSNz095///2soKAgu+aaayos+8Ybb2R16tSpNH369OlZRGR33HFHbtrIkSOz9f+5eP7557OIyO66664Kyz766KOVprdv3z47+uijK9V+wQUXZBv+E7Rh7d///vezFi1aZL169arQp//3f/+X5efnZ88//3yF5W+55ZYsIrIXX3yx0vbWd9ppp2UNGjTI5s2bl82bNy977733sp///OdZXl5e1qNHjwq1R0T26KOPVlpH+/bts9NOOy33+ic/+UkWEdl9991XqW35+/mf1r2+fv36Zd27d89WrFhRYTsHHnhg1qVLl9y0Dd+7cuWfm9LS0s3u78UXX5xFRIW6ly5dmnXs2DHr0KFD7nM1aNCgrFu3btXeh3LV+cxtzIbvQ5Zl2cknn5zVr18/93pTn9dyG/ZT+et+/fpla9asyU0v77cbb7wxN61v375ZRGT/+7//m5u2cuXKbJ999slatGiRrVq1KsuyLLvhhhuyiMjuvPPOXLtVq1Zlffr0yRo2bJj7fnjqqaeyiMguvPDCTfbHZ599Vmn+gAEDst12263CtPbt22dHHHFE1qxZs+zee+/NTf/pT3+aHXjggZU+o+XfWU8//XRu2gEHHJANHDiw0mcUYHvm1GUgCf3794/mzZtHu3bt4tvf/nY0bNgw7r///tz1dUVFRbmbB61duzYWLFgQDRs2jN133z3++c9/5tYzduzYaNasWXznO9+ptI2qTgGtrlNPPTV22mmn3OsTTjghWrdunTtKMnny5Jg+fXqcfPLJsWDBgpg/f37Mnz8/li9fHv369YvnnnsuysrKKqxzxYoVmz0ac99990VZWVkMGTIkt8758+dHq1atokuXLvH0009XaL9q1aqIiE1eg3rPPfdEo0aN4ogjjqiwzl69ekXDhg0rrXP16tUV2s2fPz9WrFixybpnzZoVN954Y1xxxRXRsGHDStvfc889Y4899qiwzvLT1TfcflWWL18ezZs3j+bNm0fnzp3jRz/6UfTp06fSkeuOHTvGgAE
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7oAAAIjCAYAAAAtGmdSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA8j0lEQVR4nO3dd5xU5b348e+CsCAIKCBIEekqdlRUBDQiJRg19hK74DUg0WsLMYqQ2G9ssSdRNHqtxBKjKCjYwlU0dhARQWOjKUUUQfb5/eFv5zLsUuSC4MP7/XrtS3fOmXOeMztnmM/MmTMlKaUUAAAAkIkqa3sAAAAAsDoJXQAAALIidAEAAMiK0AUAACArQhcAAICsCF0AAACyInQBAADIitAFAAAgK0IXAID/k5RSfP755zFp0qS1PRSAiBC6AKwmW2yxRRx//PFrexjAD2TevHnx29/+Ntq3bx/Vq1eP+vXrR7t27WLixIlre2gAQhdyNGzYsCgpKSn81KhRI9q1axcDBgyIadOmre3hsQ46/vjji+4zderUie233z7+8Ic/xDfffLO2hwesY2bNmhW77757XHvttXHIIYfEww8/HCNHjowxY8bEFltssbaHBxAbrO0BAGvO0KFDo2XLlrFgwYJ4/vnn48Ybb4zHHnss3nrrrdhwww3X9vBYx5SWlsaf//zniIiYPXt2DB8+PM4666wYN25c3HPPPSu8/sSJE6NKFa+fwvrg7LPPjk8//TTGjh0bHTp0WNvDAahA6ELGevfuHTvvvHNERJx88slRv379uPLKK+Phhx+OI488ci2PjnXNBhtsEL/4xS8Kv//yl7+MTp06xb333htXXnllNGnSpMJ1UkqxYMGCqFmzZpSWlv6Qw10rltxeWF9Nnz49br/99rjppptELrDO8tI7rEd+8pOfRETElClTIiLi888/j7POOiu23XbbqF27dtSpUyd69+4dr7/+eoXrLliwIC688MJo165d1KhRIzbbbLM46KCDYvLkyRERMXXq1KJDX5f+2WuvvQrLGjNmTJSUlMS9994bv/nNb6Jx48ZRq1at2H///ePf//53hXW/+OKL0atXr6hbt25suOGG0a1bt3jhhRcq3ca99tqr0vVfeOGFFea98847o2PHjlGzZs3YZJNN4ogjjqh0/cvbtiWVlZXF1VdfHR06dIgaNWpEo0aN4pRTTokvvviiaL4tttgi9ttvvwrrGTBgQIVlVjb2K664osJtGhHxzTffxODBg6NNmzZRWloazZs3j3POOWeVDz2uUqVKYR1Tp04tGvsTTzwRO++8c9SsWTNuvvnmwrSlP6M7e/bsOOOMM2KLLbaI0tLSaNasWRx77LExc+bMNTLud955Jw455JDYZJNNokaNGrHzzjvHI488UjTPhRdeWOF2jvjfQ/7Lt3VF2/v+++/HoYceGptssklsuOGGsdtuu8U//vGPCsv94x//GB06dIgNN9wwNt5449h5553jv//7v5e7HeX7yLJ+lr6dV3YsK9qPl76NVrTejz/+OE488cRo1KhRlJaWRocOHeLWW29d7rZFRHTr1i223377Sqe1b98+evbsWXTZ0h/HKP9Z+hDZN954I44//vho1apV1KhRIxo3bhwnnnhizJo1q9J1bbHFFpUud8yYMUXzPf7449GlS5eoVatWbLTRRtGnT594++23i+Y5/vjjo3bt2hXW8cADD1RY5l577VVh/x03blyljytffvllnHnmmdGqVauoVq1a0TiX3I8qs/TjYYMGDaJPnz7x1ltvFc1XUlISAwYMWOZylt43xo0bF2VlZbFw4cLYeeedo0aNGlG/fv048sgj48MPP6z0dnn//fejZ8+eUatWrWjSpEkMHTo0UkpF886fPz/OPPPMaN68eZSWlkb79u3jv/7rvyrMF/Hd4/euu+5a2K+6du0aTz75ZNE8N9xwQ3To0CFKS0ujSZMm0b9//5g9e/Yq3UbAj493dGE9Uv5ktn79+hHx3ZPjhx56KA499NBo2bJlTJs2LW6++ebo1q1bjB8/vvAO3uLFi2O//faLp556Ko444oj41a9+FfPmzYuRI0fGW2+9Fa1bty6s48gjj4yf/vSnResdNGhQpeO56KKLoqSkJM4999yYPn16XH311dG9e/d47bXXCu+YPf3009G7d+/o2LFjDB48OKpUqRK33XZb/OQnP4nnnnsudt111wrLbdasWVxyySUR8d2TxFNPPbXSdZ9//vlx2GGHxcknnxwzZsyIP/7xj9G1a9d49dVXo169ehWu069fv+jSpUtERPztb3+LBx98sGj6KaecEsOGDYsTTjghBg4cGFOmTInrrrsuXn311XjhhReiWrVqld4O38fs2bML27aksrKy2H///eP555+Pfv36xVZbbRVvvvlmXHXVVfHuu+/GQw89tErrW/o+E/HdIcpHHnlknHLKKdG3b99o3759pdf98ssvo0uXLjFhwoQ48cQTY6eddoqZM2fGI488Eh999FE0aNBgtY777bffjs6dO0fTpk3j17/+ddSqVSvuu+++OPDAA2P48OHx85//fJVug8q2d9q0abHHHnvEV199FQMHDoz69evH7bffHvvvv3888MADhXX96U9/ioEDB8YhhxwSv/rVr2LBggXxxhtvxIsvvhhHHXXUCtc9cODA2GWXXYouO/nkk4t+X9mxfJ/9uNxf//rXwv+fccYZFda72267FSKpYcOG8fjjj8dJJ50Uc+fOjdNPP32Z23XMMcdE375946233optttmmcPm4cePi3Xffjd/+9reVXq/84xgREX/4wx8qvIg0cuTIeP/99+OEE06Ixo0bx9tvvx233HJLvP322/E///M/lb7A0aVLl+jXr19EREyYMCEuvvjiCrfBcccdFz179ozLLrssvvrqq7jxxhtjzz33jFdffXW1fR713HPPrfTys88+O2666aY46aSTonPnzlGtWrVKH3+WZcstt4zzzjsvUkoxefLkuPLKK+OnP/1phSD9PspfOBgwYEB07NgxLr300pgxY0Zce+218fzzz8err74aDRo0KMy/ePHi6NWrV+y2225x+eWXx4gRI2Lw4MHx7bffxtChQyPiu6Ml9t9//xg9enScdNJJscMOO8QTTzwRZ599dnz88cdx1VVXFZY3ZMiQuPDCC2OPPfaIoUOHRvXq1ePFF1+Mp59+Onr06BER371YM2TIkOjevXuceuqpMXHixLjxxhtj3LhxFR6P18RtBKwDEpCd2267LUVEGjVqVJoxY0b697//ne65555Uv379VLNmzfTRRx+llFJasGBBWrx4cdF1p0yZkkpLS9PQoUMLl916660pItKVV15ZYV1lZWWF60VEuuKKKyrM06FDh9StW7fC76NHj04RkZo2bZrmzp1buPy+++5LEZGuueaawrLbtm2bevbsWVhPSil99dVXqWXLlmnfffetsK499tgjbbPNNoXfZ8yYkSIiDR48uHDZ1KlTU9WqVdNFF11UdN0333wzbbDBBhUunzRpUoqIdPvttxcuGzx4cFryIfS5555LEZHuuuuuouuOGDGiwuUtWrRIffr0qTD2/v37p6Uflpce+znnnJM23XTT1LFjx6Lb9K9//WuqUqVKeu6554quf9NNN6WISC+88EKF9S3puOOOS7Vq1UozZsxIM2bMSO+99166+OKLU0lJSdpuu+2Kxh4RacSIERWW0aJFi3TccccVfr/gggtSRKS//e1vFeYt/3v+X8e9pH322Sdtu+22acGCBUXr2WOPPVLbtm0Lly39tytXvt9MmTJlhdt7+umnp4goGve8efNSy5Yt0xZbbFHYrw444IDUoUOHld6GcuX7yP33319hWq1atYpu55Udy8rsx+XOO++8VFJSUnTZ0n/fk046KW222WZp5syZRfMdccQRqW7duumrr75a5vbNnj071ahRI5177rlFlw8cODDVqlUrffnll0WX33LLLSki0ssvv1y4rE+fPqlFixZF81W2zrvvvjtFRHr22WcrTGvatGk64YQTCr+X3+6jR49OKX13O9arVy/17du36HqfffZZqlu3btH
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"\n",
"# Вычисление медианы для 'Price_euros'\n",
"median_price = df['Price_euros'].median()\n",
"\n",
"# Вычисление абсолютных отклонений от медианы\n",
"df['absolute_deviation'] = np.abs(df['Price_euros'] - median_price)\n",
"\n",
"# Вычисление медианного абсолютного отклонения (MAD)\n",
"mad = df['absolute_deviation'].median()\n",
"\n",
"# Определение порога для выбросов. Вы можете настроить множитель в зависимости от ваших предпочтений\n",
"threshold = 3 * mad\n",
"\n",
"# Выявление выбросов\n",
"outliers = df[df['absolute_deviation'] > threshold]\n",
"\n",
"# Удаление выбросов из набора данных\n",
"datalaptop_cleaned = df[df['absolute_deviation'] <= threshold].drop(columns=['absolute_deviation'])\n",
"\n",
"# Вывод количества найденных выбросов и оставшихся записей\n",
"print(f\"Количество выявленных выбросов: {len(outliers)}\")\n",
"print(f\"Количество записей после удаления выбросов: {len(datalaptop_cleaned)}\")\n",
"\n",
"# Визуализация результатов\n",
"plt.figure(figsize=(12, 6))\n",
"sns.boxplot(x=df['Price_euros'])\n",
"plt.title('Распределение Price_euros с выбросами')\n",
"plt.show()\n",
"\n",
"plt.figure(figsize=(12, 6))\n",
"sns.boxplot(x=datalaptop_cleaned['Price_euros'])\n",
"plt.title('Распределение Price_euros после удаления выбросов')\n",
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Медиальный способ борьбы с выбросами позволяет сохранить структуру даныых, создать устойчивость к этим выбросать, чтобы избежать смещения данных, если использовали бы среднее. Если имеются товары с высоко аномальной ценой, то замена на медиану позволит сократить влияние на данные. Удаление выбросов вдобавок и решает проблему зашумлённости данных. Выбросы - это одна из форм шума и удаление их позволяеи сделать данные чище и менее зашумлённые."
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Размер обучающей выборки: 765\n",
"Размер валидационной выборки: 255\n",
"Размер тестовой выборки: 255\n",
"Company float64\n",
"Product float64\n",
"TypeName float64\n",
"Inches float64\n",
"Ram int64\n",
"OS float64\n",
"Weight float64\n",
"Screen float64\n",
"ScreenW int64\n",
"ScreenH int64\n",
"Touchscreen float64\n",
"IPSpanel float64\n",
"RetinaDisplay float64\n",
"CPU_company float64\n",
"CPU_freq float64\n",
"CPU_model float64\n",
"PrimaryStorage int64\n",
"SecondaryStorage int64\n",
"PrimaryStorageType float64\n",
"SecondaryStorageType float64\n",
"GPU_company float64\n",
"GPU_model float64\n",
"dtype: object\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1IAAAIjCAYAAAAJLyrXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB1zUlEQVR4nO3dd3gU5f7+8XvTQyoB0iAkdBBCC0V6FyKgCMqhKKBIR49ixQaiR+zlKFKOCiggSEdUkBpEEWmhdwOhJdT0nszvj/zYL0tCmRhIAu/Xde0F+0z77E5md++ZZ2YshmEYAgAAAADcNLuiLgAAAAAAShqCFAAAAACYRJACAAAAAJMIUgAAAABgEkEKAAAAAEwiSAEAAACASQQpAAAAADCJIAUAAAAAJhGkAAAAAMAkghQAAABuibZt26pt27bW58eOHZPFYtGMGTOKrCagsBCkgEI0Y8YMWSwW68PFxUXVq1fX6NGjFRsbW9TlAQAAoJA4FHUBwJ1owoQJqlSpktLS0rRx40ZNnjxZP//8s/bs2aNSpUoVdXkAABSJ4OBgpaamytHRsahLAf4xghRwC4SHh6tRo0aSpCeffFJlypTRxx9/rKVLl6pv375FXB0AoKRITk6Wm5tbUZdRaC731gDuBHTtA26D9u3bS5KioqIkSRcvXtTzzz+v0NBQubu7y9PTU+Hh4dq5c2eeadPS0jR+/HhVr15dLi4uCggIUM+ePXX06FFJ/9ff/FqPK/umr1+/XhaLRfPmzdMrr7wif39/ubm56YEHHtCJEyfyLHvz5s3q0qWLvLy8VKpUKbVp00a///57vq+xbdu2+S5//PjxecadNWuWwsLC5OrqKh8fH/Xp0yff5V/vtV0pJydHn376qWrXri0XFxf5+flp2LBhunTpks14ISEh6tatW57ljB49Os8886v9gw8+yPOeSlJ6errGjRunqlWrytnZWUFBQXrxxReVnp6e73t1pbZt26pOnTp52j/88ENZLBYdO3bMpj0uLk7PPPOMgoKC5OzsrKpVq+q9995TTk5OnnmMHz8+3/du0KBBNuOdOnVKTzzxhPz8/OTs7KzatWvrm2++sRnn8t/O5Yezs7OqV6+uiRMnyjAMm3F37Nih8PBweXp6yt3dXR06dNCff/5pM87V3WCvfJw8edI63tq1a9WqVSu5ubnJ29tbDz74oPbv33/D9/Xqeq/3HlyuZcOGDRo2bJjKlCkjT09PDRgwIN+/oavfv/nz58tisSgkJMTadvDgQbVv317+/v7Wv4nhw4fr4sWLeWpcsGBBnvrd3d1tlnOznxmX57l+/Xpr2+nTpxUSEqJGjRopKSlJkpSRkaE33nhDYWFh8vLykpubm1q1aqV169bd8L29/D5c7/29UlZWlt566y1VqVJFzs7OCgkJ0SuvvJLv9vHLL7+oTZs28vDwkKenpxo3bqw5c+bYjFPYnwvXcqO/vQULFshisSgiIiLPtFOnTpXFYtGePXusbQcOHNDDDz8sHx8fubi4qFGjRlq2bJnNdJf/FiMiIjRy5Ej5+vqqQoUKkqTExEQ988wzCgkJkbOzs3x9fdWpUydt377dOv1vv/2mRx55RBUrVrT+3T377LNKTU21Wc6gQYPk7u6u6OhodevWTe7u7ipfvrwmTZokSdq9e7fat28vNzc3BQcH51kHZraZq+V3jtTlek6dOqUePXrI3d1d5cqV0/PPP6/s7Gyb6S9cuKDHHntMnp6e8vb21sCBA7Vz507Ou0KR4IgUcBtcDj1lypSRJP39999asmSJHnnkEVWqVEmxsbGaOnWq2rRpo3379ikwMFCSlJ2drW7dumnNmjXq06eP/v3vfysxMVGrVq3Snj17VKVKFesy+vbtq/vvv99muWPHjs23nv/85z+yWCx66aWXdPbsWX366afq2LGjIiMj5erqKin3R0R4eLjCwsI0btw42dnZafr06Wrfvr1+++03NWnSJM98K1SooIkTJ0qSkpKSNGLEiHyX/frrr6t379568sknde7cOX3++edq3bq1duzYIW9v7zzTDB06VK1atZIkLVq0SIsXL7YZPmzYMM2YMUOPP/64nn76aUVFRemLL77Qjh079PvvvxdKF5K4uDjra7tSTk6OHnjgAW3cuFFDhw5VrVq1tHv3bn3yySc6dOiQlixZ8o+XfVlKSoratGmjU6dOadiwYapYsaL++OMPjR07VmfOnNGnn36a73Tfffed9f/PPvuszbDY2Fjde++9slgsGj16tMqVK6dffvlFgwcPVkJCgp555hmb8V955RXVqlVLqamp1kDu6+urwYMHS5L27t2rVq1aydPTUy+++KIcHR01depUtW3bVhEREWratKnN/C53g72Sj4+PJGn16tUKDw9X5cqVNX78eKWmpurzzz9XixYttH37dpvgci1PP/20GjdubNP25JNP5jvu6NGj5e3trfHjx+vgwYOaPHmyjh8/bg0n+cnKytKrr76apz05OVkVKlRQ9+7d5enpqT179mjSpEk6deqUfvzxxxvWfbWb/cy4Wnx8vMLDw+Xo6Kiff/5Z7u7ukqSEhAR99dVX6tu3r4YMGaLExER9/fXX6ty5s/766y/Vr1//hjXVr19fzz33nE3bt99+q1WrVtm0Pfnkk5o5c6YefvhhPffcc9q8ebMmTpyo/fv322zLM2bM0BNPPKHatWtr7Nix8vb21o4dO7RixQr169cvz/Jv5efCzfztde3aVe7u7vrhhx/Upk0bm+nnzZun2rVrW3eS7N27Vy1atFD58uX18ssvy83NTT/88IN69OihhQsX6qGHHrKZfuTIkSpXrpzeeOMNJScnS5KGDx+uBQsWaPTo0brnnnt04cIFbdy4Ufv371fDhg0l5Yb6lJQUjRgxQmXKlNFff/2lzz//XCdPntT8+fNtlpGdna3w8HC1bt1a77//vmbPnq3Ro0fLzc1Nr776qvr376+ePXtqypQpGjBggJo1a5ZnWy3INnMt2dnZ6ty5s5o2baoPP/xQq1ev1kcffaQqVapYv0tycnLUvXt3/fXXXxoxYoRq1qyppUuXauDAgaaWBRQaA0ChmT59uiHJWL16tXHu3DnjxIkTxty5c40yZcoYrq6uxsmTJw3DMIy0tDQjOzvbZtqoqCjD2dnZmDBhgrXtm2++MSQZH3/8cZ5l5eTkWKeTZHzwwQd5xqldu7bRpk0b6/N169YZkozy5csbCQkJ1vYffvjBkGR89tln1nlXq1bN6Ny5s3U5hmEYKSkpRqVKlYxOnTrlWVbz5s2NOnXqWJ+fO3fOkGSMGzfO2nbs2DHD3t7e+M9//mMz7e7duw0HB4c87YcPHzYkGTNnzrS2jRs3zrjyo+u3334zJBmzZ8+2mXbFihV52oODg42uXbvmqX3UqFHG1R+HV9f+4osvGr6+vkZYWJjNe/rdd98ZdnZ2xm+//WYz/ZQpUwxJxu+//55neVdq06aNUbt27TztH3zwgSHJiIqKsra99dZbhpubm3Ho0CGbcV9++WXD3t7eiI6Otml/9dVXDYvFYtMWHBxsDBw40Pp88ODBRkBAgHH+/Hmb8fr06WN4eXkZKSkphmH839/OunXrrOOkpaUZdnZ2xsiRI61tPXr0MJycnIyjR49a206fPm14eHgYrVu3trZd3la2bNlyjXfGMOrXr2/4+voaFy5csLbt3LnTsLOzMwYMGHDN6a6sd/78+XmGubm52bwHl2sJCwszMjIyrO3vv/++IclYunSpte3q9+/LL780nJ2djXbt2hnBwcHXrWnkyJGGu7t7gWq82c+MK9dTWlqa0bZtW8PX19c4cuSIzbRZWVlGenq6TdulS5cMPz8/44knnrju6zCMm9+WIiMjDUnGk08+aTPe888/b0gy1q5daxiGYcTFxRkeHh5G06ZNjdTUVJtxr/wMMozC/1zIz83+7fXt29fw9fU1srKyrG1nzpwx7OzsbNZLhw4djNDQUCMtLc3mdTVv3tyoVq2ate3y32LLli1t5mkYhuHl5WWMGjXqunVf3l6vNHHiRMNisRjHjx+3tg0cONCQZLzzzjvWtkuXLhmurq6
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1IAAAIjCAYAAAAJLyrXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABnkUlEQVR4nO3dd3gU5eL28XuTkE0gBQKEJBB670XkIL0oBERRFEWUKqCCBVQ0Nooltp8dUY8CegRRpCkqvSkiIh1BBAwdQicQJEAy7x/PuxuWJJAJIZuE7+e65oKdnZ19djezO/fTxmFZliUAAAAAQJb5eLsAAAAAAJDfEKQAAAAAwCaCFAAAAADYRJACAAAAAJsIUgAAAABgE0EKAAAAAGwiSAEAAACATQQpAAAAALCJIAUAAAAANhGkAAAArrI+ffqofPny3i5GnrB48WI5HA4tXrzYvY73B/kRQQrIhgkTJsjhcLiXgIAAVa1aVUOGDFFCQoK3iwcAAICrzM/bBQDys9GjR6tChQo6c+aMfvnlF40dO1Y//vijNm7cqMKFC3u7eAAA5Av//e9/lZqa6u1iALYQpIArEBMTo+uuu06SdP/996t48eJ66623NHPmTPXo0cPLpQMAFESWZenMmTMKDAz0dlFyTKFChbxdBMA2uvYBOaht27aSpPj4eEnS0aNH9cQTT6hOnToKCgpSSEiIYmJitG7dunSPPXPmjEaOHKmqVasqICBAkZGRuv3227V9+3ZJ0o4dOzy6E168tG7d2r0vV//zr7/+Ws8884wiIiJUpEgR3XLLLdq9e3e6516xYoU6duyo0NBQFS5cWK1atdKyZcsyfI2tW7fO8PlHjhyZbtsvv/xSjRo1UmBgoMLCwnT33Xdn+PyXem0XSk1N1TvvvKNatWopICBApUqV0qBBg3Ts2DGP7cqXL6+bb7453fMMGTIk3T4zKvsbb7yR7j2VpOTkZI0YMUKVK1eW0+lUdHS0hg8fruTk5Azfqwu1bt1atWvXTrf+zTfflMPh0I4dOzzWHz9+XI899piio6PldDpVuXJlvfbaaxnW2I4cOTLD965Pnz4e2+3du1f9+vVTqVKl5HQ6VatWLY0bN85jG9ffjmtxOp2qWrWq4uLiZFmWx7Zr1qxRTEyMQkJCFBQUpHbt2um3337z2ObibrAXLnv27HFvt3DhQrVo0UJFihRR0aJFdeutt2rz5s2XfV8vLu+l3gNXWZYuXapBgwapePHiCgkJUa9evTL8G7r4/ZsyZYocDofHOI4tW7aobdu2ioiIcP9NPPDAAzp69Gi6Mn777bfpyh8UFOTxPFn9zshojMm+fftUvnx5XXfddTp16pQk6ezZs3rhhRfUqFEjhYaGqkiRImrRooUWLVp02ffW9T5c6v290Pnz5/Xiiy+qUqVKcjqdKl++vJ555pkMj4+ffvpJrVq1UnBwsEJCQtS4cWNNmjTJY5uc/l7ISOvWrdMd51L68Tqusrz55pv65JNP3K+xcePGWrlyZbrHz5gxQ7Vr11ZAQIBq166t6dOnZ/j8dr/T5syZo+uuu06BgYH6+OOPJUnz5s1T8+bNVbRoUQUFBalatWp65pln3I/N6t/Aha9xzJgxqlixogoXLqybbrpJu3fvlmVZevHFF1WmTBkFBgbq1ltv9fg7v7Ccc+fOVf369RUQEKCaNWtq2rRpl/wccuI9nzJlimrWrOnxnjPuClcbLVJADnKFnuLFi0uS/vnnH82YMUN33nmnKlSooISEBH388cdq1aqVNm3apKioKElSSkqKbr75Zi1YsEB33323Hn30UZ08eVLz5s3Txo0bValSJfdz9OjRQ506dfJ43tjY2AzL8/LLL8vhcOipp57SwYMH9c4776h9+/Zau3atuyZz4cKFiomJUaNGjTRixAj5+Pho/Pjxatu2rX7++Wddf/316fZbpkwZxcXFSZJOnTqlBx98MMPnfv7559W9e3fdf//9OnTokN5//321bNlSa9asUdGiRdM9ZuDAgWrRooUkadq0aelOPgYNGqQJEyaob9++euSRRxQfH68PPvhAa9as0bJly3KkRvP48ePu13ah1NRU3XLLLfrll180cOBA1ahRQxs2bNDbb7+tv//+WzNmzLji53Y5ffq0WrVqpb1792rQoEEqW7asfv31V8XGxmr//v165513Mnzc//73P/f/hw4d6nFfQkKC/vOf/8jhcGjIkCEqWbKkfvrpJ/Xv31+JiYl67LHHPLZ/5plnVKNGDf3777/uQB4eHq7+/ftLkv7880+1aNFCISEhGj58uAoVKqSPP/5YrVu31pIlS9SkSROP/bm6wV4oLCxMkjR//nzFxMSoYsWKGjlypP7991+9//77atasmVavXp2lE6FHHnlEjRs39lh3//33Z7jtkCFDVLRoUY0cOVJbtmzR2LFjtXPnTnc4ycj58+f17LPPpluflJSkMmXKqEuXLgoJCdHGjRs1ZswY7d27V99///1ly32xrH5nXOzEiROKiYlRoUKF9OOPPyooKEiSlJiYqE8//VQ9evTQgAEDdPLkSX322Wfq0KGDfv/9d9WvX/+yZapfv74ef/xxj3VffPGF5s2b57Hu/vvv1+eff6477rhDjz/+uFasWKG4uDht3rzZ41ieMGGC+vXrp1q1aik2NlZFixbVmjVrNHv2bN1zzz3pnj8vfC+4TJo0SSdPntSgQYPkcDj0+uuv6/bbb9c///zjfp65c+eqW7duqlmzpuLi4nTkyBH17dtXZcqUSbc/O2XfsmWLevTooUGDBmnAgAGqVq2a/vzzT918882qW7euRo8eLafTqW3btnlUhNn9G5g4caLOnj2rhx9+WEePHtXrr7+u7t27q23btlq8eLGeeuopbdu2Te+//76eeOKJdJUxW7du1V133aUHHnhAvXv31vjx43XnnXdq9uzZuvHGG6/Ke/7DDz/orrvuUp06dRQXF6djx46pf//+Kl26tO3nA2yxANg2fvx4S5I1f/5869ChQ9bu3butyZMnW8WLF7cCAwOtPXv2WJZlWWfOnLFSUlI8HhsfH285nU5r9OjR7nXjxo2zJFlvvfVWuudKTU11P06S9cYbb6TbplatWlarVq3ctxctWmRJskqXLm0lJia613/zzTeWJOvdd99177tKlSpWhw4d3M9jWZZ1+vRpq0KFCtaNN96Y7rluuOEGq3bt2u7bhw4dsiRZI0aMcK/bsWOH5evra7388ssej92wYYPl5+eXbv3WrVstSdbnn3/uXjdixAjrwq+on3/+2ZJkTZw40eOxs2fPTre+XLlyVufOndOVffDgwdbFX3sXl3348OFWeHi41ahRI4/39H//+5/l4+Nj/fzzzx6P/+ijjyxJ1rJly9I934VatWpl1apVK936N954w5JkxcfHu9e9+OKLVpEiRay///7bY9unn37a8vX1tXbt2uWx/tlnn7UcDofHunLlylm9e/d23+7fv78VGRlpHT582GO7u+++2woNDbVOnz5tWVba386iRYvc25w5c8by8fGxHnroIfe6rl27Wv7+/tb27dvd6/bt22cFBwdbLVu2dK9zHSsrV67M5J2xrPr161vh4eHWkSNH3OvWrVtn+fj4WL169cr0cReWd8qUKenuK1KkiMd74CpLo0aNrLNnz7rXv/7665Yka+bMme51F79/H374oeV0Oq02bdpY5cqVu2SZHnroISsoKChbZczqd8aFn9OZM2es1q1bW+Hh4da2bds8Hnv+/HkrOTnZY92xY8esUqVKWf369bvk67CsrB9La9eutSRZ999/v8d2TzzxhCXJWrhwoWVZlnX8+HErODjYatKkifXvv/96bHvhd5Bl5fz3QkZatWrlcZy79O7d2+Nzdn3/Fi9e3Dp69Kh7/cyZMy1J1vfff+9eV79+fSsyMtI6fvy4e93cuXMtSR77tPudJsmaPXu2x7Zvv/22Jck6dOhQpq8xq38DrtdYsmRJj7LHxsZakqx69epZ586dc6/v0aOH5e/vb505cyZdOadOneped+LECSsyMtJq0KCBe11G3zNX8p7XqVPHKlOmjHXy5En3usW
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Количество записей в обучающей выборке до аугментации: 765\n",
"Количество записей в обучающей выборке после oversampling: 772\n",
"Количество записей в обучающей выборке после undersampling: 760\n"
]
}
],
"source": [
"from imblearn.over_sampling import RandomOverSampler\n",
"from imblearn.under_sampling import RandomUnderSampler\n",
"\n",
"# Разделение признаков и целевой переменной\n",
"X = df.drop(columns=['Price_euros']) # Признаки\n",
"y = df['Price_euros'] # Целевая переменная (для регрессии)\n",
"\n",
"# Разбиение данных на обучающую, контрольную и тестовую выборки\n",
"X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.4, random_state=42)\n",
"X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)\n",
"\n",
"print(f\"Размер обучающей выборки: {len(X_train)}\")\n",
"print(f\"Размер валидационной выборки: {len(X_val)}\")\n",
"print(f\"Размер тестовой выборки: {len(X_test)}\")\n",
"\n",
"# Все типы к числовым приводим\n",
"X_train = X_train.apply(pd.to_numeric, errors='coerce')\n",
"print(X_train.dtypes)\n",
"\n",
"# Квантилизация целевой переменной для создания категорий\n",
"y_train_cat = pd.qcut(y_train, q=4, labels=False)\n",
"\n",
"# Объединяем исходные данные и \"шумные\" данные для увеличения обучающей выборки\n",
"X_train_combined = np.vstack([X_train, X_train])\n",
"y_train_combined = np.hstack([y_train, y_train]) # Убедитесь, что y_train повторяется для новых данных\n",
"\n",
"# Применение oversampling и undersampling\n",
"ros = RandomOverSampler(random_state=42)\n",
"X_train_ros, y_train_ros = ros.fit_resample(X_train, y_train_cat)\n",
"\n",
"# Проверка распределения после oversampling\n",
"plt.figure(figsize=(10, 6))\n",
"sns.histplot(y_train_ros, bins=30, kde=True, color='green')\n",
"plt.title('Распределение целевого признака после oversampling')\n",
"plt.xlabel('Price_euros')\n",
"plt.ylabel('Частота')\n",
"plt.show()\n",
"\n",
"# Применение RandomUnderSampler\n",
"rus = RandomUnderSampler(random_state=42)\n",
"X_train_rus, y_train_rus = rus.fit_resample(X_train, y_train_cat)\n",
"\n",
"# Проверка распределения после undersampling\n",
"plt.figure(figsize=(10, 6))\n",
"sns.histplot(y_train_rus, bins=30, kde=True, color='red')\n",
"plt.title('Распределение целевого признака после undersampling')\n",
"plt.xlabel('Price_euros')\n",
"plt.ylabel('Частота')\n",
"plt.show()\n",
"\n",
"# Вывод количества данных до и после аугментации\n",
"print(f\"Количество записей в обучающей выборке до аугментации: {len(y_train)}\")\n",
"print(f\"Количество записей в обучающей выборке после oversampling: {len(y_train_ros)}\")\n",
"print(f\"Количество записей в обучающей выборке после undersampling: {len(y_train_rus)}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Набор данных, судя по числам, был относительно сбалансирован, и применение oversampling/undersampling не сильно изменил размер выборок. Использование RandomOverSampler и RandomUnderSampler для регрессионных задач не является оптимальным решением, поскольку эти методы предназначены для классификации."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Третий датафрейм: Зарплата сотрудников по обработке данных (DataScience)\n",
"Выгрузили третий датасет!!! :)"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['work_year', 'experience_level', 'employment_type', 'job_title',\n",
" 'salary', 'salary_currency', 'salary_in_usd', 'employee_residence',\n",
" 'remote_ratio', 'company_location', 'company_size'],\n",
" dtype='object')\n",
"\n",
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 3755 entries, 0 to 3754\n",
"Data columns (total 11 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 work_year 3755 non-null int64 \n",
" 1 experience_level 3755 non-null object\n",
" 2 employment_type 3755 non-null object\n",
" 3 job_title 3755 non-null object\n",
" 4 salary 3755 non-null int64 \n",
" 5 salary_currency 3755 non-null object\n",
" 6 salary_in_usd 3755 non-null int64 \n",
" 7 employee_residence 3755 non-null object\n",
" 8 remote_ratio 3755 non-null int64 \n",
" 9 company_location 3755 non-null object\n",
" 10 company_size 3755 non-null object\n",
"dtypes: int64(4), object(7)\n",
"memory usage: 322.8+ KB\n"
]
}
],
"source": [
"# Выгружаем третий датафрейм\n",
"df = pd.read_csv(\".\\\\static\\\\csv\\\\ds_salaries.csv\")\n",
"\n",
"print(df.columns)\n",
"\n",
"print()\n",
"\n",
"df.info()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Описание набора \n",
"Kaggle даёт следующие пояснения о датасете: \n",
"Целью данного исследования является изучение факторов, влияющих на заработную плату специалистов по обработке данных. Для этого был использован набор данных, содержащий различные релевантные переменные. В этом отчёте описывается исследовательский анализ, проведённый для понимания взаимосвязи между этими факторами и заработной платой специалистов по обработке данных. Наука о данных — быстро развивающаяся область, и специалисты по обработке данных играют важнейшую роль в анализе и интерпретации больших объёмов данных. Поскольку эта профессия становится всё более востребованной, важно понимать факторы, которые могут влиять на зарплату специалистов по обработке данных. Этот анализ посвящён изучению этих факторов и их влиянию на зарплату."
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>work_year</th>\n",
" <th>experience_level</th>\n",
" <th>employment_type</th>\n",
" <th>job_title</th>\n",
" <th>salary</th>\n",
" <th>salary_currency</th>\n",
" <th>salary_in_usd</th>\n",
" <th>employee_residence</th>\n",
" <th>remote_ratio</th>\n",
" <th>company_location</th>\n",
" <th>company_size</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2023</td>\n",
" <td>SE</td>\n",
" <td>FT</td>\n",
" <td>Principal Data Scientist</td>\n",
" <td>80000</td>\n",
" <td>EUR</td>\n",
" <td>85847</td>\n",
" <td>ES</td>\n",
" <td>100</td>\n",
" <td>ES</td>\n",
" <td>L</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2023</td>\n",
" <td>MI</td>\n",
" <td>CT</td>\n",
" <td>ML Engineer</td>\n",
" <td>30000</td>\n",
" <td>USD</td>\n",
" <td>30000</td>\n",
" <td>US</td>\n",
" <td>100</td>\n",
" <td>US</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2023</td>\n",
" <td>MI</td>\n",
" <td>CT</td>\n",
" <td>ML Engineer</td>\n",
" <td>25500</td>\n",
" <td>USD</td>\n",
" <td>25500</td>\n",
" <td>US</td>\n",
" <td>100</td>\n",
" <td>US</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2023</td>\n",
" <td>SE</td>\n",
" <td>FT</td>\n",
" <td>Data Scientist</td>\n",
" <td>175000</td>\n",
" <td>USD</td>\n",
" <td>175000</td>\n",
" <td>CA</td>\n",
" <td>100</td>\n",
" <td>CA</td>\n",
" <td>M</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2023</td>\n",
" <td>SE</td>\n",
" <td>FT</td>\n",
" <td>Data Scientist</td>\n",
" <td>120000</td>\n",
" <td>USD</td>\n",
" <td>120000</td>\n",
" <td>CA</td>\n",
" <td>100</td>\n",
" <td>CA</td>\n",
" <td>M</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" work_year experience_level employment_type job_title \\\n",
"0 2023 SE FT Principal Data Scientist \n",
"1 2023 MI CT ML Engineer \n",
"2 2023 MI CT ML Engineer \n",
"3 2023 SE FT Data Scientist \n",
"4 2023 SE FT Data Scientist \n",
"\n",
" salary salary_currency salary_in_usd employee_residence remote_ratio \\\n",
"0 80000 EUR 85847 ES 100 \n",
"1 30000 USD 30000 US 100 \n",
"2 25500 USD 25500 US 100 \n",
"3 175000 USD 175000 CA 100 \n",
"4 120000 USD 120000 CA 100 \n",
"\n",
" company_location company_size \n",
"0 ES L \n",
"1 US S \n",
"2 US S \n",
"3 CA M \n",
"4 CA M "
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Для наглядности\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>work_year</th>\n",
" <th>salary</th>\n",
" <th>salary_in_usd</th>\n",
" <th>remote_ratio</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>3755.000000</td>\n",
" <td>3.755000e+03</td>\n",
" <td>3755.000000</td>\n",
" <td>3755.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>2022.373635</td>\n",
" <td>1.906956e+05</td>\n",
" <td>137570.389880</td>\n",
" <td>46.271638</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>0.691448</td>\n",
" <td>6.716765e+05</td>\n",
" <td>63055.625278</td>\n",
" <td>48.589050</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>2020.000000</td>\n",
" <td>6.000000e+03</td>\n",
" <td>5132.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>2022.000000</td>\n",
" <td>1.000000e+05</td>\n",
" <td>95000.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>2022.000000</td>\n",
" <td>1.380000e+05</td>\n",
" <td>135000.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>2023.000000</td>\n",
" <td>1.800000e+05</td>\n",
" <td>175000.000000</td>\n",
" <td>100.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>2023.000000</td>\n",
" <td>3.040000e+07</td>\n",
" <td>450000.000000</td>\n",
" <td>100.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" work_year salary salary_in_usd remote_ratio\n",
"count 3755.000000 3.755000e+03 3755.000000 3755.000000\n",
"mean 2022.373635 1.906956e+05 137570.389880 46.271638\n",
"std 0.691448 6.716765e+05 63055.625278 48.589050\n",
"min 2020.000000 6.000000e+03 5132.000000 0.000000\n",
"25% 2022.000000 1.000000e+05 95000.000000 0.000000\n",
"50% 2022.000000 1.380000e+05 135000.000000 0.000000\n",
"75% 2023.000000 1.800000e+05 175000.000000 100.000000\n",
"max 2023.000000 3.040000e+07 450000.000000 100.000000"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Описание представленного датафрейма\n",
"df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"work_year 0\n",
"experience_level 0\n",
"employment_type 0\n",
"job_title 0\n",
"salary 0\n",
"salary_currency 0\n",
"salary_in_usd 0\n",
"employee_residence 0\n",
"remote_ratio 0\n",
"company_location 0\n",
"company_size 0\n",
"dtype: int64"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Процент пропущенных значений признаков\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}')\n",
"\n",
"# Проверка на пропущенные данные\n",
"df.isnull().sum()"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"work_year False\n",
"experience_level False\n",
"employment_type False\n",
"job_title False\n",
"salary False\n",
"salary_currency False\n",
"salary_in_usd False\n",
"employee_residence False\n",
"remote_ratio False\n",
"company_location False\n",
"company_size False\n",
"dtype: bool"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isnull().any()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Хе-хе, какие весёлые датасеты :) Ни где данных пропущенных не нашлось, хе-хе))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Анализ сведений о наборе данных\n",
"\n",
"**Набор данных:** Набор данных представляет собой информацию о сотрудниках DataScientist. Их зарплатах, занятости, стаже и по этим данным будет проводиться анализ. \n",
"\n",
"**Проблемная область:** Проблемной областью может являться анализ и управление заработной платой сотрудников с учётом различных факторов, которые позволяют компаниям улучшать свои кадровые стратегии и конкурировать на рынке труда.\n",
"\n",
"Проанализируем содержимое...\n",
"\n",
"*Объекты наблюдения:* Каждый сотрдник в области оьработки данных является объектом наблюдения. \n",
"\n",
"*Атрибуты объектов:* Основные атрибуты представляют собой зарплату работников, тип занятости, уровень опыта разработчика, год получения опыта работника, валюта (выплачиваемой зарплаты), местоположение сотрудника, мостоположение компании, размер компании, доля удалённой работы.\n",
"\n",
"*Связи между объектами:* Стаж сотрудника может быть использован в зарплатах и трудоустройстве по годам. Более высокий опыт и определённые должности коррелируют с большими зарплатами. Регионы и страы могут показать разницу в зарплатах. \n",
"\n",
"## Бизнес-цель\n",
"1. Определение конкурентоспособности зарплат \n",
"Цель: Сравнить зарплаты сотрудников по странам и должностям. \n",
"Эффект же будет заключаться в том, что компании могут использовать эту информацию для привлечения и удержания талантов, предлагая конкрурентные зарплаты. \n",
"2. Оценка зависимости между опытом и зарплатой \n",
"Цель: Определить, как профессиональный опыт влияет на зарплаты в различных секторах. \n",
"Эффект заключается в том, что компании могут лучше планировать бюджеты на повышение зарплат в зависимости от опыта сотрудников.\n",
"\n",
"### Техническая цель\n",
"1. Конкурентоспособность зарплат \n",
"Построить модель, которая будет предсказывать зарплаты сотрудников на основе атрибутов. На вход должны следовать такие признаки, как должность, опыт, страна компании. Целевой признак: зарплата.\n",
"2. Оценка зависимости между опытом и зарплатой\n",
"Создать модель и визуализировать влияние опыта на зарплату. На вход должны идти уровень опыта, должность, местоположение компании. Целевой признак: Зарплата"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAx8AAAIjCAYAAABia6bHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA7kklEQVR4nO3dd5hV1b0//s8MMAMIMwOIFKWIYgFB7EGsERsYSxRLiIKxxKhRE0tiQEFjvhpbEonGGK+i6JWrXlssESIiSQRUFBGwBiyRJjoUpTP794e/OZdDGQbUNYO8Xs8zD5y911nrs/dZz5nznrNLQZZlWQAAAHzDCmu6AAAAYPMgfAAAAEkIHwAAQBLCBwAAkITwAQAAJCF8AAAASQgfAABAEsIHAACQhPABAAAkIXwAfEXvv/9+FBQUxNChQ2u6lE3e0KFDo6CgIN5///2aLmWtBg8eHAUFBTVdxlfSvn376N+/f02XAWymhA+g1qj84Lnqz1ZbbRUHH3xwPPPMM8nrGT16dF4t9erViw4dOsRpp50W06ZN+1rGePHFF2Pw4MExb968r6U/AKjNhA+g1rn66qtj2LBhce+998Zll10Wn3zySfTq1SuefPLJGqnnggsuiGHDhsUdd9wRvXv3jv/5n/+JvfbaK2bMmPGV+37xxRfjqquuEj42EQMHDozFixfXdBkAm6y6NV0AwOqOPPLI2HPPPXOPzzjjjGjRokU88MADcdRRRyWvZ//9948TTjghIiJOP/302GGHHeKCCy6Ie+65Jy6//PLk9VB9ixYtioYNG35t/dWtWzfq1vWrE2Bj+eYDqPXKysqiQYMGa3zo++KLL+Liiy+ONm3aRHFxcey4445x4403RpZlERGxePHi2GmnnWKnnXbK+2v1Z599Fq1atYp99903Vq5cucH1fPe7342IiOnTp1fZbtSoUbH//vvHFltsEWVlZXHMMcfEm2++mVs/ePDguPTSSyMiYtttt80d3lWd8x1WPzyt8mf06NFrtO3fv/9a2w4ePDiv3cMPPxx77rlnNG7cOK/djTfeWGUty5cvj6uuuio6duwY9evXj2bNmsV+++0XI0eOzLWZNGlS9O/fPzp06BD169ePli1bxo9+9KP49NNP17utjz/+ePTu3Ttat24dxcXFsd1228Wvf/3rNV67gw46KHbZZZeYMGFCHHDAAdGwYcP41a9+Ff369Ystt9wyli9fvkbfhx12WOy4447rraHS2s75KCgoiPPPPz8ee+yx2GWXXaK4uDg6d+4cf/vb36rdb8T/Hea3+mu4tnOKZs2aFaeffnpss802UVxcHK1atYpjjjkmb+5kWRbXXHNNbLPNNtGwYcM4+OCDY8qUKRtUE8DXzZ9vgFpn/vz5MXfu3MiyLObMmRNDhgyJzz//PH74wx/m2mRZFkcffXQ8//zzccYZZ0S3bt3i2WefjUsvvTQ+/vjj+N3vfhcNGjSIe+65J3r06BEDBgyIm2++OSIizjvvvJg/f34MHTo06tSps8H1/fvf/46IiGbNmq2zzd///vc48sgjo0OHDjF48OBYvHhxDBkyJHr06BGvvvpqtG/fPr7//e/HO++8Ew888ED87ne/iy233DIiIpo3b16tOg499NA47bTTIiLi5ZdfjltuuWWdbbfccsv43e9+l3t86qmn5q0fO3ZsnHjiibHrrrvGddddF6WlpTF37tz42c9+tt46Bg8eHNdee22ceeaZsffee8eCBQvilVdeiVdffTUOPfTQiIgYOXJkTJs2LU4//fRo2bJlTJkyJe64446YMmVKjBs3rsqTuIcOHRqNGjWKn//859GoUaMYNWpUXHnllbFgwYK44YYb8tp++umnceSRR8bJJ58cP/zhD6NFixaxxRZbxL333hvPPvts3jdns2bNilGjRsWgQYPWu43r889//jMeeeSROPfcc6Nx48Zxyy23xPHHHx8ffvhhlfNkYx1//PExZcqU+OlPfxrt27ePOXPmxMiRI+PDDz+M9u3bR0TElVdeGddcc0306tUrevXqFa+++mocdthhsWzZsq+9HoBqywBqibvvvjuLiDV+iouLs6FDh+a1feyxx7KIyK655pq85SeccEJWUFCQvffee7lll19+eVZYWJiNGTMme+ihh7KIyH7/+9+vt57nn38+i4jsrrvuyj755JNsxowZ2VNPPZW1b98+KygoyF5++eUsy7Js+vTpWURkd999d+653bp1y7baaqvs008/zS17/fXXs8LCwuy0007LLbvhhhuyiMimT59e7f20bNmyLCKy888/P7escruef/75Ndr37ds323bbbfOWRUQ2aNCg3OPLL788i4hs5syZuWWV23XDDTdUWc+uu+6a9e7du8o2ixYtWmPZAw88kEVENmbMmNyyyjmw6v5Y23N//OMfZw0bNsyWLFmSW3bggQdmEZHdfvvteW1XrlyZbbPNNtlJJ52Ut/zmm2/OCgoKsmnTplVZ+6oGDRqUrf6rMyKyoqKivDn3+uuvZxGRDRkypNp9V8631V/D1edXeXn5el+XOXPmZEVFRVnv3r2zioqK3PJf/epXWURk/fr1q3ZdAF8nh10Btc6tt94aI0eOjJEjR8Z9990XBx98cJx55pnxyCOP5No8/fTTUadOnbjgggvynnvxxRdHlmV5V8caPHhwdO7cOfr16xfnnntuHHjggWs8ryo/+tGPonnz5tG6devo3bt3fPHFF3HPPffknZeyqpkzZ8bEiROjf//+0bRp09zyrl27xqGHHhpPP/10tcdemyVLlkRERP369avVftmyZVFcXFxlm4ULF0ZhYWGUlZVtcD1lZWUxZcqUePfdd9fZpkGDBrn/L1myJObOnRvf+c53IiLi1VdfrbL/VZ+7cOHCmDt3buy///6xaNGieOutt/LaFhcXx+mnn563rLCwMPr27RtPPPFELFy4MLf8/vvvj3333Te23Xbb9W/kevTs2TO222673OOuXbtGSUnJ13ZVtFU1aNAgioqKYvTo0VFeXr7WNn//+99j2bJl8dOf/jTvW6WLLrroa68HYEMIH0Cts/fee0fPnj2jZ8+e0bdv33jqqaeiU6dOcf755+cOGfnggw+idevW0bhx47zn7rzzzrn1lYqKiuKuu+6K6dOnx8KFC+Puu+/eoHs1XHnllTFy5MgYNWpUTJo0KWbMmLHGYUurqhx7becS7LzzzjF37tz44osvqj3+6ubOnRsREaWlpdVqP2/evGjUqFGVbbp37x4VFRVx4YUXxr///e+YO3fuOj/Yru7qq6+OefPmxQ477BBdunSJSy+9NCZNmpTX5rPPPosLL7wwWrRoEQ0aNIjmzZvnPvTPnz+/yv6nTJkSxx13XJSWlkZJSUk0b948dwje6s/deuuto6ioaI0+TjvttFi8eHE8+uijERHx9ttvx4QJE6p8HTdE27Zt11jWpEmTau/DDVFcXBy//e1v45lnnokWLVrEAQccENdff33MmjUr16ZyDnbs2DHvuc2bN48mTZp87TUBVJfwAdR6hYWFcfDBB8fMmTOr/Ot6VZ599tmI+PKv7hvaR5cuXaJnz55x8MEHR5cuXWr8akeVJxVXHtu/PrNmzYqWLVtW2ebkk0+Oiy++OIYOHRrbb799NG/ePHbfffdq9X/AAQfEv//977jrrrtil112iTvvvDN23333uPPOO3NtTjzxxPjLX/4S55xzTjzyyCMxYsSI3AnZFRUV6+x73rx5ceCBB8brr78eV199dfz1r3+NkSNHxm9/+9u1PnfVb0lW1alTp9hjjz3ivvvui4iI++67L4qKiuLEE0+s1jauz7rOHcr+/4sfVMe6AvHaLopw0UUXxTvvvBPXXntt1K9fP6644orYeeed47XXXqv2eAA1QfgANgkrVqyIiIjPP/88IiLatWsXM2bMyDuMJiJyh+G0a9cut2zSpElx9dVXx+mnnx677bZbnHnmmev9a/tXUTn222+/vca6t956K7bccsvYYostImLdHzir8sorr0RErPOwr1UtX7483nvvvdw3QutSWFgYN954Yxx00EHRsWPH3CFv1dW0adM4/fT
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Визуализация данных - ящик с усами. Выборка относительно сбалансирована, есть среднее смещение в среднюю сторону, медиана уравновешена\n",
"plt.figure(figsize=(10, 6))\n",
"sns.boxplot(x=df[\"salary_in_usd\"])\n",
"plt.title(\"Box Plot для salary_in_usd\")\n",
"plt.xlabel(\"salary_in_usd\")\n",
"plt.show()\n",
"\n",
"# Визуализируем отношение размера компании и зарплаты\n",
"plt.figure(figsize=(10, 6))\n",
"plt.scatter(df[\"salary_in_usd\"], df[\"experience_level\"])\n",
"plt.xlabel(\"salary_in_usd\")\n",
"plt.ylabel(\"experience_level\")\n",
"plt.title(\"salary in usd vs experience_level\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Проблемы выбранный наборов данных \n",
"**Зашумленность:** \n",
"Возможное присутствие некорректных или неполных данных, например, ошибки в заполнении зарплат или местоположений.\n",
"Необходима очистка данных от выбросов и ошибок. \n",
"\n",
"**Смещение:** \n",
"Могут быть смещения в данных по странам или компаниям, например, если большая часть выборки состоит из сотрудников одной страны или отрасли. \n",
"\n",
"**Актуальность:** \n",
"Если данные собраны за несколько лет, некоторые зарплаты могут быть неактуальны для текущего рынка, что требует дополнительной актуализации. \n",
"\n",
"**Выбросы:** \n",
"Возможны экстремальные значения в зарплатах, которые необходимо либо исключить, либо обработать, чтобы не искажать модели. \n",
"\n",
"**Просачивание данных:** \n",
"Если в данных есть признаки, которые могут напрямую предсказывать зарплату (например, если salary_currency или company_size напрямую коррелируют с зарплатой), это может привести к ошибкам в моделях."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Борьба с выбросами"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1MAAAIjCAYAAADm7UHpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB+ZElEQVR4nO3deXwU9f3H8ffuJrub+w4JEJJwGw4RBAE5rIAg3iceKFRFa7UerXe1YlvFo5faitevYrWtIFWLVVFUvAABBUQOOQPhTMhB7mST3fn9EbNmc+5OFhPg9Xw88oDMfuc7n+8xk/ns7M5YDMMwBAAAAAAIiLWjAwAAAACAoxHJFAAAAACYQDIFAAAAACaQTAEAAACACSRTAAAAAGACyRQAAAAAmEAyBQAAAAAmkEwBAAAAgAkkUwAAAABgAskUALRg9uzZslgsHR2Gj9NOO02nnXZaR4cRkE8++UQWi0WffPJJR4dyVLNYLJo9e3ZHhxFUGRkZmjlzZkeHIalzxQLg6EEyBQAAAAAmhHR0AAAA/33wwQcdHQI6SGVlpUJC+LMNAJ0JV6YA4EdgGIYqKyvbXY/dbpfdbg9CRDgaeDweVVVVSZKcTifJFAB0MiRTAI4ppaWluu2225SRkSGHw6Hk5GRNmjRJa9as8Zb5/PPPdckll6hHjx5yOBxKS0vT7bff7ley89JLL+n0009XcnKyHA6HsrKyNHfu3CblMjIydPbZZ+v999/XySefrLCwMD333HMaP368TjzxxGbr7tevnyZPntzq9ht/Z6r++0gLFizQww8/rO7du8vpdGrChAnavn17m+2ZOXOmMjIymixv7vtiS5Ys0ZgxYxQbG6vIyEj169dP9913n0+ZvXv36vzzz1dERISSk5N1++23q7q6us04Fi5cKIvFok8//bTJa88995wsFos2bNggSTp48KB++tOfqnv37nI4HEpNTdV5552nXbt2tbmd7777ThdffLHi4+PldDp18skna9GiRd7X8/LylJSUpNNOO02GYXiXb9++XREREZo2bZp32WmnnaaBAwfq66+/1ujRoxUWFqbMzEw9++yzTbZbXV2tBx98UL179/bOubvuuqtJ31gsFt1888365z//qQEDBsjhcGjx4sXe1xp/Z2rfvn265ppr1KVLFzkcDg0YMEB///vffcoEOkdWrlypqVOnKi4uThERERo8eLCefPLJgPqxPQ4fPqzbbrtNaWlpcjgc6t27tx577DF5PB5JUk1NjeLj4/XTn/60ybolJSVyOp264447vMv87XsAMIO3uAAcU372s59p4cKFuvnmm5WVlaWCggJ98cUX2rx5s4YOHSpJev3111VRUaEbb7xRCQkJWrVqlZ5++mnt3btXr7/+eqv1z507VwMGDNC5556rkJAQvf322/r5z38uj8ejm266yafsli1bdPnll+uGG27QrFmz1K9fP0VGRmrWrFnasGGDBg4c6C27evVqbd26Vffff7+pdj/66KOyWq264447VFxcrMcff1xXXnmlVq5caaq+xjZu3Kizzz5bgwcP1m9/+1s5HA5t375dy5Yt85aprKzUhAkTlJOTo1tuuUVdu3bVK6+8oo8//rjN+s866yxFRkZqwYIFGj9+vM9r8+fP14ABA7z9ddFFF2njxo36xS9+oYyMDOXl5WnJkiXKyclpNjFs2IZTTz1V3bp10z333KOIiAgtWLBA559/vv7zn//oggsuUHJysubOnatLLrlETz/9tG655RZ5PB7NnDlTUVFReuaZZ3zqLCoq0tSpU3XppZfq8ssv14IFC3TjjTfKbrfrmmuukVR3dencc8/VF198oeuvv14nnHCCvv32W/35z3/W1q1b9dZbb/nU+fHHH2vBggW6+eablZiY2GKbcnNzNXLkSG8ClpSUpPfee0/XXnutSkpKdNttt/mU92eOLFmyRGeffbZSU1N16623KiUlRZs3b9b//vc/3XrrrX73o1kVFRUaP3689u3bpxtuuEE9evTQ8uXLde+99+rAgQP6y1/+otDQUF1wwQV644039Nxzz/lcqX3rrbdUXV2tyy67zFTfA0DADAA4hsTExBg33XRTq2UqKiqaLJszZ45hsViM3bt3e5c9+OCDRuPDZHPrTp482ejZs6fPsvT0dEOSsXjxYp/lhw8fNpxOp3H33Xf7LL/llluMiIgIo6ysrNXYx48fb4wfP977+9KlSw1JxgknnGBUV1d7lz/55JOGJOPbb79ttb4ZM2YY6enpTZY3bvuf//xnQ5Jx6NChFuv6y1/+YkgyFixY4F1WXl5u9O7d25BkLF26tNVYLr/8ciM5Odmora31Ljtw4IBhtVqN3/72t4ZhGEZRUZEhyXjiiSdaras5EyZMMAYNGmRUVVV5l3k8HmP06NFGnz59msQSHh5ubN261XjiiScMScZbb73lU2b8+PGGJOOPf/yjd1l1dbUxZMgQIzk52XC5XIZhGMYrr7xiWK1W4/PPP/dZ/9lnnzUkGcuWLfMuk2RYrVZj48aNTeKXZDz44IPe36+99lojNTXVyM/P9yl32WWXGTExMd656u8cqa2tNTIzM4309HSjqKjIp06Px2OqH9uSnp5uzJgxw/v77373OyMiIsLYunWrT7l77rnHsNlsRk5OjmEYhvH+++8bkoy3337bp9zUqVN99sVA+r5xLADgDz7mB+CYEhsbq5UrV2r//v0tlgkLC/P+v7y8XPn5+Ro9erQMw9DatWtbrb/husXFxcrPz9f48eO1c+dOFRcX+5TNzMxs8rG9mJgYnXfeefr3v//t/RiZ2+3W/PnzvR+PM+OnP/2pzzv0Y8eOlSTt3LnTVH2NxcbGSpL++9//ej9u1di7776r1NRUXXzxxd5l4eHhuv766/3axrRp05SXl+dzC/WFCxfK4/F4P14XFhYmu92uTz75REVFRX7HX1hYqI8//liXXnqpSktLlZ+fr/z8fBUUFGjy5Mnatm2b9u3b5y3/17/+VTExMbr44ov1wAMP6KqrrtJ5553XpN6QkBDdcMMN3t/tdrtuuOEG5eXl6euvv5ZUdyX0hBNOUP/+/b3bzc/P1+mnny5JWrp0qU+d48ePV1ZWVqvtMQxD//nPf3TOOefIMAyfeidPnqzi4mKfj7ZKbc+RtWvXKjs7W7fddpt3vOvVf+Qz0H4M1Ouvv66xY8cqLi7Op00TJ06U2+3WZ599Jkk6/fTTlZiYqPnz53vXLSoq0pIlS3w+ihlo3wNAoEimABxTHn/8cW3YsEFpaWkaMWKEZs+e3SShyMnJ0cyZMxUfH6/IyEglJSV5P1rWOCFqbNmyZZo4caIiIiIUGxurpKQk7/eGmkummnP11VcrJydHn3/+uSTpww8/VG5urq666ipTbZakHj16+PweFxcnSQElHK2ZNm2aTj31VF133XXq0qWLLrvsMi1YsMAnsdq9e7d69+7d5LtW/fr182sbU6ZMUUxMjM8J8vz58zVkyBD17dtXkuRwOPTYY4/pvffeU5cuXTRu3Dg9/vjjOnjwYKt1b9++XYZh6IEHHlBSUpLPz4MPPiip7vtS9eLj4/XUU09p/fr1iomJ0VNPPdVsvV27dm2SANfHWv8drm3btmnjxo1NtltfruF2pZbnTUOHDh3S4cOH9fzzzzept/67RI3rbWuO7NixQ5J8Pn7aWKD9GKht27Zp8eLFTeqeOHGiT90hISG66KKL9N///tf73ac33nhDNTU1PslUoH0PAIHiO1MAjimXXnqpxo4dqzfffFMffPCBnnjiCT322GN64403dOaZZ8rtdmvSpEkqLCzU3Xffrf79+ysiIkL79u3TzJkzW7zqItWdbE6YMEH9+/fXn/70J6Wlpclut+vdd9/Vn//85ybrNryK1dDkyZPVpUsXvfrqqxo3bpxeffVVpaSkeE8YzbDZbM0uNxrcRKE5LT2U2O12+/weFhamzz77TEuXLtU777yjxYsXa/78+Tr99NP1wQcftLj9QDgcDp1//vl688039cwzzyg3N1fLli3TI4884lPutttu0znnnKO33npL77//vh544AHNmTNHH3/8sU466aR
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABAgAAAIjCAYAAACOIinVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABT30lEQVR4nO3deVxU9f7H8feAsrgwrmxXXHJDXANNSdMKErfS1FIrU1MrL2pqrmXq7VYmbVpulbds817U0koTJdxKSRMkl9zTcAM1hVFUUDi/P3pwfk6QwogM6uv5eMwjzzmf+c5nTtPj3vP2e77HYhiGIQAAAAAAcFtzcXYDAAAAAADA+QgIAAAAAAAAAQEAAAAAACAgAAAAAAAAIiAAAAAAAAAiIAAAAAAAACIgAAAAAAAAIiAAAAAAAAAiIAAAAAAAACIgAADcgqZMmSKLxeLsNuzce++9uvfee53dRqGsXbtWFotFa9eudXYrNzWLxaIpU6Y4u40iVbNmTfXv39/ZbUgqWb0AwM2OgAAAAAAAAKiUsxsAAOB2sGrVKme3ACe5cOGCSpXi/3IBAEo+ZhAAAHAVhmHowoUL1z2Om5ub3NzciqAj3AxycnJ08eJFSZKHhwcBAQDgpkBAAAAoEc6ePasRI0aoZs2acnd3l7e3tx544AElJiaaNT/88IMeeeQRVa9eXe7u7goICNDIkSMLdAH/8ccf6/7775e3t7fc3d0VFBSkOXPm5KmrWbOmunTpopUrV6p58+by9PTU+++/r3bt2qlp06b5jl2/fn1FRERc9fP/ugZB7v39Cxcu1Kuvvqpq1arJw8NDYWFh2r9//zW/T//+/VWzZs08+/NbfyE2NlZt2rRRhQoVVK5cOdWvX18vvPCCXc2RI0fUrVs3lS1bVt7e3ho5cqQyMzOv2cfixYtlsVi0bt26PMfef/99WSwW7dixQ5KUkpKiAQMGqFq1anJ3d5efn5+6du2qQ4cOXfNzdu/erZ49e6pSpUry8PBQ8+bN9c0335jHT5w4oapVq+ree++VYRjm/v3796ts2bLq1auXue/ee+9Vo0aNlJCQoLvvvluenp6qVauW5s6dm+dzMzMzNXnyZNWpU8f8zY0dOzbPubFYLBo6dKi++OILNWzYUO7u7oqJiTGP/XUNgqNHj+qpp56Sj4+P3N3d1bBhQ3300Ud2NYX9jWzatEmdOnVSxYoVVbZsWTVp0kQzZswo1Hm8HmlpaRoxYoQCAgLk7u6uOnXqaNq0acrJyZEkXbp0SZUqVdKAAQPyvNdms8nDw0OjR4829xX03AMAig5xNgCgRHj22We1ePFiDR06VEFBQfrjjz/0448/ateuXQoODpYkLVq0SOfPn9eQIUNUuXJlbd68We+9956OHDmiRYsWXXX8OXPmqGHDhnrooYdUqlQpffvtt/rnP/+pnJwcRUZG2tXu2bNHffr00TPPPKPBgwerfv36KleunAYPHqwdO3aoUaNGZu3PP/+svXv3auLEiQ5979dff10uLi4aPXq00tPTFRUVpccff1ybNm1yaLy/2rlzp7p06aImTZro5Zdflru7u/bv368NGzaYNRcuXFBYWJiSk5M1fPhw+fv767PPPtPq1auvOX7nzp1Vrlw5LVy4UO3atbM7Fh0drYYNG5rnq0ePHtq5c6eGDRummjVr6sSJE4qNjVVycnK+YceV36F169b6xz/+ofHjx6ts2bJauHChunXrpi+//FIPP/ywvL29NWfOHD3yyCN67733NHz4cOXk5Kh///4qX768Zs+ebTfmmTNn1KlTJz366KPq06ePFi5cqCFDhsjNzU1PPfWUpD9nATz00EP68ccf9fTTT6tBgwbavn273nnnHe3du1dLly61G3P16tVauHChhg4dqipVqvztd0pNTVWrVq3MUKFq1apasWKFBg4cKJvNphEjRtjVF+Q3Ehsbqy5dusjPz0/PPfecfH19tWvXLi1btkzPPfdcgc+jo86fP6927drp6NGjeuaZZ1S9enVt3LhREyZM0PHjxzV9+nSVLl1aDz/8sL766iu9//77djNqli5dqszMTPXu3duhcw8AKCIGAAAlgNVqNSIjI69ac/78+Tz7pk6dalgsFuP33383902ePNn46//E5ffeiIgI44477rDbV6NGDUOSERMTY7c/LS3N8PDwMMaNG2e3f/jw4UbZsmWNc+fOXbX3du3aGe3atTO316xZY0gyGjRoYGRmZpr7Z8yYYUgytm/fftXx+vXrZ9SoUSPP/r9+93feeceQZJw8efJvx5o+fbohyVi4cKG5LyMjw6hTp44hyVizZs1Ve+nTp4/h7e1tXL582dx3/Phxw8XFxXj55ZcNwzCMM2fOGJKMN95446pj5ScsLMxo3LixcfHiRXNfTk6Ocffddxt169bN00uZMmWMvXv3Gm+88YYhyVi6dKldTbt27QxJxltvvWXuy8zMNJo1a2Z4e3sbWVlZhmEYxmeffWa4uLgYP/zwg937586da0gyNmzYYO6TZLi4uBg7d+7M078kY/Lkyeb2wIEDDT8/P+PUqVN2db179zasVqv5Wy3ob+Ty5ctGrVq1jBo1ahhnzpyxGzMnJ8eh83gtNWrUMPr162du//vf/zbKli1r7N27165u/Pjxhqurq5GcnGwYhmGsXLnSkGR8++23dnWdOnWy+2+xMOf+r70AABzHLQYAgBKhQoUK2rRpk44dO/a3NZ6enuafMzIydOrUKd19990yDENbt2696vhXvjc9PV2nTp1Su3bt9Ntvvyk9Pd2utlatWnluGbBareratav++9//mlPYs7OzFR0dbU7Nd8SAAQPs/ib1nnvukST99ttvDo33VxUqVJAkff311+ZU77/67rvv5Ofnp549e5r7ypQpo6effrpAn9GrVy+dOHHC7nGIixcvVk5Ojjm139PTU25ublq7dq3OnDlT4P5Pnz6t1atX69FHH9XZs2d16tQpnTp1Sn/88YciIiK0b98+HT161KyfOXOmrFarevbsqZdeekl9+/ZV165d84xbqlQpPfPMM+a2m5ubnnnmGZ04cUIJCQmS/pyx0qBBAwUGBpqfe+rUKd1///2SpDVr1tiN2a5dOwUFBV31+xiGoS+//FIPPvigDMOwGzciIkLp6el2t9VI1/6NbN26VQcPHtSIESPMf9+5cm83Kex5LKxFixbpnnvuUcWKFe2+U3h4uLKzs7V+/XpJ0v33368qVaooOjrafO+ZM2cUGxtrdxtIYc89AKBoEBAAAEqEqKgo7dixQwEBAbrrrrs0ZcqUPBfJycnJ6t+/vypVqqRy5cqpatWq5rT2v17k/9WGDRsUHh6usmXLqkKFCqpatap5H35+AUF+nnzySSUnJ+uHH36QJH3//fdKTU1V3759HfrOklS9enW77YoVK0pSoS6ir6ZXr15q3bq1Bg0aJB8fH/Xu3VsLFy60Cwt+//131alTJ8/aBfXr1y/QZ3To0EFWq9Xuoi86OlrNmjVTvXr1JEnu7u6aNm2aVqxYIR8fH7Vt21ZRUVFKSUm56tj79++XYRh66aWXVLVqVbvX5MmTJf25/kCuSpUq6d1339W2bdtktVr17rvv5juuv79/nlAnt9fcNRH27dunnTt35vnc3LorP1f6+9/NlU6ePKm0tDR98MEHecbNvTf/r+Ne6zdy4MABSbK79eWvCnseC2vfvn2KiYnJM3Z4eLjd2KVKlVKPHj309ddfm2sJfPXVV7p06ZJdQFDYcw8AKBqsQQAAKBEeffRR3XPPPVqyZIlWrVqlN954Q9OmTdNXX32ljh07Kjs7Ww888IBOnz6tcePGKTAwUGXLltXRo0fVv3//v/3bcenPC6iwsDAFBgbq7bffVkBAgNzc3PTdd9/pnXfeyfPeK2cbXCkiIkI+Pj76/PPP1bZtW33++efy9fU1L4Ic4erqmu9+44qF9vLz14v5XNnZ2Xbbnp6eWr9+vdasWaPly5crJiZG0dHRuv/++7Vq1aq//fzCcHd3V7du3bRkyRLNnj1bqamp2rBhg1577TW7uhEjRujBBx/U0qVLtXLlSr300kuaOnWqVq9
"text/plain": [
"<Figure size 1200x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Статистический анализ для определения выбросов\n",
"Q1 = df[\"salary_in_usd\"].quantile(0.25)\n",
"Q3 = df[\"salary_in_usd\"].quantile(0.75)\n",
"IQR = Q3 - Q1\n",
"\n",
"# Определение порога для выбросов\n",
"threshold = 1.5 * IQR\n",
"outliers = (df[\"salary_in_usd\"] < (Q1 - threshold)) | (\n",
" df[\"salary_in_usd\"] > (Q3 + threshold)\n",
")\n",
"\n",
"# Обработка выбросов\n",
"# В данном случае мы уберем выбросы\n",
"median_salary = df[\"salary_in_usd\"].median()\n",
"df.loc[outliers, \"salary_in_usd\"] = 0\n",
"df1 = df[df.salary_in_usd != 0]\n",
"\n",
"# Визуализация данных после обработки\n",
"plt.figure(figsize=(10, 6))\n",
"plt.scatter(df1[\"salary_in_usd\"], df1[\"experience_level\"])\n",
"plt.xlabel(\"salary_in_usd\")\n",
"plt.ylabel(\"experience_level\")\n",
"plt.title(\"salary in usd vs experience_level\")\n",
"plt.show()\n",
"\n",
"# Визуализация данных после обработки\n",
"plt.figure(figsize=(12, 6))\n",
"plt.boxplot(df1[\"salary_in_usd\"])\n",
"plt.xlabel(\"salary_in_usd\")\n",
"plt.ylabel(\"experience_level\")\n",
"plt.title(\"salary in usd vs experience_level\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Размер обучающей выборки: 2253\n",
"Размер контрольной выборки: 751\n",
"Размер тестовой выборки: 751\n"
]
}
],
"source": [
"from sklearn.model_selection import train_test_split\n",
"\n",
"# Пример датасета с данными (X — признаки, y — целевой признак)\n",
"X = df.drop(columns=[\"salary_in_usd\"]) # Признаки (все столбцы, кроме целевого признака 'salary')\n",
"y = df[\"salary_in_usd\"] # Целевая переменная\n",
"\n",
"# Разделяем данные на обучающую (60%), временную (40%) выборки\n",
"X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.4, random_state=42)\n",
"\n",
"# Временную выборку делим пополам на контрольную (20%) и тестовую (20%) выборки\n",
"X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)\n",
"\n",
"# Проверяем размер выборок\n",
"print(f\"Размер обучающей выборки: {len(X_train)}\")\n",
"print(f\"Размер контрольной выборки: {len(X_val)}\")\n",
"print(f\"Размер тестовой выборки: {len(X_test)}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Теперь оценим сбалансированность, если нужно использовать методы аугментации данных, то применим. Анаализ проведём в категории 'salary_in_usd', в которой может потребоваться применение oversampling или undersampling."
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA14AAAIjCAYAAAATE8pZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACSP0lEQVR4nOzde3zO9f/H8ce1jR3MxowdYgi1OeaUY04p53NElErSOVHkWygdpKOS0MmhSEnoIOUs50MRGVGY0zAyNtuwfX5/vH+7MjYx17XPDs/77XbdfK7P9bk+13PXtV2u1/V5f15vh2VZFiIiIiIiIuI2HnYHEBERERERye9UeImIiIiIiLiZCi8RERERERE3U+ElIiIiIiLiZiq8RERERERE3EyFl4iIiIiIiJup8BIREREREXEzFV4iIiIiIiJupsJLREQkj0lMTGT//v38888/dkcRFzt9+jR79+4lMTHR7igi4mIqvERERPKAWbNmceutt1K0aFH8/f2JiIjg9ddftztWnpCQkMDYsWOd10+ePMn48ePtC3QBy7L48MMPqV+/Pn5+fgQEBFC+fHk+//xzu6OJiIs5LMuy7A4hIu4xZcoU7rvvPud1b29vIiIiuP322xk+fDghISE2phORK/Xss88yZswYOnXqRM+ePQkODsbhcHDDDTdQpkwZu+PleqmpqQQGBjJp0iSaNGnCW2+9xY4dO1iwYIHd0ejVqxdffvklffv2pX379gQGBuJwOKhevTolS5a0O56IuJCX3QFExP1GjRpF+fLlSU5OZuXKlUyYMIH58+ezbds2/Pz87I4nIpexfPlyxowZw+jRo3n22WftjpMneXp68uKLL3LPPfeQlpZGQEAAP/zwg92xmDZtGl9++SWff/45d911l91xRMTNdMRLJB9LP+K1YcMG6tSp41w/ePBg3n77bWbMmEGvXr1sTCgi/6VDhw6cOHGCVatW2R0lzztw4AD79+8nKiqKYsWK2R2HatWqUb16daZPn253FBHJATrHS6QAatGiBQB79uwB4MSJEzz99NNUq1YNf39/AgICaNOmDVu2bLnkvsnJybzwwgvccMMN+Pj4EBYWRteuXfnrr78A2Lt3Lw6HI8tLs2bNnPtatmwZDoeDL7/8kv/973+EhoZSpEgROnbsyP79+y957HXr1tG6dWsCAwPx8/OjadOmWX4Ybdas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
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA2YAAAIjCAYAAABoNwiVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACelUlEQVR4nOzdd3gU5cLG4d+m90J6Qgihho6AICId6SKIIipSVLCAHrsfHsUu1iPYu2CnCCiodBDpRToJHUJLSAJJSG/z/ZGTPYSEFjZMynNf114mu7PvPBvWJE9m5n0thmEYiIiIiIiIiGnszA4gIiIiIiJS3amYiYiIiIiImEzFTERERERExGQqZiIiIiIiIiZTMRMRERERETGZipmIiIiIiIjJVMxERERERERMpmImIiIiIiJiMhUzERERERERk6mYiYiIiFRSL774IhaLpdh9tWvXZuTIkeYEEpEyUzETkcs2ZcoULBaL9ebi4kKDBg0YN24c8fHxZscTERERqXQczA4gIpXXyy+/TGRkJFlZWaxcuZJPPvmEP/74gx07duDm5mZ2PBGRamn37t3Y2elv7yKVjYqZiJRZnz59aNOmDQD33Xcffn5+/Oc//+HXX3/ljjvuMDmdiMjF5eXlUVBQgJOTk9lRbMbZ2dnsCCJSBvpziojYTLdu3QA4ePAgAKdOneLJJ5+kWbNmeHh44OXlRZ8+fdi6dWuJ52ZlZfHiiy/SoEEDXFxcCAkJ4ZZbbmH//v0AHDp0qNjpk+feunTpYh1r+fLlWCwWpk2bxrPPPktwcDDu7u4MGDCAI0eOlNj3unXr6N27N97e3ri5udG5c2dWrVpV6mvs0qVLqft/8cUXS2z7/fff07p1a1xdXalRowZDhw4tdf8Xem1nKygoYNKkSTRp0gQXFxeCgoK4//77OX36dLHtateuTf/+/UvsZ9y4cSXGLC3722+/XeJrCpCdnc0LL7xAvXr1cHZ2Jjw8nKeffprs7OxSv1Zne+CBB6hfvz5ubm7UqFGDbt268ffffxfb5tdff6Vfv36Ehobi7OxM3bp1eeWVV8jPzy+2XZcuXWjatCmbNm3i+uuvx9XVlcjISD799NNi2xW9D853K+0anPP9+06ZMsW6zd9//81tt91GrVq1rF+Hxx57jMzMTOs2I0eOvOC+LRYLhw4dOu/X62LPX758ebHtZ8yYYX2v+fv7M2zYMI4dO1Zi3JiYGIYMGUJAQACurq40bNiQf//73yW2q1279iXt988//6Rjx464u7vj6elJv3792Llz53lf19kOHDjAbbfdRo0aNXBzc+O6667j999/tz4eHx+Pg4MDL730Uonn7t69G4vFwocffmi9Lzk5mUcffZTw8HCcnZ2pV68eb775JgUFBdZtiv5fe+edd5g0aRJ169bF2dmZXbt2AfDBBx/QpEkT3Nzc8PX1pU2bNvz444/W5x8+fJiHHnqIhg0b4urqip+fH7fddluJf8ui071XrlzJI488QkBAAD4+Ptx///3k5OSQnJzM8OHD8fX1xdfXl6effhrDMErN+d577xEREYGrqyudO3dmx44dF/3annuNWVGeVatW8fjjjxMQEIC7uzuDBg0iISGh2HMLCgp48cUXCQ0Nxc3Nja5du7Jr1y5dtyZyFeiImYjYTFGJ8vPzAwp/8ZozZw633XYbkZGRxMfH89lnn9G5c2d27dpFaGgoAPn5+fTv358lS5YwdOhQ/vWvf3HmzBkWLVrEjh07qFu3rnUfd9xxB3379i223/Hjx5ea57XXXsNisfDMM89w8uRJJk2aRI8ePdiyZQuurq4ALF26lD59+tC6dWteeOEF7Ozs+Oabb6zFoW3btiXGrVmzJhMnTgQgLS2NBx98sNR9P//88wwZMoT77ruPhIQEPvjgAzp16sTmzZvx8fEp8ZwxY8bQsWNHAGbNmsXs2bOLPX7//fczZcoURo0axSOPPMLBgwf58MMP2bx5M6tWrcLR0bHUr8PlSE5Otr62sxUUFDBgwABWrlzJmDFjaNSoEdu3b+e9995jz549zJkz54Lj5uTkMGzYMGrWrMmpU6f47LPP6N27N9HR0dSqVQso/OXRw8ODxx9/HA8PD5YuXcqECRNITU3l7bffLjbe6dOn6du3L0OGDOGOO+5g+vTpPPjggzg5OXHPPfcU2/aRRx7h2muvLXbffffdd96sUVFR1rKSmJjIY489VuzxGTNmkJGRwYMPPoifnx/r16/ngw8+4OjRo8yYMQMo/Lfq0aOH9Tl33303gwYN4pZbbrHeFxAQcMGvmbOzM19++WWx+zZs2MD7779f7L6i98S1117LxIkTiY+PZ/LkyaxatarYe23btm107NgRR0dHxowZQ+3atdm/fz9z587ltddeK7H/jh07MmbMGACio6N5/fXXiz3+3XffMWLECHr16sWbb75JRkYGn3zyCTfccAObN2+mdu3a531t8fHxXH/99WRkZPDII4/g5+fH1KlTGTBgADNnzmTQoEEEBQXRuXNnpk+fzgsvvFDs+dOmTcPe3p7bbrsNgIyMDDp37syxY8e4//77qVWrFqtXr2b8+PGcOHGCSZMmFXv+N998Q1ZWFmPGjMHZ2ZkaNWrwxRdf8Mgjj3Drrbfyr3/9i6ysLLZt28a6deu48847rV//1atXM3ToUGrWrMmhQ4f45JNP6NKlC7t27SpxCvfDDz9McHAwL730EmvXruXzzz/Hx8eH1atXU6tWLV5//XX++OMP3n77bZo2bcrw4cOLPf/bb7/lzJkzjB07lqysLCZPnky3bt3Yvn07QUFB5/36ns/DDz+Mr68vL7zwAocOHWLSpEmMGzeOadOmWbcZP348b731FjfddBO9evVi69at9OrVi6ysrMven4hcJkNE5DJ98803BmAsXrzYSEhIMI4cOWL8/PPPhp+fn+Hq6mocPXrUMAzDyMrKMvLz84s99+DBg4azs7Px8ssvW+/7+uuvDcD4z3/+U2JfBQUF1ucBxttvv11imyZNmhidO3e2fr5s2TIDMMLCwozU1FTr/dOnTzcAY/Lkydax69evb/Tq1cu6H8MwjIyMDCMyMtK48cYbS+zr+uuvN5o2bWr9PCEhwQCMF154wXrfoUOHDHt7e+O1114r9tzt27cbDg4OJe7fu3evARhTp0613vfCCy8YZ3+L/vvvvw3A+OGHH4o9d/78+SXuj4iIMPr161ci+9ixY41zv+2fm/3pp582AgMDjdatWxf7mn733XeGnZ2d8ffffxd7/qeffmoAxqpVq0rs70LWr19vAMbMmTOt92VkZJTY7v777zfc3NyMrKws632dO3c2AOPdd9+13pednW20bNnSCAwMNHJycgzD+N/7YMaMGSXGdXd3N0aMGFHi/g4dOhhdu3a1fl70vvvmm28umHPixImGxWIxDh8+XOrrPffrfDEjRoww3N3dS9w/Y8YMAzCWLVtmGIZh5OTkGIGBgUbTpk2NzMxM63bz5s0zAGPChAnW+zp16mR4enqWyHj2e79IWFiYMWrUKOvnRV/Lov2eOXPG8PHxMUaPHl3seXFxcYa3t3eJ+8/16KOPGkCx99OZM2eMyMhIo3bt2tbvG5999pkBGNu3by/2/MaNGxvdunWzfv7KK68Y7u7uxp49e4pt93//93+Gvb29ERsbaxjG//49vby8jJMnTxbb9uabbzaaNGlywdyl/duvWbPGAIxvv/3Wel/R98hzv7e0b9/esFgsxgMPPGC9Ly8vz6hZs2ax/9+Kcp79/dQwDGPdunUGYDz22GPW+879XmEYhd8Dzn5/F+Xp0aNHsTyPPfaYYW9vbyQnJxuGUfjv5+DgYAwcOLDYeC+++KIBlPr/jIjYjk5lFJEy69GjBwEBAYSHhzN06FA8PDyYPXs2YWFhQOFf/IsuQM/PzycpKQkPDw8aNmzIP//8Yx3nl19+wd/fn4cffrjEPs499e5yDB8+HE9PT+vnt956KyEhIfzxxx8AbNmyhb1793LnnXeSlJREYmIiiYmJpKen0717d1asWFHsNCgoPOXSxcXlgvudNWsWBQUFDBkyxDpmYmIiwcHB1K9
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA2YAAAIjCAYAAABoNwiVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACelUlEQVR4nOzdd3gU5cLG4d+m90J6Qgihho6AICId6SKIIipSVLCAHrsfHsUu1iPYu2CnCCiodBDpRToJHUJLSAJJSG/z/ZGTPYSEFjZMynNf114mu7PvPBvWJE9m5n0thmEYiIiIiIiIiGnszA4gIiIiIiJS3amYiYiIiIiImEzFTERERERExGQqZiIiIiIiIiZTMRMRERERETGZipmIiIiIiIjJVMxERERERERMpmImIiIiIiJiMhUzERERERERk6mYiYiIiFRSL774IhaLpdh9tWvXZuTIkeYEEpEyUzETkcs2ZcoULBaL9ebi4kKDBg0YN24c8fHxZscTERERqXQczA4gIpXXyy+/TGRkJFlZWaxcuZJPPvmEP/74gx07duDm5mZ2PBGRamn37t3Y2elv7yKVjYqZiJRZnz59aNOmDQD33Xcffn5+/Oc//+HXX3/ljjvuMDmdiMjF5eXlUVBQgJOTk9lRbMbZ2dnsCCJSBvpziojYTLdu3QA4ePAgAKdOneLJJ5+kWbNmeHh44OXlRZ8+fdi6dWuJ52ZlZfHiiy/SoEEDXFxcCAkJ4ZZbbmH//v0AHDp0qNjpk+feunTpYh1r+fLlWCwWpk2bxrPPPktwcDDu7u4MGDCAI0eOlNj3unXr6N27N97e3ri5udG5c2dWrVpV6mvs0qVLqft/8cUXS2z7/fff07p1a1xdXalRowZDhw4tdf8Xem1nKygoYNKkSTRp0gQXFxeCgoK4//77OX36dLHtateuTf/+/UvsZ9y4cSXGLC3722+/XeJrCpCdnc0LL7xAvXr1cHZ2Jjw8nKeffprs7OxSv1Zne+CBB6hfvz5ubm7UqFGDbt268ffffxfb5tdff6Vfv36Ehobi7OxM3bp1eeWVV8jPzy+2XZcuXWjatCmbNm3i+uuvx9XVlcjISD799NNi2xW9D853K+0anPP9+06ZMsW6zd9//81tt91GrVq1rF+Hxx57jMzMTOs2I0eOvOC+LRYLhw4dOu/X62LPX758ebHtZ8yYYX2v+fv7M2zYMI4dO1Zi3JiYGIYMGUJAQACurq40bNiQf//73yW2q1279iXt988//6Rjx464u7vj6elJv3792Llz53lf19kOHDjAbbfdRo0aNXBzc+O6667j999/tz4eHx+Pg4MDL730Uonn7t69G4vFwocffmi9Lzk5mUcffZTw8HCcnZ2pV68eb775JgUFBdZtiv5fe+edd5g0aRJ169bF2dmZXbt2AfDBBx/QpEkT3Nzc8PX1pU2bNvz444/W5x8+fJiHHnqIhg0b4urqip+fH7fddluJf8ui071XrlzJI488QkBAAD4+Ptx///3k5OSQnJzM8OHD8fX1xdfXl6effhrDMErN+d577xEREYGrqyudO3dmx44dF/3annuNWVGeVatW8fjjjxMQEIC7uzuDBg0iISGh2HMLCgp48cUXCQ0Nxc3Nja5du7Jr1y5dtyZyFeiImYjYTFGJ8vPzAwp/8ZozZw633XYbkZGRxMfH89lnn9G5c2d27dpFaGgoAPn5+fTv358lS5YwdOhQ/vWvf3HmzBkWLVrEjh07qFu3rnUfd9xxB3379i223/Hjx5ea57XXXsNisfDMM89w8uRJJk2aRI8ePdiyZQuurq4ALF26lD59+tC6dWteeOEF7Ozs+Oabb6zFoW3btiXGrVmzJhMnTgQgLS2NBx98sNR9P//88wwZMoT77ruPhIQEPvjgAzp16sTmzZvx8fEp8ZwxY8bQsWNHAGbNmsXs2bOLPX7//fczZcoURo0axSOPPMLBgwf58MMP2bx5M6tWrcLR0bHUr8PlSE5Otr62sxUUFDBgwABWrlzJmDFjaNSoEdu3b+e9995jz549zJkz54Lj5uTkMGzYMGrWrMmpU6f47LPP6N27N9HR0dSqVQso/OXRw8ODxx9/HA8PD5YuXcqECRNITU3l7bffLjbe6dOn6du3L0OGDOGOO+5g+vTpPPjggzg5OXHPPfcU2/aRRx7h2muvLXbffffdd96sUVFR1rKSmJjIY489VuzxGTNmkJGRwYMPPoifnx/r16/ngw8+4OjRo8yYMQMo/Lfq0aOH9Tl33303gwYN4pZbbrHeFxAQcMGvmbOzM19++WWx+zZs2MD7779f7L6i98S1117LxIkTiY+PZ/LkyaxatarYe23btm107NgRR0dHxowZQ+3atdm/fz9z587ltddeK7H/jh07MmbMGACio6N5/fXXiz3+3XffMWLECHr16sWbb75JRkYGn3zyCTfccAObN2+mdu3a531t8fHxXH/99WRkZPDII4/g5+fH1KlTGTBgADNnzmTQoEEEBQXRuXNnpk+fzgsvvFDs+dOmTcPe3p7bbrsNgIyMDDp37syxY8e4//77qVWrFqtXr2b8+PGcOHGCSZMmFXv+N998Q1ZWFmPGjMHZ2ZkaNWrwxRdf8Mgjj3Drrbfyr3/9i6ysLLZt28a6deu48847rV//1atXM3ToUGrWrMmhQ4f45JNP6NKlC7t27SpxCvfDDz9McHAwL730EmvXruXzzz/Hx8eH1atXU6tWLV5//XX++OMP3n77bZo2bcrw4cOLPf/bb7/lzJkzjB07lqysLCZPnky3bt3Yvn07QUFB5/36ns/DDz+Mr68vL7zwAocOHWLSpEmMGzeOadOmWbcZP348b731FjfddBO9evVi69at9OrVi6ysrMven4hcJkNE5DJ98803BmAsXrzYSEhIMI4cOWL8/PPPhp+fn+Hq6mocPXrUMAzDyMrKMvLz84s99+DBg4azs7Px8ssvW+/7+uuvDcD4z3/+U2JfBQUF1ucBxttvv11imyZNmhidO3e2fr5s2TIDMMLCwozU1FTr/dOnTzcAY/Lkydax69evb/Tq1cu6H8MwjIyMDCMyMtK48cYbS+zr+uuvN5o2bWr9PCEhwQCMF154wXrfoUOHDHt7e+O1114r9tzt27cbDg4OJe7fu3evARhTp0613vfCCy8YZ3+L/vvvvw3A+OGHH4o9d/78+SXuj4iIMPr161ci+9ixY41zv+2fm/3pp582AgMDjdatWxf7mn733XeGnZ2d8ffffxd7/qeffmoAxqpVq0rs70LWr19vAMbMmTOt92VkZJTY7v777zfc3NyMrKws632dO3c2AOPdd9+13pednW20bNnSCAwMNHJycgzD+N/7YMaMGSXGdXd3N0aMGFHi/g4dOhhdu3a1fl70vvvmm28umHPixImGxWIxDh8+XOrrPffrfDEjRoww3N3dS9w/Y8YMAzCWLVtmGIZh5OTkGIGBgUbTpk2NzMxM63bz5s0zAGPChAnW+zp16mR4enqWyHj2e79IWFiYMWrUKOvnRV/Lov2eOXPG8PHxMUaPHl3seXFxcYa3t3eJ+8/16KOPGkCx99OZM2eMyMhIo3bt2tbvG5999pkBGNu3by/2/MaNGxvdunWzfv7KK68Y7u7uxp49e4pt93//93+Gvb29ERsbaxjG//49vby8jJMnTxbb9uabbzaaNGlywdyl/duvWbPGAIxvv/3Wel/R98hzv7e0b9/esFgsxgMPPGC9Ly8vz6hZs2ax/9+Kcp79/dQwDGPdunUGYDz22GPW+879XmEYhd8Dzn5/F+Xp0aNHsTyPPfaYYW9vbyQnJxuGUfjv5+DgYAwcOLDYeC+++KIBlPr/jIjYjk5lFJEy69GjBwEBAYSHhzN06FA8PDyYPXs2YWFhQOFf/IsuQM/PzycpKQkPDw8aNmzIP//8Yx3nl19+wd/fn4cffrjEPs499e5yDB8+HE9PT+vnt956KyEhIfzxxx8AbNmyhb1793LnnXeSlJREYmIiiYmJpKen0717d1asWFHsNCgoPOXSxcXlgvudNWsWBQUFDBkyxDpmYmIiwcHB1K9
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Количество записей в обучающей выборке до аугментации: 2253\n",
"Количество записей в обучающей выборке после oversampling: 42746\n",
"Количество записей в обучающей выборке после undersampling: 737\n",
"\n",
"Распределение salary_in_usd в обучающей выборке:\n",
"salary_in_usd\n",
"150000 58\n",
"100000 58\n",
"120000 53\n",
"160000 52\n",
"130000 48\n",
" ..\n",
"18000 1\n",
"72212 1\n",
"236600 1\n",
"66192 1\n",
"167580 1\n",
"Name: count, Length: 737, dtype: int64\n",
"\n",
"Распределение salary_in_usd в контрольной выборке:\n",
"salary_in_usd\n",
"100000 24\n",
"150000 21\n",
"130000 16\n",
"160000 15\n",
"135000 15\n",
" ..\n",
"122000 1\n",
"20000 1\n",
"63040 1\n",
"68318 1\n",
"125976 1\n",
"Name: count, Length: 365, dtype: int64\n",
"\n",
"Распределение salary_in_usd в тестовой выборке:\n",
"salary_in_usd\n",
"120000 24\n",
"150000 19\n",
"130000 18\n",
"200000 17\n",
"100000 17\n",
" ..\n",
"158677 1\n",
"139500 1\n",
"21669 1\n",
"168400 1\n",
"187000 1\n",
"Name: count, Length: 361, dtype: int64\n",
"\n",
"\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAwQAAAKqCAYAAACEmpnIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACPKUlEQVR4nOzdeXxMZ/vH8e9MlslCEkvELvaldoqondJWKbqgi6V9tNWF0k30qa2LahVtaXVDaZ+nVMuj1VKUqqLUTu37koSIJJLINnN+f+RnGEmIMSOS+bxfr/Oquc99zrnO6RhzzXXf55gMwzAEAAAAwCOZ8zsAAAAAAPmHhAAAAADwYCQEAAAAgAcjIQAAAAA8GAkBAAAA4MFICAAAAAAPRkIAAAAAeDASAgAAAMCDkRAAAAAAHoyEAAAAAPBgJASApFmzZslkMunvv//Otu7zzz+XyWRSjx49ZLVa8yE6AAAA9yEhAK5iwYIFGjx4sFq3bq1vv/1WXl5e+R0SAACAS5EQALlYtWqV+vbtqzp16ujHH3+Un59ffocEAADgciQEQA62bt2q++67T2XKlNHSpUsVHBycrc93332nJk2ayN/fXyVLltSjjz6qkydPOvQZMGCAihQpokOHDqlLly4KDAxU2bJlNW7cOBmGYe935MgRmUwmTZw4UZMnT1alSpXk7++vtm3baufOndmOvWfPHj3wwAMqXry4/Pz81LRpUy1atCjHc2nXrp1MJlO2ZdasWQ79PvnkE9WtW1cBAQEO/ebPn++wr7p162Y7xsSJE2UymXTkyBF728VhWJe32Ww21a9fP8fjz58/X02bNlXRokUdjj9x4sQcz+vK4/j6+urMmTMO69atW2ffz5XDwf766y/dddddCg4OVkBAgNq2bas///zToU9kZKT8/Pwc2letWiWTyaRVq1bZ2/7880/5+fkpMjIyW3y5Xf8xY8bY+7Rt21YNGjTI8fxq1qypLl26XPUahIeH53iMi8uVvv76a/t7t3jx4urTp4+OHz+eLe66detq06ZNatmypfz9/VW5cmVNnz492/7S0tI0evRoVatWTRaLRRUqVNArr7yitLQ0h34X45kyZUq2fdSqVUsmk0nPPfecQ3t8fLxeeOEFVahQQRaLRdWqVdOECRNks9nsfS7/+3OlunXrql27dvbXF///Xf6+vqhIkSIaMGCA/fXVhhJe1K5duxz3bzKZtHXrVoe+J0+elJeXV7bjDxgwQOHh4Q59jx8/Ln9//2x/hwDAHUgIgCscPHhQd911lywWi5YuXaoyZcpk6zNr1iw99NBD8vLy0vjx4zVo0CD98MMPatWqleLj4x36Wq1W3XXXXQoLC9O7776rJk2aaPTo0Ro9enS2/c6ePVsffvihnn32WUVGRmrnzp3q0KGDYmJi7H127dqlFi1aaPfu3RoxYoTef/99BQYGqkePHlqwYEGO51SrVi3NmTNHc+bM0eTJk7Otnzt3rp555hmFhoZq8uTJmjNnjkaOHHmdV+7a5syZox07dmRrX7dunR566CFZrVa98847ucZ5NV5eXvr6668d2mbOnJljZee3335TmzZtlJiYqNGjR+vtt99WfHy8OnTooA0bNtj7vf3227r33nvVs2dPHT58OMfjHj58WD169NC9996rt99+O8c+5cuXt1//Tz75JNv6xx57TNu3b8+W/G3cuFH79u3To48+es3zb9iwof0YF5c777wzW7+33npL/fr1U/Xq1TVp0iS98MILWrFihdq0aZPtvXvu3Dndc889atKkid59912VL19egwcP1owZM+x9bDabunfvrokTJ6pbt2766KOP1KNHD02ePFm9e/fOdnw/Pz/NnDnToW3t2rU6evRotr4pKSlq27atvv76a/Xr108ffvih7rjjDkVGRmr48OHXvCb5Kafz/Oqrr+Tr65un7UeNGqXU1FR3hAYA2RkAjJkzZxqSjJ9++smoWrWqIcno3Llzjn3T09ONUqVKGXXr1jUuXLhgb//pp58MScaoUaPsbf379zckGc8//7y9zWazGV27djV8fX2NM2fOGIZhGIcPHzYkGf7+/saJEyfsff/66y9DkjFs2DB7W8eOHY169eoZqampDvts2bKlUb169Wzx3nHHHUb79u3try8ea+bMmfa2vn37GiEhIQ7ns3LlSkOS8d1339nb2rZta9x2223ZjvHee+8ZkozDhw/b2y5e04ttqampRsWKFY2777472/EjIyMNSUZUVFS2ON97771sx7vcxeP07dvXqFevnr09OTnZCAoKMh5++GFDkrFx40b7tapevbrRpUsXw2az2funpKQYlStXNu68806H/ScnJxtNmzY1brvtNiMhIcF+XVauXGnEx8cbderUMW6//XYjJSUlx/hatmxp1K1b1/76zJkzhiRj9OjR9rb4+HjDz8/PePXVVx22HTJkiBEYGGgkJSVd9RpUqlTJ6Nq1a7b2Z5991rj8Y/7IkSOGl5eX8dZbbzn027Fjh+Ht7e3Q3rZtW0OS8f7779vb0tLSjIYNGxqlSpUy0tPTDcMwjDlz5hhms9n4448/HPY5ffp0Q5Lx559/2tskGQ888IDh7e1t/P333/b2J554wv7/6dlnn7W3v/HGG0ZgYKCxb98+h32PGDHC8PLyMo4dO2YYxtXfK7fddpvRtm1b++uc3tcXBQYGGv3797e/vvjeuvjeyUnbtm1z3H/fvn2NEiVKGGlpafZ11atXt5/n5cfv37+/UalSJfvrnTt3Gmaz2f535fK/VwDgDlQIgMsMGDBAx48f18MPP6xff/1V3333XbY+f//9t06fPq1nnnnG4dfnrl27qlatWlq8eHG2bS4fBnFxWER6erqWL1/u0K9Hjx4qV66c/XWzZs3UvHlz/fzzz5KkuLg4/fbbb3rooYd0/vx5xcbGKjY2VmfPnlWXLl20f//+bMOW0tPTZbFYrnre58+fV0BAgFvnSUybNk1nz57NsTJy/vx5mc1mhYSEOL3/xx57THv27LEP7/j+++8VHBysjh07OvTbunWr9u/fr4cfflhnz561X8Pk5GR17NhRq1evdhiOEhAQoB9//FFxcXH2KoaUVfnp3bu3zp07p0WLFsnf3z/HuFJTU695XYODg3Xffffpv//9r30omdVq1dy5c9WjRw8FBgY6fV0u98MPP8hms+mhhx6yn3dsbKxKly6t6tWra+XKlQ79vb299dRTT9lf+/r66qmnntLp06e1adMmSVlD52rXrq1atWo57LNDhw6SlG2fYWFh6tq1q/3X85SUFM2bN08DBw7MFu93332n1q1bq1ixYg777tSpk6xWq1avXu3QPyUlxaFfbGxsrncGu/zvz8UlNwkJCYqNjdX58+dz7XOlbt26yWQy2Yfy/fHHHzpx4kSOVZMrRUZGqnHjxnrwwQfzfDwAuBEkBMBl4uLi9PXXX+urr75Sw4YNNXToUCUkJDj0uTi0oWbNmtm2r1WrVrahD2azWVWqVHFoq1GjhiRlGxtcvXr1bPusUaOGvd+BAwdkGIZef/11hYaGOiwXv2ifPn3aYfv4+HgVKVLkqucdERGhU6dOacyYMTp27JhiY2OznfeNSEhI0Ntvv63hw4crLCwsx+PbbDYNHTpUBw8eVGxsrM6dO3ddxwgNDVXXrl3tw1lmzJih/v37y2x2/Jjbv3+/JKl///7ZruEXX3yhtLS0bOeempqq+Ph4LV261D5PIDIyUkuXLlVCQkK2sfKXi42NzXEOypX69eunY8eO6Y8//pAkLV++XDExMXrsscfyfhGuYf/+/TIMQ9WrV8927rt378723ilbtmy2ZOTK9+7+/fu1a9eubPu72O/KfUrSwIED9Z///EdpaWn67rvvVKxYMXsCcWW8S5YsybbvTp065bjv0aNHZ+u7Z8+eHK/F448/nq1vcnJyjn07deqk0NBQBQUFqVixYnrmmWdy7XuRj4+PHn30UYf34/3336+goKCrbrdmzRr9+OOPmjBhQo7zPwDAHbzzOwDgVvLee+/Zf5X77LPP1KJFC0VGRurjjz/O58iyXPzl+qWXXsp1omm1atUcXkd
"text/plain": [
"<Figure size 1000x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from imblearn.over_sampling import RandomOverSampler\n",
"\n",
"# Визуализация распределения зарплат в обучающей выборке\n",
"plt.figure(figsize=(10, 6))\n",
"sns.histplot(y_train, bins=30, kde=True, color='blue')\n",
"plt.title('Распределение зарплат в обучающей выборке')\n",
"plt.xlabel('Зарплата в USD')\n",
"plt.ylabel('Частота')\n",
"plt.show()\n",
"\n",
"ros = RandomOverSampler(random_state=42)\n",
"X_train_ros, y_train_ros = ros.fit_resample(X_train, y_train)\n",
"\n",
"# Визуализация распределения после oversampling\n",
"plt.figure(figsize=(10, 6))\n",
"sns.histplot(y_train_ros, bins=30, kde=True, color='green')\n",
"plt.title('Распределение зарплат после oversampling')\n",
"plt.xlabel('Зарплата в USD')\n",
"plt.ylabel('Частота')\n",
"plt.show()\n",
"\n",
"from imblearn.under_sampling import RandomUnderSampler\n",
"\n",
"rus = RandomUnderSampler(random_state=42)\n",
"X_train_rus, y_train_rus = rus.fit_resample(X_train, y_train)\n",
"\n",
"# Визуализация распределения после oversampling\n",
"plt.figure(figsize=(10, 6))\n",
"sns.histplot(y_train_ros, bins=30, kde=True, color='green')\n",
"plt.title('Распределение зарплат после oversampling')\n",
"plt.xlabel('Зарплата в USD')\n",
"plt.ylabel('Частота')\n",
"plt.show()\n",
"\n",
"print(f\"Количество записей в обучающей выборке до аугментации: {len(y_train)}\")\n",
"print(f\"Количество записей в обучающей выборке после oversampling: {len(y_train_ros)}\")\n",
"print(f\"Количество записей в обучающей выборке после undersampling: {len(y_train_rus)}\")\n",
"print()\n",
"\n",
"train_df, val_df = train_test_split(df, test_size=0.4, random_state=42)\n",
"val_df, test_df = train_test_split(val_df, test_size=0.5, random_state=42)\n",
"\n",
"# Функция для проверки распределения\n",
"def check_balance(df, name):\n",
" counts = df['salary_in_usd'].value_counts() # Обращение к столбцу 'salary_in_usd'\n",
" print(f\"Распределение salary_in_usd в {name}:\")\n",
" print(counts)\n",
" print()\n",
"\n",
"check_balance(train_df, \"обучающей выборке\")\n",
"check_balance(val_df, \"контрольной выборке\")\n",
"check_balance(test_df, \"тестовой выборке\")\n",
"print()\n",
"\n",
"# Корреляция\n",
"# Сначала отбираем только числовые столбцы\n",
"numeric_df = df.select_dtypes(include='number')\n",
"correlation_matrix = numeric_df.corr()\n",
"\n",
"# Визуализация корреляционной матрицы\n",
"plt.figure(figsize=(10, 8))\n",
"sns.heatmap(correlation_matrix, annot=True, fmt=\".2f\", cmap='coolwarm', square=True)\n",
"plt.title(\"Корреляция между переменными\")\n",
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Таким образом, мы проанализировали 3 датасета. Посмотрели какие проблемы с ними могут быть связаны, возможные пути их решения. \n",
"Разбили выборки, далее их сбалансировали, с помощью методов OverSampling и UnderSampling. Методы oversampling и undersampling лучше использовать для задач классификации, где целевая переменная — дискретные классы. Для регрессионных задач эти методы напрямую не применимы. Методы аугментации данных для регрессии, такие как SMOTE для регрессии, могут также помочь в увеличении количества обучающих данных и улучшении качества модели."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Вроде бы всё... Вроде бы получилось :)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "mai",
"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.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}