3193 lines
1.5 MiB
Plaintext
3193 lines
1.5 MiB
Plaintext
|
{
|
|||
|
"cells": [
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"### 1. Датасет: Диабет у индейцев Пима\n",
|
|||
|
"https://www.kaggle.com/datasets/uciml/pima-indians-diabetes-database\n",
|
|||
|
"##### О наборе данных: \n",
|
|||
|
"Этот набор данных был получен из Национального института диабета, болезней органов пищеварения и почек. Цель набора данных - диагностически предсказать, есть ли у пациента сахарный диабет, на основе определенных диагностических измерений, включенных в набор данных. На выбор этих образцов из более обширной базы данных было наложено несколько ограничений. В частности, все пациенты были женщинами в возрасте не менее 21 года, родом из племени пима.\n",
|
|||
|
"##### Таким образом:\n",
|
|||
|
"* Объект наблюдения - женщины племени пима, возрастом от 21 года.\n",
|
|||
|
"* Атрибуты: Pregnancies, Glucose, BloodPressure, SkinThickness, Insulin, BMI, DiabetesPedigreeFunction, Age, Outcome.\n",
|
|||
|
"* Проблемная область: Предсказание диабета у пациента на основе измерений."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 1,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Количество колонок: 9\n",
|
|||
|
"Колонки: Pregnancies, Glucose, BloodPressure, SkinThickness, Insulin, BMI, DiabetesPedigreeFunction, Age, Outcome\n",
|
|||
|
"\n",
|
|||
|
"<class 'pandas.core.frame.DataFrame'>\n",
|
|||
|
"RangeIndex: 768 entries, 0 to 767\n",
|
|||
|
"Data columns (total 9 columns):\n",
|
|||
|
" # Column Non-Null Count Dtype \n",
|
|||
|
"--- ------ -------------- ----- \n",
|
|||
|
" 0 Pregnancies 768 non-null int64 \n",
|
|||
|
" 1 Glucose 768 non-null int64 \n",
|
|||
|
" 2 BloodPressure 768 non-null int64 \n",
|
|||
|
" 3 SkinThickness 768 non-null int64 \n",
|
|||
|
" 4 Insulin 768 non-null int64 \n",
|
|||
|
" 5 BMI 768 non-null float64\n",
|
|||
|
" 6 DiabetesPedigreeFunction 768 non-null float64\n",
|
|||
|
" 7 Age 768 non-null int64 \n",
|
|||
|
" 8 Outcome 768 non-null int64 \n",
|
|||
|
"dtypes: float64(2), int64(7)\n",
|
|||
|
"memory usage: 54.1 KB\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"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>Pregnancies</th>\n",
|
|||
|
" <th>Glucose</th>\n",
|
|||
|
" <th>BloodPressure</th>\n",
|
|||
|
" <th>SkinThickness</th>\n",
|
|||
|
" <th>Insulin</th>\n",
|
|||
|
" <th>BMI</th>\n",
|
|||
|
" <th>DiabetesPedigreeFunction</th>\n",
|
|||
|
" <th>Age</th>\n",
|
|||
|
" <th>Outcome</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>0</th>\n",
|
|||
|
" <td>6</td>\n",
|
|||
|
" <td>148</td>\n",
|
|||
|
" <td>72</td>\n",
|
|||
|
" <td>35</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>33.6</td>\n",
|
|||
|
" <td>0.627</td>\n",
|
|||
|
" <td>50</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>1</th>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" <td>85</td>\n",
|
|||
|
" <td>66</td>\n",
|
|||
|
" <td>29</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>26.6</td>\n",
|
|||
|
" <td>0.351</td>\n",
|
|||
|
" <td>31</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2</th>\n",
|
|||
|
" <td>8</td>\n",
|
|||
|
" <td>183</td>\n",
|
|||
|
" <td>64</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>23.3</td>\n",
|
|||
|
" <td>0.672</td>\n",
|
|||
|
" <td>32</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>3</th>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" <td>89</td>\n",
|
|||
|
" <td>66</td>\n",
|
|||
|
" <td>23</td>\n",
|
|||
|
" <td>94</td>\n",
|
|||
|
" <td>28.1</td>\n",
|
|||
|
" <td>0.167</td>\n",
|
|||
|
" <td>21</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>4</th>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>137</td>\n",
|
|||
|
" <td>40</td>\n",
|
|||
|
" <td>35</td>\n",
|
|||
|
" <td>168</td>\n",
|
|||
|
" <td>43.1</td>\n",
|
|||
|
" <td>2.288</td>\n",
|
|||
|
" <td>33</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
|
|||
|
"0 6 148 72 35 0 33.6 \n",
|
|||
|
"1 1 85 66 29 0 26.6 \n",
|
|||
|
"2 8 183 64 0 0 23.3 \n",
|
|||
|
"3 1 89 66 23 94 28.1 \n",
|
|||
|
"4 0 137 40 35 168 43.1 \n",
|
|||
|
"\n",
|
|||
|
" DiabetesPedigreeFunction Age Outcome \n",
|
|||
|
"0 0.627 50 1 \n",
|
|||
|
"1 0.351 31 0 \n",
|
|||
|
"2 0.672 32 1 \n",
|
|||
|
"3 0.167 21 0 \n",
|
|||
|
"4 2.288 33 1 "
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 1,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import pandas as pd\n",
|
|||
|
"df = pd.read_csv(\".//static//csv//diabetes.csv\", sep=\",\")\n",
|
|||
|
"print('Количество колонок: ' + str(df.columns.size)) \n",
|
|||
|
"print('Колонки: ' + ', '.join(df.columns)+'\\n')\n",
|
|||
|
"\n",
|
|||
|
"df.info()\n",
|
|||
|
"df.head()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Получение сведений о пропущенных данных\n",
|
|||
|
"Типы пропущенных данных:\n",
|
|||
|
"\n",
|
|||
|
"- None - представление пустых данных в Python\n",
|
|||
|
"- NaN - представление пустых данных в Pandas\n",
|
|||
|
"- '' - пустая строка"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 2,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Pregnancies 0\n",
|
|||
|
"Glucose 0\n",
|
|||
|
"BloodPressure 0\n",
|
|||
|
"SkinThickness 0\n",
|
|||
|
"Insulin 0\n",
|
|||
|
"BMI 0\n",
|
|||
|
"DiabetesPedigreeFunction 0\n",
|
|||
|
"Age 0\n",
|
|||
|
"Outcome 0\n",
|
|||
|
"dtype: int64\n",
|
|||
|
"\n",
|
|||
|
"Pregnancies False\n",
|
|||
|
"Glucose False\n",
|
|||
|
"BloodPressure False\n",
|
|||
|
"SkinThickness False\n",
|
|||
|
"Insulin False\n",
|
|||
|
"BMI False\n",
|
|||
|
"DiabetesPedigreeFunction False\n",
|
|||
|
"Age False\n",
|
|||
|
"Outcome False\n",
|
|||
|
"dtype: bool\n",
|
|||
|
"\n",
|
|||
|
"Pregnancies процент пустых значений: %0.00\n",
|
|||
|
"Glucose процент пустых значений: %0.00\n",
|
|||
|
"BloodPressure процент пустых значений: %0.00\n",
|
|||
|
"SkinThickness процент пустых значений: %0.00\n",
|
|||
|
"Insulin процент пустых значений: %0.00\n",
|
|||
|
"BMI процент пустых значений: %0.00\n",
|
|||
|
"DiabetesPedigreeFunction процент пустых значений: %0.00\n",
|
|||
|
"Age процент пустых значений: %0.00\n",
|
|||
|
"Outcome процент пустых значений: %0.00\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"# Количество пустых значений признаков\n",
|
|||
|
"print(df.isnull().sum())\n",
|
|||
|
"print()\n",
|
|||
|
"\n",
|
|||
|
"# Есть ли пустые значения признаков\n",
|
|||
|
"print(df.isnull().any())\n",
|
|||
|
"print()\n",
|
|||
|
"\n",
|
|||
|
"# Процент пустых значений признаков\n",
|
|||
|
"for i in df.columns:\n",
|
|||
|
" null_rate = df[i].isnull().sum() / len(df) * 100\n",
|
|||
|
" print(f\"{i} процент пустых значений: %{null_rate:.2f}\")"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"##### Проверим выбросы и устраним их:"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 3,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Колонка Pregnancies:\n",
|
|||
|
" Есть выбросы: Да\n",
|
|||
|
" Количество выбросов: 4\n",
|
|||
|
" Минимальное значение: 0.0\n",
|
|||
|
" Максимальное значение: 13.5\n",
|
|||
|
" 1-й квартиль (Q1): 1.0\n",
|
|||
|
" 3-й квартиль (Q3): 6.0\n",
|
|||
|
"\n",
|
|||
|
"Колонка Glucose:\n",
|
|||
|
" Есть выбросы: Да\n",
|
|||
|
" Количество выбросов: 5\n",
|
|||
|
" Минимальное значение: 37.125\n",
|
|||
|
" Максимальное значение: 199.0\n",
|
|||
|
" 1-й квартиль (Q1): 99.0\n",
|
|||
|
" 3-й квартиль (Q3): 140.25\n",
|
|||
|
"\n",
|
|||
|
"Колонка BloodPressure:\n",
|
|||
|
" Есть выбросы: Да\n",
|
|||
|
" Количество выбросов: 45\n",
|
|||
|
" Минимальное значение: 35.0\n",
|
|||
|
" Максимальное значение: 107.0\n",
|
|||
|
" 1-й квартиль (Q1): 62.0\n",
|
|||
|
" 3-й квартиль (Q3): 80.0\n",
|
|||
|
"\n",
|
|||
|
"Колонка SkinThickness:\n",
|
|||
|
" Есть выбросы: Да\n",
|
|||
|
" Количество выбросов: 1\n",
|
|||
|
" Минимальное значение: 0.0\n",
|
|||
|
" Максимальное значение: 80.0\n",
|
|||
|
" 1-й квартиль (Q1): 0.0\n",
|
|||
|
" 3-й квартиль (Q3): 32.0\n",
|
|||
|
"\n",
|
|||
|
"Колонка Insulin:\n",
|
|||
|
" Есть выбросы: Да\n",
|
|||
|
" Количество выбросов: 34\n",
|
|||
|
" Минимальное значение: 0.0\n",
|
|||
|
" Максимальное значение: 318.125\n",
|
|||
|
" 1-й квартиль (Q1): 0.0\n",
|
|||
|
" 3-й квартиль (Q3): 127.25\n",
|
|||
|
"\n",
|
|||
|
"Колонка BMI:\n",
|
|||
|
" Есть выбросы: Да\n",
|
|||
|
" Количество выбросов: 19\n",
|
|||
|
" Минимальное значение: 13.35\n",
|
|||
|
" Максимальное значение: 50.550000000000004\n",
|
|||
|
" 1-й квартиль (Q1): 27.3\n",
|
|||
|
" 3-й квартиль (Q3): 36.6\n",
|
|||
|
"\n",
|
|||
|
"Колонка DiabetesPedigreeFunction:\n",
|
|||
|
" Есть выбросы: Да\n",
|
|||
|
" Количество выбросов: 29\n",
|
|||
|
" Минимальное значение: 0.078\n",
|
|||
|
" Максимальное значение: 1.2\n",
|
|||
|
" 1-й квартиль (Q1): 0.24375\n",
|
|||
|
" 3-й квартиль (Q3): 0.62625\n",
|
|||
|
"\n",
|
|||
|
"Колонка Age:\n",
|
|||
|
" Есть выбросы: Да\n",
|
|||
|
" Количество выбросов: 9\n",
|
|||
|
" Минимальное значение: 21.0\n",
|
|||
|
" Максимальное значение: 66.5\n",
|
|||
|
" 1-й квартиль (Q1): 24.0\n",
|
|||
|
" 3-й квартиль (Q3): 41.0\n",
|
|||
|
"\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"numeric_columns = ['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI', 'DiabetesPedigreeFunction', 'Age']\n",
|
|||
|
"for column in numeric_columns:\n",
|
|||
|
" if pd.api.types.is_numeric_dtype(df[column]): # Проверяем, является ли колонка числовой\n",
|
|||
|
" q1 = df[column].quantile(0.25) # Находим 1-й квартиль (Q1)\n",
|
|||
|
" q3 = df[column].quantile(0.75) # Находим 3-й квартиль (Q3)\n",
|
|||
|
" iqr = q3 - q1 # Вычисляем межквартильный размах (IQR)\n",
|
|||
|
"\n",
|
|||
|
" # Определяем границы для выбросов\n",
|
|||
|
" lower_bound = q1 - 1.5 * iqr # Нижняя граница\n",
|
|||
|
" upper_bound = q3 + 1.5 * iqr # Верхняя граница\n",
|
|||
|
"\n",
|
|||
|
" # Подсчитываем количество выбросов\n",
|
|||
|
" outliers = df[(df[column] < lower_bound) | (df[column] > upper_bound)]\n",
|
|||
|
" outlier_count = outliers.shape[0]\n",
|
|||
|
"\n",
|
|||
|
" # Устраняем выбросы: заменяем значения ниже нижней границы на саму нижнюю границу, а выше верхней — на верхнюю\n",
|
|||
|
" df[column] = df[column].apply(lambda x: lower_bound if x < lower_bound else upper_bound if x > upper_bound else x)\n",
|
|||
|
"\n",
|
|||
|
" print(f\"Колонка {column}:\")\n",
|
|||
|
" print(f\" Есть выбросы: {'Да' if outlier_count > 0 else 'Нет'}\")\n",
|
|||
|
" print(f\" Количество выбросов: {outlier_count}\")\n",
|
|||
|
" print(f\" Минимальное значение: {df[column].min()}\")\n",
|
|||
|
" print(f\" Максимальное значение: {df[column].max()}\")\n",
|
|||
|
" print(f\" 1-й квартиль (Q1): {q1}\")\n",
|
|||
|
" print(f\" 3-й квартиль (Q3): {q3}\\n\")"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Постараемся выявить зависимости Outcome от остальных колонок:"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 4,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAq4AAAIjCAYAAADC0ZkAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABbhElEQVR4nO3de5zMZf/H8ffM7uyuZXeVdcyyIoTix5YbCSUb24G7UhFL7iSHVG5F3UISkm6VQgd0EqW4lfMxxxxDBzllnU9Ldqy1u7M7398f2w5j9ryzO/ut1/Px2Ifm+l7zvT4zs/Kea67vNRbDMAwBAAAAJZzV1wUAAAAAeUFwBQAAgCkQXAEAAGAKBFcAAACYAsEVAAAApkBwBQAAgCkQXAEAAGAKBFcAAACYAsEVAAAApkBwBQAUyOrVq2WxWLR69WpflwLgb4LgCuTTlClTFB0drYoVK8pms6lSpUpq1aqVPvnkEzmdTl+XhwLq0aOHLBaL6yc0NFQNGzbUhAkTlJKS4uvy4AOHDx9Wnz59FBkZqcDAQFWoUEEdO3bU+vXrC3Xe9957TzNmzPBOkcDfjMUwDMPXRQBm0qxZM1WuXFl33HGHQkNDdf78ef3www+aNWuWHn74YX3xxRe+LhEF0KNHD82aNUsffvihJOn8+fP6+uuvtXr1aj388MOaNWuWjysseZxOp1JTUxUQECCr9a81D7J+/Xp16NBBkvSvf/1L9erV08mTJzVjxgwdOHBAb731lgYMGFCgczdo0EDh4eHMVAMFQHAF8snhcMhms3m0DxgwQJMmTdLBgwcVGRlZ/IWhUHr06KE5c+YoMTHR1eZ0OtW0aVNt3bpVx44dU5UqVTzuZxiGkpOTVapUqeIsF0Xojz/+UL169WQYhtavX6+aNWu6jl26dEnR0dFav3691q5dq+bNm+f7/ARXoOD+Wm+RgWKQVWiV5AqrV848/e9//1NMTIyqVKmiwMBA1axZU6NGjVJ6errbfVu3bu32MXV4eLhiYmL0888/u/WzWCwaMWKEW9v48eNlsVjUunVrt/bk5GSNGDFCtWvXVlBQkCpXrqx//vOfOnDggCQpLi5OFovF4yPLfv36yWKxqEePHq62GTNmyGKxKCAgQGfOnHHrv3HjRlfdW7dudTv21VdfqUmTJipVqpTCw8P12GOP6dixYx7P3W+//abOnTurfPnyKlWqlOrUqaOXXnpJkjRixAi35yarn8wA0Lp1azVo0MDj/AVltVpdz2tcXJykjNf5nnvu0ZIlSxQVFaVSpUpp6tSpkjJmaZ955hlFREQoMDBQtWrV0rhx4zyWkJw9e1bdunVTaGioypYtq9jYWO3cudPj9ejRo4fKlCmjY8eOqWPHjipTpozKly+vf//73x6/Q2+88YaaN2+ucuXKqVSpUmrSpInmzJnj8ZgsFov69++vefPmqUGDBgoMDFT9+vW1ePFij77Hjh1Tr169XL+/NWrU0FNPPaXU1FRJ2a9x3bRpk+6++26FhYUpODhYrVq18vh4/cKFC3rmmWfcPoa/6667tH379lxflx9//FHt27dXaGioypQpozvvvFM//PCD63jm72tOPzl9VD916lSdPHlS48ePdwutklSqVCl9/PHHslgseuWVV1ztmb+nV8us5crfn19++UXff/+9q5Yr/+6eP39ezz77rOt5qVq1qrp37674+HhXn9OnT6tXr16qWLGigoKC1LBhQ3388cdu42b+/X7jjTf07rvv6vrrr1dwcLDatWunI0eOyDAMjRo1SlWrVlWpUqV0//3369y5cx71L1q0SC1btlTp0qUVEhKimJgY/fLLL9k+d0BR8/d1AYBZnT9/Xmlpabpw4YK2bdumN954Q4888oiqVavm6jNjxgyVKVNGzz33nMqUKaOVK1fq5Zdflt1u1/jx493OV7duXb300ksyDEMHDhzQm2++qQ4dOujw4cM51jBmzBiP9vT0dN1zzz1asWKFHnnkEQ0cOFAXLlzQsmXL9PPPP3v8Y5xp//79+uCDD7Idz8/PT5999pmeffZZV9v06dMVFBSk5ORkt74zZsxQz549dcstt2jMmDE6deqU3nrrLa1fv14//vijypYtK0natWuXWrZsKZvNpt69eysyMlIHDhzQt99+q9GjR+uf//ynatWq5Trvs88+qxtvvFG9e/d2td14443Z1lxYmUG/XLlyrrY9e/bo0Ucf1ZNPPqknnnhCderUUVJSklq1aqVjx47pySefVLVq1bRhwwYNHTpUJ06c0MSJEyVlzOLee++92rx5s5566inVrVtX//vf/xQbG5vl+Onp6YqOjlbTpk31xhtvaPny5ZowYYJq1qypp556ytXvrbfe0n333aeuXbsqNTVVs2bN0kMPPaTvvvtOMTExbudct26dvvnmG/Xt21chISF6++239cADD+jw4cOux3n8+HHdeuutOn/+vHr37q26devq2LFjmjNnjpKSkhQQEJBlvStXrlT79u3VpEkTDR8+XFarVdOnT9cdd9yhtWvX6tZbb5Uk9enTR3PmzFH//v1Vr149nT17VuvWrdPu3bvVuHHjbF+PX375RS1btlRoaKief/552Ww2TZ06Va1bt9b333+vpk2b6vbbb9enn37qus/o0aMlyfVmSFKOM6XffvutgoKC1Llz5yyP16hRQ7fddptWrlypS5cu5Wu2feLEiRowYIDKlCnjqqdixYqSpMTERLVs2VK7d+/W448/rsaNGys+Pl7z58/X0aNHFR4erkuXLql169bav3+/+vfvrxo1auirr75Sjx49dP78eQ0cONBtvM8//1ypqakaMGCAzp07p9dff12dO3fWHXfcodWrV+uFF17Q/v379c477+jf//63pk2b5rrvp59+qtjYWEVHR2vcuHFKSkrS5MmTddttt+nHH3/kkyX4hgGgQOrUqWNIcv10797dcDgcbn2SkpI87vfkk08awcHBRnJysqutVatWRqtWrdz6vfjii4Yk4/Tp0642Scbw4cNdt59//nmjQoUKRpMmTdzuP23aNEOS8eabb3qM73Q6DcMwjIMHDxqSjOnTp7uOde7c2WjQoIERERFhxMbGutqnT59uSDIeffRR46abbnK1X7x40QgNDTW6dOliSDK2bNliGIZhpKamGhUqVDAaNGhgXLp0ydX/u+++MyQZL7/8sqvt9ttvN0JCQoxDhw5lWefVqlev7lbblVq1amXUr18/y2O5iY2NNUqXLm2cOXPGOHPmjLF//37jtddeMywWi3HzzTe7jS/JWLx4sdv9R40aZZQuXdrYu3evW/uQIUMMPz8/4/Dhw4ZhGMbXX39tSDImTpzo6pOenm7ccccdHq9HbGysIcl45ZVX3M75f//3f0aTJk3c2q7+XUtNTTUaNGhg3HHHHW7tkoyAgABj//79rradO3cakox33nnH1da9e3fDarW6XtMrZb42q1atMiQZq1atcrXfcMMNRnR0tNvrl5SUZNSoUcO46667XG1hYWFGv379PM6dm44dOxoBAQHGgQMHXG3Hjx83QkJCjNtvvz3L+2T19ysnZcuWNRo2bJhjn6efftqQZOzatcswDMMYPny4kdU/qZl/dw4ePOhqq1+/fpb1vPzyy4Yk45tvvvE4lvl8Tpw40ZBkfPbZZ65jqampRrNmzYwyZcoYdrvdMIzLf7/Lly9vnD9/3tV36NChhiSjYcOGbv+/evTRR42AgADX/5cuXLhglC1b1njiiSfc6jh58qQRFhbm0Q4UF5YKAAU0ffp0LVu2TJ9//rl69eqlzz//3G0WUJLbTMyFCxcUHx+vli1bKikpSb/99ptbX4fDofj4eJ05c0YbN27U3LlzdfPNNys8PDzL8Y8dO6Z33nlHw4YNU5kyZdyOff311woPD8/y4pGsPs6UpG3btumrr77SmDFjsr3Qplu3bvrtt99cSwK+/vprhYWF6c4773Trt3XrVp0+fVp9+/ZVUFCQqz0mJkZ169bVggULJElnzpzRmjVr9Pjjj7vNVOdUZ27S09MVHx+v+Ph410faeXXx4kWVL19e5cuXV61atfTiiy+qWbNmmjt3rlu
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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bNmyqH4aTZ06FYsWLcL48eNxww03IBgM4uuvv8a3336LIUOGAABuuOEGvPrqq7j88stx1113Ye3atZgzZ05kpPlou3fvxlVXXYWbbroJv//97/HUU0/hggsuwIIFC3DffffhlltuARAO7FdccQV27NgR+aV469atGDp0KPLz83HvvffCarXinXfewcUXX4z33nsPl1xyieLXTZRQZCJKeD179pQBRP5cc801ciAQiKqpr69v8nU33XSTnJSUJHu93six4cOHy8OHD4+qu++++2QAcnl5eeQYAPmhhx6KPL7nnnvkrKwsefDgwVFf/89//lMGID/99NNNri9JkizLsrx3714ZgLxw4cLIuSuuuELu16+fXFBQIE+ZMiVyfOHChTIA+Xe/+53cv3//yHG32y07HA75qquukgHI69atk2VZlv1+v5yVlSX369dP9ng8kfpPPvlEBiA/+OCDkWPnnHOObLfb5X379jXb57G6dOkS1dvRhg8fLvft27fZc63573//KwOQ582b16SHI0eORP05+nt87Pet8X3au3dv1POsWLFCBiCvWLFClmVZDgaDclFRkdylSxe5urq6yTUbDRw4UM7KypIrKysjxzZv3iyLoihfc801kWPJycny9OnTW3x9kiTJPXr0kMeNGxf1/PX19XJRUZE8ZsyYFr9WlmV53rx5MgD59ddfjxzz+/1ycXGxbLPZZKfT2eRrHnroIfl4/u/s4osvlgE0eT+O9v7778sA5GeffVaW5abva6PmfranT5/ebD9ffPGFDEC+7bbbmpxrfK82bdokA5BvuOGGqPN//OMfZQDyF198ETnWpUsXGYC8evXqyLHPPvtMBiBbLJaon/OXXnqpSf+jRo2S+/fvH/W/D5IkyWeddZbco0ePFt8bokTHaQlEJ4GFCxdi2bJleOONNzB16lS88cYbUaOJAGCxWCL/rqurQ0VFBc4++2zU19dj+/btUbWBQAAVFRU4cuQI1qxZgw8++ACnnHIKMjIymr3+wYMH8dxzz+GBBx5oMtrYePPTrbfe2uTrjv449mgbNmzAu+++izlz5kRNrTja1Vdfje3bt0c+rn3vvfeQnJyMUaNGRdWtX78e5eXluOWWW2A2myPHJ06ciF69euH//u//AABHjhzBypUrcf3110eNeLfWZ1tCoRAqKipQUVEBv9+v6GucTicANHkfa2trkZmZGfVn06ZN7erraN9//z327t2LO+64IzKC3ajxdR8+fBibNm3Ctddei7S0tMj5U045BWPGjMHixYsjx1JSUrB27VocOnSo2ett2rQJu3btwlVXXYXKysrI++N2uzFq1CisXLmy1ZU+Fi9ejJycHPzud7+LHDMYDLjtttvgcrnw1VdftedtiFJXVwcAsNvtLdY0nmv8fsXCe++9B0EQ8NBDDzU51/i9aHyvZ86cGXX+rrvuAoDIz3OjPn36oLi4OPL4jDPOAACce+65UT/njcd/+uknAEBVVRW++OILXHHFFZH/vaioqEBlZSXGjRuHXbt2NTuth+hkwHBLdBIoLi7G6NGjcdVVV+Ef//gHHnnkESxcuDBqDuPWrVtxySWXIDk5GQ6HA5mZmfj9738PIBycjrZ69WpkZmYiKysLZ511FoLBIN59990WQ95DDz2EvLw83HTTTU3O7dmzBz179oR
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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ICEhATNmzEBwcDD+/e9/44YbbsDy5ctx4403AnD9oTFv3jzce++96NOnD4xGI3bu3Indu3djxIgRAICxY8di//79eOihh5CUlISCggKsX78eOTk59f5EY+rUqYiKisJzzz2H8vJyAMBnn32GCRMmIC0tDQsWLEBFRQXef/99DBw4EH/88UeN18rPz0f//v1RUVHh/tRl2bJluO666/Ddd9/hxhtvRMeOHfHZZ5+5n7N48WIcPHgQb775prutW7duXq/xww8/AHCNoFfHYDDg+uuvx7Jly5CRkeHxM16bWbNmoaSkBCdPnnTXExISAsC3331RFHHddddh06ZNmDx5Mnr06IG1a9fiySefxKlTpzxeIwD8+uuv+P777zFt2jQAwLx583DNNdfgqaeewnvvvYepU6eiqKgIr7zyCu655x789NNP7uf+9NNPGDVqFHr16oXZs2dDoVBg6dKluPrqq/Hrr7+iT58+Pr9uIp+IRFRvHTp0EAG4v8aPHy/abDaPPhUVFVWed//994tBQUGi2Wx2tw0ePFgcPHiwR79//etfIgCxoKDA3QZAnD17tvvxU089JUZHR4u9evXyeP7HH38sAhDfeOONKtd3Op2iKIpiVlaWCEBcunSp+9itt94qdunSRUxMTBQnTJjgbl+6dKkIQLz99tvFrl27utvLy8vFsLAw8Y477hABiL///rsoiqJotVrF6OhosUuXLqLJZHL3/9///icCEJ977jl326BBg8TQ0FDx+PHj1dZ5qVatWnnUdrHBgweLnTt3rvZYbSZMmODx/az8SkhIEHft2uXRd9OmTSIAcdOmTaIo1u319ujRQ4yOjhbPnTvnbtu7d6+oUCjE8ePHu9tuuOEGUafTebwvBw4cEJVKpXjp/3y3atVKHDlypHjmzBnxzJkz4t69e8Vx48aJAMSHHnpIFMUL3++wsDCPnylRFMVhw4aJXbt29fiZdDqdYv/+/cV27dq527p37y6OGTPG63tYVFQkAhBfffVVr31EserP8cWvo7qfu4EDB4p2u93dXlpaKoaHh4v33Xefx/Pz8vJEg8FQpf1Sjz76qAhA/PXXXz3OmZycLCYlJYkOh6PKcyZMmCC2atWqxvNerEePHqLBYKixzxtvvCECEL///ntRFC+83qysLI9+l/68iaIojhkzptp6fPndX7lypQhAnDt3rsfxm2++WRQEQczIyHC3ARC1Wq1HTR988IEIQIyNjRWNRqO7febMmR71O51OsV27dmJaWprH73NFRYWYnJwsjhgxosb3h6g+OC2B6DIsXboU69evxxdffIHJkyfjiy++8BhNBAC9Xu/+d2lpKc6ePYurrroKFRUVOHTokEdfm82Gs2fP4syZM0hPT8eKFSvQrVs3NG/evNrrnzp1Cu+88w6effZZ96hNpeXLl6N58+Z46KGHqjzP2zJSu3btwrfffot58+Z5TK242N13341Dhw65px8sX74cBoMBw4YN8+i3c+dOFBQUYOrUqdDpdO72MWPGICUlxf3x75kzZ7B582bcc889HiPeNdVZG4fDgbNnz+Ls2bOwWq11eq5Op8P69euxfv16rF27Fh988AFCQkIwevRoHDlyxOvzfH29p0+fxp49ezBx4kRERka6+3Xr1g0jRozAqlWr3K9h7dq1uOGGGzzel44dOyI
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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5ppa+2dmZuKOO+7AuHHjMGbMGCxevBgPPPAAevbsiS5dujSo/mXLlqGkpASPPPIIJEnCq6++ittvvx1//PFHjb9oAcCsWbMwc+ZM9O3bFy+88AI0Gg22b9+OH374AYMHD672OQsWLMCjjz6K5557Di+99FK96zhw4AD69euH+Ph4TJkyBYGBgfjyyy8xfPhwfP31166PzmfOnIm0tDQ89NBD6N27N4xGI3bu3Indu3dj0KBBAIARI0bgwIEDmDhxIhITE5GXl4d169bh5MmTtX7qsX79egwZMgRXXHEFZs6cCZPJhHfeeQf9+vXD7t27kZiY2Oifu5UrVyIxMREDBgyo9vh1112HxMTEKmHREx9//LHrdamsp/Lv9OnTp9G7d28UFRVh/Pjx6NixI7Kzs/HVV1+hvLwcGo0Gubm56Nu3L8rLy12fFn344Ye49dZb8dVXX1WZvpCWlga9Xo8pU6YgMzMT77zzDtRqNRQKBQoLCzFz5kxs27YNS5cuRVJSEqZPn+567uzZszFt2jSMHDkSDz30EM6ePYt33nkH1113ndu/A0ReI4ioWh06dBAAXF+jR48WNpvNrU95eXmV5z3yyCMiICBAmM1mV9vAgQPFwIED3fo999xzAoDIy8tztQEQM2bMcD3+17/+JaKiokTPnj3dnr948WIBQLzxxhtVru90OoUQQhw/flwAEEuWLHEdGzlypOjatatISEgQY8aMcbUvWbJEABD33HOP6Natm6u9rKxMhISEiHvvvVcAEDt27BBCCGG1WkVUVJTo2rWrMJlMrv7fffedACCmT5/uarvuuutEcHCwOHHiRLV1Xqp169ZutV1s4MCBokuXLtUeq8v06dMFABEYGCiGDBkiZs+eLXbt2lWl38aNGwUAsXz5clFSUiIGDhwoIiMjxa+//urWr/I1O378uFvtAMRPP/3kasvLyxNarVY89dRT1dY1Z86cKuepVPkeRkREiIKCAlf7//73PwFArFy50tU2Y8YMcfE/6UePHhUKhULcdtttwuFwuJ334te+devWYujQoUIIIf7zn/8ISZLEiy++2OA6brrpJtGtWze3n3+n0yn69u0r2rVr52q76qqrXNetTmFhoQAg5syZU2OfmnTv3l1ERUWJc+fOudp+++03oVAoxOjRo6t9Tm0/d5cqKioSAMSwYcNq7XfrrbcKAMJoNAohhBgzZoxo3bp1lX6XvndCCBEYGFhtPaNHjxYKhcL1d/File/rpEmTBACxefNm17GSkhKRlJQkEhMTXT8PlT/rXbt2FVar1dX3nnvuEZIkiSFDhridPzk52a3+rKwsoVQqxezZs9367du3T6hUqirtRN7AqQJENViyZAnWrVuHTz/9FOPGjcOnn37qNhoDAHq93vXfJSUlyM/Px4ABA1BeXo7Dhw+79bXZbMjPz8fZs2eRkZGBb775BldeeaXbgpyLZWdn45133sG0adMQFBTkduzrr79GZGQkJk6cWOV5NS0U2rVrF5YvX460tDS36Q4Xu//++3H48GHXlICvv/4aBoMBN910k1u/nTt3Ii8vD4899pjbYqChQ4eiY8eOrlGms2fP4qeffsKDDz7oNlJdW511cTgcyM/PR35+vttHo3WZNWsWli1bhquvvhpr167F888/j549e6JHjx5uHyFXKi4uxuD
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArcAAAIjCAYAAAAZajMiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACLbElEQVR4nOzde5ycZX3//9d933Oe2fMxWTbZkAAhJJxP4SyHBERaBVpRixBRWwytQKsVUSRov7FqxVo51CqgVWof1lp/IpCEgyAQTkEOiQSyIUtCsufzzM7pPvz+mN0le0iyhM3MJHk/H488NnPPtTOfnQz6nmuv63MZnud5iIiIiIgcAMxCFyAiIiIiMl0UbkVERETkgKFwKyIiIiIHDIVbERERETlgKNyKiIiIyAFD4VZEREREDhgKtyIiIiJywFC4FREREZEDhsKtiIiIiBwwFG5FRGQCwzC49dZbR2/fd999GIZBS0tLwWoSEZkKhVuR/dDdd9/N0qVLqaurw+/3U19fz9lnn81Pf/pTXNctdHmyl66++mpisVihyzjgZLNZvv/973PSSSdRUlJCLBbjpJNO4vvf/z7ZbHavH/eZZ57h1ltvpa+vb/qKFZH3TeFWZD/0k5/8hGg0yle/+lV+/OMf8+Uvf5mGhgauvvpqPvGJTxS6PDkAXXnllSSTSWbPnl3oUt6TRCLBBRdcwOc//3nq6+v55je/ybe//W1mzpzJ5z//eS644AISicRePfYzzzzDihUrFG5Fioyv0AWIyHv35JNP4vf7x1z7u7/7O6qqqvjBD37AypUraWpqKkxxckCyLAvLsgpdxnt244038sQTT/Bv//ZvXHfddaPXr732Wu644w6uu+46/uEf/oG77rqrgFWKyHTSzK3Ifmh8sB0xEmhN893/tH/zm99w8cUXM3PmTILBIHPnzuXrX/86juOM+d5zzjkHwzBG/1RXV3PxxRezfv36MePGr8UE+Pa3v41hGJxzzjljrqdSKW699VYOP/xwQqEQM2bM4NJLL2Xz5s0AtLS0YBgG991335jvW758OYZhcPXVV49eG1nzGQgE6OzsHDN+7dq1o3W/+OKLY+775S9/yQknnEA4HKa6upq/+qu/Yvv27RNeu40bN/KXf/mX1NTUEA6HOeKII7j55psBuPXWW8e8NpP9+f3vfz/6Oi5cuHDC4++tpqYmPvShD/HUU09x8sknEwqFOPTQQ/npT386Zlw2m2XFihUcdthhhEIhqqqqOOOMM1izZs3omHPOOWfCvxHklkPs6cPQZGtup1rbriQSCf7+7/+exsZGgsEgRxxxBN/5znfwPG90zJ5e98l+nhHvvPMOP/7xjzn33HPHBNsRy5cv5wMf+AA/+tGPeOedd4BdvydHahl5799666184QtfAGDOnDmj9ez8+vzsZz/j5JNPJhKJUFFRwVlnncXq1avHPOadd97JUUcdRTAYZObMmSxfvnzCTPDIe+rVV1/l7LPPJhKJMG/ePP7nf/4HgCeeeIJTTjll9H37yCOPTKh9+/btfOpTn6Kuro5gMMhRRx3FPffcs8vXTmR/pplbkf1YX18ftm0zODjIunXr+M53vsMVV1zBrFmzRsfcd999xGIxbrzxRmKxGI899hi33HILAwMDfPvb3x7zePPnz+fmm2/G8zw2b97Md7/7XT74wQ+ydevW3dawcuXKCdcdx+FDH/oQjz76KFdccQWf//znGRwcZM2aNaxfv565c+dO+njNzc38x3/8xy6fz7Isfvazn3HDDTeMXrv33nsJhUKkUqkxY++77z6WLVvGSSedxMqVK2lvb+df//Vfefrpp/njH/9IeXk5AK+++ipnnnkmfr+fz372szQ1NbF582Z++9vf8k//9E9ceumlzJs3b/Rxb7jhBo488kg++9nPjl478sgjd1nz+9Xc3Mzll1/ONddcw1VXXcU999zD1VdfzQknnMBRRx0F5MLWypUr+fSnP83JJ5/MwMAAL774Ii+99BIXXHBBQWubjOd5/Nmf/RmPP/4411xzDcceeyyrVq3iC1/4Atu3b+f2228H4D//8z9Hv+cPf/gDP/zhD7n99tuprq4GoK6ubpfP8dBDD+E4Dp/85Cd3OeaTn/wkjz/+OA8//DCf/vSnp/xzX3rppbz55pv813/915h6ampqAFixYgW33norp512GrfddhuBQIDnnnuOxx57jCVLlgC5f7MVK1Zw/vnnc+211/LGG29w11138cILL/D000+P+RDb29vLhz70Ia644gr+4i/+grvuuosrrriCn//851x//fX8zd/8DR//+Mf59re/zeWXX862bdsoKSkBoL29nVNPPRXDMLjuuuuoqanhoYce4pprrmFgYIDrr79+yj+3yH7BE5H91hFHHOEBo38++clPetlsdsyYoaGhCd/313/9114kEvFSqdTotbPPPts7++yzx4z78pe/7AFeR0fH6DXA+9rXvjZ6+4tf/KJXW1vrnXDCCWO+/5577vEA77vf/e6E53dd1/M8z9uyZYsHePfee+/ofX/5l3/pLVy40GtsbPSuuuqq0ev33nuvB3gf+9jHvEWLFo1eTyQSXmlpqffxj3/cA7wXXnjB8zzPy2QyXm1trbdw4UIvmUyOjn/ggQc8wLvllltGr5111lleSUmJ9/bbb09a53izZ88eU9vOzj77bO+oo46a9L49ueqqq7xoNDrhuQDvySefHL3W0dHhBYNB7+///u9Hrx1zzDHexRdfvNvHn+zfeOR5Z8+ePeba+H/nkdd/y5Yt77m2yfzf//2fB3jf+MY3xly//PLLPcMwvObm5gnfM1kNu3P99dd7gPfHP/5xl2NeeuklD/BuvPFGz/Mmf0+OGP+afPvb3560nk2bNnmmaXof+chHPMdxxtw38p7q6OjwAoGAt2TJkjFjfvCDH3iAd88994xeO/vssz3Au//++0evbdy40QM80zS9Z599dvT6qlWrJtR/zTXXeDNmzPC6urrG1HLFFVd4ZWVlk/5vhMj+TMsSRPZj9957L2vWrOHnP/8511xzDT//+c/HzCYChMPh0b8PDg7S1dXFmWeeydDQEBs3bhwzNpvN0tXVRWdnJ2vXruXXv/41Rx999Ois1Hjbt2/n3/7t3/jqV786YZf/r371K6qrq/nbv/3bCd9nGMakj7du3Tp++ctfsnLlyjFLK3Z25ZVXsnHjxtHlB7/61a8oKyvjvPPOGzPuxRdfpKOjg8997nOEQqHR6xdffDHz58/nd7/7HQCdnZ08+eSTfOpTnxoz4727OvfEcRy6urro6uoik8ns1WPsbMGCBZx55pmjt2tqajjiiCN46623Rq+Vl5ezYcMGNm3a9L6fb7prm8yDDz6IZVn83d/93Zjrf//3f4/neTz00EPvu7bBwUGA0RnMyYzcNzAw8L6fb8T//d//4bout9xyy4T38ch76pFHHiGTyXD99dePGfOZz3yG0tLS0ffniFgsxhVXXDF6+4gjjqC8vJwjjzySU045ZfT6yN9HXn/P8/jVr37FJZdcgud5o+/Lrq4uli5dSn9/Py+99NK0/ewixUDhVmQ/tnjxYs4//3w+/vGP86Mf/YjbbruNe++9l6effnp0zIYNG/jIRz5CWVkZpaWl1NTU8Fd/9VcA9Pf3j3m8Z555hpqaGmpraznttNOwbZtf/vKXuwx5X/va15g5cyZ//dd/PeG+zZs3c8QRR+DzTX3105e+9CXOPPNMPvShD+1yTE1NDRdffPHoesF77rmHq666akKIePvtt4FcCBhv/vz5o/ePhIDpXCe7ceNGampqxqzfvf/++/f68caHboCKigp6e3tHb99222309fVx+OGHs2jRIr7whS/w6quv7vVzTmdtk3n77beZOXPmhOA5srxj5N/n/Rh57JGQO5mpBOD3avPmzZimyYIFC3Y5Zlfvz0AgwKGHHjrh5z/kkEMm/HdYVlZGY2PjhGvA6Ovf2dlJX18fP/zhD0ffkyN/li1bBkBHR8de/JQixUvhVuQAcvnllwPw3HPPAbn1sGeffTavvPIKt912G7/97W9Zs2YN//zP/wwwoSfu0Uc
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAq4AAAIjCAYAAADC0ZkAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAByn0lEQVR4nO3dd5hU5d0+8Puc6Ttle4WFpYMgEkBxRQWlidgirxo1EY2JURF7NMZXkag/NHmNJSCaqGCiaIJREwvSFBAFpYiAFOl1C9tnZqef5/fH7I4M2w5MOTt4f65rA3POd+d8d4Zc3vvMc55HEkIIEBERERF1crLWDRARERERqcHgSkREREQpgcGViIiIiFICgysRERERpQQGVyIiIiJKCQyuRERERJQSGFyJiIiIKCUwuBIRERFRSmBwJSIiIqKUwOBKRERERCmBwZUoxb300kuYMGEC8vPzYTAYUFBQgFGjRuHvf/87FEXRuj06STfeeCMkSYp86fV6FBcX42c/+xm2bt0aVbt8+fJI3RtvvNHq840cORKSJGHQoEFRx0tKSnDJJZck7Oc4GR9++CEuuugiZGdnw2w2o2/fvrj//vtRXV190s955MgRPPbYY9i4cWP8GiWipNNr3QARxeb1119HYWEhHnnkETgcDtTV1WHNmjW48cYbsXDhQrz11ltat0gnyWQy4ZVXXgEABINB7N69Gy+99BI++eQTbN26FUVFRVH1ZrMZ8+fPx89//vOo4/v27cOXX34Js9mctN5P1v33349nnnkGZ5xxBh588EFkZWVhw4YNmDVrFt5++20sW7YM/fr1O+HnPXLkCGbMmIGSkhIMGTIk/o0TUVIwuBKluJUrV8JgMEQdu/POO5GdnY1Zs2Zh5syZKCkp0aY5ioler28RQs8++2xccskl+Oijj/DrX/866tzFF1+M//73v6iqqkJOTk7k+Pz585Gfn48+ffqgtrY2Kb2fjLfeegvPPPMMrrnmGrz55pvQ6XSRczfeeCMuuOACXHXVVdiwYQP0ev7ni+jHiFMFiFLc8aG1WXNYleUf/m/+n//8B5MmTUJRURFMJhN69eqFxx9/HKFQKOp7R48eHfUxdU5ODiZNmoQtW7ZE1UmShMceeyzq2J/+9CdIkoTRo0dHHfd6vXjsscfQt29fmM1mFBYW4sorr8Tu3bsBhEcFJUnCvHnzor5v6tSpkCQJN954Y+TYvHnzIEkSjEYjjh49GlW/evXqSN/r1q2LOrdgwQIMGzYMFosFOTk5+PnPf47Dhw+3eO22b9+Oq6++Grm5ubBYLOjXrx8efvhhAMBjjz0W9dq09rV8+fLI63j8R/OxKigoAIBWg9vll18Ok8mEBQsWRB2fP38+rr766qggeDJefPFFDBw4ECaTCUVFRZg6dSrq6uoi54//d9PaV3tmzJiBzMxM/PWvf23R61lnnYUHH3wQmzdvxjvvvBM5XlJSEvVv49hemv8NLl++HGeeeSYA4Kabbor0cuy/ta+++goXX3wxMjMzYbVaMXjwYDz//PNRz/npp5/ivPPOg9VqRUZGBi6//HJs27Ytqqb538f333+Pn//850hPT0dubi4eeeQRCCFw8OBBXH755XA4HCgoKMAzzzzTonefz4fp06ejd+/eMJlMKC4uxgMPPACfz9fu60f0Y8BfWYlOEXV1dQgGg3A6nVi/fj3+7//+Dz/72c/QrVu3SM28efNgs9lw7733wmaz4dNPP8Wjjz6KhoYG/OlPf4p6vv79++Phhx+GEAK7d+/Gn//8Z1x88cU4cOBAuz3MnDmzxfFQKIRLLrkEy5Ytw89+9jPcddddcDqdWLJkCbZs2YJevXq1+ny7du3C3/72tzavp9Pp8MYbb+Cee+6JHJs7dy7MZjO8Xm9U7bx583DTTTfhzDPPxMyZM1FRUYHnn38eX3zxBb755htkZGQAADZt2oTzzjsPBoMBt9xyC0pKSrB792588MEHePLJJ3HllVeid+/ekee95557MGDAANxyyy2RYwMGDGiz5xNVVVUFIPwa7tmzBw8++CCys7NbnZealpaGyy+/HG+99RZuu+02AMC3336L7777Dq+88go2bdp00n089thjmDFjBsaOHYvbbrsNO3bswJw5c7B27Vp88cUXMBgMePjhh/GrX/0q0vc999yDW265Beedd16Hz79z507s2LEDN954IxwOR6s1N9xwA6ZPn44PP/wQP/vZz1T3PmDAAPzhD3/Ao48+GtXPOeecAwBYsmQJLrnkEhQWFuKuu+5CQUEBtm3bhg8//BB33XUXAGDp0qWYOHEievbsicceewwejwd/+ctfMHLkSGzYsKHFpxrXXHMNBgwYgKeeegofffQRnnjiCWRlZeHll1/GhRdeiKeffhpvvvkm7r//fpx55pk4//zzAQCKouCyyy7DqlWrcMstt2DAgAHYvHkznn32WXz//fd4//33Vf/cRKckQUSnhH79+gkAka8bbrhBBAKBqJrGxsYW3/eb3/xGpKWlCa/XGzk2atQoMWrUqKi63//+9wKAqKysjBwDIKZPnx55/MADD4i8vDwxbNiwqO9/7bXXBADx5z//ucX1FUURQgixd+9eAUDMnTs3cu7qq68WgwYNEsXFxWLKlCmR43PnzhUAxLXXXitOP/30yHG32y0cDoe47rrrBACxdu1aIYQQfr9f5OXliUGDBgmPxxOp//DDDwUA8eijj0aOnX/++cJut4v9+/e32ufxunfvHtXbsUaNGiUGDhzY6rmOTJkyJer9bP7q0qWLWL9+fVTtZ599JgCIBQsWiA8//FBIkiQOHDgghBDit7/9rejZs2eb/XTv3l1MmjSp3V4qKyuF0WgU48ePF6FQKHJ81qxZAoB47bXXWnxPa+9ne95//30BQDz77LPt1jkcDjF06NCo/lt7/Y//N7x27dpW+wkGg6JHjx6ie/fuora2Nurcse/5kCFDRF5enqiuro4c+/bbb4Usy+KGG26IHJs+fboAIG655Zaoa3Tt2lVIkiSeeuqpyPHa2lphsVii+v/HP/4hZFkWn3/+eVQvL730kgAgvvjii1ZfF6IfC04VIDpFzJ07F0uWLMGbb76Jm2++GW+++WbUKCAAWCyWyN+dTieqqqpw3nnnobGxEdu3b4+qDQQCqKqqwtGjR7F69Wq89957GDx4cNTcyWMdPnwYf/nLX/DII4/AZrNFnfv3v/+NnJwcTJs2rcX3tfXx8fr167FgwQLMnDkzarrDsX7xi19g+/btkSkB//73v5Geno4xY8ZE1a1btw6VlZW4/fbbo25QmjRpEvr374+PPvoIAHD06FGsXLkSv/zlL6NGqtvrsyOhUAhVVVWoqqqC3+8/oe81m81YsmQJlixZgkWLFuHll1+GzWbDxRdfjO+//77V7xk/fjyysrLw9ttvQwiBt99+G9dee+1J9d5s6dKl8Pv9uPvuu6Pei1//+tdwOByR1y8WTqcTAGC329uts9vtaGhoiPl6zb755hvs3bsXd999d2TUvVnze15WVoaNGzfixhtvRFZWVuT84MGDMW7cOHz88cctnrd55BkIfzIwfPhwCCFw8803R45nZGSgX79+2LNnT+TYggULMGDAAPTv3z/y76aqqgoXXnghAOCzzz6Ly89NlKo4VYDoFFFaWhr5+3XXXYeePXvi4Ycfxs0334yRI0cCAL777jv87//+Lz799NMW//Gvr6+Pevzll18iNzc38rhPnz54//332wxw06dPR1FREX7zm99EzUEEgN27d6Nfv34ndEPN7373O5x33nm45JJLcMcdd7Rak5ubi0mTJuG1117D8OHD8dprr2HKlCktgu7+/fsBoNW70fv3749Vq1YBQCRAxHNe6vbt2yOvoyzL6N27N6ZPn47rrruuw+/V6XQYO3Zs1LGLL74Yffr0wUMPPYR///vfLb7HYDDgqquuwvz583HWWWfh4MGDqq7VnrZeP6PRiJ49e0bOx6I5sDYH2LY4nU7k5eXFfL1mzXOs23vP2/v3M2DAACxatAhutxtWqzVy/PhffNLT02E2m1v84peenh61zNfOnTuxbdu2qP/
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArMAAAIjCAYAAAAQgZNYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACYoklEQVR4nOzdd3xUVfo/8M+9d3omk0IKSQgEAoqKCoIiAmJB+WJZ68+CX5qK2EvWxqog665YEdf1q7s2LKur62JHiihrQ12liUongIH0TDK93Ht+f0wyMGSSTMJkZoKf9+uFYe48M/dhJonPnPuccyQhhAARERERUQ8kJzsBIiIiIqKuYjFLRERERD0Wi1kiIiIi6rFYzBIRERFRj8ViloiIiIh6LBazRERERNRjsZglIiIioh6LxSwRERER9VgsZomIiIiox2IxS0QJccopp+CUU07p9OPKy8shSRIee+yx+Cd1CGh5fRYuXBg+dv/990OSpOQldQiL9noTUXKxmKVu9eyzz2LChAnIz8+HXq9H7969MW7cOLzyyivQNC3Z6VEXTZs2DZIkhf9YrVYMGDAAF198Mf7973+n/Hv7888/4/7770d5eXm3nueUU06JeJ2ys7Nx/PHH48UXX0z51ygRFi5cGPH67P/n7rvvTmpur7/+OhYsWJDUHJLpq6++wgUXXID8/HwYjUaUlJRg5syZ2LVrV5ef0+124/7778fKlSvjlygRAF2yE6BD28svv4yCggLcd999sNlssNvt+OabbzBt2jR8/PHHeOONN5KdInWR0WjE888/DwDweDzYuXMnPvjgA1x88cU45ZRT8N5778Fms4Xjly1blqxUW/n5558xd+5cnHLKKSgpKenWc/Xp0wfz5s0DANTU1OCVV17BVVddhc2bN+Ohhx7qlnPee++9SS8GO+OPf/wj+vfvH3FsyJAhScom5PXXX8eGDRtw6623Rhzv168fPB4P9Hp9chJLgKeeegq33HILBgwYgJtuugkFBQX45Zdf8Pzzz+PNN9/E4sWLcdJJJ3X6ed1uN+bOnQsAXbpKQ9QWFrPUrT7//PNWv/Rvvvlm9OrVC3/9618xb968bi8mqHvodDr87//+b8SxP/3pT3jooYcwa9YszJgxA2+++Wb4PoPBkOgUU0JGRkbE6zRz5kwcfvjh+Otf/4oHHnigW4oinU4HnS5+v95dLhfS0tLi9nwHmjhxIkaMGNFtzx9PkiTBZDIlO41u89VXX+HWW2/FmDFjsGTJElgslvB91113HUaPHo2LL74YP/30E7KyspKYKdE+bDOgbtXW/6hbClhZ3vct+N577+Hss89GYWEhjEYjSktL8cADD0BV1YjHHnjpNicnB2effTY2bNgQESdJEu6///6IY48++igkSWo1KuD1enH//ffjsMMOg8lkQkFBAS688EJs27YNQNt9cjfccAMkScK0adPCx1ounRoMBtTU1ETEr1q1Kpz3999/H3Hfv/71LwwfPhxmsxk5OTn43//9X1RUVLR67TZu3IhLLrkEubm5MJvNOPzww3HPPfcA2Ncr2d6flkt8p5xySreMft19990488wz8a9//QubN28OHz+wZ9bv92P27NkYPnw4MjIykJaWhrFjx+Kzzz5r87mfeOIJ9OvXD2azGePGjWv1ngOh1+fiiy9GdnY2TCYTRowYgffffz98/8KFC/H//t//AwCceuqprV4XAPj4448xduxYpKWlIT09HWeffTZ++umniPNUVlZi+vTp6NOnD4xGIwoKCnDeeed12LpgsVhw4oknwuVyhb8/7HY7br31VhQXF8NoNGLgwIF4+OGHW7Ui2O12TJs2DRkZGcjMzMTUqVNht9tbnSNaz6zH48HNN9+MnJwcpKen43e/+x0qKipa/Zy0PPbnn3/GpEmTkJWVhTFjxoTvf+2118Lfp9nZ2bjsssuwe/fuVjl8++23+J//+R9kZGTAYrFg3Lhx+Oqrr9p9baKJ9nMMhH6HRPu5++qrr1BWVobc3FykpaXhggsuaPVzCITe43HjxiE9PR02mw3HH388Xn/9dQCh79WPPvoIO3fuDH9/tPzOaut3waeffhr+nsnMzMR5552HX375JSKm5bXdunUrpk2bhszMTGRkZGD69Olwu90xvR4d/Z44sAUo2p/2vkcfeOABSJKEl19+OaKQBYDS0lI88sgj2Lt3L/72t7+Fj7fVDz9t2rSI1y03NxcAMHfu3HAu+7+37f1ua7FmzRpMnDgRNpsNVqsVp59+Or755puImJbvhS+//BI333wzcnNzkZmZiZkzZ8Lv98Nut2PKlCnIyspCVlYW7rzzTgghIp5D0zQsWLAARx11FEwmE/Lz8zFz5kw0NDS0+dpR8nBklhLCbrcjGAzC4XDghx9+wGOPPYbLLrsMffv2DccsXLgQVqsVZWVlsFqt+PTTTzF79mw0NTXh0UcfjXi+wYMH45577oEQAtu2bcP8+fNx1llntdvPZbfbw5d796eqKs455xysWLECl112GW655RY4HA4sX74cGzZsQGlpadTn27p1K5577rk2z6coCl577TXcdttt4WMvvfQSTCYTvF5vROzChQsxffp0HH/88Zg3bx6qqqrw5JNP4quvvsKaNWuQmZkJAFi/fj3Gjh0LvV6Pa665BiUlJdi2bRs++OAD/PnPf8aFF16IgQMHhp/3tttuwxFHHIFrrrkmfOyII45oM+d4mTx5MpYtW4bly5fjsMMOixrT1NSE559/HpdffjlmzJgBh8OBF154ARMmTMB3332HoUOHRsS/8sorcDgcuOGGG+D1evHkk0/itNNOw48//oj8/HwAwE8//YTRo0ejqKgId999N9LS0vDWW2/h/PPPx7///W9ccMEFOPnkk3HzzTfjL3/5C/7whz+EX4+Wr6+++iqmTp2KCRMm4OGHH4bb7cYzzzyDMWPGYM2aNeH/OV900UX46aefcNNNN6GkpATV1dVYvnw5du3a1eHVhu3bt0NRFGRmZsLtdmPcuHGoqKjAzJkz0bdvX3z99deYNWsW9u7dG+7bFELgvPPOw5dffolrr70WRxxxBN555x1MnTo1pvdk2rRpeOuttzB58mSceOKJ+M9//oOzzz67zfj/9//+HwYNGoQHH3ww/D/6P//5z7jvvvtwySWX4Oqrr0ZNTQ2eeuopnHzyyRHfp59++ikmTpyI4cOHY86cOZBlGS+99BJOO+00fPHFFzjhhBMiztXY2Ija2tqIYzk5OTH9uw500003ISsrC3PmzEF5eTkWLFiAG2+8MeIqwcKFC3HllVfiqKOOwqxZs5CZmYk1a9ZgyZIlmDRpEu655x40Njbi119/xRNPPAEAsFqtbZ7zk08+wcSJEzFgwADcf//98Hg8eOqppzB69GisXr261ffDJZdcgv79+2PevHlYvXo1nn/+eeTl5eHhhx9u998Wy++JmTNnYvz48eHHTJ48GRdccAEuvPDC8LGWovJAbrcbK1aswNixY1u1fbS49NJLcc011+DDDz/sVCtLbm4unnnmGVx33XUR+RxzzDEAOv7dBoR+vseOHQubzYY777wTer0ef/vb33DKKafgP//5D0aOHBlxzptuugm9e/fG3Llz8c033+Dvf/87MjMz8fXXX6Nv37548MEHsXjxYjz66KMYMmQIpkyZEn7szJkzw6/3zTffjB07duCvf/0r1qxZg6+++uqQbjPpkQRRAhx++OECQPjPlClTRCAQiIhxu92tHjdz5kxhsViE1+sNHxs3bpwYN25cRNwf/vAHAUBUV1eHjwEQc+bMCd++8847RV5enhg+fHjE41988UUBQMyfP7/V+TVNE0IIsWPHDgFAvPTSS+H7LrnkEjFkyBBRXFwspk6dGj7+0ksvCQDi8ssvF0cffXT4uMvlEjabTUyaNEkAEP/973+FEEL4/X6Rl5cnhgwZIjweTzj+ww8/FADE7Nmzw8dOPvlkkZ6eLnbu3Bk1zwP169cvIrf9jRs3Thx11FFR7+vI1KlTRVpaWpv3r1mzRgAQt912W8T59n/dg8Gg8Pl8EY9raGgQ+fn54sorrwwfa3ntzWa
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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vT5/wYIFIgDx1VdfbXF/t9stiqIoHjt2TAQgLly40HPtxhtvFM8//3wxIyNDnDBhgmd84cKFIgDxlltuEfv27esZN5vNosFgEG+99VYRgPjTTz+JoiiKdrtdTE5OFs8//3yxoaHBU//111+LAMSnn37aMzZ8+HAxNjZWPH78uM8+z5SVleXV22+NGDFC7NOnj89rgXjllVdErVYrmkwmURRF8fDhwyIAccWKFV51U6ZMEQVBEH/++WfPWGVlpZiQkCACEI8dOyaKoijW1dWJcXFx4t/+9jevzy8tLRWNRmOL8TM9/PDDIgBx48aNnrG6ujqxc+fOYnZ2tuhyuVp8zoQJE8SsrKyAv+aLLrpINBqNrda8+uqrIgDxyy+/FEXx138PzV9ns7Vr14oAxLVr13rGxo0b57OfQP6Nfv755yIA8YUXXvC6Pn78eFEQBPHo0aOeMQCiWq326umdd94RAYipqame76koiuL06dO9+ne73WK3bt3E3Nxcr393FotF7Ny5s3j55Ze3+v4Qneu4VIDoHLBw4UKsXr0aH374ISZNmoQPP/zQaxYQALRaree/6+rqUFFRgWHDhsFiseDgwYNetQ6HAxUVFTh9+jTy8/OxYsUKXHDBBUhKSvJ5/1OnTuH//b//h6eeesozi9Xss88+Q1JSEqZMmdLi8/w9aLRjxw58+umnmDVrltdyh9+6/fbbcfDgQc+SgM8++wxGoxGjRo3yqtu+fTvKy8tx//33Q6PReMbHjRuHnj17en7Vffr0aWzYsAETJ070mqlurc+zcblcqKioQEVFBex2e5s+98MPP8S4ceMQGxsLAOjWrRv69+/fYrnAd999h5ycHFx00UWesYSEBNx2221edatXr0ZNTQ1uueUWT08VFRWQy+UYOHAg1q5d22o/3377LS655BIMHTrUM6bX63HPPfegsLAQ+/fvb9PX50tdXZ3n6/Wn+brJZAr6fs0C+Tf67bffQi6X48EHH/S6Pm3aNIiiiLy8PK/xUaNGec1gNy99uP76672+xubxX375BQCwa9cuHDlyBLfeeisqKys93yez2YxRo0Zhw4YN3DGE/tC4VIDoHJCTk+P571tvvRXnnXceZsyYgUmTJmHIkCEAgH379uGf//wnfvjhhxb/o19bW+v18ZYtW9ChQwfPx926dcPnn3/uN8DNnDkT6enpuPfee7F8+XKvawUFBejRowcUisD/380TTzyBYcOG4YorrsADDzzgs6ZDhw4YN24cFixYgAEDBmDBggWYMGFCi6B7/PhxAECPHj1avEbPnj2xadMmAL8Gh2DXpf7WwYMHPe+jTCZD165dMXPmTNx6662tft6BAwfw888/44477sDRo0c945deeinefPNNmEwmGAwGAI1f32+//83O/DX6kSNHAACXXXaZz3s2v54/x48fb7HuFPh1acTx48eDfu9iY2NRUVHRak1dXZ2nNlQC+Td6/PhxpKent7jvb7/+3zrzhx+j0QgAyMjI8DleXV0N4Nfv04QJE/z2Ultbi/j4eL/Xic5lDK5E56Dx48djxowZ2LZtG4YMGYKamhqMGDECBoMBzz33HLp06QKNRoOdO3fi8ccfbzGDc8EFF2DOnDkAGmci33jjDVx66aXYuXMnUlNTvWoPHDiARYsW4YMPPvD7sFhbrFq1Ct9
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import matplotlib.pyplot as plt\n",
|
|||
|
" # Создание диаграмм зависимости\n",
|
|||
|
"for column in numeric_columns:\n",
|
|||
|
" plt.figure(figsize=(8, 6)) # Установка размера графика\n",
|
|||
|
" if pd.api.types.is_numeric_dtype(df[column]): # Проверяем, является ли колонка числовой\n",
|
|||
|
" # Проверяем, содержит ли колонка только два уникальных значения (0 и 1)\n",
|
|||
|
" if df[column].nunique() == 2 and set(df[column].unique()).issubset({0, 1}):\n",
|
|||
|
" # Если да, то строим столбчатую диаграмму\n",
|
|||
|
" counts = df[column].value_counts() # Считаем количество повторений каждого значения\n",
|
|||
|
" counts.plot(kind='bar') # Создаем столбчатую диаграмму\n",
|
|||
|
" plt.title(f'Количество значений для {column}')\n",
|
|||
|
" plt.xlabel(column)\n",
|
|||
|
" plt.ylabel('Количество повторений')\n",
|
|||
|
" else:\n",
|
|||
|
" # Если колонка числовая, создаем диаграмму рассеяния\n",
|
|||
|
" plt.scatter(df['Outcome'], df[column], alpha=0.5) # Создаем диаграмму рассеяния\n",
|
|||
|
" plt.title(f'Зависимость {column} от Outcome')\n",
|
|||
|
" plt.xlabel('Outcome (0 = нет, 1 = да)')\n",
|
|||
|
" plt.ylabel(column)\n",
|
|||
|
" plt.xticks([0, 1]) # Установка меток по оси X\n",
|
|||
|
" plt.grid() # Добавление сетки для удобства восприятия\n",
|
|||
|
" else:\n",
|
|||
|
" # Если колонка не числовая, строим столбчатую диаграмму\n",
|
|||
|
" counts = df[column].value_counts() # Считаем количество повторений каждого значения\n",
|
|||
|
" counts.plot(kind='bar') # Создаем столбчатую диаграмму\n",
|
|||
|
" plt.title(f'Количество значений для {column}')\n",
|
|||
|
" plt.xlabel(column)\n",
|
|||
|
" plt.ylabel('Количество повторений')\n",
|
|||
|
"\n",
|
|||
|
" plt.show() # Отображение графика"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Разобьем наш набор на выборки относительно параметра Outcome:"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 5,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"# Функция для создания выборок\n",
|
|||
|
"from sklearn.model_selection import train_test_split\n",
|
|||
|
"\n",
|
|||
|
"def split_stratified_into_train_val_test(\n",
|
|||
|
" df_input,\n",
|
|||
|
" stratify_colname=\"y\",\n",
|
|||
|
" frac_train=0.6,\n",
|
|||
|
" frac_val=0.15,\n",
|
|||
|
" frac_test=0.25,\n",
|
|||
|
" random_state=None,\n",
|
|||
|
"):\n",
|
|||
|
"\n",
|
|||
|
" if frac_train + frac_val + frac_test != 1.0:\n",
|
|||
|
" raise ValueError(\n",
|
|||
|
" \"fractions %f, %f, %f do not add up to 1.0\"\n",
|
|||
|
" % (frac_train, frac_val, frac_test)\n",
|
|||
|
" )\n",
|
|||
|
"\n",
|
|||
|
" if stratify_colname not in df_input.columns:\n",
|
|||
|
" raise ValueError(\"%s is not a column in the dataframe\" % (stratify_colname))\n",
|
|||
|
"\n",
|
|||
|
" X = df_input # Contains all columns.\n",
|
|||
|
" y = df_input[\n",
|
|||
|
" [stratify_colname]\n",
|
|||
|
" ] # Dataframe of just the column on which to stratify.\n",
|
|||
|
"\n",
|
|||
|
" # Split original dataframe into train and temp dataframes.\n",
|
|||
|
" df_train, df_temp, y_train, y_temp = train_test_split(\n",
|
|||
|
" X, y, stratify=y, test_size=(1.0 - frac_train), random_state=random_state\n",
|
|||
|
" )\n",
|
|||
|
"\n",
|
|||
|
" # Split the temp dataframe into val and test dataframes.\n",
|
|||
|
" relative_frac_test = frac_test / (frac_val + frac_test)\n",
|
|||
|
" df_val, df_test, y_val, y_test = train_test_split(\n",
|
|||
|
" df_temp,\n",
|
|||
|
" y_temp,\n",
|
|||
|
" stratify=y_temp,\n",
|
|||
|
" test_size=relative_frac_test,\n",
|
|||
|
" random_state=random_state,\n",
|
|||
|
" )\n",
|
|||
|
"\n",
|
|||
|
" assert len(df_input) == len(df_train) + len(df_val) + len(df_test)\n",
|
|||
|
"\n",
|
|||
|
" return df_train, df_val, df_test"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 6,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Outcome\n",
|
|||
|
"0 500\n",
|
|||
|
"1 268\n",
|
|||
|
"Name: count, dtype: int64\n",
|
|||
|
"\n",
|
|||
|
"Обучающая выборка: (460, 9)\n",
|
|||
|
"Outcome\n",
|
|||
|
"0 299\n",
|
|||
|
"1 161\n",
|
|||
|
"Name: count, dtype: int64\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 200x200 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Контрольная выборка: (154, 9)\n",
|
|||
|
"Outcome\n",
|
|||
|
"0 101\n",
|
|||
|
"1 53\n",
|
|||
|
"Name: count, dtype: int64\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgsAAADECAYAAAARfmKGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA3n0lEQVR4nO3dd3wT9f8H8FeSjnTSSVug0Fpo2asCMspepcoSUFHZtoiCCMpPUGQooqIIAiKoIDJkCnwFLBsFZEOByiqlZRTogg66k3x+f9TEhqRpWlqu4/V8PHjw6OVzn3vf5e7yzmdcZEIIASIiIqJCyKUOgIiIiMo3JgtERERkEpMFIiIiMonJAhEREZnEZIGIiIhMYrJAREREJjFZICIiIpOYLBAREZFJTBaIiIhKgUajQVJSEm7cuCF1KKWOyQIREZVrR44cwaFDh3R/Hzp0CEePHpUuoALu37+PiRMnok6dOrCysoK7uzsaNmyItLQ0qUMrVcVKFn7++WfIZDLdP6VSCX9/f7z99tuIj48vqxiJqoyjR49iwIAB8PDwgLW1NXx8fBAWFoZbt26VuM7MzEzMnDlT72ZLVJHcvn0b48aNw8WLF3Hx4kWMGzcOt2/fljosXL9+Ha1atcL69esRFhaGHTt2YO/evdi/fz/s7OykDq9UWZRkpdmzZ8PX1xfZ2dk4cuQIli5dil27diEyMhK2tralHSNRlbBo0SK88847eOaZZzB+/Hh4eXnh8uXL+PHHH7Fhwwbs2rUL7dq1K3a9mZmZmDVrFgCgc+fOpRw1UdkbOHAgFixYgKZNmwIA2rZti4EDB0ocFRAWFgYrKyscP34cNWvWlDqcMlWiZCE4OBjPPvssAGDMmDFwdXXF/PnzsX37drzyyiulGiBRVXD06FFMnDgRHTp0QHh4uF7S/eabb6J9+/YYNGgQ/vnnHzg7O0sYKdHTZ21tjb///huRkZEAgMaNG0OhUEga05kzZ3DgwAHs2bOn0icKQCmNWejatSsAICYmBgDw4MEDvPfee2jSpAns7e3h6OiI4OBgnD9/3mDd7OxszJw5E/7+/lAqlfDy8sLAgQMRHR0NAIiNjdXr+nj8X8FvSocOHYJMJsOGDRswbdo0eHp6ws7ODn379jXaZHXixAn07t0b1apVg62tLTp16lRoP1jnzp2Nbn/mzJkGZdesWYPAwEDY2NjAxcUFL7/8stHtm9q3gjQaDRYsWIBGjRpBqVTCw8MDYWFhePjwoV45Hx8fPP/88wbbefvttw3qNBb7vHnzDI4pAOTk5GDGjBmoW7curK2t4e3tjSlTpiAnJ8fosSqoc+fOBvXNmTMHcrkc69atK9Hx+Oqrr9CuXTu4urrCxsYGgYGB2Lx5s9Htr1mzBq1bt4atrS2cnZ3RsWNH7NmzR6/MH3/8gU6dOsHBwQGOjo5o1aqVQWybNm3Svadubm547bXXEBcXp1dmxIgRejE7Ozujc+fOOHz4cJHH6ZNPPoFMJsOqVasMWuf8/Pzw5Zdf4t69e1i2bJluubFjq43Dx8cHQP4xdXd3BwDMmjXL6Hl75coVDBkyBO7u7rCxsUFAQAA+/PBDvTrPnTuH4OBgODo6wt7eHt26dcPx48f1ymi7KY8cOYIJEybA3d0dTk5OCAsLQ25uLlJSUjBs2DA4OzvD2dkZU6ZMweM/emvuuW7Mkxz/gsdMa82aNZDL5fj888/1lh84cABBQUGws7ODk5MT+vXrh8uXL+uVmTlzJmQyGZKSkvSWnz59GjKZDD///LPRmI39i42NBfDf9b1nzx40b94cSqUSDRs2xG+//WawPzdu3MDgwYPh4uICW1tbPPfcc9i5c6dZx83YOTJixAjY29sXeRyLcw9SqVT45JNP4Ofnp+tymzZtmsF9xcfHByNGjIBCoUCzZs3QrFkz/Pbbb5DJZAbvWWExafdJLpfD09MTL730kl7Xnvbe89VXXxVaj/Y91Tp+/DiUSiWio6PRqFEjWFtbw9PTE2FhYXjw4IHB+ubeQ+zt7XHjxg306tULdnZ2qFGjBmbPnq13rWjj1Z5HAJCeno7AwED4+vri3r17uuVPck0VVKKWhcdpP9hdXV0B5J+o27Ztw+DBg+Hr64v4+HgsW7YMnTp1wqVLl1CjRg0AgFqtxvPPP4/9+/fj5ZdfxjvvvIP09HTs3bsXkZGR8PPz023jlVdeQZ8+ffS2O3XqVKPxzJkzBzKZDP/3f/+HhIQELFiwAN27d0dERARsbGwA5F/wwcHBCAwMxIwZMyCXy7Fy5Up07doVhw8fRuvWrQ3qrVWrFubOnQsAePToEd58802j254+fTqGDBmCMWPGIDExEYsWLULHjh1x7tw5ODk5GawTGhqKoKAgAMBvv/2GrVu36r0eFhaGn3/+GSNHjsSECRMQExODxYsX49y5czh69CgsLS2NHofiSElJ0e1bQRqNBn379sWRI0cQGhqKBg0a4OLFi/jmm29w7do1bNu2rVjbWblyJT766CN8/fXXGDp0qNEyRR2PhQsXom/fvnj11VeRm5uL9evXY/DgwdixYwdCQkJ05WbNmoWZM2eiXbt2mD17NqysrHDixAkcOHAAPXv2BJD/ATdq1Cg0atQIU6dOhZOTE86dO4fw8HBdfNpj36pVK8ydOxfx8fFYuHAhjh49avCeurm54ZtvvgEA3LlzBwsXLkSfPn1w+/Zto+89kN9NsH//fgQFBcHX19domZdeegmhoaHYsWMHPvjgg6IP9L/c3d2xdOlSvPnmmxgwYICu6VbbnHvhwgUEBQXB0tISoaGh8PHxQXR0NH7//XfMmTMHAPDPP/8gKCgIjo6OmDJlCiwtLbFs2TJ07twZf/75J9q0aaO3zfHjx8PT0xOzZs3C8ePHsXz5cjg5OeHvv/9G7dq18dlnn2HXrl2YN28eGjdujGHDhunWfdJzvSTH35g9e/Zg1KhRePvtt/WO9759+xAcHIxnnnkGM2fORFZWFhYtWoT27dvj7NmzZn14FRQWFobu3bvr/n799df13icAumQPAKKiovDSSy9h7NixGD58OFauXInBgwcjPDwcPXr0AADEx8ejXbt2yMzMxIQJE+Dq6opVq1ahb9++2Lx5MwYMGGAQR8Hjpo2jrI0ZMwarVq3CoEGDMHnyZJw4cQJz587F5cuXDa75glQqlUEyW5SgoCCEhoZCo9EgMjISCxYswN27d81KJAuTnJyM7OxsvPnmm+jatSvGjh2L6OhoLFmyBCdOnMCJEydgbW0NoHj3ELVajd69e+O5557Dl19+ifDwcMyYMQMqlQqzZ882GkteXh5efPFF3Lp1C0ePHoWXl5futVL7/BDFsHLlSgFA7Nu3TyQmJorbt2+L9evXC1dXV2FjYyPu3LkjhBAiOztbqNVqvXVjYmKEtbW1mD17tm7ZihUrBAAxf/58g21pNBrdegDEvHnzDMo0atRIdOrUSff3wYMHBQBRs2ZNkZaWplu+ceNGAUAsXLhQV3e9evVEr169dNsRQojMzEzh6+srevToYbCtdu3aicaNG+v+TkxMFADEjBkzdMtiY2OFQqEQc+bM0Vv34sWLwsLCwmB5VFSUACBWrVqlWzZjxgxR8G05fPiwACDWrl2rt254eLjB8jp16oiQkBCD2N966y3x+Fv9eOxTpkwR1atXF4GBgXrHdPXq1UIul4vDhw/rrf/9998LAOLo0aMG2yuoU6dOuvp27twpLCwsxOTJk42WNed4CJH/PhWUm5srGjduLLp27apXl1wuFwMGDDA4F7XveUpKinBwcBBt2rQRWVlZRsvk5uaK6tWri8aNG+uV2bFjhwAgPv74Y92y4cOHizp16ujVs3z5cgFAnDx50ug+CyFERESEACDeeeedQssIIUTTpk2Fi4uL7u+Cx7agx+Mwdq5qdezYUTg4OIibN2/qLS94XfTv319YWVmJ6Oho3bK7d+8KBwcH0bFjR90y7f3h8euqbdu2QiaTibFjx+qWqVQqUatWLb34i3OuG1PS4//4uqdPnxb29vZi8ODBBudO8+bNRfXq1UVycrJu2fnz54VcLhfDhg3TLdOet4mJiXr
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 200x200 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Тестовая выборка: (154, 9)\n",
|
|||
|
"Outcome\n",
|
|||
|
"0 100\n",
|
|||
|
"1 54\n",
|
|||
|
"Name: count, dtype: int64\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 200x200 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"# Вывод распределения количества наблюдений по меткам (классам)\n",
|
|||
|
"print(df.Outcome.value_counts())\n",
|
|||
|
"print()\n",
|
|||
|
"\n",
|
|||
|
"data = df.copy()\n",
|
|||
|
"\n",
|
|||
|
"df_train, df_val, df_test = split_stratified_into_train_val_test(\n",
|
|||
|
" data, stratify_colname=\"Outcome\", frac_train=0.60, frac_val=0.20, frac_test=0.20\n",
|
|||
|
")\n",
|
|||
|
"\n",
|
|||
|
"print(\"Обучающая выборка: \", df_train.shape)\n",
|
|||
|
"print(df_train.Outcome.value_counts())\n",
|
|||
|
"counts = df_train['Outcome'].value_counts()\n",
|
|||
|
"plt.figure(figsize=(2, 2))# Установка размера графика\n",
|
|||
|
"plt.pie(counts, labels=counts.index, autopct='%1.1f%%', startangle=90)# Построение круговой диаграммы\n",
|
|||
|
"plt.title('Распределение классов Outcome в обучающей выборке')# Добавление заголовка\n",
|
|||
|
"plt.show()# Отображение графика\n",
|
|||
|
"\n",
|
|||
|
"print(\"Контрольная выборка: \", df_val.shape)\n",
|
|||
|
"print(df_val.Outcome.value_counts())\n",
|
|||
|
"counts = df_val['Outcome'].value_counts()\n",
|
|||
|
"plt.figure(figsize=(2, 2))\n",
|
|||
|
"plt.pie(counts, labels=counts.index, autopct='%1.1f%%', startangle=90)\n",
|
|||
|
"plt.title('Распределение классов Outcome в контрольной выборке')\n",
|
|||
|
"plt.show()\n",
|
|||
|
"\n",
|
|||
|
"print(\"Тестовая выборка: \", df_test.shape)\n",
|
|||
|
"print(df_test.Outcome.value_counts())\n",
|
|||
|
"counts = df_test['Outcome'].value_counts()\n",
|
|||
|
"plt.figure(figsize=(2, 2))\n",
|
|||
|
"plt.pie(counts, labels=counts.index, autopct='%1.1f%%', startangle=90)\n",
|
|||
|
"plt.title('Распределение классов Outcome в тестовой выборке')\n",
|
|||
|
"plt.show()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Сбалансируем распределение:"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"1. Балансировка данных оверсемплингом. Это метод, увеличивающий число наблюдений в меньшинственном классе для достижения более равномерного распределения классов."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 7,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Обучающая выборка: (460, 9)\n",
|
|||
|
"Outcome\n",
|
|||
|
"0 299\n",
|
|||
|
"1 161\n",
|
|||
|
"Name: count, dtype: int64\n",
|
|||
|
"Обучающая выборка после oversampling: (586, 9)\n",
|
|||
|
"Outcome\n",
|
|||
|
"0 299\n",
|
|||
|
"1 287\n",
|
|||
|
"Name: count, dtype: int64\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 200x200 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"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>Pregnancies</th>\n",
|
|||
|
" <th>Glucose</th>\n",
|
|||
|
" <th>BloodPressure</th>\n",
|
|||
|
" <th>SkinThickness</th>\n",
|
|||
|
" <th>Insulin</th>\n",
|
|||
|
" <th>BMI</th>\n",
|
|||
|
" <th>DiabetesPedigreeFunction</th>\n",
|
|||
|
" <th>Age</th>\n",
|
|||
|
" <th>Outcome</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>0</th>\n",
|
|||
|
" <td>4.000000</td>\n",
|
|||
|
" <td>171.000000</td>\n",
|
|||
|
" <td>72.000000</td>\n",
|
|||
|
" <td>0.000000</td>\n",
|
|||
|
" <td>0.000000</td>\n",
|
|||
|
" <td>43.600000</td>\n",
|
|||
|
" <td>0.479000</td>\n",
|
|||
|
" <td>26.000000</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>1</th>\n",
|
|||
|
" <td>4.000000</td>\n",
|
|||
|
" <td>110.000000</td>\n",
|
|||
|
" <td>76.000000</td>\n",
|
|||
|
" <td>20.000000</td>\n",
|
|||
|
" <td>100.000000</td>\n",
|
|||
|
" <td>28.400000</td>\n",
|
|||
|
" <td>0.118000</td>\n",
|
|||
|
" <td>27.000000</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2</th>\n",
|
|||
|
" <td>3.000000</td>\n",
|
|||
|
" <td>106.000000</td>\n",
|
|||
|
" <td>72.000000</td>\n",
|
|||
|
" <td>0.000000</td>\n",
|
|||
|
" <td>0.000000</td>\n",
|
|||
|
" <td>25.800000</td>\n",
|
|||
|
" <td>0.207000</td>\n",
|
|||
|
" <td>27.000000</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>3</th>\n",
|
|||
|
" <td>0.000000</td>\n",
|
|||
|
" <td>141.000000</td>\n",
|
|||
|
" <td>35.000000</td>\n",
|
|||
|
" <td>0.000000</td>\n",
|
|||
|
" <td>0.000000</td>\n",
|
|||
|
" <td>42.400000</td>\n",
|
|||
|
" <td>0.205000</td>\n",
|
|||
|
" <td>29.000000</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>4</th>\n",
|
|||
|
" <td>1.000000</td>\n",
|
|||
|
" <td>100.000000</td>\n",
|
|||
|
" <td>66.000000</td>\n",
|
|||
|
" <td>15.000000</td>\n",
|
|||
|
" <td>56.000000</td>\n",
|
|||
|
" <td>23.600000</td>\n",
|
|||
|
" <td>0.666000</td>\n",
|
|||
|
" <td>26.000000</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>...</th>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>581</th>\n",
|
|||
|
" <td>4.223037</td>\n",
|
|||
|
" <td>113.446073</td>\n",
|
|||
|
" <td>77.243141</td>\n",
|
|||
|
" <td>0.000000</td>\n",
|
|||
|
" <td>0.000000</td>\n",
|
|||
|
" <td>30.687204</td>\n",
|
|||
|
" <td>0.404846</td>\n",
|
|||
|
" <td>46.797068</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>582</th>\n",
|
|||
|
" <td>3.000000</td>\n",
|
|||
|
" <td>78.972919</td>\n",
|
|||
|
" <td>65.566707</td>\n",
|
|||
|
" <td>31.513540</td>\n",
|
|||
|
" <td>79.243727</td>\n",
|
|||
|
" <td>32.556671</td>\n",
|
|||
|
" <td>0.711110</td>\n",
|
|||
|
" <td>26.486460</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>583</th>\n",
|
|||
|
" <td>3.000000</td>\n",
|
|||
|
" <td>79.630698</td>\n",
|
|||
|
" <td>76.091174</td>\n",
|
|||
|
" <td>31.184651</td>\n",
|
|||
|
" <td>73.323715</td>\n",
|
|||
|
" <td>33.609117</td>\n",
|
|||
|
" <td>1.024212</td>\n",
|
|||
|
" <td>26.815349</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>584</th>\n",
|
|||
|
" <td>2.984921</td>\n",
|
|||
|
" <td>95.708532</td>\n",
|
|||
|
" <td>66.462302</td>\n",
|
|||
|
" <td>28.552777</td>\n",
|
|||
|
" <td>159.015079</td>\n",
|
|||
|
" <td>36.005535</td>\n",
|
|||
|
" <td>0.685819</td>\n",
|
|||
|
" <td>27.432143</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>585</th>\n",
|
|||
|
" <td>10.312967</td>\n",
|
|||
|
" <td>142.374065</td>\n",
|
|||
|
" <td>77.082295</td>\n",
|
|||
|
" <td>41.915212</td>\n",
|
|||
|
" <td>124.164589</td>\n",
|
|||
|
" <td>37.666584</td>\n",
|
|||
|
" <td>0.495783</td>\n",
|
|||
|
" <td>40.875312</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"<p>586 rows × 9 columns</p>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" Pregnancies Glucose BloodPressure SkinThickness Insulin \\\n",
|
|||
|
"0 4.000000 171.000000 72.000000 0.000000 0.000000 \n",
|
|||
|
"1 4.000000 110.000000 76.000000 20.000000 100.000000 \n",
|
|||
|
"2 3.000000 106.000000 72.000000 0.000000 0.000000 \n",
|
|||
|
"3 0.000000 141.000000 35.000000 0.000000 0.000000 \n",
|
|||
|
"4 1.000000 100.000000 66.000000 15.000000 56.000000 \n",
|
|||
|
".. ... ... ... ... ... \n",
|
|||
|
"581 4.223037 113.446073 77.243141 0.000000 0.000000 \n",
|
|||
|
"582 3.000000 78.972919 65.566707 31.513540 79.243727 \n",
|
|||
|
"583 3.000000 79.630698 76.091174 31.184651 73.323715 \n",
|
|||
|
"584 2.984921 95.708532 66.462302 28.552777 159.015079 \n",
|
|||
|
"585 10.312967 142.374065 77.082295 41.915212 124.164589 \n",
|
|||
|
"\n",
|
|||
|
" BMI DiabetesPedigreeFunction Age Outcome \n",
|
|||
|
"0 43.600000 0.479000 26.000000 1 \n",
|
|||
|
"1 28.400000 0.118000 27.000000 0 \n",
|
|||
|
"2 25.800000 0.207000 27.000000 0 \n",
|
|||
|
"3 42.400000 0.205000 29.000000 1 \n",
|
|||
|
"4 23.600000 0.666000 26.000000 0 \n",
|
|||
|
".. ... ... ... ... \n",
|
|||
|
"581 30.687204 0.404846 46.797068 1 \n",
|
|||
|
"582 32.556671 0.711110 26.486460 1 \n",
|
|||
|
"583 33.609117 1.024212 26.815349 1 \n",
|
|||
|
"584 36.005535 0.685819 27.432143 1 \n",
|
|||
|
"585 37.666584 0.495783 40.875312 1 \n",
|
|||
|
"\n",
|
|||
|
"[586 rows x 9 columns]"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 7,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"from imblearn.over_sampling import ADASYN\n",
|
|||
|
"\n",
|
|||
|
"ada = ADASYN()\n",
|
|||
|
"\n",
|
|||
|
"print(\"Обучающая выборка: \", df_train.shape)\n",
|
|||
|
"print(df_train.Outcome.value_counts())\n",
|
|||
|
"\n",
|
|||
|
"X_resampled, y_resampled = ada.fit_resample(df_train, df_train[\"Outcome\"])\n",
|
|||
|
"df_train_adasyn = pd.DataFrame(X_resampled)\n",
|
|||
|
"\n",
|
|||
|
"print(\"Обучающая выборка после oversampling: \", df_train_adasyn.shape)\n",
|
|||
|
"print(df_train_adasyn.Outcome.value_counts())\n",
|
|||
|
"\n",
|
|||
|
"counts = df_train_adasyn['Outcome'].value_counts()\n",
|
|||
|
"plt.figure(figsize=(2, 2))\n",
|
|||
|
"plt.pie(counts, labels=counts.index, autopct='%1.1f%%', startangle=90)\n",
|
|||
|
"plt.title('Распределение классов Outcome в тренировочной выборке после ADASYN')\n",
|
|||
|
"plt.show()\n",
|
|||
|
"\n",
|
|||
|
"df_train_adasyn"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"2. Балансировка данных андерсемплингом. Этот метод помогает сбалансировать выборку, уменьшая количество экземпляров класса большинства, чтобы привести его в соответствие с классом меньшинства."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 8,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Обучающая выборка после undersampling: (322, 9)\n",
|
|||
|
"Outcome\n",
|
|||
|
"0 161\n",
|
|||
|
"1 161\n",
|
|||
|
"Name: count, dtype: int64\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 200x200 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"from imblearn.under_sampling import RandomUnderSampler\n",
|
|||
|
"\n",
|
|||
|
"rus = RandomUnderSampler()# Создание экземпляра RandomUnderSampler\n",
|
|||
|
"\n",
|
|||
|
"# Применение RandomUnderSampler\n",
|
|||
|
"X_resampled, y_resampled = rus.fit_resample(df_train.drop(columns=['Outcome']), df_train['Outcome'])\n",
|
|||
|
"\n",
|
|||
|
"# Создание нового DataFrame\n",
|
|||
|
"df_train_undersampled = pd.DataFrame(X_resampled)\n",
|
|||
|
"df_train_undersampled['Outcome'] = y_resampled # Добавление целевой переменной\n",
|
|||
|
"\n",
|
|||
|
"# Вывод информации о новой выборке\n",
|
|||
|
"print(\"Обучающая выборка после undersampling: \", df_train_undersampled.shape)\n",
|
|||
|
"print(df_train_undersampled['Outcome'].value_counts())\n",
|
|||
|
"\n",
|
|||
|
"# Визуализация распределения классов\n",
|
|||
|
"counts = df_train_undersampled['Outcome'].value_counts()\n",
|
|||
|
"plt.figure(figsize=(2, 2))\n",
|
|||
|
"plt.pie(counts, labels=counts.index, autopct='%1.1f%%', startangle=90)\n",
|
|||
|
"plt.title('Распределение классов Outcome в тренировочной выборке после Undersampling')\n",
|
|||
|
"plt.show()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"### 2. Датасет: Данные по инсультам\n",
|
|||
|
"https://www.kaggle.com/datasets/fedesoriano/stroke-prediction-dataset\n",
|
|||
|
"##### О наборе данных: \n",
|
|||
|
"По данным Всемирной организации здравоохранения (ВОЗ), инсульт является второй по значимости причиной смертности во всем мире, на его долю приходится примерно 11% от общего числа смертей.\n",
|
|||
|
"Этот набор данных используется для прогнозирования вероятности инсульта у пациента на основе входных параметров, таких как пол, возраст, различные заболевания и статус курильщика. Каждая строка в данных содержит соответствующую информацию о пациенте.\n",
|
|||
|
"\n",
|
|||
|
"Атрибуты:\n",
|
|||
|
"1) id: уникальный идентификатор\n",
|
|||
|
"2) gender: \"Male\", \"Female\" или \"Other\"\n",
|
|||
|
"3) age: возраст пациента\n",
|
|||
|
"4) hypertension: 0, если у пациента нет артериальной гипертензии, 1, если у пациента есть артериальная гипертензия\n",
|
|||
|
"5) heart_disease: 0, если у пациента нет сердечных заболеваний, 1, если у пациента есть сердечные заболевания\n",
|
|||
|
"6) ever_married: \"No\" или \"Yes\"\n",
|
|||
|
"7) work_type: \"children\", \"Govt_jov\", \"Never_worked\", \"Private\" or \"Self-employed\"\n",
|
|||
|
"8) Residence_type: \"Rural\" or \"Urban\"\n",
|
|||
|
"9) avg_glucose_level: средний уровень глюкозы в крови\n",
|
|||
|
"10) bmi: индекс массы тела\n",
|
|||
|
"11) smoking_status: \"formerly smoked\", \"never smoked\", \"smokes\" или \"Unknown\"*\n",
|
|||
|
"12) stroke: 1, если у пациента был инсульт, или 0, если нет.\n",
|
|||
|
"##### Таким образом:\n",
|
|||
|
"* Объект наблюдения - Реальные пациенты.\n",
|
|||
|
"* Атрибуты: id, gender, age, hypertension, heart_disease, ever_married, work_type, Residence_type, avg_glucose_level, bmi, smoking_status, stroke.\n",
|
|||
|
"* Проблемная область: Прогнозирование вероятности инсульта у пациента."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 11,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Количество колонок: 12\n",
|
|||
|
"Колонки: id, gender, age, hypertension, heart_disease, ever_married, work_type, Residence_type, avg_glucose_level, bmi, smoking_status, stroke\n",
|
|||
|
"\n",
|
|||
|
"<class 'pandas.core.frame.DataFrame'>\n",
|
|||
|
"RangeIndex: 5110 entries, 0 to 5109\n",
|
|||
|
"Data columns (total 12 columns):\n",
|
|||
|
" # Column Non-Null Count Dtype \n",
|
|||
|
"--- ------ -------------- ----- \n",
|
|||
|
" 0 id 5110 non-null int64 \n",
|
|||
|
" 1 gender 5110 non-null object \n",
|
|||
|
" 2 age 5110 non-null float64\n",
|
|||
|
" 3 hypertension 5110 non-null int64 \n",
|
|||
|
" 4 heart_disease 5110 non-null int64 \n",
|
|||
|
" 5 ever_married 5110 non-null object \n",
|
|||
|
" 6 work_type 5110 non-null object \n",
|
|||
|
" 7 Residence_type 5110 non-null object \n",
|
|||
|
" 8 avg_glucose_level 5110 non-null float64\n",
|
|||
|
" 9 bmi 4909 non-null float64\n",
|
|||
|
" 10 smoking_status 5110 non-null object \n",
|
|||
|
" 11 stroke 5110 non-null int64 \n",
|
|||
|
"dtypes: float64(3), int64(4), object(5)\n",
|
|||
|
"memory usage: 479.2+ KB\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"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>id</th>\n",
|
|||
|
" <th>gender</th>\n",
|
|||
|
" <th>age</th>\n",
|
|||
|
" <th>hypertension</th>\n",
|
|||
|
" <th>heart_disease</th>\n",
|
|||
|
" <th>ever_married</th>\n",
|
|||
|
" <th>work_type</th>\n",
|
|||
|
" <th>Residence_type</th>\n",
|
|||
|
" <th>avg_glucose_level</th>\n",
|
|||
|
" <th>bmi</th>\n",
|
|||
|
" <th>smoking_status</th>\n",
|
|||
|
" <th>stroke</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>0</th>\n",
|
|||
|
" <td>9046</td>\n",
|
|||
|
" <td>Male</td>\n",
|
|||
|
" <td>67.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Private</td>\n",
|
|||
|
" <td>Urban</td>\n",
|
|||
|
" <td>228.69</td>\n",
|
|||
|
" <td>36.6</td>\n",
|
|||
|
" <td>formerly smoked</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>1</th>\n",
|
|||
|
" <td>51676</td>\n",
|
|||
|
" <td>Female</td>\n",
|
|||
|
" <td>61.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Self-employed</td>\n",
|
|||
|
" <td>Rural</td>\n",
|
|||
|
" <td>202.21</td>\n",
|
|||
|
" <td>NaN</td>\n",
|
|||
|
" <td>never smoked</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2</th>\n",
|
|||
|
" <td>31112</td>\n",
|
|||
|
" <td>Male</td>\n",
|
|||
|
" <td>80.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Private</td>\n",
|
|||
|
" <td>Rural</td>\n",
|
|||
|
" <td>105.92</td>\n",
|
|||
|
" <td>32.5</td>\n",
|
|||
|
" <td>never smoked</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>3</th>\n",
|
|||
|
" <td>60182</td>\n",
|
|||
|
" <td>Female</td>\n",
|
|||
|
" <td>49.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Private</td>\n",
|
|||
|
" <td>Urban</td>\n",
|
|||
|
" <td>171.23</td>\n",
|
|||
|
" <td>34.4</td>\n",
|
|||
|
" <td>smokes</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>4</th>\n",
|
|||
|
" <td>1665</td>\n",
|
|||
|
" <td>Female</td>\n",
|
|||
|
" <td>79.0</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Self-employed</td>\n",
|
|||
|
" <td>Rural</td>\n",
|
|||
|
" <td>174.12</td>\n",
|
|||
|
" <td>24.0</td>\n",
|
|||
|
" <td>never smoked</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" id gender age hypertension heart_disease ever_married \\\n",
|
|||
|
"0 9046 Male 67.0 0 1 Yes \n",
|
|||
|
"1 51676 Female 61.0 0 0 Yes \n",
|
|||
|
"2 31112 Male 80.0 0 1 Yes \n",
|
|||
|
"3 60182 Female 49.0 0 0 Yes \n",
|
|||
|
"4 1665 Female 79.0 1 0 Yes \n",
|
|||
|
"\n",
|
|||
|
" work_type Residence_type avg_glucose_level bmi smoking_status \\\n",
|
|||
|
"0 Private Urban 228.69 36.6 formerly smoked \n",
|
|||
|
"1 Self-employed Rural 202.21 NaN never smoked \n",
|
|||
|
"2 Private Rural 105.92 32.5 never smoked \n",
|
|||
|
"3 Private Urban 171.23 34.4 smokes \n",
|
|||
|
"4 Self-employed Rural 174.12 24.0 never smoked \n",
|
|||
|
"\n",
|
|||
|
" stroke \n",
|
|||
|
"0 1 \n",
|
|||
|
"1 1 \n",
|
|||
|
"2 1 \n",
|
|||
|
"3 1 \n",
|
|||
|
"4 1 "
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 11,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import pandas as pd\n",
|
|||
|
"df = pd.read_csv(\".//static//csv//stroke.csv\", sep=\",\")\n",
|
|||
|
"print('Количество колонок: ' + str(df.columns.size)) \n",
|
|||
|
"print('Колонки: ' + ', '.join(df.columns)+'\\n')\n",
|
|||
|
"\n",
|
|||
|
"df.info()\n",
|
|||
|
"df.head()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Получение сведений о пропущенных данных\n",
|
|||
|
"Типы пропущенных данных:\n",
|
|||
|
"\n",
|
|||
|
"- None - представление пустых данных в Python\n",
|
|||
|
"- NaN - представление пустых данных в Pandas\n",
|
|||
|
"- '' - пустая строка"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 10,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"id 0\n",
|
|||
|
"gender 0\n",
|
|||
|
"age 0\n",
|
|||
|
"hypertension 0\n",
|
|||
|
"heart_disease 0\n",
|
|||
|
"ever_married 0\n",
|
|||
|
"work_type 0\n",
|
|||
|
"Residence_type 0\n",
|
|||
|
"avg_glucose_level 0\n",
|
|||
|
"bmi 201\n",
|
|||
|
"smoking_status 0\n",
|
|||
|
"stroke 0\n",
|
|||
|
"dtype: int64\n",
|
|||
|
"\n",
|
|||
|
"id False\n",
|
|||
|
"gender False\n",
|
|||
|
"age False\n",
|
|||
|
"hypertension False\n",
|
|||
|
"heart_disease False\n",
|
|||
|
"ever_married False\n",
|
|||
|
"work_type False\n",
|
|||
|
"Residence_type False\n",
|
|||
|
"avg_glucose_level False\n",
|
|||
|
"bmi True\n",
|
|||
|
"smoking_status False\n",
|
|||
|
"stroke False\n",
|
|||
|
"dtype: bool\n",
|
|||
|
"\n",
|
|||
|
"id процент пустых значений: %0.00\n",
|
|||
|
"gender процент пустых значений: %0.00\n",
|
|||
|
"age процент пустых значений: %0.00\n",
|
|||
|
"hypertension процент пустых значений: %0.00\n",
|
|||
|
"heart_disease процент пустых значений: %0.00\n",
|
|||
|
"ever_married процент пустых значений: %0.00\n",
|
|||
|
"work_type процент пустых значений: %0.00\n",
|
|||
|
"Residence_type процент пустых значений: %0.00\n",
|
|||
|
"avg_glucose_level процент пустых значений: %0.00\n",
|
|||
|
"bmi процент пустых значений: %3.93\n",
|
|||
|
"smoking_status процент пустых значений: %0.00\n",
|
|||
|
"stroke процент пустых значений: %0.00\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"# Количество пустых значений признаков\n",
|
|||
|
"print(df.isnull().sum())\n",
|
|||
|
"print()\n",
|
|||
|
"\n",
|
|||
|
"# Есть ли пустые значения признаков\n",
|
|||
|
"print(df.isnull().any())\n",
|
|||
|
"print()\n",
|
|||
|
"\n",
|
|||
|
"# Процент пустых значений признаков\n",
|
|||
|
"for i in df.columns:\n",
|
|||
|
" null_rate = df[i].isnull().sum() / len(df) * 100\n",
|
|||
|
" print(f\"{i} процент пустых значений: %{null_rate:.2f}\")"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"##### Пропущенные данные существуют. Необходимо заполнить пропуски медианными значениями.\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Заполнение пропущенных данных:"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 12,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"(5110, 12)\n",
|
|||
|
"id False\n",
|
|||
|
"gender False\n",
|
|||
|
"age False\n",
|
|||
|
"hypertension False\n",
|
|||
|
"heart_disease False\n",
|
|||
|
"ever_married False\n",
|
|||
|
"work_type False\n",
|
|||
|
"Residence_type False\n",
|
|||
|
"avg_glucose_level False\n",
|
|||
|
"bmi False\n",
|
|||
|
"smoking_status False\n",
|
|||
|
"stroke False\n",
|
|||
|
"dtype: bool\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"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>id</th>\n",
|
|||
|
" <th>gender</th>\n",
|
|||
|
" <th>age</th>\n",
|
|||
|
" <th>hypertension</th>\n",
|
|||
|
" <th>heart_disease</th>\n",
|
|||
|
" <th>ever_married</th>\n",
|
|||
|
" <th>work_type</th>\n",
|
|||
|
" <th>Residence_type</th>\n",
|
|||
|
" <th>avg_glucose_level</th>\n",
|
|||
|
" <th>bmi</th>\n",
|
|||
|
" <th>smoking_status</th>\n",
|
|||
|
" <th>stroke</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>5105</th>\n",
|
|||
|
" <td>18234</td>\n",
|
|||
|
" <td>Female</td>\n",
|
|||
|
" <td>80.0</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Private</td>\n",
|
|||
|
" <td>Urban</td>\n",
|
|||
|
" <td>83.75</td>\n",
|
|||
|
" <td>27.7</td>\n",
|
|||
|
" <td>never smoked</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>5106</th>\n",
|
|||
|
" <td>44873</td>\n",
|
|||
|
" <td>Female</td>\n",
|
|||
|
" <td>81.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Self-employed</td>\n",
|
|||
|
" <td>Urban</td>\n",
|
|||
|
" <td>125.20</td>\n",
|
|||
|
" <td>40.0</td>\n",
|
|||
|
" <td>never smoked</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>5107</th>\n",
|
|||
|
" <td>19723</td>\n",
|
|||
|
" <td>Female</td>\n",
|
|||
|
" <td>35.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Self-employed</td>\n",
|
|||
|
" <td>Rural</td>\n",
|
|||
|
" <td>82.99</td>\n",
|
|||
|
" <td>30.6</td>\n",
|
|||
|
" <td>never smoked</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>5108</th>\n",
|
|||
|
" <td>37544</td>\n",
|
|||
|
" <td>Male</td>\n",
|
|||
|
" <td>51.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Private</td>\n",
|
|||
|
" <td>Rural</td>\n",
|
|||
|
" <td>166.29</td>\n",
|
|||
|
" <td>25.6</td>\n",
|
|||
|
" <td>formerly smoked</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>5109</th>\n",
|
|||
|
" <td>44679</td>\n",
|
|||
|
" <td>Female</td>\n",
|
|||
|
" <td>44.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Govt_job</td>\n",
|
|||
|
" <td>Urban</td>\n",
|
|||
|
" <td>85.28</td>\n",
|
|||
|
" <td>26.2</td>\n",
|
|||
|
" <td>Unknown</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" id gender age hypertension heart_disease ever_married \\\n",
|
|||
|
"5105 18234 Female 80.0 1 0 Yes \n",
|
|||
|
"5106 44873 Female 81.0 0 0 Yes \n",
|
|||
|
"5107 19723 Female 35.0 0 0 Yes \n",
|
|||
|
"5108 37544 Male 51.0 0 0 Yes \n",
|
|||
|
"5109 44679 Female 44.0 0 0 Yes \n",
|
|||
|
"\n",
|
|||
|
" work_type Residence_type avg_glucose_level bmi smoking_status \\\n",
|
|||
|
"5105 Private Urban 83.75 27.7 never smoked \n",
|
|||
|
"5106 Self-employed Urban 125.20 40.0 never smoked \n",
|
|||
|
"5107 Self-employed Rural 82.99 30.6 never smoked \n",
|
|||
|
"5108 Private Rural 166.29 25.6 formerly smoked \n",
|
|||
|
"5109 Govt_job Urban 85.28 26.2 Unknown \n",
|
|||
|
"\n",
|
|||
|
" stroke \n",
|
|||
|
"5105 0 \n",
|
|||
|
"5106 0 \n",
|
|||
|
"5107 0 \n",
|
|||
|
"5108 0 \n",
|
|||
|
"5109 0 "
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 12,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"fillna_df = df.fillna(0)\n",
|
|||
|
"\n",
|
|||
|
"print(fillna_df.shape)\n",
|
|||
|
"\n",
|
|||
|
"print(fillna_df.isnull().any())\n",
|
|||
|
"\n",
|
|||
|
"# Замена пустых данных на 0\n",
|
|||
|
"df[\"bmi\"] = df[\"bmi\"].fillna(0)\n",
|
|||
|
"\n",
|
|||
|
"# Вычисляем медиану для колонки \"bmi\"\n",
|
|||
|
"median_bmi = df[\"bmi\"].median()\n",
|
|||
|
"\n",
|
|||
|
"# Заменяем значения 0 на медиану\n",
|
|||
|
"df.loc[df[\"bmi\"] == 0, \"bmi\"] = median_bmi\n",
|
|||
|
"\n",
|
|||
|
"df.tail()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Удалим наблюдения с пропусками:"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 13,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"(5110, 12)\n",
|
|||
|
"id False\n",
|
|||
|
"gender False\n",
|
|||
|
"age False\n",
|
|||
|
"hypertension False\n",
|
|||
|
"heart_disease False\n",
|
|||
|
"ever_married False\n",
|
|||
|
"work_type False\n",
|
|||
|
"Residence_type False\n",
|
|||
|
"avg_glucose_level False\n",
|
|||
|
"bmi False\n",
|
|||
|
"smoking_status False\n",
|
|||
|
"stroke False\n",
|
|||
|
"dtype: bool\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"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>id</th>\n",
|
|||
|
" <th>gender</th>\n",
|
|||
|
" <th>age</th>\n",
|
|||
|
" <th>hypertension</th>\n",
|
|||
|
" <th>heart_disease</th>\n",
|
|||
|
" <th>ever_married</th>\n",
|
|||
|
" <th>work_type</th>\n",
|
|||
|
" <th>Residence_type</th>\n",
|
|||
|
" <th>avg_glucose_level</th>\n",
|
|||
|
" <th>bmi</th>\n",
|
|||
|
" <th>smoking_status</th>\n",
|
|||
|
" <th>stroke</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>5105</th>\n",
|
|||
|
" <td>18234</td>\n",
|
|||
|
" <td>Female</td>\n",
|
|||
|
" <td>80.0</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Private</td>\n",
|
|||
|
" <td>Urban</td>\n",
|
|||
|
" <td>83.75</td>\n",
|
|||
|
" <td>27.7</td>\n",
|
|||
|
" <td>never smoked</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>5106</th>\n",
|
|||
|
" <td>44873</td>\n",
|
|||
|
" <td>Female</td>\n",
|
|||
|
" <td>81.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Self-employed</td>\n",
|
|||
|
" <td>Urban</td>\n",
|
|||
|
" <td>125.20</td>\n",
|
|||
|
" <td>40.0</td>\n",
|
|||
|
" <td>never smoked</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>5107</th>\n",
|
|||
|
" <td>19723</td>\n",
|
|||
|
" <td>Female</td>\n",
|
|||
|
" <td>35.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Self-employed</td>\n",
|
|||
|
" <td>Rural</td>\n",
|
|||
|
" <td>82.99</td>\n",
|
|||
|
" <td>30.6</td>\n",
|
|||
|
" <td>never smoked</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>5108</th>\n",
|
|||
|
" <td>37544</td>\n",
|
|||
|
" <td>Male</td>\n",
|
|||
|
" <td>51.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Private</td>\n",
|
|||
|
" <td>Rural</td>\n",
|
|||
|
" <td>166.29</td>\n",
|
|||
|
" <td>25.6</td>\n",
|
|||
|
" <td>formerly smoked</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>5109</th>\n",
|
|||
|
" <td>44679</td>\n",
|
|||
|
" <td>Female</td>\n",
|
|||
|
" <td>44.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Govt_job</td>\n",
|
|||
|
" <td>Urban</td>\n",
|
|||
|
" <td>85.28</td>\n",
|
|||
|
" <td>26.2</td>\n",
|
|||
|
" <td>Unknown</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" id gender age hypertension heart_disease ever_married \\\n",
|
|||
|
"5105 18234 Female 80.0 1 0 Yes \n",
|
|||
|
"5106 44873 Female 81.0 0 0 Yes \n",
|
|||
|
"5107 19723 Female 35.0 0 0 Yes \n",
|
|||
|
"5108 37544 Male 51.0 0 0 Yes \n",
|
|||
|
"5109 44679 Female 44.0 0 0 Yes \n",
|
|||
|
"\n",
|
|||
|
" work_type Residence_type avg_glucose_level bmi smoking_status \\\n",
|
|||
|
"5105 Private Urban 83.75 27.7 never smoked \n",
|
|||
|
"5106 Self-employed Urban 125.20 40.0 never smoked \n",
|
|||
|
"5107 Self-employed Rural 82.99 30.6 never smoked \n",
|
|||
|
"5108 Private Rural 166.29 25.6 formerly smoked \n",
|
|||
|
"5109 Govt_job Urban 85.28 26.2 Unknown \n",
|
|||
|
"\n",
|
|||
|
" stroke \n",
|
|||
|
"5105 0 \n",
|
|||
|
"5106 0 \n",
|
|||
|
"5107 0 \n",
|
|||
|
"5108 0 \n",
|
|||
|
"5109 0 "
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 13,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"dropna_df = df.dropna()\n",
|
|||
|
"\n",
|
|||
|
"print(dropna_df.shape)\n",
|
|||
|
"\n",
|
|||
|
"print(fillna_df.isnull().any())\n",
|
|||
|
"df.tail()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"##### Проверим выбросы и усредним их:"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 15,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Колонка age:\n",
|
|||
|
" Есть выбросы: Нет\n",
|
|||
|
" Количество выбросов: 0\n",
|
|||
|
" Минимальное значение: 0.08\n",
|
|||
|
" Максимальное значение: 82.0\n",
|
|||
|
" 1-й квартиль (Q1): 25.0\n",
|
|||
|
" 3-й квартиль (Q3): 61.0\n",
|
|||
|
"\n",
|
|||
|
"Колонка avg_glucose_level:\n",
|
|||
|
" Есть выбросы: Нет\n",
|
|||
|
" Количество выбросов: 0\n",
|
|||
|
" Минимальное значение: 55.12\n",
|
|||
|
" Максимальное значение: 169.35750000000002\n",
|
|||
|
" 1-й квартиль (Q1): 77.245\n",
|
|||
|
" 3-й квартиль (Q3): 114.09\n",
|
|||
|
"\n",
|
|||
|
"Колонка bmi:\n",
|
|||
|
" Есть выбросы: Нет\n",
|
|||
|
" Количество выбросов: 0\n",
|
|||
|
" Минимальное значение: 10.300000000000006\n",
|
|||
|
" Максимальное значение: 46.29999999999999\n",
|
|||
|
" 1-й квартиль (Q1): 23.8\n",
|
|||
|
" 3-й квартиль (Q3): 32.8\n",
|
|||
|
"\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"numeric_columns = ['age', 'avg_glucose_level', 'bmi']\n",
|
|||
|
"for column in numeric_columns:\n",
|
|||
|
" if pd.api.types.is_numeric_dtype(df[column]): # Проверяем, является ли колонка числовой\n",
|
|||
|
" q1 = df[column].quantile(0.25) # Находим 1-й квартиль (Q1)\n",
|
|||
|
" q3 = df[column].quantile(0.75) # Находим 3-й квартиль (Q3)\n",
|
|||
|
" iqr = q3 - q1 # Вычисляем межквартильный размах (IQR)\n",
|
|||
|
"\n",
|
|||
|
" # Определяем границы для выбросов\n",
|
|||
|
" lower_bound = q1 - 1.5 * iqr # Нижняя граница\n",
|
|||
|
" upper_bound = q3 + 1.5 * iqr # Верхняя граница\n",
|
|||
|
"\n",
|
|||
|
" # Подсчитываем количество выбросов\n",
|
|||
|
" outliers = df[(df[column] < lower_bound) | (df[column] > upper_bound)]\n",
|
|||
|
" outlier_count = outliers.shape[0]\n",
|
|||
|
"\n",
|
|||
|
" print(f\"Колонка {column}:\")\n",
|
|||
|
" print(f\" Есть выбросы: {'Да' if outlier_count > 0 else 'Нет'}\")\n",
|
|||
|
" print(f\" Количество выбросов: {outlier_count}\")\n",
|
|||
|
" print(f\" Минимальное значение: {df[column].min()}\")\n",
|
|||
|
" print(f\" Максимальное значение: {df[column].max()}\")\n",
|
|||
|
" print(f\" 1-й квартиль (Q1): {q1}\")\n",
|
|||
|
" print(f\" 3-й квартиль (Q3): {q3}\\n\")\n",
|
|||
|
"\n",
|
|||
|
" # Устраняем выбросы: заменяем значения ниже нижней границы на саму нижнюю границу, а выше верхней — на верхнюю\n",
|
|||
|
" df[column] = df[column].apply(lambda x: lower_bound if x < lower_bound else upper_bound if x > upper_bound else x)\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Постараемся выявить зависимости Stroke от остальных колонок:"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Разобьем наш набор на выборки относительно параметра Stroke:"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 19,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsAAAAIeCAYAAAC1G7mwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABIsElEQVR4nO3deVxUZf//8fcIggsCoiDukiu4leidaOaGomFqapsWmpppmFtleude3i5lLqlZ1le8y3Ipcy2X3FPcc1+ywnAJ1BQRF1Tm/P7wx9yOoDI0A9Z5PR+PeTyc61xzzuecmYG3h+tcx2IYhiEAAADAJPLkdgEAAABATiIAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwAAwFQIwAAAADAVAjAAAABMhQAMAAAAUyEAAwDuKyUlRZMmTbI9T0pK0rRp03KvoL/o+PHjslgsev/993O7lH8Mi8WiESNG5HYZQJYQgAEXiYmJkcVi0c6dOzMsmzlzpiwWi9q2bau0tLRcqA5wTP78+TVkyBDNmTNHJ06c0IgRI7R06dLcLsu0rly5ohEjRmj9+vW5XQrwt+Se2wUAZvPtt9+qV69eatCggebOnSs3N7fcLgm4Lzc3N40cOVJRUVGyWq3y9vbW8uXLc7ss07py5YpGjhwpSWrUqFHuFvP/Xb16Ve7uxAr8PfBJBXLQ+vXr9fzzzyskJERLly5Vvnz5crskIMtef/11Pfvsszpx4oSCg4Pl6+ub2yWZjtVq1fXr13O7jEzx8wx/JwyBAHLInj171KZNGxUvXlwrV66Uj49Phj4LFixQaGio8ufPr6JFi+qFF17QqVOnMl2fxWLJ9HH8+HG7PneOyXvvvfdksVjszhqNGDFCFoslwzbKlSunLl262LUlJSWpX79+Kl26tDw9PVWhQgWNGzdOVqvVrp/VatXkyZNVvXp15cuXT/7+/mrRooVtSMjd6k9/pNe3fv16u3ZPT09VqlRJY8aMkWEYdtv86aef1LJlS3l7e8vLy0tNmzbV1q1bMz1+tzt69KiaNGmiwMBAeXp6qnTp0urZs6fOnz9v65Nex9dff53h9V5eXnbH6fz583rjjTdUvXp1eXl5ydvbWy1bttTevXvtXufs436vca3VqlWze8/T9+fOP6FHRkZm+NzcXmepUqUUFhYmd3d3BQYGZrqOu2nUqFGm73Vm40bThxDd7XOR7qefflKLFi3k7+9v169Vq1ZZqkmSPvnkE5UvX16enp6qU6eOduzYYVs2a9YsWSwW/fTTTxle95///Edubm6272ijRo1UrVo17dq1S/Xq1VP+/PkVFBSkGTNmZHhtamqqhg8frgoVKtg+cwMHDlRqaqpdP4vFot69e2vOnDmqWrWqPD09NWPGDPn7+0uSRo4cmelxPHLkiDp06CA/Pz/ly5dPtWvX1pIlSzI9xps3b9aAAQPk7++vggUL6qmnntLZs2ft+u7cuVMREREqWrSobb+6du2aodY738usfCcdqQNwFs4AAzng119/VYsWLeTp6amVK1eqePHiGfrExMTopZdeUp06dTRmzBglJiZq8uTJ2rx5s3766adMz7Y99dRTateunSRp06ZN+uSTT+5ZR1JSksaMGZPt/bhy5YoaNmyoU6dO6ZVXXlGZMmW0ZcsWDR48WH/88YfdRVLdunVTTEyMWrZsqe7du+vmzZvatGmTtm7dqtq1a+vzzz+39U2vfeLEiSpatKgkqVixYnbb/ve//63g4GBdvXpV8+bN07///W8FBASoW7dukqSDBw+qQYMG8vb21sCBA5U3b159/PHHatSokTZs2KBHH330rvt1+fJllSpVSk8++aS8vb114MABTZs2TadOncrWONfffvtNixYt0tNPP62goCAlJibq448/VsOGDXXo0CGVKFHCofU5ctz/io0bN+q7777LUt8JEyYoMTHR4W2UKlXK9hlMSUlRr1697tn/9s/E6NGj7ZZdvHhRLVu2lGEYGjBggEqXLi1J6t+/f5br+fLLL3Xp0iW98sorslgsGj9+vNq1a6fffvtNefPmVYcOHRQdHa05c+bokUcesXvtnDlz1KhRI5UsWdLWduHCBT3xxBN65pln9Pzzz2v+/Pnq1auXPDw8bIHRarWqdevW+vHHH9WjRw8FBwdr//79mjhxon7++WctWrTIbjtr167V/Pnz1bt3bxUtWlQ1a9bURx99pF69etn9DKhRo4akW9+F+vXrq2TJkho0aJAKFiyo+fPnq23btvrmm2/01FNP2a3/tddeU+HChTV8+HAdP35ckyZNUu/evTVv3jxJ0pkzZ9S8eXP5+/tr0KBB8vX11fHjx7Vw4cJ7HltHv5P3qwNwKgOAS8yaNcuQZCxbtswoX768Iclo3rx5pn2vX79uBAQEGNWqVTOuXr1qa1+2bJkhyRg2bJhd/xs3bhiSjJEjR2bYXlxcnK1NkjF8+HDb84EDBxoBAQFGaGio0bBhQ1v7yJEjDUmG1Wq1207ZsmWNzp07256/8847RsGCBY2ff/7Zrt+gQYMMNzc3Iz4+3jAMw1i7dq0hyejTp0+Gfb1zG3erPd26desMSca6detsbdeuXTPy5MljvPrqq7a2tm3bGh4eHsavv/5qazt9+rRRqFAh4/HHH8+w3vt59dVXDS8vrwx1LFiwIEPfggUL2h2na9euGWlpaXZ94uLiDE9PT2PUqFG2Nmcf97i4OEOS8d5772WosWrVqnbveWbH9dFHHzVatmyZ4XMzfPhw4/ZfF2fOnDEKFSpk63v7Ou6lXr16RrVq1WzPz549m2Fb6WbOnGlIMn7//XdbW8OGDe32YeXKlYYk46uvvrJ7bdmyZY3IyMh71pJ+rIoUKWKcP3/e1r548WJDkrF06VJb2/PPP2+UKFHC7j3dvXu3IcmYNWuWXX2SjAkTJtjaUlNTjYcfftgICAgwrl+/bhiGYXz++edGnjx5jE2bNtnVNGPGDEOSsXnzZlubJCNPnjzGwYMH7fre69g1bdrUqF69unHt2jVbm9VqNerVq2dUrFjR1pb+vQsPD7f7DPbv399wc3MzkpKSDMMwjG+//daQZOzYsSPzg3lbrbfXk9XvZFbrAJyJIRCAi3Xp0kUnTpxQx44dtWrVKi1YsCBDn507d+rMmTN69dVX7cbRRUZGqkqVKhkuNkofA+jp6ZnlOk6dOqUPP/xQQ4cOlZeXl92ygIAASdLJkyfvuY4FCxaoQYMGKly4sM6dO2d7hIeHKy0tTRs3bpQkffPNN7JYLBo+fHiGdWT2J/+suHjxos6dO6f4+HiNHz9eVqtVTZo0kSSlpaVp1apVatu2rR566CHba4oXL66OHTvqxx9/VHJycpa2kZiYqDVr1mj58uV6/PHHM/S5dOmS3b6fO3cuQx9PT0/lyZPHVtuff/4pLy8vVa5cWbt377b1c/ZxT3flypUMNd5vtpGFCxdqx44dGjt27D37SdI777wjHx8f9enT5759b3ft2rUsjxPNymf80qVLkqQiRYo4VMftnn32WRUuXNj2vEGDBpJuncVPFxUVpdOnT2vdunW2tjlz5ih//vxq37693frc3d31yiuv2J57eHjolVde0ZkzZ7Rr1y5Jt97P4OBgValSxe49Sv88374dSWrYsKFCQkKytD/nz5/X2rVr9cwzz9h9Vv/8809FRETo2LFjGYZV9ejRw+572aBBA6Wlpen333+XJNtfn5YtW6YbN25kqY7sfCfvVwfgTAyBAFzs/Pnzmjt3rp566ikdOnRIffv2VfPmze3GAKf/gK9cuXKG11epUkU//vijXVtSUpIkZQiy9zJ8+HCVKFFCr7zySoZxrGFhYbJYLBo8eLDeffdd23rvHNd77Ngx7du3zzb+8E5nzpyRdGvIR4kSJeTn55fl+u6nbdu2tn/nyZNHQ4YMsYWPs2fP6sqVK5kev+DgYFmtVp04cUJVq1a95zYiIiK0bds2SVKLFi0y/dPrneMeM5M+/nn69OmKi4uzC5+3hzVnH/d0w4cPz/Q/H3cOK0mXlpamf//73+rUqZPtz+h3ExcXp48//lgfffSRwxc9nTt3ThU
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsAAAAIeCAYAAAC1G7mwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABMg0lEQVR4nO3deVxUZf//8feIAioOiLK5o7jhlluKmiuKhrl3Z1maaaZpbplLuZthtpiWW5t0d+ttWZYl5ZKmlaK57/q1wnADNQPEFAXO749+zO0IKoMzYp7X8/GYR8x1rjnnc86M+u7iOtdYDMMwBAAAAJhEgfwuAAAAALiTCMAAAAAwFQIwAAAATIUADAAAAFMhAAMAAMBUCMAAAAAwFQIwAAAATIUADAAAAFMhAAMAAMBUCMAAgGxSU1P11ltv2Z4nJSVp7ty5+VfQbTp27JgsFotef/31/C7F5SZPniyLxWLXVqFCBT355JP5UxBwFyIAA04SHR0ti8Wi7du3Z9v23nvvyWKxqEuXLsrIyMiH6gDHFC5cWOPHj9fixYt1/PhxTZ48WV9//XV+l3XPOXjwoCZPnqxjx47ldymAqRTM7wKAe90XX3yhQYMG6YEHHtDSpUvl5uaW3yUBt+Tm5qYpU6aod+/eyszMlNVqVUxMTH6Xdc85ePCgpkyZopYtW6pChQouO86RI0dUoABjXkAWAjDgQhs2bNCjjz6q0NBQff311/L09MzvkoBce/755/XII4/o+PHjql69unx8fPK7pHvG5cuX5e7ufseO5+HhcceOBfwT8L+DgIvs3r1bnTt3VlBQkFavXi1vb+9sfZYtW6b69eurcOHCKlmypB5//HGdPHkyx/1ZLJYcH9f+6tRisWjy5Ml2r3vttddksVjUsmVLW1tOcwSlnOcJJiUlafjw4Spbtqw8PDwUEhKiV199VZmZmXb9MjMzNXv2bNWqVUuenp7y8/NT+/btbVNCblR/1iOrvg0bNti1e3h4qEqVKoqKipJhGHbH3LVrlzp06CCr1SovLy+1adNGW7ZsyfH6XevIkSNq3bq1AgMD5eHhobJly2rgwIE6f/68rU9WHZ999lm213t5edldp/Pnz2vUqFGqVauWvLy8ZLVa1aFDB+3Zs8fudc6+7jeb11qzZk279zzrfDZs2GDXLzIyMtvn5to6y5Qpo7CwMBUsWFCBgYE57uNGWrZsmeN7ff1nVPrfFKIbfS6y7Nq1S+3bt5efn59dv44dO+aqJkl69913ValSJXl4eKhhw4batm1btj6HDx9Wjx495OvrK09PTzVo0EBfffWVXZ/cvu9Z137p0qUaP368SpcurSJFimjOnDl6+OGHJUmtWrWynUtur68k/fTTT2rYsKE8PT1VqVIlLVy4MMd+13/Grl69qilTpqhy5cry9PRUiRIl1KxZM61du9Zl10GS3n77bdWoUUNFihRR8eLF1aBBAy1ZssSuz8mTJ/XUU08pICBAHh4eqlGjhj788MNcXxMgNxgBBlzg119/Vfv27eXh4aHVq1crKCgoW5/o6Gj17dtXDRs2VFRUlBITEzV79mxt2rRJu3btynG0rWvXrurWrZsk6ccff9S777570zqSkpIUFRWV5/P466+/1KJFC508eVLPPPOMypUrp82bN2vcuHE6ffq03U1S/fr1U3R0tDp06KD+/fsrPT1dP/74o7Zs2aIGDRro448/tvXNqn3WrFkqWbKkJCkgIMDu2C+++KKqV6+uS5cu6ZNPPtGLL74of39/9evXT5J04MABPfDAA7JarRo9erQKFSqkhQsXqmXLltq4caMaNWp0w/O6ePGiypQpo4ceekhWq1X79+/X3LlzdfLkyTzNc/3tt9/05Zdf6uGHH1ZwcLASExO1cOFCtWjRQgcPHlSpUqUc2p8j1/12/PDDD/rmm29y1feNN95QYmKiw8coU6aM7TOYmpqqQYMG3bT/tZ+J6dOn221LTk5Whw4dZBiGRo4cqbJly0qSRowYket6lixZogsXLuiZZ56RxWLRzJkz1a1bN/32228qVKiQpL8/W02bNlXp0qU1duxYFS1aVJ9++qm6dOmizz//XF27dpXk+Ps+bdo0ubu7a9SoUUpLS1O7du00dOhQzZkzx/Z5l2T7763s27dP7dq1k5+fnyZPnqz09HRNmjQp25+lnEyePFlRUVHq37+/7r//fqWkpGj79u3auXOn2rZt65Lr8N5772no0KHq0aOHhg0bpsuXL2vv3r3aunWrHnvsMUlSYmKiGjduLIvFoiFDhsjPz0/ffvut+vXrp5SUFA0fPjxX1wa4JQOAUyxatMiQZKxcudKoVKmSIclo165djn2vXLli+Pv7GzVr1jQuXbpka1+5cqUhyZg4caJd/6tXrxqSjClTpmQ7XlxcnK1NkjFp0iTb89GjRxv+/v5G/fr1jRYtWtjap0yZYkgyMjMz7Y5Tvnx5o0+fPrbn06ZNM4oWLWr83//9n12/sWPHGm5ubkZ8fLxhGIaxfv16Q5IxdOjQbOd6/TFuVHuW77//3pBkfP/997a2y5cvGwUKFDCeffZZW1uXLl0Md3d349dff7W1nTp1yihWrJjRvHnzbPu9lWeffdbw8vLKVseyZcuy9S1atKjddbp8+bKRkZFh1ycuLs7w8PAwpk6damtz9nWPi4szJBmvvfZathpr1Khh957ndF0bNWpkdOjQIdvnZtKkSca1/zycOXPGKFasmK3vtfu4mSZNmhg1a9a0PT979my2Y2V57733DEnG77//bmtr0aKF3TmsXr3akGT897//tXtt+fLljcjIyJvWknWtSpQoYZw/f97WvmLFCkOS8fXXX9va2rRpY9SqVcu4fPmyrS0zM9No0qSJUblyZVtbbt/3rGtfsWJF46+//rLrv2zZMoeu6bW6dOlieHp62l2zgwcPGm5ubsb1/7xf/xmrU6fOLa+Zs69D586djRo1atz0mP369TOCgoKMc+fO2bX37NnT8Pb2znb9gLxiCgTgZE8++aSOHz+uxx57TGvWrNGyZcuy9dm+fbvOnDmjZ5991m5ecGRkpKpVq5btZqMrV65Icmwe38mTJ/X2229rwoQJ8vLystvm7+8vSTpx4sRN97Fs2TI98MADKl68uM6dO2d7hIeHKyMjQz/88IMk6fPPP5fFYtGkSZOy7SOnX/nnRnJyss6dO6f4+HjNnDlTmZmZat26tSQpIyNDa9asUZcuXVSxYkXba4KCgvTYY4/pp59+UkpKSq6OkZiYqHXr1ikmJkbNmzfP1ufChQt2537u3LlsfTw8PGw3GGVkZOiPP/6Ql5eXqlatqp07d9r6Ofu6Z/nrr7+y1Xir1UaWL1+ubdu2acaMGTftJ/09cunt7a2hQ4fesu+1Ll++nOt577n5jF+4cEGSVKJECYfquNYjjzyi4sWL254/8MADkv4exZT+/nX++vXr9a9//cvuvf/jjz8UERGho0eP2qYp5fZ9z9KnTx8VLlw4z7VfKyMjQ6tXr1aXLl1Urlw5W3v16tUVERFxy9f7+PjowIEDOnr0aI7bXXEdfHx8dOLEiRynnEiSYRj6/PPP9dBDD8kwDLvPc0REhJKTk3O8rkBeMAUCcLLz589r6dKl6tq1qw4ePKhhw4apXbt2dnOAf//9d0lS1apVs72+WrVq+umnn+zakpKSJClbkL2ZSZMmqVSpUnrmmWeyzWMNCwuTxWLRuHHj9PLLL9v2e/283qNHj2rv3r3y8/PL8RhnzpyR9PeUj1KlSsnX1zfX9d1Kly5dbD8XKFBA48ePV/fu3SVJZ8+e1V9//ZXj9atevboyMzN1/Phx1ahR46bHiIiI0NatWyVJ7du31yeffJKtz1NPPXXLWrPmP8+bN09xcXF24fPasObs655l0qRJOf7Px41+FZ6RkaEXX3xRvXr1Uu3atW96bnFxcVq4cKHmz5/v8E2c586dU+XKlXPVNzef8QYNGqhQoUKaPHmySpYsaZsCcf31u5lrw6IkWxj+888/JUm//PKLDMPQhAkTNGHChBz3cebMGZUuXTrX73uW4ODgXNd5K2fPntWlS5dyvL5Vq1a
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsAAAAIrCAYAAADhrC+uAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABUpElEQVR4nO3deVxU9f7H8feAMqIC5sJiIpK4oai5XMV9IdE0Na3rVlhZLmmmtqhlrhmmWWqZtl1t0ZvLVSu5LqS5ZKjlvl8zFFMRywBxQYHz+6MH83MClbEZhzqv5+NxHg/mez5z5nOGEd8cvvMdi2EYhgAAAACT8HB3AwAAAMCdRAAGAACAqRCAAQAAYCoEYAAAAJgKARgAAACmQgAGAACAqRCAAQAAYCoEYAAAAJgKARgAAACmQgAGANxURkaGZsyYYbudmpqq2bNnu68hFErjx4+XxWJx6jFbtWqlVq1aOfWYgEQABlxi/vz5slgs+uGHH/Ls++CDD2SxWNS1a1dlZ2e7oTvAMd7e3hozZowWLFigkydPavz48frqq6/c3RYA3LYi7m4AMJPly5dr0KBBat68uT7//HN5enq6uyXgljw9PTVhwgTFxMQoJydHvr6+iouLc3dbKGTGjBmjUaNGubsNoEC4AgzcIRs2bFCvXr0UHh6ur776SsWKFXN3S0CBPffcczpx4oS+++47nThxQs2aNXN3S38bly5dcncLt5SVlaWrV6/mu+/ixYuSpCJFivBzDX8ZBGDgDti9e7e6dOmioKAgrVmzRn5+fnlqlixZovr168vb21tly5bVI488olOnTuV7PIvFku92/Phxu5rx48fb3W/atGmyWCx2c+puNG+vUqVKeuyxx+zGUlNTNWzYMAUHB8tqtSosLEyvv/66cnJy7OpycnI0c+ZMRUREqFixYipXrpzat29vmxJyo/5zt9z+NmzYYDdutVpVtWpVxcbGyjAMu8fctWuXOnToIF9fX5UsWVJt27bV1q1b833+rnfkyBG1adNGgYGBslqtCg4O1sCBA3X+/HlbTW4fS5cuzXP/kiVL2j1P58+f1/PPP6+IiAiVLFlSvr6+6tChg/bs2WN3P2c/78ePH5fFYtEbb7yR55i1atWy+57nns+GDRvs6jp27JjndXN9nxUqVFBkZKSKFCmiwMDAfI9xI61atcr3e/3H16j0/1OIbvS6yLVr1y61b99e5cqVs6vr1KnTLfvJycnRjBkzVLNmTRUrVkwBAQEaMGCAfvvtN1tNp06ddM899+R7/8jISDVo0MBu7LPPPrP9Gy5durR69uypkydP5nkeatWqpR07dqhFixYqXry4XnrppVv2K/3/9+J///ufHnnkEfn5+alcuXJ65ZVXZBiGTp48qS5dusjX11eBgYGaPn263f2vXr2qsWPHqn79+vLz81OJEiXUvHlzffPNN3Z117+WZsyYocqVK8tqtergwYO2Hg4ePKjevXvrrrvusv0ydKPXdEGeF0l6//33VblyZXl7e+sf//iHNm/eXKDnBbgdTIEAXOzYsWNq3769rFar1qxZo6CgoDw18+fP1+OPP66GDRsqNjZWZ8+e1cyZM7Vlyxbt2rVLpUqVynOfBx98UN26dZMkbd68We+///5N+0hNTVVsbOxtn8elS5fUsmVLnTp1SgMGDFDFihX13XffafTo0Tpz5ozdm6T69eun+fPnq0OHDnryySeVlZWlzZs3a+vWrWrQoIE+/fRTW21u72+99ZbKli0rSQoICLB77Jdeekk1atTQ5cuXtWjRIr300kvy9/dXv379JEkHDhxQ8+bN5evrqxdffFFFixbVe++9p1atWmnjxo1q1KjRDc/r4sWLqlChgh544AH5+vpq//79mj17tk6dOnVb81x/+uknrVixQg8//LBCQ0N19uxZvffee2rZsqUOHjyo8uXLO3Q8R573P2PTpk3673//W6Da6dOn6+zZsw4/RoUKFWyvwYyMDA0aNOim9de/JiZPnmy3Ly0tTR06dJBhGBoxYoSCg4MlScOHDy9QLwMGDLD9uxs6dKgSExP1zjvvaNeuXdqyZYuKFi2qHj16KCYmRt9//70aNmxou++JEye0detWTZs2zTY2efJkvfLKK/rnP/+pJ598UufOndPbb7+tFi1a5Pk3/Ouvv6pDhw7q2bOnHnnkkTyv91vp0aOHatSooSlTpiguLk6vvvqqSpcurffee09t2rTR66+/rgULFuj5559Xw4YN1aJFC0lSenq6PvzwQ/Xq1UtPPfWULly4oI8++kjR0dHavn276tata/c48+bN05UrV9S/f39ZrVaVLl3atu/hhx9WlSpV9Nprr+X5ZfR6BX1ePvroIw0YMEBNmjTRsGHD9NNPP6lz584qXbq07XsLOJUBwOnmzZtnSDJWrlxpVK5c2ZBktGvXLt/aq1evGv7+/katWrWMy5cv28ZXrlxpSDLGjh1rV3/t2jVDkjFhwoQ8j5eYmGgbk2SMGzfOdvvFF180/P39jfr16xstW7a0jU+YMMGQZOTk5Ng9TkhIiNG3b1/b7UmTJhklSpQw/ve//9nVjRo1yvD09DSSkpIMwzCM9evXG5KMoUOH5jnXPz7GjXrP9c033xiSjG+++cY2duXKFcPDw8N4+umnbWNdu3Y1vLy8jGPHjtnGTp8+bfj4+BgtWrTIc9xbefrpp42SJUvm6WPJkiV5akuUKGH3PF25csXIzs62q0lMTDSsVqsxceJE25izn/fExERDkjFt2rQ8PdasWdPue57f89qoUSOjQ4cOeV4348aNM67/ryIlJcXw8fGx1V5/jJtp0qSJUatWLdvtc+fO5XmsXB988IEhyThx4oRtrGXLlnbnsGbNGkOS8e9//9vuviEhIUbHjh1v2svmzZsNScaCBQvsxlevXm03npaWZlitVuO5556zq5s6daphsVhs/R0/ftzw9PQ0Jk+ebFe3b98+o0iRInbjLVu2NCQZc+fOvWmP+cn9XvTv3982lpWVZVSoUMGwWCzGlClTbOO//fab4e3tbfdaysrKMjIzM+2O+dtvvxkBAQHGE088YRvLfS35+voaKSkp+fbQq1evG/aXq6DPS+7PwLp169r19/777xuS7L7vgLMwBQJwoccee0wnT55U7969tXbtWi1ZsiRPzQ8//KCUlBQ9/fTTdvPnOnbsqOrVq+d5s1HuPDyr1VrgPk6dOqW3335br7zyikqWLGm3z9/fX5L0888/3/QYS5YsUfPmzXXXXXfpl19+sW1RUVHKzs7Wpk2bJEn/+c9/ZLFYNG7cuDzHuN0lktLS0vTLL78oKSlJU6dOVU5Ojtq0aSNJys7O1tq1a9W1a1e7P1cHBQWpd+/e+vbbb5Wenl6gxzh79qzWrVunuLg421Wz6124cMHu3H/55Zc8NVarVR4eHrbefv31V5UsWVLVqlXTzp07bXXOft5zXbp0KU+Pt1ptZNmyZfr+++81ZcqUm9ZJ0qRJk+Tn56ehQ4fesvZ6V65cKfD80IK8xi9cuCBJKlOmjEN9SL8/p35+frrvvvvsnqf69eurZMmStikBudNXFi9ebHeVc9GiRWrcuLEqVqwo6ffnLycnR//85z/tjhcYGKgqVarkmWJgtVr1+OOPO9x3rieffNL2taenpxo0aCDDMGx/EZGkUqVKqVq1avrpp5/sar28vCT9PgXk/PnzysrKUoMGDexem7m6d++ucuXK5dvDwIEDb9lnQZ+X3J+BAwcOtPUn/f7zM7/pYoAzMAUCcKHz58/r888/14MPPqiDBw/q2WefVbt27ex+qJ84cUKSVK1atTz3r169ur799lu7sdTUVEnKE2RvZty4cSpfvrwGDBiQZx5rZGSkLBaLRo8erVdffdV23D/O6z169Kj27t17w/8QU1JSJP0+5aN8+fJ2fy79s7p27Wr72sPDQ2PGjFH37t0lSefOndOlS5fyff5q1KihnJwcnTx5UjVr1rzpY0RHR2vbtm2SpPbt22vRokV5ap544olb9po7//ndd99VYmKiXfi8Pqw5+3nPNW7cuHx/+bjRn9mzs7P10ksvqU+fPqpdu/ZNzy0
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsAAAAJ4CAYAAABrtlX3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABrpklEQVR4nO3deVRU9ePG8WdAQRQBSRBNRRQ3XHItcd8SlyLTFpdS0zJNM8VM/VaumVvlkpatWrlmaZqWG+WO5m7uSyhuoGWIuIDA/f3RcX5NoDE2w6D3/TpnznHu/czMM8OUj5fP/VyLYRiGAAAAAJNwc3UAAAAAICdRgAEAAGAqFGAAAACYCgUYAAAApkIBBgAAgKlQgAEAAGAqFGAAAACYCgUYAAAApkIBBgAAgKlQgAEADpWcnKzJkydb7ycmJmr69OmuC3QXGzFihCwWi37//XdXRwHuKRRgIBeYNWuWLBaLtm/fnmnfJ598IovForZt2yo9Pd0F6QD7eHl56Y033tCcOXN06tQpjRgxQt9//72rY5nagQMHNGLECJ04ccLVUYBcIY+rAwC4tcWLF6t3795q0KCB5s+fL3d3d1dHAv6Vu7u7Ro4cqS5duigjI0M+Pj5avny5q2OZ2oEDBzRy5Eg1btxYpUqVcnUcwOU4AgzkUmvXrlXHjh0VFham77//Xvny5XN1JCDbBg4cqJMnT2rz5s06efKk6tev7+pId5UrV664OgJwT6MAA7nQ7t279dhjj6lo0aJauXKlfH19M41ZuHChatasKS8vLxUuXFjPPPOMzpw5k+XzWSyWLG9//3WoxWLRiBEjbB43ceJEWSwWNW7c2Lrt5pzEfypVqpS6detmsy0xMVH9+/dXiRIl5OnpqdDQUI0fP14ZGRk24zIyMjRlyhRVqVJF+fLlU0BAgFq2bGmdEnKr/DdvN/OtXbvWZrunp6fKlSunsWPHyjAMm9fctWuXWrVqJR8fH3l7e6tZs2basmVLlp/f3x0+fFhNmzZVUFCQPD09VaJECfXq1UsXL160jrmZ45tvvsn0eG9vb5vP6eLFi3r11VdVpUoVeXt7y8fHR61atdKePXtsHufoz/3EiROyWCx65513Mj1n5cqVbX7mN9/P2rVrbca1adMm0/fm7zmLFy+u8PBw5cmTR0FBQVk+x600btw4y5/1P7+j0v9PIbrV9+KmXbt2qWXLlgoICLAZ98gjj9w2S40aNdSuXTubbVWqVJHFYtHevXut2xYsWCCLxaKDBw/avOa/fc9u5l+3bp1eeuklBQYGqnjx4rfMc/LkSYWGhqpy5cpKSEi4bfabz//kk09Kkpo0aWJ932vXrlXXrl1VuHBh3bhxI9PjWrRoofLly1vvWywW9e3bV3PmzFH58uWVL18+1axZU+vXr8/02DNnzqh79+4qUqSIPD09ValSJX3++ef/mhXIKUyBAHKZ48ePq2XLlvL09NTKlStVtGjRTGNmzZql5557TrVr19bYsWOVkJCgKVOmaNOmTdq1a5f8/PwyPebxxx+3/iW+YcMGffzxx7fNkZiYqLFjx97x+7h69aoaNWqkM2fO6MUXX1TJkiW1efNmDR06VOfOnbM5SapHjx6aNWuWWrVqpeeff15paWnasGGDtmzZolq1aumrr76yjr2ZfdKkSSpcuLAkqUiRIjav/b///U8VK1bUtWvXtGDBAv3vf/9TYGCgevToIUnav3+/GjRoIB8fH7322mvKmzevPvroIzVu3Fjr1q3TQw89dMv3deXKFRUvXlyPPvqofHx8tG/fPk2fPl1nzpy5o3muv/32m7777js9+eSTCgkJUUJCgj766CM1atRIBw4cULFixex6Pns+9/9i/fr1+uGHH7I19t13381WUfun4sWLW7+DycnJ6t27923H//07MWbMGJt9ly5dUqtWrWQYhqKiolSiRAlJ0oABA/41R4MGDTRv3jzr/YsXL2r//v1yc3PThg0bVLVqVUl/fTcDAgJUsWJFSfZ/z1566SUFBARo2LBhtzwCfPz4cTVt2lT+/v5avXq19f3eTsOGDdWvXz9NnTrV+t+GJFWsWFHPPvusvvzyS61cudLmHwLx8fH66aefNHz4cJvnWrdunRYsWKB+/frJ09NTH3zwgVq2bKlffvlFlStXliQlJCSoTp061sIcEBCgH3/8UT169FBSUpL69+//r5kBpzMAuNzMmTMNScayZcuMMmXKGJKMFi1aZDk2NTXVCAwMNCpXrmxcu3bNun3ZsmWGJGPYsGE242/cuGFIMkaOHJnp9WJjY63bJBnDhw+33n/ttdeMwMBAo2bNmkajRo2s20eOHGlIMjIyMmxeJzg42Ojatav1/ujRo40CBQoYR44csRk3ZMgQw93d3YiLizMMwzB++uknQ5LRr1+/TO/1n69xq+w3/fzzz4Yk4+eff7Zuu379uuHm5ma89NJL1m1t27Y1PDw8jOPHj1u3nT171ihYsKDRsGHDTM/7b1566SXD29s7U46FCxdmGlugQAGbz+n69etGenq6zZjY2FjD09PTGDVqlHWboz/32NhYQ5IxceLETBkrVapk8zPP6nN96KGHjFatWmX63gwfPtz4+18t58+fNwoWLGgd+/fnuJ26desalStXtt6/cOFCpte66ZNPPjEkGSdPnrRua9Sokc17WLlypSHJmDdvns1jg4ODjTZt2tw2y8KFCw1JxoEDBwzDMIylS5canp6eRmRkpPH0009bx1WtWtV4/PHHrfez+z27+Z2uX7++kZaWZvPaNz/PCxcuGAcPHjSKFStm1K5d27h48eJtM9/qPfzz809PTzeKFy9u8z4MwzDee+89w2KxGL/99pt1myRDkrF9+3brtpMnTxr58uWzed89evQwihYtavz+++82z9mhQwfD19fXuHr1ql3ZAWdgCgSQi3Tr1k2nTp1Sp06dtGrVKi1cuDDTmO3bt+v8+fN66aWXbOYFt2nTRhUqVMh0slFqaqokydPTM9s5zpw5o/fff19vvvmmvL29bfYFBgZKkk6fPn3b51i4cKEaNGigQoUK6ffff7femjdvrvT0dOuvTb/99ltZLJZMR5okZfkr/+y4dOmSfv/9d8XFxWnChAnKyMhQ06ZNJUnp6elatWqV2rZtq9KlS1sfU7RoUXXq1EkbN25UUlJStl4jISFB0dHRWr58uRo2bJhpzOXLl23ee1ZLWXl6esrNzc2a7Y8//pC3t7fKly+vnTt3Wsc5+nO/6erVq5ky/ttqI4sWLdK2bds0bty4246TpNGjR8vX11f9+vX717F/d/369WzPe8/Od/zy5cuSpPvuu8+uHNJfR4AlWT+7DRs2qHbt2nr44Ye1YcMGSX/9xmTfvn3WsXfyPXvhhRdueaLrvn371KhRI5UqVUpr1qxRoUKF7H4fWXFzc1Pnzp21dOlS62ckSXPmzFHdunUVEhJiMz48PFw1a9a03i9ZsqQee+wxrVy5Uunp6TIMQ99++60effRRGYZh872KiIjQpUuXbL7XgKtQgIFc5OLFi5o9e7a++OILVatWTa+88oouXbpkM+bkyZOSZDM376YKFSpY99+UmJgoSZmK7O0MHz5cxYoV04svvphpX3h4uCwWi4YOHaoTJ05Y/3L757zeo0ePasWKFQoICLC5NW/eXJJ0/vx5SX/9SrdYsWLy9/fPdr5/07ZtWwUEBCg4OFgjRozQG2+8ofbt20uSLly4oKtXr2b5+VWsWFEZGRk6derUv75GRESEgoKC1Lx5c1WsWFELFizINKZ79+6Z3v8/f7WdkZGhSZMmqWzZsvL09FThwoUVEBCgvXv32vzsHf253zR8+PBMYw8dOnTL952enq7//e9/6ty5s/VX/7cSGxurjz76SCNHjrT7JM7ff/89y7nvWcnOd7xWrVrKmzevRowYoV27dt3y88tKkSJFVLZsWWvZ3bBhgxo0aKCGDRvq7Nmz+u2337Rp0yZlZGRYC/CdfM/+WTb/7tFHH1XBggW1cuVK+fj4/Gtme3Tp0kXXrl3T4sWLJf01z33Hjh169tlnM40tW7Zspm3lypXT1atXdeHCBV24cEGJiYn
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsAAAAI/CAYAAAB5628jAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABUZ0lEQVR4nO3deVhUdf//8dcAgqgsoiKYiIgb7ommZO57LrnUfWuWuHSrJVlauZS7pWaZS5rWXbe2WJpmWlpuuOb2M9dcMjXMFTcExAUFzu+PLubbBCqDMw52no/rmutiPuc9Z95nHOHF4XM+YzEMwxAAAABgEm6ubgAAAAC4nwjAAAAAMBUCMAAAAEyFAAwAAABTIQADAADAVAjAAAAAMBUCMAAAAEyFAAwAAABTIQADAADAVAjAAGBSKSkpmjp1qvV+YmKiZs6c6bqGHlDHjx+XxWLR3Llz71rbo0cPlS5d2uk9AbgzAjBgh7lz58pisejnn3/Osu2///2vLBaLOnTooPT0dBd0B9jH29tbw4cP17x583Ty5EmNHj1a33//vavbuicWi8Xm5uvrq4YNG2r58uWubu0f64cfftDo0aNd3QZgFw9XNwD8E3z77bd6/vnnVb9+fc2fP1/u7u6ubgm4K3d3d40ZM0bdu3dXRkaGfH19/xFBsXnz5urevbsMw9Aff/yhWbNmqV27dvrxxx/VsmVLhz9faGiorl+/rnz58jl83w+CH374QTNnziQE44FCAAbu0fr169W1a1dVqlRJ33//vfLnz+/qloAce+WVV/Tvf/9bJ0+eVEREhPz9/V3d0j0rX768nnnmGev9zp07q1KlSpo2bZpTArDFYuH/PfCAYQoEcA/27NmjJ554QsHBwVq5cqX8/Pyy1CxcuFCRkZHy9vZW0aJF9cwzz+j06dPZ7u/vf77NvB0/ftym5u9nWt555x1ZLBY1atTIOjZ69GhZLJYsz1G6dGn16NHDZiwxMVEvv/yyQkJC5OXlpbJly+rtt99WRkaGTV1GRoamTZumqlWrKn/+/CpWrJhatWplnRJyu/4zb5n9rV+/3mbcy8tL5cuX14QJE2QYhs1z7t69W61bt5avr68KFSqkpk2batu2bdm+fn91+PBhNWnSREFBQfLy8lJISIj69eunhIQEa01mH4sWLcry+EKFCtm8TgkJCXr11VdVtWpVFSpUSL6+vmrdurX27t1r8zhHv+6Z80vffffdLPusUqWKzb955vGsX7/epq5NmzZZ3jd/7bNkyZKKioqSh4eHgoKCst3H7TRq1Cjbf+vszgZmTiG63fsi0+7du9WqVSsVK1bMpq5t27Y56unvIiIiVLRoUR07dsxmPDU1VaNGjVLZsmWt75HBgwcrNTXVpm716tV67LHH5O/vr0KFCqlChQp6/fXXrdtvNwd4yZIlqlKlivLnz68qVaro22+/zba/jIwMTZ06VZUrV1b+/PlVvHhx9e3bV5cvX7apK126tNq2bauffvpJjzzyiPLnz68yZcros88+y7LPxMREDRw4UKVLl5aXl5dKliyp7t276+LFi3Yf/5306NHDOm/8r/9WhmGodOnSeuKJJ7I85saNG/Lz81Pfvn0l/d/7dsGCBXr99dcVFBSkggULqn379jp58mSWx2/fvl2tWrWSn5+fChQooIYNG2rz5s057hmQOAMM5NqxY8fUqlUreXl5aeXKlQoODs5SM3fuXPXs2VO1a9fWhAkTdO7cOU2bNk2bN2/W7t27sz3b1rFjR3Xq1EmStGnTJn300Ud37CMxMVETJkzI9XFcu3ZNDRs21OnTp9W3b1+VKlVKW7Zs0bBhw3T27Fmbi6R69+6tuXPnqnXr1nruueeUlpamTZs2adu2bapVq5Y+//xza21m71OmTFHRokUlScWLF7d57tdff10RERG6fv269YdfYGCgevfuLUk6cOCA6tevL19fXw0ePFj58uXThx9+qEaNGmnDhg2qU6fObY/r6tWrKlmypNq1aydfX1/t379fM2fO1OnTp3M1z/X333/XkiVL9NRTTyksLEznzp3Thx9+qIYNG+rgwYMqUaKEXfuz53W/Fxs3btQPP/yQo9rJkyfr3Llzdj9HyZIlre/BlJQUPf/883es/+t74q233rLZlpSUpNatW8swDA0aNEghISGSpIEDB9rd11/3efnyZYWHh1vHMjIy1L59e/3000/q06ePIiIi9Msvv2jKlCn67bfftGTJEkl/vgfbtm2ratWqaezYsfLy8tLRo0fvGrhWrVplPfM8YcIEXbp0ST179lTJkiWz1Pbt29f6vWLAgAGKi4vTjBkztHv3bm3evNlmasXRo0f15JNPqnfv3oqOjtb//vc/9ejRQ5GRkapcubKkP/8N6tevr0OHDqlXr16qWbOmLl68qO+++06nTp1S0aJFc3z8d9O3b1+dOXNGq1evtvn/b7FY9Mwzz2jSpElKSEhQQECAddv333+v5ORkm7P00p/vBYvFoiFDhuj8+fOaOnWqmjVrpj179sjb21uStHbtWrVu3VqRkZEaNWqU3NzcNGfOHDVp0kSbNm3SI488kqO+ARkAcmzOnDmGJGPZsmVGeHi4Iclo0aJFtrU3b940AgMDjSpVqhjXr1+3ji9btsyQZIwcOdKm/tatW4YkY8yYMVmeLy4uzjomyRg1apT1/uDBg43AwEAjMjLSaNiwoXV8zJgxhiQjIyPD5nlCQ0ON6Oho6/1x48YZBQsWNH777TebuqFDhxru7u7GiRMnDMMwjLVr1xqSjAEDBmQ51r8/x+16z7Ru3TpDkrFu3Trr2I0bNww3NzfjhRdesI516NDB8PT0NI4dO2YdO3PmjOHj42M0aNAgy37v5oUXXjAKFSqUpY+FCxdmqS1YsKDN63Tjxg0jPT3dpiYuLs7w8vIyxo4dax1z9OseFxdnSDLeeeedLD1WrlzZ5t88u9e1Tp06RuvWrbO8b0aNGmX89UfA+fPnDR8fH2vtX/dxJ48++qhRpUoV6/0LFy5kea5M//3vfw1Jxh9//GEda9iwoc0xrFy50pBkfPXVVzaPDQ0NNdq0aXPXfiQZvXv3Ni5cuGCcP3/e+Pnnn41WrVpleQ0///xzw83Nzdi0aZPN42fPnm1IMjZv3mwYhmFMmTLFkGRcuHDhts+Z+W80Z84c61iNGjWM4OBgIzEx0Tq2atUqQ5IRGhpqHdu0aZMhyZg3b57NPlesWJFlPDQ01JBkbNy40Tp2/vx5w8vLy3jllVesYyNHjjQkGYsXL87Sa+b7MqfHnxP9+/c3sosThw8fNiQZs2bNshlv3769Ubp0aWsvme/bhx56yEhOTrbWff3114YkY9q0adbey5UrZ7Rs2dLm/9e1a9eMsLAwo3nz5jnuGWAKBJALPXr00MmTJ/X0009r1apVWrhwYZaan3/+WefPn9cLL7xgMz+wTZs2qlixYpaLjW7evClJ8vLyynEfp0+f1vvvv68RI0aoUKFCNtsCAwMlSadOnbrjPhYuXKj69eurcOHCunjxovXWrFkzpaena+PGjZKkb775RhaLRaNGjcqyj+z+5J8TSUlJunjxok6cOKFJkyYpIyNDTZo0kSSlp6dr1apV6tChg8qUKWN9THBwsJ5++mn99NNPSk5OztFznDt3TrGxsVq+fLkaNGiQpebKlSs2x/7XPxNn8vLykpubm7W3S5cuWf8cvmvXLmudo1/3TNeuXcvS491WG1m8eLF27NihiRMn3rFOksaNGyc/Pz8NGDDgrrV/dePGjRzPf83Je/zKlSuSpCJFitjVx1998sknKlasmAIDA1WrVi3FxsZq8ODBGjRokLVm4cKFioiIUMWKFW1e08z337p16yTJ+leapUuXZpkSdDtnz57Vnj17FB0dbTMtqnnz5qpUqZJN7cKFC+Xn56fmzZvb9BEZGalChQpZ+8hUqVIl1a9f33q/WLFiqlChgn7//Xfr2DfffKPq1aurY8eOWXrL/L+a0+O/F+XLl1edOnU0b94861hCQoJ+/PFHdevWLcv3je7du8vHx8d6/8knn1RwcLD1Lxh79uzRkSNH9PTTT+vSpUvWnq9
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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484770RCQgJmzZqFqqoqAJ5/cM6ePRvDhg3DX/7yFxw4cACLFy/GDz/8gM2bN9c7ALBixQpcc801uO666/DWW29Bo9Fg79696N+/P9LS0jB9+nSEh4fjo48+wtVXX41PPvkE48aNO6fPlagWQUQB69ixowDg/XXjjTcKp9PpU1NdXV3rdXfccYcICwsTNpvNe2zgwIFi4MCBPnV/+9vfBABRXFzsPQZAPP74497HjzzyiEhMTBS9evXyef1bb70lAIgXX3yx1vUVRRFCCJGXlycAiKVLl3qfmzhxoujatatIT08XN910k/f40qVLBQAxefJk0a1bN+/xqqoqERkZKa6//noBQPzwww9CCCEcDodITEwUXbt2FVar1Vu/YsUKAUDMmjXLe+zyyy8XERER4siRI3X2ebY2bdr49HamgQMHii5dutT5nD91/V3NnTtXSJLk01u/fv1Er169fOq+//57AUC8++67Qggh7Ha7iIuLE3369PH5mnj77bcFgFp/1w0pLCwUWq1WXH311T7Hn3jiCQHA57PYsGGDACA2bNjgPVbf53X211wgXzPLly8XAMRTTz3l8/w111wjJEkSOTk5QgghXnrpJQFAnDhxot739c9//lPIsiy+/vprn+NLliwRAMTmzZvrfe3ZHn/8cXHm/8IOHz4sNBqNePrpp33qfvrpJ6HVar3HFUURaWlpYsKECT51H330kQAgNm3aJIQQorKyUkRHR4vbb7/dp66wsFBERUX5HD+7l7qcy/fHmc7+/m/IqVOnBADx3HPPNVjXpUuXOr8ea77nBwwYIFwul/d4cXGx0Ov1Yvjw4cLtdnuPv/rqqwKAeOutt7zHzvx+/OSTT4ROpxO33367z+uGDh0qunXr5vPfQ0VRxKWXXirat28f0HslaginJRCdg6VLl2LdunV4//33cdttt+H999/3GU0EAJPJ5P1zZWUlSkpKcNlll6G6uho///yzT63T6URJSQlOnDiBLVu24NNPP0X37t0RHx9f5/ULCgrwyiuvYObMmTCbzT7PffLJJ4iPj8c999xT63X1LVO0fft2fPzxx5g7d67P1Ioz3XDDDfj555+90w8++eQTREVFYejQoT5127ZtQ3FxMe68804YjUbv8dGjR6NTp074/PPPAQAnTpzApk2bcOutt/qMeDfUpz9utxslJSUoKSmBw+EI+HVn/l1VVVWhpKQEl156KYQQ2LFjh/e56667Dtu3b/f5Uf2yZctgMBgwduxYAJ73f/LkSdx+++3Qan/7odiUKVO8I7uBWr9+PVwuF+68806f43X93Z6PQL5mVq5cCY1Gg3vvvdfn+QcffBBCCKxatQoAvKPyn332Wb0riHz88cfo3LkzOnXq5P37KikpwZAhQwAAGzZsaPR7+c9//gNFUTBx4kSfcycnJ6N9+/bec0uShGuvvRYrV66ExWLxvn7ZsmVIS0vDgAEDAHimWJSVlWHy5Mk+59NoNOjbt+859xro98f5MJlM0Ov12Lhxo89UmXN1++23e0evAeCLL76Aw+HA/fff7/Pfidtvvx2RkZF19v7hhx/iuuuuwx133IG///3v3teVlpbiyy+/xMSJE73/fSwpKcHJkyeRnZ2NQ4cO1TmNiehcMNwSnYN+/fph2LBhuP766/GPf/wDc+bMwdKlS31+9Lp
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAq4AAAIjCAYAAADC0ZkAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABmPUlEQVR4nO3deXhU9d3//9c5syeTPSQhEHYRFdGKiriiItStWmmtS6ui33q3N9oqd1u1VgWXG1vbauu+FXvfyq21LfprqywqS7VoFYuICxUEQQiEANkns53z+2OSkSEJjMwkh5Dn47pyhfmcd855Z/C6fPGZz/kcw7ZtWwAAAMB+znS6AQAAACAdBFcAAAD0CgRXAAAA9AoEVwAAAPQKBFcAAAD0CgRXAAAA9AoEVwAAAPQKBFcAAAD0CgRXAAAA9AoEVwA4AEyYMEGjR4/ukWsNGTJEV1xxRY9ca3+2fv16GYahX/7yl063AvQZBFegj3nkkUc0efJklZeXy+PxqKKiQqeccor+53/+R5ZlOd0ekFWbN2/WjBkztGLFCqdbAZAFbqcbANCzfv/736t///665ZZblJ+fr7q6Or355pu64oor9PLLL+v//u//nG4R+7nVq1fLNHvHvMfmzZs1c+ZMDRkyREceeaTT7QDIEMEV6GOWLl0qj8eTMvaDH/xAJSUleuCBBzRr1iwNGTLEmebQK/h8Pqdb6DYtLS3Kyclxug0AXegd/2QGkDW7h9Z27WF115m0F198UWeffbYqKyvl8/k0fPhw3XHHHYrH4yk/O2HCBBmGkfwqLS3V2WefrVWrVqXUGYahGTNmpIzdc889MgxDEyZMSBlvbW3VjBkzNHLkSPn9fvXv318XXHCB1q5dK+mL9YVPPfVUys9NmzZNhmGkrMF86qmnZBiGvF6vtm3bllK/bNmyZN/vvPNOyrHnn39eY8eOVSAQUGlpqb797W9r06ZNHd67jz/+WBdeeKH69eunQCCggw8+WDfffLMkacaMGSnvTWdfixcvTr6Pma5TXb58uY4//ngFAgENHTpUjzzySMrxxYsXyzAM/eEPf9DMmTM1YMAA5eXl6Rvf+Ibq6+sVDod13XXXqaysTMFgUFOnTlU4HE45R7prXJubm/Vf//Vfqqqqks/n08EHH6xf/vKXsm07WbO392b3/y52t3DhQp144okqLCxUMBjUwQcfrJ/+9KfJ3/WYY46RJE2dOjV5zvb/Ztrf7+XLl+vkk09WTk5O8mdramp01VVXqby8XH6/X0cccYR+//vf7/V3tm1bV199tbxer/785z8nx59++unkf0vFxcW66KKLtHHjxr2eD0AqZlyBPqqurk6xWEyNjY1avny5fvnLX+qiiy7SoEGDkjVPPfWUgsGgpk+frmAwqNdee0233nqrGhoadM8996Scb9SoUbr55ptl27bWrl2rX//61zrrrLO0YcOGPfYwa9asDuPxeFznnHOOXn31VV100UX64Q9/qMbGRi1cuFCrVq3S8OHDOz3fmjVr9Pjjj3d5PZfLpaefflrXX399cmz27Nny+/1qbW1NqX3qqac0depUHXPMMZo1a5a2bt2q3/zmN3rjjTf0r3/9S4WFhZKklStX6qSTTpLH49HVV1+tIUOGaO3atfrLX/6iu+66SxdccIFGjBiRPO/111+vQw45RFdffXVy7JBDDumy5y9j586dOuuss3ThhRfq4osv1h/+8Ad9//vfl9fr1ZVXXplSO2vWLAUCAd14441as2aN7r//fnk8HpmmqZ07d2rGjBl688039dRTT2no0KG69dZbv1Qvtm3ra1/7mhYtWqSrrrpKRx55pObPn68f//jH2rRpk+69915J0v/+7/8mf+bvf/+7HnvsMd17770qLS2VJJWXl3d5jQ8++EDnnHOOxowZo9tvv10+n09r1qzRG2+8ISnxvt5+++269dZbdfXVV+ukk06SJB1//PHJc2zfvl1nnnmmLrroIn37299WeXm5QqGQJkyYoDVr1uiaa67R0KFD9fzzz+uKK65QXV2dfvjDH3baTzwe15VXXqnnnntOc+fO1dlnny1Juuuuu3TLLbfowgsv1P/7f/9P27Zt0/3336+TTz455b8lAGmwAfRJBx98sC0p+XXZZZfZ0Wg0paalpaXDz/3Hf/yHnZOTY7e2tibHTjnlFPuUU05JqfvpT39qS7JramqSY5Ls2267Lfn6Jz/5iV1WVmaPHTs25ed/97vf2ZLsX//61x2ub1mWbdu2vW7dOluSPXv27OSxCy+80B49erRdVVVlX3755cnx2bNn25Lsiy++2D788MOT483NzXZ+fr59ySWX2JLst99+27Zt245EInZZWZk9evRoOxQKJev/+te/2pLsW2+9NTl28skn23l5efZnn33WaZ+7Gzx4cEpvuzrllFPsww47rNNje3PKKafYkuxf/epXybFwOGwfeeSRdllZmR2JRGzbtu1FixbZkuzRo0cnx2zbti+++GLbMAz7zDPPTDnv+PHj7cGDB6f9O7R74YUXbEn2nXfemTL+jW98wzYMw16zZk2Hn2n/e1q3bl0av7Ft33vvvbYke9u2bV3WvP322x3+O2nX/p498sgjKeP33XefLcl++umnk2ORSMQeP368HQwG7YaGBtu2v/hv8J577rGj0aj9rW99yw4EAvb8+fOTP7d+/Xrb5XLZd911V8o13n//fdvtdncYB7BnLBUA+qjZs2dr4cKFeuaZZ3TVVVfpmWeeSZkFlKRAIJD8c2Njo2pra3XSSSeppaVFH3/8cUptNBpVbW2ttm3bpmXLlmnu3LkaM2ZMcuZsd5s2bdL999+vW265RcFgMOXYn/70J5WWluraa6/t8HOGYXR6vuXLl+v555/XrFmzurxx6Dvf+Y4+/vjj5JKAP/3pTyooKNDpp5+eUvfOO++opqZG//mf/ym/358cP/vsszVq1Cj97W9/kyRt27ZNS5cu1ZVXXpkyU72nPvcmHo+rtrZWtbW1ikQiX+pn3W63/uM//iP52uv16j/+4z9UU1Oj5cuXp9RedtllKctGxo0bJ9u2O8zMjhs3Ths3blQsFvtSvbz00ktyuVz6wQ9+kDL+X//1X7JtWy+//PKXOl9n2mcqX3zxxX3eEcPn82nq1KkpYy+99JIqKip08cUXJ8c8Ho9+8IMfqKmpSUuWLEmpj0Qi+uY3v6m//vWveumllzRp0qTksT//+c+yLEsXXnhh8u+1trZWFRUVOuigg7Ro0aJ96hvoqwiuQB81fvx4TZw4UZdccomeeOIJ3X777Zo9e3byY1Yp8VHs17/+dRUUFCg/P1/9+vXTt7/9bUlSfX19yvn+8Y9/qF+/fiorK9Pxxx+vWCym559/vssAd9ttt6mysjIlaLVbu3atDj74YLnd6a9muvHGG3XSSSfpnHPO6bKmX79+Ovvss/W73/1OkvS73/1Ol19+eYeg+9lnn0mSDj744A7nGDVqVPL4p59+KklZ3T/1448/Vr9+/VLWy86ZMyetn62srFRubm7K2MiRIyUl1gTvavegXVBQIEmqqqrqMG5ZVoe/77357LPPVFlZqby8vJTx9mUR7e9hJr71rW/phBNO0P/7f/9P5eXluuiii/SHP/zhS4XYAQMGyOv1duj9oIMO6vDfRVe9z5o1Sy+88IL++Mc/dliT+8knn8i2bR100EHJv9f2r48++kg1NTVf4jcGwBpXAJKkb3zjG7r55pv11ltv6YQTTlBdXZ1OOeUU5efn6/bbb9fw4cPl9/v17rvv6oYbbugQDsaMGaNf/epXkhIzkb/97W81YcIEvfvuu6qoqEip/eijj/TUU0/p6aef7vJmsS9jwYIFeuWVV7Rs2bK91l555ZW67LLLdO2112rp0qV64okn9Pe//z3jHrJlyJAhyXW627dv129/+1t95zvf0bBhw3Tcccdl7Toul+tLjdu73FC1vwgEAlq6dKkWLVqkv/3tb5o3b56ee+45nXbaaVqwYEGXv8vu58jU5MmTNW/ePP3iF7/QhAkTUmbpLcuSYRh6+eWXO+1n908bAOwZwRWAJCkUCkn6IrgsXrxY27d
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsAAAAKLCAYAAAD4sD5AAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABvjklEQVR4nO3deXRM9+PG8WcSWQRJbFlUBLFHbKGaql0TS6mlrbW0pZbaSquqVXuttVVbLV9LtZRSpS21hKC1FbHvexShKJEgJLm/P3rMr9MEmZgYMu/XOXOO+dxPZp5JRjzufO69JsMwDAEAAAAOwsneAQAAAIBHiQIMAAAAh0IBBgAAgEOhAAMAAMChUIABAADgUCjAAAAAcCgUYAAAADgUCjAAAAAcCgUYAAAADoUCDAAOKj4+XpMmTTLfv3r1qj7//HP7BcpiTCaTevTocd85p06dkslk0uzZsx9NKACSKMCAVWbPni2TyaTt27en2jZ9+nSZTCY1bdpUycnJdkgHWCd79uwaOHCg5s6dqzNnzmjIkCH6+eef7R0Lj6lNmzZpyJAhunr1aoYf44svvqDs47GQzd4BgKzgxx9/VLdu3VS9enXNnz9fzs7O9o4EPJCzs7OGDh2q9u3bKyUlRZ6enlq2bJm9YzmUwMBA3bx5Uy4uLvaO8kCbNm3S0KFD9dprr8nb2ztDj/HFF18oX758eu2112yaDbAWBRh4SOvWrVPr1q1VpkwZ/fzzz3J3d7d3JCDd3nnnHbVs2VJnzpxR6dKlM1xskDEmk4nfGYAdsAQCeAi7du3Siy++KH9/f61cuVJeXl6p5ixcuFChoaHKnj278uXLp3bt2uns2bNpPp7JZErzdurUKYs5Q4YMsfi6cePGyWQyqVatWuaxIUOGyGQypXqOwoULp9r7cvXqVb399tsKCAiQm5ubihUrpjFjxiglJcViXkpKiiZPnqyQkBC5u7srf/78ql+/vnlJyL3y373dzbdu3TqLcTc3N5UoUUKjRo2SYRgWz7lz5041aNBAnp6eypkzp+rWrastW7ak+f37t8OHD6tOnTry8/OTm5ubAgIC1LVrV125csU8526ORYsWpfr6nDlzWnyfrly5onfffVchISHKmTOnPD091aBBA+3evdvi62z9fb+7RvSTTz5J9Zhly5a1+JnffT3r1q2zmNeoUaNU75t/5yxYsKDCwsKULVs2+fn5pfkY91KrVq00f9b/fY9K/7+E6F7vi7t27typ+vXrK3/+/BbzXnjhhQfmmT9/vkJDQ5UrVy55enoqJCREkydPTpXh999/V69evZQ/f355e3urS5cuun37tq5evar27dsrd+7cyp07t957771U78mEhAS988475p9byZIl9cknn6Sal5YRI0bIyclJU6ZMkZT2GuDXXntNOXPm1NmzZ9W0aVPlzJlT+fPn17vvvptqedXly5f16quvytPTU97e3urQoYN2796doXXFU6ZMUXBwsDw8PJQ7d25VrlxZ8+bNk/TP+6Vfv36SpCJFiqT63TRr1izVqVNHPj4+cnNzU5kyZTR16lSLxy9cuLD279+v9evXp/rZ3+vvzd2f179/B27fvl0RERHKly+fsmfPriJFiuiNN96w6rUC7AEGMuj48eOqX7++3NzctHLlSvn7+6eaM3v2bL3++uuqUqWKRo0apQsXLmjy5MnauHGjdu7cmebetmbNmql58+aSpN9++03Tpk27b46rV69q1KhRGX4dN27cUM2aNXX27Fl16dJFhQoV0qZNmzRgwACdP3/e4iCpjh07avbs2WrQoIE6deqkpKQk/fbbb9qyZYsqV66sb775xjz3bvaJEycqX758kiRfX1+L5/7ggw9UunRp3bx5UwsWLNAHH3wgHx8fdezYUZK0f/9+Va9eXZ6ennrvvffk4uKir776SrVq1dL69etVtWrVe76uhIQEFSxYUI0bN5anp6f27dunzz//XGfPns3QOtcTJ05oyZIlevnll1WkSBFduHBBX331lWrWrKkDBw6oQIECVj2eNd/3h7FhwwYtX748XXPHjx+vCxcuWP0cBQsWNL8H4+Pj1a1bt/vO//d74uOPP7bYdu3aNTVo0ECGYahv374KCAiQJPXp0+eBOVavXq3WrVurbt26GjNmjCTp4MGD2rhxo3r37m0xt2fPnvLz89PQoUO1ZcsWTZs2Td7e3tq0aZMKFSqkkSNHavny5Ro3bpzKli2r9u3bS5IMw1CTJk0UFRWljh07qkKFClq5cqX69euns2fPauLEiffMN3DgQI0cOVJfffWV3nzzzfu+luTkZEVERKhq1ar65JNPFBkZqfHjxysoKMj8/U1JSVHjxo31xx9/qFu3bipVqpSWLl2qDh06PPB79V/Tp09Xr1699NJLL6l37966deuW9uzZo61bt6pNmzZq3ry5jhw5ou+++87i55c/f35J0tSpUxUcHKwmTZooW7Zs+vnnn/XWW28pJSVF3bt3lyRNmjRJPXv2VM6cOfXhhx9KSv074UEuXryo8PBw5c+fX++//768vb116tQpLV682OrXDAdnAEi3WbNmGZKMX375xQgKCjIkGeHh4WnOvX37tuHj42OULVvWuHnzpnn8l19+MSQZgwYNsph/584dQ5IxdOjQVM938uRJ85gkY/Dgweb77733nuHj42OEhoYaNWvWNI8PHTrUkGSkpKRYPE9gYKDRoUMH8/3hw4cbOXLkMI4cOWIx7/333zecnZ2NmJgYwzAMY+3atYYko1evXqle63+f417Z74qKijIkGVFRUeaxW7duGU5OTsZbb71lHmvatKnh6upqHD9+3Dx27tw5I1euXEaNGjVSPe6DvPXWW0bOnDlT5Vi4cGGquTly5LD4Pt26dctITk62mHPy5EnDzc3NGDZsmHnM1t/3kydPGpKMcePGpcoYHBxs8TNP6/tatWpVo0GDBqneN4MHDzb+/U/AxYsXjVy5cpnn/vsx7ufZZ581ypYta77/119/pXquu6ZPn25IMk6fPm0eq1mzpsVrWLlypSHJ+O677yy+NjAw0GjUqNF9s/Tu3dvw9PQ0kpKS7jnn7vsyIiLC4mcUFhZmmEwmo2vXruaxpKQko2DBghb5lixZYkgyRowYYfG4L730kmEymYxjx46ZxyQZ3bt3NwzDMN555x3DycnJmD17tsXX3f35zpo1yzzWoUMHQ5LF+8owDKNixYpGaGio+f4PP/xgSDImTZpkHktOTjbq1KmT6jEf5MUXXzSCg4PvO2fcuHH3/Dt948aNVGMRERFG0aJFLcb++56967/vx7v++3vkxx9/NCQZ27Ztu29W4EFYAgFkwGuvvaYzZ86oTZs2WrVqlRYuXJhqzvbt23Xx4kW99dZbFmv8GjVqpFKlSqU62Oj27duSJDc3t3TnOHv2rKZMmaKPPvpIOXPmtNjm4+MjSfrzzz/v+xgLFy5U9erVlTt3bl26dMl8q1evnpKTk7VhwwZJ0g8//CCTyaTBgweneoy0PrpMj2vXrunSpUuKiYnR2LFjlZKSojp16kj6Zw/YqlWr1LRpUxUtWtT8Nf7+/mrTpo1+//13xcXFpes5Lly4oDVr1mjZsmWqUaNGqjnXr1+3eO2XLl1KNcfNzU1OTk7mbJcvX1bOnDlVsmRJRUdHm+fZ+vt+140bN1JlfNDZRhYvXqxt27Zp9OjR950nScOHD5eXl5d69er1wLn/duvWrXSvYU3Pe/z69euSpLx581qVQ5K8vb2VkJCg1atXP3Bux44dLd63VatWlWEY5k8fpH8OEqxcubJOnDhhHlu+fLmcnZ1TfZ/eeecdGYahX3/91WLcMAz16NFDkydP1rfffmvV3tmuXbta3K9evbpFlhUrVsjFxcVib7KTk5N5j6s1vL299eeff2rbtm1Wf630zxlF7rr797pmzZo6ceKErl27lqHHTMvdT81++eUX3blzx2aPC8fDEgggA65cuaL58+erWbNmOnDggHr37q3w8HCLNcCnT5+WJJUsWTLV15cqVUq///67xdjdUwv9t8jez+DBg1WgQAF16dIl1TrWsLAwmUwmDRgwQCNGjDA
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import matplotlib.pyplot as plt\n",
|
|||
|
"# Список колонок для построения графиков\n",
|
|||
|
"columns = ['gender', 'age', 'hypertension', 'heart_disease', 'ever_married',\n",
|
|||
|
" 'work_type', 'Residence_type', 'avg_glucose_level', 'bmi',\n",
|
|||
|
" 'smoking_status']\n",
|
|||
|
"\n",
|
|||
|
"# Создание диаграмм зависимости\n",
|
|||
|
"for column in columns:\n",
|
|||
|
" plt.figure(figsize=(8, 6)) # Установка размера графика\n",
|
|||
|
" if pd.api.types.is_numeric_dtype(df[column]): # Проверяем, является ли колонка числовой\n",
|
|||
|
" # Проверяем, содержит ли колонка только два уникальных значения (0 и 1)\n",
|
|||
|
" if df[column].nunique() == 2 and set(df[column].unique()).issubset({0, 1}):\n",
|
|||
|
" # Если да, то строим столбчатую диаграмму\n",
|
|||
|
" counts = df[column].value_counts() # Считаем количество повторений каждого значения\n",
|
|||
|
" counts.plot(kind='bar') # Создаем столбчатую диаграмму\n",
|
|||
|
" plt.title(f'Количество значений для {column}')\n",
|
|||
|
" plt.xlabel(column)\n",
|
|||
|
" plt.ylabel('Количество повторений')\n",
|
|||
|
" else:\n",
|
|||
|
" # Если колонка числовая, создаем диаграмму рассеяния\n",
|
|||
|
" plt.scatter(df['stroke'], df[column], alpha=0.5) # Создаем диаграмму рассеяния\n",
|
|||
|
" plt.title(f'Зависимость {column} от stroke')\n",
|
|||
|
" plt.xlabel('stroke (0 = нет, 1 = да)')\n",
|
|||
|
" plt.ylabel(column)\n",
|
|||
|
" plt.xticks([0, 1]) # Установка меток по оси X\n",
|
|||
|
" plt.grid() # Добавление сетки для удобства восприятия\n",
|
|||
|
" else:\n",
|
|||
|
" # Если колонка не числовая, строим столбчатую диаграмму\n",
|
|||
|
" counts = df[column].value_counts() # Считаем количество повторений каждого значения\n",
|
|||
|
" counts.plot(kind='bar') # Создаем столбчатую диаграмму\n",
|
|||
|
" plt.title(f'Количество значений для {column}')\n",
|
|||
|
" plt.xlabel(column)\n",
|
|||
|
" plt.ylabel('Количество повторений')\n",
|
|||
|
"\n",
|
|||
|
" plt.show() # Отображение графика"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 15,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"# Функция для создания выборок\n",
|
|||
|
"from sklearn.model_selection import train_test_split\n",
|
|||
|
"\n",
|
|||
|
"def split_stratified_into_train_val_test(\n",
|
|||
|
" df_input,\n",
|
|||
|
" stratify_colname=\"y\",\n",
|
|||
|
" frac_train=0.6,\n",
|
|||
|
" frac_val=0.15,\n",
|
|||
|
" frac_test=0.25,\n",
|
|||
|
" random_state=None,\n",
|
|||
|
"):\n",
|
|||
|
"\n",
|
|||
|
" if frac_train + frac_val + frac_test != 1.0:\n",
|
|||
|
" raise ValueError(\n",
|
|||
|
" \"fractions %f, %f, %f do not add up to 1.0\"\n",
|
|||
|
" % (frac_train, frac_val, frac_test)\n",
|
|||
|
" )\n",
|
|||
|
"\n",
|
|||
|
" if stratify_colname not in df_input.columns:\n",
|
|||
|
" raise ValueError(\"%s is not a column in the dataframe\" % (stratify_colname))\n",
|
|||
|
"\n",
|
|||
|
" X = df_input # Contains all columns.\n",
|
|||
|
" y = df_input[\n",
|
|||
|
" [stratify_colname]\n",
|
|||
|
" ] # Dataframe of just the column on which to stratify.\n",
|
|||
|
"\n",
|
|||
|
" # Split original dataframe into train and temp dataframes.\n",
|
|||
|
" df_train, df_temp, y_train, y_temp = train_test_split(\n",
|
|||
|
" X, y, stratify=y, test_size=(1.0 - frac_train), random_state=random_state\n",
|
|||
|
" )\n",
|
|||
|
"\n",
|
|||
|
" # Split the temp dataframe into val and test dataframes.\n",
|
|||
|
" relative_frac_test = frac_test / (frac_val + frac_test)\n",
|
|||
|
" df_val, df_test, y_val, y_test = train_test_split(\n",
|
|||
|
" df_temp,\n",
|
|||
|
" y_temp,\n",
|
|||
|
" stratify=y_temp,\n",
|
|||
|
" test_size=relative_frac_test,\n",
|
|||
|
" random_state=random_state,\n",
|
|||
|
" )\n",
|
|||
|
"\n",
|
|||
|
" assert len(df_input) == len(df_train) + len(df_val) + len(df_test)\n",
|
|||
|
"\n",
|
|||
|
" return df_train, df_val, df_test"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 16,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"stroke\n",
|
|||
|
"0 4861\n",
|
|||
|
"1 249\n",
|
|||
|
"Name: count, dtype: int64\n",
|
|||
|
"\n",
|
|||
|
"Обучающая выборка: (3066, 12)\n",
|
|||
|
"stroke\n",
|
|||
|
"0 2917\n",
|
|||
|
"1 149\n",
|
|||
|
"Name: count, dtype: int64\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 200x200 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Контрольная выборка: (1022, 12)\n",
|
|||
|
"stroke\n",
|
|||
|
"0 972\n",
|
|||
|
"1 50\n",
|
|||
|
"Name: count, dtype: int64\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 200x200 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Тестовая выборка: (1022, 12)\n",
|
|||
|
"stroke\n",
|
|||
|
"0 972\n",
|
|||
|
"1 50\n",
|
|||
|
"Name: count, dtype: int64\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 200x200 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"# Вывод распределения количества наблюдений по меткам (классам)\n",
|
|||
|
"print(df.stroke.value_counts())\n",
|
|||
|
"print()\n",
|
|||
|
"\n",
|
|||
|
"data = df.copy()\n",
|
|||
|
"\n",
|
|||
|
"df_train, df_val, df_test = split_stratified_into_train_val_test(\n",
|
|||
|
" data, stratify_colname=\"stroke\", frac_train=0.60, frac_val=0.20, frac_test=0.20\n",
|
|||
|
")\n",
|
|||
|
"\n",
|
|||
|
"print(\"Обучающая выборка: \", df_train.shape)\n",
|
|||
|
"print(df_train.stroke.value_counts())\n",
|
|||
|
"counts = df_train['stroke'].value_counts()\n",
|
|||
|
"plt.figure(figsize=(2, 2))# Установка размера графика\n",
|
|||
|
"plt.pie(counts, labels=counts.index, autopct='%1.1f%%', startangle=90)# Построение круговой диаграммы\n",
|
|||
|
"plt.title('Распределение классов stroke в обучающей выборке')# Добавление заголовка\n",
|
|||
|
"plt.show()# Отображение графика\n",
|
|||
|
"\n",
|
|||
|
"print(\"Контрольная выборка: \", df_val.shape)\n",
|
|||
|
"print(df_val.stroke.value_counts())\n",
|
|||
|
"counts = df_val['stroke'].value_counts()\n",
|
|||
|
"plt.figure(figsize=(2, 2))\n",
|
|||
|
"plt.pie(counts, labels=counts.index, autopct='%1.1f%%', startangle=90)\n",
|
|||
|
"plt.title('Распределение классов stroke в контрольной выборке')\n",
|
|||
|
"plt.show()\n",
|
|||
|
"\n",
|
|||
|
"print(\"Тестовая выборка: \", df_test.shape)\n",
|
|||
|
"print(df_test.stroke.value_counts())\n",
|
|||
|
"counts = df_test['stroke'].value_counts()\n",
|
|||
|
"plt.figure(figsize=(2, 2))\n",
|
|||
|
"plt.pie(counts, labels=counts.index, autopct='%1.1f%%', startangle=90)\n",
|
|||
|
"plt.title('Распределение классов stroke в тестовой выборке')\n",
|
|||
|
"plt.show()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Сбалансируем распределение:"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"1. Балансировка данных оверсемплингом. Это метод, увеличивающий число наблюдений в меньшинственном классе для достижения более равномерного распределения классов."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 17,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Обучающая выборка после oversampling: (5811, 18)\n",
|
|||
|
"stroke\n",
|
|||
|
"0 2917\n",
|
|||
|
"1 2894\n",
|
|||
|
"Name: count, dtype: int64\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAosAAAH4CAYAAAAitKflAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABanElEQVR4nO3dd3iT5eLG8TvppgNaRpkCMmULAsoG2ThQEcGFeAQceBQ9Q+QouI/iTwHBPVBERBzgAmSpgAiogICA7FFmy+oeyfv7o6expQ10pH2S9Pu5rl7QNH1zJ02e3n2e931jsyzLEgAAAFAAu+kAAAAA8F6URQAAALhFWQQAAIBblEUAAAC4RVkEAACAW5RFAAAAuEVZBAAAgFuURQAAALhFWQQAoAScTqfi4+O1Z88e01GAUkFZBOBis9k0duxY0zEASdKqVav0/fffuz7//vvvtXr1anOBcjl69KgefPBB1a1bV8HBwapataqaNWums2fPmo4GeFyRyuLMmTNls9lcH6GhoWrcuLHGjh2rY8eOlVZGoFxYtWqVBgwYoFq1aik0NFQXXXSRrr76an300Ueu66SkpGjSpEl5foEC/urgwYO69957tXnzZm3evFn33nuvDh48aDqWdu3apfbt2+vjjz/WmDFj9PXXX2vJkiVatmyZwsPDTcdDEXz77bey2WyqWbOmnE5ngdepV6+eq/fY7XZVqlRJLVu21OjRo7V27doSbz8jI0NTp07VpZdeqqioKFWqVEnNmzfX6NGjtX37dknSgAEDFB0dXWDXOnPmjGrUqKGOHTvK6XTq+++/d+X99ddf813/jjvuUERExIUemjwCi3Tt/3nyySdVv359paWladWqVXrttdf07bffasuWLapQoUJxNgmUa/PmzdNNN92kNm3a6IEHHlB0dLT27t2rH3/8UW+99ZZuvvlmSdll8YknnpAk9ejRw2BioPRdf/31mjJlilq1aiVJuuKKK3T99dcbTiWNGTNGwcHB+vnnn1WrVi3TcVACs2fPVr169bRv3z4tX75cvXv3LvB6bdq00cMPPyxJSkxM1LZt2zRv3jy99dZbGjdunF566aVib/+GG27QwoULNXz4cI0aNUqZmZnavn27vv76a3Xq1ElNmzbVq6++qhYtWmjcuHF5JhAk6dFHH1V8fLwWLVokuz3vHOCkSZP01VdfFeehycsqgvfee8+SZK1fvz7P5Q899JAlyfroo4+KsjkA/9OsWTOrefPmVnp6er6vHTt2zPX/EydOWJKsiRMnFmq7SUlJRcohybrvvvuK9D1AacrKyrI2btxobdy40crKyjIdx/rll18sSdZ3331nOgpKKCkpyQoPD7emTZtmXXrppdYdd9xR4PXq1q1rDRo0KN/lKSkp1uDBgy1J1quvvlqs7a9bt86SZD3zzDP5vpaVlWXFx8e7Pn/++ectSdbixYvzfL/dbrf+9a9/uS5bsWKFJclq06aNJcn69ddf82x3xIgRVnh4eIH31R2P7LPYq1cvSdLevXslSSdPntQ//vEPtWzZUhEREYqKitKAAQO0adOmfN+blpamSZMmqXHjxgoNDVWNGjV0/fXXa/fu3ZKkffv25Vn6Pvcj9+xKztTr3Llz9eijj6p69eoKDw/XNddcU+DSxdq1a9W/f39VrFhRFSpUUPfu3d3uD9OjR48Cb3/SpEn5rvvhhx+qXbt2CgsLU0xMjIYNG1bg7Z/vvuXmdDo1ZcoUNW/eXKGhoYqNjdWYMWN06tSpPNerV6+errrqqny3M3bs2HzbLCj75MmT8z2mkpSenq6JEyeqYcOGCgkJUZ06dfSvf/1L6enpBT5WufXo0SPf9p555hnZ7fZ8fx0V9vF48cUX1alTJ1WuXFlhYWFq166dPv300wJv/8MPP1SHDh1UoUIFRUdHq1u3bvruu+/yXGfhwoXq3r27IiMjFRUVpfbt2+fLNm/ePNfPtEqVKrr11lsVFxeX5zp33HFHnszR0dHq0aOHVq5cecHHaffu3Wrfvr2Cg4Pzfa1atWqux6dq1aqSpCeeeCLfczBnaWH37t0aOHCgIiMjdcstt0iSkpOT9fDDD6tOnToKCQlRkyZN9OKLL8qyrAtme/rpp2W32/XKK6/kecy6du2q8PBwRUZGatCgQdq6desFt3XuriwVKlRQy5Yt9fbbbxfp+wr6mDlzZp7HYc+ePerXr5/Cw8NVs2ZNPfnkk/nur8nXVlHHK08/B1999VU1b95cISEhqlmzpu677z6dPn36gvcl52exb9++Yj0+WVlZeuqpp9SgQQOFhISoXr16evTRR/ONJ/Xq1dMdd9yhgIAAtW7dWq1bt9bnn38um82mevXq5butc527dFi9enXddNNNOnDggOs6OWPOiy++6HY7kyZNynMffv75Z4WGhmr37t2ux6969eoaM2aMTp48me/7C/tzK8xzNidvznNdyp7lateunerXr68jR464Li/sc7sg5z6Pzv04dzeYwtxHSdq+fbuGDh2qqlWrKiwsTE2aNNGECRPyXS/3z+58t1vccSjHF198odTUVN14440aNmyYPv/8c6WlpRX6+8PCwjRr1izFxMTomWeeyTe+FGb7OV2nc+fO+bYfEBCgypUruz5/6KGH1KpVK917771KS0uTw+HQ3Xffrbp162rixIn5vv/+++9XdHR0gT2lqIq1DH2unDubc6f27Nmj+fPn68Ybb1T9+vV17NgxvfHGG+revbv++OMP1axZU5LkcDh01VVXadmyZRo2bJgeeOABJSYmasmSJdqyZYsaNGjguo3hw4dr4MCBeW53/PjxBeZ55plnZLPZ9O9//1vHjx/XlClT1Lt3b23cuFFhYWGSpOXLl2vAgAFq166dJk6cKLvdrvfee0+9evXSypUr1aFDh3zbrV27tp577jlJUlJSku65554Cb/uxxx7T0KFDddddd+nEiRN65ZVX1K1bN23YsEGVKlXK9z2jR49W165dJUmff/65vvjiizxfHzNmjGbOnKmRI0fq73//u/bu3avp06drw4YNWr16tYKCggp8HIri9OnTrvuWm9Pp1DXXXKNVq1Zp9OjRuuSSS7R582a9/PLL+vPPPzV//vwi3c57772n//znP/q///s/19LquS70eEydOlXXXHONbrnlFmVkZOjjjz/WjTfeqK+//lqDBg1yXe+JJ57QpEmT1KlTJz355JMKDg7W2rVrtXz5cvXt21dS9i++O++8U82bN9f48eNVqVIlbdiwQYsWLXLly3ns27dvr+eee07Hjh3T1KlTtXr16nw/0ypVqujll1+WJB06dEhTp07VwIEDdfDgwQJ/9jnq1q2rZcuW6dChQ6pdu3aB16latapee+013XPPPbruuutcy3E5S3RS9i/ifv36qUuXLnrxxRdVoUIFWZala665RitWrNDf/vY3tWnTRosXL9Y///lPxcXFufIW5D//+Y+effZZvfHGGxo1apQkadasWRoxYoT69eun559/XikpKXrttdfUpUsXbdiwoVC/yF9++WVVqVJFZ8+e1bvvvqtRo0apXr16bpeAunXrplmzZrk+f+aZZyQpzy+aTp06uf7vcDjUv39/XX755XrhhRe0aNEiTZw4UVlZWXryySdd1zP52sp9Xy40Xnn6OThp0iQ98cQT6t27t+655x7t2LFDr732mtavX++x++3OXXfdpffff19DhgzRww8/rLVr1+q5557Ttm3b8r3Wc8vKyiqwWJxP165dNXr0aDmdTm3ZskVTpkzR4cOHC/UHnDsJCQlKS0vTPffco169eunuu+/W7t27NWPGDK1du1Zr165VSEiIpKL93Ar7nM0tMzNTN9xwgw4cOKDVq1erRo0arq+V9LkdEhKS74+49evXa9q0aXkuK+x9/P3339W1a1cFBQVp9OjRqlevnnbv3q2vvvrK9XrOLednJ0nbtm3Ts88+m+frnhiHZs+erZ49e6p69eoaNmyYHnnkEX311Ve68cYbL/i9OSIiInTdddfpnXfe0R9//KHmzZsXaft169Z1Xbdz584KDHRfywIDA/Xmm2+qU6dOeuqpp1StWjX99tt
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 600x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"from imblearn.over_sampling import ADASYN\n",
|
|||
|
"from sklearn.compose import ColumnTransformer\n",
|
|||
|
"from sklearn.preprocessing import OneHotEncoder\n",
|
|||
|
"\n",
|
|||
|
"categorical_features = ['gender', 'ever_married', 'work_type', 'Residence_type'] # Ваши категориальные признаки\n",
|
|||
|
"numeric_features = ['age', 'hypertension', 'heart_disease', 'avg_glucose_level', 'bmi'] # Ваши числовые признаки\n",
|
|||
|
"\n",
|
|||
|
"# Создание пайплайна для обработки категориальных данных\n",
|
|||
|
"preprocessor = ColumnTransformer(\n",
|
|||
|
" transformers=[\n",
|
|||
|
" ('cat', OneHotEncoder(), categorical_features), # OneHotEncoder для категориальных данных\n",
|
|||
|
" ('num', 'passthrough', numeric_features) # Оставляем числовые колонки без изменений\n",
|
|||
|
" ]\n",
|
|||
|
")\n",
|
|||
|
"\n",
|
|||
|
"# Создание экземпляра ADASYN\n",
|
|||
|
"ada = ADASYN()\n",
|
|||
|
"\n",
|
|||
|
"# Преобразование данных с помощью пайплайна\n",
|
|||
|
"X = preprocessor.fit_transform(df_train.drop(columns=['stroke']))\n",
|
|||
|
"y = df_train['stroke']\n",
|
|||
|
"\n",
|
|||
|
"# Применение ADASYN\n",
|
|||
|
"X_resampled, y_resampled = ada.fit_resample(X, y)\n",
|
|||
|
"\n",
|
|||
|
"# Создание нового DataFrame\n",
|
|||
|
"df_train_adasyn = pd.DataFrame(X_resampled)\n",
|
|||
|
"# Восстанавливаем названия столбцов для DataFrame\n",
|
|||
|
"ohe_columns = preprocessor.named_transformers_['cat'].get_feature_names_out(categorical_features)\n",
|
|||
|
"new_column_names = list(ohe_columns) + numeric_features\n",
|
|||
|
"df_train_adasyn.columns = new_column_names\n",
|
|||
|
"\n",
|
|||
|
"# Добавление целевой переменной\n",
|
|||
|
"df_train_adasyn['stroke'] = y_resampled\n",
|
|||
|
"\n",
|
|||
|
"# Вывод информации о новой выборке\n",
|
|||
|
"print(\"Обучающая выборка после oversampling: \", df_train_adasyn.shape)\n",
|
|||
|
"print(df_train_adasyn['stroke'].value_counts())\n",
|
|||
|
"\n",
|
|||
|
"# Визуализация\n",
|
|||
|
"counts = df_train_adasyn['stroke'].value_counts()\n",
|
|||
|
"plt.figure(figsize=(6, 6))\n",
|
|||
|
"plt.pie(counts, labels=counts.index, autopct='%1.1f%%', startangle=90)\n",
|
|||
|
"plt.title('Распределение классов Stroke в тренировочной выборке после ADASYN')\n",
|
|||
|
"plt.show()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"2. Балансировка данных андерсемплингом. Этот метод помогает сбалансировать выборку, уменьшая количество экземпляров класса большинства, чтобы привести его в соответствие с классом меньшинства."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 18,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Обучающая выборка после undersampling: (298, 12)\n",
|
|||
|
"stroke\n",
|
|||
|
"0 149\n",
|
|||
|
"1 149\n",
|
|||
|
"Name: count, dtype: int64\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 200x200 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"from imblearn.under_sampling import RandomUnderSampler\n",
|
|||
|
"\n",
|
|||
|
"rus = RandomUnderSampler()# Создание экземпляра RandomUnderSampler\n",
|
|||
|
"\n",
|
|||
|
"# Применение RandomUnderSampler\n",
|
|||
|
"X_resampled, y_resampled = rus.fit_resample(df_train.drop(columns=['stroke']), df_train['stroke'])\n",
|
|||
|
"\n",
|
|||
|
"# Создание нового DataFrame\n",
|
|||
|
"df_train_undersampled = pd.DataFrame(X_resampled)\n",
|
|||
|
"df_train_undersampled['stroke'] = y_resampled # Добавление целевой переменной\n",
|
|||
|
"\n",
|
|||
|
"# Вывод информации о новой выборке\n",
|
|||
|
"print(\"Обучающая выборка после undersampling: \", df_train_undersampled.shape)\n",
|
|||
|
"print(df_train_undersampled['stroke'].value_counts())\n",
|
|||
|
"\n",
|
|||
|
"# Визуализация распределения классов\n",
|
|||
|
"counts = df_train_undersampled['stroke'].value_counts()\n",
|
|||
|
"plt.figure(figsize=(2, 2))\n",
|
|||
|
"plt.pie(counts, labels=counts.index, autopct='%1.1f%%', startangle=90)\n",
|
|||
|
"plt.title('Распределение классов stroke в тренировочной выборке после Undersampling')\n",
|
|||
|
"plt.show()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"### 3. Датасет: Набор данных для анализа и прогнозирования сердечного приступа\n",
|
|||
|
"https://www.kaggle.com/datasets/kamilpytlak/personal-key-indicators-of-heart-disease\n",
|
|||
|
"##### О наборе данных: \n",
|
|||
|
"По данным CDC, болезни сердца являются основной причиной смерти представителей большинства рас в США (афроамериканцев, американских индейцев и коренных жителей Аляски, а также белых). Около половины всех американцев (47%) имеют по крайней мере 1 из 3 основных факторов риска сердечно-сосудистых заболеваний: высокое кровяное давление, высокий уровень холестерина и курение. Другие ключевые показатели включают сахарный диабет, ожирение (высокий ИМТ), недостаточную физическую активность или чрезмерное употребление алкоголя. Выявление и профилактика факторов, оказывающих наибольшее влияние на сердечно-сосудистые заболевания, очень важны в здравоохранении. В свою очередь, достижения в области вычислительной техники позволяют применять методы машинного обучения для выявления \"закономерностей\" в данных, которые позволяют предсказать состояние пациента.\n",
|
|||
|
"\n",
|
|||
|
"##### Таким образом:\n",
|
|||
|
"* Объект наблюдения - представители большинства рас в США\n",
|
|||
|
"* Атрибуты: HeartDisease, BMI, Smoking, AlcoholDrinking, Stroke, PhysicalHealth(как много дней за месяц вы чувствовали себя плохо), MentalHealth(как много дней за месяц вы чувствовали себя ментально плохо), DiffWalking, Sex, AgeCategory, Race, Diabetic, PhysicalActivity, GenHealth, SleepTime, Asthma, KidneyDisease, SkinCancer.\n",
|
|||
|
"* Проблемная область: прогнозирование сердечного приступа у человека."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 20,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Количество колонок: 18\n",
|
|||
|
"Колонки: HeartDisease, BMI, Smoking, AlcoholDrinking, Stroke, PhysicalHealth, MentalHealth, DiffWalking, Sex, AgeCategory, Race, Diabetic, PhysicalActivity, GenHealth, SleepTime, Asthma, KidneyDisease, SkinCancer\n",
|
|||
|
"\n",
|
|||
|
"<class 'pandas.core.frame.DataFrame'>\n",
|
|||
|
"RangeIndex: 319795 entries, 0 to 319794\n",
|
|||
|
"Data columns (total 18 columns):\n",
|
|||
|
" # Column Non-Null Count Dtype \n",
|
|||
|
"--- ------ -------------- ----- \n",
|
|||
|
" 0 HeartDisease 319795 non-null object \n",
|
|||
|
" 1 BMI 319795 non-null float64\n",
|
|||
|
" 2 Smoking 319795 non-null object \n",
|
|||
|
" 3 AlcoholDrinking 319795 non-null object \n",
|
|||
|
" 4 Stroke 319795 non-null object \n",
|
|||
|
" 5 PhysicalHealth 319795 non-null float64\n",
|
|||
|
" 6 MentalHealth 319795 non-null float64\n",
|
|||
|
" 7 DiffWalking 319795 non-null object \n",
|
|||
|
" 8 Sex 319795 non-null object \n",
|
|||
|
" 9 AgeCategory 319795 non-null object \n",
|
|||
|
" 10 Race 319795 non-null object \n",
|
|||
|
" 11 Diabetic 319795 non-null object \n",
|
|||
|
" 12 PhysicalActivity 319795 non-null object \n",
|
|||
|
" 13 GenHealth 319795 non-null object \n",
|
|||
|
" 14 SleepTime 319795 non-null float64\n",
|
|||
|
" 15 Asthma 319795 non-null object \n",
|
|||
|
" 16 KidneyDisease 319795 non-null object \n",
|
|||
|
" 17 SkinCancer 319795 non-null object \n",
|
|||
|
"dtypes: float64(4), object(14)\n",
|
|||
|
"memory usage: 43.9+ MB\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"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>HeartDisease</th>\n",
|
|||
|
" <th>BMI</th>\n",
|
|||
|
" <th>Smoking</th>\n",
|
|||
|
" <th>AlcoholDrinking</th>\n",
|
|||
|
" <th>Stroke</th>\n",
|
|||
|
" <th>PhysicalHealth</th>\n",
|
|||
|
" <th>MentalHealth</th>\n",
|
|||
|
" <th>DiffWalking</th>\n",
|
|||
|
" <th>Sex</th>\n",
|
|||
|
" <th>AgeCategory</th>\n",
|
|||
|
" <th>Race</th>\n",
|
|||
|
" <th>Diabetic</th>\n",
|
|||
|
" <th>PhysicalActivity</th>\n",
|
|||
|
" <th>GenHealth</th>\n",
|
|||
|
" <th>SleepTime</th>\n",
|
|||
|
" <th>Asthma</th>\n",
|
|||
|
" <th>KidneyDisease</th>\n",
|
|||
|
" <th>SkinCancer</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>0</th>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>16.60</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>3.0</td>\n",
|
|||
|
" <td>30.0</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>Female</td>\n",
|
|||
|
" <td>55-59</td>\n",
|
|||
|
" <td>White</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Very good</td>\n",
|
|||
|
" <td>5.0</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>1</th>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>20.34</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>Female</td>\n",
|
|||
|
" <td>80 or older</td>\n",
|
|||
|
" <td>White</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Very good</td>\n",
|
|||
|
" <td>7.0</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2</th>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>26.58</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>20.0</td>\n",
|
|||
|
" <td>30.0</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>Male</td>\n",
|
|||
|
" <td>65-69</td>\n",
|
|||
|
" <td>White</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Fair</td>\n",
|
|||
|
" <td>8.0</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>3</th>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>24.21</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>Female</td>\n",
|
|||
|
" <td>75-79</td>\n",
|
|||
|
" <td>White</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>Good</td>\n",
|
|||
|
" <td>6.0</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>4</th>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>23.71</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>28.0</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Female</td>\n",
|
|||
|
" <td>40-44</td>\n",
|
|||
|
" <td>White</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>Yes</td>\n",
|
|||
|
" <td>Very good</td>\n",
|
|||
|
" <td>8.0</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" <td>No</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" HeartDisease BMI Smoking AlcoholDrinking Stroke PhysicalHealth \\\n",
|
|||
|
"0 No 16.60 Yes No No 3.0 \n",
|
|||
|
"1 No 20.34 No No Yes 0.0 \n",
|
|||
|
"2 No 26.58 Yes No No 20.0 \n",
|
|||
|
"3 No 24.21 No No No 0.0 \n",
|
|||
|
"4 No 23.71 No No No 28.0 \n",
|
|||
|
"\n",
|
|||
|
" MentalHealth DiffWalking Sex AgeCategory Race Diabetic \\\n",
|
|||
|
"0 30.0 No Female 55-59 White Yes \n",
|
|||
|
"1 0.0 No Female 80 or older White No \n",
|
|||
|
"2 30.0 No Male 65-69 White Yes \n",
|
|||
|
"3 0.0 No Female 75-79 White No \n",
|
|||
|
"4 0.0 Yes Female 40-44 White No \n",
|
|||
|
"\n",
|
|||
|
" PhysicalActivity GenHealth SleepTime Asthma KidneyDisease SkinCancer \n",
|
|||
|
"0 Yes Very good 5.0 Yes No Yes \n",
|
|||
|
"1 Yes Very good 7.0 No No No \n",
|
|||
|
"2 Yes Fair 8.0 Yes No No \n",
|
|||
|
"3 No Good 6.0 No No Yes \n",
|
|||
|
"4 Yes Very good 8.0 No No No "
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 20,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import pandas as pd\n",
|
|||
|
"df = pd.read_csv(\".//static//csv//heart.csv\", sep=\",\")\n",
|
|||
|
"print('Количество колонок: ' + str(df.columns.size)) \n",
|
|||
|
"print('Колонки: ' + ', '.join(df.columns)+'\\n')\n",
|
|||
|
"\n",
|
|||
|
"df.info()\n",
|
|||
|
"df.head()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Получение сведений о пропущенных данных\n",
|
|||
|
"Типы пропущенных данных:\n",
|
|||
|
"\n",
|
|||
|
"- None - представление пустых данных в Python\n",
|
|||
|
"- NaN - представление пустых данных в Pandas\n",
|
|||
|
"- '' - пустая строка"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 3,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"HeartDisease 0\n",
|
|||
|
"BMI 0\n",
|
|||
|
"Smoking 0\n",
|
|||
|
"AlcoholDrinking 0\n",
|
|||
|
"Stroke 0\n",
|
|||
|
"PhysicalHealth 0\n",
|
|||
|
"MentalHealth 0\n",
|
|||
|
"DiffWalking 0\n",
|
|||
|
"Sex 0\n",
|
|||
|
"AgeCategory 0\n",
|
|||
|
"Race 0\n",
|
|||
|
"Diabetic 0\n",
|
|||
|
"PhysicalActivity 0\n",
|
|||
|
"GenHealth 0\n",
|
|||
|
"SleepTime 0\n",
|
|||
|
"Asthma 0\n",
|
|||
|
"KidneyDisease 0\n",
|
|||
|
"SkinCancer 0\n",
|
|||
|
"dtype: int64\n",
|
|||
|
"\n",
|
|||
|
"HeartDisease False\n",
|
|||
|
"BMI False\n",
|
|||
|
"Smoking False\n",
|
|||
|
"AlcoholDrinking False\n",
|
|||
|
"Stroke False\n",
|
|||
|
"PhysicalHealth False\n",
|
|||
|
"MentalHealth False\n",
|
|||
|
"DiffWalking False\n",
|
|||
|
"Sex False\n",
|
|||
|
"AgeCategory False\n",
|
|||
|
"Race False\n",
|
|||
|
"Diabetic False\n",
|
|||
|
"PhysicalActivity False\n",
|
|||
|
"GenHealth False\n",
|
|||
|
"SleepTime False\n",
|
|||
|
"Asthma False\n",
|
|||
|
"KidneyDisease False\n",
|
|||
|
"SkinCancer False\n",
|
|||
|
"dtype: bool\n",
|
|||
|
"\n",
|
|||
|
"HeartDisease процент пустых значений: %0.00\n",
|
|||
|
"BMI процент пустых значений: %0.00\n",
|
|||
|
"Smoking процент пустых значений: %0.00\n",
|
|||
|
"AlcoholDrinking процент пустых значений: %0.00\n",
|
|||
|
"Stroke процент пустых значений: %0.00\n",
|
|||
|
"PhysicalHealth процент пустых значений: %0.00\n",
|
|||
|
"MentalHealth процент пустых значений: %0.00\n",
|
|||
|
"DiffWalking процент пустых значений: %0.00\n",
|
|||
|
"Sex процент пустых значений: %0.00\n",
|
|||
|
"AgeCategory процент пустых значений: %0.00\n",
|
|||
|
"Race процент пустых значений: %0.00\n",
|
|||
|
"Diabetic процент пустых значений: %0.00\n",
|
|||
|
"PhysicalActivity процент пустых значений: %0.00\n",
|
|||
|
"GenHealth процент пустых значений: %0.00\n",
|
|||
|
"SleepTime процент пустых значений: %0.00\n",
|
|||
|
"Asthma процент пустых значений: %0.00\n",
|
|||
|
"KidneyDisease процент пустых значений: %0.00\n",
|
|||
|
"SkinCancer процент пустых значений: %0.00\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"# Количество пустых значений признаков\n",
|
|||
|
"print(df.isnull().sum())\n",
|
|||
|
"print()\n",
|
|||
|
"\n",
|
|||
|
"# Есть ли пустые значения признаков\n",
|
|||
|
"print(df.isnull().any())\n",
|
|||
|
"print()\n",
|
|||
|
"\n",
|
|||
|
"# Процент пустых значений признаков\n",
|
|||
|
"for i in df.columns:\n",
|
|||
|
" null_rate = df[i].isnull().sum() / len(df) * 100\n",
|
|||
|
" print(f\"{i} процент пустых значений: %{null_rate:.2f}\")"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"##### Пропущенные данные отсутствуют.\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"##### Проверим выбросы и усредним их:"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 22,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Колонка BMI:\n",
|
|||
|
" Есть выбросы: Да\n",
|
|||
|
" Количество выбросов: 10396\n",
|
|||
|
" Минимальное значение: 12.02\n",
|
|||
|
" Максимальное значение: 94.85\n",
|
|||
|
" 1-й квартиль (Q1): 24.03\n",
|
|||
|
" 3-й квартиль (Q3): 31.42\n",
|
|||
|
"\n",
|
|||
|
"Колонка PhysicalHealth:\n",
|
|||
|
" Есть выбросы: Да\n",
|
|||
|
" Количество выбросов: 47146\n",
|
|||
|
" Минимальное значение: 0.0\n",
|
|||
|
" Максимальное значение: 30.0\n",
|
|||
|
" 1-й квартиль (Q1): 0.0\n",
|
|||
|
" 3-й квартиль (Q3): 2.0\n",
|
|||
|
"\n",
|
|||
|
"Колонка MentalHealth:\n",
|
|||
|
" Есть выбросы: Да\n",
|
|||
|
" Количество выбросов: 51576\n",
|
|||
|
" Минимальное значение: 0.0\n",
|
|||
|
" Максимальное значение: 30.0\n",
|
|||
|
" 1-й квартиль (Q1): 0.0\n",
|
|||
|
" 3-й квартиль (Q3): 3.0\n",
|
|||
|
"\n",
|
|||
|
"Колонка SleepTime:\n",
|
|||
|
" Есть выбросы: Да\n",
|
|||
|
" Количество выбросов: 4543\n",
|
|||
|
" Минимальное значение: 1.0\n",
|
|||
|
" Максимальное значение: 24.0\n",
|
|||
|
" 1-й квартиль (Q1): 6.0\n",
|
|||
|
" 3-й квартиль (Q3): 8.0\n",
|
|||
|
"\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"numeric_columns = ['BMI', 'PhysicalHealth', 'MentalHealth', 'AgeCategory', 'SleepTime']\n",
|
|||
|
"for column in numeric_columns:\n",
|
|||
|
" if pd.api.types.is_numeric_dtype(df[column]): # Проверяем, является ли колонка числовой\n",
|
|||
|
" q1 = df[column].quantile(0.25) # Находим 1-й квартиль (Q1)\n",
|
|||
|
" q3 = df[column].quantile(0.75) # Находим 3-й квартиль (Q3)\n",
|
|||
|
" iqr = q3 - q1 # Вычисляем межквартильный размах (IQR)\n",
|
|||
|
"\n",
|
|||
|
" # Определяем границы для выбросов\n",
|
|||
|
" lower_bound = q1 - 1.5 * iqr # Нижняя граница\n",
|
|||
|
" upper_bound = q3 + 1.5 * iqr # Верхняя граница\n",
|
|||
|
"\n",
|
|||
|
" # Подсчитываем количество выбросов\n",
|
|||
|
" outliers = df[(df[column] < lower_bound) | (df[column] > upper_bound)]\n",
|
|||
|
" outlier_count = outliers.shape[0]\n",
|
|||
|
"\n",
|
|||
|
" print(f\"Колонка {column}:\")\n",
|
|||
|
" print(f\" Есть выбросы: {'Да' if outlier_count > 0 else 'Нет'}\")\n",
|
|||
|
" print(f\" Количество выбросов: {outlier_count}\")\n",
|
|||
|
" print(f\" Минимальное значение: {df[column].min()}\")\n",
|
|||
|
" print(f\" Максимальное значение: {df[column].max()}\")\n",
|
|||
|
" print(f\" 1-й квартиль (Q1): {q1}\")\n",
|
|||
|
" print(f\" 3-й квартиль (Q3): {q3}\\n\")\n",
|
|||
|
"\n",
|
|||
|
" # Устраняем выбросы: заменяем значения ниже нижней границы на саму нижнюю границу, а выше верхней — на верхнюю\n",
|
|||
|
" df[column] = df[column].apply(lambda x: lower_bound if x < lower_bound else upper_bound if x > upper_bound else x)\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Постараемся выявить зависимости HeartDisease от остальных колонок:"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Разобьем наш набор на выборки относительно параметра HeartDisease:"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 23,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAq4AAAIjCAYAAADC0ZkAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABGB0lEQVR4nO3de1iUdf7/8dcgw4DAgCdEVhTTPKRSHmol85Co5KksWkvNtKx0U0utNc1M1C1t23I1zS0rtJTc7GCWKZ41TSstT6VmpNHBEx5AUBCZ+/eHP+frOICjDIy3Ph/XNVd7f+733Pd7Dm0v7vnMZyyGYRgCAAAArnB+vm4AAAAA8ATBFQAAAKZAcAUAAIApEFwBAABgCgRXAAAAmALBFQAAAKZAcAUAAIApEFwBAABgCgRXAAAAmALBFQBwWZKSkmSxWHzdBoBrCMEV8JH//ve/SkhIUNWqVWW1WhUZGak2bdro3XfflcPh8HV7uEz9+vVTSEhIkfstFosGDx5chh25evHFF7VgwQK38VmzZslisThvgYGBioqKUkJCgqZOnaoTJ06UfbPXkAuff4vFooiICN1+++1avHixW/25mkceeaTQ440ePdpZk5GR4Ry/2PsTuNIRXAEfmT17toKDgzVmzBi9/fbbevbZZ/WXv/xF/fr1U+/evX3dHq5SRQXXc8aPH6/33ntPM2bM0JAhQyRJQ4cOVePGjbVt2zaX2ueee06nTp0qzXavOeee/3fffVcjRozQ4cOH1blzZ33++edutYGBgfroo490+vRpt33vv/++AgMDy6JloEz5+7oB4Fq1du1aWa1Wl7EnnnhClSpV0rRp0zRx4kTFxMT4pjlcVQzDUG5uroKCgi5a26lTJzVv3ty5PWrUKK1cuVJdu3bVnXfeqZ07dzqP4+/vL39//jPiTRc+//3791fVqlX1/vvvq2vXri61d9xxhxYuXKjFixfrrrvuco5/9dVX2rt3rxITE/XRRx+VWe9AWeCKK+AjF4bWc86FVT+///vX89NPP1WXLl0UFRUlm82m2rVra8KECSooKHC5b9u2bV0+aqxcubK6dOmiHTt2uNRZLBYlJSW5jL388suyWCxq27aty3hubq6SkpJUt25dBQYGqlq1arrnnnuUlpYmSdq3b58sFotmzZrlcr9BgwbJYrGoX79+zrFzH4cGBATo8OHDLvUbNmxw9r1p0yaXffPnz1ezZs0UFBSkypUr64EHHtAff/zh9tzt2rVLPXr0UJUqVRQUFKR69epp9OjRkv5vPmZxt9WrVzufx0aNGrkdv7Tk5eVp7NixqlOnjmw2m6KjozVixAjl5eW51CUnJ6tdu3aKiIiQzWbTDTfcoBkzZrgdLyYmRl27dlVqaqqaN2+uoKAgvfHGG7JYLMrJydHs2bOdj/n816co7dq105gxY/Trr79qzpw5zvHC5rguW7ZMt912m8LDwxUSEqJ69erp2WefLdXHu2nTJiUkJKhy5coKCgpSrVq19PDDD7vUOBwO/ec//1HDhg0VGBioqlWrasCAATp27NhFH78krVy5Uq1atVJwcLDCw8N11113aefOnW7PhSfvr0sRHh6uoKCgQv9A+Mtf/qLWrVsrJSXFZXzu3Llq3Lhxmb6HgbLCn8qAjx0/flxnzpzRiRMntHnzZv373//W/fffrxo1ajhrZs2apZCQEA0fPlwhISFauXKlnn/+eWVlZenll192OV79+vU1evRoGYahtLQ0vfrqq+rcubPS09OL7WHixIlu4wUFBeratatWrFih+++/X08++aROnDihZcuWaceOHapdu3ahx/v55581c+bMIs9Xrlw5zZkzR8OGDXOOJScnKzAwULm5uS61s2bN0kMPPaSbb75ZEydO1MGDBzVlyhStX79e33//vcLDwyVJ27ZtU6tWrWS1WvXYY48pJiZGaWlp+uyzz/TCCy/onnvuUZ06dZzHHTZsmBo0aKDHHnvMOdagQYMie75U588rLI7D4dCdd96pdevW6bHHHlODBg20fft2TZ48WT/99JPLx/ozZsxQw4YNdeedd8rf31+fffaZHn/8cTkcDg0aNMjluLt371bPnj01YMAAPfroo6pXr57ee+89PfLII7rlllucj7uo1/BCffr00bPPPqulS5fq0UcfLbTmhx9+UNeuXRUbG6vx48fLZrPp559/1vr160vt8R46dEgdO3ZUlSpVNHLkSIWHh2vfvn36+OOPXXobMGCA8730xBNPaO/evZo2bZq+//57rV+/vsg/JCVp+fLl6tSpk6677jolJSXp1KlTeu2119SyZUt99913iomJ8dr7KzMzUxkZGTIMQ4cOHdJrr72m7OxsPfDAA4XW9+rVS08++aSys7MVEhKiM2fOaP78+Ro+fLjbv0vAVcEA4FP16tUzJDlvDz74oJGfn+9Sc/LkSbf7DRgwwChfvryRm5vrHGvTpo3Rpk0bl7pnn33WkGQcOnTIOSbJGDt2rHN7xIgRRkREhNGsWTOX+7/zzjuGJOPVV191O7/D4TAMwzD27t1rSDKSk5Od+3r06GE0atTIiI6ONvr27escT05ONiQZPXv2NBo3buwcz8nJMex2u9GrVy9DkvHtt98ahmEYp0+fNiIiIoxGjRoZp06dctZ//vnnhiTj+eefd461bt3aCA0NNX799ddC+7xQzZo1XXo7X5s2bYyGDRsWuu9i+vbt6/J6FnYbNGiQs/69994z/Pz8jC+//NLlOP/9738NScb69eudY4W9DxISEozrrrvO7bFJMpYsWeJWHxwcXOjjPvfanHvuCxMWFmY0adLEuT127Fjj/P+MTJ482ZBkHD58uMhjePvxfvLJJxft+8svvzQkGXPnznUZX7JkSaHjF7rpppuMiIgI48iRI86xrVu3Gn5+fsaDDz5Y6H2Ke38V5tzzf+HNZrMZs2bNcqs/9z46evSoERAQYLz33nuGYRjGokWLDIvFYuzbt8/5+pz/evTt29cIDg72uC/gSsNUAcDHkpOTtWzZMs2dO1f9+/fX3LlzXa7SSHKZm3jixAllZGSoVatWOnnypHbt2uVSm5+fr4yMDB0+fFgbNmzQJ598otjYWFWuXLnQ8//xxx967bXXNGbMGLdvG3/00UeqXLmy80s65ytqGaTNmzdr/vz5mjhxost0h/P16dNHu3btck4J+OijjxQWFqb4+HiXuk2bNunQoUN6/PHHXb5o0qVLF9WvX1+LFi2SJB0+fFhr167Vww8/7HKlurg+L6agoEAZGRnKyMgo9MsvxQkMDNSyZcsKvV1o/vz5atCggerXr+88X0ZGhtq1aydJWrVqlbP2/PfBuStzbdq00S+//KLMzEyX49aqVUsJCQmX1PfFhISEFLu6wLmr359++mmRK2N4+/GeO+fnn3+u/Pz8Is8ZFhamDh06uJyzWbNmCgkJcTnnhfbv368tW7aoX79+qlixonM8NjZWHTp00BdffFHkfS/H9OnTne+VOXPm6Pbbb9cjjzzidgX5nAoVKuiOO+7Q+++/L0lKSUnRrbfeqpo1a3q1L+BKwVQBwMfi4uKc/7tXr1667rrrNHr0aPXv318tW7aUdPYj2Oeee04rV65UVlaWy/0vDCxfffWVqlSp4ty+/vrrtWDBgiID3NixYxUVFaUBAwboww8/dNmXlpamevXqXdIXcEaOHKlWrVqpa9euRS77VKVKFXXp0kXvvPOOmjdvrnfeeUd9+/Z1C7q//vqrJKlevXpux6hfv77WrVsnSfrll18kyatz+nbt2uV8Hv38/FSnTh2NHTtWvXr1uuh9y5Urp/bt23t0nj179mjnzp0ur9n5Dh065Pzf69ev19ixY7VhwwadPHnSpS4zM1NhYWHO7Vq1anl0/kuRnZ2tiIiIIvffd999euutt/TII49o5MiRio+P1z333KN7773X+dp6+/G2adNGiYmJGjdunCZPnqy2bduqe/fu6tWrl2w2m/OcmZmZRfZ+/jkvVNx7sEGDBkpNTVVOTo6Cg4OLPMaluOWWW1y+nNWzZ081adJEgwcPVteuXRUQEOB2n169eqlPnz5KT0/XggUL9K9
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtEAAAIrCAYAAAApwMV4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABYkklEQVR4nO3deVhUZf/H8c+AAYqCKwJJiEsqueUSoWlqJJqmqC0u5ZLlkjs95ZprpdmjqWnaYi5lj2ZPkWmhhJqlSLmgaerPBXdBU3EEFRXm94cX53EClUMgg7xf1zVXzH2+c853TjR9PN7nHovNZrMJAAAAQLY55XcDAAAAQEFDiAYAAABMIkQDAAAAJhGiAQAAAJMI0QAAAIBJhGgAAADAJEI0AAAAYBIhGgAAADCJEA0AAACYRIgGABQ4ycnJmjFjhvE8KSlJc+bMyb+G7kHr16+XxWLR119/fdu6hQsXymKx6PDhw3enMcBBEKKBQiLjf3RbtmzJtO2TTz6RxWJRWFiY0tLS8qE7wJyiRYtqzJgxWrJkiY4dO6bx48fr+++/z++2/pHk5GSNGzdONWvWlLu7u8qUKaO6detqyJAhOnnyZH63B+BviuR3AwDy17fffqv+/furSZMmWrp0qZydnfO7JeCOnJ2dNWHCBHXv3l3p6eny8PDQqlWr8rutHLt27ZqaNm2qvXv3qkePHho0aJCSk5O1e/duffnll+rQoYN8fX3zu80svfjii+rcubNcXV3zuxXgriJEA4XY+vXr1aVLFwUGBur777+Xm5tbfrcEZNtrr72m559/XseOHVONGjVUsmTJ/G4pxyIiIrR9+3YtWbJEXbt2tdt25coVXb16NZ86uzNnZ2f+8I1CiekcQCEVFxen9u3by8fHR6tXr5anp2emmuXLl6t+/foqWrSoypYtqxdeeEEnTpzIcn8WiyXLx83zJC0Wi8aPH2/3uvfee08Wi0XNmjUzxsaPHy+LxZLpGBUrVlTPnj3txpKSkjR06FD5+fnJ1dVVVapU0bvvvqv09HS7uvT0dM2cOVO1atWSm5ubypUrp1atWhnTW27Vf8Yjo7+MeaIZD1dXVz344IOaPHmybDab3TG3b9+u1q1by8PDQ8WLF9cTTzyhzZs3Z3n+brZv3z61aNFC3t7ecnV1lZ+fn/r166dz584ZNbebr1q8eHG783Tu3Dn961//Uq1atVS8eHF5eHiodevW2rFjh93rcvu8Hz58WBaLRf/+978z7bNmzZp2/84z3s/69evt6tq0aZPp9+bmPitUqKDg4GAVKVJE3t7eWe7jVpo1a5blv+u//45K/5sOdavfiwzbt29Xq1atVK5cObu6tm3b3raXgwcPSpIaN26caZubm5s8PDyM5z179lTx4sV19OhRtW3bVsWLF9f9999vzAn/448/1KJFC7m7u8vf319ffvllpn0eOnRIzz77rEqXLq1ixYrp0UcfzdaV/NTUVLVt21aenp7atGmT3bm5+b/1ihUrqm3btvr111/1yCOPyM3NTZUqVdLixYsz7XPnzp16/PHHVbRoUVWoUEFvvfWWFixYwDxrODyuRAOF0MGDB9WqVSu5urpq9erV8vHxyVSzcOFC9erVSw0bNtTkyZOVmJiomTNnauPGjdq+fXuWV/06dOigjh07SpJ++eUXffzxx7ftIykpSZMnT87x+7h06ZIef/xxnThxQn379tUDDzygTZs2aeTIkTp16pTdjWe9e/fWwoUL1bp1a7388su6fv26fvnlF23evFkNGjTQ559/btRm9P7++++rbNmykqTy5cvbHXvUqFGqUaOGLl++rGXLlmnUqFHy8vJS7969JUm7d+9WkyZN5OHhoTfeeEP33XefPvroIzVr1kw///yzgoKCbvm+UlJSVKFCBT399NPy8PDQrl27NGfOHJ04cSJH834PHTqkiIgIPfvsswoICFBiYqI++ugjPf744/rzzz9NTxMwc97/iQ0bNuiHH37IVu20adOUmJho+hgVKlQwfgeTk5PVv3//29bf/Dvx9ttv2227cOGCWrduLZvNpvDwcPn5+UmShg0bdsc+/P39JUmLFy/WmDFjsvzDzM3S0tLUunVrNW3aVFOnTtWSJUs0cOBAubu7a/To0erWrZs6duyoefPmqXv37goODlZAQIAkKTExUY0aNdKlS5c0ePBglSlTRosWLVK7du309ddfq0OHDlke8/Lly2rfvr22bNmin376SQ0bNrxtjwcOHNAzzzyj3r17q0ePHvrss8/Us2dP1a9fXw899JAk6cSJE2revLksFotGjhwpd3d3ffrpp0wNQcFgA1AoLFiwwCbJtnLlSlvlypVtkmwtW7bMsvbq1as2Ly8vW82aNW2XL182xleuXGmTZBs7dqxd/bVr12ySbBMmTMh0vPj4eGNMkm3cuHHG8zfeeMPm5eVlq1+/vu3xxx83xidMmGCTZEtPT7c7jr+/v61Hjx7G80mTJtnc3d1t//d//2dXN2LECJuzs7Pt6NGjNpvNZlu7dq1Nkm3w4MGZ3uvfj3Gr3jOsW7fOJsm2bt06Y+zKlSs2Jycn26uvvmqMhYWF2VxcXGwHDx40xk6ePGkrUaKErWnTppn2eyevvvqqrXjx4pn6WL58eaZad3d3u/N05coVW1paml1NfHy8zdXV1TZx4kRjLLfPe3x8vE2S7b333svU40MPPWT37zyr8xoUFGRr3bp1pt+bcePG2W7+39fp06dtJUqUMGpv3sftNGrUyFazZk3j+ZkzZzIdK8Mnn3xik2Q7cuSIMfb444/bvYfVq1fbJNn+85//2L3W39/f1qZNm9v2cunSJVu1atVskmz+/v62nj172ubPn29LTEzMVNujRw+bJNs777xjjJ0/f95WtGhRm8VisS1dutQY37t3b6b3NHToUJsk2y+//GKMXbx40RYQEGCrWLGi8bty8+/YxYsXbY8//ritbNmytu3bt9v1k9V/L/7+/jZJtg0bNhhjp0+ftrm6utpee+01Y2zQoEE2i8Vit8+zZ8/aSpcufcv/BgFHwXQOoJDp2bOnjh07pq5du2rNmjVavnx5ppotW7bo9OnTevXVV+3mSbdp00bVq1fP9Ne+GfM1zVw9OnHihD744AO9+eabKl68uN02Ly8vSdLx48dvu4/ly5erSZMmKlWqlP766y/jERISorS0NG3YsEGS9N///lcWi0Xjxo3LtI87XfG7lQsXLuivv/7S0aNHNXXqVKWnp6tFixaSblwlXLNmjcLCwlSpUiXjNT4+Puratat+/fVXWa3WbB0jMTFR0dHRWrVqlZo2bZqp5uLFi3bv/a+//spU4+rqKicnJ6O3s2fPqnjx4qpWrZq2bdtm1OX2ec9w6dKlTD3eaRWYb775Rr///rumTJly2zpJmjRpkjw9PTV48OA71t7sypUr2b4PIDu/4xcvXpQklSlTxlQf0o3VRmJjY/X6669LuvE3Qb1795aPj48GDRqk1NTUTK95+eWXjZ9LliypatWqyd3dXc8995wxXq1aNZUsWVKHDh0yxn744Qc98sgjeuyxx4yx4sWLq0+fPjp8+LD+/PNPu+NcuHBBLVu21N69e7V+/XrVrVs3W+8pMDBQTZo0MZ6XK1dO1apVs+slMjJSwcHBdvssXbq0unXrlq1jAPmJ6RxAIXPu3DktXbpUHTp00J9//qkhQ4aoZcuWdnOijxw5IunG/4D/rnr16vr111/txpKSkiQpUxi+nXHjxsnX11d9+/bNNK83ODjY+Ovdt956y9jv3+c579+/Xzt37lS5cuWyPMbp06cl3Zi+4uvrq9KlS2e7vzsJCwszfnZyctKYMWPUqVMnSdKZM2d06dKlLM9fjRo1lJ6ermPHjhl/pX0roaGhio2NlSS1atVKy5Yty1Tz0ksv3bHXjPngH374oeLj4+0C7M2BL7fPe4Zx48Zl+QeYv0+RyZCWlqZRo0apW7duql279m3fW3x8vD766CPNnTvX9I2xf/31l6pWrZqt2uz8jjdo0ED33Xefxo8fr7JlyxrTOf5+/m7F09NTU6dO1dSpU3XkyBFFR0fr3//+t2bPni1
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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qFSpktGmTZs8x72RZ555xvDw8MjTx5IlS/LUVqxY0e48Xbp0ycjOzrarSUhIMFxdXY0pU6bYxor6vCckJBiSjLfeeitPj3feeafdzzy/8xoaGmp07tw5z6+b6Oho4+r/xZ0+fdqoVKmSrfbqY1zPPffcYzRs2ND2+syZM3k+K9eHH35oSDJ+//1321jbtm3tvsPq1asNScZ//vMfu/cGBAQYkZGR1+3lwoULRr169QxJRkBAgDFgwADj448/NpKTk/PUDhs2zMjvf/G559tqtRqnT5+229e0aVPDx8fH+OOPP2xjv/zyi+Hk5GT069fPNpZ7bs+cOWMcOHDA8PPzM1q0aGGcO3fOVlPQnz9QmjGdA0AeAwYM0LFjx/Too49qzZo1WrJkSZ6an3/+WadPn9YzzzxjN086MjJS9evXz3MDV+58TVdX1wL3ceLECb333nt6+eWX5eHhYbfPx8dHknT8+PHrHmPJkiVq3bq1KleurLNnz9q28PBwZWdna8OGDZKk//73v7JYLIqOjs5zjGtd8buR1NRUnT17VomJiZo2bZpycnLUvn17SVJ2drbWrFmj7t27q06dOrb31KhRQ48++qh++uknpaWlFegzkpOTFRcXp5UrV6pNmzZ5as6fP2/33fNbmszV1VVOTk623v744w95eHioXr162rFjh62uqM97rgsXLuTp8UarwHz55Zfatm2b3njjjevWSdIrr7wiT09PjRw58oa1V7t06VKB7wMoyK/x8+fPS5KqVq1qqg/pr9VGtmzZoueff17SX/8SNGjQINWoUUMjRoxQZmZmgY/Vq1cveXt7216fOnVKu3bt0oABA1SlShXbeOPGjdWhQ4d8r/bv3btXbdu2Ve3atfX999+rcuXKtn1mf/5AacR0DgB5nDt3Tp9//rl69Oih/fv369lnn1XHjh3t5kT//vvvkqR69erleX/9+vX1008/2Y2lpKRIUp4wfD3R0dHy8/PT008/nWdeb1hYmCwWi8aPH69XX33Vdty/z7c8fPiwdu/ebRcYrnb69GlJf/2TtJ+fn12A+Ke6d+9u+28nJydNmDBBvXr1kiSdOXNGFy5cyPf8NWjQQDk5OTp27JjuvPPO635GRESEtmzZIknq1KmTFi9enKfmiSeeuGGvufPB33//fSUkJNgF2KsDX1Gf91zR0dH5/gXm71NkcmVnZ+vFF19U37591bhx4+t+t4SEBP373//W3LlzTd8Ye/bsWd1+++0Fqi3Ir/HmzZurfPnymjRpkqpVq2abzlHQecKenp6aNm2apk2bpt9//11xcXF6++23NXv2bHl6eurVV18t0HECAwPtXl/v93ODBg20evVqZWRkqGLFirbxBx98UNWrV9fq1avzfGezP3+gNCJEA8jjrbfe0sMPPyxJ+uCDD9SyZUuNHz9e77//fqGPmZSUJEny9fUtUP2BAwcUExOjzz77TOXLl8+zv0mTJoqOjtbkyZO1cOHCax4nJydHHTp00AsvvJDv/jvuuKNA/RTG22+/rSZNmujy5cvatm2bXn31VZUrVy7fsFhY7733ns6ePav9+/dr6tSpGjJkiD777DO7mokTJ6p169Z2Yw8++KDd69dff10vv/yynnjiCb3yyiuqUqWKnJycNGrUKLuAV1znffDgwbZfc7meeuqpax7/448
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAqYAAAIjCAYAAADRBtn0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABIgUlEQVR4nO3dd3hUVf7H8c+kTQIhCRACRAKhSIelWRApKyXSFESRIsWyoiIWZF1QgQArYAEFUUT8CSiwCCiI0qsUEelFioogq9TQQighJPf3h09mGSZlMpkwJ+b9ep55ZM49c+935s7ET86ce2KzLMsSAAAA4GN+vi4AAAAAkAimAAAAMATBFAAAAEYgmAIAAMAIBFMAAAAYgWAKAAAAIxBMAQAAYASCKQAAAIxAMAUAAIARCKYAkIfi4+Nls9l8XUaBMnXqVNlsNm3ZsuWmHfPw4cOy2WyaOnVqnux/zZo1stlsWrNmTZ7s31PNmjVTs2bN3O5bs2bNvC0I+R7BFEb78MMPFRcXp5IlSyowMFClSpVS06ZN9emnnyotLc3X5cFDvXv3VmhoaKbbbTabnn322ZtYkbORI0dq/vz5Lu3pgSf9FhwcrOjoaMXFxWn8+PG6cOHCzS+2AMno9a9cubKeffZZnThxwtfl3XQmfo6OHj2q+Ph47dix46YeF38dAb4uAMjKtGnTVLp0aQ0ePFhhYWE6d+6cvv/+e/Xu3VuLFy/Wf/7zH1+XiL+gkSNH6sEHH1SHDh0y3D58+HCVL19eKSkpOn78uNasWaMXXnhBY8eO1YIFC1S7dm1H39dee00DBw68SZUXDOmv/5UrV7R+/XpNnDhRixYt0p49e1SoUCGf1FSuXDldvnxZgYGBPjm+KY4ePaphw4YpNjZWderU8XU5yIcIpjDa2rVrXX7QP/fccypevLgmTJigUaNGKTY21jfF4S/FsixduXJFISEh2fZt3bq1GjRo4Lg/aNAgrVq1Su3atdN9992nffv2OfYTEBCggAB+1HrT9a//E088oeLFi2vs2LH66quv1LVrV5/UlD6CCyB3+CofRsts9CE9jPr5/e8t/NVXX6lt27aKjo6W3W5XxYoVNWLECKWmpjo9tlmzZk5fB0ZGRqpt27bas2ePUz+bzab4+Hintrfeeks2m81lTtWVK1cUHx+vypUrKzg4WKVLl9YDDzyggwcPSsp8/lnfvn1ls9nUu3dvR1v615VBQUE6deqUU/+NGzc66r5x/tycOXNUv359hYSEKDIyUo888oj++OMPl9du//796ty5s0qUKKGQkBBVqVJFr776qqT/zYfM6pY+x+1mzxdLTk7W0KFDValSJdntdsXExOjll19WcnKyU78pU6bonnvuUVRUlOx2u6pXr66JEye67C82Nlbt2rXT0qVL1aBBA4WEhGjSpEmy2Wy6ePGipk2b5njO15+fzNxzzz0aPHiwfvvtN02fPt3RntEc0+XLl+vuu+9WRESEQkNDVaVKFb3yyit5+ny3bNmiuLg4RUZGKiQkROXLl9djjz3m1CctLU3vvvuuatSooeDgYJUsWVJ9+vTR2bNns33+krRq1So1btxYhQsXVkREhO6//37t27fP5bVw5/2VE/fcc48k6dChQ07tycnJ6t+/v0qUKKHChQurY8eOTp+pXr16KTIyUikpKS77bNWqlapUqeK4n905y+wzntXnTZJ+++03PfPMM6pSpYpCQkJUvHhxPfTQQzp8+HCOXwd3ePt9db01a9botttukyQ9+uijjnN642uyd+9e/f3vf1ehQoV0yy236M033/Tqc0T+xq/xyBfOnTuna9eu6cKFC9q6davefvttdenSRWXLlnX0mTp1qkJDQ9W/f3+FhoZq1apVGjJkiBITE/XWW2857a9q1ap69dVXZVmWDh48qLFjx6pNmzY6cuRIljWMGjXKpT01NVXt2rXTypUr1aVLFz3//PO6cOGCli9frj179qhixYoZ7u+XX37R5MmTMz2ev7+/pk+frhdffNHRNmXKFAUHB+vKlStOfadOnapHH31Ut912m0aNGqUTJ05o3Lhx2rBhg7Zv366IiAhJ0q5du9S4cWMFBgbqySefVGxsrA4ePKivv/5ar7/+uh544AFVqlTJsd8XX3xR1apV05NPPuloq1atWqY151RCQoJb/dLS0nTfffdp/fr1evLJJ1WtWjXt3r1b77zzjn766Sen+aATJ05UjRo1dN999ykgIEBff/21nnnmGaWlpalv375O+z1w4IC6du2qPn366B//+IeqVKmizz77TE888YRuv/12x/PO7BzeqEePHnrllVe0bNky/eMf/8iwz48//qh27dqpdu3aGj58uOx2u3755Rdt2LAhz57vyZMn1apVK5UoUUIDBw5URESEDh8+rC+//NKptj59+jjeS88995wOHTqkCRMmaPv27dqwYUOWX1OvWLFCrVu3VoUKFRQfH6/Lly/rvffeU6NGjbRt2zbFxsbm2fsr/RfA4sWLO7X369dPRYsW1dChQ3X48GG9++67evbZZ/X5559L+vN8ffrpp1q6dKnatWvneNzx48e1atUqDR06VJJ75ywj2X3eJGnz5s367rvv1KVLF5UpU0aHDx/WxIkT1axZM+3du9etqQm+/hylq1atmoYPH64hQ4boySefVOPGjSVJd911l6PP2bNnde+99+qBBx5Q586dNXfuXP3rX/9SrVq11Lp1a7eeB/7iLCAfqFKliiXJcevZs6eVkpLi1OfSpUsuj+vTp49VqFAh68qVK462pk2bWk2bNnXq98orr1iSrJMnTzraJFlDhw513H/55ZetqKgoq379+k6P/+STTyxJ1tixY12On5aWZlmWZR06dMiSZE2ZMsWxrXPnzlbNmjWtmJgYq1evXo72KVOmWJKsrl27WrVq1XK0X7x40QoLC7O6detmSbI2b95sWZZlXb161YqKirJq1qxpXb582dH/m2++sSRZQ4YMcbQ1adLEKlKkiPXbb79lWOeNypUr51Tb9Zo2bWrVqFEjw23Z6dWrl9P5zOjWt29fR//PPvvM8vPzs9atW+e0nw8//NCSZG3YsMHRltH7IC4uzqpQoYLLc5NkLVmyxKV/4cKFM3ze6ecm/bXPSHh4uFW3bl3H/aFDh1rX/6h95513LEnWqVOnMt2Ht5/vvHnzsq173bp1liRrxowZTu1LlizJsP1GderUsaKioqzTp0872nbu3Gn5+flZPXv2zPAxWb2/MpL++q9YscI6deqU9d///teaNWuWVbx4cSskJMT6/fffnfq1aNHC6b394osvWv7+/ta5c+csy7Ks1NRUq0yZMtbDDz/sdJyxY8daNpvN+vXXXy3Lcu+cZfQZd+fzltH527hxoyXJ+vTTTx1tq1evtiRZq1evdrSZ8Dm68efp5s2bXV6H6/ve+LySk5OtUqVKWZ06dXLpj4KJr/KRL0yZMkXLly/XjBkz9Pjjj2vGjBlOoyySnOYGXrhwQQkJCWrcuLEuXbqk/fv3O/VNSUlRQkKCTp06pY0bN2revHmqXbu2IiMjMzz+H3/8offee0+DBw92uQr2iy++UGRkpPr16+fyuMyWCdq6davmzJmjUaNGOU1HuF6PHj20f/9+x1f2X3zxhcLDw9W8eXOnflu2bNHJkyf1zDPPOM1xa9u2rapWraqFCxdKkk6dOqW1a9fqsccecxppzqrO7KSmpiohIUEJCQm6evVqjh4bHBys5cuXZ3i70Zw5c1StWjVVrVrVcbyEhATHV7irV6929L3+fXD+/HklJCSoadOm+vXXX3X+/Hmn/ZYvX15xcXE5qjs7oaGhWV6dnz56/dVXX2W6soS3n2/6Mb/55psMv7ZOP2Z4eLhatmzpdMz69esrNDTU6Zg3OnbsmHbs2KHevXurWLFijvbatWurZcuWWrRoUaaP9USLFi1UokQJxcTEqEuXLgoNDdW8efN0yy23OPV78sknnd7bjRs3Vmpqqn777TdJf04F6t69uxYsWOB0zmbMmKG77rpL5cuXl+TeObuRu5+3689fSkqKTp8+rUqVKikiIkLbtm3L9jgmfI5yIjQ
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAqYAAAIjCAYAAADRBtn0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABMg0lEQVR4nO3deVxU9f7H8feAMKAIrqgkikvumlvdzBSvG4laWmmpFS6VlWWlXn9YV0W9uVR6r2aZ2VXTNHMps9zN3axc0jKX1FCyTMUFxGUk5vz+6MFch2EZYHAO8Xo+HvOw8z3fOedz5jvSm3O+52gxDMMQAAAA4GU+3i4AAAAAkAimAAAAMAmCKQAAAEyBYAoAAABTIJgCAADAFAimAAAAMAWCKQAAAEyBYAoAAABTIJgCAADAFAimAOAFcXFxslgs3i4DJtS3b19FRER4uwwnJ06ckMVi0dy5c93u++abbxZ8YfjLIZiiUHr33XcVFRWlChUqyM/PTxUrVlRkZKTmzZsnu93u7fKQR3379lVQUFCW6y0Wi55//vlbWJGz8ePHa/ny5S7tc+fOlcVicbwCAgIUFhamqKgoTZs2TZcvX771xRYhN3/+27dvd1lvGIbCw8NlsVjUpUuXAq3l4MGDiouL04kTJzy63ey+++nHv3v3bo/uMyerVq1SXFzcLd0n/voIpiiUPvjgA5UoUUIjR47Uf//7X73yyiu67bbb1LdvX/Xp08fb5eEvKqtgmm7s2LGaP3++ZsyYoRdeeEGS9NJLL6lhw4b6/vvvnfr+85//1LVr1wqy3CInICBACxcudGnfsmWLTp06JavVWuA1HDx4UGPGjPF4MDWjVatWacyYMd4uA38xxbxdAJAXW7dulZ+fn1Pb4MGDVbZsWU2fPl0TJkww3aUwFE6GYej69esKDAzMsW+nTp3UvHlzx/KIESO0ceNGdenSRffff78OHTrk2E6xYsVUrBg/gj0pOjpaS5Ys0bRp05w+24ULF6pZs2ZKTEz0YnUA3MEZUxRKGUNpuvQw6uPzv6/2Z599ps6dOyssLExWq1U1atTQuHHjlJaW5vTeNm3aOF2OLVeunDp37qwDBw449bNYLC6Xr9544w1ZLBa1adPGqf369euKi4tTrVq1FBAQoEqVKunBBx/U8ePHJWU9b2vQoEGyWCzq27evoy39cp2/v7/OnTvn1H/nzp2OujNezluyZImaNWumwMBAlStXTo899ph+/fVXl8/u8OHD6tmzp8qXL6/AwEDVrl1br776qqT/zYfM7rV582bH59igQQOX7RcUm82m0aNHq2bNmrJarQoPD9fw4cNls9mc+s2ZM0dt27ZVaGiorFar6tWrpxkzZrhsLyIiQl26dNHatWvVvHlzBQYGaubMmbJYLLpy5Yo++OADxzHfPD5Zadu2rUaOHKmTJ0/qww8/dLRnNsd0/fr1uvfee1WqVCkFBQWpdu3aeuWVVwr0eHfv3q2oqCiVK1dOgYGBqlatmvr37+/Ux2636z//+Y/q16+vgIAAVahQQQMHDtTFixdzPH5J2rhxo1q1aqUSJUqoVKlSeuCBB3To0CGXz8Kd71d2evXqpfPnz2v9+vWOths3bmjp0qXq3bt3pu9x99jSvxfbt2/XXXfdpYCAAFWvXl3z5s1z9Jk7d6569OghSfr73//uUru7P4s85fDhw3r44YdVpkwZBQQEqHnz5lqxYoVTnwsXLmjYsGFq2LChgoKCFBwcrE6dOmn//v3Zbrtv3756++23JclpnDJ67733VKNGDVmtVt15553atWuX5w4Qf0n8uo5C7dKlS/rjjz90+fJl7dmzR2+++aYeffRRValSxdFn7ty5CgoK0pAhQxQUFKSNGzdq1KhRSk5O1htvvOG0vTp16ujVV1+VYRg6fvy4pkyZoujoaCUkJGRbw4QJE1za09LS1KVLF3355Zd69NFH9eKLL+ry5ctav369Dhw4oBo1amS6vWPHjmnWrFlZ7s/X11cffvihXn75ZUfbnDlzFBAQoOvXrzv1nTt3rvr166c777xTEyZM0JkzZzR16lTt2LFD3333nUqVKiVJ+v7779WqVSv5+fnp6aefVkREhI4fP67PP/9cr732mh588EHVrFnTsd2XX35ZdevW1dNPP+1oq1u3bpY155a7Z7bsdrvuv/9+bd++XU8//bTq1q2rH374Qf/+97/1008/OV12nzFjhurXr6/7779fxYoV0+eff67nnntOdrtdgwYNctrukSNH1KtXLw0cOFBPPfWUateurfnz5+vJJ5/UXXfd5TjurMYwo8cff1yvvPKK1q1bp6eeeirTPj/++KO6dOmiRo0aaezYsbJarTp27Jh27NhRYMd79uxZdezYUeXLl1dsbKxKlSqlEydO6JNPPnGqbeDAgY7v0uDBgxUfH6/p06fru+++044dO7L8RVGSNmzYoE6dOql69eqKi4vTtWvX9NZbb6lly5bau3evIiIiPPb9ioiIUIsWLfTRRx+pU6dOkqTVq1crKSlJjz76qKZNm+byntwc27Fjx/Twww9rwIABiomJ0ezZs9W3b181a9ZM9evXV+vWrTV48GBNmzZNr7zyiqPm9D9z87MoM9evX8/070ZKSopL248//qiWLVvqtttuU2xsrEqUKKHFixerW7duWrZsmbp37y5J+vnnn7V8+XL16NFD1apV05kzZzRz5kxFRkbq4MGDCgsLy7SWgQMH6rffftP69es1f/78TPssXLhQly9f1sCBA2WxWPT666/rwQcf1M8//5ztdwZFnAEUYrVr1zYkOV5PPPGEkZqa6tTn6tWrLu8bOHCgUbx4ceP69euOtsjISCMyMtKp3yuvvGJIMs6ePetok2SMHj3asTx8+HAjNDTUaNasmdP7Z8+ebUgypkyZ4rJ/u91uGIZhxMfHG5KMOXPmONb17NnTaNCggREeHm7ExMQ42ufMmWNIMnr16mU0bNjQ0X7lyhUjODjY6N27tyHJ2LVrl2EYhnHjxg0jNDTUaNCggXHt2jVH/y+++MKQZIwaNcrR1rp1a6NkyZLGyZMnM60zo6pVqzrVdrPIyEijfv36ma7LSUxMjNN4ZvYaNGiQo//8+fMNHx8fY9u2bU7beffddw1Jxo4dOxxtmX0PoqKijOrVq7scmyRjzZo1Lv1LlCiR6XGnj036Z5+ZkJAQo0mTJo7l0aNHGzf/CP73v/9tSDLOnTuX5TY8fbyffvppjnVv27bNkGQsWLDAqX3NmjWZtmfUuHFjIzQ01Dh//ryjbf/+/YaPj4/xxBNPZPqe7L5fmbn5858+fbpRsmRJx/H36NHD+Pvf/+7YbufOnfN0bOnfi61btzrazp49a1itVmPo0KGOtiVLlhiSjE2bNrnU6e7PopiYGKNq1apO/XL6e5FxHNu1a2c0bNjQabt2u9245557jNtvv93Rdv36dSMtLc1pX/Hx8YbVajXGjh3r1JbxZ9WgQYOcvsMZ+5YtW9a4cOGCo/2zzz4zJBmff/65y3uAdFzKR6E2Z84crV+/XgsWLNCAAQO0YMECp7MskpzmBl6+fFmJiYlq1aqVrl69qsOHDzv1TU1NVWJios6dO6edO3fq008/VaNGjVSuXLlM9//rr7/qrbfe0siRI13uJl+2bJnKlSvnuAnmZlk9JmjPnj1asmSJJkyY4DQd4WaPP/64Dh8+7Lhkv2zZMoWEhKhdu3ZO/Xbv3q2zZ8/queeeU0BAgKO9c+fOqlOnjlauXClJOnfunLZu3ar+/fs7nWnOrs6cpKWlKTExUYmJibpx40au3hsQEKD169dn+spoyZIlqlu3rurUqePYX2Jiotq2bStJ2rRpk6Pvzd+DpKQkJSYmKjIyUj///LOSkpKctlutWjVFRUXlqu6cBAUFZXt3fvrZ688++yzLJ0t4+njT9/nFF18oNTU1y32GhISoQ4cOTvts1qyZgoKCnPaZ0enTp7Vv3z717dtXZcqUcbQ3atRIHTp00KpVq7J8b1717NlT165d0xdffKHLly/riy++yPIyfm6PrV69emrVqpVjuXz58qpdu7Z+/vlnt2rLzc+izDzwwAO
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtIAAAJHCAYAAAC9wbFaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABdc0lEQVR4nO3deVRV5f7H8c9BBJwAUQFJRFJTySnFFMdUEgszzLpqlpaWN9McyyFns1S6lppeyayse/VmVlppqYSZlkjOs2aFOQVoCAgpouzfHy32zxOknB3I4Pu11lnL8+zv2ft7tnT6sH32c2yGYRgCAAAA4BCnom4AAAAAKIkI0gAAAIAFBGkAAADAAoI0AAAAYAFBGgAAALCAIA0AAABYQJAGAAAALCBIAwAAABYQpAEAAAALCNIAAEhKT0/X3LlzzecpKSlauHBh0TUEoNgjSAOwbOnSpbLZbNqxY0eubW+99ZZsNpsiIiJ09erVIugOcEy5cuU0ceJELVu2TCdPntTUqVP1+eefF3Vbf0t6erqmTJmihg0bqkKFCqpSpYqaNm2q4cOH68yZM0XdHlDiORd1AwBKn1WrVmnw4MFq166dPvjgA5UpU6aoWwJuqEyZMpo2bZr69eun7Oxsubu7a+3atUXdlmVZWVlq3769jhw5ov79++u5555Tenq6Dh48qOXLl6tHjx7y8/Mr6jaBEo0gDaBAbdq0SX369FFQUJA+//xzubm5FXVLQL6NHj1avXr10smTJ9WgQQN5enoWdUuWrV69Wrt379ayZcv06KOP2m27dOmSLl++XESdAaUHUzsAFJg9e/bowQcfVPXq1bV+/Xp5eHjkqlm5cqWaN2+ucuXKqWrVqnrsscd0+vTpPPdns9nyfBw/ftyuZurUqXave/XVV2Wz2XTPPfeYY1OnTpXNZst1jFq1aumJJ56wG0tJSdGIESPk7+8vV1dX1alTR7Nnz1Z2drZdXXZ2tubNm6dGjRrJzc1N1apVU9euXc2pLn/Vf84jp79NmzbZjbu6uuqOO+7QzJkzZRiG3TF3796t++67T+7u7qpYsaI6d+6sbdu25Xn+rnX06FF16tRJvr6+cnV1lb+/v5555hklJyebNTl9fPTRR7leX7FiRbvzlJycrOeff16NGjVSxYoV5e7urvvuu0979+61e11Bn/fjx4/LZrPpX//6V659NmzY0O7vPOf9bNq0ya4uPDw818/NtX3WqFFDISEhcnZ2lq+vb577+Cv33HNPnn/Xf/4Zlf5/atRf/Vzk2L17t7p27apq1arZ1XXr1u26vfz000+SpDZt2uTa5ubmJnd3d7uxI0eO6OGHH5aXl5fc3NwUHByszz77zNyelJSkatWq6Z577rH7ufzxxx9VoUIF9erV60anByh1uCINoED89NNP6tq1q1xdXbV+/XpVr149V83SpUv15JNPqkWLFpo5c6YSExM1b948fffdd9q9e3eeV/969Oihhx56SJK0ZcsWLV68+Lp9pKSkaObMmZbfx++//64OHTro9OnT+uc//6maNWtq69atGj9+vH799Ve7m9EGDhyopUuX6r777tNTTz2lK1euaMuWLdq2bZuCg4P1n//8x6zN6f31119X1apVJUk+Pj52x37xxRfVoEEDXbx4UStWrNCLL74ob29vDRw4UJJ08OBBtWvXTu7u7hozZozKli2rN998U/fcc4+++eYbtWzZ8i/fV0ZGhmrUqKEHHnhA7u7uOnDggBYuXKjTp09bmgf8888/a/Xq1XrkkUcUGBioxMREvfnmm+rQoYMOHTrk8JQBR87737F582Z98cUX+aqdM2eOEhMTHT5GjRo1zJ/B9PR0DR48+Lr11/5MvPzyy3bbUlNTdd9998kwDI0aNUr+/v6SpJEjR96wj4CAAEnS+++/r4kTJ+b5C02OgwcPqk2bNrrttts0btw4VahQQR9++KEiIiL08ccfq0ePHvL29taiRYv0yCOP6I033tCwYcOUnZ2tJ554QpUqVdK///3vG/YElDoGAFj07rvvGpKMNWvWGLVr1zYkGV26dMmz9vLly4a3t7fRsGFD4+LFi+b4mjVrDEnG5MmT7eqzsrIMSca0adNyHS8+Pt4ck2RMmTLFfD5mzBjD29vbaN68udGhQwdzfNq0aYYkIzs72+44AQEBRv/+/c3nL730klGhQgXjhx9+sKsbN26cUaZMGePEiROGYRjGxo0bDUnGsGHDcr3XPx/jr3rP8fXXXxuSjK+//tocu3TpkuHk5GQ8++yz5lhERITh4uJi/PTTT+bYmTNnjEqVKhnt27fPtd8befbZZ42KFSvm6mPlypW5aitUqGB3ni5dumRcvXrVriY+Pt5wdXU1pk+fbo4V9HmPj483JBmvvvpqrh7vvPNOu7/zvM5ry5Ytjfvuuy/Xz82UKVOMa/+XmJSUZFSqVMmsvXYf19O6dWujYcOG5vOzZ8/mOlaOt956y5Bk/PLLL+ZYhw4d7N7D+vXrDUnG//73P7vXBgQEGOHh4dft5ffffzfq1atnSDICAgKMJ554wnj77beNxMTEXLWdO3c2GjVqZFy6dMkcy87ONlq3bm3UrVvXrrZPnz5G+fLljR9++MF49dVXDUnG6tWrr9sLUFoxtQPA3/bEE0/o5MmTevTRR7VhwwatXLkyV82OHTuUlJSkZ5991m7edHh4uOrXr5/rpq6c+Zuurq757uP06dN64403NGnSJFWsWNFum7e3tyTp1KlT193HypUr1a5dO1WuXFnnzp0zH6Ghobp69ao2b94sSfr4449ls9k0ZcqUXPu43pW/60lNTdW5c+d04sQJRUZGKjs7W506dZIkXb16VRs2bFBERIRuv/128zXVq1fXo48+qm+//VZpaWn5OkZiYqJiYmK0du1atW/fPlfNhQsX7N77uXPnctW4urrKycnJ7O23335TxYoVVa9ePe3atcusK+jznuP333/P1eONVof55JNPtH37ds2aNeu6dZL00ksvycPDQ8OGDbth7bUuXbqU7/sC8vMzfuHCBUlSlSpVHOpD+mMVkri4OL3wwguS/vgXoYEDB6p69ep67rnnlJmZKemPaTobN27UP/7xD7u/+99++01hYWE6duyY3fSrBQsWyMPDQw8//LAmTZqkxx9/XA8++KDD/QGlAVM7APxtycnJ+uCDD9SjRw8dOnRIw4cPV5cuXezmSP/yyy+SpHr16uV6ff369fXtt9/ajaWkpEhSrkB8PVOmTJGfn5/++c9/5prnGxISIpvNpvHjx2vGjBnmfv887/nYsWPat2+fqlWrlucxkpKSJP0xlcXPz09eXl757u9GIiIizD87OTlp4sSJ6tmzpyTp7Nmz+v333/M8fw0aNFB2drZOnjypO++887rHCAsLU1xcnCSpa9euWrFiRa6aAQMG3LDXnPnh//73vxUfH28XYq8NfQV93nNMmTIlz19i/jxdJsfVq1f14osvqm/fvmrcuPF131t8fLzefPNNLVq0yOGbZc+dO6e6devmqzY/P+PBwcEqW7aspk6dqqpVq5pTO/58/v6Kh4eHIiMjFRkZqV9++UUxMTH617/+ZYbhGTNm6Mcff5RhGJo0aZImTZqU536SkpJ02223SZK8vLw0f/58PfLII/Lx8dH8+fPz1QtQGhGkAfxtr776qh555BFJ0uLFi9WqVSuNHz/+b82ZTEhIkCT5+vrmq/7w4cNaunSp/vvf/6ps2bK5tjdp0kRTpkzRtGnTtGzZsr/cT3Z2tu69916NGTMmz+133HFHvvqx4l//+peaNGmirKwsbd++XTNmzJCzs3OegdGqN954Q+fOndOhQ4c0c+ZMPfPMM/rvf/9rVzN58mS1a9fObuyBBx6we/7KK69o0qRJGjBggF566SV5eXnJyclJI0aMsAt5hXXeBw0aZP7M5Xj66af/cv9vv/22jh8/rvXr1/9lTY4JEyaobt266t+/v7Zs2XLD+hyXL1/Wr7/+qnvvvTdf9QkJCapYsaIqVKjwlzUBAQF69913NXz4cDVr1sxu241+IchrXwMGDFCPHj10++23a9myZZoxY4b59/X8888
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAskAAAJhCAYAAACzei1uAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB69UlEQVR4nO3deZyN9eP+8evMMIsZM7KModGYjG2sWRuyLxNTiPpkKZMsEYkRUbJVHyKhiE8lWshSItl3Yuz7GhqNaJBt7MzM+/dHvzlf58xgjoZzjl7Px+M8cu77fe5zneOeu8s992IxxhgBAAAAsPJwdgAAAADA1VCSAQAAADuUZAAAAMAOJRkAAACwQ0kGAAAA7FCSAQAAADuUZAAAAMAOJRkAAACwQ0kGAAAA7FCSAQBZ4uLFixo9erT1+blz5zRu3DjnBQKAf4CSDDjR5MmTZbFYtHnz5nTzPv/8c1ksFjVr1kwpKSlOSAc4xtfXV/3799eUKVN09OhRDRo0SHPnznV2rCxx7tw5+fj4yGKxaN++fff1vVNSUjRp0iTVrl1buXPnlre3twoXLqx27dpluO24k71792rQoEE6cuRI1ocFHiCUZMAF/fjjj+rSpYtq1KihadOmydPT09mRgDvy9PTU4MGD1bZtWz3yyCOaNGmS+vfv7+xYWWLmzJmyWCwKDg7WlClT7tv7XrlyRU899ZRefvllGWP01ltvafz48Wrbtq3i4uJUpUoV/fHHHw4tc+/evRo8eDAlGbiDbM4OAMDWypUr1apVK0VERGju3Lny8fFxdiQg03r16qXnn39eR48eVcmSJZUrVy5nR8oS3377rRo3bqzQ0FBNnTpV77333n153969e2vhwoUaNWqUevToYTNv4MCBGjVq1H3J4Qypqam6fv0620A4jwHgNJMmTTKSzKZNm4wxxmzbts0EBASYwoULm+PHj2f4mhkzZpgKFSoYHx8fkydPHtOmTRvzxx9/ZDhWUoaP+Ph4mzEDBw60ed3w4cONJFOrVi3rtIEDB5qMNhmhoaEmJibGZtrZs2fN66+/bkJCQoyXl5cpUqSIGTZsmElJSbEZl5KSYkaPHm1Kly5tvL29Td68eU1UVJT1+7hV/rRHWr4VK1bYTPfy8jJFixY1//3vf01qaqrNe27dutU8+eSTJmfOnMbPz8/UrVvXxMXFZfj93Wz//v2mTp06Jn/+/MbLy8uEhISYV155xZw+fdo6Ji3HzJkz073ez8/P5ns6ffq06dWrlyldurTx8/MzOXPmNE8++aTZvn27zeuy+nuPj483ksyIESPSLbNUqVI2f+dpn2fFihU24xo3bpxuvcko54ULF0z+/PkzXMat1KpVK8O/a/t11Jj/+/m51XqRZuvWrSYqKsrkzZvXZlx0dHSmMv3+++/GYrGYGTNmmA0bNhhJZu3atRmOHTt2rAkLCzM+Pj6mcuXKZvXq1aZWrVrpMl29etUMGDDAFClSxLo+9e7d21y9etU65ujRoyZbtmymQYMGmcp55MgR06VLF1OsWDHj4+NjcufObZ599lmbn/dbfWc3//3Mnz/fPPHEEyZHjhzG39/fNG7c2OzevTvd+82YMcOULFnSeHt7m1KlSplZs2aZmJgYExoaajPu4sWLJjY21rpeFitWzIwYMSLdz6Yk07VrV/Ptt9+aiIgIky1bNjNr1iwTGhpqmjRpku79r1y5YgICAkynTp0y9f0AjmJPMuAiDh8+rCeffFLe3t5atGiRChQokG7M5MmT1a5dO1WuXFlDhw7ViRMnNGbMGK1du1bbtm3LcK/dM888o+bNm0uS1qxZo88+++y2Oc6dO6ehQ4fe9ee4fPmyatWqpWPHjumVV17RI488onXr1qlfv376888/bU7sat++vSZPnqxGjRqpQ4cOSk5O1po1a7R+/XpVqlRJ33zzjXVsWvZRo0Ypb968kqT8+fPbvPdbb72lkiVL6sqVK5o+fbreeustBQUFqX379pKkPXv2qEaNGgoICFCfPn2UPXt2/e9//1Pt2rW1atUqVa1a9Zaf69KlSwoJCdHTTz+tgIAA7d69W+PGjdOxY8fu6rjb3377TbNnz9Zzzz2nsLAwnThxQv/73/9Uq1Yt7d27VwULFnRoeY587//E6tWrNX/+/EyNHTlypE6cOOHwe4SEhFjXwYsXL6pLly63HX/zOvH+++/bzDt//rwaNWokY4xiY2NVqFAhSVLPnj0znee7776Tn5+fnnrqKfn6+qpIkSKaMmWKqlWrZjNu/Pjx6tatm2rUqKGePXvqyJEjatasmR566CGFhIRYx6WmpqpJkyb65Zdf1KlTJ5UsWVK7du3SqFGj9Ouvv2r27NmSpAULFig5OVkvvvhipnJu2rRJ69atU8uWLRUSEqIjR45o/Pjxql27tvbu3ascOXKoZs2a6t69uz7++GPrz4sk63+/+eYbxcTEKCoqSh988IEuX76s8ePH64knntC2bdtUuHBhSdK8efP0/PPPq0yZMho6dKjOnj2r9u3b6+GHH7bJZIxRkyZNtGLFCrVv317ly5fXokWL1Lt3bx07dizdnvDly5drxowZ6tatm/LmzauwsDC98MILGj58uM6cOaPcuXNbx86dO1dJSUl64YUXMvX9AA5zdksH/s3S9ur8/PPPpkiRIkaSadiwYYZjr1+/boKCgkzp0qXNlStXrNN//vlnI8kMGDDAZvyNGzeMJDN48OB073e7Pcl9+vQxQUFBpmLFijZ7vwYPHmwkpdv7Y79H89133zV+fn7m119/tRnXt29f4+npaRISEowxxixfvtxIMt27d0/3We3f41bZ02S0x/Pq1avGw8PDvPrqq9ZpzZo1M15eXubw4cPWacePHzc5c+Y0NWvWTLfcO3n11VeNv79/uhyZ2ZN89erVdHvW4+Pjjbe3txkyZIh1WlZ/7/90T3LVqlVNo0aN7rgn+eTJkyZnzpzWsZndk1ytWjVTunRp6/NTp07dck/y559/biSZ33//3TrNfq/tokWLjCTz3Xff2bw2NDQ003uSy5QpY9q0aWN9/tZbb5m8efOaGzduWKddu3bN5MmTx1SuXNlm+uTJk9Pt3f7mm2+Mh4eHWbNmjc37TJgwwWYvdc+ePY0ks23btkzlvHz5crppcXFxRpL5+uuvrdNmzpyZ4d/JhQsXTK5cuUzHjh1tpicmJprAwECb6WXKlDEhISHmwoUL1mkrV640kmz2JM+ePdtIMu+9957NMp999lljsVjMoUOHrNMkGQ8PD7Nnzx6bsQcOHDCSzPjx422mN2nSxBQuXDjD7QWQFThxD3ABL730ko4eParWrVtr8eLFmjlzZroxmzdv1smTJ/Xqq6/aHKMXHR2tEiVKaN68eTbjr1+/Lkny9vbOdI5jx47pk08+0TvvvCN/f3+beUFBQZJ0x5OEZs6cqRo1auihhx7SX3/9ZX3Ur19fKSkpWr16tSTphx9+kMVi0cCBA9Mtw2KxZDrzzc6fP6+//vpLCQkJGj58uFJTU1W3bl1Jf18hYPHixWrWrJkeffRR62sKFCig1q1b65dfflFSUlKm3uPEiRNatmyZ5s2bp5o1a6Ybc+HCBZvP/tdff6Ub4+3tLQ8PD2u206dPy9/fX8WLF9fWrVut47L6e09z+fLldBnvdBWVWbNmadOmTRo2bNhtx0nSu+++q8DAQHXv3v2OY2929erVTB+Dmpl1/MKFC5KkPHnyOJQjzc6dO7Vr1y61atXKOq1Vq1b666+/tGjRIuu0zZs36/Tp0+rYsaOyZfu/X9K2adNGDz30kM0yZ86cqZIlS6pEiRI233/aurpixQpJsq6POXPmzFRWX19f659v3Lih06dPKzw8XLly5bJZp25lyZIlOnfunPXzpT08PT1VtWpVa67jx49r165datu2rc12olatWipTpozNMufPny9PT89060GvXr1kjNGCBQtspteqVUsRERE204oVK6aqVavanDB55swZLViwQG3atLnr7QVwJxxuAbiAM2fOaNq0aXrmmWe0d+9evf7662rYsKECAwOtY37//XdJUvHixdO9vkSJEvrll19spp0
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtEAAALzCAYAAADXrVs6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABxbklEQVR4nO3deVhUdeP+8XtQAVFACREwRBQ3cst9SU1Fccu1xaVcskxzDcul3Msse8olTVssykdTK7PSJ5dwy31fcMsFc8WNAEEFhfn90Y/5OuHCMeCM8n5d11wXc85nZu6Zsee5OXzO51isVqtVAAAAADLNyewAAAAAwIOGEg0AAAAYRIkGAAAADKJEAwAAAAZRogEAAACDKNEAAACAQZRoAAAAwCBKNAAAAGAQJRoAAAAwiBINAMhVEhMTNWXKFNv9uLg4zZgxw7xAAB5IlGgA9xQRESGLxaLt27dn2Pf555/LYrGoXbt2Sk1NNSEdYEz+/Pk1cuRIzZ07V6dOndLYsWP1yy+/mB3rX7FYLHY3Dw8PNWzYUEuXLjU7GvDQymt2AAAPrh9//FF9+/ZV/fr1NX/+fOXJk8fsSMA95cmTR+PGjVO3bt2UlpYmDw+Ph6JsNm3aVN26dZPVatWff/6pmTNn6qmnntKvv/6qsLAws+MBDx1KNID7smbNGnXu3FkhISH65Zdf5OrqanYkINOGDBmi5557TqdOnVL58uVVqFAhsyP9a2XKlNHzzz9vu9+xY0eFhIRo6tSplGggGzCdA4Bhu3fvVtu2beXn56fly5fL09Mzw5jvvvtO1apVU/78+eXt7a3nn39eZ86cue3z/fNP0em3EydO2I0ZO3as3eM++OADWSwWPfnkk7ZtY8eOlcViyfAaJUqUUI8ePey2xcXFafDgwQoICJCLi4uCg4P1/vvvKy0tzW5cWlqapk6dqooVK8rV1VVFihRR8+bNbdNb7pQ//Zaeb82aNXbbXVxcVKZMGU2cOFFWq9XuNXft2qUWLVrIw8NDBQsWVJMmTbR58+bbfn63Onz4sBo3bixfX1+5uLgoICBAffr0UWxsrG1Meo7vv/8+w+MLFixo9znFxsbq9ddfV8WKFVWwYEF5eHioRYsW2rNnj93jsvpzP3HihCwWi/7zn/9keM4KFSrYfefp72fNmjV241q1apXh382tOR999FHVqVNHefPmla+v722f406efPLJ237X//w3Kv3fdKg7/btIt2vXLjVv3lxFihSxG9e6detMZfqn8uXLy9vbW8eOHbPb/tNPP6lVq1by9/eXi4uLSpUqpbfffvu207G2bNmili1bqnDhwipQoIAqVaqkqVOn2o05dOiQnn76aXl5ecnV1VXVq1fXzz//fF+ZgQcJR6IBGHLs2DE1b95cLi4uWr58ufz8/DKMiYiIUM+ePVWjRg1NnDhR58+f19SpU7Vhwwbt2rXrtkf92rdvrw4dOkiSfv/9d3322Wd3zREXF6eJEyfe9/u4evWqGjZsqDNnzuiVV15R8eLFtXHjRo0YMULnzp2zO/GsV69eioiIUIsWLfTSSy/p5s2b+v3337V582ZVr15dc+bMsY1Nzz558mR5e3tLkooWLWr32m+++abKly+va9euacGCBXrzzTfl4+OjXr16SZL279+v+vXry8PDQ0OHDlW+fPn06aef6sknn9TatWtVq1atO76vpKQkPfroo3rqqafk4eGhqKgozZgxQ2fOnLmveb/Hjx/X4sWL9cwzzygoKEjnz5/Xp59+qoYNG+rAgQPy9/c39HxGPvd/Y926dfrf//6XqbEffvihzp8/b/g1Hn30Udu/wcTERPXt2/eu42/9NzFhwgS7ffHx8WrRooWsVqvCw8MVEBAgSXrttdcM57r1Of/66y+VKlXKbntERIQKFiyo8PBwFSxYUKtWrdLo0aOVkJCgDz74wDZu5cqVat26tfz8/DRo0CD5+vrq4MGDWrJkiQYNGiTp73+r9erVU7FixTR8+HAVKFBACxcuVLt27fTDDz+offv2950fcHhWALiHr776yirJumTJEmupUqWskqzNmjW77diUlBSrj4+PtUKFCtZr167Zti9ZssQqyTp69Gi78Tdu3LBKso4bNy7D60VHR9u2SbKOGTPGdn/o0KFWHx8fa7Vq1awNGza0bR83bpxVkjUtLc3udQIDA63du3e33X/77betBQoUsP7xxx9244YPH27NkyeP9eTJk1ar1WpdtWqVVZJ14MCBGd7rP1/jTtnTrV692irJunr1atu269evW52cnKyvvvqqbVu7du2szs7O1mPHjtm2nT171uru7m5t0KBBhue9l1dffdVasGDBDDm+++67DGMLFChg9zldv37dmpqaajcmOjra6uLiYh0/frxtW1Z/7tHR0VZJ1g8++CBDxscee8zuO7/d51qrVi1rixYtMvy7GTNmjPXW/+u7cOGC1d3d3Tb21ue4m7p161orVKhgu3/x4sUMr5Xu888/t0qy/vnnn7ZtDRs2tHsPy5cvt0qyfvvtt3aPDQwMtLZq1eqeeSRZe/XqZb148aL1woUL1u3bt1ubN29+28/w6tWrGR7/yiuvWN3c3KzXr1+3Wq1W682bN61BQUHWwMBA619//WU39tbvuEmTJtaKFSvaHpe+v27dutbSpUvfMzfwIGM6B4BM69Gjh06dOqUuXbpoxYoV+u677zKM2b59uy5cuKBXX33Vbp50q1atVK5cuQwncKWkpEiSXFxcMp3jzJkz+vjjjzVq1CgVLFjQbp+Pj48k6fTp03d9ju+++07169dX4cKFdenSJdstNDRUqampWrdunSTphx9+kMVi0ZgxYzI8x+2mL2RGfHy8Ll26pJMnT2rSpElKS0tT48aNJUmpqalasWKF2rVrp5IlS9oe4+fnpy5dumj9+vVKSEjI1GucP39ekZGRWrp0qRo0aJBhzJUrV+ze+6VLlzKMcXFxkZOTky3b5cuXVbBgQZUtW1Y7d+60jcvqzz3d1atXM2S81yowixYt0rZt2/Tee+/ddZwkvf322/L09NTAgQPvOfZW169fz/R5AJn5N37lyhVJ0iOPPGIox61mz56tIkWKyMfHR9WrV1dkZKSGDh2q8PBwu3H58+e3e91Lly6pfv36unr1qg4dOiTp76kl0dHRGjx4cIa/HKX/u4+NjdWqVav07LPP2v1bunz5ssLCwnTkyJE7TuECHgZM5wCQabGxsZo/f77at2+vAwcOaNCgQWrWrJndnOg///xTklS2bNkMjy9XrpzWr19vty0uLk6SMpThuxkzZoz8/f31yiuvZJjXW6dOHVksFo0YMULvvPOO7Xn/Oc/5yJEj2rt3r4oUKXLb17hw4YKkv6ev+Pv7y8vLK9P57qVdu3a2n52cnDRy5Eh17NhRknTx4kVdvXr1tp9f+fLllZaWplOnTumxxx6762uEhYVpy5YtkqTmzZtrwYIFGca8+OKL98yaPh/8k08+UXR0tF2BvbXwZfXnnm7MmDG3/QXmn1Nk0qWmpurNN99U165dValSpbu+t+joaH366aeaOXOm4RNjL126pNKlS2dqbGb+jVevXl358uXT2LFj5e3tbZvO8c/P727atm2r/v37KyUlRdu2bdO7776rq1ev2n4JSrd//36NHDlSq1atyvALWXx8vCTZ5lFXqFDhjq939OhRWa1WjRo1SqNGjbrtmAsXLqhYsWKZfg/Ag4QSDSDTPvjgAz3zzDOSpM8++0y1a9fWiBEj9Mknn9z3c8bExEiSfH19MzX+4MGDioiI0H//+1/ly5cvw/7KlStrzJgxGjdunObOnXvH50lLS1PTpk01dOjQ2+4vU6ZMpvLcj//85z+qXLmybty4oW3btumdd95R3rx5b1sW79fHH3+sS5cu6cCBA5o4caL69Omj//73v3ZjRo8erfr169tte+qpp+zuv/vuuxo1apRefPFFvf322/Ly8pKTk5MGDx5sV/Cy63Pv3bu37d9cupdffvmOzz979mydOHFCy5cvv+OYdG+99ZZKly6t7t276/fff7/n+HQpKSk6d+6cmjZtmqnxMTExKliwoAoUKHD
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAq8AAAIjCAYAAAAtE/I+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABOOUlEQVR4nO3deXxTVf7/8Xda2rRQWpRSoFpaFlkLsulYEerIUtkUFFFABcERR0QZRKbIAIWOFnBABVxxAEURWRRRCgUEZBVBLYsiAhZQVqvQUAqhtvf3h9N8CUn3QHL5vZ6PRx54zz333k9yIrx7e3JiMQzDEAAAAGACft4uAAAAACgpwisAAABMg/AKAAAA0yC8AgAAwDQIrwAAADANwisAAABMg/AKAAAA0yC8AgAAwDQIrwAAADANwisAXCWSkpJksVi8Xcb/d2JiYjRgwABvl1EqvFdgZoRX4H/eeOMNJSQkqHr16goICFCNGjUUHx+vd999V/n5+d4uD2U0YMAAhYSEFLrfYrHoySefvIIVOXvhhRe0ZMkSl/Y5c+bIYrE4HkFBQYqMjFRCQoKmTZumM2fOXPli/z+za9cu9erVS9HR0QoKCtJ1112njh07avr06d4uza2YmBin90xhjzlz5ni7VKBcLIZhGN4uAvAFcXFxqlmzpu644w6Fhobq9OnT+vLLLzV//nzdf//9+uCDD7xdIspgwIABWrRokbKzs93ut1gsGjJkiGbMmHGFK/tTSEiIevXq5RIo5syZo0ceeUQTJkxQ7dq1lZubq+PHj2vdunVatWqVatWqpaVLl6pZs2aOY/744w/98ccfCgoKusLP4uqzefNm/fWvf1WtWrXUv39/1ahRQz///LO+/PJLHThwQPv373f0jYmJ0e233+71ULhkyRKn93lqaqo++OADvfTSSwoPD3e033rrrapVqxbvFZhWBW8XAPiK9evXKyAgwKntqaeeUtWqVTVjxgylpKQoJibGO8XhqmIYhs6fP6/g4OBi+3bu3FmtW7d2bI8aNUpr1qxRt27ddNddd2nPnj2O81SoUEEVKvDXuic8//zzCgsL07Zt21SlShWnfSdPnvROUcXo0aOH0/bx48f1wQcfqEePHm7/7uK9ArNi2gDwP5cG1wIFf+n7+f3f/y6ffPKJunbtqsjISFmtVtWtW1fJycnKy8tzOvb22293+nVdeHi4unbtqt27dzv1s1gsSkpKcmp78cUXZbFYdPvttzu1nz9/XklJSapfv76CgoJUs2ZN3XPPPTpw4IAk6eDBg25/NThkyBBZLBanuXkFv5oODAzUr7/+6tR/y5Ytjrq3b9/utG/hwoVq1aqVgoODFR4ergcffFBHjhxxee1++OEH9e7dW9WqVVNwcLAaNGig0aNHS/q/OXdFPdatW+d4HWNjY13Of7nY7XaNGzdO9erVk9VqVVRUlEaOHCm73e7Ub/bs2brjjjsUEREhq9Wqxo0b6/XXX3c5X0xMjLp166a0tDS1bt1awcHBevPNN2WxWHT27Fm98847judckrmTd9xxh8aMGaNDhw7pvffec7S7m8e4atUq3XbbbapSpYpCQkLUoEEDPffcc5f1+W7fvl0JCQkKDw9XcHCwateurYEDBzr1yc/P18svv6wmTZooKChI1atX1+DBg3Xq1Klin78krVmzRm3btlWlSpVUpUoV3X333dqzZ4/La1GS95c7Bw4cUJMmTVyCqyRFREQUW9/p06c1bNgwRUVFyWq1ql69epo0aZLLFKSSvg4F76GVK1eqefPmCgoKUuPGjfXRRx8VW4s77t4rBVNoFi5cqMaNGys4OFhxcXHatWuXJOnNN99UvXr1FBQUpNtvv10HDx50Oe/WrVt15513KiwsTBUrVlR8fLw2bdpUphqBwvBjF3CJ06dP648//tCZM2f09ddf6z//+Y8eeOAB1apVy9Fnzpw5CgkJ0fDhwxUSEqI1a9Zo7NixstlsevHFF53O17BhQ40ePVqGYejAgQOaOnWqunTposOHDxdZQ0pKikt7Xl6eunXrps8//1wPPPCAnn76aZ05c0arVq3S7t27VbduXbfn279/v2bOnFno9fz9/fXee+/pH//4h6Nt9uzZCgoK0vnz5536Fvw6+6abblJKSopOnDihV155RZs2bdK3337r+Md+586datu2rQICAvTYY48pJiZGBw4c0Keffqrnn39e99xzj+rVq+c47z/+8Q81atRIjz32mKOtUaNGhdZcWpmZmSXql5+fr7vuuksbN27UY489pkaNGmnXrl166aWX9OOPPzrNT3399dfVpEkT3XXXXapQoYI+/fRTPfHEE8rPz9eQIUOczrt371716dNHgwcP1t/+9jc1aNBAc+fO1aOPPqqbb77Z8bwLG8NLPfTQQ3ruuee0cuVK/e1vf3Pb57vvvlO3bt3UrFkzTZgwQVarVfv373cKE55+vidPnlSnTp1UrVo1JSYmqkqVKjp48KBLyBo8eLDjvfTUU08pIyNDM2bM0LfffqtNmzYV+sOkJK1evVqdO3dWnTp1lJSUpHPnzmn69Olq06aNvvnmG8XExJT7/RUdHa0tW7Zo9+7dpf7BKScnR/Hx8Tpy5IgGDx6sWrVqafPmzRo1apSOHTuml19+uUyvw759+3T//ffr8ccfV//+/TV79mzdd999WrFihTp27FiqGguzYcMGLV261DGeKSkp6tatm0aOHKnXXntNTzzxhE6dOqXJkydr4MCBWrNmjePYNWvWqHPnzmrVqpXGjRsnPz8/xw88GzZs0M033+yRGgEZAJw0aNDAkOR4PPzww0Zubq5Tn5ycHJfjBg8ebFSsWNE4f/68oy0+Pt6Ij4936vfcc88ZkoyTJ0862iQZ48aNc2yPHDnSiIiIMFq1auV0/KxZswxJxtSpU12un5+fbxiGYWRkZBiSjNmzZzv29e7d24iNjTWioqKM/v37O9pnz55tSDL69OljNG3a1NF+9uxZIzQ01Ojbt68hydi2bZthGIZx4cIFIyIiwoiNjTXOnTvn6P/ZZ58ZkoyxY8c62tq1a2dUrlzZOHTokNs6LxUdHe1U28Xi4+ONJk2auN1XnP79+zuNp7vHkCFDHP3nzp1r+Pn5GRs2bHA6zxtvvGFIMjZt2uRoc/c+SEhIMOrUqePy3CQZK1ascOlfqVIlt8+7YGwKXnt3wsLCjBYtWji2x40bZ1z81/pLL71kSDJ+/fXXQs/h6ef78ccfF1v3hg0bDEnG+++/79S+YsUKt+2Xat68uREREWH89ttvjrYdO3YYfn5+xsMPP+z2mKLeX+6sXLnS8Pf3N/z9/Y24uDhj5MiRRlpamnHhwoViz52cnGxUqlTJ+PHHH536JSYmGv7+/sbhw4cNwyjd61DwHlq8eLGjLSsry6hZs6bTe+BiL774oiHJyMjIcNl36XvFMP78e8hqtTr1f/PNNw1JRo0aNQybzeZoHzVqlNO58/PzjRtuuMFISEhw+n88JyfHqF27ttGxY0e3NQJlwbQB4BKzZ8/WqlWr9P7772vQoEF6//33ne7WSHKaq3jmzBllZmaqbdu2ysnJ0Q8//ODUNzc3V5mZmfr111+1ZcsWffzxx2rWrJnTByguduTIEU2fPl1jxoxx+ZT84sWLFR4erqFDh7ocV9iyN19//bUWLlyolJQUp6kPF3vooYf0ww8/OKYHLF68WGFhYWrfvr1Tv+3bt+vkyZN64oknnD7o0bVrVzVs2FDLli2TJP36669av369Bg4c6HTHuqg6i5OXl6fMzExlZmbqwoULpTo2KChIq1atcvu41MKFC9WoUSM1bNjQcb3MzEzdcccdkqS1a9c6+l78PsjKylJmZqbi4+P1008/KSsry+m8tWvXVkJCQqnqLk5ISEiRqw4U3AX/5JNPCl0xw9PPt+Can332mXJzcwu9ZlhYmDp27Oh0zVatWikkJMTpmpc6duyY0tPTNWDAAF177bWO9mbNmqljx45KTU0t9NjS6Nixo7Zs2aK77rpLO3bs0OTJk5WQkKDrrrtOS5cuLfLYhQsXqm3btrrmmmucnl+HDh2Ul5en9evXl+l
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 800x600 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import matplotlib.pyplot as plt\n",
|
|||
|
"# Список колонок для построения графиков\n",
|
|||
|
"columns = ['BMI', 'Smoking', 'AlcoholDrinking', 'Stroke',\n",
|
|||
|
" 'PhysicalHealth', 'MentalHealth', 'DiffWalking', 'Sex',\n",
|
|||
|
" 'AgeCategory', 'Race', 'Diabetic', 'PhysicalActivity', 'GenHealth', 'SleepTime', 'Asthma', 'KidneyDisease', 'SkinCancer']\n",
|
|||
|
"\n",
|
|||
|
"# Создание диаграмм зависимости\n",
|
|||
|
"for column in columns:\n",
|
|||
|
" plt.figure(figsize=(8, 6)) # Установка размера графика\n",
|
|||
|
" if pd.api.types.is_numeric_dtype(df[column]): # Проверяем, является ли колонка числовой\n",
|
|||
|
" # Проверяем, содержит ли колонка только два уникальных значения (0 и 1)\n",
|
|||
|
" if df[column].nunique() == 2 and set(df[column].unique()).issubset({0, 1}):\n",
|
|||
|
" # Если да, то строим столбчатую диаграмму\n",
|
|||
|
" counts = df[column].value_counts() # Считаем количество повторений каждого значения\n",
|
|||
|
" counts.plot(kind='bar') # Создаем столбчатую диаграмму\n",
|
|||
|
" plt.title(f'Количество значений для {column}')\n",
|
|||
|
" plt.xlabel(column)\n",
|
|||
|
" plt.ylabel('Количество повторений')\n",
|
|||
|
" else:\n",
|
|||
|
" # Если колонка числовая, создаем диаграмму рассеяния\n",
|
|||
|
" plt.scatter(df['HeartDisease'], df[column], alpha=0.5) # Создаем диаграмму рассеяния\n",
|
|||
|
" plt.title(f'Зависимость HeartDisease от {column}')\n",
|
|||
|
" plt.xlabel('HeartDisease (0 = нет, 1 = да)')\n",
|
|||
|
" plt.ylabel(column)\n",
|
|||
|
" plt.xticks([0, 1]) # Установка меток по оси X\n",
|
|||
|
" plt.grid() # Добавление сетки для удобства восприятия\n",
|
|||
|
" else:\n",
|
|||
|
" # Если колонка не числовая, строим столбчатую диаграмму\n",
|
|||
|
" counts = df[column].value_counts() # Считаем количество повторений каждого значения\n",
|
|||
|
" counts.plot(kind='bar') # Создаем столбчатую диаграмму\n",
|
|||
|
" plt.title(f'Количество значений для {column}')\n",
|
|||
|
" plt.xlabel(column)\n",
|
|||
|
" plt.ylabel('Количество повторений')\n",
|
|||
|
"\n",
|
|||
|
" plt.show() # Отображение графика"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 23,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"# Функция для создания выборок\n",
|
|||
|
"from sklearn.model_selection import train_test_split\n",
|
|||
|
"\n",
|
|||
|
"def split_stratified_into_train_val_test(\n",
|
|||
|
" df_input,\n",
|
|||
|
" stratify_colname=\"y\",\n",
|
|||
|
" frac_train=0.6,\n",
|
|||
|
" frac_val=0.15,\n",
|
|||
|
" frac_test=0.25,\n",
|
|||
|
" random_state=None,\n",
|
|||
|
"):\n",
|
|||
|
"\n",
|
|||
|
" if frac_train + frac_val + frac_test != 1.0:\n",
|
|||
|
" raise ValueError(\n",
|
|||
|
" \"fractions %f, %f, %f do not add up to 1.0\"\n",
|
|||
|
" % (frac_train, frac_val, frac_test)\n",
|
|||
|
" )\n",
|
|||
|
"\n",
|
|||
|
" if stratify_colname not in df_input.columns:\n",
|
|||
|
" raise ValueError(\"%s is not a column in the dataframe\" % (stratify_colname))\n",
|
|||
|
"\n",
|
|||
|
" X = df_input # Contains all columns.\n",
|
|||
|
" y = df_input[\n",
|
|||
|
" [stratify_colname]\n",
|
|||
|
" ] # Dataframe of just the column on which to stratify.\n",
|
|||
|
"\n",
|
|||
|
" # Split original dataframe into train and temp dataframes.\n",
|
|||
|
" df_train, df_temp, y_train, y_temp = train_test_split(\n",
|
|||
|
" X, y, stratify=y, test_size=(1.0 - frac_train), random_state=random_state\n",
|
|||
|
" )\n",
|
|||
|
"\n",
|
|||
|
" # Split the temp dataframe into val and test dataframes.\n",
|
|||
|
" relative_frac_test = frac_test / (frac_val + frac_test)\n",
|
|||
|
" df_val, df_test, y_val, y_test = train_test_split(\n",
|
|||
|
" df_temp,\n",
|
|||
|
" y_temp,\n",
|
|||
|
" stratify=y_temp,\n",
|
|||
|
" test_size=relative_frac_test,\n",
|
|||
|
" random_state=random_state,\n",
|
|||
|
" )\n",
|
|||
|
"\n",
|
|||
|
" assert len(df_input) == len(df_train) + len(df_val) + len(df_test)\n",
|
|||
|
"\n",
|
|||
|
" return df_train, df_val, df_test"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 24,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"HeartDisease\n",
|
|||
|
"0 53\n",
|
|||
|
"1 47\n",
|
|||
|
"Name: count, dtype: int64\n",
|
|||
|
"\n",
|
|||
|
"Обучающая выборка: (60, 2)\n",
|
|||
|
"HeartDisease\n",
|
|||
|
"0 32\n",
|
|||
|
"1 28\n",
|
|||
|
"Name: count, dtype: int64\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 200x200 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Контрольная выборка: (20, 2)\n",
|
|||
|
"HeartDisease\n",
|
|||
|
"0 11\n",
|
|||
|
"1 9\n",
|
|||
|
"Name: count, dtype: int64\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAi8AAADECAYAAABXyMEsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA58ElEQVR4nO3dd3QUZdsG8GtLsimbQAppgBACoTdDh5CotAACUiJNKVKkCIqKL4pSBHkV6RBBXwUELBQpIl1A6RggoSNgQk+F9Gw2yT7fH/l2zWY3pJBkssn1OyfnZGdnnrlndmb2nqfMyoQQAkREREQWQi51AERERERFweSFiIiILAqTFyIiIrIoTF6IiIjIojB5ISIiIovC5IWIiIgsCpMXIiIisihMXoiIiMiiMHkhIiKqgIQQePz4MW7evCl1KCWOyQsRlal169ZBJpMhMjJS6lCIiuXy5cvYsWOH4XVYWBh+++036QLKJTk5GTNnzkT9+vVhbW0NFxcX+Pr64saNG1KHVqKKlLzoLzr6PxsbG/j6+mLy5MmIjo4urRiJKrzZs2dDJpMhLi7O7Pu1a9dG7969yziqf4WEhGDdunUm048ePWp0TVCpVHB3d0dgYCA+++wzxMbGln2wRKUsOTkZ48ePx+nTp3Hz5k1MnToVly5dkjosxMfHo3379li+fDkGDhyInTt34uDBgzh69Chq164tdXglSlmchebOnQtvb29oNBocP34cX331Ffbs2YPLly/Dzs6upGMkIomFhITA1dUVI0eONPv+lClT0Lp1a2RnZyM2NhYnT57ErFmzsHjxYmzevBkvvviiYd7XXnsNgwcPhkqlKqPoiUpW+/btDX8A4Ovri7Fjx0ocFfD+++/j0aNHOHXqFBo3bix1OKWqWMlLUFAQWrVqBQAYM2YMXFxcsHjxYuzcuRNDhgwp0QCJSDppaWmFuiHx9/fHwIEDjaaFh4ejW7duGDBgAK5evQpPT08AgEKhgEKhKJV4icrKjh07cPXqVaSnp6Np06awtraWNJ6YmBisX78eq1evrvCJC1BCfV70d1UREREAgMePH+O9995D06ZNoVar4ejoiKCgIISHh5ssq9FoMHv2bPj6+sLGxgaenp7o378/bt++DQCIjIw0qpbO+xcYGGgoS1+F/fPPP+PDDz+Eh4cH7O3t0adPH9y7d89k3WfOnEGPHj1QpUoV2NnZISAgACdOnDC7jYGBgWbXP3v2bJN5N27cCD8/P9ja2sLZ2RmDBw82u/6nbVtuOp0OS5cuRePGjWFjYwN3d3eMHz8eT548MZovv6aFyZMnm5RpLvaFCxea7FMAyMjIwKxZs1C3bl2oVCrUrFkT06dPR0ZGhtl9lVtgYKBJefPnz4dcLscPP/xQrP3x5ZdfokOHDnBxcYGtrS38/PywdetWs+vfuHEj2rRpAzs7Ozg5OaFz5844cOCA0Tx79+5FQEAAHBwc4OjoiNatW5vEtmXLFsNn6urqiuHDh+PBgwdG84wcOdIoZicnJwQGBuLYsWMF7qfiKOxxsXPnTvTq1QteXl5QqVTw8fHBp59+iuzsbKP5AgMD0aRJE5w7dw6dO3eGnZ0dPvzwQ9SuXRtXrlzBH3/8Yfa8y0/z5s2xdOlSJCQkYOXKlYbp5vq8hIaGonv37nB1dYWtrS28vb0xevToUt3emzdvYsCAAfDw8ICNjQ1q1KiBwYMHIzEx0Wi+wp7PeembAvV/Dg4OaNOmjVFfiYKWze3IkSNQqVR48803jaZfuHABQUFBcHR0hFqtxksvvYTTp08bzaPf56GhoUbT4+LijK4FeWM293f06FEAxsdLhw4dDJ/b6tWrTbYnJiYGb7zxBtzd3WFjY4PmzZtj/fr1hdpv+r/ctX4FNbPq6WPM68svvzTb7yokJASNGzeGSqWCl5cXJk2ahISEBJMy9cd/o0aN4Ofnh/DwcLPXqvxiyr1drq6u6NWrFy5fvmw0n0wmw+TJk/MtJ+959Ndff0Gn00Gr1aJVq1awsbGBi4sLhgwZgrt375osf/jwYfj7+8Pe3h5Vq1ZF3759ce3aNaN59Pv5+vXrCA4OhqOjI1xcXDB16lRoNBqTeHN/p2RlZaFnz55wdnbG1atXjeYt7jmVW7FqXvLSJxouLi4AgH/++Qc7duzAoEGD4O3tjejoaKxZswYBAQG4evUqvLy8AADZ2dno3bs3fv/9dwwePBhTp05FcnIyDh48iMuXL8PHx8ewjiFDhqBnz55G650xY4bZeObPnw+ZTIYPPvgAMTExWLp0Kbp06YKwsDDY2toCyPnggoKC4Ofnh1mzZkEul2Pt2rV48cUXcezYMbRp08ak3Bo1amDBggUAgJSUFEyYMMHsuj/++GMEBwdjzJgxiI2NxYoVK9C5c2dcuHABVatWNVlm3Lhx8Pf3BwD88ssv2L59u9H748ePx7p16zBq1ChMmTIFERERWLlyJS5cuIATJ07AysrK7H4oioSEBMO25abT6dCnTx8cP34c48aNQ8OGDXHp0iUsWbIEf//9d6EuxLmtXbsWM2fOxKJFizB06FCz8xS0P5YtW4Y+ffpg2LBh0Gq1+OmnnzBo0CDs3r0bvXr1Msw3Z84czJ49Gx06dMDcuXNhbW2NM2fO4PDhw+jWrRuAnAvA6NGj0bhxY8yYMQNVq1bFhQsXsG/fPkN8+n3funVrLFiwANHR0Vi2bBlOnDhh8pm6urpiyZIlAID79+9j2bJl6NmzJ+7du2f2s8/r8ePHZqfrdDqTaYU9LtatWwe1Wo1p06ZBrVbj8OHD+OSTT5CUlISFCxcalRkfH4+goCAMHjwYw4cPN/Rfeeutt6BWq/HRRx8BANzd3QvcFgAYOHAg3njjDRw4cADz5883O09MTAy6deuGatWq4T//+Q+qVq2KyMhI/PLLL6W2vVqtFt27d0dGRgbeeusteHh44MGDB9i9ezcSEhJQpUoVAMU7n/PasGEDgJxEISQkBIMGDcLly5dRv379Qu1DIKcWq1+/fujZsydWrVplmH7lyhX4+/vD0dER06dPh5WVFdasWYPAwED88ccfaNu2baHXAQD9+/dH3bp1Da/feecdNGzYEOPGjTNMa9iwoeH/J0+eoGfPnggODsaQIUOwefNmTJgwAdbW1obkMz09HYGBgbh16xYmT54Mb29vbNmyBSNHjkRCQgKmTp1qNhb9ftPHUdpmz56NOXPmoEuXLpgwYQJu3LiBr776Cn/99VeB19kPPvigSOtq0KABPvroIwghcPv2bSxevBg9e/Y0m2QUVnx8PICcm1U/Pz/897//RWxsLJYvX47jx4/jwoULcHV1BQAcOnQIQUFBqFOnDmbPno309HSsWLECHTt2xPnz5036xwQHB6N27dpYsGABTp8+jeXLl+PJkyf4/vvv841nzJgxOHr0KA4ePIhGjRoZppfEOQUAEEWwdu1aAUAcOnRIxMbGinv37omffvpJuLi4CFtbW3H//n0hhBAajUZkZ2cbLRsRESFUKpWYO3euYdp3330nAIjFixebrEun0xmWAyAWLlxoMk/jxo1FQECA4fWRI0cEAFG9enWRlJRkmL5582YBQCxbtsxQdr169UT37t0N6xFCiLS0NOHt7S26du1qsq4OHTqIJk2aGF7HxsYKAGLWrFmGaZGRkUKhUIj58+cbLXvp0iWhVCpNpt+8eVMAEOvXrzdMmzVrlsj9sRw7dkwAEJs2bTJadt++fSbTa9WqJXr16mUS+6RJk0Tejzpv7NOnTxdubm7Cz8/PaJ9u2LBByOVycezYMaPlV69eLQCIEydOmKwvt4CAAEN5v/32m1AqleLdd981O29h9ocQOZ9TblqtVjRp0kS8+OKLRmXJ5XLxyiuvmByL+s88ISFBODg4iLZt24r09HSz82i1WuHm5iaaNGliNM/u3bsFAPHJJ58Ypo0YMULUqlXLqJyvv/5aABBnz541u815t/Npf7k/26IcF3n3lxBCjB8/XtjZ2QmNRmOYFhAQIACI1atXm8yf91zT059zW7ZsyXfbmjdvLpycnAyv9deRiIgIIYQQ27dvFwDEX3/9lW8ZJb29Fy5
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 200x200 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Тестовая выборка: (20, 2)\n",
|
|||
|
"HeartDisease\n",
|
|||
|
"1 10\n",
|
|||
|
"0 10\n",
|
|||
|
"Name: count, dtype: int64\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 200x200 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"# Вывод распределения количества наблюдений по меткам (классам)\n",
|
|||
|
"print(df.HeartDisease.value_counts())\n",
|
|||
|
"print()\n",
|
|||
|
"\n",
|
|||
|
"data = df.copy()\n",
|
|||
|
"\n",
|
|||
|
"df_train, df_val, df_test = split_stratified_into_train_val_test(\n",
|
|||
|
" data, stratify_colname=\"HeartDisease\", frac_train=0.60, frac_val=0.20, frac_test=0.20\n",
|
|||
|
")\n",
|
|||
|
"\n",
|
|||
|
"print(\"Обучающая выборка: \", df_train.shape)\n",
|
|||
|
"print(df_train.HeartDisease.value_counts())\n",
|
|||
|
"counts = df_train['HeartDisease'].value_counts()\n",
|
|||
|
"plt.figure(figsize=(2, 2))# Установка размера графика\n",
|
|||
|
"plt.pie(counts, labels=counts.index, autopct='%1.1f%%', startangle=90)# Построение круговой диаграммы\n",
|
|||
|
"plt.title('Распределение классов HeartDisease в обучающей выборке')# Добавление заголовка\n",
|
|||
|
"plt.show()# Отображение графика\n",
|
|||
|
"\n",
|
|||
|
"print(\"Контрольная выборка: \", df_val.shape)\n",
|
|||
|
"print(df_val.HeartDisease.value_counts())\n",
|
|||
|
"counts = df_val['HeartDisease'].value_counts()\n",
|
|||
|
"plt.figure(figsize=(2, 2))\n",
|
|||
|
"plt.pie(counts, labels=counts.index, autopct='%1.1f%%', startangle=90)\n",
|
|||
|
"plt.title('Распределение классов HeartDisease в контрольной выборке')\n",
|
|||
|
"plt.show()\n",
|
|||
|
"\n",
|
|||
|
"print(\"Тестовая выборка: \", df_test.shape)\n",
|
|||
|
"print(df_test.HeartDisease.value_counts())\n",
|
|||
|
"counts = df_test['HeartDisease'].value_counts()\n",
|
|||
|
"plt.figure(figsize=(2, 2))\n",
|
|||
|
"plt.pie(counts, labels=counts.index, autopct='%1.1f%%', startangle=90)\n",
|
|||
|
"plt.title('Распределение классов HeartDisease в тестовой выборке')\n",
|
|||
|
"plt.show()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Сбалансируем распределение:"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"1. Балансировка данных оверсемплингом. Это метод, увеличивающий число наблюдений в меньшинственном классе для достижения более равномерного распределения классов."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 25,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"ename": "ValueError",
|
|||
|
"evalue": "A given column is not a column of the dataframe",
|
|||
|
"output_type": "error",
|
|||
|
"traceback": [
|
|||
|
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
|
|||
|
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
|
|||
|
"File \u001b[1;32mc:\\Users\\K\\source\\repos\\AIM-PIbd-31-Ievlewa-M-D\\aimenv\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:3805\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3804\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m-> 3805\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcasted_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 3806\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n",
|
|||
|
"File \u001b[1;32mindex.pyx:167\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n",
|
|||
|
"File \u001b[1;32mindex.pyx:196\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n",
|
|||
|
"File \u001b[1;32mpandas\\\\_libs\\\\hashtable_class_helper.pxi:7081\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n",
|
|||
|
"File \u001b[1;32mpandas\\\\_libs\\\\hashtable_class_helper.pxi:7089\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n",
|
|||
|
"\u001b[1;31mKeyError\u001b[0m: 'Smoking'",
|
|||
|
"\nThe above exception was the direct cause of the following exception:\n",
|
|||
|
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
|
|||
|
"File \u001b[1;32mc:\\Users\\K\\source\\repos\\AIM-PIbd-31-Ievlewa-M-D\\aimenv\\Lib\\site-packages\\sklearn\\utils\\_indexing.py:361\u001b[0m, in \u001b[0;36m_get_column_indices\u001b[1;34m(X, key)\u001b[0m\n\u001b[0;32m 360\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m col \u001b[38;5;129;01min\u001b[39;00m columns:\n\u001b[1;32m--> 361\u001b[0m col_idx \u001b[38;5;241m=\u001b[39m \u001b[43mall_columns\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcol\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 362\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(col_idx, numbers\u001b[38;5;241m.\u001b[39mIntegral):\n",
|
|||
|
"File \u001b[1;32mc:\\Users\\K\\source\\repos\\AIM-PIbd-31-Ievlewa-M-D\\aimenv\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:3812\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3811\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m InvalidIndexError(key)\n\u001b[1;32m-> 3812\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[0;32m 3813\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[0;32m 3814\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[0;32m 3815\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[0;32m 3816\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n",
|
|||
|
"\u001b[1;31mKeyError\u001b[0m: 'Smoking'",
|
|||
|
"\nThe above exception was the direct cause of the following exception:\n",
|
|||
|
"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
|
|||
|
"Cell \u001b[1;32mIn[25], line 20\u001b[0m\n\u001b[0;32m 17\u001b[0m ada \u001b[38;5;241m=\u001b[39m ADASYN()\n\u001b[0;32m 19\u001b[0m \u001b[38;5;66;03m# Преобразование данных с помощью пайплайна\u001b[39;00m\n\u001b[1;32m---> 20\u001b[0m X \u001b[38;5;241m=\u001b[39m \u001b[43mpreprocessor\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit_transform\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdf_train\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdrop\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcolumns\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mHeartDisease\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 21\u001b[0m y \u001b[38;5;241m=\u001b[39m df_train[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mHeartDisease\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[0;32m 23\u001b[0m \u001b[38;5;66;03m# Применение ADASYN\u001b[39;00m\n",
|
|||
|
"File \u001b[1;32mc:\\Users\\K\\source\\repos\\AIM-PIbd-31-Ievlewa-M-D\\aimenv\\Lib\\site-packages\\sklearn\\utils\\_set_output.py:316\u001b[0m, in \u001b[0;36m_wrap_method_output.<locals>.wrapped\u001b[1;34m(self, X, *args, **kwargs)\u001b[0m\n\u001b[0;32m 314\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(f)\n\u001b[0;32m 315\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapped\u001b[39m(\u001b[38;5;28mself\u001b[39m, X, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m--> 316\u001b[0m data_to_wrap \u001b[38;5;241m=\u001b[39m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 317\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(data_to_wrap, \u001b[38;5;28mtuple\u001b[39m):\n\u001b[0;32m 318\u001b[0m \u001b[38;5;66;03m# only wrap the first output for cross decomposition\u001b[39;00m\n\u001b[0;32m 319\u001b[0m return_tuple \u001b[38;5;241m=\u001b[39m (\n\u001b[0;32m 320\u001b[0m _wrap_data_with_container(method, data_to_wrap[\u001b[38;5;241m0\u001b[39m], X, \u001b[38;5;28mself\u001b[39m),\n\u001b[0;32m 321\u001b[0m \u001b[38;5;241m*\u001b[39mdata_to_wrap[\u001b[38;5;241m1\u001b[39m:],\n\u001b[0;32m 322\u001b[0m )\n",
|
|||
|
"File \u001b[1;32mc:\\Users\\K\\source\\repos\\AIM-PIbd-31-Ievlewa-M-D\\aimenv\\Lib\\site-packages\\sklearn\\base.py:1473\u001b[0m, in \u001b[0;36m_fit_context.<locals>.decorator.<locals>.wrapper\u001b[1;34m(estimator, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1466\u001b[0m estimator\u001b[38;5;241m.\u001b[39m_validate_params()\n\u001b[0;32m 1468\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m config_context(\n\u001b[0;32m 1469\u001b[0m skip_parameter_validation\u001b[38;5;241m=\u001b[39m(\n\u001b[0;32m 1470\u001b[0m prefer_skip_nested_validation \u001b[38;5;129;01mor\u001b[39;00m global_skip_validation\n\u001b[0;32m 1471\u001b[0m )\n\u001b[0;32m 1472\u001b[0m ):\n\u001b[1;32m-> 1473\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfit_method\u001b[49m\u001b[43m(\u001b[49m\u001b[43mestimator\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
|
|||
|
"File \u001b[1;32mc:\\Users\\K\\source\\repos\\AIM-PIbd-31-Ievlewa-M-D\\aimenv\\Lib\\site-packages\\sklearn\\compose\\_column_transformer.py:968\u001b[0m, in \u001b[0;36mColumnTransformer.fit_transform\u001b[1;34m(self, X, y, **params)\u001b[0m\n\u001b[0;32m 965\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_validate_transformers()\n\u001b[0;32m 966\u001b[0m n_samples \u001b[38;5;241m=\u001b[39m _num_samples(X)\n\u001b[1;32m--> 968\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_column_callables\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 969\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_validate_remainder(X)\n\u001b[0;32m 971\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m _routing_enabled():\n",
|
|||
|
"File \u001b[1;32mc:\\Users\\K\\source\\repos\\AIM-PIbd-31-Ievlewa-M-D\\aimenv\\Lib\\site-packages\\sklearn\\compose\\_column_transformer.py:536\u001b[0m, in \u001b[0;36mColumnTransformer._validate_column_callables\u001b[1;34m(self, X)\u001b[0m\n\u001b[0;32m 534\u001b[0m columns \u001b[38;5;241m=\u001b[39m columns(X)\n\u001b[0;32m 535\u001b[0m all_columns\u001b[38;5;241m.\u001b[39mappend(columns)\n\u001b[1;32m--> 536\u001b[0m transformer_to_input_indices[name] \u001b[38;5;241m=\u001b[39m \u001b[43m_get_column_indices\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcolumns\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 538\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_columns \u001b[38;5;241m=\u001b[39m all_columns\n\u001b[0;32m 539\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_transformer_to_input_indices \u001b[38;5;241m=\u001b[39m transformer_to_input_indices\n",
|
|||
|
"File \u001b[1;32mc:\\Users\\K\\source\\repos\\AIM-PIbd-31-Ievlewa-M-D\\aimenv\\Lib\\site-packages\\sklearn\\utils\\_indexing.py:369\u001b[0m, in \u001b[0;36m_get_column_indices\u001b[1;34m(X, key)\u001b[0m\n\u001b[0;32m 366\u001b[0m column_indices\u001b[38;5;241m.\u001b[39mappend(col_idx)\n\u001b[0;32m 368\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m--> 369\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mA given column is not a column of the dataframe\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[0;32m 371\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m column_indices\n",
|
|||
|
"\u001b[1;31mValueError\u001b[0m: A given column is not a column of the dataframe"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"from imblearn.over_sampling import ADASYN\n",
|
|||
|
"from sklearn.compose import ColumnTransformer\n",
|
|||
|
"from sklearn.preprocessing import OneHotEncoder\n",
|
|||
|
"\n",
|
|||
|
"categorical_features = ['Smoking', 'AlcoholDrinking', 'Stroke', 'DiffWalking', 'Sex', 'AgeCategory', 'Race', 'Diabetic', 'PhysicalActivity', 'GenHealth', 'Asthma', 'KidneyDisease', 'SkinCancer'] # Ваши категориальные признаки\n",
|
|||
|
"numeric_features = ['BMI', 'PhysicalHealth', 'MentalHealth', 'SleepTime'] # Ваши числовые признаки\n",
|
|||
|
"\n",
|
|||
|
"# Создание пайплайна для обработки категориальных данных\n",
|
|||
|
"preprocessor = ColumnTransformer(\n",
|
|||
|
" transformers=[\n",
|
|||
|
" ('cat', OneHotEncoder(), categorical_features), # OneHotEncoder для категориальных данных\n",
|
|||
|
" ('num', 'passthrough', numeric_features) # Оставляем числовые колонки без изменений\n",
|
|||
|
" ]\n",
|
|||
|
")\n",
|
|||
|
"\n",
|
|||
|
"# Создание экземпляра ADASYN\n",
|
|||
|
"ada = ADASYN()\n",
|
|||
|
"\n",
|
|||
|
"# Преобразование данных с помощью пайплайна\n",
|
|||
|
"X = preprocessor.fit_transform(df_train.drop(columns=['HeartDisease']))\n",
|
|||
|
"y = df_train['HeartDisease']\n",
|
|||
|
"\n",
|
|||
|
"# Применение ADASYN\n",
|
|||
|
"X_resampled, y_resampled = ada.fit_resample(X, y)\n",
|
|||
|
"\n",
|
|||
|
"# Создание нового DataFrame\n",
|
|||
|
"df_train_adasyn = pd.DataFrame(X_resampled)\n",
|
|||
|
"# Восстанавливаем названия столбцов для DataFrame\n",
|
|||
|
"ohe_columns = preprocessor.named_transformers_['cat'].get_feature_names_out(categorical_features)\n",
|
|||
|
"new_column_names = list(ohe_columns) + numeric_features\n",
|
|||
|
"df_train_adasyn.columns = new_column_names\n",
|
|||
|
"\n",
|
|||
|
"# Добавление целевой переменной\n",
|
|||
|
"df_train_adasyn['HeartDisease'] = y_resampled\n",
|
|||
|
"\n",
|
|||
|
"# Вывод информации о новой выборке\n",
|
|||
|
"print(\"Обучающая выборка после oversampling: \", df_train_adasyn.shape)\n",
|
|||
|
"print(df_train_adasyn['HeartDisease'].value_counts())\n",
|
|||
|
"\n",
|
|||
|
"# Визуализация\n",
|
|||
|
"counts = df_train_adasyn['HeartDisease'].value_counts()\n",
|
|||
|
"plt.figure(figsize=(6, 6))\n",
|
|||
|
"plt.pie(counts, labels=counts.index, autopct='%1.1f%%', startangle=90)\n",
|
|||
|
"plt.title('Распределение классов HeartDisease в тренировочной выборке после ADASYN')\n",
|
|||
|
"plt.show()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"2. Балансировка данных андерсемплингом. Этот метод помогает сбалансировать выборку, уменьшая количество экземпляров класса большинства, чтобы привести его в соответствие с классом меньшинства."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 56,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Обучающая выборка после undersampling: (32848, 18)\n",
|
|||
|
"HeartDisease\n",
|
|||
|
"No 16424\n",
|
|||
|
"Yes 16424\n",
|
|||
|
"Name: count, dtype: int64\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 200x200 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"from imblearn.under_sampling import RandomUnderSampler\n",
|
|||
|
"\n",
|
|||
|
"rus = RandomUnderSampler()# Создание экземпляра RandomUnderSampler\n",
|
|||
|
"\n",
|
|||
|
"# Применение RandomUnderSampler\n",
|
|||
|
"X_resampled, y_resampled = rus.fit_resample(df_train.drop(columns=['HeartDisease']), df_train['HeartDisease'])\n",
|
|||
|
"\n",
|
|||
|
"# Создание нового DataFrame\n",
|
|||
|
"df_train_undersampled = pd.DataFrame(X_resampled)\n",
|
|||
|
"df_train_undersampled['HeartDisease'] = y_resampled # Добавление целевой переменной\n",
|
|||
|
"\n",
|
|||
|
"# Вывод информации о новой выборке\n",
|
|||
|
"print(\"Обучающая выборка после undersampling: \", df_train_undersampled.shape)\n",
|
|||
|
"print(df_train_undersampled['HeartDisease'].value_counts())\n",
|
|||
|
"\n",
|
|||
|
"# Визуализация распределения классов\n",
|
|||
|
"counts = df_train_undersampled['HeartDisease'].value_counts()\n",
|
|||
|
"plt.figure(figsize=(2, 2))\n",
|
|||
|
"plt.pie(counts, labels=counts.index, autopct='%1.1f%%', startangle=90)\n",
|
|||
|
"plt.title('Распределение классов HeartDisease в тренировочной выборке после Undersampling')\n",
|
|||
|
"plt.show()"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"metadata": {
|
|||
|
"kernelspec": {
|
|||
|
"display_name": "aimenv",
|
|||
|
"language": "python",
|
|||
|
"name": "python3"
|
|||
|
},
|
|||
|
"language_info": {
|
|||
|
"codemirror_mode": {
|
|||
|
"name": "ipython",
|
|||
|
"version": 3
|
|||
|
},
|
|||
|
"file_extension": ".py",
|
|||
|
"mimetype": "text/x-python",
|
|||
|
"name": "python",
|
|||
|
"nbconvert_exporter": "python",
|
|||
|
"pygments_lexer": "ipython3",
|
|||
|
"version": "3.12.5"
|
|||
|
}
|
|||
|
},
|
|||
|
"nbformat": 4,
|
|||
|
"nbformat_minor": 2
|
|||
|
}
|