{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## slik-wrangler Preprocessing API"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Brief description on how to use the preprocessing module in the slik-wrangler package. This sample notebook explains some very important methods in the preprocessing module"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset_path = 'data/titanic.csv'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Using Slik-wrangler load file module you only need to specify your data path. \n",
    "\n",
    "Slik-wrangler can infer the file type that was passed and read it as a pandas dataframe.\n",
    "\n",
    "`slik-wrangler.loadfile.read_file` function makes use of the same keyword arguments as pandas read functions. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from slik_wrangler import loadfile as lf"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can get a brief summary of the rows and column that was loaded by Slik-wrangler"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[32m\n",
      "CSV file read sucessfully\n",
      "\u001b[36m\n",
      "Data has 891 rows and 12 columns\n"
     ]
    }
   ],
   "source": [
    "train = lf.read_file(dataset_path)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Working with a large csv file and you can not load the whole data to Excel or with pandas, with slik-wrangler you can split a csv into multiple csv files. \n",
    "\n",
    "Specify the number of rows that should be present in each csv file"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "lf.split_csv_file(dataset_path,row_limit=200)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "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": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Before any step in preprocessing your dataset, it is essential to look at the overall state of your dataset. \n",
    "\n",
    "Pandas provide a means to achieve this by its `info()` method, which gives us an insight into the missing values, data type, data size, and data memory usage.\n",
    "\n",
    "While this is useful, with Slik-wrangler you could quickly get an overview of all you need to adjust to make a balanced dataset. By balanced dataset here, we're implying a dataset void of missing values, duplicate values, and inconsistency in the data type of one or more feature columns.\n",
    "\n",
    "Slik-wrangler provides a data quality assessment module (`slik-wrangler.dqa`) for this purpose entirely. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from slik_wrangler.dqa import data_cleanness_assessment"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "With the `slik-wrangler.dqa.data_cleanness_assessment` You could get a general overview of how balanced your dataset is."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[36mChecking for missing values\n",
      "\n",
      "\u001b[33mDataframe contains missing values that you should address. \n",
      "\n",
      "columns=['Age', 'Cabin', 'Embarked']\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>missing_counts</th>\n",
       "      <th>missing_percent</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>features</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Age</th>\n",
       "      <td>177</td>\n",
       "      <td>19.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Cabin</th>\n",
       "      <td>687</td>\n",
       "      <td>77.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Embarked</th>\n",
       "      <td>2</td>\n",
       "      <td>0.2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          missing_counts  missing_percent\n",
       "features                                 \n",
       "Age                  177             19.9\n",
       "Cabin                687             77.1\n",
       "Embarked               2              0.2"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[39m\n",
      "\n",
      "\u001b[36mChecking for duplicate variables\n",
      "\n",
      "\u001b[32mNo duplicate values in both rows and columns!!!\n",
      "\u001b[39m\n",
      "\n",
      "\u001b[36mChecking for inconsistent values\n",
      "\n",
      "\u001b[32mNo inconsistent feature columns values!!!\n",
      "\u001b[39m\n",
      "\n"
     ]
    }
   ],
   "source": [
    "data_cleanness_assessment(train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Knowing this, you can proceed to preprocess your dataset using the `slik-wrangler.preprocessing` module."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "from slik_wrangler import preprocessing as pp"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pp.check_datefield(train,'Ticket')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "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": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pp.change_case(train,'Name','lower').head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "slik-wrangler will identify the data type of each data point, data points with high cardinality and save it in a file. With slik-wrangler, data integrity can be done efficiently to validate downstream data points"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[39m\n",
      "--------------- Identifying columns present in the data ---------------\n",
      "\n",
      "Target column is Survived. Attribute in target column:[0, 1]\n",
      "\n",
      "Features with high cardinality:['Name', 'Ticket', 'Cabin']\n",
      "\n",
      "{'cat_feat': ['Name', 'Sex', 'Ticket', 'Cabin', 'Embarked'],\n",
      " 'high_card_feat': ['Name', 'Ticket', 'Cabin'],\n",
      " 'id_column': 'PassengerId',\n",
      " 'input_columns': ['Pclass',\n",
      "                   'Name',\n",
      "                   'Sex',\n",
      "                   'Age',\n",
      "                   'SibSp',\n",
      "                   'Parch',\n",
      "                   'Ticket',\n",
      "                   'Fare',\n",
      "                   'Cabin',\n",
      "                   'Embarked'],\n",
      " 'lower_cat': ['Sex', 'Embarked'],\n",
      " 'num_feat': ['Pclass', 'Age', 'SibSp', 'Parch', 'Fare'],\n",
      " 'parse_dates': [],\n",
      " 'target_column': 'Survived'}\n",
      "\n",
      "Attributes are stored in data\\metadata\n",
      "\n"
     ]
    }
   ],
   "source": [
    "pp.identify_columns(train,'Survived','PassengerId',project_path='./data')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can map your data observations more efficiently with Slik by passing the dictionary of the observation you want to map/rename"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[39m\n",
      "--------------- Mapping passed column ---------------\n",
      "\n",
      "male was mapped to 1\n",
      "\n",
      "female was mapped to 0\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>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>transformed_Sex</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",
       "      <td>1</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",
       "      <td>0</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",
       "      <td>0</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",
       "      <td>0</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",
       "      <td>1</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  transformed_Sex  \n",
       "0      0         A/5 21171   7.2500   NaN        S                1  \n",
       "1      0          PC 17599  71.2833   C85        C                0  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S                0  \n",
       "3      0            113803  53.1000  C123        S                0  \n",
       "4      0            373450   8.0500   NaN        S                1  "
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pp.map_column(train,column_name='Sex',items={'male':1,'female':0}).head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "slik-wrangler currently relies on the Interquartile range approach to detect outliers present in a data point. slik-wrangler also fixes the outlier present in the data using different methods like replacing an outlier with the mean of the data point. You can also select the numerical features you want to perform the operation on. You can also display a table identifying at least 'n' outliers in a row."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[39m\n",
      "--------------- Table identifying at least 2 outliers in a row ---------------\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>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>745</th>\n",
       "      <td>746</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>Crosby, Capt. Edward Gifford</td>\n",
       "      <td>male</td>\n",
       "      <td>70.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>WE/P 5735</td>\n",
       "      <td>71.00</td>\n",
       "      <td>B22</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>28</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>Fortune, Mr. Charles Alexander</td>\n",
       "      <td>male</td>\n",
       "      <td>19.0</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>19950</td>\n",
       "      <td>263.00</td>\n",
       "      <td>C23 C25 C27</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>88</th>\n",
       "      <td>89</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Fortune, Miss. Mabel Helen</td>\n",
       "      <td>female</td>\n",
       "      <td>23.0</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>19950</td>\n",
       "      <td>263.00</td>\n",
       "      <td>C23 C25 C27</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>159</th>\n",
       "      <td>160</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Sage, Master. Thomas Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>CA. 2343</td>\n",
       "      <td>69.55</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>180</th>\n",
       "      <td>181</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Sage, Miss. Constance Gladys</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>CA. 2343</td>\n",
       "      <td>69.55</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>201</th>\n",
       "      <td>202</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Sage, Mr. Frederick</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>CA. 2343</td>\n",
       "      <td>69.55</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>324</th>\n",
       "      <td>325</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Sage, Mr. George John Jr</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>CA. 2343</td>\n",
       "      <td>69.55</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>341</th>\n",
       "      <td>342</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Fortune, Miss. Alice Elizabeth</td>\n",
       "      <td>female</td>\n",
       "      <td>24.0</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>19950</td>\n",
       "      <td>263.00</td>\n",
       "      <td>C23 C25 C27</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>792</th>\n",
       "      <td>793</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Sage, Miss. Stella Anna</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>CA. 2343</td>\n",
       "      <td>69.55</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>846</th>\n",
       "      <td>847</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Sage, Mr. Douglas Bullen</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>CA. 2343</td>\n",
       "      <td>69.55</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>863</th>\n",
       "      <td>864</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Sage, Miss. Dorothy Edith \"Dolly\"</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>CA. 2343</td>\n",
       "      <td>69.55</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     PassengerId  Survived  Pclass                               Name     Sex  \\\n",
       "745          746         0       1       Crosby, Capt. Edward Gifford    male   \n",
       "27            28         0       1     Fortune, Mr. Charles Alexander    male   \n",
       "88            89         1       1         Fortune, Miss. Mabel Helen  female   \n",
       "159          160         0       3         Sage, Master. Thomas Henry    male   \n",
       "180          181         0       3       Sage, Miss. Constance Gladys  female   \n",
       "201          202         0       3                Sage, Mr. Frederick    male   \n",
       "324          325         0       3           Sage, Mr. George John Jr    male   \n",
       "341          342         1       1     Fortune, Miss. Alice Elizabeth  female   \n",
       "792          793         0       3            Sage, Miss. Stella Anna  female   \n",
       "846          847         0       3           Sage, Mr. Douglas Bullen    male   \n",
       "863          864         0       3  Sage, Miss. Dorothy Edith \"Dolly\"  female   \n",
       "\n",
       "      Age  SibSp  Parch     Ticket    Fare        Cabin Embarked  \n",
       "745  70.0      1      1  WE/P 5735   71.00          B22        S  \n",
       "27   19.0      3      2      19950  263.00  C23 C25 C27        S  \n",
       "88   23.0      3      2      19950  263.00  C23 C25 C27        S  \n",
       "159   NaN      8      2   CA. 2343   69.55          NaN        S  \n",
       "180   NaN      8      2   CA. 2343   69.55          NaN        S  \n",
       "201   NaN      8      2   CA. 2343   69.55          NaN        S  \n",
       "324   NaN      8      2   CA. 2343   69.55          NaN        S  \n",
       "341  24.0      3      2      19950  263.00  C23 C25 C27        S  \n",
       "792   NaN      8      2   CA. 2343   69.55          NaN        S  \n",
       "846   NaN      8      2   CA. 2343   69.55          NaN        S  \n",
       "863   NaN      8      2   CA. 2343   69.55          NaN        S  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "det = pp.detect_fix_outliers(train,target_column='Survived',n=2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we have seen with the data quality assessment module, with slik you can also check the mssing values in your data and even plot a percentage distribution to see the top 30 missing values in your dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9gAAAIaCAYAAADbfeV6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAACBWElEQVR4nO3deXSU5dnH8d+smSRsQXYUpSibiiuCIiKgsu+oqIVq3VtttW5UqeJWN9Sq1NpWj1VfWqSKICJuIKsKWHGriiAEiew7mSyzPe8fCVNDEoXhCZNr/H7O6TmS2a47X5Jyz/PMjMdxHEcAAAAAAOCAeNM9AAAAAAAAmYANNgAAAAAALmCDDQAAAACAC9hgAwAAAADgAjbYAAAAAAC4gA02AAAAAAAuYINdQ+LxuJ599lkNHz5cQ4YMUf/+/fXQQw8pEolIksaOHatnnnnmgB5j9+7dGjNmzH7dxo3Hrcptt92m9957z5X7Wrt2ra699lpJUkFBgU444YQDur9Uvk8/xHEcPfroo+rfv7/69++vW265RcXFxZKk4uJi3XDDDerXr5/69Omjd95554AeK9Xv68aNGzVq1KgDeuwDsXjxYg0cOLDGHyeV78+4ceP0+eefS5JGjx6tN954w7V5tm3bpnbt2v3o9ebOnavHHnvMtcf9vokTJx7w3zsAAACkhg12DRk/fryWLVum5557TtOnT9dLL72k1atX67bbbnPtMXbu3KnPPvvMtfs7EPfee69OO+00V+5r3bp1Wr16tSv3Jbn/fXr77be1aNEiTZs2TTNnzlRxcbGef/55SdITTzyhnJwczZo1S88++6zGjx+vDRs2pPxYqX5fmzZtqsmTJ6f8uFak8v1577335DhODU20bz777DPt3LmzRu578eLFisViNXLfAAAA+GH+dA+QidauXasZM2Zo4cKFqlOnjiQpJydHd955p5YtW5a83rJlyzRq1Cht2bJFRx11lB5++GHl5OTopZde0osvvqhoNKqdO3fq8ssv14UXXqipU6fqpZdeUnFxcfJ+S0pKNGTIEE2dOlU+ny953x9++KHuv/9+JRIJSdKVV16pPn36/ODjfvjhh3rwwQdVXFysQCCg6667Tt26dVO3bt304osv6vDDD9ff/vY3/etf/9K7774rSbrkkkt08cUX6+mnn9ZFF12kY445RhdffLF69OihTz75RDt37tT111+v/v37q7i4WHfccYc++eQT1a1bV0ceeaQk6f7770/OHY/HNW7cOG3cuFGXXnqp7rzzTsXjcd1+++367LPPtGvXLt18883JtfzlL3/RW2+9pUQioZYtW+qOO+5Q06ZNK/T4/e9/X+H7tGzZskrrPOOMMzR16lTNnDlTiURCGzduVNOmTXX//fdXur9zzjlHPXv2VCAQUGFhobZt26YGDRpIkt555x1NmDBBktSiRQudfvrpmjVrli655JIK9zF69GgdffTR+uCDD7R161aNGTNGW7du1ZIlS1RcXKw//elPateunUaPHq2LLrpIZ511lu6++2599NFHCgQCOvTQQ3XfffcpKyuryq9v375dgwYN0rJly/TEE0/ou+++0+bNm/Xdd9+pYcOGevTRR9W0aVN9+umnGj9+vKLRqFq1aqV169Zp7Nix6tKlS3LWhQsX6oEHHtCMGTMkSbt27VLv3r31zjvv6KOPPtJf//pXRSIRbdu2TUOHDtV1111XYa1jx47VUUcdpUsvvbTSnzdu3Ki77rpL69evVzQa1YABA3TVVVcpFotVua7c3NxK38cf+3v3fY8++qg2bdqkG2+8UQ8++KAkafbs2Xr66ae1detWnXrqqbrnnnvk9Xr10UcfacKECSouLpbH49G1116rnj17am9vvfWWHn30UWVnZ+uYY45Jfr2oqEjjx49Xfn6+du7cqdzcXE2YMEG7d+/W5MmTFY/HVbduXV155ZVVXu9nP/uZ3nrrLf3lL3+Rx+ORz+fTzTffrM6dO2v37t2699579fXXXysajerUU0/VzTffrBdffFGff/65HnzwQfl8Pp199tmV5gUAAEANcuC6N954wxkxYsQPXueWW25xRo4c6RQVFTmxWMwZNmyY88orrziFhYXOeeed52zbts1xHMdZtmyZc/zxxzuO4zgvv/yy07lzZ2f37t2O4zjO2rVrk5ftbcyYMc5rr73mOI7jfPnll8748eN/8HG3bdvmnHrqqc7HH3/sOI7jfP31184pp5zifPvtt87YsWOdF154wXEcx/n5z3/udOvWzVm1apWza9cup0uXLk5paanz85//3Jk1a5azdu1ap23bts6cOXOS34szzzzTcRzHmTBhgvO73/3Oicfjzu7du51BgwY5t9xyS6XZP/jgA2fAgAHJNbZt29Z54403HMdxnLfeesvp3bu34ziO88orrzjXXXedE41GHcdxnMmTJzuXXXZZpfv7/vfph9b58ssvO8cff7yzatUqx3Ec56GHHnKuvfbaahu+8MILzkknneT079/f2bp1q+M4jnPMMcc4mzZtSl7nkUcecf74xz9Wuu3Pf/5z55prrnEcx3E+/vhjp23bts7s2bMdx3Gce++91xk3blzyerNmzXKWLl3q9O3b10kkEo7jOM6DDz7o/Oc//6n2699f8+OPP+707t07+ffmyiuvdB577DEnGo06Z5xxhjN37lzHcRzn/fffd9q1a+d88MEHFWZNJBJOz549nU8//dRxHMeZNGmSc8MNNziJRML5+c9/7qxevdpxHMfZsGGD06FDB2fr1q0VGt5yyy3O008/nby/7/959OjRyXWXlJQ4o0ePdmbOnFntuqr6Pv7Y37u9fX8tP//5z52rr77aicViTlFRkdOtWzdn6dKlzo4dO5xzzjnHWbt2bXJtZ5xxhvPdd99VuK/Nmzc7J510krNixQrHcRznqaeectq2bes4juPMmjXLufvuu5PX/cMf/uDcddddySZ33nnnj16vd+/ezrJlyxzHcZwFCxY4TzzxhOM4jjN27Fjn+eefdxzHcWKxmHPjjTc6f/vb3yp8TwAAAHDwcQS7Bni93uSR4x9y1llnKTs7W5J01FFHadu2bcrNzdVTTz2lefPmKT8/X1999ZWKioqSt2nXrl3y6PUP6devn+666y7NmTNHp512mn73u9/94ON++umnatWqlY477rjk10888UQtWbJEZ599tiZPnqyhQ4dq06ZNGjhwoN577z3Vr19f3bt3VzAYrPDYgUBAPXr0kCR17NhRO3bskCTNmzdPv//97+X1elWnTh0NGzZMy5cv/9G1BAKB5BHr9u3ba+vWrZKkd999V5999plGjBghSUokEsnXQlfnh9bp8XjUrVs3tW7dWpJ03nnnaciQIdXe189//nNddNFF+tOf/qTf/OY3+r//+78qTz32eqt+Jcaeo4uHHXaYJKl79+6SpFatWmnJkiUVrtu2bVv5fD6de+65Ov3009WnTx916tRJu3btqvLrBQUFFW5/yimnJP/edOzYUTt37tTXX38tSclWXbt21VFHHVVpTo/Ho5EjR+qVV17Rscceq6lTp+qmm26Sx+PRU089pblz5+q1117TN998I8dxfrTBHkVFRVq6dKl27tyZfD1yUVGRvvrqK51++ulVruuHVPf37sf0799fPp9P2dnZOuKII7R161aFw2Ft3rxZv/71ryt8H5YvX64WLVokv/af//xHbdu2TZ6Ncf755+uRRx6RJPXt21eHHXaYXnjhBa1Zs0ZLliyp8v0Efuh6AwYM0DXXXKMePXqoW7duuvzyyyWVvYb7s88+00svvSSp7EwWAAAApB8b7BrQqVMnrVq1SoWFhRU2wxs3btQf/vAHPf7445Ikv/9/336PxyPHcbRhwwadf/75Ou+883TSSSepb9++ydOxpbJTzffFqFGj1LNnTy1atEgLFizQxIkT9eqrr1b7uFU9IeA4jmKxmLp166Zx48Zp3rx56tKli0477TT961//UnZ2dqVTcKWyjc6eTaXH40l+3e/3V9iAVrfxrOr+vj/vHolEQpdddpkuvPBCSVIkEvnR17X+0DoDgUCF0+wTiUSFP+/x1VdfKZFIqGPHjvJ4PDr33HOTr8Fu3ry5Nm/erMaNG0uSNm3apPbt21c5S1VPTFSnXr16mj59uj766CN98MEHuu666zRmzBhdfPHFVX79rLPOqnD7UCiU/O89zX0+X6UnBKparySNGDFCQ4cO1bnnnqvdu3erS5cuKioq0rBhw3TWWWfp5JNP1ogRI/TOO+9Uus89j7dHNBqVVPb9dRxHkydPTj7hs23bNmVlZSk3N7fa9Vanur93P6aqn4d4PK42bdro3//+d/KyjRs3qmHDhj+4tu/f1z//+U9NmTJFF110kQYNGqQGDRpUeuLjx653/fXXa+TIkVq4cKGmTp2qv/3tb5o6daoSiYQee+wxtWnTRlLZafv7s2YAAADUDN7krAY0bdpUgwYN0q233qrCwkJJUmFhocaPH68GDRpU2Ozs7fPPP1fDhg31q1/9St27d09uruPxeKXr+v1+xePxKo+ajho1Sl9++aWGDx+uu+++W7t27frBzedxxx2n1atX69NPP5UkrVixQkuXLtUpp5yirKwsde7cWRMnTlS3bt10yimn6OOPP9aHH36YPOq6L3r06KGXX345eaT5tddeq3JT4PP5kpuwH3L66afrpZdeSn6PH3vsMd18882Vrvf979MPrVOSPvjgA23cuFGSNHny5Cpfc/vVV1/p97//ffJI7bRp09S1a1dJUu/evfXiiy9KkjZs2KAFCxZUeR/7691339XFF1+sE044Qddee62GDh2qr776qtqv74s2bdooGAxq/vz5ksqO7n/99ddVNmnatKmOO+443X777Ro5cqQkac2aNSosLNR1112nXr16acmSJYpEIpWexMjLy0u+a/e2bdv04YcfSpLq1Kmj448/Xs8++6yksk3iBRdcoNmzZx/Qun6Mz+f70TcBO/7447VmzRotXbpUkvTll1+qT58+2rRpU4XrnXzyyVq5cmVytqlTpyYvW7hwoYYNG6Zzzz1XrVu31pw5c5I/x9+fobrrxWIx9erVS0VFRbrgggt0xx136JtvvlEsFtPpp5+uf/zjH3IcR5FIRFdffbX+7//+b5/XBwAAgJrBEewacscdd+jJJ5/UqFGj5PP5FIlEdNZZZyU/fqo63bp100svvaS+ffsqOztbnTp1UsOGDbVmzZpK123cuLE6duyofv366V//+pfy8vKSl91444364x//qD/96U/yer265pprdOihh1b7uA0bNtRjjz2mu+++WyUlJfJ4PLrvvvuSp0ufffbZeuutt9S1a1eFQiG1b99e9evXV1ZW1j5/T6688krdddddGjRokOrWratDDjmkyicbjjrqKPl8Po0cOVKPPvpotfd37rnnauPGjTrvvPPk8XjUvHnzCm+YVt33qbp1Llu2TE2bNtVNN92kzZs368gjj9Rdd91V6f6GDh2qb7/9ViNGjJDP59NRRx2le++9V5J07bXXavz48RowYIDi8bhuuukmtWrVap+/R9U544wzNH/+fA0cOFA5OTmqX7++7r77bjVv3rzKr+8Lv9+vJ554QnfccYceeeQRHXHEEWrUqFG1TwCde+65+u1vf6u//OUvkspernDmmWeqX79+qlevnlq1aqUjjzxSa9asqXB0fvTo0brxxhvVp08fHXroocknMyRpwoQJuvvuuzVo0CBFIhENHDhQgwcPVjweT3ldP+ass87S9ddfr3vuuafa6zRs2FCPP/64HnzwQZWWlspxHD344INq2bJlpetNmDBBN954owKBgDp37py87Je//KVuv/325BsQHn300cnT8k899VRde+21CgQC1V7P7/fr1ltv1Y033ii/3y+Px6M//vGPCgaDuu2223Tvvfdq0KBBikajOu2003TZZZdJknr27KkHHnhA0WhUw4YNc+V7BgAAgH3jcao6/AnUgJkzZ6pOnTrq0aOHEomErr32WnXr1i15ine6TZ06VW+++ab++te/pnuUg+aBBx7QpZdeqkaNGmn9+vUaMmSI3nnnHdWrVy/dowEAAADmcAQbB81RRx2l22+/XY888oii0ai6dOmic889N91j/aS1bNlSF198cfL18ffccw+bawAAACBFHMEGAAAAAMAFvMkZAAAAAAAuYIMNAAAAAIAL2GADAAAAAOAC3uSsBnz33dYKH1MEGyKRCN0MoptdtLOJbjbRzS7a2UQ3m/anW+PGdav8Okewa0AsFk33CEgB3Wyim120s4luNtHNLtrZRDeb3OjGBrsGBINZ6R4BKaCbTXSzi3Y20c0mutlFO5voZpMb3dhg1wCPx5PuEZACutlEN7toZxPdbKKbXbSziW42udGNDXYNKCkpTvcISAHdbKKbXbSziW420c0u2tlEN5vc6MYGGwAAAAAAF7DBBgAAAADABWywa0AolJ3uEZACutlEN7toZxPdbKKbXbSziW42udGNDXYNiMfj6R4BKaCbTXSzi3Y20c0mutlFO5voZpMb3dhg14BEgh8oi+hmE93sop1NdLOJbnbRzia62eRGNzbYNYBnrGyim010s4t2NtHNJrrZRTub6GYTR7ABAAAAAKgl2GDXgEAgmO4RkAK62UQ3u2hnE91soptdtLOJbja50Y0NNgAAAAAALmCDXQM8Hk+6R0AK6GYT3eyinU10s4ludtHOJrrZ5EY3Ntg1IBIpTfcISAHdbKKbXbSziW420c0u2tlEN5vc6MYGGwAAAAAAF7DBrgFeL99Wi+hmE93sop1NdLOJbnbRzia62eRGN8rXAL8/kO4RkAK62UQ3u2hnE91soptdtLOJbja50Y0Ndg3gGSub6GYT3eyinU10s4ludtHOJrrZxBHsWqqkpDjdIyAFdLOJbnbRzia62UQ3u2hnE91scqMbG2wAAAAAAFzgcRzHSfcQmaa4JKrsEK+7AAAAAIB9VVIa0+5d6Tv6Hw4XKje3zj5dt3HjulV+3e/mQCiTHQpo0A3T0z0GAAAAAJgx4+Eh2p3Gxw+Fsg/4PjhFHAAAAADwk5dIJA74PthgAwAAAAB+8mKx6AHfBxtsAAAAAMBPHkewAQAAAACoJdhgAwAAAAB+8oLBrAO+DzbYAAAAAICfPDc+wZoNNgAAAAAALmCDDQAAAAD4yYtGIwd8H2ywAQAAAABwARtsAAAAAMBPns/nO+D78LswR40rLCzUww8/rKVLl8rn86levXoaO3asjj766CqvX1BQoDFjxmjOnDmVLrv88st1zz33qGnTpjU9NgAAAAAgBbNnv6Hly7/4wescemgrDR48stLX8/O/0euvT9cFF1ysvLyG+/yYXu9PYIOdSCR0+eWXq0uXLpo2bZr8fr8++OADXX755Zo5c6by8vL26/7+/ve/19CkAAAAAAA3nHFGb51++plyHEevvvqSmjdvqVNOOU2StHXrFs2Y8bK6dOlW6Xb/+c9iffjhByk95k/iCPbixYu1adMm/eY3v5HXW3ZGe9euXXXfffcpkUho3LhxWrFihbZs2aLWrVtr4sSJkqTS0lL99re/1erVq9WqVSvde++9ql+/vnr16qXnn39eS5Ys0YIFC7Rz506tXbtW3bp10/jx49O4UgAAAACAJAUCAUkB/fe/n6qkpERdu3Yv/5r0/vsLdMwxx6tp0+YVbpNIJPTtt/nq2rW7Fi2au9+PWVJSrNzcOgc0d61/DfYXX3yhY489Nrm53qNHjx5atWqVAoGAXnzxRb399tsqLS3VvHnzJElbt27V6NGj9eqrr6pVq1b685//XOm+ly1bpscff1yvvvqq3n33XS1fvvygrAkAAAAAUFlJSbEikYji8bgKC3fro4+WqGPHsv1gLBbTqlUrtGXLJrVvf7RisZgikYhKS0sVDhequLhI/fsPVf36DSRJxcVFCocLVVQUViwWUzweVzhcmPxfPB5XJBJRSUlx8nqRSESRSETRaDR5veLiIkWj0Qq3r06tP4Lt9Xqr/cDvzp07q0GDBpo0aZJWrVql/Px8FRUVSZJat26tk08+WZI0ePBgjR07ttLtTzjhBNWpU/YMxWGHHaadO3fW0CoAAAAAAD8mFMpO/veezewxxxyXPH177do1atXqCB1ySKMKt8vKykr+954j3dnZOZWOSO/9571PCw8Gg5Xu54duv7dafwT7mGOO0RdffFFpk/3II4/onXfe0Y033qhQKKThw4erc+fOyev5/RWfO9j7z1LFCB6Pp9qNPAAAAADg4Pruu7Vq2LBRhU33d98VqGXLwypcr7S0RPF4/IAf7/uPk6pav8E++eSTdcghh2jixInJb9qCBQs0depULViwQP369dOIESPUqFEjLV26NHmdb775Rl98Ufaucy+99JJOO+20tK0BAAAAALB/Cgt3J0/3/qGvPfPMk/ryy88P+PHcOOBa608R93g8evLJJ3Xfffdp4MCB8vv9ysvL09/+9jf5fD7deOONeuONNxQMBnX88ceroKBAkpKvu/7222/Vtm1bXX/99WleCQAAAABgX51xRu9KX7viimsrfe1Xv/pdhT+3bHlYpa/ti0iktMozn/eHx+G86Box6Ibp6R4BAAAAAMyY8fAQbd68O22PHw4X7vO7iDduXLfKr9f6U8QBAAAAALCADTYAAAAA4CcvKyt0wPfBBhsAAAAA8JOXSCQO+D7YYAMAAAAAfvLceHsyNtgAAAAAgJ+8WCx6wPfBBhsAAAAAABewwQYAAAAA/OT5/YEDvg822AAAAACAnzyPx3PA98EGGwAAAADwk+f1Hvj22OO48VZpqKC4JKrs0IGfXgAAAAAAPxUlpTHt3lWctscPhwuVm1tnn67buHHdKr/ud3MglNm4Ycs+h0HtsT8/UKg96GYX7Wyim010s4t2NtHtp4tTxGuAG+fu4+Cjm010s4t2NtHNJrrZRTub6GYTr8GupYLBrHSPgBTQzSa62UU7m+hmE93sop1NdLPJjW5ssGsAz1jZRDeb6GYX7Wyim010s4t2NtHNJo5g11IlJel7YT5SRzeb6GYX7Wyim010s4t2NtHNJje6scEGAAAAAMAFvIt4DWjarBEf02VQdW+1j9qrpDSmcLgw3WMAAAAAkthg14jsUECDbpie7jGAjDfj4SEKhbLTPQZSRDub6GYT3eyinU10s8mNbpwiDsC0eDye7hGQItrZRDeb6GYX7Wyim01udGODDcC0RIL/A7OKdjbRzSa62UU7m+hmkxvd2GADMI1niO2inU10s4ludtHOJrrZxBFsAAAAAABqCTbYAEwLBILpHgEpop1NdLOJbnbRzia62eRGNzbYAAAAAAC4gA02ANM8Hk+6R0CKaGcT3Wyim120s4luNrnRjQ02ANMikdJ0j4AU0c4mutlEN7toZxPdbHKjGxtsAAAAAABcwAYbgGleL7/GrKKdTXSziW520c4mutnkRreMK//111+rXbt2evPNN9M9CoCDwO8PpHsEpIh2NtHNJrrZRTub6GaTG938LsxRq0ydOlV9+vTR5MmT1adPn3SPA6CG7f1M46effqSFC+fqiit+o127duidd97Q7t07deSR7XT66T3l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2bPfVMeOx6pLl26aP3+OiorC6RsWPNNoFN3sop1NdLOJbnbRzia62XRQjmBX5eSTT9acOXM0a9YsPfvssyopKVFpaanuuecede7cWc8++6xeeeUVeb1ederUSXfddZe++uor3X777YrFYsrKytJ9992nI444QvPnz9fjjz+uWCymQw89VHfffbfy8vLUq1cvDR48WAsXLlRxcbEeeOABHXPMMfr66681duxYxeNxnXzyyZo/f77efvttbdmyRbfffrs2bNggj8ejG264QaeddpqeeOIJffzxx1q/fr0uuuiiCuv44osvdNttt0mS2rdvf8DfzL1t2LBO9es3UKNGjXXooYfro4+WJC/bvn2bSktL1KpVa9WtW09z576tTZs26Igj2rg+BwAAAACg5u33BjsajWrWrFk68cQTNXnyZD311FNq2LChXnrpJT3zzDM64YQT9Ne//lULFiyQz+fTnXfeqY0bN+q5557TJZdcon79+un111/Xxx9/rHr16unhhx/W888/r/r162vy5MmaMGGC7r33XklSgwYN9NJLL+mFF17QX//6Vz3xxBMaO3asfvvb36pHjx76xz/+oXg8Lkm69957NWLECPXu3VubNm3ShRdeqGnTpkmSIpGIXn/9dUn/O0Vckm655Rb9/ve/12mnnaY///nPWrx48YF+P5PC4UKFw2F5vT5FIhH5fF5FIqUKhwsl/e8z1mKxqCKRUklScXGxIpGIHMdRLBaVJPn9AXk8Hnm9XpWWlkiSPB6PgsEseTyeCp/VFgplKx6PK5GIJ78vgUAweZs9j+P1euX3B+T1eivdPpFIKBaLKpFISJKCwazkMznRaERS2Qewe70++Xy+Srd3HEeRSGnyNllZISUSCRNr8ni8isfjGbWmTOy095pisZji8XhGrSkTO1W1plgsplgsllFrysROldcUUzhcmGFrysROFdfk8/mT/wbJlDVlYqeq1hQIBJLtMmVNmdhp7zUFAgFFIpGMWlMmdtp7TbFYTJFIZJ/W1LhxXVVlnzbYmzZt0pAhQySVbVY7deqkG264QX6/X3PmzNHq1au1ZMmS8gf264QTTtDIkSPVu3dvXXTRRWratKl69Oihu+66SwsWLFDPnj3Vp08fzZ8/X+vXr9eYMWMkSYlEQvXr108+bvfu3SVJRx11lN566y3t2LFD3333nXr06CFJGjFi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nHPO0aOPPprm6VCdiRMnasCAARowYIAefPBBSbSz4LHHHlP//v01YMAAPfvss5LoZskDDzygsWPHSpK+/PJLjRgxQn369NFtt92mWCyW5ulQlTFjxmjAgAEaMmSIhgwZok8++YR/pxgwZ84cDR8+XH379tU999wjid+Vtd2///3v5M/ZkCFDdNJJJ+muu+6imwHTp09P/pvygQcekOTS/8c5cMWGDRucnj17Otu3b3fC4bAzaNAgZ8WKFekeC9X4+OOPnYEDBzpHH320s3btWqe4uNjp0aOH8+233zrRaNT55S9/6cydOzfdY2IvixYtcs4//3yntLTUiUQizpgxY5wZM2bQrpZbvHixM2rUKCcajTrFxcVOz549nS+//JJuRrz33ntOly5dnFtuucVxHMcZMGCAs2zZMsdxHOf3v/+9M2nSpDROh6okEgmnW7duTjQaTX6Nf6fUft9++61z+umnO+vXr3cikYhzwQUXOHPnzuV3pSFff/21c/bZZzvr1q2jWy1XVFTkdO7c2dm6dasTjUadkSNHOosWLXLl/+M4gu2S9957T127dlWDBg2Uk5OjPn366I033kj3WKjGlClTdMcdd6hJkyaSpE8//VSHH364DjvsMPn9fg0aNIh+tVDjxo01duxYBYNBBQIBtWnTRvn5+bSr5U455RQ9//zz8vv92rp1q+LxuHbt2kU3A3bs2KFHH31UV111lSTpu+++U0lJiY4//nhJ0vDhw+lWC61atUoej0eXX365Bg8erP/7v//j3ykGvP322+rfv7+aNWumQCCgRx99VNnZ2fyuNGT8+PG6/vrrtXbtWrrVcvF4XIlEQsXFxYrFYorFYvL7/a78fxwbbJds2rRJjRs3Tv65SZMm2rhxYxonwg+59957dfLJJyf/TD8bjjrqqOQvvfz8fL3++uvyeDy0MyAQCOjxxx/XgAEDdOqpp/IzZ8Ttt9+u66+/XvXq1ZNU+Xdl48aN6VYL7dq1S6eeeqr+/Oc/6x//+IcmT56sdevW8TNXy61Zs0bxeFyXXnqpBg8erH/+85/8rjTkvffeU0lJifr160c3A+rUqaPf/va36tevn8444wy1bNlSgUDAlf+PY4PtEsdxKn3N4/GkYRKkgn62rFixQr/85S91yy23qFWrVpUup13t9Jvf/Ebvv/++1q9fr/z8/EqX0612+fe//63mzZvr1FNPTX6N35U2nHDCCXrwwQeVk5Ojhg0bauTIkXr88ccrXY92tUs8Htf777+vhx56SFOmTNFnn32WfJ+Y76Nb7TR58mRdcsklkvhdacFXX32ll19+We+++64WLlwor9erRYsWVbpeKt38bgwIqWnTpvrwww+Tf960aVPy9GPUfk2bNtWWLVuSf6Zf7fWf//xHv/nNb3TrrbdqwIABWrJkCe1quW+++UaRSEQdOnRQdna2zjnnHL3xxhvy+XzJ69Ct9nn99de1efNmDRkyRDt37lRRUZE8Hk+Fn7fNmzfTrRb68MMPFY1Gk0+OOI6jli1b8ruylmvUqJFOPfVUNWzYUJLUu3dvflcaEYlEtHTpUt1///2S+HelBQsXLtSpp56qQw45RFLZ6eDPPPOMK/8fxxFsl5x22ml6//33tW3bNhUXF+utt97SGWecke6xsI+OO+44rV69Onl61muvvUa/Wmj9+vX69a9/rQkTJmjAgAGSaGdBQUGBxo0bp0gkokgkotmzZ2vUqFF0q+WeffZZvfbaa5o+fbp+85vfqFevXrrvvvuUlZWl//znP5KkadOm0a0W2r17tx588EGVlpaqsLBQr7zyih566CH+nVLL9ezZUwsXLtSuXbsUj8e1YMEC9e3bl9+VBixfvlxHHHGEcnJyJPFvEwvat2+v9957T0VFRXIcR3PmzNEpp5ziyv/HcQTbJU2bNtX111+vMWPGKBqNauTIkerUqVO6x8I+ysrK0v33369rr71WpaWl6tGjh/r27ZvusbCXZ555RqWlpclniCVp1KhRtKvlevTooU8++URDhw6Vz+fTOeecowEDBqhhw4Z0M2jChAkaN26cwuGwOnbsqDFjxqR7JOylZ8+eyZ+5RCKhCy+8UCeddBL/TqnljjvuOF122WW68MILFY1G1a1bN11wwQX62c9+xu/KWm7t2rVq1qxZ8s/8u7L2O/300/XFF19o+PDhCgQCOvbYY3XFFVfo7LPPPuD/j/M4Vb1IAAAAAAAA7BdOEQcAAAAAwAVssAEAAAAAcAEbbAAAAAAAXMAGGwAAAAAAF7DBBgAAAADABWywAQAAAABwARtsAAAAAABcwAYbAAAAAAAX/D/+DtZxOJ4+1gAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 1152x648 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[39m\n",
      "--------------- Count and Percentage of missing value ---------------\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>features</th>\n",
       "      <th>missing_counts</th>\n",
       "      <th>missing_percent</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>PassengerId</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Survived</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Pclass</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Name</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Sex</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Age</td>\n",
       "      <td>177</td>\n",
       "      <td>19.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>SibSp</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Parch</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Ticket</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Fare</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>Cabin</td>\n",
       "      <td>687</td>\n",
       "      <td>77.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>Embarked</td>\n",
       "      <td>2</td>\n",
       "      <td>0.2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       features  missing_counts  missing_percent\n",
       "0   PassengerId               0              0.0\n",
       "1      Survived               0              0.0\n",
       "2        Pclass               0              0.0\n",
       "3          Name               0              0.0\n",
       "4           Sex               0              0.0\n",
       "5           Age             177             19.9\n",
       "6         SibSp               0              0.0\n",
       "7         Parch               0              0.0\n",
       "8        Ticket               0              0.0\n",
       "9          Fare               0              0.0\n",
       "10        Cabin             687             77.1\n",
       "11     Embarked               2              0.2"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pp.check_nan(train,plot=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "slik-wrangler helps to handle the missing values in your data intelligently and efficiently. You can choose a strategy to handle your numerical features \n",
    "\n",
    "and pass a value for fillna params to handle your categorical features or fill it with the mode by default. \n",
    "\n",
    "You can also drop missing values across the rows and columns using threshold parameters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Dropping rows with 75% missing value: Number of records dropped is 0\n",
      "\n",
      "Dropping Columns with 50% missing value: ['Cabin']\n",
      "\n",
      "New data shape is (891, 11)\n"
     ]
    }
   ],
   "source": [
    "data = pp.handle_nan(dataframe=train,target_name='Survived',strategy='mean',fillna='mode',\n",
    "                     drop_outliers=True,thresh_x=75,thresh_y=50,display_inline=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Beyond slik-wrangler preprocessing abilities, you can also engineer new features intelligently. \n",
    "slik-wrangler can help you bin/discretize your age column intelligently and creating new data points with the transformations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "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>Embarked</th>\n",
       "      <th>binned_Age</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.000000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.250000</td>\n",
       "      <td>S</td>\n",
       "      <td>Young Adult</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.000000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>32.204208</td>\n",
       "      <td>C</td>\n",
       "      <td>Mid-Age</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.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.925000</td>\n",
       "      <td>S</td>\n",
       "      <td>Young Adult</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.000000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.100000</td>\n",
       "      <td>S</td>\n",
       "      <td>Mid-Age</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.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.050000</td>\n",
       "      <td>S</td>\n",
       "      <td>Mid-Age</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",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>887</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>Montvila, Rev. Juozas</td>\n",
       "      <td>male</td>\n",
       "      <td>27.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>211536</td>\n",
       "      <td>13.000000</td>\n",
       "      <td>S</td>\n",
       "      <td>Young Adult</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>888</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Graham, Miss. Margaret Edith</td>\n",
       "      <td>female</td>\n",
       "      <td>19.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>112053</td>\n",
       "      <td>30.000000</td>\n",
       "      <td>S</td>\n",
       "      <td>Young Adult</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>29.081737</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.381594</td>\n",
       "      <td>W./C. 6607</td>\n",
       "      <td>23.450000</td>\n",
       "      <td>S</td>\n",
       "      <td>Young Adult</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>890</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Behr, Mr. Karl Howell</td>\n",
       "      <td>male</td>\n",
       "      <td>26.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>111369</td>\n",
       "      <td>30.000000</td>\n",
       "      <td>C</td>\n",
       "      <td>Young Adult</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>891</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Dooley, Mr. Patrick</td>\n",
       "      <td>male</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>370376</td>\n",
       "      <td>7.750000</td>\n",
       "      <td>Q</td>\n",
       "      <td>Mid-Age</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 12 columns</p>\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",
       "886          887         0       2   \n",
       "887          888         1       1   \n",
       "888          889         0       3   \n",
       "889          890         1       1   \n",
       "890          891         0       3   \n",
       "\n",
       "                                                  Name     Sex        Age  \\\n",
       "0                              Braund, Mr. Owen Harris    male  22.000000   \n",
       "1    Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.000000   \n",
       "2                               Heikkinen, Miss. Laina  female  26.000000   \n",
       "3         Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.000000   \n",
       "4                             Allen, Mr. William Henry    male  35.000000   \n",
       "..                                                 ...     ...        ...   \n",
       "886                              Montvila, Rev. Juozas    male  27.000000   \n",
       "887                       Graham, Miss. Margaret Edith  female  19.000000   \n",
       "888           Johnston, Miss. Catherine Helen \"Carrie\"  female  29.081737   \n",
       "889                              Behr, Mr. Karl Howell    male  26.000000   \n",
       "890                                Dooley, Mr. Patrick    male  32.000000   \n",
       "\n",
       "     SibSp     Parch            Ticket       Fare Embarked   binned_Age  \n",
       "0      1.0  0.000000         A/5 21171   7.250000        S  Young Adult  \n",
       "1      1.0  0.000000          PC 17599  32.204208        C      Mid-Age  \n",
       "2      0.0  0.000000  STON/O2. 3101282   7.925000        S  Young Adult  \n",
       "3      1.0  0.000000            113803  53.100000        S      Mid-Age  \n",
       "4      0.0  0.000000            373450   8.050000        S      Mid-Age  \n",
       "..     ...       ...               ...        ...      ...          ...  \n",
       "886    0.0  0.000000            211536  13.000000        S  Young Adult  \n",
       "887    0.0  0.000000            112053  30.000000        S  Young Adult  \n",
       "888    1.0  0.381594        W./C. 6607  23.450000        S  Young Adult  \n",
       "889    0.0  0.000000            111369  30.000000        C  Young Adult  \n",
       "890    0.0  0.000000            370376   7.750000        Q      Mid-Age  \n",
       "\n",
       "[891 rows x 12 columns]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pp.bin_age(data,'Age')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "with Slik you can infer the schema of your pandas dataframe and save the schema file in a project path you define"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[39m\n",
      "--------------- Creating Schema file ---------------\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'dtype': {'PassengerId': 'int64',\n",
       "  'Survived': 'int64',\n",
       "  'Pclass': 'int64',\n",
       "  'Name': 'object',\n",
       "  'Sex': 'object',\n",
       "  'Age': 'float64',\n",
       "  'SibSp': 'int64',\n",
       "  'Parch': 'int64',\n",
       "  'Ticket': 'object',\n",
       "  'Fare': 'float64',\n",
       "  'Cabin': 'object',\n",
       "  'Embarked': 'object'}}"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# import ,yaml\n",
    "pp.create_schema_file(train,target_column='Survived',id_column='PassengerId',save=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "with Slik you can also drop uninformative field in your pandas dataframe"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[39m\n",
      "--------------- Dropping uninformative fields ---------------\n",
      "\n",
      "uninformative fields dropped: []\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>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",
       "    <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",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>887</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>Montvila, Rev. Juozas</td>\n",
       "      <td>male</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>211536</td>\n",
       "      <td>13.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>888</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Graham, Miss. Margaret Edith</td>\n",
       "      <td>female</td>\n",
       "      <td>19.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>112053</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>B42</td>\n",
       "      <td>S</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",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>890</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Behr, Mr. Karl Howell</td>\n",
       "      <td>male</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>111369</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>C148</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>891</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Dooley, Mr. Patrick</td>\n",
       "      <td>male</td>\n",
       "      <td>32.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>370376</td>\n",
       "      <td>7.7500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 12 columns</p>\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",
       "886          887         0       2   \n",
       "887          888         1       1   \n",
       "888          889         0       3   \n",
       "889          890         1       1   \n",
       "890          891         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",
       "886                              Montvila, Rev. Juozas    male  27.0      0   \n",
       "887                       Graham, Miss. Margaret Edith  female  19.0      0   \n",
       "888           Johnston, Miss. Catherine Helen \"Carrie\"  female   NaN      1   \n",
       "889                              Behr, Mr. Karl Howell    male  26.0      0   \n",
       "890                                Dooley, Mr. Patrick    male  32.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  \n",
       "..     ...               ...      ...   ...      ...  \n",
       "886      0            211536  13.0000   NaN        S  \n",
       "887      0            112053  30.0000   B42        S  \n",
       "888      2        W./C. 6607  23.4500   NaN        S  \n",
       "889      0            111369  30.0000  C148        C  \n",
       "890      0            370376   7.7500   NaN        Q  \n",
       "\n",
       "[891 rows x 12 columns]"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pp.drop_uninformative_fields(train,exclude='Parch')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Slik helps you manage your data points better by handling different management operations techniques on pandas dataframe based on columns. \n",
    "\n",
    "Operations include selecting of columns, dropping column and dropping duplicates. By selecting the list data points that you need to perform the transformation on and choosing the particular transformation you want "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[39m\n",
      "--------------- Dropping duplicates across the columns ---------------\n",
      "\n",
      "New datashape is (891, 12)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>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": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pp.manage_columns(train,['PassengerId'],drop_duplicates='columns').head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Trim whitespaces from ends of each value across all data points in a pandas dataframe"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "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",
       "    <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",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>887</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>Montvila, Rev. Juozas</td>\n",
       "      <td>male</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>211536</td>\n",
       "      <td>13.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>888</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Graham, Miss. Margaret Edith</td>\n",
       "      <td>female</td>\n",
       "      <td>19.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>112053</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>B42</td>\n",
       "      <td>S</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",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>890</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Behr, Mr. Karl Howell</td>\n",
       "      <td>male</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>111369</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>C148</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>891</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Dooley, Mr. Patrick</td>\n",
       "      <td>male</td>\n",
       "      <td>32.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>370376</td>\n",
       "      <td>7.7500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 12 columns</p>\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",
       "886          887         0       2   \n",
       "887          888         1       1   \n",
       "888          889         0       3   \n",
       "889          890         1       1   \n",
       "890          891         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",
       "886                              Montvila, Rev. Juozas    male  27.0      0   \n",
       "887                       Graham, Miss. Margaret Edith  female  19.0      0   \n",
       "888           Johnston, Miss. Catherine Helen \"Carrie\"  female   NaN      1   \n",
       "889                              Behr, Mr. Karl Howell    male  26.0      0   \n",
       "890                                Dooley, Mr. Patrick    male  32.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  \n",
       "..     ...               ...      ...   ...      ...  \n",
       "886      0            211536  13.0000   NaN        S  \n",
       "887      0            112053  30.0000   B42        S  \n",
       "888      2        W./C. 6607  23.4500   NaN        S  \n",
       "889      0            111369  30.0000  C148        C  \n",
       "890      0            370376   7.7500   NaN        Q  \n",
       "\n",
       "[891 rows x 12 columns]"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pp.trim_all_columns(train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Slik can clean your data in one line of code. The `slik.preprocessing.preprocess` function cleans your data\n",
    "by removing outliers present in the data, handing missing values, featurizing datetime columns, and mapping relevant columns.\n",
    "The functions saves the preprocessed file in a project path that you specify."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "The task for preprocessing is classification\n",
      "\n",
      "Dropping rows with 75% missing value: Number of records dropped is 0\n",
      "\n",
      "Dropping Columns with 75% missing value: ['Cabin']\n",
      "\n",
      "New data shape is (891, 11)\n",
      "\u001b[39m\n",
      "--------------- Mapping target columns ---------------\n",
      "\n",
      "0 was mapped to 0\n",
      "\n",
      "1 was mapped to 1\n",
      "\n",
      "\u001b[39m\n",
      "--------------- Bucketize Age columns ---------------\n",
      "\n",
      " Inferred age column: [Age]\n",
      "\u001b[39m\n",
      "--------------- Mapping passed column ---------------\n",
      "\n",
      "male was mapped to 0\n",
      "\n",
      "female was mapped to 1\n",
      "\n",
      "\u001b[39m\n",
      "--------------- Dropping uninformative fields ---------------\n",
      "\n",
      "uninformative fields dropped: []\n",
      "\u001b[39m\n",
      "--------------- Creating Schema file ---------------\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'dtype': {'PassengerId': 'int64',\n",
       "  'Pclass': 'int64',\n",
       "  'Name': 'object',\n",
       "  'Age': 'float64',\n",
       "  'SibSp': 'float64',\n",
       "  'Parch': 'float64',\n",
       "  'Ticket': 'object',\n",
       "  'Fare': 'float64',\n",
       "  'Embarked': 'object',\n",
       "  'transformed_Survived': 'int64',\n",
       "  'binned_Age': 'object',\n",
       "  'transformed_Sex': 'int64'}}"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "Schema file stored in Titanic\\data\\metadata\n",
      "\u001b[39m\n",
      "--------------- Preview the preprocessed data ---------------\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>transformed_Survived</th>\n",
       "      <th>binned_Age</th>\n",
       "      <th>transformed_Sex</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.250000</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "      <td>Young Adult</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>32.204208</td>\n",
       "      <td>C</td>\n",
       "      <td>1</td>\n",
       "      <td>Mid-Age</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.925000</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>Young Adult</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.100000</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>Mid-Age</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.050000</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "      <td>Mid-Age</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Pclass                                               Name  \\\n",
       "0            1       3                            Braund, Mr. Owen Harris   \n",
       "1            2       1  Cumings, Mrs. John Bradley (Florence Briggs Th...   \n",
       "2            3       3                             Heikkinen, Miss. Laina   \n",
       "3            4       1       Futrelle, Mrs. Jacques Heath (Lily May Peel)   \n",
       "4            5       3                           Allen, Mr. William Henry   \n",
       "\n",
       "    Age  SibSp  Parch            Ticket       Fare Embarked  \\\n",
       "0  22.0    1.0    0.0         A/5 21171   7.250000        S   \n",
       "1  38.0    1.0    0.0          PC 17599  32.204208        C   \n",
       "2  26.0    0.0    0.0  STON/O2. 3101282   7.925000        S   \n",
       "3  35.0    1.0    0.0            113803  53.100000        S   \n",
       "4  35.0    0.0    0.0            373450   8.050000        S   \n",
       "\n",
       "   transformed_Survived   binned_Age  transformed_Sex  \n",
       "0                     0  Young Adult                0  \n",
       "1                     1      Mid-Age                1  \n",
       "2                     1  Young Adult                1  \n",
       "3                     1      Mid-Age                1  \n",
       "4                     0      Mid-Age                0  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[39m\n",
      "--------------- Preprocessed data saved ---------------\n",
      "\n",
      "\n",
      " Input data preprocessed successfully and stored in ./Titanic\\data\\train_data.pkl\n",
      "\n"
     ]
    }
   ],
   "source": [
    "pp.preprocess(data=train,target_column='Survived',train=True,display_inline=True,project_path='./Titanic',logging='display')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
