From e261dfffe5382245cc52c5207a9b308c978ac535 Mon Sep 17 00:00:00 2001
From: Divyanshi1002 <157373233+Divyanshi1002@users.noreply.github.com>
Date: Wed, 15 May 2024 23:24:55 +0530
Subject: [PATCH] added EDA
---
Stroke Prediction/StrokePrediction-EDA.ipynb | 1539 ++++++++++++++++++
1 file changed, 1539 insertions(+)
create mode 100644 Stroke Prediction/StrokePrediction-EDA.ipynb
diff --git a/Stroke Prediction/StrokePrediction-EDA.ipynb b/Stroke Prediction/StrokePrediction-EDA.ipynb
new file mode 100644
index 00000000..b10f70ae
--- /dev/null
+++ b/Stroke Prediction/StrokePrediction-EDA.ipynb
@@ -0,0 +1,1539 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "1c72284d-9f26-46dc-9f82-6d8d4e1d70a4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np # linear algebra\n",
+ "import pandas as pd\n",
+ "import seaborn as sns\n",
+ "from imblearn.over_sampling import SMOTE\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "from sklearn.preprocessing import LabelEncoder\n",
+ "import warnings"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "580a1a19-6d2b-4ca5-b953-df5e375b40cd",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " gender | \n",
+ " age | \n",
+ " hypertension | \n",
+ " heart_disease | \n",
+ " ever_married | \n",
+ " work_type | \n",
+ " Residence_type | \n",
+ " avg_glucose_level | \n",
+ " bmi | \n",
+ " smoking_status | \n",
+ " stroke | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 9046 | \n",
+ " Male | \n",
+ " 67.0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " Yes | \n",
+ " Private | \n",
+ " Urban | \n",
+ " 228.69 | \n",
+ " 36.6 | \n",
+ " formerly smoked | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 51676 | \n",
+ " Female | \n",
+ " 61.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " Yes | \n",
+ " Self-employed | \n",
+ " Rural | \n",
+ " 202.21 | \n",
+ " NaN | \n",
+ " never smoked | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 31112 | \n",
+ " Male | \n",
+ " 80.0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " Yes | \n",
+ " Private | \n",
+ " Rural | \n",
+ " 105.92 | \n",
+ " 32.5 | \n",
+ " never smoked | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 60182 | \n",
+ " Female | \n",
+ " 49.0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " Yes | \n",
+ " Private | \n",
+ " Urban | \n",
+ " 171.23 | \n",
+ " 34.4 | \n",
+ " smokes | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id gender age hypertension heart_disease ever_married \\\n",
+ "0 9046 Male 67.0 0 1 Yes \n",
+ "1 51676 Female 61.0 0 0 Yes \n",
+ "2 31112 Male 80.0 0 1 Yes \n",
+ "3 60182 Female 49.0 0 0 Yes \n",
+ "\n",
+ " work_type Residence_type avg_glucose_level bmi smoking_status \\\n",
+ "0 Private Urban 228.69 36.6 formerly smoked \n",
+ "1 Self-employed Rural 202.21 NaN never smoked \n",
+ "2 Private Rural 105.92 32.5 never smoked \n",
+ "3 Private Urban 171.23 34.4 smokes \n",
+ "\n",
+ " stroke \n",
+ "0 1 \n",
+ "1 1 \n",
+ "2 1 \n",
+ "3 1 "
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df = pd.read_csv('healthcare-dataset-stroke-data.csv')\n",
+ "df.head(4)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "161d9eeb-9f1e-4376-99da-8cf4aa63a7ce",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "id int64\n",
+ "gender object\n",
+ "age float64\n",
+ "hypertension int64\n",
+ "heart_disease int64\n",
+ "ever_married object\n",
+ "work_type object\n",
+ "Residence_type object\n",
+ "avg_glucose_level float64\n",
+ "bmi float64\n",
+ "smoking_status object\n",
+ "stroke int64\n",
+ "dtype: object\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(df.dtypes)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d2409329-d7ac-4cd8-8288-badac35a3a6b",
+ "metadata": {},
+ "source": [
+ "# Calculating memory usage diffrenece (in bytes)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e5e41906-36ee-43cf-95f6-f7931893ae3b",
+ "metadata": {},
+ "source": [
+ "## Inital memory "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "7c7631c0-7277-483c-b17b-c05aed1075fd",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Initial memory usage: 1901853 bytes\n"
+ ]
+ }
+ ],
+ "source": [
+ "initial_memory = df.memory_usage(deep=True).sum()\n",
+ "print(\"Initial memory usage:\", initial_memory, \"bytes\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "952832dd-4e2d-45b9-85af-a2262e1b8f4d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Convert categorical columns to category dtype\n",
+ "categorical_columns = ['gender', 'ever_married', 'work_type', 'Residence_type', 'smoking_status']\n",
+ "df[categorical_columns] = df[categorical_columns].astype('category')\n",
+ "\n",
+ "# Convert boolean columns to bool dtype\n",
+ "boolean_columns = ['hypertension', 'heart_disease', 'stroke']\n",
+ "df[boolean_columns] = df[boolean_columns].astype('bool')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8fdc9f2f-d967-44d3-b359-b6595f945079",
+ "metadata": {},
+ "source": [
+ "## Final Memory"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "6390ce5b-9f65-490f-9374-a62d709786db",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Final memory usage: 206230 bytes\n",
+ "Memory saved: 1695623 bytes\n"
+ ]
+ }
+ ],
+ "source": [
+ "final_memory = df.memory_usage(deep=True).sum()\n",
+ "print(\"Final memory usage:\", final_memory, \"bytes\")\n",
+ "print(\"Memory saved:\", initial_memory - final_memory, \"bytes\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "21809a5c-ff09-4879-8ff0-4c1996f47953",
+ "metadata": {},
+ "source": [
+ "# Explore statistical facts"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "c026808c-f60e-49ce-8a29-d907d60bed49",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " id age avg_glucose_level bmi\n",
+ "count 5110.000000 5110.000000 5110.000000 4909.000000\n",
+ "mean 36517.829354 43.226614 106.147677 28.893237\n",
+ "std 21161.721625 22.612647 45.283560 7.854067\n",
+ "min 67.000000 0.080000 55.120000 10.300000\n",
+ "25% 17741.250000 25.000000 77.245000 23.500000\n",
+ "50% 36932.000000 45.000000 91.885000 28.100000\n",
+ "75% 54682.000000 61.000000 114.090000 33.100000\n",
+ "max 72940.000000 82.000000 271.740000 97.600000\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Explore statistical facts\n",
+ "print(df.describe())\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "04d769cb-81c7-47c8-a5c1-21faf3b2f3c7",
+ "metadata": {},
+ "source": [
+ "### percentile "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "cf54b73a-26f5-471c-a3cd-43cbcef6dcf8",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Percentiles for Age: [11. 20. 30. 38. 51. 57. 65. 75.]\n",
+ "Percentiles for Average Glucose Level: [ 65.789 73.76 80.038 85.6 98.914 108.516 124.16 192.181]\n",
+ "Percentiles for BMI: [nan nan nan nan nan nan nan nan]\n",
+ "Percentage of people with hypertension: 9.74559686888454\n",
+ "Percentage of people with heart disease: 5.401174168297456\n"
+ ]
+ }
+ ],
+ "source": [
+ "\n",
+ "# Calculate specific percentiles for a column using numpy\n",
+ "percentiles_custom_age = np.percentile(df['age'], [10, 20, 30, 40, 60, 70, 80, 90])\n",
+ "percentiles_custom_glucose = np.percentile(df['avg_glucose_level'], [10, 20, 30, 40, 60, 70, 80, 90])\n",
+ "percentiles_custom_bmi = np.percentile(df['bmi'], [10, 20, 30, 40, 60, 70, 80, 90])\n",
+ "percent_hypertension_true = (df['hypertension'].sum() / len(df['hypertension'])) * 100\n",
+ "percent_heart_disease_true = (df['heart_disease'].sum() / len(df['heart_disease'])) * 100\n",
+ "\n",
+ "# Print the calculated percentiles\n",
+ "print(\"Percentiles for Age:\", percentiles_custom_age)\n",
+ "print(\"Percentiles for Average Glucose Level:\", percentiles_custom_glucose)\n",
+ "print(\"Percentiles for BMI:\", percentiles_custom_bmi)\n",
+ "print(\"Percentage of people with hypertension:\", percent_hypertension_true)\n",
+ "print(\"Percentage of people with heart disease:\", percent_heart_disease_true)\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "53c7697d-a7a4-4e5a-8cc9-b468cbb366f9",
+ "metadata": {},
+ "source": [
+ "## median- central tendency"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "91e00dfc-5eca-4a2a-9f54-4704b76657c9",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Median Age: 45.0\n",
+ "Median Avg. Glucose Level: 91.88499999999999\n",
+ "Median BMI: 28.1\n",
+ "Median Hypertension: 0.0\n",
+ "Median Heart Disease: 0.0\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Calculate median for each column\n",
+ "median_age = df['age'].median()\n",
+ "median_glucose_level = df['avg_glucose_level'].median()\n",
+ "median_bmi = df['bmi'].median()\n",
+ "median_hypertension = df['hypertension'].median()\n",
+ "median_heart_disease = df['heart_disease'].median()\n",
+ "\n",
+ "# Print the calculated medians\n",
+ "print(\"Median Age:\", median_age)\n",
+ "print(\"Median Avg. Glucose Level:\", median_glucose_level)\n",
+ "print(\"Median BMI:\", median_bmi)\n",
+ "print(\"Median Hypertension:\", median_hypertension)\n",
+ "print(\"Median Heart Disease:\", median_heart_disease)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "905c348c-24c0-488e-a1ee-54880e7b17c1",
+ "metadata": {},
+ "source": [
+ "## Mean "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "87e60403-b555-4c7a-af7d-5bdb2c8bff7e",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Mean Age: 43.226614481409\n",
+ "Mean Avg. Glucose Level: 106.1476771037182\n",
+ "Mean BMI: 28.893236911794666\n",
+ "Mean Hypertension: 0.0974559686888454\n",
+ "Mean Heart Disease: 0.05401174168297456\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Calculate mean for each column\n",
+ "mean_age = df['age'].mean()\n",
+ "mean_avg_glucose_level = df['avg_glucose_level'].mean()\n",
+ "mean_bmi = df['bmi'].mean()\n",
+ "mean_hypertension = df['hypertension'].mean()\n",
+ "mean_heart_disease = df['heart_disease'].mean()\n",
+ "\n",
+ "# Print the calculated means\n",
+ "print(\"Mean Age:\", mean_age)\n",
+ "print(\"Mean Avg. Glucose Level:\", mean_avg_glucose_level)\n",
+ "print(\"Mean BMI:\", mean_bmi)\n",
+ "print(\"Mean Hypertension:\", mean_hypertension)\n",
+ "print(\"Mean Heart Disease:\", mean_heart_disease)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "962a27f0-460e-45f7-a38b-6b970fbea3e4",
+ "metadata": {},
+ "source": [
+ "# Missing value"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "93a2aeb0-1aa8-48fa-b085-56effd68dfe2",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "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"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.isnull().sum()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b2252f2c-209e-4c44-be35-4d825bc498d3",
+ "metadata": {},
+ "source": [
+ "### The Decision Tree model learns from known BMI values alongside age and gender features to predict missing BMI values, leveraging inherent patterns in the data for effective imputation."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "26b29149-704f-431d-9295-f9016a8a81ec",
+ "metadata": {},
+ "source": [
+ "### from https://www.kaggle.com/code/thomaskonstantin/analyzing-and-modeling-stroke-data rather than imputing it naively with the mean or the median, we used a simple decision tree model which based on the age and gender of all other samples gave us a fair prediction for the missing values."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "b0a5febe-b1de-40cb-820f-804e37c9e4a3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.pipeline import Pipeline\n",
+ "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n",
+ "from sklearn.tree import DecisionTreeRegressor\n",
+ "from sklearn.compose import ColumnTransformer\n",
+ "from sklearn.impute import SimpleImputer\n",
+ "\n",
+ "# Define the pipeline\n",
+ "preprocessor = ColumnTransformer(\n",
+ " transformers=[\n",
+ " ('gender', OneHotEncoder(), ['gender']) # One-hot encode the 'gender' column\n",
+ " ],\n",
+ " remainder='passthrough' # Keep other columns unchanged\n",
+ ")\n",
+ "\n",
+ "# Define the pipeline for predicting BMI\n",
+ "DT_bmi_pipe = Pipeline([\n",
+ " ('preprocessor', preprocessor), \n",
+ " ('imputer', SimpleImputer(strategy='mean')), \n",
+ " ('scaler', StandardScaler()), \n",
+ " ('regressor', DecisionTreeRegressor()) \n",
+ "])\n",
+ "\n",
+ "# Prepare data for training\n",
+ "X_train = df.dropna(subset=['bmi'])[['age', 'gender']].copy()\n",
+ "y_train = df.dropna(subset=['bmi'])['bmi']\n",
+ "\n",
+ "# Fit the pipeline\n",
+ "DT_bmi_pipe.fit(X_train, y_train)\n",
+ "\n",
+ "# Identify rows with missing BMI\n",
+ "missing_bmi = df[df['bmi'].isnull()][['age', 'gender']]\n",
+ "\n",
+ "# Predict missing BMI values\n",
+ "predicted_bmi = DT_bmi_pipe.predict(missing_bmi[['age', 'gender']])\n",
+ "\n",
+ "# Update the DataFrame with predicted BMI values\n",
+ "df.loc[missing_bmi.index, 'bmi'] = predicted_bmi\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3e17df6f-a99a-4823-a47e-4d2ce64a95f8",
+ "metadata": {},
+ "source": [
+ "# Stroke Prediction | 2. EDA"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "28275fee-d437-450c-b79c-af4f4fd2e76a",
+ "metadata": {},
+ "source": [
+ "### Removing ID as it is nothing but a unique number assigned to every patient to keep track of them and making them unique"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "a1f10bce-01a5-4c7e-a052-6e2002d86733",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df.drop(\"id\",inplace=True,axis=1)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c077395d-eef5-4fb5-b2ac-6fb19a72ffb7",
+ "metadata": {},
+ "source": [
+ "## Univariate"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "46fb7595-7a36-4e75-888a-a7b909fda796",
+ "metadata": {},
+ "source": [
+ "#### Gender "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "c5e9f126-2eb1-4cc2-b377-47d7ca16d7a2",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Unique values\n",
+ " ['Male', 'Female', 'Other']\n",
+ "Categories (3, object): ['Female', 'Male', 'Other']\n",
+ "Value Counts\n",
+ " gender\n",
+ "Female 2994\n",
+ "Male 2115\n",
+ "Other 1\n",
+ "Name: count, dtype: int64\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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aAAAAJcxI9YQAQAAnA2BCAAAGI9ABAAAjEcgQpVw1VVX6fnnn/d1GzDEvn375HA4lJWV5etWYJjU1FQ+985HCEQo4/7775fD4Siz7d6929etAb+r9HU7bFjZr55ITEyUw+HQ/ffff+kbg5H279+vBx98UJGRkQoICFB0dLQeffRRHT582K7hP3qVC4EIZ9S7d28dPHjQa2vUqJGv2wLOKioqSgsXLtTx4//3pbUnTpzQggUL1LBhQx92BpP88MMP6tixo3bt2qV33nlHu3fv1uzZs+0PAz5y5Mgl7+nkyZOX/DmrGgIRzsjpdCo8PNxr8/f318cff6z27dsrMDBQjRs31sSJE3Xq1Cn7cQ6HQ6+++qr69u2roKAgNW/eXBkZGdq9e7e6du2qmjVr6k9/+pP27NljP2bPnj3q37+/wsLCVKtWLV1//fVauXLlWfvLy8vTQw89pPr168vlcql79+7avHnzRfvzQNXQvn17RUVF6cMPP7SPffjhh2rYsKGuu+46+9iyZct04403KiQkRHXr1lXfvn29XpNnsm3bNvXp00e1atVSWFiY7rvvPv38888XbS6ouhITExUQEKAVK1bo5ptvVsOGDdWnTx+tXLlSP/30kx5//HF17dpVP/74o0aOHGlfhT/d8uXL1bx5c9WqVcv+D+rp3njjDTVv3lyBgYFq1qyZXnnlFXus9JbvokWLdPPNNyswMFDz58+/JHOvyghEOGdffvml4uPj9eijj+q7777Tq6++qtTUVD311FNedZMnT1Z8fLyysrLUrFkz3XPPPfqv//ovJScna9OmTbIsS8OHD7frCwoKdOuttyo9PV3ffvutevfurX79+ik7O/t3e7nrrruUm5urzz//XJmZmWrfvr169Ojhk/95oXJ58MEHNXfuXHt/zpw5ZT6R/ujRo0pKStKmTZuUnp4uPz8/3X777SopKTnjOfPy8tS9e3ddd9112rRpk5YtW6acnBz95S9/uahzQdVz5MgRLV++XH/7299Uo0YNr7Hw8HANGjRIixYt0gcffKAGDRpo0qRJ9lX4UseOHdPUqVP19ttva+3atcrOztaoUaPs8fnz52v8+PF66qmntGPHDj399NP6xz/+obfeesvr+f7+97/r0Ucf1Y4dOxQbG3txJ345sIDfSEhIsPz9/a2aNWva25133mn16NHDevrpp71q3377bSsiIsLel2SNGzfO3s/IyLAkWW+++aZ97J133rECAwPP2kPLli2tl156yd6Pjo62ZsyYYVmWZX355ZeWy+WyTpw44fWYJk2aWK+++up5zxeXh4SEBKt///5Wbm6u5XQ6rX379ln79u2zAgMDrUOHDln9+/e3EhISzvjYQ4cOWZKsrVu3WpZlWXv37rUkWd9++61lWZY1efJkq1evXl6P2b9/vyXJ2rlz58WcFqqYjRs3WpKsxYsXn3F8+vTpliQrJyfH69+1UnPnzrUkWbt377aPzZw50woLC7P3mzRpYi1YsMDrcZMnT7ZiYmIsy/q/1+/zzz9fMZMyhDFf3YHz061bN82aNcver1mzptq0aaP169d7XREqLi7WiRMndOzYMQUFBUmS2rRpY4+XfjVK69atvY6dOHFCHo9HLpdLBQUFmjBhgpYuXaqDBw/q1KlTOn78+O9eIdq8ebMKCgpUt25dr+PHjx//w9seuPzVr19fcXFxSk1NlWVZiouLU7169bxqdu3apfHjx+urr77Szz//bF8Zys7OVqtWrcqcc/Pmzfriiy9Uq1atMmN79uzRNddcc3EmgyrLuoAvgQgKClKTJk3s/YiICOXm5kr6z9XNPXv2aPDgwRoyZIhdc+rUqTLf6t6xY8dy92AiAhHOqGbNmmratKnXsYKCAk2cOFF33HFHmfrAwED75+rVq9s/l94XP9Ox0l9Co0aNUlpamqZOnaqmTZuqRo0auvPOO1VUVHTG3goKChQREaHVq1eXGePtqpD+c9us9LbszJkzy4z369dP0dHRev311xUZGamSkhK1atXqrK+5fv366dlnny0zFhERUbHNo0pr2rSpHA6HduzYodtvv73M+I4dO3TFFVeofv36v3uO0/+9lP7zb2ZpwCooKJAkvf766+rUqZNXnb+/v9d+zZo1yzUHUxGIcM7at2+vnTt3lglKF2r9+vW6//777X88CgoKtG/fvrP24Xa7Va1aNV111VUV2gsuD71791ZRUZEcDkeZtROHDx/Wzp079frrr+umm26SJK1bt+6s52vfvr0++OADXXXVVapWjX828fvq1q2rW265Ra+88opGjhzptY7I7XZr/vz5io+Pl8PhUEBAgIqLi8/r/GFhYYqMjNQPP/ygQYMGVXT7RmNRNc7Z+PHjNW/ePE2cOFHbt2/Xjh07tHDhQo0bN+6Cznv11Vfrww8/VFZWljZv3qx77rnndxe3SlLPnj0VExOj2267TStWrNC+ffu0YcMGPf7449q0adMF9YLLg7+/v3bs2KHvvvuuzP+ar7jiCtWtW1evvfaadu/erVWrVikpKems50tMTNSRI0d0991365tvvtGePXu0fPlyPfDAA+f9Cw2Xv5dfflmFhYWKjY3V2rVrtX//fi1btky33HKLrrzySnvZwVVXXaW1a9fqp59+Oq93LE6cOFEpKSl68cUX9a9//Utbt27V3LlzNX369Is1JSMQiHDOYmNjtWTJEq1YsULXX3+9OnfurBkzZig6OvqCzjt9+nRdccUV+tOf/qR+/fopNjZW7du3/916h8Ohzz77TF26dNEDDzyga665RgMHDtSPP/5or1kCXC6XXC5XmeN+fn5auHChMjMz1apVK40cOVLPPffcWc8VGRmp9evXq7i4WL169VLr1q01YsQIhYSEyM+Pf0bh7eqrr9amTZvUuHFj/eUvf1GTJk00dOhQdevWTRkZGapTp44kadKkSdq3b5+aNGly1ltov/XQQw/pjTfe0Ny5c9W6dWvdfPPNSk1N5bPiLpDDupCVXwAAAJcB/msDAACMRyACAADGIxABAADjEYgAAIDxCEQAAMB4BCIAAGA8AhEAADAegQgAABiPQAQAf+D+++/Xbbfd5us2AFxEBCIAAGA8AhEAXGSWZenUqVO+bgPAWRCIAFQZv/76qwYNGqSaNWsqIiJCM2bMUNeuXTVixAhJUmFhoUaNGqUrr7xSNWvWVKdOnbR69Wr78ampqQoJCdHy5cvVvHlz1apVS71799bBgwftmuLiYiUlJSkkJER169bVmDFj9NuvfCwpKVFKSooaNWqkGjVqqG3btnr//fft8dWrV8vhcOjzzz9Xhw4d5HQ6tW7duov6ZwPgwhCIAFQZSUlJWr9+vT755BOlpaXpyy+/1D//+U97fPjw4crIyNDChQu1ZcsW3XXXXerdu7d27dpl1xw7dkxTp07V22+/rbVr1yo7O1ujRo2yx6dNm6bU1FTNmTNH69at05EjR7R48WKvPlJSUjRv3jzNnj1b27dv18iRI3XvvfdqzZo1XnV///vf9cwzz2jHjh1q06bNRfpTAVAhLACoAjwej1W9enXrvffes4/l5eVZQUFB1qOPPmr9+OOPlr+/v/XTTz95Pa5Hjx5WcnKyZVmWNXfuXEuStXv3bnt85syZVlhYmL0fERFhTZkyxd4/efKk1aBBA6t///6WZVnWiRMnrKCgIGvDhg1ezzN48GDr7rvvtizLsr744gtLkvXRRx9VzOQBXHTVfB3IAOBc/PDDDzp58qRuuOEG+1hwcLCuvfZaSdLWrVtVXFysa665xutxhYWFqlu3rr0fFBSkJk2a2PsRERHKzc2VJOXn5+vgwYPq1KmTPV6tWjV17NjRvm22e/duHTt2TLfccovX8xQVFem6667zOtaxY8cLmTKAS4hABOCyUFBQIH9/f2VmZsrf399rrFatWvbP1atX9xpzOBxl1gj90fNI0tKlS3XllVd6jTmdTq/9mjVrnvN5AfgWgQhAldC4cWNVr15d33zzjRo2bCjpP1d0/vWvf6lLly667rrrVFxcrNzcXN10003leo7g4GBFREToq6++UpcuXSRJp06dUmZmptq3by9JatGihZxOp7Kzs3XzzTdXzOQA+ByBCECVULt2bSUkJGj06NGqU6eOQkND9cQTT8jPz08Oh0PXXHONBg0apPj4eE2bNk3XXXedDh06pPT0dLVp00ZxcXHn9DyPPvqonnnmGV199dVq1qyZpk+frry8PK8+Ro0apZEjR6qkpEQ33nij8vPztX79erlcLiUkJFykPwEAFxOBCECVMX36dA0bNkx9+/aVy+XSmDFjtH//fgUGBkqS5s6dqyeffFKPPfaYfvrpJ9WrV0+dO3dW3759z/k5HnvsMR08eFAJCQny8/PTgw8+qNtvv135+fl2zeTJk1W/fn2lpKTohx9+UEhIiNq3b6//+Z//qfA5A7g0HNb53DwHgErk6NGjuvLKKzVt2jQNHjzY1+0AqMK4QgSgyvj222/1/fff64YbblB+fr4mTZokSerfv7+POwNQ1RGIAFQpU6dO1c6dOxUQEKAOHTroyy+/VL169XzdFoAqjltmAADAeHx1BwAAMB6BCAAAGI9ABAAAjEcgAgAAxiMQAQAA4xGIAACA8QhEAADAeAQiAABgvP8HOxHSS0HfUcEAAAAASUVORK5CYII=",
+ "text/plain": [
+ "