2024-10-19 12:49:39 +04:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 1 датасет. NASA - Nearest Earth Objects\n",
"## В космосе находится бесконечное количество объектов. Некоторые из них находятся ближе, чем мы думаем. Хотя мы можем думать, что расстояние в 70 000 км не может потенциально навредить нам, но в астрономических масштабах это очень малое расстояние и может нарушить многие природные явления. Таким образом, эти объекты/астероиды могут оказаться вредными. Следовательно, разумно знать, что нас окружает и что из этого может навредить нам. Таким образом, этот набор данных составляет список сертифицированных NASA астероидов, которые классифицируются как ближайшие к Земле объекты.\n",
"## В данном датасете объектами исследования являются околоземные объекты. В нём содержатся данные атрибуты: id, name, est_diameter_min, est_diameter_max, relative_velocity, miss_distance, orbiting_body, sentry_object, absolute_magnitude, hazardous. Цель создания данного датасета- научиться определять, опасен ли объект на орбите или же нет.\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"количество колонок: 10\n",
"колонки: id, name, est_diameter_min, est_diameter_max, relative_velocity, miss_distance, orbiting_body, sentry_object, absolute_magnitude, hazardous\n"
]
}
],
"source": [
"import pandas as pd \n",
"df = pd.read_csv(\"C://Users//annal//aim//static//csv//neo_v2.csv\")\n",
"print('количество колонок: ' + str(df.columns.size)) \n",
"print('колонки: ' + ', '.join(df.columns))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Получим сведения о пропущенных данных. Из вывода видно, что пропущенные данные не обнаружены."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"id 0\n",
"name 0\n",
"est_diameter_min 0\n",
"est_diameter_max 0\n",
"relative_velocity 0\n",
"miss_distance 0\n",
"orbiting_body 0\n",
"sentry_object 0\n",
"absolute_magnitude 0\n",
"hazardous 0\n",
"dtype: int64\n",
"\n",
"id False\n",
"name False\n",
"est_diameter_min False\n",
"est_diameter_max False\n",
"relative_velocity False\n",
"miss_distance False\n",
"orbiting_body False\n",
"sentry_object False\n",
"absolute_magnitude False\n",
"hazardous False\n",
"dtype: bool\n",
"\n"
]
}
],
"source": [
"# Количество пустых значений признаков\n",
"print(df.isnull().sum())\n",
"\n",
"print()\n",
"\n",
"# Есть ли пустые значения признаков\n",
"print(df.isnull().any())\n",
"\n",
"print()\n",
"\n",
"# Процент пустых значений признаков\n",
"for i in df.columns:\n",
" null_rate = df[i].isnull().sum() / len(df) * 100\n",
" if null_rate > 0:\n",
" print(f\"{i} процент пустых значений: %{null_rate:.2f}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Н а сайте в карточке датасета видно, что в колонках orbiting_body и sentry_object в каждой строке одинаковое значение. Это значит, что эти колонки не являются информативными и их можно убрать."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"количество колонок: 8\n",
"колонки: id, name, est_diameter_min, est_diameter_max, relative_velocity, miss_distance, absolute_magnitude, hazardous\n"
]
}
],
"source": [
"df = df.drop(columns=['orbiting_body'])\n",
"df = df.drop(columns=['sentry_object'])\n",
"print('количество колонок: ' + str(df.columns.size)) \n",
"print('колонки: ' + ', '.join(df.columns))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## При беглом осмотре данных, зашумлённости не обнаружила. Необходимо ознакомиться с данными о выбросах."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Колонка est_diameter_min:\n",
" Есть выбросы: Да\n",
" Количество выбросов: 8306\n",
" Минимальное значение: 0.0006089126\n",
" Максимальное значение: 0.32962154705\n",
" 1-й квантиль (Q1): 0.0192555078\n",
" 3-й квантиль (Q3): 0.1434019235\n",
"\n",
"Колонка est_diameter_max:\n",
" Есть выбросы: Да\n",
" Количество выбросов: 8306\n",
" Минимальное значение: 0.00136157\n",
" Максимальное значение: 0.7370561859\n",
" 1-й квантиль (Q1): 0.0430566244\n",
" 3-й квантиль (Q3): 0.320656449\n",
"\n",
"Колонка relative_velocity:\n",
" Есть выбросы: Да\n",
" Количество выбросов: 1574\n",
" Минимальное значение: 203.34643253\n",
" Максимальное значение: 114380.48061454494\n",
" 1-й квантиль (Q1): 28619.02064490995\n",
" 3-й квантиль (Q3): 62923.60463276395\n",
"\n",
"Колонка miss_distance:\n",
" Есть выбросы: Нет\n",
" Количество выбросов: 0\n",
" Минимальное значение: 6745.532515957\n",
" Максимальное значение: 74798651.4521972\n",
" 1-й квантиль (Q1): 17210820.23576468\n",
" 3-й квантиль (Q3): 56548996.45139917\n",
"\n",
"Колонка absolute_magnitude:\n",
" Есть выбросы: Да\n",
" Количество выбросов: 101\n",
" Минимальное значение: 14.8\n",
" Максимальное значение: 32.239999999999995\n",
" 1-й квантиль (Q1): 21.34\n",
" 3-й квантиль (Q3): 25.7\n",
"\n"
]
}
],
"source": [
"numeric_columns = ['est_diameter_min', 'est_diameter_max', 'relative_velocity', 'miss_distance', 'absolute_magnitude']\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": [
"## Необходимо построить диаграммы для поиска зависимостей опасности от других колонок."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 400x800 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 400x800 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 400x800 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 400x800 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 400x800 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# Список числовых колонок, для которых мы будем строить графики\n",
"numeric_columns = ['est_diameter_min', 'est_diameter_max', 'relative_velocity', 'miss_distance', 'absolute_magnitude']\n",
"\n",
"# Создание диаграмм зависимости\n",
"for column in numeric_columns:\n",
" plt.figure(figsize=(4, 8)) # Установка размера графика\n",
" plt.scatter(df['hazardous'], df[column], alpha=0.5) # Создаем диаграмму рассеяния\n",
" plt.title(f'Зависимость {column} от hazardous')\n",
" plt.xlabel('hazardous (0 = нет, 1 = да)')\n",
" plt.ylabel(column)\n",
" plt.xticks([0, 1]) # Установка меток по оси X\n",
" plt.grid() # Добавление сетки для удобства восприятия\n",
" plt.show() # Отображение графика"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Далее создадим выборки. Разбивать данные на классы стоит по критерию опасности, потому что это то, что будет предсказывать модель."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Collecting scikit-learn\n",
" Downloading scikit_learn-1.5.2-cp312-cp312-win_amd64.whl.metadata (13 kB)\n",
"Requirement already satisfied: numpy>=1.19.5 in c:\\users\\annal\\aim\\.venv\\lib\\site-packages (from scikit-learn) (2.1.1)\n",
"Collecting scipy>=1.6.0 (from scikit-learn)\n",
" Downloading scipy-1.14.1-cp312-cp312-win_amd64.whl.metadata (60 kB)\n",
"Collecting joblib>=1.2.0 (from scikit-learn)\n",
" Downloading joblib-1.4.2-py3-none-any.whl.metadata (5.4 kB)\n",
"Collecting threadpoolctl>=3.1.0 (from scikit-learn)\n",
" Downloading threadpoolctl-3.5.0-py3-none-any.whl.metadata (13 kB)\n",
"Downloading scikit_learn-1.5.2-cp312-cp312-win_amd64.whl (11.0 MB)\n",
" ---------------------------------------- 0.0/11.0 MB ? eta -:--:--\n",
" --------------------------------------- 0.3/11.0 MB ? eta -:--:--\n",
" -- ------------------------------------- 0.8/11.0 MB 1.9 MB/s eta 0:00:06\n",
" ---- ----------------------------------- 1.3/11.0 MB 2.3 MB/s eta 0:00:05\n",
" -------- ------------------------------- 2.4/11.0 MB 2.9 MB/s eta 0:00:03\n",
" ----------- ---------------------------- 3.1/11.0 MB 3.2 MB/s eta 0:00:03\n",
" --------------- ------------------------ 4.2/11.0 MB 3.5 MB/s eta 0:00:02\n",
" ------------------ --------------------- 5.0/11.0 MB 3.6 MB/s eta 0:00:02\n",
" --------------------- ------------------ 6.0/11.0 MB 3.8 MB/s eta 0:00:02\n",
" ------------------------ --------------- 6.8/11.0 MB 3.8 MB/s eta 0:00:02\n",
" --------------------------- ------------ 7.6/11.0 MB 3.9 MB/s eta 0:00:01\n",
" ------------------------------ --------- 8.4/11.0 MB 3.9 MB/s eta 0:00:01\n",
" --------------------------------- ------ 9.2/11.0 MB 3.9 MB/s eta 0:00:01\n",
" ------------------------------------ --- 10.0/11.0 MB 3.8 MB/s eta 0:00:01\n",
" -------------------------------------- - 10.5/11.0 MB 3.7 MB/s eta 0:00:01\n",
" ---------------------------------------- 11.0/11.0 MB 3.7 MB/s eta 0:00:00\n",
"Downloading joblib-1.4.2-py3-none-any.whl (301 kB)\n",
"Downloading scipy-1.14.1-cp312-cp312-win_amd64.whl (44.5 MB)\n",
" ---------------------------------------- 0.0/44.5 MB ? eta -:--:--\n",
" ---------------------------------------- 0.5/44.5 MB 3.4 MB/s eta 0:00:14\n",
" - -------------------------------------- 1.3/44.5 MB 3.2 MB/s eta 0:00:14\n",
" - -------------------------------------- 2.1/44.5 MB 3.6 MB/s eta 0:00:12\n",
" -- ------------------------------------- 2.9/44.5 MB 3.6 MB/s eta 0:00:12\n",
" --- ------------------------------------ 3.7/44.5 MB 3.6 MB/s eta 0:00:12\n",
" ---- ----------------------------------- 4.5/44.5 MB 3.6 MB/s eta 0:00:12\n",
" ---- ----------------------------------- 5.2/44.5 MB 3.7 MB/s eta 0:00:11\n",
" ----- ---------------------------------- 6.0/44.5 MB 3.8 MB/s eta 0:00:11\n",
" ------ --------------------------------- 7.1/44.5 MB 3.8 MB/s eta 0:00:10\n",
" ------ --------------------------------- 7.6/44.5 MB 3.7 MB/s eta 0:00:10\n",
" ------- -------------------------------- 8.4/44.5 MB 3.7 MB/s eta 0:00:10\n",
" -------- ------------------------------- 9.2/44.5 MB 3.7 MB/s eta 0:00:10\n",
" -------- ------------------------------- 10.0/44.5 MB 3.8 MB/s eta 0:00:10\n",
" --------- ------------------------------ 11.0/44.5 MB 3.8 MB/s eta 0:00:09\n",
" ---------- ----------------------------- 11.5/44.5 MB 3.8 MB/s eta 0:00:09\n",
" ---------- ----------------------------- 11.8/44.5 MB 3.8 MB/s eta 0:00:09\n",
" ----------- ---------------------------- 13.1/44.5 MB 3.8 MB/s eta 0:00:09\n",
" ------------ --------------------------- 13.9/44.5 MB 3.8 MB/s eta 0:00:09\n",
" ------------ --------------------------- 14.4/44.5 MB 3.8 MB/s eta 0:00:09\n",
" ------------- -------------------------- 15.2/44.5 MB 3.7 MB/s eta 0:00:08\n",
" -------------- ------------------------- 16.0/44.5 MB 3.7 MB/s eta 0:00:08\n",
" -------------- ------------------------- 16.5/44.5 MB 3.6 MB/s eta 0:00:08\n",
" --------------- ------------------------ 17.0/44.5 MB 3.6 MB/s eta 0:00:08\n",
" --------------- ------------------------ 17.3/44.5 MB 3.6 MB/s eta 0:00:08\n",
" ---------------- ----------------------- 18.1/44.5 MB 3.5 MB/s eta 0:00:08\n",
" ---------------- ----------------------- 18.9/44.5 MB 3.5 MB/s eta 0:00:08\n",
" ----------------- ---------------------- 19.4/44.5 MB 3.5 MB/s eta 0:00:08\n",
" ------------------ --------------------- 20.2/44.5 MB 3.5 MB/s eta 0:00:07\n",
" ------------------ --------------------- 20.7/44.5 MB 3.5 MB/s eta 0:00:07\n",
" ------------------- -------------------- 21.5/44.5 MB 3.5 MB/s eta 0:00:07\n",
" ------------------- -------------------- 22.0/44.5 MB 3.5 MB/s eta 0:00:07\n",
" -------------------- ------------------- 22.8/44.5 MB 3.5 MB/s eta 0:00:07\n",
" -------------------- ------------------- 23.3/44.5 MB 3.5 MB/s eta 0:00:07\n",
" --------------------- ------------------ 23.9/44.5 MB 3.4 MB/s eta 0:00:07\n",
" ---------------------- ----------------- 24.6/44.5 MB 3.4 MB/s eta 0:00:06\n",
" ---------------------- ----------------- 25.2/44.5 MB 3.4 MB/s eta 0:00:06\n",
" ----------------------- ---------------- 26.0/44.5 MB 3.4 MB/s eta 0:00:06\n",
" ----------------------- ---------------- 26.5/44.5 MB 3.4 MB/s eta 0:00:06\n",
" ------------------------ --------------- 27.3/44.5 MB 3.4 MB/s eta 0:00:06\n",
" ------------------------- -------------- 28.0/44.5 MB 3.4 MB/s eta 0:00:05\n",
" ------------------------- -------------- 28.6/44.5 MB 3.4 MB/s eta 0:00:05\n",
" -------------------------- ------------- 29.4/44.5 MB 3.4 MB/s eta 0:00:05\n",
" -------------------------- ------------- 29.9/44.5 MB 3.4 MB/s eta 0:00:05\n",
" --------------------------- ------------ 30.7/44.5 MB 3.4 MB/s eta 0:00:05\n",
" ---------------------------- ----------- 31.2/44.5 MB 3.4 MB/s eta 0:00:04\n",
" ---------------------------- ----------- 31.7/44.5 MB 3.3 MB/s eta 0:00:04\n",
" ---------------------------- ----------- 32.2/44.5 MB 3.3 MB/s eta 0:00:04\n",
" ----------------------------- ---------- 33.3/44.5 MB 3.4 MB/s eta 0:00:04\n",
" ------------------------------ --------- 33.8/44.5 MB 3.4 MB/s eta 0:00:04\n",
" ------------------------------- -------- 34.6/44.5 MB 3.4 MB/s eta 0:00:03\n",
" ------------------------------- -------- 35.1/44.5 MB 3.4 MB/s eta 0:00:03\n",
" -------------------------------- ------- 35.9/44.5 MB 3.4 MB/s eta 0:00:03\n",
" -------------------------------- ------- 36.7/44.5 MB 3.4 MB/s eta 0:00:03\n",
" --------------------------------- ------ 37.2/44.5 MB 3.4 MB/s eta 0:00:03\n",
" ---------------------------------- ----- 38.3/44.5 MB 3.4 MB/s eta 0:00:02\n",
" ----------------------------------- ---- 39.1/44.5 MB 3.4 MB/s eta 0:00:02\n",
" ----------------------------------- ---- 39.8/44.5 MB 3.4 MB/s eta 0:00:02\n",
" ------------------------------------ --- 40.6/44.5 MB 3.4 MB/s eta 0:00:02\n",
" ------------------------------------- -- 41.4/44.5 MB 3.4 MB/s eta 0:00:01\n",
" ------------------------------------- -- 41.9/44.5 MB 3.4 MB/s eta 0:00:01\n",
" -------------------------------------- - 42.5/44.5 MB 3.4 MB/s eta 0:00:01\n",
" -------------------------------------- - 42.5/44.5 MB 3.4 MB/s eta 0:00:01\n",
" -------------------------------------- - 43.3/44.5 MB 3.3 MB/s eta 0:00:01\n",
" --------------------------------------- 43.8/44.5 MB 3.3 MB/s eta 0:00:01\n",
" --------------------------------------- 44.3/44.5 MB 3.3 MB/s eta 0:00:01\n",
" ---------------------------------------- 44.5/44.5 MB 3.3 MB/s eta 0:00:00\n",
"Downloading threadpoolctl-3.5.0-py3-none-any.whl (18 kB)\n",
"Installing collected packages: threadpoolctl, scipy, joblib, scikit-learn\n",
"Successfully installed joblib-1.4.2 scikit-learn-1.5.2 scipy-1.14.1 threadpoolctl-3.5.0\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
"pip install scikit-learn"
]
},
{
"cell_type": "code",
"execution_count": 7,
"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",
" Splits a Pandas dataframe into three subsets (train, val, and test)\n",
" following fractional ratios provided by the user, where each subset is\n",
" stratified by the values in a specific column (that is, each subset has\n",
" the same relative frequency of the values in the column). It performs this\n",
" splitting by running train_test_split() twice.\n",
"\n",
" Parameters\n",
" ----------\n",
" df_input : Pandas dataframe\n",
" Input dataframe to be split.\n",
" stratify_colname : str\n",
" The name of the column that will be used for stratification. Usually\n",
" this column would be for the label.\n",
" frac_train : float\n",
" frac_val : float\n",
" frac_test : float\n",
" The ratios with which the dataframe will be split into train, val, and\n",
" test data. The values should be expressed as float fractions and should\n",
" sum to 1.0.\n",
" random_state : int, None, or RandomStateInstance\n",
" Value to be passed to train_test_split().\n",
"\n",
" Returns\n",
" -------\n",
" df_train, df_val, df_test :\n",
" Dataframes containing the three splits.\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": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hazardous\n",
"False 81996\n",
"True 8840\n",
"Name: count, dtype: int64\n",
"\n",
"Обучающая выборка: (54501, 6)\n",
"hazardous\n",
"False 49197\n",
"True 5304\n",
"Name: count, dtype: int64\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgkAAADECAYAAAAVi7K7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9TklEQVR4nO3dd1xT1/sH8E8SIGHvLbLBgQNxtFbBjavUVVu3WBxVa7X6tdXWgdWidddtHVDxa61StVonbqxVceBWkOFmbwiQ5Pz+4Jd8CUkQELwgz/v1yktzOffc5557c/PknDt4jDEGQgghhJBy+FwHQAghhJC6iZIEQgghhKhFSQIhhBBC1KIkgRBCCCFqUZJACCGEELUoSSCEEEKIWpQkEEIIIUQtShIIIYQQopYW1wEQQkhDUFxcjIyMDMhkMtjZ2XEdDqlBYrEYGRkZ0NLSgpWVFdfh1CjqSSCkDhg7diwMDAy4DqPGLFy4EDwej+swOBcdHY3hw4fDwsICQqEQtra2GDx4MNdh1Rvr169HVlaW4v2aNWuQn5/PXUBlREZGIiAgACYmJtDV1YW9vT2+/vprrsOqcVXqSQgNDUVgYKDivVAoROPGjdGrVy/MmzcP1tbWNR4gIYTUR4cOHcJnn32GJk2aYMmSJXB1dQWA9+6XZm06fPgw4uLiMHPmTFy4cAHz5s3DtGnTuA4LGzduxFdffYVOnTph7dq1sLe3BwA4OjpyHFnNq9Zww6JFi+Ds7AyxWIyoqChs2rQJR48exd27d6Gnp1fTMRJCSL2SkZGBoKAg+Pv7Y9++fdDR0eE6pHpp7ty5CAgIwNq1a8Hn87Fy5Urw+dx2gMfGxuKbb77BhAkTsHHjxve+x6xaSUKfPn3Qtm1bAEBQUBDMzc2xatUqHDp0CMOGDavRAAkhdY9EIoFMJqMvPw127twJsViM0NBQaqO34Ofnh6SkJDx48AAODg5o1KgR1yHhl19+gY2NDX755Zf3PkEAauichG7dugEAEhISAJRm0bNmzUKLFi1gYGAAIyMj9OnTBzExMSrzisViLFy4EB4eHhCJRLC1tcWgQYPw5MkTAEBiYiJ4PJ7GV5cuXRR1nTt3DjweD3v37sXcuXNhY2MDfX19BAQE4NmzZyrLvnLlCnr37g1jY2Po6enBz88Ply5dUruOXbp0Ubv8hQsXqpQNDw+Hj48PdHV1YWZmhs8//1zt8itat7JkMhnWrFmD5s2bQyQSwdraGhMnTkRmZqZSOScnJ/Tv319lOVOnTlWpU13sy5cvV2lTACgqKsKCBQvg5uYGoVAIBwcHzJ49G0VFRWrbqqwuXbqo1LdkyRLw+Xz897//rVZ7rFixAh07doS5uTl0dXXh4+OD/fv3q11+eHg42rdvDz09PZiamsLX1xcnT55UKnPs2DH4+fnB0NAQRkZGaNeunUps+/btU2xTCwsLjBw5Ei9evFAqM3bsWKWYTU1N0aVLF1y8ePGN7ST34sULDBgwAAYGBrC0tMSsWbMglUqrvP7lY1G3zxYXF2P+/Pnw8fGBsbEx9PX10blzZ5w9e1apLvl2WbFiBdasWQNXV1cIhULcv38fABAVFYV27dpBJBLB1dUVW7ZsUbtuEokEP/74o2J+JycnzJ07V2U/0vS5cnJywtixYxXvS0pKEBwcDHd3d4hEIpibm6NTp044depUhW0cGhqq1B56enpo0aIFtm3bVuF8cvHx8fj0009hZmYGPT09fPDBB/j777+Vyvz7779o3bo1fvrpJzg4OEAoFMLd3R1Lly6FTCZTlPPz80OrVq3ULsfT0xP+/v5KMScmJiqVKf/5quw2BVTb+fXr1xg9ejQsLS0hFArh5eWFX3/9VWmesvtCWV5eXiqf8xUrVqiN+cWLFxg3bhysra0hFArRvHlz7NixQ6mM/Fh+7tw5mJiY4MMPP0SjRo3Qr18/jfuHuvnlL6FQCA8PD4SEhKDsg4/l586kpaVprKv8fvfvv//Cx8cHkydPVqyDurYCgPz8fMycOVOxD3h6emLFihUo//BlHo+HqVOnYvfu3fD09IRIJIKPjw8uXLigVE7duT5nz56FUCjEpEmTlKZXpp0ro0aubpB/oZubmwMo/RAdPHgQn376KZydnZGcnIwtW7bAz88P9+/fV5zZK5VK0b9/f5w+fRqff/45vv76a+Tm5uLUqVO4e/euYgwPAIYNG4a+ffsqLXfOnDlq41myZAl4PB6+/fZbpKSkYM2aNejRowdu3boFXV1dAMCZM2fQp08f+Pj4YMGCBeDz+di5cye6deuGixcvon379ir1NmrUCCEhIQCAvLw8fPnll2qXPW/ePAwdOhRBQUFITU3FunXr4Ovri5s3b8LExERlngkTJqBz584AgD///BMHDhxQ+vvEiRMV54NMmzYNCQkJWL9+PW7evIlLly5BW1tbbTtURVZWlmLdypLJZAgICEBUVBQmTJiApk2b4s6dO1i9ejUeP36MgwcPVmk5O3fuxA8//ICVK1di+PDhasu8qT3Wrl2LgIAAjBgxAsXFxfj999/x6aef4siRI+jXr5+iXHBwMBYuXIiOHTti0aJF0NHRwZUrV3DmzBn06tULQOnBd9y4cWjevDnmzJkDExMT3Lx5E8ePH1fEJ2/7du3aISQkBMnJyVi7di0uXbqksk0tLCywevVqAMDz58+xdu1a9O3bF8+ePVO77cuSSqXw9/dHhw4dsGLFCkRGRmLlypVwdXVV2tcqs/4TJ05Ejx49lOo/fvw4du/erRgTz8nJwbZt2zBs2DCMHz8eubm52L59O/z9/XH16lW0bt1aZduJxWJMmDABQqEQZmZmuHPnDnr16gVLS0ssXLgQEokECxYsUHt+UlBQEMLCwjBkyBDMnDkTV65cQUhICB48eKCyjStj4cKFCAkJQVBQENq3b4+cnBxER0fjxo0b6Nmz5xvnX716NSwsLJCTk4MdO3Zg/PjxcHJyUmm3spKTk9GxY0cUFBRg2rRpMDc3R1hYGAICArB//34MHDgQAJCeno6oqChERUVh3Lhx8PHxwenTpzFnzhwkJiZi8+bNAIBRo0Zh/PjxuHv3Lry8vBTLuXbtGh4/fowffvihSm1S1W0qV1xcjB49euDhw4f48ssv4enpiYMHD2LChAlIT0/Hd999V6U4NElOTsYHH3yg+FK0tLTEsWPH8MUXXyAnJwfTp0/XOO+FCxdw9OjRKi1v7ty5aNq0KQoLCxU/Hq2srPDFF19Uex3S09MRHR0NLS0tTJkyBa6urmrbijGGgIAAnD17Fl988QVat26NEydO4D//+Q9evHihOE7InT9/Hnv37sW0adMgFAqxceNG9O7dG1evXlXaN8qKiYnBgAED0LdvX2zYsEEx/W3aWQWrgp07dzIALDIykqWmprJnz56x33//nZmbmzNdXV32/PlzxhhjYrGYSaVSpXkTEhKYUChkixYtUkzbsWMHA8BWrVqlsiyZTKaYDwBbvny5SpnmzZszPz8/xfuzZ88yAMze3p7l5OQopv/xxx8MAFu7dq2ibnd3d+bv769YDmOMFRQUMGdnZ9azZ0+VZXXs2JF5eXkp3qempjIAbMGCBYppiYmJTCAQsCVLlijNe+fOHaalpaUyPTY2lgFgYWFhimkLFixgZTfLxYsXGQC2e/dupXmPHz+uMt3R0ZH169dPJfYpU6aw8pu6fOyzZ89mVlZWzMfHR6lNd+3axfh8Prt48aLS/Js3b2YA2KVLl1SWV5afn5+ivr///ptpaWmxmTNnqi1bmfZgrHQ7lVVcXMy8vLxYt27dlOri8/ls4MCBKvuifJtnZWUxQ0ND1qFDB1ZYWKi2THFxMbOysmJeXl5KZY4cOcIAsPnz5yumjRkzhjk6OirVs3XrVgaAXb16Ve06l50XgNLngzHGvL29mY+PT5XXv7zY2FhmbGzMevbsySQSCWOMMYlEwoqKipTKZWZmMmtrazZu3DjFNPln0MjIiKWkpCiVHzBgABOJRCwpKUkx7f79+0wgEChtt1u3bjEALCgoSGn+WbNmMQDszJkzimnl9005R0dHNmbMGMX7Vq1aqd3f30R
"text/plain": [
"<Figure size 200x200 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Контрольная выборка: (18167, 6)\n",
"hazardous\n",
"False 16399\n",
"True 1768\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": [
"Тестовая выборка: (18168, 6)\n",
"hazardous\n",
"False 16400\n",
"True 1768\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.hazardous.value_counts())\n",
"print()\n",
"\n",
"\n",
"data = df[['est_diameter_min', 'est_diameter_max', 'relative_velocity', 'miss_distance', 'absolute_magnitude', 'hazardous']].copy()\n",
"\n",
"df_train, df_val, df_test = split_stratified_into_train_val_test(\n",
" data, stratify_colname=\"hazardous\", frac_train=0.60, frac_val=0.20, frac_test=0.20\n",
")\n",
"\n",
"print(\"Обучающая выборка: \", df_train.shape)\n",
"print(df_train.hazardous.value_counts())\n",
"hazardous_counts = df_train['hazardous'].value_counts()\n",
"plt.figure(figsize=(2, 2))# Установка размера графика\n",
"plt.pie(hazardous_counts, labels=hazardous_counts.index, autopct='%1.1f%%', startangle=90)# Построение круговой диаграммы\n",
"plt.title('Распределение классов hazardous в обучающей выборке')# Добавление заголовка\n",
"plt.show()# Отображение графика\n",
"\n",
"print(\"Контрольная выборка: \", df_val.shape)\n",
"print(df_val.hazardous.value_counts())\n",
"hazardous_counts = df_val['hazardous'].value_counts()\n",
"plt.figure(figsize=(2, 2))\n",
"plt.pie(hazardous_counts, labels=hazardous_counts.index, autopct='%1.1f%%', startangle=90)\n",
"plt.title('Распределение классов hazardous в контрольной выборке')\n",
"plt.show()\n",
"\n",
"print(\"Тестовая выборка: \", df_test.shape)\n",
"print(df_test.hazardous.value_counts())\n",
"hazardous_counts = df_test['hazardous'].value_counts()\n",
"plt.figure(figsize=(2, 2))\n",
"plt.pie(hazardous_counts, labels=hazardous_counts.index, autopct='%1.1f%%', startangle=90)\n",
"plt.title('Распределение классов hazardous в тестовой выборке')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## По диаграммам видно, что выборка плохая, слишком большое смещение классов. Проведём аугментацию данных оверсемплингом. Этот метод позволяет увеличить количество примеров меньшинства."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Collecting imblearn\n",
" Downloading imblearn-0.0-py2.py3-none-any.whl.metadata (355 bytes)\n",
"Collecting imbalanced-learn (from imblearn)\n",
" Downloading imbalanced_learn-0.12.4-py3-none-any.whl.metadata (8.3 kB)\n",
"Requirement already satisfied: numpy>=1.17.3 in c:\\users\\annal\\aim\\.venv\\lib\\site-packages (from imbalanced-learn->imblearn) (2.1.1)\n",
"Requirement already satisfied: scipy>=1.5.0 in c:\\users\\annal\\aim\\.venv\\lib\\site-packages (from imbalanced-learn->imblearn) (1.14.1)\n",
"Requirement already satisfied: scikit-learn>=1.0.2 in c:\\users\\annal\\aim\\.venv\\lib\\site-packages (from imbalanced-learn->imblearn) (1.5.2)\n",
"Requirement already satisfied: joblib>=1.1.1 in c:\\users\\annal\\aim\\.venv\\lib\\site-packages (from imbalanced-learn->imblearn) (1.4.2)\n",
"Requirement already satisfied: threadpoolctl>=2.0.0 in c:\\users\\annal\\aim\\.venv\\lib\\site-packages (from imbalanced-learn->imblearn) (3.5.0)\n",
"Downloading imblearn-0.0-py2.py3-none-any.whl (1.9 kB)\n",
"Downloading imbalanced_learn-0.12.4-py3-none-any.whl (258 kB)\n",
"Installing collected packages: imbalanced-learn, imblearn\n",
"Successfully installed imbalanced-learn-0.12.4 imblearn-0.0\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
"pip install imblearn"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Обучающая выборка после oversampling: (100481, 6)\n",
"hazardous\n",
"True 51284\n",
"False 49197\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.over_sampling import ADASYN\n",
"\n",
"# Создание экземпляра ADASYN\n",
"ada = ADASYN()\n",
"\n",
"# Применение ADASYN\n",
"X_resampled, y_resampled = ada.fit_resample(df_train.drop(columns=['hazardous']), df_train['hazardous'])\n",
"\n",
"# Создание нового DataFrame\n",
"df_train_adasyn = pd.DataFrame(X_resampled)\n",
"df_train_adasyn['hazardous'] = y_resampled # Добавление целевой переменной\n",
"\n",
"# Вывод информации о новой выборке\n",
"print(\"Обучающая выборка после oversampling: \", df_train_adasyn.shape)\n",
"print(df_train_adasyn['hazardous'].value_counts())\n",
"hazardous_counts = df_train_adasyn['hazardous'].value_counts()\n",
"plt.figure(figsize=(2, 2))\n",
"plt.pie(hazardous_counts, labels=hazardous_counts.index, autopct='%1.1f%%', startangle=90)\n",
"plt.title('Распределение классов hazardous в тренировачной выборке после ADASYN')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Проведём балансировку методом андерсемплинга для уменьшения примеров большинства."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Обучающая выборка после undersampling: (10608, 6)\n",
"hazardous\n",
"False 5304\n",
"True 5304\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=['hazardous']), df_train['hazardous'])\n",
"\n",
"# Создание нового DataFrame\n",
"df_train_undersampled = pd.DataFrame(X_resampled)\n",
"df_train_undersampled['hazardous'] = y_resampled # Добавление целевой переменной\n",
"\n",
"# Вывод информации о новой выборке\n",
"print(\"Обучающая выборка после undersampling: \", df_train_undersampled.shape)\n",
"print(df_train_undersampled['hazardous'].value_counts())\n",
"\n",
"# Визуализация распределения классов\n",
"hazardous_counts = df_train_undersampled['hazardous'].value_counts()\n",
"plt.figure(figsize=(2, 2))\n",
"plt.pie(hazardous_counts, labels=hazardous_counts.index, autopct='%1.1f%%', startangle=90)\n",
"plt.title('Распределение классов hazardous в тренировочной выборке после Undersampling')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Датасет 2. Indicators of Heart Disease\n",
"## По данным CDC, болезни сердца являются основной причиной смерти представителей большинства р а с в США (афроамериканцев, американских индейцев и коренных жителей Аляски, а также белых). Около половины всех американцев (47%) имеют по крайней мере 1 из 3 основных факторов риска сердечно-сосудистых заболеваний: высокое кровяное давление, высокий уровень холестерина и курение. Другие ключевые показатели включают состояние диабета, ожирение (высокий ИМТ), недостаточную физическую активность или чрезмерное употребление алкоголя. Выявление и профилактика факторов, оказывающих наибольшее влияние на болезни сердца, очень важны в здравоохранении. В свою очередь, развитие вычислительной техники позволяет применять методы машинного обучения для обнаружения \"закономерностей\" в данных, которые могут предсказать состояние пациента.\n",
"## В данном датасете объектами исследования являются жители США. В нём содержатся данные атрибуты: HeartDisease, BMI, Smoking, AlcoholDrinking, Stroke, PhysicalHealth, MentalHealth, DiffWalking, Sex, AgeCategory, Race, Diabetic, PhysicalActivity, GenHealth, SleepTime, Asthma, KidneyDisease, SkinCancer. Цель создания данного датасета- научиться прогнозировать сердечный приступ."
]
},
{
"cell_type": "code",
"execution_count": 40,
"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"
]
}
],
"source": [
"import pandas as pd \n",
"df = pd.read_csv(\"C://Users//annal//aim//static//csv//heart.csv\")\n",
"print('количество колонок: ' + str(df.columns.size)) \n",
"print('колонки: ' + ', '.join(df.columns))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Получим сведения о пропущенных данных. Из вывода видно, что пропущенные данные не обнаружены."
]
},
{
"cell_type": "code",
"execution_count": 41,
"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"
]
}
],
"source": [
"# Количество пустых значений признаков\n",
"print(df.isnull().sum())\n",
"\n",
"print()\n",
"\n",
"# Есть ли пустые значения признаков\n",
"print(df.isnull().any())\n",
"\n",
"print()\n",
"\n",
"# Процент пустых значений признаков\n",
"for i in df.columns:\n",
" null_rate = df[i].isnull().sum() / len(df) * 100\n",
" if null_rate > 0:\n",
" print(f\"{i} процент пустых значений: %{null_rate:.2f}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## При беглом осмотре данных, зашумлённости не обнаружила. Необходимо ознакомиться с данными о выбросах."
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Колонка BMI:\n",
" Есть выбросы: Да\n",
" Количество выбросов: 10396\n",
" Минимальное значение: 12.945\n",
" Максимальное значение: 42.505\n",
" 1-й квантиль (Q1): 24.03\n",
" 3-й квантиль (Q3): 31.42\n",
"\n",
"Колонка PhysicalHealth:\n",
" Есть выбросы: Да\n",
" Количество выбросов: 47146\n",
" Минимальное значение: 0.0\n",
" Максимальное значение: 5.0\n",
" 1-й квантиль (Q1): 0.0\n",
" 3-й квантиль (Q3): 2.0\n",
"\n",
"Колонка MentalHealth:\n",
" Есть выбросы: Да\n",
" Количество выбросов: 51576\n",
" Минимальное значение: 0.0\n",
" Максимальное значение: 7.5\n",
" 1-й квантиль (Q1): 0.0\n",
" 3-й квантиль (Q3): 3.0\n",
"\n",
"Колонка SleepTime:\n",
" Есть выбросы: Да\n",
" Количество выбросов: 4543\n",
" Минимальное значение: 3.0\n",
" Максимальное значение: 11.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",
" # Устраняем выбросы: заменяем значения ниже нижней границы на саму нижнюю границу, а выше верхней — на верхнюю\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": [
"## Необходимо построить диаграммы для поиска зависимостей сердечного приступа(HeartDisease ) от других колонок."
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"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": "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
"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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
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAqYAAAIjCAYAAADRBtn0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABIWUlEQVR4nO3deXQUVd7G8aez0IGQBGQLDIFIUHZl0xlEwAEkkIgCDghBIeCo47AouAzoAGFAWURfFRWVGUFBXBDFhWAA2cWFxSCgImICgiAESEKING1S7x+e9NB0J+ls9M3w/ZzTB+rW7apfdRX65HbVjc2yLEsAAACAnwX4uwAAAABAIpgCAADAEARTAAAAGIFgCgAAACMQTAEAAGAEgikAAACMQDAFAACAEQimAAAAMALBFAAAAEYgmAJABYmOjlZiYqK/y3CzcOFC2Ww2paen+9x327ZtFV8YirV+/XrZbDatX7/e36UAFYZgikrpxRdfVGxsrOrVq6fg4GBFRkaqW7dueu2115Sfn+/v8lBKiYmJstlsCg8P16+//uqxft++fbLZbLLZbJozZ06F1pKcnKykpKRy3WZBsHjnnXe8rk9MTFT16tXLdZ++eOGFF7Rw4cKLvt/yUFx4vuGGG9S6deuLXNV/LVmyRE8//bRHe3p6uutattlsCg4OVu3atXXdddfpkUce0cGDBy9+sYABCKaolF599VWFhoZq0qRJ+s9//qNHHnlEf/jDH5SYmKihQ4f6uzyUQVBQkHJzc/Xhhx96rHv99dcVEhJyUepITk7W1KlTL8q+/K0yB1PTFRZMCwwZMkSLFi3Sf/7zH02aNElNmjTR008/rRYtWujNN99069u1a1f9+uuv6tq1awVXDfhPkL8LAEpj48aNCg4OdmsbO3asatWqpeeee04zZsxQdHS0f4pDmdjtdnXu3FlvvPGGBg0a5LZuyZIlio+P17Jly/xUHeCbM2fOKDQ0tNh+7du31+233+7WduDAAfXq1UvDhw9XixYtdPXVV0uSAgICLtoPZoC/MGKKSunCUFqgIIwGBPz30n7//fcVHx+vBg0ayG63KyYmRtOmTVNeXp7be2+44Qa3r9Zq166t+Ph47d69262fzWbz+Ir3iSeekM1m0w033ODWfvbsWSUlJenKK69USEiI6tevrwEDBmj//v2S/vt13oWjVaNGjZLNZnO7P7HgK8sqVaro+PHjbv0/++wzV90XfqW5dOlSdejQQVWrVlXt2rV1++236/Dhwx6f3XfffadBgwapTp06qlq1qpo1a6ZHH31UkpSUlOT22Xh7Fdz3Vh5fnSYkJGjlypXKzMx0tW3dulX79u1TQkKC1/dkZmbq/vvvV1RUlOx2u5o2bapZs2a53dpR8HnPmTNHL7/8smJiYmS323XNNddo69atrn6JiYl6/vnnJcntGAvMmTNH1113nWrVqqWqVauqQ4cOhX49Xx5WrlypLl26KDQ0VGFhYYqPj9eePXvc+nz99ddKTExUkyZNFBISosjISI0cOVInTpwoctvR0dHas2ePNmzY4DrOC69jh8Oh8ePHq06dOgoNDVX//v09rsHCrF271lV7jRo1dMstt+jbb791rS/JtVWeFi9e7Pp3cdlll2nw4MH66aef3Pps2rRJAwcOVKNGjWS32xUVFaVx48Z53GZScAvG/v37FRcXp7CwMA0dOlQ33HCDVqxYoQMHDriOxZcfmBs3bqyFCxfq3Llzmj17tqvd2z2m+/bt06233qrIyEiFhISoYcOGGjx4sLKysirseI8ePaoRI0aoYcOGstvtql+/vm655RaP+5Z9uW6BCzFiikotMzNTv/32m06fPq3t27drzpw5Gjx4sBo1auTqs3DhQlWvXl3jx49X9erVtXbtWk2ePFnZ2dl64okn3LbXvHlzPfroo7IsS/v379dTTz2luLi4Iu/3yszM1IwZMzza8/LydNNNN+mTTz7R4MGDdd999+n06dNavXq1du/erZiYGK/b++GHHzR//vxC9xcYGKjFixdr3LhxrrYFCxYoJCREZ8+edeu7cOFCjRgxQtdcc41mzJihX375Rc8884w+/fRTffXVV6pRo4ak30NNly5dFBwcrLvvvlvR0dHav3+/PvzwQz322GMaMGCAmjZt6truuHHj1KJFC919992uthYtWhRac0kNGDBAf/vb3/Tuu+9q5MiRkn4fLW3evLnat2/v0T83N1fdunXT4cOHdc8996hRo0basmWLJk6cqCNHjnh8lbpkyRKdPn1a99xzj2w2m2bPnq0BAwboxx9/VHBwsO655x79/PPPWr16tRYtWuSxv2eeeUY333yzhg4dqnPnzunNN9/UwIED9dFHHyk+Pr7Y4zt9+rQyMjI82h0Oh0fbokWLNHz4cMXGxmrWrFnKzc3VvHnzdP311+urr75yBZ3Vq1frxx9/1IgRIxQZGak9e/bo5Zdf1p49e/T555+7BevzPf300xozZoyqV6/u+kGkXr16bn3GjBmjmjVrasqUKUpPT9fTTz+t0aNH66233iryONesWaM+ffqoSZMmSkpK0q+//qq5c+eqc+fO2rFjh6Kjo8vt2srKyvL6mTqdTo+2xx57TJMmTdKgQYP017/+VcePH9fcuXPVtWtXt38XS5cuVW5uru69917VqlVLX375pebOnatDhw5p6dKlbtv87bffFBsbq+uvv15z5sxRtWrVFBkZqaysLB06dEj/93//J0k+30PcqVMnxcTEaPXq1YX2OXfunGJjY+VwODRmzBhFRkbq8OHD+uijj5SZmamIiIgKOd5bb71Ve/bs0ZgxYxQdHa1jx45p9erVOnjwoOt69PW6BTxYQCXWrFkzS5LrNWzYMMvpdLr1yc3N9XjfPffcY1WrVs06e/asq61bt25Wt27d3Po98sgjliTr2LFjrjZJ1pQpU1zLDz/8sFW3bl2rQ4cObu9/5ZVXLEnWU0895bH//Px8y7IsKy0tzZJkLViwwLVu0KBBVuvWra2oqChr+PDhrvYFCxZYkqwhQ4ZYbdq0cbWfOXPGCg8PtxISEixJ1tatWy3Lsqxz585ZdevWtVq3bm39+uuvrv4fffSRJcmaPHmyq61r165WWFiYdeDAAa91Xqhx48ZutZ2vW7duVqtWrbyuK87w4cOt0NBQy7Is6y9/+YvVo0cPy7IsKy8vz4qMjLSmTp3q+syeeOIJ1/umTZtmhYaGWt9//73b9iZMmGAFBgZaBw8etCzrv593rVq1rJMnT7r6vf/++5Yk68MPP3S1jRo1yirsP5EXXlPnzp2zWrdubXXv3t2t/cLPad26dW7Xq7dXwfFblmWdPn3aqlGjhnXXXXe5bffo0aNWRESEW7u36/yNN96wJFkbN250tRVcR2lpaa62Vq1aeVz75/ft2bOn27Uwbtw4KzAw0MrMzPT6+RRo27atVbduXevEiROutp07d1oBAQHWsGHDvL6nqGvLm4Iai3qdfz2mp6dbgYGB1mOPPea2nV27dllBQUFu7d4+0xkzZlg2m83t38rw4cMtSdaECRM8+sfHx1uNGzf2aPd2HV/olltusSRZWVlZlmX99/pZt26dZVmW9dVXX1mSrKVLlxa6jfI+3lOnThVbd0muW+BCfJWPSm3BggVavXq1Xn/9dd155516/fXX3UZaJKlq1aquvxeMVHXp0kW5ubn67rvv3Po6nU5lZGTo+PHj+uyzz/Tee+/pqquuUu3atb3u//Dhw5o7d64mTZrkMRKybNky1a5dW2PGjPF4X2GjV9u3b9fSpUs1Y8YMt9sRznfHHXfou+++c31lv2zZMkVERKhHjx5u/bZt26Zjx47p73//u9t9afHx8WrevLlWrFghSTp+/Lg2btyokSNHuo00F1VncfLy8pSRkaGMjAydO3euVNtISEjQ+vXrdfToUa1du1ZHjx4t9Gv8pUuXqkuXLqpZs6ZrvxkZGerZs6fy8vK0ceNGt/633Xabatas6Vru0qWLJOnHH3/0qbbzr6lTp04pKytLXbp00Y4dO3x6/+TJk7V69WqPV69evdz6rV69WpmZmRoyZIjbcQUGBuqPf/y
"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": "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/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": "iVBORw0KGgoAAAANSUhEUgAAAtEAAAJbCAYAAAAi4si5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABiW0lEQVR4nO3de3yO9ePH8fe9sc1hB6eZZRgTc86xORWNEWlSEUUSyTlKdHBMDkWOkepLSeUQEuWQnI2Y8zGHyakNzTYbxrbr90eP3T+3jXbpnvser+fjscej+7o+u+73fd+jt2uf63NZDMMwBAAAACDLXBwdAAAAAMhpKNEAAACASZRoAAAAwCRKNAAAAGASJRoAAAAwiRINAAAAmESJBgAAAEyiRAMAAAAmUaIBAAAAkyjRAAAAgEmUaACA00lMTNTEiROtj+Pi4jRt2jTHBYLdDBs2TBaLxdTYixcvZnMqwDxKNHCfmD17tiwWi3bs2JFh3+effy6LxaLw8HClpqY6IB1gTp48efTee+9p7ty5On36tIYNG6affvrJ0bH+s+TkZE2ZMkX169dXgQIF5ObmJn9/f7Vq1Urfffddtv/5vNPfE5L0+OOPq1KlStmaITMffvihlixZcs+fF/gvcjk6AIDstXjxYr3++utq0KCBvv/+e7m6ujo6EvCvXF1dNXz4cHXs2FFpaWny8vLS8uXLHR3rP7lw4YKaN2+uyMhIhYWF6b333lPBggUVHR2tX3/9Ve3bt9exY8f0/vvvOzrqPffhhx/q2WefVXh4uKOjAFlGiQbuY+vWrdMLL7ygChUq6KeffpKHh4ejIwFZNmDAALVt21anT59WcHCwfHx8HB3pP3nppZe0a9cu/fDDD3rmmWds9g0ePFg7duzQkSNHHJQOgFlM5wDuU7t379bTTz+tYsWKaeXKlfL29s4wZsGCBapRo4by5MmjwoUL68UXX9TZs2czPZ7FYsn06+TJkzZjhg0bZvN9H330kSwWix5//HHrttvNiSxVqpRefvllm21xcXHq16+fAgIC5O7urqCgII0dO1ZpaWk249LS0jRp0iRVrlxZHh4eKlKkiJo1a2b9tfXt8qd/pedbt26dzXZ3d3c9/PDDGj16tAzDsHnOXbt2qXnz5vLy8lL+/Pn1xBNPaOvWrZm+fzc7cuSIGjduLD8/P7m7uysgIEDdu3dXbGysdUx6joULF2b4/vz589u8T7GxsXrzzTdVuXJl5c+fX15eXmrevLn27Nlj8332ft9Pnjwpi8Wijz/+OMMxK1WqZPOZp7+edevW2Yxr0aJFhp+bm3MWL15cISEhypUrl/z8/DI9xu08/vjjmX7Wt/6MSv8/zeF2Pxfpdu3apWbNmqlIkSI241q2bHnHLBEREVq5cqW6deuWoUCnq1mzpjp06GCzLTk5WUOHDlVQUJD1Z2XgwIFKTk62GWexWNSrVy8tWbJElSpVkru7uypWrKgVK1b8+xuVBd98843174qCBQuqXbt2On36tM2YjRs36rnnnlOJEiWsWd944w1dvXr1jse2WCxKSkrSV199ZX0/M/t5fPnll+Xj4yNvb2917txZV65csctrA+4WZ6KB+9Dx48fVrFkzubu7a+XKlSpWrFiGMbNnz1bnzp1Vq1YtjR49WjExMZo0aZI2b96sXbt2ZXrWr3Xr1tYCsHHjRs2cOfOOOeLi4jR69Oi7fh1XrlzRY489prNnz+q1115TiRIltGXLFg0ePFh//fWXzYVnXbp00ezZs9W8eXO9+uqrSklJ0caNG7V161bVrFlTc+bMsY5Nz/7JJ5+ocOHCkqSiRYvaPPc777yj4OBgXb16VfPmzdM777wjX19fdenSRZJ04MABNWjQQF5eXho4cKBy586tzz77TI8//rjWr1+vOnXq3PZ1JSUlqXjx4nrqqafk5eWl/fv3a9q0aTp79uxdzfs9ceKElixZoueee06BgYGKiYnRZ599pscee0wHDx6Uv7+/qeOZed//iw0bNujnn3/O0tjx48crJibG9HMUL17c+jOYmJio119//Y7jb/6ZGDVqlM2++Ph4NW/eXIZhqH///goICJAkvfHGG/+aI/1zffHFF7OcPS0tTa1atdKmTZvUrVs3BQcHa9++ffrkk0/0xx9/ZJhDvGnTJi1atEg9evSQp6enJk+erDZt2ujUqVMqVKhQhteS2cV6N27cyLBt1KhRev/99/X888/r1Vdf1YULFzRlyhQ1bNjQ5u+KBQsW6MqVK3r99ddVqFAh/f7775oyZYrOnDmjBQsW3PZ1zpkzR6+++qpq166tbt26SZLKlCljM+b5559XYGCgRo8erZ07d+qLL76Qr6+vxo4dm5W3EsgeBoD7wqxZswxJxrJly4wyZcoYkoymTZtmOvb69euGr6+vUalSJePq1avW7cuWLTMkGUOGDLEZf+PGDUOSMXz48AzPFxUVZd0myRg6dKj18cCBAw1fX1+jRo0axmOPPWbdPnz4cEOSkZaWZvM8JUuWNDp16mR9PHLkSCNfvnzGH3/8YTNu0KBBhqurq3Hq1CnDMAzjt99+MyQZffr0yfBab32O22VPt3btWkOSsXbtWuu2a9euGS4uLkaPHj2s28LDww03Nzfj+PHj1m3nzp0zPD09jYYNG2Y47r/p0aOHkT9//gw5FixYkGFsvnz5bN6na9euGampqTZjoqKiDHd3d2PEiBHWbfZ+36OiogxJxkcffZQhY8WKFW0+88ze1zp16hjNmzfP8HMzdOhQ4+b/PZ0/f97w9PS0jr35GHdSt25do1KlStbHFy5cyPBc6T7//HNDkvHnn39atz322GM2r2HlypWGJOO7776z+d6SJUsaLVq0uGOW1q1bG5KMuLg4m+1Xr141Lly4YP26dOmSdd+cOXMMFxcXY+PGjTbfM2PGDEOSsXnzZus2SYabm5tx7Ngx67Y9e/YYkowpU6ZYt6X/7N/pq2LFitbxJ0+eNFxdXY1Ro0bZZNi3b5+RK1cum+1XrlzJ8LpHjx5tWCwWm/f11s/XMDL+TN869pVXXrHZ3rp1a6NQoUIZxgP3EtM5gPvMyy+/rNOnT6t9+/ZatWpVpmeAduzYofPnz6tHjx4286RbtGih8uXLZ7iA6/r165Ikd3f3LOc4e/aspkyZovfff1/58+e32efr6ytJOnPmzB2PsWDBAjVo0EAFChTQxYsXrV+hoaFKTU3Vhg0bJEk//PCDLBaLhg4dmuEYWV1K61bpZ+pOnTqlcePGKS0tTY0bN5YkpaamatWqVQoPD1fp0qWt31OsWDG1b99emzZtUkJCQpaeIyYmRmvWrNHy5cvVsGHDDGMuX75s89ozO3vo7u4uFxcXa7a///5b+fPnV7ly5bRz507rOHu/7+muXLmSIeO/rTKxaNEibd++XWPGjLnjOEkaOXKkvL291adPn38de7Nr165l+TqArPyMX758WZIynNXNivSfh1v/LMyYMUNFihSxftWvX9+6b8GCBQoODlb58uVt3tv0n8O1a9faHCs0NNTmDG6VKlXk5eWlEydOZMgzbdo0rV69OsNXlSpVbMYtWrRIaWlpev75520y+Pn5qWzZsjYZ8uTJY/3vpKQkXbx4UXXr1pVhGNq1a5fZt8xG9+7dbR43aNBAf//9d5b+nAHZhekcwH0mNjZW33//vVq3bq2DBw+qb9++atq0qc2c6D///FOSVK5cuQzfX758eW3atMlmW1xcnKSMBeBOhg4dKn9/f7322msZ5vWGhITIYrFo8ODB+uCDD6zHvXWe89GjR7V3714VKVIk0+c4f/68pH+mr/j7+6tgwYJZzvdvbl4lwMXFRe+9957atGkj6Z9VFq5cuZLp+xccHKy0tDSdPn1aFStWvONzhIWFadu2bZKkZs2aad68eRnGvPLKK/+aNX0++KeffqqoqCibAntz4bP3+55u6NChmf4D5tYpMulSU1P1zjvvqEOHDhlK262ioqL02Wefafr06aYvjL148aLKli2bpbFZ+RmvWbOmcufOrWHDhqlw4cLW6Ry3vn+Z8fT0lPTPlJKb/yy2adPGuqTcgAEDbD67o0eP6tC
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAq8AAAIjCAYAAAAtE/I+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABKGElEQVR4nO3dd3xUVf7/8fekMKSD9GBMKNIRArEgzZUSCPIVXIwUpdl2RRRRWPiyQLKINHFVbIgrKIqsiKIuwYAKAoIsoKGJtE3oAqFkCJFhTO7vDzfzZZhJH5i5/l7PxyMPuOeee+9n5iQP3pyce8diGIYhAAAAwAQCfF0AAAAAUFqEVwAAAJgG4RUAAACmQXgFAACAaRBeAQAAYBqEVwAAAJgG4RUAAACmQXgFAACAaRBeAQAAYBqEVwCQlJWVJYvFogULFvi6lDK54447dMcdd/i6DFwlZv2+BK4mwivwX2+88YYSExNVq1YtBQcHq3bt2urcubPeffddFRQU+Lo8VMDnn3+uzp07q2bNmgoNDVX9+vWVnJysL774wteluSkMK6X5ysrK8nW5PrFmzRpZLBZ99NFHHvcPHTpU4eHh17iq/5OWlqaUlBSP+y4fv6CgIF133XVq27atnnzySf3444/XtlDApIJ8XQDgL9555x3VqVNHEydOVGRkpM6dO6fvvvtOQ4cO1YoVK/TBBx/4ukSUw/PPP68xY8aoc+fOGj9+vEJDQ7V//359+eWXWrx4sXr06OHrEl3UqFFDCxcudGmbPXu2jhw5or///e9ufVeuXHkty0MppKWl6dVXXy0ywHbr1k2DBw+WYRjKycnRtm3b9M477+i1117TjBkzNHr0aGff2NhY/fLLLwoODr5G1QP+j/AK/NfatWvd/oF44oknVK1aNb3yyiuaNm2a4uLifFMcyuXXX3/VlClT1K1bN48h7+TJkz6oqnhhYWG6//77XdoWL16ss2fPurXDv1y4cEFhYWEl9mvUqJHbWE6fPl29e/fW008/rSZNmigpKUnSbzO1lStXvir1AmbFsgHgv4qa2SgMrAEB//fj8umnn6pXr16Kjo6W1WpVgwYNNGXKFOXn57sce8cdd7j8mrB69erq1auXdu7c6dLPYrG4zdLMmjVLFovFbT3jxYsXlZKSokaNGqly5cqqU6eO7rnnHh04cEBS0WvkRowYIYvFoqFDhzrbFixYIIvFokqVKunUqVMu/Tdu3Oise8uWLS77lixZorZt2yokJETVq1fX/fffr6NHj7q9dz/99JOSk5NVo0YNhYSEqHHjxpowYYIkKSUlpcRfi69Zs8b5PrZo0cLt/CXJzs6WzWZT+/btPe6vWbNmief46aef1K9fP1133XWqXLmyEhIS9Nlnn7n1O3funEaNGqWYmBhZrVY1bNhQM2bMcFlyUjg2zz//vP7+978rNjZWISEh6ty5s9v3RGlduea18FfqH374oVJTU1W3bl1FRESoX79+ysnJkd1u16hRo1SzZk2Fh4dr2LBhstvtbud97733nGN83XXXqX///jp8+HCpavrhhx/Us2dPRUZGKjw8XF26dNF3333n3F/4fVfc19VY47lixQp17NhRYWFhioiIUK9evbRr1y6XPtu3b9fQoUNVv359Va5cWbVr19bw4cN1+vRpl36F378//vijBg4cqKpVq6pDhw4aOnSoXn31VUmuSwRKUq1aNS1evFhBQUGaOnWqs93Tz/PPP/+sYcOG6frrr5fValWdOnV09913uy0j8ebrPX/+vEaNGqW4uDhZrVbVrFlT3bp10/fff+/Sb9OmTerRo4eioqIUGhqqzp0769tvvy3x9QNlwcwrcIVz587p119/1fnz57V161Y9//zz6t+/v2644QZnnwULFig8PFyjR49WeHi4vv76a02aNEk2m02zZs1yOV+TJk00YcIEGYahAwcO6IUXXlBSUpIOHTpUbA3Tpk1za8/Pz9ddd92lr776Sv3799eTTz6p8+fPa9WqVdq5c6caNGjg8Xz79+/XvHnzirxeYGCg3nvvPT311FPOtvnz56ty5cq6ePGiS98FCxZo2LBhuvnmmzVt2jSdOHFCL730kr799lv98MMPqlKliqTf/lHs2LGjgoOD9cgjjyguLk4HDhzQ559/rqlTp+qee+5Rw4YNned96qmn1LRpUz3yyCPOtqZNmxZZc2nUrFlTISEh+vzzzzVy5Ehdd911ZTp+165dat++verWratx48YpLCxMH374ofr06aOlS5eqb9++kqS8vDx17txZR48e1aOPPqobbrhBGzZs0Pjx43X8+HG9+OKLLud99913df78eY0YMUIXL17USy+9pDvvvFM7duxQrVq1KvSaC02bNk0hISEaN26c9u/frzlz5ig4OFgBAQE6e/asUlJS9N1332nBggWqV6+eJk2a5Dx26tSpmjhxopKTk/XQQw/p1KlTmjNnjjp16uQyxkW9Zx07dlRkZKTGjh2r4OBgzZ07V3fccYe++eYb3XrrrerUqZPL0ojCsFb4HxtJuv3220t8jefPn1d2drZbu6cwvnDhQg0ZMkSJiYmaMWOG8vLy9Prrr6tDhw764YcfnP9JXbVqlf7zn/9o2LBhql27tnbt2qU333xTu3bt0nfffecWRO+9917deOONeu6552QYhuLj43Xs2DGtWrXKbflHSW644QZ17txZq1evls1mU2RkpMd+f/zjH7Vr1y6NHDlScXFxOnnypFatWqVDhw45X4e3X++f/vQnffTRR3r88cfVrFkznT59WuvXr9fu3bvVpk0bSdLXX3+tnj17qm3btpo8ebICAgI0f/583XnnnVq3bp1uueWWMr0fQJEMAC4aN25sSHJ+DR482HA4HC598vLy3I579NFHjdDQUOPixYvOts6dOxudO3d26fe///u/hiTj5MmTzjZJxuTJk53bY8eONWrWrGm0bdvW5fi3337bkGS88MILbtcvKCgwDMMwMjMzDUnG/PnznfuSk5ONFi1aGDExMcaQIUOc7fPnzzckGQMGDDBatmzpbL9w4YIRGRlpDBw40JBkbN682TAMw7h06ZJRs2ZNo0WLFsYvv/zi7P+vf/3LkGRMmjTJ2dapUycjIiLCOHjwoMc6rxQbG+tS2+U6d+5sNG/e3OO+kkyaNMmQZISFhRk9e/Y0pk6damzdutWtn6f3rUuXLkbLli1dxrSgoMC4/fbbjRtvvNHZNmXKFCMsLMzYu3evyznHjRtnBAYGGocOHXK5RkhIiHHkyBFnv02bNhmSjKeeesrja+jVq5cRGxvrcd+V32OrV682JBktWrQwLl265GwfMGCAYbFYjJ49e7oc365dO5dzZ2VlGYGBgcbUqVNd+u3YscMICgpya79Snz59jEqVKhkHDhxwth07dsyIiIgwOnXqVKrXUJLC11jcV1hYmLP/+fPnjSpVqhgPP/ywy3l+/vlnIyoqyqXd08/2Bx98YEgy1q5d62ybPHmy82fnSiNGjDCK+udVkjFixIgiX9uTTz5pSDK2bdtmGIb79+XZs2cNScasWbOKPMfVeL1RUVHF1l1QUGDceOONRmJiosvPeF5enlGvXj2jW7duRR4LlBXLBoArzJ8/X6tWrdL777+vBx98UO+//77LbKAkhYSEOP9eOPvTsWNH5eXl6aeffnLp63A4lJ2drVOnTmnjxo365JNPdNNNN6l69eoer3/06FHNmTNHEydOdLtjeunSpapevbpGjhzpdlxRv5rcunWrlixZomnTprksfbjcAw88oJ9++sm5PGDp0qWKiopSly5dXPpt2bJFJ0+e1GOPPeayDq9Xr15q0qSJli9fLkk6deqU1q5dq+HDh7vMWBdXZ0ny8/OVnZ2t7OxsXbp0qdTHpaamatGiRYqPj1d6eromTJigtm3bqk2bNtq9e3eRx505c0Zff/21kpOTnWOcnZ2t06dPKzExUfv27XMulViyZIk6duyoqlWrOvtlZ2era9euys/P19q1a13O3adPH9WtW9e5fcstt+jWW29VWlpaGd+Vog0ePNhlKcytt94qwzA0fPhwl3633nqrDh8+rF9//VW
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtEAAAIrCAYAAAApwMV4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABO60lEQVR4nO3deVhUdf//8deAAm7gikCi4pIr6u1yK5nmQqJhrpVbuWSZ5pJSuZS5VpRlqWXa4h1WWma3mWmi5lqKmlvu3mYoLuEOCCoqzO8Pf5yvE6h8CGTQ5+O65rqYz3nPOe85Tvby8DmfsdntdrsAAAAAZJpLbjcAAAAA5DWEaAAAAMAQIRoAAAAwRIgGAAAADBGiAQAAAEOEaAAAAMAQIRoAAAAwRIgGAAAADBGiAQAAAEOEaAAAAMAQIRoAkOclJiZqypQp1vO4uDhNnz499xrKQ8aNGyebzaYzZ87kditAnkKIBu5RERERstls2rJlS7ptn376qWw2mzp06KCUlJRc6A4wU6BAAY0ePVpz5szR0aNHNW7cOP3444+53Va2iIuLk4eHh2w2m/bt25fl/bz55ptauHBh9jUG3OMI0QAcfP/99xowYICaNGmib775Rq6urrndEnBbrq6uGj9+vHr27KmyZcvq888/1+jRo3O7rWwxf/582Ww2+fj4aM6cOVneDyEayF6EaACWNWvWqFu3bqpevbp+/PFHeXh45HZLQKa9+OKLOnLkiDZs2KAjR47owQcfzO2WssVXX32lRx55RN26ddPcuXNzux0A/x8hGoAkaceOHWrfvr18fX21bNkyeXl5pauZP3++6tWrpwIFCqhkyZJ68skndfz48Qz3Z7PZMnwcPnzYoWbcuHEOr3vnnXdks9nUrFkzayxtzubflS9fXr1793YYi4uL09ChQ+Xv7y93d3dVqlRJb7/9tlJTUx3qUlNTNXXqVAUGBsrDw0OlSpVS69atrektN+s/7ZHW35o1axzG3d3ddf/99ys8PFx2u93hmNu3b1ebNm3k6empwoULq2XLltq4cWOG5+9GBw4cUIsWLeTj4yN3d3f5+/urf//+OnfunFWT1sd3332X7vWFCxd2OE/nzp3TSy+9pMDAQBUuXFienp5q06aNfv/9d4fXZfd5P3z4sGw2m9599910+6xZs6bDn3na+1mzZo1DXWhoaLrPzY19lilTRkFBQcqXL598fHwy3MfNNGvWLMM/679/RqX/mw51s89Fmu3bt6t169YqVaqUQ13btm0z1VNMTIx++eUXde3aVV27dlV0dLQ2bNiQru7gwYPq3LmzfHx85OHhoTJlyqhr166Kj4+XdP3znJSUpNmzZ1s9ZPRn2Lt3bxUtWlReXl7q06ePLl686FBjs9k0aNAgzZ8/X9WrV1eBAgUUFBSkXbt2SZI+/vhjVapUSR4eHmrWrJnDf++S9Msvv+jxxx9X2bJlrc/ysGHDdOnSpUydD8CZ5MvtBgDkvkOHDql169Zyd3fXsmXL5Ovrm64mIiJCffr0UYMGDRQeHq6TJ09q6tSpWr9+vbZv366iRYume03Hjh3VqVMnSdf/5/nJJ5/cso+4uDiFh4dn+X1cvHhRDz30kI4fP67nnntOZcuW1YYNGzRq1Cj99ddfDjee9e3bVxEREWrTpo2eeeYZXbt2Tb/88os2btyo+vXr68svv7Rq03p///33VbJkSUlS6dKlHY79yiuvqFq1arp06ZLmzZunV155Rd7e3urbt68kac+ePWrSpIk8PT01fPhw5c+fXx9//LGaNWumtWvXqmHDhjd9X0lJSSpTpoweffRReXp6avfu3Zo+fbqOHz+epXm/f/75pxYuXKjHH39cAQEBOnnypD7++GM99NBD2rt3r/z8/Iz2Z3Le/4l169bpp59+ylTt5MmTdfLkSeNjlClTxvoMJiYmasCAAbesv/Ez8cYbbzhsi4+PV5s2bWS32xUWFiZ/f39J0rBhwzLdz9dff61ChQqpbdu2KlCggCpWrKg5c+bogQcesGquXLmikJAQJScna/DgwfLx8dHx48e1ePFixcXFycvLS19++aWeeeYZ/fvf/1a/fv0kSRUrVnQ41hNPPKGAgACFh4dr27Zt+uyzz+Tt7a23337boe6XX37RokWLNHDgQElSeHi42rZtq+HDh+ujjz7S888/r/Pnz2vSpEl6+umntWrVKuu18+fP18WLFzVgwACVKFFCmzdv1gcffKBjx45p/vz5mT4vgFOwA7gnff7553ZJ9sWLF9srVqxol2Rv1apVhrVXrlyxe3t722vWrGm/dOmSNb548WK7JPuYMWMc6q9evWqXZB8/fny640VHR1tjkuxjx461ng8fPtzu7e1tr1evnv2hhx6yxsePH2+XZE9NTXU4Trly5ey9evWynk+cONFeqFAh+//+9z+HupEjR9pdXV3tMTExdrvdbl+1apVdkn3IkCHp3uvfj3Gz3tOsXr3aLsm+evVqa+zy5ct2FxcX+/PPP2+NdejQwe7m5mY/dOiQNXbixAl7kSJF7E2bNk2339t5/vnn7YULF07Xx/z589PVFipUyOE8Xb582Z6SkuJQEx0dbXd3d7dPmDDBGsvu8x4dHW2XZH/nnXfS9VijRg2HP/OMzmvDhg3tbdq0Sfe5GTt2rP3G/52dOnXKXqRIEav2xn3cygMPPGCvWbOm9fz06dPpjpXm008/tUuyHzlyxBp76KGHHN7DsmXL7JLsX3/9tcNry5UrZw8NDc1UT4GBgfYePXpYz1955RV7yZIl7VevXrXGtm/fftM/+xv9/XOQJu38Pf300w7jHTt2tJcoUcJhTJLd3d3d4b+Fjz/+2C7J7uPjY09ISLDGR40ale6/m4sXL6Y7fnh4uN1mszmcSyAvYDoHcI/r3bu3jh49qu7du2v58uUZXg3asmWLTp06peeff95hnnRoaKiqVq2qJUuWONRfuXJFkuTu7p7pPo4fP64PPvhAr732mgoXLuywzdvbW5J07NixW+5j/vz5atKkiYoVK6YzZ85Yj+DgYKWkpGjdunWSpP/+97+y2WwaO3Zsun1kNH0hM+Lj43XmzBnFxMRo0qRJSk1NVYsWLSRJKSkpWr58uTp06KAKFSpYr/H19VX37t3166+/KiEhIVPHOHnypFauXKklS5aoadOm6WouXLjg8N4zWrbM3d1dLi4uVm9nz55V4cKFVaVKFW3bts2qy+7znubixYvperzdKjALFizQb7/9prfeeuuWdZI0ceJEeXl5aciQIbetvdHly5czfR9AZj7jFy5ckCSVKFHCqI80O3fu1K5du9StWzdrrFu3bjpz5oyWLVtmjaVNvVq2bFm66Rcm+vfv7/C8SZMmOnv2bLrPZsuWLVW+fHnredpvUTp37qwiRYqkG//zzz+tsQIFClg/JyUl6cyZM3rggQdkt9u1ffv2LPcO5AamcwD3uHPnzumbb75Rx44dtXfvXr3wwgtq1aqVw5zoI0eOSJKqVKmS7vVVq1bVr7/+6jAWFxcnSenC8K2MHTtWfn5+eu6559LN6w0KCpLNZtOoUaP0+uuvW/v9+zzngwcPaufOnSpVqlSGxzh16pSk69NX/Pz8VLx48Uz3dzsdOnSwfnZxcdHo0aPVuXNnSdLp06d18eLFDM9ftWrVlJqaqqNHj6pGjRq3PEZISIg2bdokSWrdurXmzZuXrubpp5++ba9p88E/+ugjRUdHOwTYGwNfdp/3NGPHjs3wHzB/nyKTJiUlRa+88op69OihWrVq3fK9RUdH6+OPP9aMGTOMb4w9c+aMKleunKnazHzG69evr/z582vcuHEqWbKkNZ3j7+fvZr766isVKlRIFSpU0B9//CFJ8vDwUPny5TVnzhyFhoZKkgICAhQWFqb33ntPc+bMUZMmTdSuXTs9+eSTGd7bcDNly5Z1eF6sWDFJ0vnz5+Xp6XnTurRjpL2/v4+fP3/eGouJidGYMWO0aNEih3FJ1vxtIK8gRAP3uHfeeUePP/64JOmTTz5Ro0aNNGrUKH300UdZ3mdsbKwkycfHJ1P1+/btU0REhL766ivlz58/3fbatWtr7Ni
"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": [
"# Список колонок для построения графиков\n",
"columns = ['Stroke', 'BMI','Smoking', 'AlcoholDrinking', 'PhysicalHealth', 'MentalHealth','DiffWalking', 'Sex', 'AgeCategory',\n",
" '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'Зависимость {column} от HeartDisease')\n",
" plt.xlabel('HeartDisease')\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": [
"## Далее создадим выборки. Разбивать данные на классы стоит по критерию сердечного приступа, потому что это то, что будет предсказывать модель."
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"HeartDisease\n",
"No 292422\n",
"Yes 27373\n",
"Name: count, dtype: int64\n",
"\n",
"Обучающая выборка: (191877, 18)\n",
"HeartDisease\n",
"No 175453\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"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Контрольная выборка: (63959, 18)\n",
"HeartDisease\n",
"No 58485\n",
"Yes 5474\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": [
"Тестовая выборка: (63959, 18)\n",
"HeartDisease\n",
"No 58484\n",
"Yes 5475\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": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Обучающая выборка после oversampling: (351819, 51)\n",
"HeartDisease\n",
"Yes 176366\n",
"No 175453\n",
"Name: count, dtype: int64\n"
]
},
{
"data": {
"image/png": "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quDgYA0aNCjL8yelf0PRsGFD+fn5qUqVKnr44Yd1/vx5t/NcPCaXL19evXr10rZt29zOl5aWpvHjxysyMlJ+fn6qWbOmnnnmGbf7ndN9yXgu8vP4SFJ8fLyeeOIJVa9eXX5+fqpXr55ef/31LHNzM8ZjPz8/tWjRQg0aNMhxPM5O5sfBy8tLVatW1QMPPOD2mGV8PuY0VkrpY1jm+7B27VpFRERowYIFioyMlK+vr2rUqKGnnnoq26+5c/u85eY1m5E347UuScePH1fNmjV1zTXXKC4uznV6QT+jLvVeu3hfiNzcRym9X/Ts2VNly5ZVYGCgmjRponfeeSfL+XJ7u/kdhzLMnTtXZcuWVa9evdS/f3/NnTs315eVpNDQUM2bN0/e3t56+eWX83X9Gb2uXbt2WX7n7++v4OBg178nTJig8uXL68EHH5RhGIqLi9OoUaPUpk0bPfjgg1ku/8wzz8jhcOjVV1/N0/3KTr6mUlws486GhoZKkg4cOKCFCxfqtttuU0REhE6dOqVp06apY8eO2rFjh6pUqSJJcjgc6t27t37++WcNHDhQjz76qGJjY7V06VJt27ZNkZGRrtu444471LNnT7fbHT16dLZ5Xn75ZdlsNv33v//V6dOn9fbbb6tr167atGmTAgICJEnLly9Xjx491KJFC40ZM0Z2u10zZ85U586d9dtvv6lVq1ZZrrdatWqaMGGCpPR5Mg899FC2t/38889rwIABuu+++3TmzBm999576tChgzZu3KgyZcpkucwDDzyg9u3bS5K++uorff31126/Hz58uGbNmqWhQ4dq5MiROnjwoCZPnqyNGzdq9erV8vHxyfZxyIvz58+77ltmTqdTffr00apVq/TAAw+oQYMG2rp1q9566y3t2bPnsh/yF5s5c6aee+45vfHGG7rzzjuzPc/lHo933nlHffr00V133aWUlBTNmzdPt912m7777jv16tXLdb4XX3xRY8eOVdu2bTVu3Dj5+vpq3bp1Wr58ubp37y4p/QN72LBhatiwoUaPHq0yZcpo48aN+umnn1z5Mh77li1basKECTp16pTeeecdrV69OstzWr58eb311luSpKNHj+qdd95Rz549deTIkWyf+4udPXs229OdTmeW03L7upg1a5aCgoL0+OOPKygoSMuXL9cLL7ygmJgYTZo0ye06o6Oj1aNHDw0cOFB33323a77wI488oqCgID377LOSpIoVK172vkhS//79de+992rJkiXZDqaSdPr0aXXv3l0VKlTQ008/rTJlyujQoUP66quviuz+pqSk6IYbblBycrIeeeQRVapUSceOHdN3332n8+fPu74yzs/7+WKzZ8+WJEVFRWnKlCm67bbbtG3bNtWrVy/b8/fr18/tK8jHHntMDRo00AMPPOA6rUGDBq7/P3funHr27KkBAwbojjvu0BdffKGHHnpIvr6+rj8uCvt9nJN9+/bpww8/zPH3I0aMUJkyZTR27Fjt3r1bH3zwgQ4fPuwqQVJ6GX3xxRfVtWtXPfTQQ67z/fnnn1nGu/r16+vZZ5+VYRjav3+/3nzzTfXs2dNtxYT77rtPH3/8sfr3768nnnhC69at04QJE7Rz584sY0thMgxDffr00YoVK3TvvfeqWbNmWrx4sf7v//5Px44dc40T2clpPL6Uvn3
"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 = ['Stroke','Smoking', 'AlcoholDrinking', 'DiffWalking', 'Sex', 'AgeCategory', 'Race', 'Diabetic', 'PhysicalActivity',\n",
" '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": [
"## Проведём балансировку методом андерсемплинга для уменьшения примеров большинства."
]
},
{
"cell_type": "code",
"execution_count": 53,
"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()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Датасет 3. Stroke Prediction Dataset\n",
"## По данным Всемирной организации здравоохранения (В О З ), инсульт является второй по значимости причиной смерти в мире, на е г о долю приходится примерно 11% от общего числа смертей.Этот набор данных используется для прогнозирования вероятности инсульта у пациента на основе входных параметров, таких как пол, возраст, различные заболевания и статус курения. Каждая строка в данных предоставляет актуальную информацию о пациенте.\n",
"## В данном датасете объектами исследования являются пациенты. В нём содержатся данные атрибуты: id, gender, age, hypertension, heart_disease, ever_married, work_type, Residence_type, avg_glucose_level, bmi, smoking_status, stroke. Цель создания данного датасета- научиться прогнозировать инсульт."
]
},
{
"cell_type": "code",
"execution_count": 56,
"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"
]
}
],
"source": [
"import pandas as pd \n",
"df = pd.read_csv(\"C://Users//annal//aim//static//csv//healthcare-dataset-stroke-data.csv\")\n",
"print('количество колонок: ' + str(df.columns.size)) \n",
"print('колонки: ' + ', '.join(df.columns))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Получим сведения о пропущенных данных. Из вывода видно, что пропущенные данные есть в столбце bmi."
]
},
{
"cell_type": "code",
"execution_count": 57,
"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",
"bmi процент пустых значений: %3.93\n"
]
}
],
"source": [
"# Количество пустых значений признаков\n",
"print(df.isnull().sum())\n",
"\n",
"print()\n",
"\n",
"# Есть ли пустые значения признаков\n",
"print(df.isnull().any())\n",
"\n",
"print()\n",
"\n",
"# Процент пустых значений признаков\n",
"for i in df.columns:\n",
" null_rate = df[i].isnull().sum() / len(df) * 100\n",
" if null_rate > 0:\n",
" print(f\"{i} процент пустых значений: %{null_rate:.2f}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Необходимо заполнить пропуски данными."
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [],
"source": [
"# Замена пустых данных на медиану\n",
"df[\"bmi\"] = df[\"bmi\"].fillna(df[\"bmi\"].median())"
]
},
{
"cell_type": "code",
"execution_count": 59,
"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 0\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 False\n",
"smoking_status False\n",
"stroke False\n",
"dtype: bool\n",
"\n"
]
}
],
"source": [
"# Количество пустых значений признаков\n",
"print(df.isnull().sum())\n",
"\n",
"print()\n",
"\n",
"# Есть ли пустые значения признаков\n",
"print(df.isnull().any())\n",
"\n",
"print()\n",
"\n",
"# Процент пустых значений признаков\n",
"for i in df.columns:\n",
" null_rate = df[i].isnull().sum() / len(df) * 100\n",
" if null_rate > 0:\n",
" print(f\"{i} процент пустых значений: %{null_rate:.2f}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Далее необходимо ознакомиться с выбросами и усреднить их."
]
},
{
"cell_type": "code",
"execution_count": 60,
"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",
" Количество выбросов: 627\n",
" Минимальное значение: 55.12\n",
" Максимальное значение: 169.35750000000002\n",
" 1-й квантиль (Q1): 77.245\n",
" 3-й квантиль (Q3): 114.09\n",
"\n",
"Колонка bmi:\n",
" Есть выбросы: Да\n",
" Количество выбросов: 126\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",
" # Устраняем выбросы: заменяем значения ниже нижней границы на саму нижнюю границу, а выше верхней — на верхнюю\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": [
"## Необходимо построить диаграммы для поиска зависимостей инсульта(stroke ) от других колонок."
]
},
{
"cell_type": "code",
"execution_count": 61,
"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": "iVBORw0KGgoAAAANSUhEUgAAAq4AAAIjCAYAAADC0ZkAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABmTElEQVR4nO3deXxU9b3/8fc5syeTPSQhEHYRFdGKiriiItTdSmtdWhW99bYXbZXbW7VWBbUXW9tq674Ve69ytbZFf22VRWWpFq1iEXGhgiAIgRAg+2S2c35/TDIyJIGRmeQQ8no+HnmE+Z5Pzvlk8PHwzXe+53sM27ZtAQAAAPs50+kGAAAAgHQQXAEAANArEFwBAADQKxBcAQAA0CsQXAEAANArEFwBAADQKxBcAQAA0CsQXAEAANArEFwBAADQKxBcAeAAMGHCBI0ePbpHrjVkyBBdeeWVPXKt/dn69etlGIZ+8YtfON0K0GcQXIE+5pFHHtHkyZNVXl4uj8ejiooKnXLKKfqf//kfWZbldHtAVm3evFkzZszQihUrnG4FQBa4nW4AQM/63e9+p/79++vWW29Vfn6+6urq9Oabb+rKK6/Uyy+/rP/7v/9zukXs51avXi3T7B3zHps3b9bMmTM1ZMgQHXnkkU63AyBDBFegj1m6dKk8Hk/K2Pe//32VlJTogQce0KxZszRkyBBnmkOv4PP5nG6h27S0tCgnJ8fpNgB0oXf8kxlA1uweWtu1h9VdZ9JefPFFnX322aqsrJTP59Pw4cN15513Kh6Pp/zshAkTZBhG8qu0tFRnn322Vq1alVJnGIZmzJiRMnbPPffIMAxNmDAhZby1tVUzZszQyJEj5ff71b9/f1144YVau3atpC/WFz711FMpPzdt2jQZhpGyBvOpp56SYRjyer3atm1bSv2yZcuSfb/zzjspx55//nmNHTtWgUBApaWl+ta3vqVNmzZ1eO8+/vhjXXTRRerXr58CgYAOPvhg3XLLLZKkGTNmpLw3nX0tXrw4+T5muk51+fLlOv744xUIBDR06FA98sgjKccXL14swzD0+9//XjNnztSAAQOUl5enr3/966qvr1c4HNb111+vsrIyBYNBTZ06VeFwOOUc6a5xbW5u1n/+53+qqqpKPp9PBx98sH7xi1/Itu1kzd7em93/u9jdwoULdeKJJ6qwsFDBYFAHH3ywfvzjHyd/12OOOUaSNHXq1OQ52/+baX+/ly9frpNPPlk5OTnJn62pqdHVV1+t8vJy+f1+HXHEEfrd736319/Ztm1dc8018nq9+tOf/pQcf/rpp5P/LRUXF+viiy/Wxo0b93o+AKmYcQX6qLq6OsViMTU2Nmr58uX6xS9+oYsvvliDBg1K1jz11FMKBoOaPn26gsGgXnvtNd12221qaGjQPffck3K+UaNG6ZZbbpFt21q7dq1+9atf6ayzztKGDRv22MOsWbM6jMfjcZ1zzjl69dVXdfHFF+sHP/iBGhsbtXDhQq1atUrDhw/v9Hxr1qzR448/3uX1XC6Xnn76ad1www3JsdmzZ8vv96u1tTWl9qmnntLUqVN1zDHHaNasWdq6dat+/etf64033tA///lPFRYWSpJWrlypk046SR6PR9dcc42GDBmitWvX6s9//rN++tOf6sILL9SIESOS573hhht0yCGH6JprrkmOHXLIIV32/GXs3LlTZ511li666CJdcskl+v3vf6/vfe978nq9uuqqq1JqZ82apUAgoJtuuklr1qzR/fffL4/HI9M0tXPnTs2YMUNvvvmmnnrqKQ0dOlS33Xbbl+rFtm2dd955WrRoka6++modeeSRmj9/vv7rv/5LmzZt0r333itJ+t///d/kz/ztb3/TY489pnvvvVelpaWSpPLy8i6v8cEHH+icc87RmDFjdMcdd8jn82nNmjV64403JCXe1zvuuEO33XabrrnmGp100kmSpOOPPz55ju3bt+vMM8/UxRdfrG9961sqLy9XKBTShAkTtGbNGl177bUaOnSonn/+eV155ZWqq6vTD37wg077icfjuuqqq/Tcc89p7ty5OvvssyVJP/3pT3Xrrbfqoosu0r/9279p27Ztuv/++3XyySen/LcEIA02gD7p4IMPtiUlvy6//HI7Go2m1LS0tHT4uX//93+3c3Jy7NbW1uTYKaecYp9yyikpdT/+8Y9tSXZNTU1yTJJ9++23J1//6Ec/ssvKyuyxY8em/Pxvf/tbW5L9q1/9qsP1Lcuybdu2161bZ0uyZ8+enTx20UUX2aNHj7arqqrsK664Ijk+e/ZsW5J9ySWX2IcffnhyvLm52c7Pz7cvvfRSW5L99ttv27Zt25FIxC4rK7NHjx5th0KhZP1f/vIXW5J92223JcdOPvlkOy8vz/7ss8867XN3gwcPTultV6eccop92GGHdXpsb0455RRbkv3LX/4yORYOh+0jjzzSLisrsyORiG3btr1o0SJbkj169OjkmG3b9iWXXGIbhmGfeeaZKecdP368PXjw4LR/h3YvvPCCLcm+6667Usa//vWv24Zh2GvWrOnwM+1/T+vWrUvjN7bte++915Zkb9u2rcuat99+u8N/J+3a37NHHnkkZfy+++6zJdlPP/10ciwSidjjx4+3g8Gg3dDQYNv2F/8N3nPPPXY0GrW/+c1v2oFAwJ4/f37y59avX2+7XC77pz/9aco13n//fdvtdncYB7BnLBUA+qjZs2dr4cKFeuaZZ3T11VfrmWeeSZkFlKRAIJD8c2Njo2pra3XSSSeppaVFH3/8cUptNBpVbW2ttm3bpmXLlmnu3LkaM2ZMcuZsd5s2bdL999+vW2+9VcFgMOXYH//4R5WWluq6667r8HOGYXR6vuXLl+v555/XrFmzurxx6Nvf/rY+/vjj5JKAP/7xjyooKNDpp5+eUvfOO++opqZG//Ef/yG/358cP/vsszVq1Cj99a9/lSRt27ZNS5cu1VVXXZUyU72nPvcmHo+rtrZWtbW1ikQiX+pn3W63/v3f/z352uv16t///d9VU1Oj5cuXp9RefvnlKctGxo0bJ9u2O8zMjhs3Ths3blQsFvtSvbz00ktyuVz6/ve/nzL+n//5n7JtWy+//PKXOl9n2mcqX3zxxX3eEcPn82nq1KkpYy+99JIqKip0ySWXJMc8Ho++//3vq6mpSUuWLEmpj0Qi+sY3vqG//OUveumllzRp0qTksT/96U+yLEsXXXRR8u+1trZWFRUVOuigg7Ro0aJ96hvoqwiuQB81fvx4TZw4UZdeeqmeeOIJ3XHHHZo9e3byY1Yp8VHs1772NRUUFCg/P1/9+vXTt771LUlSfX19yvn+/ve/q1+/fiorK9Pxxx+vWCym559/vssAd/vtt6uysjIlaLVbu3atDj74YLnd6a9muummm3TSSSfpnHPO6bKmX79+Ovvss/Xb3/5WkvTb3/5WV1xxRYeg+9lnn0mSDj744A7nGDVqVPL4p59+KklZ3T/1448/Vr9+/VLWy86ZMyetn62srFRubm7K2MiRIyUl1gTvavegXVBQIEmqqqrqMG5ZVoe/77357LPPVFlZqby8vJTx9mUR7e9hJr75zW/qhBNO0L/927+pvLxcF198sX7/+99/qRA7YMAAeb3eDr0fdNBBHf676Kr3WbNm6YUXXtAf/vCHDmtyP/nkE9m2rYMOOij599r+9dFHH6mmpuZL/MYAWOMKQJL09a9/XbfccoveeustnXDCCaqrq9Mpp5yi/Px83XHHHRo+fLj8fr/effdd3XjjjR3CwZgxY/TLX/5SUmIm8je/+Y0mTJigd999VxUVFSm1H330kZ566ik9/fTTXd4s9mUsWLBAr7zyipYtW7bX2quuukqXX365rrvuOi1dulRPPPGE/va3v2XcQ7YMGTIkuU53+/bt+s1vfqNvf/vbGjZsmI477risXcflcn2pcXuXG6r2F4FAQEuXLtWiRYv017/+VfPmzdNzzz2n0047TQsWLOjyd9n9HJmaPHmy5s2bp5///OeaMGFCyiy9ZVkyDEMvv/xyp/3s/mkDgD0juAKQJIVCIUlfBJfFixdr+/b
"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": [
"# Список колонок для построения графиков\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": "markdown",
"metadata": {},
"source": [
"## Далее создадим выборки. Разбивать данные на классы стоит по критерию инсульта, потому что это то, что будет предсказывать модель."
]
},
{
"cell_type": "code",
"execution_count": 62,
"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": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Обучающая выборка после oversampling: (5807, 18)\n",
"stroke\n",
"0 2917\n",
"1 2890\n",
"Name: count, dtype: int64\n"
]
},
{
"data": {
"image/png": "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I0mHDh3SbbfdptjYWIWEhKh169aaOnWq030KtjllyhSFhYWpQ4cOatSoke6++27ZbDYNGTKk0HMV9fgTh1Pr16+vRx55RNnZ2Y77FbwfVq1aVey2Tn4PL1u2TG3atNHzzz/vOG6aNGmiF154wem4kUr3eyvJMVtQ74nzZv/++29FRUWpb9++ys3NddxekmO7OCceR6dr60v6GqWStePl/Zl7KjNmzNDZZ5+t7t27q0ePHpoxY0aJHytJ9erV05QpU5Sdna2XXnqpTNvfsWOH/P39dcEFFxT6WWRkpEJCQhzfv/3228rKytKDDz4oSdqzZ49Gjx6t66+/Xr169Sr0+KeeekoHDx7UO++8U6rXVZRyOWu+IDRWrVpVkrRz50598803uu6669SgQQMdPHhQkyZNUteuXbVx40bHmX95eXnq27evfvnlF91www267777lJaWpnnz5mnDhg1q1KiR4zkGDhyo3r17Oz3vqFGjiqznueeek81m0//+9z8dOnRIr732mnr06KG1a9cqNDRUkrRgwQL16tVL7dq109NPPy0/Pz9NnjxZF198sX7//Xedf/75hbZbu3ZtjRs3TpKUnp6uO++8s8jnfvLJJzVgwADdfvvtSkxM1BtvvKEuXbpozZo1qlKlSqHHDBs2TJ07d5YkffXVV/r666+dfj58+HBNmTJFQ4cO1b333qv4+Hi9+eabWrNmjZYsWaLAwMAi90NppKSkOF7biex2u/r166fFixdr2LBhOuuss/TXX3/p1Vdf1datW/XNN9+U6nkmT56s//u//9PLL7+sQYMGFXmf0+2PiRMnql+/frrxxhuVnZ2tzz77TNddd52+//579enTx3G/MWPGaPTo0erYsaOeeeYZBQUFafny5VqwYIF69uwpKb/xvfXWW3XOOedo1KhRqlKlitasWaOff/7ZUV/Bvm/fvr3GjRungwcPauLEiVqyZEmh32lMTIxeffVVSdLevXs1ceJE9e7dW3v27Cnydy/lz+H85Zdf1LlzZzVo0KDI+1x//fUaNmyYvv/+ez322GOn39H/qlatmt555x3deeeduuqqq3T11VdLklq1aiVJWr9+vTp37qzAwEANGzZM9evX144dO/Tdd9/pueeek5T/YdS5c2dFRkbq0UcfVWBgoCZNmqRu3brpt99+U4cOHZye85577lGNGjU0ZswYLVu2TO+9956qVKmiP/74Q3Xr1tXzzz+vH3/8UePHj1eLFi10yy23OB57psd6Wfb/8OHD1aNHD8f3N998s9O+KtiPBbZt26brr79eI0aM0ODBgzV58mRdd911+vnnn3XppZdKyv+ddu3aVQkJCRo+fLjq1q2rP/74Q6NGjdL+/fv12muvnfJ1lNSiRYv0448/FvvzAQMGqH79+ho3bpyWLVum119/XUeOHNHHH3/suM/tt9+uqVOn6tprr9VDDz2k5cuXa9y4cdq0aVOh917nzp01bNgw2e12bdiwQa+99pr27dvnFPZL+v4sb8ePH1e3bt20fft2jRw5Ug0aNNDMmTM1ZMgQpaSk6L777iv2sdu3b9f7779fqucraKeysrI0Z84cTZgwQSEhIRo7dmyZX8Phw4e1ePFiLV68WLfeeqvatWunX375RaNGjdKuXbv07rvvOu5bmt9bSY7Zk+3Zs0eXX365mjd
"text/plain": [
"<Figure size 600x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"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('Распределение классов Outcome в тренировачной выборке после ADASYN')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Проведём балансировку методом андерсемплинга для уменьшения примеров большинства."
]
},
{
"cell_type": "code",
"execution_count": 64,
"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": [
"# Применение 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('Распределение классов Outcome в тренировочной выборке после Undersampling')\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}