{
"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": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
PassengerId
\n",
"
Survived
\n",
"
Pclass
\n",
"
Name
\n",
"
Sex
\n",
"
Age
\n",
"
SibSp
\n",
"
Parch
\n",
"
Ticket
\n",
"
Fare
\n",
"
Cabin
\n",
"
Embarked
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
1
\n",
"
0
\n",
"
3
\n",
"
Braund, Mr. Owen Harris
\n",
"
male
\n",
"
22.0
\n",
"
1
\n",
"
0
\n",
"
A/5 21171
\n",
"
7.2500
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
1
\n",
"
2
\n",
"
1
\n",
"
1
\n",
"
Cumings, Mrs. John Bradley (Florence Briggs Th...
\n",
"
female
\n",
"
38.0
\n",
"
1
\n",
"
0
\n",
"
PC 17599
\n",
"
71.2833
\n",
"
C85
\n",
"
C
\n",
"
\n",
"
\n",
"
2
\n",
"
3
\n",
"
1
\n",
"
3
\n",
"
Heikkinen, Miss. Laina
\n",
"
female
\n",
"
26.0
\n",
"
0
\n",
"
0
\n",
"
STON/O2. 3101282
\n",
"
7.9250
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
3
\n",
"
4
\n",
"
1
\n",
"
1
\n",
"
Futrelle, Mrs. Jacques Heath (Lily May Peel)
\n",
"
female
\n",
"
35.0
\n",
"
1
\n",
"
0
\n",
"
113803
\n",
"
53.1000
\n",
"
C123
\n",
"
S
\n",
"
\n",
"
\n",
"
4
\n",
"
5
\n",
"
0
\n",
"
3
\n",
"
Allen, Mr. William Henry
\n",
"
male
\n",
"
35.0
\n",
"
0
\n",
"
0
\n",
"
373450
\n",
"
8.0500
\n",
"
NaN
\n",
"
S
\n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"
"
],
"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": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
PassengerId
\n",
"
Survived
\n",
"
Pclass
\n",
"
Name
\n",
"
Sex
\n",
"
Age
\n",
"
SibSp
\n",
"
Parch
\n",
"
Ticket
\n",
"
Fare
\n",
"
Cabin
\n",
"
Embarked
\n",
"
transformed_Sex
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
1
\n",
"
0
\n",
"
3
\n",
"
Braund, Mr. Owen Harris
\n",
"
male
\n",
"
22.0
\n",
"
1
\n",
"
0
\n",
"
A/5 21171
\n",
"
7.2500
\n",
"
NaN
\n",
"
S
\n",
"
1
\n",
"
\n",
"
\n",
"
1
\n",
"
2
\n",
"
1
\n",
"
1
\n",
"
Cumings, Mrs. John Bradley (Florence Briggs Th...
\n",
"
female
\n",
"
38.0
\n",
"
1
\n",
"
0
\n",
"
PC 17599
\n",
"
71.2833
\n",
"
C85
\n",
"
C
\n",
"
0
\n",
"
\n",
"
\n",
"
2
\n",
"
3
\n",
"
1
\n",
"
3
\n",
"
Heikkinen, Miss. Laina
\n",
"
female
\n",
"
26.0
\n",
"
0
\n",
"
0
\n",
"
STON/O2. 3101282
\n",
"
7.9250
\n",
"
NaN
\n",
"
S
\n",
"
0
\n",
"
\n",
"
\n",
"
3
\n",
"
4
\n",
"
1
\n",
"
1
\n",
"
Futrelle, Mrs. Jacques Heath (Lily May Peel)
\n",
"
female
\n",
"
35.0
\n",
"
1
\n",
"
0
\n",
"
113803
\n",
"
53.1000
\n",
"
C123
\n",
"
S
\n",
"
0
\n",
"
\n",
"
\n",
"
4
\n",
"
5
\n",
"
0
\n",
"
3
\n",
"
Allen, Mr. William Henry
\n",
"
male
\n",
"
35.0
\n",
"
0
\n",
"
0
\n",
"
373450
\n",
"
8.0500
\n",
"
NaN
\n",
"
S
\n",
"
1
\n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
PassengerId
\n",
"
Survived
\n",
"
Pclass
\n",
"
Name
\n",
"
Sex
\n",
"
Age
\n",
"
SibSp
\n",
"
Parch
\n",
"
Ticket
\n",
"
Fare
\n",
"
Cabin
\n",
"
Embarked
\n",
"
\n",
" \n",
" \n",
"
\n",
"
745
\n",
"
746
\n",
"
0
\n",
"
1
\n",
"
Crosby, Capt. Edward Gifford
\n",
"
male
\n",
"
70.0
\n",
"
1
\n",
"
1
\n",
"
WE/P 5735
\n",
"
71.00
\n",
"
B22
\n",
"
S
\n",
"
\n",
"
\n",
"
27
\n",
"
28
\n",
"
0
\n",
"
1
\n",
"
Fortune, Mr. Charles Alexander
\n",
"
male
\n",
"
19.0
\n",
"
3
\n",
"
2
\n",
"
19950
\n",
"
263.00
\n",
"
C23 C25 C27
\n",
"
S
\n",
"
\n",
"
\n",
"
88
\n",
"
89
\n",
"
1
\n",
"
1
\n",
"
Fortune, Miss. Mabel Helen
\n",
"
female
\n",
"
23.0
\n",
"
3
\n",
"
2
\n",
"
19950
\n",
"
263.00
\n",
"
C23 C25 C27
\n",
"
S
\n",
"
\n",
"
\n",
"
159
\n",
"
160
\n",
"
0
\n",
"
3
\n",
"
Sage, Master. Thomas Henry
\n",
"
male
\n",
"
NaN
\n",
"
8
\n",
"
2
\n",
"
CA. 2343
\n",
"
69.55
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
180
\n",
"
181
\n",
"
0
\n",
"
3
\n",
"
Sage, Miss. Constance Gladys
\n",
"
female
\n",
"
NaN
\n",
"
8
\n",
"
2
\n",
"
CA. 2343
\n",
"
69.55
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
201
\n",
"
202
\n",
"
0
\n",
"
3
\n",
"
Sage, Mr. Frederick
\n",
"
male
\n",
"
NaN
\n",
"
8
\n",
"
2
\n",
"
CA. 2343
\n",
"
69.55
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
324
\n",
"
325
\n",
"
0
\n",
"
3
\n",
"
Sage, Mr. George John Jr
\n",
"
male
\n",
"
NaN
\n",
"
8
\n",
"
2
\n",
"
CA. 2343
\n",
"
69.55
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
341
\n",
"
342
\n",
"
1
\n",
"
1
\n",
"
Fortune, Miss. Alice Elizabeth
\n",
"
female
\n",
"
24.0
\n",
"
3
\n",
"
2
\n",
"
19950
\n",
"
263.00
\n",
"
C23 C25 C27
\n",
"
S
\n",
"
\n",
"
\n",
"
792
\n",
"
793
\n",
"
0
\n",
"
3
\n",
"
Sage, Miss. Stella Anna
\n",
"
female
\n",
"
NaN
\n",
"
8
\n",
"
2
\n",
"
CA. 2343
\n",
"
69.55
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
846
\n",
"
847
\n",
"
0
\n",
"
3
\n",
"
Sage, Mr. Douglas Bullen
\n",
"
male
\n",
"
NaN
\n",
"
8
\n",
"
2
\n",
"
CA. 2343
\n",
"
69.55
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
863
\n",
"
864
\n",
"
0
\n",
"
3
\n",
"
Sage, Miss. Dorothy Edith \"Dolly\"
\n",
"
female
\n",
"
NaN
\n",
"
8
\n",
"
2
\n",
"
CA. 2343
\n",
"
69.55
\n",
"
NaN
\n",
"
S
\n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"
"
],
"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": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
PassengerId
\n",
"
Survived
\n",
"
Pclass
\n",
"
Name
\n",
"
Sex
\n",
"
Age
\n",
"
SibSp
\n",
"
Parch
\n",
"
Ticket
\n",
"
Fare
\n",
"
Embarked
\n",
"
binned_Age
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
1
\n",
"
0
\n",
"
3
\n",
"
Braund, Mr. Owen Harris
\n",
"
male
\n",
"
22.000000
\n",
"
1.0
\n",
"
0.000000
\n",
"
A/5 21171
\n",
"
7.250000
\n",
"
S
\n",
"
Young Adult
\n",
"
\n",
"
\n",
"
1
\n",
"
2
\n",
"
1
\n",
"
1
\n",
"
Cumings, Mrs. John Bradley (Florence Briggs Th...
\n",
"
female
\n",
"
38.000000
\n",
"
1.0
\n",
"
0.000000
\n",
"
PC 17599
\n",
"
32.204208
\n",
"
C
\n",
"
Mid-Age
\n",
"
\n",
"
\n",
"
2
\n",
"
3
\n",
"
1
\n",
"
3
\n",
"
Heikkinen, Miss. Laina
\n",
"
female
\n",
"
26.000000
\n",
"
0.0
\n",
"
0.000000
\n",
"
STON/O2. 3101282
\n",
"
7.925000
\n",
"
S
\n",
"
Young Adult
\n",
"
\n",
"
\n",
"
3
\n",
"
4
\n",
"
1
\n",
"
1
\n",
"
Futrelle, Mrs. Jacques Heath (Lily May Peel)
\n",
"
female
\n",
"
35.000000
\n",
"
1.0
\n",
"
0.000000
\n",
"
113803
\n",
"
53.100000
\n",
"
S
\n",
"
Mid-Age
\n",
"
\n",
"
\n",
"
4
\n",
"
5
\n",
"
0
\n",
"
3
\n",
"
Allen, Mr. William Henry
\n",
"
male
\n",
"
35.000000
\n",
"
0.0
\n",
"
0.000000
\n",
"
373450
\n",
"
8.050000
\n",
"
S
\n",
"
Mid-Age
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
886
\n",
"
887
\n",
"
0
\n",
"
2
\n",
"
Montvila, Rev. Juozas
\n",
"
male
\n",
"
27.000000
\n",
"
0.0
\n",
"
0.000000
\n",
"
211536
\n",
"
13.000000
\n",
"
S
\n",
"
Young Adult
\n",
"
\n",
"
\n",
"
887
\n",
"
888
\n",
"
1
\n",
"
1
\n",
"
Graham, Miss. Margaret Edith
\n",
"
female
\n",
"
19.000000
\n",
"
0.0
\n",
"
0.000000
\n",
"
112053
\n",
"
30.000000
\n",
"
S
\n",
"
Young Adult
\n",
"
\n",
"
\n",
"
888
\n",
"
889
\n",
"
0
\n",
"
3
\n",
"
Johnston, Miss. Catherine Helen \"Carrie\"
\n",
"
female
\n",
"
29.081737
\n",
"
1.0
\n",
"
0.381594
\n",
"
W./C. 6607
\n",
"
23.450000
\n",
"
S
\n",
"
Young Adult
\n",
"
\n",
"
\n",
"
889
\n",
"
890
\n",
"
1
\n",
"
1
\n",
"
Behr, Mr. Karl Howell
\n",
"
male
\n",
"
26.000000
\n",
"
0.0
\n",
"
0.000000
\n",
"
111369
\n",
"
30.000000
\n",
"
C
\n",
"
Young Adult
\n",
"
\n",
"
\n",
"
890
\n",
"
891
\n",
"
0
\n",
"
3
\n",
"
Dooley, Mr. Patrick
\n",
"
male
\n",
"
32.000000
\n",
"
0.0
\n",
"
0.000000
\n",
"
370376
\n",
"
7.750000
\n",
"
Q
\n",
"
Mid-Age
\n",
"
\n",
" \n",
"
\n",
"
891 rows × 12 columns
\n",
"
"
],
"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": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
PassengerId
\n",
"
Survived
\n",
"
Pclass
\n",
"
Name
\n",
"
Sex
\n",
"
Age
\n",
"
SibSp
\n",
"
Parch
\n",
"
Ticket
\n",
"
Fare
\n",
"
Cabin
\n",
"
Embarked
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
1
\n",
"
0
\n",
"
3
\n",
"
Braund, Mr. Owen Harris
\n",
"
male
\n",
"
22.0
\n",
"
1
\n",
"
0
\n",
"
A/5 21171
\n",
"
7.2500
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
1
\n",
"
2
\n",
"
1
\n",
"
1
\n",
"
Cumings, Mrs. John Bradley (Florence Briggs Th...
\n",
"
female
\n",
"
38.0
\n",
"
1
\n",
"
0
\n",
"
PC 17599
\n",
"
71.2833
\n",
"
C85
\n",
"
C
\n",
"
\n",
"
\n",
"
2
\n",
"
3
\n",
"
1
\n",
"
3
\n",
"
Heikkinen, Miss. Laina
\n",
"
female
\n",
"
26.0
\n",
"
0
\n",
"
0
\n",
"
STON/O2. 3101282
\n",
"
7.9250
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
3
\n",
"
4
\n",
"
1
\n",
"
1
\n",
"
Futrelle, Mrs. Jacques Heath (Lily May Peel)
\n",
"
female
\n",
"
35.0
\n",
"
1
\n",
"
0
\n",
"
113803
\n",
"
53.1000
\n",
"
C123
\n",
"
S
\n",
"
\n",
"
\n",
"
4
\n",
"
5
\n",
"
0
\n",
"
3
\n",
"
Allen, Mr. William Henry
\n",
"
male
\n",
"
35.0
\n",
"
0
\n",
"
0
\n",
"
373450
\n",
"
8.0500
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
886
\n",
"
887
\n",
"
0
\n",
"
2
\n",
"
Montvila, Rev. Juozas
\n",
"
male
\n",
"
27.0
\n",
"
0
\n",
"
0
\n",
"
211536
\n",
"
13.0000
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
887
\n",
"
888
\n",
"
1
\n",
"
1
\n",
"
Graham, Miss. Margaret Edith
\n",
"
female
\n",
"
19.0
\n",
"
0
\n",
"
0
\n",
"
112053
\n",
"
30.0000
\n",
"
B42
\n",
"
S
\n",
"
\n",
"
\n",
"
888
\n",
"
889
\n",
"
0
\n",
"
3
\n",
"
Johnston, Miss. Catherine Helen \"Carrie\"
\n",
"
female
\n",
"
NaN
\n",
"
1
\n",
"
2
\n",
"
W./C. 6607
\n",
"
23.4500
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
889
\n",
"
890
\n",
"
1
\n",
"
1
\n",
"
Behr, Mr. Karl Howell
\n",
"
male
\n",
"
26.0
\n",
"
0
\n",
"
0
\n",
"
111369
\n",
"
30.0000
\n",
"
C148
\n",
"
C
\n",
"
\n",
"
\n",
"
890
\n",
"
891
\n",
"
0
\n",
"
3
\n",
"
Dooley, Mr. Patrick
\n",
"
male
\n",
"
32.0
\n",
"
0
\n",
"
0
\n",
"
370376
\n",
"
7.7500
\n",
"
NaN
\n",
"
Q
\n",
"
\n",
" \n",
"
\n",
"
891 rows × 12 columns
\n",
"
"
],
"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": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
PassengerId
\n",
"
Survived
\n",
"
Pclass
\n",
"
Name
\n",
"
Sex
\n",
"
Age
\n",
"
SibSp
\n",
"
Parch
\n",
"
Ticket
\n",
"
Fare
\n",
"
Cabin
\n",
"
Embarked
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
1
\n",
"
0
\n",
"
3
\n",
"
Braund, Mr. Owen Harris
\n",
"
male
\n",
"
22.0
\n",
"
1
\n",
"
0
\n",
"
A/5 21171
\n",
"
7.2500
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
1
\n",
"
2
\n",
"
1
\n",
"
1
\n",
"
Cumings, Mrs. John Bradley (Florence Briggs Th...
\n",
"
female
\n",
"
38.0
\n",
"
1
\n",
"
0
\n",
"
PC 17599
\n",
"
71.2833
\n",
"
C85
\n",
"
C
\n",
"
\n",
"
\n",
"
2
\n",
"
3
\n",
"
1
\n",
"
3
\n",
"
Heikkinen, Miss. Laina
\n",
"
female
\n",
"
26.0
\n",
"
0
\n",
"
0
\n",
"
STON/O2. 3101282
\n",
"
7.9250
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
3
\n",
"
4
\n",
"
1
\n",
"
1
\n",
"
Futrelle, Mrs. Jacques Heath (Lily May Peel)
\n",
"
female
\n",
"
35.0
\n",
"
1
\n",
"
0
\n",
"
113803
\n",
"
53.1000
\n",
"
C123
\n",
"
S
\n",
"
\n",
"
\n",
"
4
\n",
"
5
\n",
"
0
\n",
"
3
\n",
"
Allen, Mr. William Henry
\n",
"
male
\n",
"
35.0
\n",
"
0
\n",
"
0
\n",
"
373450
\n",
"
8.0500
\n",
"
NaN
\n",
"
S
\n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
PassengerId
\n",
"
Survived
\n",
"
Pclass
\n",
"
Name
\n",
"
Sex
\n",
"
Age
\n",
"
SibSp
\n",
"
Parch
\n",
"
Ticket
\n",
"
Fare
\n",
"
Cabin
\n",
"
Embarked
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
1
\n",
"
0
\n",
"
3
\n",
"
Braund, Mr. Owen Harris
\n",
"
male
\n",
"
22.0
\n",
"
1
\n",
"
0
\n",
"
A/5 21171
\n",
"
7.2500
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
1
\n",
"
2
\n",
"
1
\n",
"
1
\n",
"
Cumings, Mrs. John Bradley (Florence Briggs Th...
\n",
"
female
\n",
"
38.0
\n",
"
1
\n",
"
0
\n",
"
PC 17599
\n",
"
71.2833
\n",
"
C85
\n",
"
C
\n",
"
\n",
"
\n",
"
2
\n",
"
3
\n",
"
1
\n",
"
3
\n",
"
Heikkinen, Miss. Laina
\n",
"
female
\n",
"
26.0
\n",
"
0
\n",
"
0
\n",
"
STON/O2. 3101282
\n",
"
7.9250
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
3
\n",
"
4
\n",
"
1
\n",
"
1
\n",
"
Futrelle, Mrs. Jacques Heath (Lily May Peel)
\n",
"
female
\n",
"
35.0
\n",
"
1
\n",
"
0
\n",
"
113803
\n",
"
53.1000
\n",
"
C123
\n",
"
S
\n",
"
\n",
"
\n",
"
4
\n",
"
5
\n",
"
0
\n",
"
3
\n",
"
Allen, Mr. William Henry
\n",
"
male
\n",
"
35.0
\n",
"
0
\n",
"
0
\n",
"
373450
\n",
"
8.0500
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
886
\n",
"
887
\n",
"
0
\n",
"
2
\n",
"
Montvila, Rev. Juozas
\n",
"
male
\n",
"
27.0
\n",
"
0
\n",
"
0
\n",
"
211536
\n",
"
13.0000
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
887
\n",
"
888
\n",
"
1
\n",
"
1
\n",
"
Graham, Miss. Margaret Edith
\n",
"
female
\n",
"
19.0
\n",
"
0
\n",
"
0
\n",
"
112053
\n",
"
30.0000
\n",
"
B42
\n",
"
S
\n",
"
\n",
"
\n",
"
888
\n",
"
889
\n",
"
0
\n",
"
3
\n",
"
Johnston, Miss. Catherine Helen \"Carrie\"
\n",
"
female
\n",
"
NaN
\n",
"
1
\n",
"
2
\n",
"
W./C. 6607
\n",
"
23.4500
\n",
"
NaN
\n",
"
S
\n",
"
\n",
"
\n",
"
889
\n",
"
890
\n",
"
1
\n",
"
1
\n",
"
Behr, Mr. Karl Howell
\n",
"
male
\n",
"
26.0
\n",
"
0
\n",
"
0
\n",
"
111369
\n",
"
30.0000
\n",
"
C148
\n",
"
C
\n",
"
\n",
"
\n",
"
890
\n",
"
891
\n",
"
0
\n",
"
3
\n",
"
Dooley, Mr. Patrick
\n",
"
male
\n",
"
32.0
\n",
"
0
\n",
"
0
\n",
"
370376
\n",
"
7.7500
\n",
"
NaN
\n",
"
Q
\n",
"
\n",
" \n",
"
\n",
"
891 rows × 12 columns
\n",
"
"
],
"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": [
"