{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8a492400-1dbe-4dd0-89e4-3d9f2361c095",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "1136028d-8f8e-4e24-a417-7485647ffc4a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0       3   \n",
       "1            2         1       1   \n",
       "2            3         1       3   \n",
       "3            4         1       1   \n",
       "4            5         0       3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  \n",
       "0      0         A/5 21171   7.2500   NaN        S  \n",
       "1      0          PC 17599  71.2833   C85        C  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3      0            113803  53.1000  C123        S  \n",
       "4      0            373450   8.0500   NaN        S  "
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt \n",
    "import seaborn as sns\n",
    "import pandas as pd\n",
    "df=pd.read_csv('Titanic-Dataset.csv')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e9c69e75-8c20-486a-ac16-b80984d4ab56",
   "metadata": {},
   "outputs": [],
   "source": [
    "#check Missing value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "6a617ff2-9859-4906-95d9-bf03f04e157a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "PassengerId      0\n",
       "Survived         0\n",
       "Pclass           0\n",
       "Name             0\n",
       "Sex              0\n",
       "Age            177\n",
       "SibSp            0\n",
       "Parch            0\n",
       "Ticket           0\n",
       "Fare             0\n",
       "Cabin          687\n",
       "Embarked         2\n",
       "dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    " df.isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fb6b2c35-78a4-4a0e-8f8a-21afa13dee27",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Handle Missing value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "8f98172a-a745-4093-838c-a267386fc9fb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Columns with more than 30% missing values:\n",
      "Cabin    77.104377\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "missing_percentage = df.isnull().mean() * 100  # Calculate the percentage of missing values\n",
    "\n",
    "# Filter columns with more than 30% (or 50%) missing values\n",
    "columns_with_missing_30 = missing_percentage[missing_percentage > 30]\n",
    "\n",
    "# Display the columns with more than 30% missing values\n",
    "print(\"Columns with more than 30% missing values:\")\n",
    "print(columns_with_missing_30)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "f27ea843-14f8-4c1e-a655-1ba8cb53b532",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Columns dropped: ['Cabin']\n",
      "Remaining columns: Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',\n",
      "       'Parch', 'Ticket', 'Fare', 'Embarked'],\n",
      "      dtype='object')\n"
     ]
    }
   ],
   "source": [
    "missing_percentage = df.isnull().mean() * 100\n",
    "threshold = 30 \n",
    "# Filter columns with more than the threshold percentage of missing values\n",
    "columns_to_drop = missing_percentage[missing_percentage > threshold].index\n",
    " # Drop the columns\n",
    "df_cleaned = df.drop(columns=columns_to_drop)\n",
    " # Display the resulting dataframe after removing columns with too many missing valu\n",
    "print(f\"Columns dropped: {list(columns_to_drop)}\")\n",
    "print(f\"Remaining columns: {df_cleaned.columns}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "13b8c0bd-e243-4336-9abe-a418402cc3c3",
   "metadata": {},
   "outputs": [],
   "source": [
    "######################################################################"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "05f50ab2-f979-4640-9fba-6ef231778255",
   "metadata": {},
   "outputs": [],
   "source": [
    "#Handling Outliers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "90a29457-3a18-42eb-a220-16afbcaf7919",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>PassengerId_Outlier</th>\n",
       "      <th>Survived_Outlier</th>\n",
       "      <th>Pclass_Outlier</th>\n",
       "      <th>Age_Outlier</th>\n",
       "      <th>SibSp_Outlier</th>\n",
       "      <th>Parch_Outlier</th>\n",
       "      <th>Fare_Outlier</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Palsson, Master. Gosta Leonard</td>\n",
       "      <td>male</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>349909</td>\n",
       "      <td>21.0750</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)</td>\n",
       "      <td>female</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>347742</td>\n",
       "      <td>11.1333</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>11</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Sandstrom, Miss. Marguerite Rut</td>\n",
       "      <td>female</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>PP 9549</td>\n",
       "      <td>16.7000</td>\n",
       "      <td>G6</td>\n",
       "      <td>S</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>14</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Andersson, Mr. Anders Johan</td>\n",
       "      <td>male</td>\n",
       "      <td>39.0</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>347082</td>\n",
       "      <td>31.2750</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>871</th>\n",
       "      <td>872</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Beckwith, Mrs. Richard Leonard (Sallie Monypeny)</td>\n",
       "      <td>female</td>\n",
       "      <td>47.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>11751</td>\n",
       "      <td>52.5542</td>\n",
       "      <td>D35</td>\n",
       "      <td>S</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>879</th>\n",
       "      <td>880</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Potter, Mrs. Thomas Jr (Lily Alexenia Wilson)</td>\n",
       "      <td>female</td>\n",
       "      <td>56.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>11767</td>\n",
       "      <td>83.1583</td>\n",
       "      <td>C50</td>\n",
       "      <td>C</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>880</th>\n",
       "      <td>881</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>Shelley, Mrs. William (Imanita Parrish Hall)</td>\n",
       "      <td>female</td>\n",
       "      <td>25.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>230433</td>\n",
       "      <td>26.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>885</th>\n",
       "      <td>886</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Rice, Mrs. William (Margaret Norton)</td>\n",
       "      <td>female</td>\n",
       "      <td>39.0</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>382652</td>\n",
       "      <td>29.1250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>889</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Johnston, Miss. Catherine Helen \"Carrie\"</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>W./C. 6607</td>\n",
       "      <td>23.4500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>293 rows × 19 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     PassengerId  Survived  Pclass  \\\n",
       "1              2         1       1   \n",
       "7              8         0       3   \n",
       "8              9         1       3   \n",
       "10            11         1       3   \n",
       "13            14         0       3   \n",
       "..           ...       ...     ...   \n",
       "871          872         1       1   \n",
       "879          880         1       1   \n",
       "880          881         1       2   \n",
       "885          886         0       3   \n",
       "888          889         0       3   \n",
       "\n",
       "                                                  Name     Sex   Age  SibSp  \\\n",
       "1    Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "7                       Palsson, Master. Gosta Leonard    male   2.0      3   \n",
       "8    Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)  female  27.0      0   \n",
       "10                     Sandstrom, Miss. Marguerite Rut  female   4.0      1   \n",
       "13                         Andersson, Mr. Anders Johan    male  39.0      1   \n",
       "..                                                 ...     ...   ...    ...   \n",
       "871   Beckwith, Mrs. Richard Leonard (Sallie Monypeny)  female  47.0      1   \n",
       "879      Potter, Mrs. Thomas Jr (Lily Alexenia Wilson)  female  56.0      0   \n",
       "880       Shelley, Mrs. William (Imanita Parrish Hall)  female  25.0      0   \n",
       "885               Rice, Mrs. William (Margaret Norton)  female  39.0      0   \n",
       "888           Johnston, Miss. Catherine Helen \"Carrie\"  female   NaN      1   \n",
       "\n",
       "     Parch      Ticket     Fare Cabin Embarked  PassengerId_Outlier  \\\n",
       "1        0    PC 17599  71.2833   C85        C                False   \n",
       "7        1      349909  21.0750   NaN        S                False   \n",
       "8        2      347742  11.1333   NaN        S                False   \n",
       "10       1     PP 9549  16.7000    G6        S                False   \n",
       "13       5      347082  31.2750   NaN        S                False   \n",
       "..     ...         ...      ...   ...      ...                  ...   \n",
       "871      1       11751  52.5542   D35        S                False   \n",
       "879      1       11767  83.1583   C50        C                False   \n",
       "880      1      230433  26.0000   NaN        S                False   \n",
       "885      5      382652  29.1250   NaN        Q                False   \n",
       "888      2  W./C. 6607  23.4500   NaN        S                False   \n",
       "\n",
       "     Survived_Outlier  Pclass_Outlier  Age_Outlier  SibSp_Outlier  \\\n",
       "1               False           False        False          False   \n",
       "7               False           False        False           True   \n",
       "8               False           False        False          False   \n",
       "10              False           False        False          False   \n",
       "13              False           False        False          False   \n",
       "..                ...             ...          ...            ...   \n",
       "871             False           False        False          False   \n",
       "879             False           False        False          False   \n",
       "880             False           False        False          False   \n",
       "885             False           False        False          False   \n",
       "888             False           False        False          False   \n",
       "\n",
       "     Parch_Outlier  Fare_Outlier  \n",
       "1            False          True  \n",
       "7             True         False  \n",
       "8             True         False  \n",
       "10            True         False  \n",
       "13            True         False  \n",
       "..             ...           ...  \n",
       "871           True         False  \n",
       "879           True          True  \n",
       "880           True         False  \n",
       "885           True         False  \n",
       "888           True         False  \n",
       "\n",
       "[293 rows x 19 columns]"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "# Detect Outliers\n",
    "\n",
    "\n",
    "data = df.copy()\n",
    "\n",
    "def detect_outliers_iqr(column):\n",
    "    Q1 = column.quantile(0.25)\n",
    "    Q3 = column.quantile(0.75)\n",
    "    IQR = Q3 - Q1\n",
    "    lower_bound = Q1 - 1.5 * IQR\n",
    "    upper_bound = Q3 + 1.5 * IQR\n",
    "    # Return a boolean series indicating if the value is an outlier\n",
    "    return (column < lower_bound) | (column > upper_bound)\n",
    "\n",
    "# Apply the IQR method to each numeric feature in the DataFrame\n",
    "for col in data.select_dtypes(include=['number']).columns:  # Only select numeric columns\n",
    "    data[f'{col}_Outlier'] = detect_outliers_iqr(data[col])\n",
    "\n",
    "# Filter the DataFrame to display rows where any outlier flag is True\n",
    "outliers_only = data[data.filter(like='_Outlier').any(axis=1)]\n",
    "# Display the filtered DataFrame with outliers\n",
    "outliers_only\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "38a01f27-e7c5-46f3-aff5-5152686c595b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Sum of null values in each column:\n",
      "PassengerId      0\n",
      "Survived         0\n",
      "Pclass           0\n",
      "Name             0\n",
      "Sex              0\n",
      "Age            188\n",
      "SibSp           46\n",
      "Parch          213\n",
      "Ticket           0\n",
      "Fare           116\n",
      "Cabin          687\n",
      "Embarked         2\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "data = df.copy()  # Removed indentation here\n",
    "\n",
    "def replace_outliers_with_nan(column):\n",
    "    # Check if the column is numeric\n",
    "    if np.issubdtype(column.dtype, np.number):\n",
    "        Q1 = column.quantile(0.25)\n",
    "        Q3 = column.quantile(0.75)\n",
    "        IQR = Q3 - Q1\n",
    "        lower_bound = Q1 - 1.5 * IQR\n",
    "        upper_bound = Q3 + 1.5 * IQR\n",
    "        # Replace outliers with NaN\n",
    "        return column.where((column >= lower_bound) & (column <= upper_bound), np.nan)\n",
    "    else:\n",
    "        # If not numeric, return the column unchanged\n",
    "        return column\n",
    "\n",
    "# Replace outliers with NaN for each feature\n",
    "for col in data.columns:\n",
    "    data[col] = replace_outliers_with_nan(data[col])\n",
    "\n",
    "null_counts = data.isnull().sum()\n",
    "print(\"Sum of null values in each column:\")\n",
    "print(null_counts)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8a36df48-91f2-4cdc-8d46-f3315d3ffe02",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Now Handle missing value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "ae162a7f-6dc5-4702-899f-e81cf98dc2ca",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Columns with more than 30% missing values:\n",
      "Cabin    77.104377\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "missing_percentage = data.isnull().mean() * 100  # Calculate the percentage of missing values\n",
    "\n",
    "# Filter columns with more than 30% (or 50%) missing values\n",
    "columns_with_missing_30 = missing_percentage[missing_percentage > 30]\n",
    "\n",
    "# Display the columns with more than 30% missing values\n",
    "print(\"Columns with more than 30% missing values:\")\n",
    "print(columns_with_missing_30)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "aaeb7a3b-a539-4b98-aac2-c29bfc9481c1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Columns dropped: ['Cabin']\n",
      "Remaining columns: Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',\n",
      "       'Parch', 'Ticket', 'Fare', 'Embarked'],\n",
      "      dtype='object')\n"
     ]
    }
   ],
   "source": [
    "\n",
    "missing_percentage = df.isnull().mean() * 100\n",
    "threshold = 30 \n",
    "# Filter columns with more than the threshold percentage of missing values\n",
    "columns_to_drop = missing_percentage[missing_percentage > threshold].index\n",
    "# Drop the columns\n",
    "df.drop(columns=columns_to_drop, inplace=True)  # Removed the extra brackets around columns_to_drop\n",
    "# Display the resulting dataframe after removing columns with too many missing values\n",
    "print(f\"Columns dropped: {list(columns_to_drop)}\")\n",
    "print(f\"Remaining columns: {df.columns}\")  # Changed df_cleaned to df since inplace=True modifies df directly"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "744eb515-0dbc-4231-8681-2986890e8b95",
   "metadata": {},
   "outputs": [],
   "source": [
    "##############################################################################"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a8bc38b9-c17e-4451-8051-df0d1b31bef5",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Visualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "ae90a8d9-d8e0-408b-9b52-2b38e747f962",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of males: 314\n",
      "Number of females: 577\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/tmp/ipykernel_127/4253619690.py:4: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n",
      "  print(\"Number of males:\", gender_counts[1])  # Assuming 1 is for male\n",
      "/tmp/ipykernel_127/4253619690.py:5: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n",
      "  print(\"Number of females:\", gender_counts[0])  # Assuming 0 is for female\n"
     ]
    }
   ],
   "source": [
    "# Check the gender column\n",
    "gender_counts = df['Sex'].value_counts()  # 'sex' is typically coded as 0 (female) \n",
    "# Display the counts\n",
    "print(\"Number of males:\", gender_counts[1])  # Assuming 1 is for male\n",
    "print(\"Number of females:\", gender_counts[0])  # Assuming 0 is for female"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "402f1ef4-c30f-4557-b9bf-0882b20c1bbb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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p05Vp06dtG3bNtWuXVuS9NVXX6l79+5q166d3nzzTQUEBGjFihV66KGHdOHChXwHoKFDh6pHjx5atmyZzp8/Lw8PjwJrP3HihDp06KCsrCy9+OKLioiI0Oeff67x48frwIEDeuONNxxfP953332qU6eOXnnlFUkq0le8Q4cO1YwZM7R69WrdfffdysnJ0dKlSzVs2DBVqJD//62HDh1SgwYN9PDDDyswMFDHjh3TggUL1KZNG+3Zs0dVqlQpdF1F3Udjx47VsmXLNH36dLVo0ULnz5/Xrl27dOrUqatuy+nTpyVJU6ZMUUhIiM6dO6dVq1apU6dOWrduXb7ri19//XXddtttmjdvniTpueee0z333KODBw8qICBA0uXQ9cgjj+jee+/Vq6++6nj9MzMzC9w/hcn7A5WnQoUKqlChgi5cuKCoqCgdPXpUzzzzjJo2bardu3fr+eef1/fff6+1a9c6ndH//PPPtW3bNr388suy2WyaOHGievToocGDB+vnn3/W/PnzlZaWprFjx+qBBx7Q9u3bHfMfOHBA7du31/DhwxUQEKBDhw5pzpw5jjP4hb0HJem9997ToEGDdO+992rp0qXy8PDQW2+9pZiYGK1evVpdunSRJA0cOFBbt27VSy+9pPr16+u3337T1q1br/naFSYlJUUDBgzQuHHjNGXKFK1atUqTJk1SWFiYBg0adM35jTH59r0k5eTk5Gvbs2ePOnTooJo1a+rVV19VSEiIVq9erSeffFInT57UlClTJF2+hOr06dMaP368qlevrqysLK1du1b333+/Fi9enK+ujz/+WBs2bNDzzz+vkJAQBQYG6osvvlD37t01bNgwDR8+XJKu68x1WFiYWrVqpcTERF26dEnu7gX/Wb7nnnuUk5OjWbNmqWbNmjp58qQSExP122+/OfrExcVp8uTJeuSRRzR58mRlZWVp9uzZuvPOO7V582Y1atRIUtGPBUX5PBf3+Fkc3t7e6tq1q1asWKGjR4+qRo0aRX4NN27cqLvuukudO3fWc889J0mOy7WKerxZsWKFRo4cqdGjR+uVV15RhQoVtH//fu3Zs8dRY0pKitq2basKFSro+eefV506dbRx40ZNnz5dhw4d0uLFixUaGlrq7xtcgwFKaPHixUaSSUpKMpmZmaZ27dqmdevWJjc31xhjTFRUlLn99tsd/Q8ePGgkmcWLF+dbliQzZcoUx/MpU6YYSebVV1916te8eXMjyaxcudLRlp2dbapWrWruv/9+R9tXX31lJJmWLVs66jHGmEOHDhkPDw8zfPhwR9ttt91mWrRoYbKzs53W1bNnTxMaGmpycnKctnfQoEFF2j9PP/20kWT+85//OLU//vjjxmazmX379jnaatWqZXr06FGk5f6+b1RUlOnbt68xxph//etfxmazmYMHD5oPP/zQSDJfffVVocu5dOmSOXfunPH19TV/+9vfHO15++738xZ1HzVu3Nj06dOnSNtxNZcuXTLZ2dmmS5cu5r777nO0572HmjRpYi5duuRo37x5s5Fkli9fbowxJicnx4SFhRX6+teqVeuaNURFRRlJ+R4DBgwwxhgzY8YMU6FCBZOUlOQ03z//+U8jycTHxzvaJJmQkBBz7tw5R9vHH39sJJnmzZs71Thv3jwjyezcubPAunJzc012drY5fPiwkWQ++eQTx7S89+jBgweNMcacP3/eBAYGml69ejktIycnxzRr1sy0bdvW0VaxYkUTGxt7zf1ypSvXacz/7bsr3/uNGjUyMTEx11xmrVq1Ctz3v3/8/jgSExNjatSoYdLS0pyWM2rUKOPl5WVOnz5d4Hry3mfDhg0zLVq0cJomyQQEBOSb98SJE/mOV1eT956dPXt2oX0eeughI8kcP37cGJP/M3jy5EkjycybN6/QZRw5csS4u7ub0aNHO7WfPXvWhISEmH79+hU6b2HHgqJ8not6bCiMJPPEE08UOn3ixIkFvpd+X3thr6Gvr68ZPHjwVdf/+2VcebwZNWqUqVSp0lXnHTFihKlYsaI5fPiwU/srr7xiJJndu3cbY4r/vsH14bIElApPT09Nnz5dW7Zsue6vo37vyjumGzZsKJvN5rg2TZLc3d1Vt27dAr9e79+/v9PZs1q1aqlDhw766quvJEn79+/XDz/8oAEDBki6fJYu73HPPffo2LFj2rdvn9MyH3jggSLV/uWXX6pRo0Zq27atU/uQIUNkjNGXX35ZpOVczdChQ/Xpp5/q1KlTWrhwoTp37lzoSADnzp1znOF2d3eXu7u7KlasqPPnz2vv3r2FrqM4+6ht27b697//raefflpff/21MjIyirwtb775plq2bCkvLy+5u7vLw8ND69atK7C2Hj16yM3NzfG8adOmkuR4D+zbt0+//vpr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Pq29e/dq69at+vDDD0u07jFjxujdd99Vjx499MILL6hWrVr617/+pTfeeEOPP/646tevXyrb2Lx582sOVO7v768//vGPmj17tqpUqaKIiAitX79eCxcuVKVKla65jqLuo3bt2qlnz55q2rSpKleurL1792rZsmVq3759ocFWuhwUX3zxRU2ZMkVRUVHat2+fXnjhBUVGRhZ4x/y1VKhQQS+++KKGDx/ueP1/++03TZ06tViXJVxNbGysPvroI/3xj3/UmDFj1LRpU+Xm5urIkSNKSEjQuHHj1K5du+tez2233aY6dero6aefljFGgYGB+uyzz5y+Gi1MxYoV9dprr2nw4ME6ffq0+vbtq2rVqunEiRPasWOHTpw4oQULFigtLU2dO3dW//79ddttt8nPz09JSUn64osvCj0jdzP529/+pjvuuEN33nmnHn/8cUVEROjs2bPav3+/PvvsM8f17T179tTKlSs1cuRI9e3bV7/88otefPFFhYaGXvPSmTx+fn6qVauWPvnkE3Xp0kWBgYGOz9TVHDlyRJs2bVJubq7S0tK0bds2x1fer776qqKjowudd+fOnRo1apQefPBB1atXT56envryyy+1c+dOx9nXiIgIvfDCC3r22Wf1888/q3v37qpcubKOHz+uzZs3O87CFudYUJTPc2kcP48fP+4YFu/s2bPatWuX3n33Xe3YsUNjxozRo48+6uhbnNewSZMm+vrrr/XZZ58pNDRUfn5+atCgQZGPN48++qi8vb3VsWNHhYaGKiUlRTNmzFBAQIDatGkjSXrhhRe0Zs0adejQQU8++aQaNGigixcv6tChQ4qPj9ebb76pGjVqlPh9gxJy2a1suOX9frSEK/Xv399IchotwRhj0tLSzPDhw01wcLDx9fU1vXr1MocOHSp0tIQTJ044zT948GDj6+ubb31XjsyQd7fxsmXLzJNPPmmqVq1q7Ha7ufPOO82WLVvyzb9jxw7Tr18/U61aNePh4WFCQkLMXXfdZd58880ibW9hDh8+bPr372+CgoKMh4eHadCggZk9e3a+O4hLOlpCYQoaLeHo0aPmgQceMJUrVzZ+fn6me/fuZteuXaZWrVpOdxQXNFqCMUXbR08//bRp3bq1qVy5srHb7aZ27dpmzJgx5uTJk1etNzMz04wfP95Ur17deHl5mZYtW5qPP/7YDB482Glkg6vdeX7le8gYY9555x1Tr1494+npaerXr28WLVqUb5mFufI9VZBz586ZyZMnmwYNGhhPT08TEBBgmjRpYsaMGWNSUlKcarvyjvDCtiVv/3/44YeOtj179phu3boZPz8/U7lyZfPggw+aI0eO5NvmgkYuMMaY9evXmx49epjAwEDj4eFhqlevbnr06OFYx8WLF81f/vIX07RpU+Pv72+8vb1NgwYNzJQpU8z58+evug8KGy2hoH1X1H1/tfd4UlJSgaOuHDx40AwdOtRUr17deHh4mKpVq5oOHTqY6dOnO/V7+eWXTUREhLHb7aZhw4bm73//u+N483sFvWZ51q5da1q0aGHsdruRdNU78vNe57yHm5ubqVy5smnVqpWJjY113E3/e1d+Bo8fP26GDBlibrvtNuPr62sqVqxomjZtaubOnes0aogxl0fh6Ny5s/H39zd2u93UqlXL9O3b16xdu9bRp6jHgqJ+notybCjM7/dNhQoVjL+/v2nSpIl57LHHzMaNGwucp6iv4fbt203Hjh2Nj4+PkWSioqKMMUU/3ixdutR07tzZBAcHG09PTxMWFmb69euXbySTEydOmCeffNJERkYaDw8PExgYaFq1amWeffZZpxFSivO+wfWxGXON2zQBAACAWwSjJQAAAMAyCLcAAACwDMItAAAALINwCwAAAMsg3AIAAMAyCLcAAACwDH7EQZd/u/3XX3+Vn59fmfzcIgAAAIrH/P8f+ggLC1OFClc5P+vicXbN0aNHzYABA0xgYKDx9vY2zZo1cxpkPzc310yZMsWEhoYaLy8vExUVZXbt2uW0jIsXL5pRo0aZoKAg4+PjY3r16mV++eWXItfwyy+/OA0kzYMHDx48ePDgwePmfFwr47n0zO2ZM2fUsWNHde7cWf/+979VrVo1HThwwOknAGfNmqU5c+ZoyZIlql+/vqZPn65u3bpp37598vPzk3T5ZzA/++wzrVixQkFBQRo3bpx69uyp5ORkubm5XbOOvOX88ssv8vf3vyHbCgAAgJJLT09XeHi4I7cVxqW/UPb000/ru+++04YNGwqcboxRWFiYYmNjNXHiRElSZmamgoODNXPmTI0YMUJpaWmqWrWqli1bpoceekiS9Ouvvyo8PFzx8fGKiYnJt9zMzExlZmY6nuftrJMnTxJuAQAAbkLp6emqUqWK0tLSrprXXHrm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V5d13T766CNVrFhRd955p6Nt48aNeuihhzRw4EDt2LFDAwcOVL9+/fSf//zH0adp06aKiIjQP/7xD1eUDaAMhIeHa8WKFcrIyHC0Xbx4UcuXL1fNmjVdUtP8+fP14IMPys/Pz9F2/vx5dezYUS+//HKh8w0YMEAbNmzQ3r17y6JM3OIItygX7Ha7QkJCnB5ubm6SpM8++0ytWrWSl5eXateurWnTpunSpUuOeW02m9566y317NlTPj4+atiwoTZu3Kj9+/erU6dO8vX1Vfv27XXgwAHHPAcOHNC9996r4OBgVaxYUW3atNHatWuvWmNaWpoee+wxVatWTf7+/rrrrru0Y8eOq86zYsUK9e7d26lt3rx56tatmyZNmqTbbrtNkyZNUpcuXfJdAtG7d28tX768KLsPwC2oZcuWqlmzplauXOloW7lypcLDw9WiRQunvl988YXuuOMOVapUSUFBQerZs6fTMa0ge/bs0T333KOKFSsqODhYAwcO1MmTJwvtn5ubqw8//DDfMWvgwIF6/vnn1bVr10LnDQoKUocOHThmoUgItyjXVq9erT//+c968skntWfPHr311ltasmSJXnrpJad+L774ogYNGqTt27frtttuU//+/TVixAhNmjRJW7ZskSSNGjXK0f/cuXO65557tHbtWm3btk0xMTHq1auXjhw5UmAdxhj16NFDKSkpio+PV3Jyslq2bKkuXbro9OnThda/YcMGtW7d2qlt48aN+a7BjYmJUWJiolNb27ZttXnzZmVmZl57RwG4JT3yyCNavHix4/miRYs0dOjQfP3Onz+vsWPHKikpSevWrVOFChV03333KTc3t8DlHjt2TFFRUWrevLm2bNmiL774QsePH1e/fv0KrWXnzp367bff8h2ziqpt27basGFDieZFOWMAixs8eLBxc3Mzvr6+jkffvn2NMcbceeedJi4uzqn/smXLTGhoqOO5JDN58mTH840bNxpJZuHChY625cuXGy8vr6vW0ahRI/Paa685nteqVcvMnTvXGGPMunXrjL+/v7l48aLTPHXq1DFvvfVWgcs7c+aMkWS++eYbp3YPDw/zj3/8w6ntH//4h/H09HRq27Fjh5FkDh06dNW6Adx6Bg8ebO69915z4sQJY7fbzcGDB82hQ4eMl5eXOXHihLn33nvN4MGDC50/NTXVSDLff/+9McaYgwcPGklm27ZtxhhjnnvuORMdHe00zy+//GIkmX379hW4zFWrVhk3NzeTm5tb4PQr13Glv/3tbyYiIuLqGw4YY9xdF6uBstO5c2ctWLDA8dzX11eSlJycrKSkJKcztTk5Obp48aIuXLggHx8fSZevUc0THBwsSWrSpIlT28WLF5Weni5/f3+dP39e06ZN0+eff65ff/1Vly5dUkZGRqFnbpOTk3Xu3DkFBQU5tWdkZBT61WDedXReXl75ptlsNqfnxph8bd7e3pKkCxcuFLh8ALe+KlWqqEePHlq6dKnjG6IqVark63fgwAE999xz2rRpk06ePOk4Y3vkyBE1btw4X//k5GR99dVXqlixYoHLql+/fr72jIwM2e32fMeiovL29uZ4hSIh3KJc8PX1Vd26dfO15+bmatq0abr//vvzTft9aPTw8HD8O+/AXFBb3h+Ev/71r1q9erVeeeUV1a1bV97e3urbt6+ysrIKrC83N1ehoaH6+uuv802rVKlSgfMEBQXJZrPpzJkzTu0hISFKSUlxaktNTXWE8jx5lztUrVq1wOUDsIahQ4c6Lpt6/fXXC+zTq1cvhYeH6+9//7vCwsKUm5urxo0bX/WY1atXL82cOTPftNDQ0ALnqVKlii5cuKCsrCx5enoWeztOnz7N8QpFQrhFudayZUvt27evwOB7PTZs2KAhQ4bovvvuk3T5GtxDhw5dtY6UlBS5u7srIiKiSOvw9PRUo0aNtGfPHqdrbNu3b681a9ZozJgxjraEhAR16NDBaf5du3apRo0aBZ7FAWAd3bt3d4TUmJiYfNNPnTqlvXv36q233nKMvPLtt99edZktW7bURx99pIiICLm7Fy1KNG/eXNLlG9Hy/l0cu3btyncjHFAQbihDufb888/r3Xff1dSpU7V7927t3btXH3zwgSZPnnxdy61bt65Wrlyp7du3a8eOHerfv3+hN2ZIUteuXdW+fXv16dNHq1ev1qFDh5SYmKjJkyc7blgrSExMTL4/Qk899ZQSEhI0c+ZM/fDDD5o5c6bWrl2r2NhYp34bNmwo9o8/ALj1uLm5ae/evdq7d69jlJjfq1y5soKCgvT2229r//79+vLLLzV27NirLvOJJ57Q6dOn9ac//UmbN2/Wzz//rISEBA0dOlQ5OTkFzlO1alW1bNky3zHr9OnT2r59u/bs2SNJ2rdvn7Zv357vGyiOWSgqwi3KtZiYGH3++edas2aN2rRpoz/84Q+aM2eOatWqdV3LnTt3ripXrqwOHTqoV69eiomJUcuWLQvtb7PZFB8frz/+8Y8aOnSo6tevr4cffliHDh3KdznB7z366KOKj49XWlqao61Dhw5asWKFFi9erKZNm2rJkiX64IMP1K5dO0efixcvatWqVXr00UevazsB3Br8/f3l7+9f4LQKFSpoxYoVSk5OVuPGjTVmzBjNnj37qssLCwvTd999p5ycHMXExKhx48Z66qmnFBAQoAoVCo8Wjz32WL7xtT/99FO1aNFCPXr0kCQ9/PDDatGihd58801Hn40bNyotLU19+/Yt6iajHLMZY4yriwBQcv369VOLFi00adKkIs/z+uuv65NPPlFCQsINrAwAnF28eFENGjTQihUr1L59+yLP9+CDD6pFixZ65plnbmB1sArO3AK3uNmzZxd4x/LVeHh46LXXXrtBFQFAwby8vPTuu+9e9ccerpSZmalmzZo53UcAXA1nbgEAAGAZnLkFAACAZRBuAQAAYBmEWwAAAFgG4RYAAACWQbgFAACAZRBuAaCc6tSpU75frgOAWx3hFgBcKCUlRU899ZTq1q0rLy8vBQcH64477tCbb76pCxcuuLo8ALjluLu6AAAor37++Wd17NhRlSpVUlxcnJo0aaJLly7pxx9/1KJFixQWFqbevXu7usxC5eTkyGazXfXnVgGgrHFEAgAXGTlypNzd3bVlyxb169dPDRs2VJMmTfTAAw/oX//6l3r16iVJSktL02OPPaZq1arJ399fd911l3bs2OFYztSpU9W8eXMtW7ZMERERCggI0MMPP6yzZ886+pw/f16DBg1SxYoVFRoaqldffTVfPVlZWZowYYKqV68uX19ftWvXTl9//bVj+pIlS1SpUiV9/vnnatSokex2uw4fPnzjdhAAlADhFgBc4NSpU0pISNATTzwhX1/fAvvYbDYZY9SjRw+lpKQoPj5eycnJatmypbp06aLTp087+h44cEAff/yxPv/8c33++edav369Xn75Zcf0v/71r/rqq6+0atUqJSQk6Ouvv1ZycrLT+h555BF99913WrFihXbu3KkHH3xQ3bt3108//eToc+HCBc2YMUPvvPOOdu/erWrVqpXyngGA68NlCQDgAvv375cxRg0aNHBqr1Klii5evChJeuKJJxQTE6Pvv/9eqampstvtkqRXXnlFH3/8sf75z3/qsccekyTl5uZqyZIl8vPzkyQNHDhQ69at00svvaRz585p4cKFevfdd9WtWzdJ0tKlS1WjRg3Heg8cOKDly5fr6NGjCgsLkySNHz9eX3zxhRYvXqy4uDhJUnZ2tt544w01a9bsBu4dACg5wi0AuJDNZnN6vnnzZuXm5mrAgAHKzMxUcnKyzp07p6CgIKd+GRkZOnDggON5RESEI9hKUmhoqFJTUyVdDq5ZWVlq3769Y3pgYKBTsN66dauMMapfv77TejIzM53W7enpqaZNm17HFgPAjUW4BQAXqFu3rmw2m3744Qen9tq1a0uSvL29JV0+IxsaGup07WueSpUqOf7t4eHhNM1msyk3N1eSZIy5Zj25ublyc3NTcnKy3NzcnKZVrFjR8W9vb+98gRwAbiaEWwBwgaCgIHXr1k3z58/X6NGjC73utmXLlkpJSZG7u7siIiJKtK66devKw8NDmzZtUs2aNSVJZ86c0Y8//qioqChJUosWLZSTk6PU1FTdeeedJVoPANwMuKEMAFzkjTfe0KVLl9S6dWt98MEH2rt3r/bt26f33ntPP/zwg9zc3NS1a1e1b99effr00erVq3Xo0CElJiZq8uTJ2rJlS5HWU7FiRQ0bNkx//etftW7dOu3atUtDhgxxGsKrfv36GjBggAYNGqSVK1fq4MGDSkpK0syZMxUfH3+jdgEAlDrO3AKAi9SpU0fbtm1TXFycJk2apKNHj8put6tRo0YaP368Ro4cKZvNpvj4eD377LMaOnSoTpw4oZCQEP3xj39UcHBwkdc1e/ZsnTt3Tr1795afn5/GjRuntLQ0pz6LFy/W9OnTNW7cOP33v/9VUFCQ2rdvr3vuuae0Nx0AbhibKcrFWAAAAMAtgMsSAAAAYBmEWwAAAFgG4RYAAACWQbgFAACAZRBuAQAAYBmEWwAAAFgG4RYAAACWQbgFAACAZRBuAQAAYBmEWwAAAFgG4RYAAACW8f8APkZrsiK2N0UAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 800x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    " # Create a bar chart\n",
    " plt.figure(figsize=(8, 5))\n",
    " gender_counts.plot(kind='bar', color=['blue', 'pink'])\n",
    " plt.xticks([0, 1], ['Female (0)', 'Male (1)'], rotation=0)\n",
    " plt.title('Number of Males and Females in Heart Disease Dataset')\n",
    " plt.xlabel('Gender')\n",
    " plt.ylabel('Count')\n",
    " plt.grid(axis='y')\n",
    " plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4b7ec2ef-153b-4ed2-adbb-3a7c268f7699",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "anaconda-ai-2024.04-py310",
   "language": "python",
   "name": "conda-env-anaconda-ai-2024.04-py310-py"
  },
  "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.10.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
