From 149c80cedf6be684122adbde893a67713d7db1da Mon Sep 17 00:00:00 2001 From: "DESKTOP-SAT83DL\\yimeng.zhang" <13918078239@139.com> Date: Sun, 2 Dec 2018 21:11:32 +0800 Subject: [PATCH] 2018.12.2 First commit. --- .gitignore | 6 + 1_Demo_Data_Explore.ipynb | 656 +++++++ 2.1_Demo_Missing_Data.ipynb | 1109 ++++++++++++ 2.2_Demo_Outlier.ipynb | 1582 +++++++++++++++++ 2.3_Demo_Rare_Values.ipynb | 271 +++ 3.1_Demo_Feature_Scaling.ipynb | 326 ++++ 3.2_Demo_Discretisation.ipynb | 865 +++++++++ 3.3_Demo_Feature_Encoding.ipynb | 688 +++++++ 3.4_Demo_Feature_Transformation.ipynb | 497 ++++++ 3.5_Demo_Feature_Generation.ipynb | 522 ++++++ 4.1_Demo_Feature_Selection_Filter.ipynb | 696 ++++++++ 4.2_Demo_Feature_Selection_Wrapper.ipynb | 548 ++++++ 4.3_Demo_Feature_Selection_Embedded.ipynb | 679 +++++++ ..._Feature_Selection_Feature_Shuffling.ipynb | 595 +++++++ ...Demo_Feature_Selection_Hybrid_method.ipynb | 884 +++++++++ ...ature Engineering and Feature Selection.md | 824 +++++++++ README.md | 204 +++ data/housing.data.txt | 506 ++++++ data/pima-indians-diabetes.data.csv | 768 ++++++++ data/titanic.csv | 892 ++++++++++ data_exploration/explore.py | 207 +++ feature_cleaning/missing_data.py | 122 ++ feature_cleaning/outlier.py | 138 ++ feature_cleaning/rare_values.py | 247 +++ feature_engineering/discretization.py | 329 ++++ feature_engineering/encoding.py | 109 ++ feature_engineering/transformation.py | 73 + feature_selection/embedded_method.py | 76 + feature_selection/feature_shuffle.py | 43 + feature_selection/filter_method.py | 156 ++ feature_selection/hybrid.py | 128 ++ images/001.png | Bin 0 -> 114276 bytes images/IV.png | Bin 0 -> 23416 bytes images/box-cox.png | Bin 0 -> 2103 bytes images/embedded.png | Bin 0 -> 26274 bytes images/featuretools.png | Bin 0 -> 10076 bytes images/filter.png | Bin 0 -> 19691 bytes images/scaling.png | Bin 0 -> 146672 bytes .../sphx_glr_plot_map_data_to_normal_001.png | Bin 0 -> 35754 bytes images/workflow2.png | Bin 0 -> 20720 bytes images/wrapper.png | Bin 0 -> 20750 bytes output/Barplot_Pclass_Survived.png | Bin 0 -> 10673 bytes output/Boxplot_Pclass_Fare.png | Bin 0 -> 11623 bytes output/Corr_plot.png | Bin 0 -> 26237 bytes output/Countplot_Pclass.png | Bin 0 -> 9689 bytes output/Distplot_Fare.png | Bin 0 -> 10779 bytes output/Heatmap.png | Bin 0 -> 77411 bytes output/Scatter_plot_Fare_Pclass.png | Bin 0 -> 16214 bytes output/describe.csv | 12 + output/missing.csv | 7 + 50 files changed, 14765 insertions(+) create mode 100644 .gitignore create mode 100644 1_Demo_Data_Explore.ipynb create mode 100644 2.1_Demo_Missing_Data.ipynb create mode 100644 2.2_Demo_Outlier.ipynb create mode 100644 2.3_Demo_Rare_Values.ipynb create mode 100644 3.1_Demo_Feature_Scaling.ipynb create mode 100644 3.2_Demo_Discretisation.ipynb create mode 100644 3.3_Demo_Feature_Encoding.ipynb create mode 100644 3.4_Demo_Feature_Transformation.ipynb create mode 100644 3.5_Demo_Feature_Generation.ipynb create mode 100644 4.1_Demo_Feature_Selection_Filter.ipynb create mode 100644 4.2_Demo_Feature_Selection_Wrapper.ipynb create mode 100644 4.3_Demo_Feature_Selection_Embedded.ipynb create mode 100644 4.4_Demo_Feature_Selection_Feature_Shuffling.ipynb create mode 100644 4.5_Demo_Feature_Selection_Hybrid_method.ipynb create mode 100644 A Short Guide for Feature Engineering and Feature Selection.md create mode 100644 README.md create mode 100644 data/housing.data.txt create mode 100644 data/pima-indians-diabetes.data.csv create mode 100644 data/titanic.csv create mode 100644 data_exploration/explore.py create mode 100644 feature_cleaning/missing_data.py create mode 100644 feature_cleaning/outlier.py create mode 100644 feature_cleaning/rare_values.py create mode 100644 feature_engineering/discretization.py create mode 100644 feature_engineering/encoding.py create mode 100644 feature_engineering/transformation.py create mode 100644 feature_selection/embedded_method.py create mode 100644 feature_selection/feature_shuffle.py create mode 100644 feature_selection/filter_method.py create mode 100644 feature_selection/hybrid.py create mode 100644 images/001.png create mode 100644 images/IV.png create mode 100644 images/box-cox.png create mode 100644 images/embedded.png create mode 100644 images/featuretools.png create mode 100644 images/filter.png create mode 100644 images/scaling.png create mode 100644 images/sphx_glr_plot_map_data_to_normal_001.png create mode 100644 images/workflow2.png create mode 100644 images/wrapper.png create mode 100644 output/Barplot_Pclass_Survived.png create mode 100644 output/Boxplot_Pclass_Fare.png create mode 100644 output/Corr_plot.png create mode 100644 output/Countplot_Pclass.png create mode 100644 output/Distplot_Fare.png create mode 100644 output/Heatmap.png create mode 100644 output/Scatter_plot_Fare_Pclass.png create mode 100644 output/describe.csv create mode 100644 output/missing.csv diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cb9cbae --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +rule_extraction 20181014.py +__pycache__ +.ipynb_checkpoints +.gitignore.bak +history +README_bk.md \ No newline at end of file diff --git a/1_Demo_Data_Explore.ipynb b/1_Demo_Data_Explore.ipynb new file mode 100644 index 0000000..fbbb264 --- /dev/null +++ b/1_Demo_Data_Explore.ipynb @@ -0,0 +1,656 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "import os\n", + "plt.style.use('seaborn-colorblind')\n", + "%matplotlib inline\n", + "from data_exploration import explore" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Read the dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "use_cols = [\n", + " 'Pclass', 'Sex', 'Age', 'Fare', 'SibSp',\n", + " 'Survived'\n", + "]\n", + "\n", + "data = pd.read_csv('./data/titanic.csv', usecols=use_cols)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFare
003male22.017.2500
111female38.0171.2833
213female26.007.9250
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare\n", + "0 0 3 male 22.0 1 7.2500\n", + "1 1 1 female 38.0 1 71.2833\n", + "2 1 3 female 26.0 0 7.9250" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Get dtypes for each columns" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "str_var_list, num_var_list, all_var_list = explore.get_dtypes(data=data)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['Sex']\n", + "['Survived', 'Pclass', 'Age', 'SibSp', 'Fare']\n", + "['Sex', 'Survived', 'Pclass', 'Age', 'SibSp', 'Fare']\n" + ] + } + ], + "source": [ + "print(str_var_list) # string type\n", + "print(num_var_list) # numeric type\n", + "print(all_var_list) # all" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## General data description" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "result saved at: ./output/describe.csv\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFare
count891.000000891.000000891714.000000891.000000891.000000
uniqueNaNNaN2NaNNaNNaN
topNaNNaNmaleNaNNaNNaN
freqNaNNaN577NaNNaNNaN
mean0.3838382.308642NaN29.6991180.52300832.204208
std0.4865920.836071NaN14.5264971.10274349.693429
min0.0000001.000000NaN0.4200000.0000000.000000
25%0.0000002.000000NaN20.1250000.0000007.910400
50%0.0000003.000000NaN28.0000000.00000014.454200
75%1.0000003.000000NaN38.0000001.00000031.000000
max1.0000003.000000NaN80.0000008.000000512.329200
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare\n", + "count 891.000000 891.000000 891 714.000000 891.000000 891.000000\n", + "unique NaN NaN 2 NaN NaN NaN\n", + "top NaN NaN male NaN NaN NaN\n", + "freq NaN NaN 577 NaN NaN NaN\n", + "mean 0.383838 2.308642 NaN 29.699118 0.523008 32.204208\n", + "std 0.486592 0.836071 NaN 14.526497 1.102743 49.693429\n", + "min 0.000000 1.000000 NaN 0.420000 0.000000 0.000000\n", + "25% 0.000000 2.000000 NaN 20.125000 0.000000 7.910400\n", + "50% 0.000000 3.000000 NaN 28.000000 0.000000 14.454200\n", + "75% 1.000000 3.000000 NaN 38.000000 1.000000 31.000000\n", + "max 1.000000 3.000000 NaN 80.000000 8.000000 512.329200" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "explore.describe(data=data,output_path=r'./output/')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Discrete variable barplot\n", + "draw the barplot of a discrete variable x against y(target variable). \n", + "By default the bar shows the mean value of y." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Image saved at " + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\yimeng.zhang\\AppData\\Roaming\\Python\\Python36\\site-packages\\scipy\\stats\\stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n", + " return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "./output/Barplot_Pclass_Survived.png\n" + ] + }, + { + "data": { + "image/png": "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\nBwAAMND/BxnIK61uNoWMAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "explore.discrete_var_barplot(x='Pclass',y='Survived',data=data,output_path='./output/')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Discrete variable countplot\n", + "draw the countplot of a discrete variable x" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Image saved at ./output/Countplot_Pclass.png\n" + ] + }, + { + "data": { + "image/png": "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\nj1bV71TVNz7M3ldW1b84kfMBwCMl/AAg+VJ3n9/dz0zy10l+YtMDAcBOEn4A8JX+MMnTk6SqXlJV\nt1XVrVX1pgdvrKofr6oPLs9fd+xKYVVdulw9vLWq3resfUdVfWC5snhbVZ13Qv9XAOxqvsAdgF2v\nqu7v7sdV1Z4k1yX5vSTvS/K2JM/p7nur6szuvq+qXpnk/u7+lap6Und/enmNn09yd3e/pqo+kuR5\n3f0/q+qM7v5sVb0myfu7+81V9egkp3X3lzbyHwZg13HFDwCSx1bVLUkOJvlUkquTXJTkrd19b5J0\n931b/N4zq+oPl9D7oSTfsaz/tyRvrKofT3LasvbHSX62qn4mybeKPgBOpD2bHgAATgJf6u7zj1+o\nqkry1d4W88Ykl3T3rVX1I0m+O0m6+yeq6u8m+d4kt1TV+d39G1V107L2+1X1Y9397h3+fwDAllzx\nA4Ct3ZjkB6rqSUlSVWdusefxSe6qqtNz9Ipflr3f1t03dfe/SXJvknOr6m8n+WR3vzrJ9Um+c/X/\nAQAsXPEDgC1098eq6heS/EFVfTnJh5P8yIO2/eskNyX58yQfydEQTJJfXm7eUjkakLcmuTLJi6vq\nfyf5iyT/bvX/BAAs3NwFAABgOG/1BAAAGE74AQAADCf8AAAAhhN+AAAAwwk/AACA4YQfAADAcMIP\nAABgOOEHAAAw3P8Fiuv+6JwcraIAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "explore.discrete_var_countplot(x='Pclass',data=data,output_path='./output/')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Discrete variable boxplot\n", + "draw the boxplot of a discrete variable x against y." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Image saved at ./output/Boxplot_Pclass_Fare.png\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA34AAAJQCAYAAADR+LbmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3X+wnmV95/HPlyS2ClpEAiUQSkFI\n+mNttBmqY2en649dxB1hanXqtEprNNOtpdauk2Jauu1qQ5t16g5pdSazYYsd+4MtdmVaJt0MYi1b\nVIIiaiEKzGpYqGBBIcYfMVz7R+7DJhggnJzn3Odcz+s1c+Y81/3c5/jNxDwzb67nue9qrQUAAIB+\nHTP2AAAAAEyW8AMAAOic8AMAAOic8AMAAOic8AMAAOic8AMAAOic8AMAAOic8AMAAOic8AMAAOjc\n0rEHOBonnnhiO+OMM8YeAwAAYBQ333zzV1pry5/svEUdfmeccUZ27tw59hgAAACjqKovHsl53uoJ\nAADQOeEHAADQOeEHAADQOeEHAADQOeEHAADQOeEHAADQOeEHAADQOeEHAADQOeEHAADQOeEHAADQ\nOeEHAADQOeEHAADQOeEHAADQOeEHAADQOeEHAADQOeEHAADQOeEHAADQOeEHAADQOeEHAADQOeHH\nVLjxxhvzghe8IJ/4xCfGHgUAAOad8GMqbNiwIY888kje/va3jz0KAADMO+FH92688cY8/PDDSZKH\nHnrIrh8AAFNH+NG9DRs2HLK26wcAwLQRfnRvZrdvxkMPPTTSJAAAMA7hR/ee+cxnHrJ+1rOeNdIk\nAAAwDuFH9zZv3nzI+t3vfvdIkwAAwDiEH9170Yte9Oiu37Oe9ayce+65I08EAADzS/gxFTZv3pxj\njjnGbh8AAFNp6dgDwHx40YtelE9+8pNjjwEAAKOw4wcAANA54QcAANC5iYZfVf2fqvpMVd1SVTuH\nYydU1Y6q+sLw/dnD8aqqy6vqjqq6tapeMMnZAAAApsV87Pj9m9bamtba2mF9SZLrWmtnJ7luWCfJ\nK5KcPXytT/K+eZgNAACge2O81fOCJFcOj69McuFBx9/fDvhYkuOr6pQR5gMAAOjKpMOvJflfVXVz\nVa0fjp3cWrs3SYbvJw3HT02y+6CfvXs4BgAAwFGY9O0cXtxau6eqTkqyo6puf4Jz6zDH2neddCAg\n1yfJ6aefPjdTAgAAdGyiO36ttXuG7/cl+esk5yb58sxbOIfv9w2n351k5UE/flqSew7zO7e21ta2\n1tYuX758kuMDAAB0YWLhV1XHVtUzZx4n+bdJPpvkmiQXDaddlORDw+NrkrxhuLrnC5N8beYtoQAA\nAMzeJN/qeXKSv66qmf+dP2utba+qm5JcVVXrknwpyWuG869Ncn6SO5LsTfKLE5wNAABgakws/Fpr\ndyX5scMc/5ckLz3M8ZbkLZOaBwAAYFqNcTsHAAAA5pHwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6Jzw\nAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA\n6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6Jzw\nAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA\n6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6Jzw\nAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA\n6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6Jzw\nAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA\n6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6Jzw\nAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6JzwAwAA6NzEw6+qllTVp6rqb4b1D1bV\nx6vqC1X1l1X1tOH49wzrO4bnz5j0bAAAANNgPnb83prktoPWf5DkPa21s5M8mGTdcHxdkgdba89N\n8p7hPAAAAI7SRMOvqk5L8sok/21YV5KXJPmr4ZQrk1w4PL5gWGd4/qXD+QAAAByFSe/4/dckG5I8\nMqyfk+SrrbXvDOu7k5w6PD41ye4kGZ7/2nD+IapqfVXtrKqd999//yRnBwAA6MLEwq+q/n2S+1pr\nNx98+DCntiN47v8faG1ra21ta23t8uXL52BSAACAvi2d4O9+cZJXVdX5Sb43ybNyYAfw+KpaOuzq\nnZbknuH8u5OsTHJ3VS1N8n1JHpjgfAAAAFNhYjt+rbV3tNZOa62dkeRnk3y4tfZzSa5P8jPDaRcl\n+dDw+JphneH5D7fWvmvHDwAAgKdmjPv4/UaSX6+qO3LgM3zbhuPbkjxnOP7rSS4ZYTYAAIDuTPKt\nno9qrX0kyUeGx3clOfcw53wzyWvmYx4AAIBpMsaOHwAAAPNI+AEAAHRO+AEAAHRO+AEAAHRO+AEA\nAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO\n+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEA\nAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO\n+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEA\nAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO\n+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEA\nAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO\n+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEA\nAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRO+AEAAHRuYuFXVd9bVZ+oqk9X1eeq6neH\n4z9YVR+vqi9U1V9W1dOG498zrO8Ynj9jUrMBAABMk0nu+H0ryUtaaz+WZE2S86rqhUn+IMl7Wmtn\nJ3kwybrh/HVJHmytPTfJe4bzAAAAOEoTC792wJ5huWz4aklekuSvhuNXJrlweHzBsM7w/EurqiY1\nHwAAwLSY6Gf8qmpJVd2S5L4kO5LcmeSrrbXvDKfcneTU4fGpSXYnyfD815I8Z5LzAQAATIOJhl9r\nbX9rbU2S05Kcm+SHDnfa8P1wu3vtsQeqan1V7ayqnffff//cDQsAANCpebmqZ2vtq0k+kuSFSY6v\nqqXDU6cluWd4fHeSlUkyPP99SR44zO/a2lpb21pbu3z58kmPDgAAsOhN8qqey6vq+OHx05O8LMlt\nSa5P8jPDaRcl+dDw+JphneH5D7fWvmvHDwAAgKdm6ZOfMmunJLmyqpbkQGBe1Vr7m6r6pyR/UVXv\nSvKpJNuG87cl+dOquiMHdvp+doKzAQAATI2JhV9r7dYkzz/M8bty4PN+jz3+zSSvmdQ8AAAA02pe\nPuMHAADAeIQfAABA54QfAABA54QfAABA54QfAABA54QfAABA54QfAABA54QfAABA54QfAABA54Qf\nAABA54QfAABA54QfAABA54QfAABA54QfAABA54QfAABA54QfAABA54QfAABA54QfAABA54QfAABA\n54QfAABA54QfAABA54QfAABA54QfAABA54QfAABA54QfAABA54QfAABA54QfU2H79u1Zs2ZNduzY\nMfYoAAAw74QfU+E3f/M3kySXXHLJyJMAAMD8E350b/v27dm/f3+SZP/+/Xb9AACYOkcUfnXAz1fV\nbw/r06vq3MmOBnNjZrdvhl0/AACmzZHu+L03yYuSvG5YP5zkjycyEcyxmd2+x1sDAEDvlh7heT/R\nWntBVX0qSVprD1bV0yY4FwAAAHPkSHf89lXVkiQtSapqeZJHJjYVzKGTTjrpkPXJJ5880iQAADCO\nIw2/y5P8dZKTqur3ktyQZNPEpoI5dPnllx+y3rJly0iTAADAOI7orZ6ttQ9U1c1JXpqkklzYWrtt\nopPBHFm9enVOOumk3HfffTn55JNzzjnnjD0SAADMqyfd8auqY6rqs62121trf9xa+yPRx2Jz+eWX\n57jjjrPbBwDAVHrSHb/W2iNV9emqOr219qX5GArm2urVq3PDDTeMPQYAAIziSK/qeUqSz1XVJ5J8\nfeZga+1VE5kKAACAOXOk4fe7E50CAACAiTnSi7v8/aQHAQAAYDKO6HYOVfXCqrqpqvZU1beran9V\nPTTp4QAAADh6R3ofvz9K8rokX0jy9CRvGo7BonD77bfnJ3/yJ/P5z39+7FEAAGDeHWn4pbV2R5Il\nrbX9rbX/nuSnJjYVzLGNGzdmz549ecc73jH2KAAAMO+ONPz2VtXTktxSVZur6m1Jjp3gXDBnbr/9\n9tx1111JkjvvvNOuHwAAU+dIw+/1w7m/kgO3c1iZ5NWTGgrm0saNGw9Z2/UDAGDaPOFVPWdu2t5a\n++Jw6JtxawcWmZndvhl33nnnSJMAAMA4nmzH73/OPKiqqyc8C0zEmWeeecj6rLPOGmkSAAAYx5OF\nXx30+MzHPQsWsE2bNh2yvuyyy0aaBAAAxvFk4dce5zEsGqtXr3501++ss87KOeecM/JEAAAwv54s\n/H6sqh6qqoeTPG94/FBVPewG7iwmmzZtynHHHWe3DwCAqfSEF3dprS2Zr0FgklavXp0bbrhh7DEA\nAGAUR3wDdwAAABYn4QcAANA54QcAANA54QcAANA54QcAANA54QcAANA54QcAANA54QcAANA54QcA\nANA54QcAANA54cdU2L59e9asWZMdO3aMPQoAAMw74cdUuPTSS5MkGzduHHkSAACYf8KP7m3fvj37\n9u1Lkuzbt8+uHwAAU0f40b2Z3b4Zdv0AAJg2wo/uzez2Pd4aAAB6J/zo3rJly55wDQAAvRN+dO+d\n73znIetNmzaNNAkAAIxD+NG9H//xHz9k/fznP3+kSQAAYBzCj+5t3bo1VZUkqaps3bp15IkAAGB+\nCT+6d+2116a1liRpreVv//ZvR54IAADml/Cje+eff/6jF3RZtmxZXvnKV448EQAAzC/hR/fWr1+f\nY4458H/1Y445JuvXrx95IgAAmF/Cj+4tX748r3rVq1JVueCCC3LiiSeOPRIAAMyrpWMPAPNh/fr1\nufPOO+32AQAwlYQfU2H58uW54oorxh4DAABG4a2eTIXt27dnzZo12bFjx9ijAADAvBN+TIVLL700\nSbJx48aRJwEAgPkn/Oje9u3bs2/fviTJvn377PoBADB1hB/dm9ntm2HXDwCAaSP86N7Mbt/jrQEA\noHfCj+4tW7bsCdcAANA74Uf33vnOdx6y3rRp00iTAADAOIQf3TvvvPMe3eVbtmxZXv7yl488EQAA\nzC/hx1SY2fWz2wcAwDSq1trYM8za2rVr286dO8ceAwAAYBRVdXNrbe2TnWfHDwAAoHPCDwAAoHMT\nC7+qWllV11fVbVX1uap663D8hKraUVVfGL4/ezheVXV5Vd1RVbdW1QsmNRsAAMA0meSO33eS/MfW\n2g8leWGSt1TVDye5JMl1rbWzk1w3rJPkFUnOHr7WJ3nfBGcDAACYGhMLv9bava21Tw6PH05yW5JT\nk1yQ5MrhtCuTXDg8viDJ+9sBH0tyfFWdMqn5AAAApsW8fMavqs5I8vwkH09ycmvt3uRAHCY5aTjt\n1CS7D/qxu4djj/1d66tqZ1XtvP/++yc5NgAAQBcmHn5VdVySq5P8WmvtoSc69TDHvuteE621ra21\nta21tcuXL5+rMQEAALo10fCrqmU5EH0faK19cDj85Zm3cA7f7xuO351k5UE/flqSeyY5HwAAwDSY\n5FU9K8m2JLe11v7woKeuSXLR8PiiJB866Pgbhqt7vjDJ12beEgoAAMDsLZ3g735xktcn+UxV3TIc\n25jk95NcVVXrknwpyWuG565Ncn6SO5LsTfKLE5wNAABgakws/FprN+Twn9tLkpce5vyW5C2TmgcA\nAGBazctVPQEAABiP8AMAAOic8AMAAOic8AMAAOic8AMAAOic8AMAAOic8AMAAOic8AMAAOic8AMA\nAOic8AMAAOic8AMAAOic8AMAAOic8AMAAOic8AMAAOic8AMAAOic8AMAAOic8AMAAOic8AMAAOic\n8AMAAOic8AMAAOic8AMAAOic8AMAAOic8AMAAOic8AMAAOic8AMAAOic8AMAAOic8AMAAOjc0rEH\nYGHYvHlzdu3aNfYYE7N79+4kycqVK0eeZDJWrVqVDRs2jD0GAAALlPBjKuzdu3fsEQAAYDTCjyTp\nfrdo3bp1SZJt27aNPAkAAMw/n/EDAADonPADAADonPADAADonPADAADonPADAADonPADAADonPAD\nAADonPADAADonPADAADonPADAADonPADAADonPADAADonPADAADonPADAADonPADAADonPADAADo\nnPADAADonPADAADonPADAADonPADAADonPADAADonPADAADonPADAADonPADAADonPADAADonPAD\nAADonPADAADonPADAADonPADAADonPADAADonPADAADonPADAADonPADAADonPADAADonPADAADo\nnPADAADonPADAADonPADAADonPADAADonPADAADonPADAADonPADAADonPADAADonPADAADonPAD\nAADonPADAADonPADAADonPADAADonPADAADonPADAADonPADAADonPADAADonPADAADonPADAADo\nnPADAADonPADAADonPADAADo3MTCr6quqKr7quqzBx07oap2VNUXhu/PHo5XVV1eVXdU1a1V9YJJ\n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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "explore.discrete_var_boxplot(x='Pclass',y='Fare',data=data,output_path='./output/')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Continuous variable distplot\n", + "draw the distplot of a continuous variable x." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\yimeng.zhang\\AppData\\Roaming\\Python\\Python36\\site-packages\\scipy\\stats\\stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n", + " return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Image saved at ./output/Distplot_Fare.png\n" + ] + }, + { + "data": { + "image/png": "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\nfaSq7quqe6vqLcu4dcUZq6rnVtUdVfWHy3r6qWX8JVX1sWU9/fpy8bFU1XOW50eX1y/ZyfnzzFRV\ne6rqD6rqt5bn1hMbVlX3V9Unq+quqjqyjPmZdwoBt4aq2pPkF5K8NsnLkvxAVb1sZ2fFAO9JcuUp\nY29Nclt3709y2/I8WVlb+5fboSTvfJrmyCyPJfmx7n5pksuSXL/8v8i6YiMeTXJFd788yYEkV1bV\nZUl+JskNy3r6YpLrlu2vS/LF7v7WJDcs28Gp3pLkvlXPrSc26zu7+8CqPxfgZ94pBNzaLk1ytLs/\n293/N8n7k1y1w3PiGa67fzfJF04ZvirJjcvjG5NcvWr8vb3io0nOrqrzn56ZMkV3P9zdn1gefyUr\n/0i6INYVG7Csi68uT89abp3kiiQfWMZPXU8n19kHkrymquppmi4DVNWFSf5xkl9enlesJ7aen3mn\nEHBruyDJg6ueH1vG4Ey9qLsfTlb+MZ7kvGXcGuOMLIcbvSLJx2JdsUHL4W53JTme5NYkf5zkS939\n2LLJ6jXzl+tpef3LSV749M6YZ7j/nOTfJvn68vyFsZ7YnE7y21V1Z1UdWsb8zDvFtv0ZgeHW+o2Q\ny3Wylawx1q2qnp/kN5L8aHf/2VP80tq64il19+NJDlTV2Uk+mOSla2223FtPPKmq+r4kx7v7zqp6\n9cnhNTa1njgTr+ruh6rqvCS3VtUfPcW2u3ZN2QO3tmNJLlr1/MIkD+3QXJjtkZO785f748u4Nca6\nVNVZWYm3X+3u31yGrSs2pbu/lOR3snJu5dlVdfIXuqvXzF+up+X1b84TDxNn93pVkn9SVfdn5VST\nK7KyR856YsO6+6Hl/nhWfsl0afzMewIBt7aPJ9m/XEnpG5Jck+TmHZ4TM92c5Nrl8bVJPrRq/E3L\nFZQuS/Llk4cHwEnL+SHvSnJfd//cqpesK85YVe1b9rylqp6X5Luycl7lR5K8ftns1PV0cp29PsmH\n2x+PZdHdb+vuC7v7kqz8O+nD3f2DsZ7YoKr6xqr6ppOPk3xPknviZ94T+EPeT6KqXpeV3yTtSfLu\n7n77Dk+JZ7iqel+SVyc5N8kjSX4iyX9LclOSFyf5fJI3dPcXln+Y/3xWrlr5tSRv7u4jOzFvnrmq\n6h8l+b0kn8xfnWPy41k5D8664oxU1d/NygUA9mTlF7g3dfd/qKq/lZU9KOck+YMkP9Tdj1bVc5P8\nSlbOvfxCkmu6+7M7M3ueyZZDKP91d3+f9cRGLWvng8vTvUl+rbvfXlUvjJ95f42AAwAAGMIhlAAA\nAEMIOAAAgCEEHAAAwBACDgAAYAgBBwAAMMTe028CAHNV1eNZ+VMMJ13d3ffv0HQAYFP8GQEAntWq\n6qvd/fwNvG9Pdz++HXMCgI1yCCUAu05VXVJVv1dVn1hu/3AZf3VVfaSqfi3LXruq+qGquqOq7qqq\n/1JVe3Z08gDsag6hBODZ7nlVddfy+HPd/f1Jjif57u7+i6ran+R9SQ4u21ya5Du6+3NV9dIk/yzJ\nq7r7/1XVLyb5wSTvfZq/BwBIIuAAePb7P9194JSxs5L8fFUdSPJ4km9b9dod3f255fFrkvy9JB+v\nqiR5XlbiDwB2hIADYDf6V0keSfLyrJxO8BerXvvzVY8ryY3d/bancW4A8KScAwfAbvTNSR7u7q8n\neWOSJzuv7bYkr6+q85Kkqs6pqoufpjkCwBMIOAB2o19Mcm1VfTQrh0/++Vobdfenkvz7JL9dVXcn\nuTXJ+U/bLAHgFP6MAAAAwBD2wAEAAAwh4AAAAIYQcAAAAEMIOAAAgCEEHAAAwBACDgAAYAgBBwAA\nMISAAwAAGOL/Az5q2F6rhJbjAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "explore.continuous_var_distplot(x=data['Fare'],output_path='./output/')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## Scatter plot\n", + "draw the scatter-plot of two variables." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Image saved at ./output/Scatter_plot_Fare_Pclass.png\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4IAAAJQCAYAAADbiNrxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3XuUZdV9H/jvr17dTdNAI5qHecpB\nnqUnyC6wPXLGSE40KLaHWNJEKIoDSF6svO1EydjWWrZW7OWVaDx2Xo6tYcJLHknYEcjSOLENE8uR\nEkcShYyEEI7M6AWmoZEAAU13V1fVnj/qVlHdVdVdNHW7unt/PmvV6nv32Wef3zl396361jn3VLXW\nAgAAQD9GNroAAAAAji5BEAAAoDOCIAAAQGcEQQAAgM4IggAAAJ0RBAEAADojCAIAAHRGEAQAAOiM\nIAgAANCZsY0uYD2dccYZ7aKLLtroMgAAADbEPffc883W2o7D9TuhguBFF12UqampjS4DAABgQ1TV\n19fSz6WhAAAAnREEAQAAOiMIAgAAdEYQBAAA6IwgCAAA0BlBEAAAoDOCIAAAQGcEQQAAgM4IggAA\nAJ0RBAEAADojCAIAAHRGEAQAAOiMIAgAANAZQRAAAKAzgiAAAEBnBEEAAIDOCIIAAACdEQQBAAA6\nIwgCAAB0RhAEAADozNiwBq6qzUk+mWTTYDsfaa2996A+m5J8IMn3JPlWkre11r42WPazSd6VZDbJ\nP2it/cGwah2W6emZ7Nw9nZnZlrHRyjlbJzIxMZa5uZZdu/dl38xcTh4fSVUyPduyd6Zldq5lfLRy\nysRInto3t/h8bKQyO9eyaWwke2fmsn+2ZXSksmm0MjPX0pKcPjGSb03PrzM6UhlJMteSUzaN5Nn9\nc5memW+fGK1sHas8NT2Xs7ZM5LE90/N9k8zMtUyMVkarsmf/XMZGK2dtmcjISFbclwV7987ksT3P\nLz9ry0Q2b14+vdbabyUvZt1hjgUAAMebYf7kuy/JG1prz1bVeJL/UlW/11r79JI+70ryZGvt4qq6\nOsn7krytql6R5Ookr0zyHUn+36r6rtba7BDrXVfT0zO5b9ezecstU/n6k3ty4fYtuf3aybxqx8n5\n02/tzlU33Z0fuvgl+adX/g95dno2O5/el+tuu3ex7x3XTuYX7vxyPnb/Y7lw+5b85l9/bbZtGs3E\n2Ej+yv/12cV+N199abZvGcsH7/nzXP3d5x6wvRvfdkl+/4Fdeft3n5c333L3AeuctW0iW8Yr93/z\n2fzinV/O3/+LL827fuvzB/T52f/wQB59Zl9uv3Yyp580ntf/+n87YF9efebJmZgYy969M7n/m8v3\n9ZVnnHxAuFprv5W8mHWHORYAAByPhnZpaJv37ODp+OCrHdTtqiS3Dh5/JMkPVVUN2m9rre1rrX01\nyYNJLh9WrcOwc/f0YtBIkq8/uSdvuWUqjz43natumg9l777i4uyfbfnKt55bDIELfd98y1Suuez8\nxec//qE/ySNP78vXnthzQL/rbrs3jzy9L9ddfsGy7b3rtz6f6y6/YDEELl3na0/syUhG85bBdhZC\n4NI+P/2Gixfr3rt/btm+7Nw9nSR5bM/K+/rYnukDjsla+63kxaw7zLEAAOB4NNTPCFbVaFXdm2RX\nkrtaa585qMu5SR5KktbaTJJvJ3nJ0vaBhwdtK23j+qqaqqqpxx9/fL134YjNzLbFoLHg60/uOaB9\ndKQy25KtE2Mr9j39pIkDnm+dGMvWibFl/bZOjGV0pFYcY7X2rRNjmZlri9s51Pa//uSejFStuC+H\n29e1HpPDeTHrDnMsAAA4Hg01CLbWZltrlyY5L8nlVfWqg7rUSqsdon2lbdzQWptsrU3u2LHjxRW8\njsZGKxdu33JA24XbtxzQPjvXMlrJ7umZFfs+8dz0Ac93T89k9/TMsn67p2cyO9dWHGO19t3TMxkb\nqcXtHGr7F27fkrnWli0fG63D7utaj8nhvJh1hzkWAAAcj47KXUNba08l+aMkVx606OEk5ydJVY0l\nOTXJE0vbB85L8sjQC11H52ydyO3XTi4GjoXPoZ190kQ+9s7LcuH2LfmVP3ow46OV73zJSbn56ksP\n6HvHtZO59e6HFp//5l9/bb7jlE256PQtB/S7+epL8x2nbMrNn/3Gsu3d+LZLcvNnv5E7rr1s2ToX\nnb4lc5nN7YPt3Pi2S5b1ed8fPrhY9+bxkWX7cs7W+TOGZ21ZeV/P2vL8Gc0X0m8lL2bdYY4FAADH\no2ptOJfDVdWOJPtba09V1ZYkdyZ5X2vtd5f0+btJXt1a+1uDm8W8ubX216rqlUk+lPnPBX5Hkv+U\n5GWHu1nM5ORkm5qaGsr+HIl1uWtoaxkfOQp3Da35vgvbd9dQAAA4/lTVPa21ycP1G+ZPvuckubWq\nRjN/5vG3W2u/W1W/kGSqtfbxJDcm+c2qejDzZwKvTpLW2v1V9dtJvpRkJsnfPZ7uGLpgYmIsF04s\nP8QjI5Wzt20+7PqnbX3h2zx5lXW2r9B26qDvhWsMQCvty4LNm8fWNM5a+633usMcCwAAjjdDOyO4\nEY61M4IAAABH01rPCB6VzwgCAABw7BAEAQAAOiMIAgAAdEYQBAAA6IwgCAAA0BlBEAAAoDOCIAAA\nQGcEQQAAgM4IggAAAJ0RBAEAADojCAIAAHRGEAQAAOiMIAgAANAZQRAAAKAzgiAAAEBnBEEAAIDO\nCIIAAACdEQQBAAA6IwgCAAB0RhAEAADojCAIAADQGUEQAACgM4IgAABAZwRBAACAzgiCAAAAnREE\nAQAAOiMIAgAAdEYQBAAA6IwgCAAA0BlBEAAAoDOCIAAAQGcEQQAAgM4IggAAAJ0RBAEAADojCAIA\nAHRGEAQAAOiMIAgAANAZQRAAAKAzgiAAAEBnBEEAAIDOCIIAAACdEQQBAAA6IwgCAAB0RhAEAADo\njCAIAADQGUEQAACgM4IgAABAZwRBAACAzgiCAAAAnREEAQAAOiMIAgAAdEYQBAAA6MzYsAauqvOT\nfCDJ2UnmktzQWvtXB/X5J0nesaSWlyfZ0Vp7oqq+luSZJLNJZlprk8OqFQAAoCdDC4JJZpK8u7X2\nuaraluSeqrqrtfalhQ6ttV9O8stJUlU/muQfttaeWDLG61tr3xxijQAAAN0Z2qWhrbWdrbXPDR4/\nk+SBJOceYpW3J/nwsOoBAABg3lH5jGBVXZTktUk+s8ryk5JcmeT2Jc0tyZ1VdU9VXT/sGgEAAHox\nzEtDkyRVdXLmA95PtdaeXqXbjyb5rwddFvq61tojVXVmkruq6k9ba59cYfzrk1yfJBdccME6Vw8A\nAHDiGeoZwaoaz3wI/GBr7Y5DdL06B10W2lp7ZPDvriQfTXL5Siu21m5orU221iZ37NixPoUDAACc\nwIYWBKuqktyY5IHW2q8eot+pSX4wyceWtG0d3GAmVbU1yRuTfHFYtQIAAPRkmJeGvi7Jjye5r6ru\nHbS9J8kFSdJae/+g7ceS3Nla271k3bOSfHQ+S2YsyYdaa78/xFoBAAC6MbQg2Fr7L0lqDf1uSXLL\nQW1fSXLJUAoDAADo3FG5aygAAADHDkEQAACgM4IgAABAZwRBAACAzgiCAAAAnREEAQAAOiMIAgAA\ndEYQBAAA6IwgCAAA0BlBEAAAoDOCIAAAQGcEQQAAgM4IggAAAJ0RBAEAADojCAIAAHRGEAQAAOiM\nIAgAANAZQRAAAKAzgiAAAEBnBEEAAIDOCIIAAACdEQQBAAA6IwgCAAB0RhAEAADojCAIAADQGUEQ\nAACgM4IgAABAZwRBAACAzgiCAAAAnREEAQAAOiMIAgAAdEYQBAAA6IwgCAAA0BlBEAAAoDOCIAAA\nQGcEQQAAgM4IggAAAJ0RBAEAADojCAIAAHRGEAQAAOiMIAgAANAZQRAAAKAzgiAAAEBnBEEAAIDO\nCIIAAACdEQQBAAA6IwgCAAB0RhAEAADojCAIAADQGUEQAACgM4IgAABAZwRBAACAzgiCAAAAnRla\nEKyq86vqE1X1QFXdX1U/uUKfK6rq21V17+Dr55csu7Kq/ntVPVhVPzOsOgEAAHozNsSxZ5K8u7X2\nuaraluSeqrqrtfalg/p9qrX2I0sbqmo0yb9N8peTPJzk7qr6+ArrAgAA8AIN7Yxga21na+1zg8fP\nJHkgyblrXP3yJA+21r7SWptOcluSq4ZTKQAAQF+OymcEq+qiJK9N8pkVFn9/VX2+qn6vql45aDs3\nyUNL+jyctYdIAAAADmGYl4YmSarq5CS3J/mp1trTBy3+XJILW2vPVtVfSfI7SV6WpFYYqq0y/vVJ\nrk+SCy64YN3qBgAAOFEN9YxgVY1nPgR+sLV2x8HLW2tPt9aeHTz+j0nGq+qMzJ8BPH9J1/OSPLLS\nNlprN7TWJltrkzt27Fj3fQAAADjRDPOuoZXkxiQPtNZ+dZU+Zw/6paouH9TzrSR3J3lZVb20qiaS\nXJ3k48OqFQAAoCfDvDT0dUl+PMl9VXXvoO09SS5Iktba+5O8NcnfrqqZJHuSXN1aa0lmqurvJfmD\nJKNJbmqt3T/EWgEAALpR87nrxDA5OdmmpqY2ugwAAIANUVX3tNYmD9fvqNw1FAAAgGOHIAgAANAZ\nQRAAAKAzgiAAAEBnBEEAAIDOCIIAAACdEQQBAAA6IwgCAAB0RhAEAADojCAIAADQGUEQAACgM4Ig\nAABAZwRBAACAzgiCAAAAnREEAQAAOiMIAgAAdEYQBAAA6IwgCAAA0BlBEAAAoDOCIAAAQGcEQQAA\ngM4IggAAAJ0RBAEAADojCAIAAHRGEAQAAOiMIAgAANAZQRAAAKAzgiAAAEBnBEEAAIDOCIIAAACd\nEQQBAAA6IwgCAAB0RhAEAADojCAIAADQGUEQAACgM4IgAABAZwRBAACAzgiCAAAAnREEAQAAOiMI\nAgAAdEYQBAAA6IwgCAAA0BlBEAAAoDOCIAAAQGcEQQAAgM4IggAAAJ0RBAEAADojCAIAAHRGEAQA\nAOiMIAgAANAZQRAAAKAzgiAAAEBnBEEAAIDODC0IVtX5VfWJqnqgqu6vqp9coc87quoLg68/rqpL\nliz7WlXdV1X3VtXUsOoEAADozdgQx55J8u7W2ueqaluSe6rqrtbal5b0+WqSH2ytPVlVb0pyQ5Lv\nXbL89a21bw6xRgAAgO4MLQi21nYm2Tl4/ExVPZDk3CRfWtLnj5es8ukk5w2rHgAAAOYdlc8IVtVF\nSV6b5DOH6PauJL+35HlLcmdV3VNV1x9i7Ouraqqqph5//PH1KBcAAOCENsxLQ5MkVXVyktuT/FRr\n7elV+rw+80HwB5Y0v6619khVnZnkrqr609baJw9et7V2Q+YvKc3k5GRb9x0AAAA4wQz1jGBVjWc+\nBH6wtXbHKn1ek+TfJbmqtfathfbW2iODf3cl+WiSy4dZKwAAQC+GedfQSnJjkgdaa7+6Sp8LktyR\n5Mdba19e0r51cIOZVNXWJG9M8sVh1QoAANCTYV4a+rokP57kvqq6d9D2niQXJElr7f1Jfj7JS5L8\n+nxuzExrbTLJWUk+OmgbS/Kh1trvD7FWAACAbgzzrqH/JUkdps9PJPmJFdq/kuSS5WsAAADwYh2V\nu4YCAABw7BAEAQAAOiMIAgAAdEYQBAAA6IwgCAAA0BlBEAAAoDOCIAAAQGcEQQAAgM4IggAAAJ0R\nBAEAADojCAIAAHRGEAQAAOiMIAgAANAZQRAAAKAzgiAAAEBnBEEAAIDOCIIAAACdEQQBAAA6IwgC\nAAB0RhAEAADojCAIAADQGUEQAACgM4IgAABAZwRBAACAzgiCAAAAnREEAQAAOiMIAgAAdEYQBAAA\n6IwgCAAA0BlBEAAAoDOCIAAAQGcEQQAAgM4IggAAAJ0RBAEAADojCAIAAHRGEAQAAOiMIAgAANAZ\nQRAAAKAzgiAAAEBnBEEAAIDOCIIAAACdEQQBAAA6IwgCAAB0Zk1BsKr+QlVtGjy+oqr+QVWdNtzS\nAAAAGIa1nhG8PclsVV2c5MYkL03yoaFVBQAAwNCsNQjOtdZmkvxYkn/ZWvuHSc4ZXlkAAAAMy1qD\n4P6qenuSa5L87qBtfDglAQAAMExrDYLXJfn+JL/UWvtqVb00yf89vLIAAAAYlrG1dGqtfSnJP0iS\nqtqeZFtr7Z8PszAAAACGY613Df2jqjqlqk5P8vkkN1fVrw63NAAAAIZhrZeGntpaezrJm5Pc3Fr7\nniR/aXhlAQAAMCxrDYJjVXVOkr+W528WAwAAwHForUHwF5L8QZIHW2t3V9V3JvmzQ61QVedX1Seq\n6oGqur+qfnKFPlVV/7qqHqyqL1TVdy9Zdk1V/dng65oXslMAAACsbq03i/n3Sf79kudfSfKWw6w2\nk+TdrbXPVdW2JPdU1V2DG88seFOSlw2+vjfJbyT53sFnEd+bZDJJG6z78dbak2vcr2PC3r0zeWzP\ndGZmW8ZGK2dtmcjmzWs65MvW3TYxkmen57J/tmV0pLJ5rNLafN/R0cqp42N57Lnp7B/03zI+kj37\n5zIz27Jt02hm51r2zbbMzrVsmxjJ3tk233ekctLEyOJY+2bmMj3bMj5aOXvrRJ7bP5NvT8+PMz5a\nOefkTamqPLFnen78ufn2zWMjeWbfbLaMj2Suteybeb7/+PjokI7woc3MzGXnM3szPdsyMVo5Z9vm\njI0d+ncf+/bN5NHnnj/uZ580kU2b1vaaAQDA8WJNP+FW1eYk70ryyiSbF9pba+9cbZ3W2s4kOweP\nn6mqB5Kcm2RpELwqyQdaay3Jp6vqtMElqFckuau19sRg+3cluTLJh9e+axtr796Z3P/NZ/OWW6by\n9Sf35MLtW3L7tZN55RknHzYMHrzuVa88Kz/3xu86YKybr740Z548kZm5+aD38FN78+aDtvWLd345\nLzlpPP/oir+QXc9O57rb7s3Z2zbln/3wy3Pdbfcu9v3INZM5/aSxzLXkH3/8S/nY/Y/lwu1b8qm/\n9/3Z9ez+Zftw/mmb8o2n9uWtt04dMMbvP/BoXvedZxww9u3XTuY1Z2076mFwZmYuX3j06QOOyR3X\nTuY1Z5+yahjct28mX3x8+Wv2qh0nC4MAAJxQ1npp6G8mOTvJ/5zkPyc5L8kza91IVV2U5LVJPnPQ\nonOTPLTk+cODttXajxuP7ZleDBRJ8vUn9+Qtt0zlsT3TL3jday47f9lYC2Hrz7+9N/tm2mLgWbqt\nay47P+++4uID+v/0Gy5efLzQ9623TmXfzPwZwmsuO3+xfWY2K+7Dnum2GAKXjvGO7zl/2dhvuWUq\nO5/dt16Hdc12PrN32TF58y1T2fnM3lXXefS5lV+zR587/GsGAADHk7UGwYtbaz+XZHdr7dYkP5zk\n1WtZsapOTnJ7kp8a3Hn0gMUrrNIO0b7S+NdX1VRVTT3++ONrKemomJlti4FiwXy4WnE3Drnu6SdN\nrDjW1omxbJ0Yy0jVistPP2kioyOVrRNji8tXG2ukKiNVOf2kicX22ZaV92Fu5X1brf/+Nezzepte\n5fhPz61ey4t5zQAA4Hiy1iC4f/DvU1X1qiSnJrnocCtV1XjmQ+AHW2t3rNDl4STnL3l+XpJHDtG+\nTGvthtbaZGttcseOHYcr6agZG61cuH3LAW0Xbt+SsdGVMu6h133iuekVx9o9PZPd0zOZa23F5U88\nN53ZuZbd0zOLy1cba661zLWWJ5ac/RqtrLwPIyvv22r9x9ewz+ttYpXjPzGyei0v5jUDAIDjyVqD\n4A1VtT3JzyX5eOY/5/e/H2qFqqokNyZ5oLW22h+f/3iSvzm4e+j3Jfn24LOFf5DkjVW1fbDdNw7a\njhtnbZnI7ddOLgaLhc+bnbVl4jBrLl/31rsfWjbWzVdfmgu3b8m5p27OprHKHSts69a7H8qv/NGD\nB/R/3x8+uPh4oe9HrpnMprHK+Gjl1rsfWmwfG82K+7BlovKRayaXjfHBex5aNvbt107mnJM3rddh\nXbNztm1edkzuuHYy52zbvOo6Z5+08mt29kmHf80AAOB4Uq0N57K3qvqBJJ9Kcl+SuUHze5JckCSt\ntfcPwuKvZf5GMM8lua61NjVY/52D/knyS621mw+3zcnJyTY1NbWu+/FirMddQ2fn5u8Suta7hs4M\n+p80PpLn3DV0/q6hcy0TI+4aCgDAia+q7mmtTR6236GCYFX9o0OtfIgzfRviWAuCAAAAR9Nag+Dh\nTnVsW6d6AAAAOEYcMgi21v7p0SoEAACAo2NNN4upqlur6rQlz7dX1U3DKwsAAIBhWetdQ1/TWntq\n4Ulr7cnM/4F4AAAAjjNrDYIjgz/jkCSpqtNz+M8XAgAAcAxaa5j7lST/rar+fZKW5K8l+aWhVQUA\nAMDQrCkIttY+UFVTSd6QpJK8ubX2paFWBgAAwFAcMghW1eYkfyvJxZn/w/Dvb63NHI3CAAAAGI7D\nfUbw1iSTmQ+Bb0ryfwy9IgAAAIbqcJeGvqK19uokqaobk3x2+CUBAAAwTIc7I7h/4YFLQgEAAE4M\nhzsjeElVPT14XEm2DJ5XktZaO2Wo1QEAALDuDhkEW2ujR6sQAAAAjo61/kF5AAAAThCCIAAAQGcE\nQQAAgM4IggAAAJ0RBAEAADojCAIAAHRGEAQAAOiMIAgAANAZQRAAAKAzgiAAAEBnBEEAAIDOCIIA\nAACdEQQBAAA6IwgCAAB0RhAEAADojCAIAADQGUEQAACgM4IgAABAZwRBAACAzgiCAAAAnREEAQAA\nOiMIAgAAdEYQBAAA6IwgCAAA0BlBEAAAoDOCIAAAQGcEQQAAgM4IggAAAJ0RBAEAADojCAIAAHRG\nEAQAAOiMIAgAANAZQRAAAKAzgiAAAEBnBEEAAIDOCIIAAACdEQQBAAA6IwgCAAB0RhAEAADojCAI\nAADQmbFhDVxVNyX5kSS7WmuvWmH5P0nyjiV1vDzJjtbaE1X1tSTPJJlNMtNamxxWnQAAAL0Z5hnB\nW5JcudrC1tovt9Yuba1dmuRnk/zn1toTS7q8frBcCAQAAFhHQwuCrbVPJnnisB3nvT3Jh4dVCwAA\nAM/b8M8IVtVJmT9zePuS5pbkzqq6p6qu35jKAAAATkxD+4zgC/CjSf7rQZeFvq619khVnZnkrqr6\n08EZxmUGQfH6JLnggguGXy0AAMBxbsPPCCa5OgddFtpae2Tw764kH01y+Wort9ZuaK1NttYmd+zY\nMdRCAQAATgQbGgSr6tQkP5jkY0vatlbVtoXHSd6Y5IsbUyEAAMCJZ5h/PuLDSa5IckZVPZzkvUnG\nk6S19v5Btx9LcmdrbfeSVc9K8tGqWqjvQ6213x9WnQAAAL0ZWhBsrb19DX1uyfyfmVja9pUklwyn\nKgAAAI6FzwgCAABwFAmCAAAAnREEAQAAOiMIAgAAdEYQBAAA6IwgCAAA0BlBEAAAoDOCIAAAQGcE\nQQAAgM4IggAAAJ0RBAEAADojCAIAAHRGEAQAAOiMIAgAANAZQRAAAKAzgiAAAEBnBEEAAIDOCIIA\nAACdEQQBAAA6IwgCAAB0RhAEAADojCAIAADQGUEQAACgM4IgAABAZwRBAACAzgiCAAAAnREEAQAA\nOiMIAgAAdEYQBAAA6IwgCAAA0BlBEAAAoDOCIAAAQGcEQQAAgM4IggAAAJ0RBAEAADojCAIAAHRG\nEAQAAOiMIAgAANAZQRAAAKAzgiAAAEBnBEEAAIDOCIIAAACdEQQBAAA6IwgCAAB0RhAEAADojCAI\nAADQGUEQAACgM4IgAABAZwRBAACAzgiCAAAAnREEAQAAOiMIAgAAdEYQBAAA6MzQgmBV3VRVu6rq\ni6ssv6Kqvl1V9w6+fn7Jsiur6r9X1YNV9TPDqhEAAKBHwzwjeEuSKw/T51OttUsHX7+QJFU1muTf\nJnlTklckeXtVvWKIdQIAAHRlaEGwtfbJJE8cwaqXJ3mwtfaV1tp0ktuSXLWuxQEAAHRsoz8j+P1V\n9fmq+r2qeuWg7dwkDy3p8/CgbUVVdX1VTVXV1OOPPz7MWgEAAE4IGxkEP5fkwtbaJUn+TZLfGbTX\nCn3baoO01m5orU221iZ37NgxhDIBAABOLBsWBFtrT7fWnh08/o9JxqvqjMyfATx/SdfzkjyyASUC\nAACckDYsCFbV2VVVg8eXD2r5VpK7k7ysql5aVRNJrk7y8Y2qEwAA4EQzNqyBq+rDSa5IckZVPZzk\nvUnGk6S19v4kb03yt6tqJsmeJFe31lqSmar6e0n+IMlokptaa/cPq04AAIDe1Hz2OjFMTk62qamp\njS4DAABgQ1TVPa21ycP12+i7hgIAAHCUCYIAAACdEQQBAAA6IwgCAAB0RhAEAADojCAIAADQGUEQ\nAACgM4IgAABAZwRBAACAzgiCAAAAnREEAQAAOiMIAgAAdEYQBAAA6IwgCAAA0BlBEAAAoDOCIAAA\nQGcEQQAAgM4IggAAAJ0RBAEAADojCAIAAHRGEAQAAOiMIAgAANAZQRAAAKAzgiAAAEBnBEEAAIDO\nCIIAAACdEQQBAAA6IwgCAAB0RhAEAADojCAIAADQGUEQAACgM4IgAABAZwRBAACAzgiCAAAAnREE\nAQAAOiMIAgAAdEYQBAAA6IwgCAAA0BlBEAAAoDOCIAAAQGcEQQAAgM4IggAAAJ0RBAEAADojCAIA\nAHRGEAQAAOiMIAgAANAZQRAAAKAzgiAAAEBnBEEAAIDOCIIAAACdEQQBAAA6IwgCAAB0RhAEAADo\nzNCCYFXdVFW7quqLqyx/R1V9YfD1x1V1yZJlX6uq+6rq3qqaGlaNAAAAPRrmGcFbklx5iOVfTfKD\nrbXXJPnFJDcctPz1rbVLW2uTQ6oPAACgS2PDGri19smquugQy/94ydNPJzlvWLUAAADwvGPlM4Lv\nSvJ7S563JHdW1T1Vdf2hVqyq66tqqqqmHn/88aEWCQAAcCIY2hnBtaqq12c+CP7AkubXtdYeqaoz\nk9xVVX/aWvvkSuu31m7I4LLSycnJNvSCAQAAjnMbekawql6T5N8luaq19q2F9tbaI4N/dyX5aJLL\nN6ZCAACAE8+GBcGquiDJHUl+vLX25SXtW6tq28LjJG9MsuKdRwEAAHjhhnZpaFV9OMkVSc6oqoeT\nvDfJeJK01t6f5OeTvCTJr1dK9BPxAAASAklEQVRVkswM7hB6VpKPDtrGknyotfb7w6oTAACgN8O8\na+jbD7P8J5L8xArtX0lyyfI1AAAAWA/Hyl1DAQAAOEoEQQAAgM4IggAAAJ0RBAEAADojCAIAAHRG\nEAQAAOiMIAgAANAZQRAAAKAzgiAAAEBnBEEAAIDOCIIAAACdEQQBAAA6IwgCAAB0RhAEAADojCAI\nAADQGUEQAACgM4IgAABAZwRBAACAzgiCAAAAnREEAQAAOiMIAgAAdEYQBAAA6IwgCAAA0BlBEAAA\noDOCIAAAQGcEQQAAgM4IggAAAJ0RBAEAADojCAIAAHRGEAQAAOiMIAgAANAZQRAAAKAzgiAAAEBn\nBEEAAIDOCIIAAACdEQQBAAA6IwgCAAB0RhAEAADojCAIAADQGUEQAACgM4IgAABAZwRBAACAzgiC\nAAAAnREEAQAAOiMIAgAAdEYQBAAA6IwgCAAA0BlBEAAAoDOCIAAAQGcEQQAAgM4IggAAAJ0RBAEA\nADoz1CBYVTdV1a6q+uIqy6uq/nVVPVhVX6iq716y7Jqq+rPB1zXDrBMAAKAnY0Me/5Ykv5bkA6ss\nf1OSlw2+vjfJbyT53qo6Pcl7k0wmaUnuqaqPt9aeHHK962rfvpk8+tx0ZmZbxkYrZ580kU2b5g/5\n3FzLrt37sm9mLpvGRnLm1k0ZGamjUtfevTN5fM90pmdbRkcqm0Yrp4xVZpM8OT03X+9IZWKsMjPX\nUklm55KJscr0bDtgf8bHR/P0nn359pL1tm0aySmbJvLNPdMr7t/SfT91YiTfnp7LSJK5wbIt4yOZ\nnm3ZP9jO9omR7JlLxip5dnouM3Pz7VvGR7J3/1zGRiqzrWW0Knv2z2VitDI2Ml/rpvH5bc/Ntex8\nZm+mZ1smRitnbZ3IY7unk0rmWjIz1zI+Ujnn5E0ZHx99vsb9c9kyPpLZuZZ9sy2jI8lozY89O9ey\naayydXwke2dbpmfaYm0nj4/k5PGxPPbcdPbPtoyPVs46aSK7nnv+uE+Mzte9aXQke2fmsn9Q2znb\nNmds7Mh/RzMzM7e4r+Ojlc1jI3lm32xO2zyaZ/fPLb5+Z22ZyK49z9e3sO8Hm56eyc7dz8/jc7ZO\nZGLiyN86ZmbmsvPZvZmemd/u2Ehlz8zcAcf/SPZ1pWO3tPbx0cr4SOW5/XOH3N8j3VaP9u+fzc5n\n9y3+Xz11YiSnbFn7e9la3gfXe/6txbBe65mZuTz67N7sm3n+PeCMLeND3x8A1tfS739H8jPFsWKo\n331aa5+sqosO0eWqJB9orbUkn66q06rqnCRXJLmrtfZEklTVXUmuTPLhYda7nvbtm8kXH382b7ll\nKl9/ck8u3L4lt187mVftODnj46O579Gnc9VNdy8u+9g7L8urzz5l6GFw796ZfOmbz+bNS+q6+epL\n87IdJ+WxZ6YPqPcj10zmt/7kz/NXX312fue+R/O2156bt976/PI7rp3Md5y6KX/+7X3L1jv9pJm8\n4Tc+vWz/kizu+09cfl7e9Iqz84t3fjl//y++NO/6rc/n7G2b8s9++OW57rZ7DzhuF2/fnAef3Lvs\neP7Xr3wrrzznlPybT301P/k/fWd+9j88kEef2Zebr7508fEn/s7358nn9i/u8z/+we/M1d997gHb\nXTrmq888OQ98c3euuunu/NDFL8k/uuIvZNez0/lXn/xK3vOXLs7u6bkD6vvE3/n+PLF7f95y64G1\nnbZlLD80OAZXvfKs/Nwbv+uA+m+++tKcf+qmPPbM9LLj+pqzTzmiHzxnZubyhUefPuD1/cg1k/nz\np3bnvO1blx2/X7zzy/nY/Y8tPn/NWdsOeCObnp7JfbuWz+NXn3nyEf3wulJ9S1+rlWp4IWMtPXYr\n1T6sbfVo//7ZfOGxZ5bNjbNm5vId27Yc9r1sbq4d9n1wveffWgzrtZ6Zmct9jz6TH7vl7gPm41Pb\nJnLx9pOEQYDjxGrf/9b6M8WxZKN/gjk3yUNLnj88aFut/bjx6HPPh6ok+fqTe/KWW6by6HPT2bV7\n3+IPPwvLrrrp7uzavW/odT22Z3rxB5yFbV93273ZP9OW1fvWW6dy3eUX5B0f/JNcd/kFi2FlYfmb\nb5nKvv0rr7dvpq24f0v3/R3fc37ecstUrrns/MUw9tNvuHgxZC09bk/tm1vxeP7oK8/Ou37r87nm\nsvNz3W335qffcPHiPi083rt/7oB9vu7yC5Ztd+mYO3dPL9b47iueH++ay87PN3fvX1bf3v1ziyFw\n6TjTS47BNZedv6z+6267N6MjIyse153P7D2i13fnM3uXvb5vvXUql567fcXjd81l5x+4788eOAd3\n7l55Hu/cPb1u9S19rVaq4YWMtfTYrVT7sLbVo53P7ltxbuyfaWt6L1vL++B6z7+1GNZrvfOZvYsh\ncGHc6267N197Ys9Q9weA9bXa97+1/kxxLNnoX0Gu9Cvjdoj25QNUXZ/k+iS54IIL1q+yF2lm9vkQ\nsODrT+7JzGxLMrfisn0zcxtW12zLiu2jI3XAvwcv3z+38ngjVcvaFvZvof/CNk8/aWKxbenjpevO\nrLKdg8c4/aSJxWULj0fqwNoX9mXVbS05RqMjla0TY8vGXurg8Vc6Bqtta7XjPj234nQ/rOlVXt/V\nXqeFfVrsN3vgdg89j9evvqXH9uAaXuhYC8dutdqHsa0e7T/Ee8la3sv2zRz+fXC9599aDOu1Xm3c\nrRNjQ90fANbXat//1vozxbFko88IPpzk/CXPz0vyyCHal2mt3dBam2ytTe7YsWNohb5QY6OVC7dv\nOaDtwu1bMjZa2TQ2suKyTUfhErPV6hqtrNg+O9cO+Pfg5eMjK48319qytk1jIwfs+8I2n3huerFt\n6eOl646tsp2Dx3jiuenFZQuP59qBtS/sy6rbWnKMZudadk/PLPZfeLzUweOvdAxW29Zqx33iCC8R\nnljl9V3tdVo4Rov9Rg/c7qHm8XrWt/R1O7iGFzrWwrFbrfZhbKtH44d4L1nLe9la3gfXe/6txbBe\n69XG3T09M9T9AWB9rfb9b60/UxxLNjoIfjzJ3xzcPfT7kny7tbYzyR8keWNVba+q7UneOGg7bpx9\n0kRuv3ZycaIsXD989kkTOXPrpnzsnZcdsOxj77wsZ27dNPS6ztoykTsOquvmqy/N+Fgtq/cj10zm\n5s9+Ix98x2tz82e/kY9cc+DyO66dzKbxldfbNFYr7t/Sff/gPQ/l9msnc+vdD+XGt12SC7dvyfv+\n8MHcfPWly47baZtGVjye/8/9j+bGt12SW+9+KDdffWne94cPLu7TwuPN4yMH7PPNn/3Gsu0uHfOc\nrROLNf7KHz0/3q13P5Qzto4vq2/z+Ehuv2Z5bRNLjsGtdz+0rP6br740s3NzKx7Xc7ZtPqLX95xt\nm5e9vh+5ZjL3/vmTKx6/W+9+6MB9P/nAOXjO1pXn8TlbJ3IkVqpv6Wu1Ug0vZKylx26l2oe1rR6d\nc/KmFefG+Fit6b1sLe+D6z3/1mJYr/U52zbno9detmw+XnT6lqHuDwDra7Xvf2v9meJYUq0N7zRm\nVX048zd+OSPJY5m/E+h4krTW3l9Vlfm7il6Z5Lkk17XWpgbrvjPJewZD/VJr7ebDbW9ycrJNTU2t\n924csRPqrqFt/jfaC3fLHB05Nu8aundw98mxkcr0XFvc9uJdQ+daJkaW3zV0dm6+9mV3DZ2Zy5ax\nVe4a2lo2ja7jXUMHta3bXUMHd0LdPDaSZ6Znc9qmY/euoXtn5g44/keyrysdu6HcNXSdXqcTwQl/\n19B1fq3dNRTgxHCs3zW0qu5prU0ett8wg+DRdqwFQQAAgKNprUGw719nAwAAdEgQBAAA6IwgCAAA\n0BlBEAAAoDOCIAAAQGcEQQAAgM4IggAAAJ0RBAEAADojCAIAAHRGEAQAAOiMIAgAANAZQRAAAKAz\ngiAAAEBnBEEAAIDOCIIAAACdEQQBAAA6IwgCAAB0RhAEAADojCAIAADQGUEQAACgM9Va2+ga1k1V\nPZ7k6xtdxwrOSPLNjS6CE4b5xHozp1hP5hPrzZxiPfUwny5sre04XKcTKggeq6pqqrU2udF1cGIw\nn1hv5hTryXxivZlTrCfz6XkuDQUAAOiMIAgAANAZQfDouGGjC+CEYj6x3swp1pP5xHozp1hP5tOA\nzwgCAAB0xhlBAACAzgiCQ1RVV1bVf6+qB6vqZza6Ho4PVXVTVe2qqi8uaTu9qu6qqj8b/Lt90F5V\n9a8Hc+wLVfXdG1c5x6KqOr+qPlFVD1TV/VX1k4N2c4ojUlWbq+qzVfX5wZz6p4P2l1bVZwZz6req\namLQvmnw/MHB8os2sn6OTVU1WlV/UlW/O3huPnHEquprVXVfVd1bVVODNt/3DiIIDklVjSb5t0ne\nlOQVSd5eVa/Y2Ko4TtyS5MqD2n4myX9qrb0syX8aPE/m59fLBl/XJ/mNo1Qjx4+ZJO9urb08yfcl\n+buD9yJziiO1L8kbWmuXJLk0yZVV9X1J3pfkXwzm1JNJ3jXo/64kT7bWLk7yLwb94GA/meSBJc/N\nJ16s17fWLl3ypyJ83zuIIDg8lyd5sLX2ldbadJLbkly1wTVxHGitfTLJEwc1X5Xk1sHjW5P81SXt\nH2jzPp3ktKo65+hUyvGgtbaztfa5weNnMv+D1rkxpzhCg7nx7ODp+OCrJXlDko8M2g+eUwtz7SNJ\nfqiq6iiVy3Ggqs5L8sNJ/t3gecV8Yv35vncQQXB4zk3y0JLnDw/a4Eic1Vrbmcz/YJ/kzEG7ecaa\nDS6hem2Sz8Sc4kUYXMZ3b5JdSe5K8v8leaq1NjPosnTeLM6pwfJvJ3nJ0a2YY9y/TPK/JZkbPH9J\nzCdenJbkzqq6p6quH7T5vneQsY0u4AS20m+n3KKV9WaesSZVdXKS25P8VGvt6UP8At2c4rBaa7NJ\nLq2q05J8NMnLV+o2+NecYlVV9SNJdrXW7qmqKxaaV+hqPvFCvK619khVnZnkrqr600P07XZOOSM4\nPA8nOX/J8/OSPLJBtXD8e2zhMoXBv7sG7eYZh1VV45kPgR9srd0xaDaneNFaa08l+aPMf/70tKpa\n+AXz0nmzOKcGy0/N8svf6dfrkvwvVfW1zH+M5g2ZP0NoPnHEWmuPDP7dlflfVl0e3/eWEQSH5+4k\nLxvc9WoiydVJPr7BNXH8+niSawaPr0nysSXtf3Nwx6vvS/LthcseIFn8rM2NSR5orf3qkkXmFEek\nqnYMzgSmqrYk+UuZ/+zpJ5K8ddDt4Dm1MNfemuQPmz9izEBr7Wdba+e11i7K/M9Kf9hae0fMJ45Q\nVW2tqm0Lj5O8MckX4/veMv6g/BBV1V/J/G+1RpPc1Fr7pQ0uieNAVX04yRVJzkjyWJL3JvmdJL+d\n5IIk30jyv7bWnhj8kP9rmb/L6HNJrmutTW1E3RybquoHknwqyX15/vM378n85wTNKV6wqnpN5m+0\nMJr5Xyj/dmvtF6rqOzN/Ruf0JH+S5G+01vZV1eYkv5n5z6c+keTq1tpXNqZ6jmWDS0P/cWvtR8wn\njtRg7nx08HQsyYdaa79UVS+J73sHEAQBAAA649JQAACAzgiCAAAAnREEAQAAOiMIAgAAdEYQBAAA\n6MzY4bsAQN+qajbzf4JjwV9trX1tg8oBgBfNn48AgMOoqmdbaycfwXqjrbXZYdQEAC+GS0MB4AhU\n1UVV9amq+tzg638ctF9RVZ+oqg9lcBaxqv5GVX22qu6tqv+zqkY3tHgAuufSUAA4vC1Vde/g8Vdb\naz+WZFeSv9xa21tVL0vy4SSTgz6XJ3lVa+2rVfXyJG9L8rrW2v6q+vUk70jygaO8DwCwSBAEgMPb\n01q79KC28SS/VlWXJplN8l1Lln22tfbVweMfSvI9Se6uqiTZkvkQCQAbRhAEgCPzD5M8luSSzH/U\nYu+SZbuXPK4kt7bWfvYo1gYAh+Qzgvz/7d2hDQJBEIbRfyogQZCgaApLaIQ6KAaCRyNogQqwLAJ7\nmBNn5j29YuyX3c0AMM8qyWuM8UlySPLv398tyb6qNklSVeuq2i00IwBMEoIAMM85ybGq7vk9C31P\nHRpjPJOcklyq6pHkmmS72JQAMMH6CAAAgGbcCAIAADQjBAEAAJoRggAAAM0IQQAAgGaEIAAAQDNC\nEAAAoBkhCAAA0IwQBAAAaOYLeJ9d7qYpCfwAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "explore.scatter_plot(x=data.Fare,y=data.Pclass,data=data,output_path='./output/')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Correlation plot\n", + "draw the correlation plot between variables." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Image saved at ./output/Corr_plot.png\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmYAAAJ4CAYAAADP8C9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3XmclWX9//HXNcMywwz7joggooCK\ngOCGSq65pZmFmpV9y9wqNVIzS8s1U1MzK0UzcUnFpXDJpRTZFARR2VEUREVh2EGW2a7fH4PjHGaA\n6Scz9w3n9Xw8zsNzzn0dz+fchzN8eF/XuSbEGJEkSVLycpIuQJIkSRVszCRJklLCxkySJCklbMwk\nSZJSwsZMkiQpJWzMJEmSUsLGTJIkKSVszCRJklLCxkySJCklGtTDc/irBSRJSreQ1BPndzk9kT5h\n3YKHE3vNW1IfjRn5XU6vj6fRFqxb8DBF659Kuoys1zbvRB557/mky8h6p3U/BoBhs19IuJLsdnbP\nrwJw8MhxCVeS3caddHDSJagKpzIlSZJSol4SM0mSpJqEYEZUlWdDkiQpJUzMJElSYoIZUQbPhiRJ\nUkqYmEmSpMS4xiyTZ0OSJCklbMwkSZJSwqlMSZKUGKcyM3k2JEmSUsLETJIkJSaEVP7KysSYmEmS\nJKWEiZkkSUqQGVFVng1JkqSUsDGTJElKCacyJUlSYtwuI5NnQ5IkKSVMzCRJUmJMzDJ5NiRJklLC\nxEySJCUmmBFl8GxIkiSlhI2ZJElSSjiVKUmSEuPi/0yeDUmSpJQwMZMkSYkxMcvk2ZAkSUoJEzNJ\nkpQYE7NMng1JkqSUsDGTJElKCacyJUlSYgIh6RJSxcRMkiQpJUzMJElSYlz8n8mzIUmSlBI2ZpIk\nKTEh5CRy2Xpd4ZgQwpwQwtwQwmU1HN8lhPBSCGFqCOGVEELnbXE+bMwkSZKqCCHkAn8GjgV6A6eH\nEHpvMuxm4P4YYx/gauB32+K5bcwkSZIy7QfMjTG+H2MsBh4BTtpkTG/gpY3XR9Vw/P+LjZkkSUpM\nUlOZIYSzQwiTq1zOrlLWTsCHVW5/tPG+qt4GTtl4/WSgaQih9Zc9H34rU5IkZZ0Y4zBg2GYO17S5\nWtzk9sXAHSGE7wNjgI+B0i9bl42ZJElKUCon7z4Cdq5yuzOwsOqAGONC4BsAIYRC4JQY48ov+8Sp\nPBuSJEkJmgT0CCF0CyE0Ak4Dnqo6IITQJnzx9c5fAvduiyc2MZMkSYlJ4wazMcbSEMJPgBeAXODe\nGOOMEMLVwOQY41PAV4DfhRAiFVOZP94Wz21jJkmStIkY47+Bf29y35VVrj8OPL6tnzd9baokSVKW\nMjGTJEmJSeNUZpI8G5IkSSlhYiZJkhITzIgyeDYkSZJSwsRMkiQlxjVmmTwbkiRJKWFjJkmSlBJO\nZUqSpMSEUNPvC89eJmaSJEkpYWImSZIS4+L/TDZmW3DnTedw7BH9KFq6igFHXZp0OTu0GCN//P1I\nXhs3m7y8hlx+zans0atztXFDz7ubpUtWU1Zazj79uzH08pPJzf3iQ/2P4a/wl1ue5ZlXfkuLlgX1\n+RK2WzFGnrvrSd6dNJOGjRvy9aFn0Gm3nauNW/juh/zzlocoLS6hx8DeHHvONwghMOJ397H048UA\nrF+zjrzCfM6741KmjprM+Cdernz8onkLOef2i+nYvfr7qor3YdTdTzDvjZk0aNyIYy48g/bdq78P\ni+Yu4PnbH6J0Qwnd9u3NYT86hRAC4x96lrkTpxFyAk2aF3LMBd+hsHVzPpz2Lv+6/m6at28NQI8D\n+nDgacfW98vbbu3frgUX7r0rOQSeWbCIB9/9KOP4qd07ccIuHSgrj6woLuF3b77LonUbAGif35hf\n9N2NdvmNicAlr83g043HpM2xMduCBx4bzZ3DX+CeW89PupQd3oRxs/lwwRIeefoXzJi2gJuvfZK7\nH7qg2rhrbvouBYV5xBj59c/vZ9SLUzny2L4ALPp0BZNfe5f2HVvUd/nbtXcnz2Tpx0VccM+v+WjO\nBzxzx2OcfdvQauOe+fMITrzgVDr37MqDV97F3Mmz6DGwN0N++f3KMc/f/U/yCvIB6HPYAPocNgCo\naMoevuYem7ItmPfGTJZ/UsQP7ryCT96Zz3//OoIzbv55tXH/vXMER51/Gh336MqTV9/J/Cmz6LZv\nbwacfDiDzjgegClPj+a1R5/nqPNPBaBz7+6cfMU59fp6dgQ5wNA+3fnZq9NZvK6Yewb3ZdynS5m/\nel3lmHdWfsZZo99iQ1k5X+/agfP37MpvJs8B4Nf9d2f4Ox8yuWgF+bk5lCf0OtLODWYzeTa2YPzr\ns1m2Yk3SZWSFsaNmcMzX9iWEwF59dmHN6vUsKVpVbVxBYR4AZaXllJSUUXXN6J9ueorzfna8C0n/\nR7MnTKfvEQMJIbBzz66s/2wdq5etzBizetlKNqxdz869uhFCoO8RA5k1YVrGmBgjM8a+xd6D+1d7\njmmj32CvGu7XF957fRq9D9uPEAKd9ujGhs/WsWaT92HNxvehU8+K96H3Yfsxd+JUABo3ya8cV7Jh\nA34MvrxeLZvy0WfrWbh2A6Ux8t+Pizi4Q+uMMW8uWcmGsoqWa8by1bTNawxA16b55AaYXLQCgHVl\n5ZXjpC2xMVMqLFm8inbtv0i62rVvzpLFK2scO/TcuznhsKtoUtCYrxzVB4Bxr8ygTbvm9NijU73U\nuyNZvWQFzdp+ce6btWnOqiWZ537VkpU0a1N1TAtWL1mRMeaD6e9R2KIprXdqV+05po95s8aGTV9Y\ns3QlTauc46ZtWrBm6crqY1pXGdM6c8y4B57hrh9cyazRb3DQt4+rvH/hnHncf+ENPHHVX1my4JM6\nfBU7lrZ5jVhcZeqxaN0G2uY12uz4E7q0Z+Li5QDsXJDP6pIyrhvYk3sH9+X83l39C1e1ssU/JyGE\n1SGEVZu71FeR2vFFYvU7N/NP/lvu/BEjX7qCkuJSprw+l/Xrihl+90ucdf7RdVzljqmGM19D6rj1\n92fa6Cns9ZXqzddHs+fTsHEj2ne1ad6SGKuf4+ofgZrehy+uHvzdEzjn3qvpNXhf3nx2LADtunfm\nR3dfxff+eBn9jj+Ukdffs+2K3sHV9COops8LwNGd29KzRSH/mFuxBi03BPZp3Yw/z5jHj8a8RaeC\nPI7t0r7uit2OhZCTyCWttrjGLMbYFCCEcDXwKfAAFT8GzgCabu5xIYSzgbMB7rrrrm1Vq3YwTzwy\nnqefnAhArz13ZvGiLxKYxYtW0qZts80+tnHjhhz8lT0ZO2oGrdo05ZOPl/H9IbcCULRoJT847Tbu\nfuintG6z+f9HNpv49FimvPAaAJ16dGFV0RfnftWSlTRtnXnemrVpwaolVcesoGnr5pW3y8rKmPXq\n25xz+yXVnmvamCnsXUPDJnjz2TFM+0/F+9Bhty4ZKeTqJSsoaNU8Y3xh6xasXlplzNIVFG4yBqDX\noQN48pq7GPTt4zKmOHcdsCcv3fUYa1etoUmzwm39cnY4i9cV0y6/ceXttvmNWbK+uNq4AW2b873d\nd+Yn46ZRUl7RuhWtL+bdlZ+xcG1F4jb2k6Xs2aopzy6on9q1/art4v+vxhj3r3L7ryGEicCNNQ2O\nMQ4Dhn1+88JrR32JErWjOuW0QZxy2iAAXh0ziyceGc+Rx/RlxrQFFBbmVWvM1q7dwNrPNtCmbTNK\nS8t4bexs9unfje49OvLMK7+tHPfNY6/nnn9c6Lcyt2D/rx3C/l87BIB3Xp/BxKfHstfg/nw05wPy\nCvJouslf9k1bNadRfmM+nD2fznvswlsvTWL/Ew+pPP7+m+/QpnN7mrfJ/OJFeXk5M8e+xf/dWP2L\nHIJ+xx9Kv+MPBeD9yTN489kx9DykP5+8M5/GBXnVmq7CVs1plJ/Hwjnz6Lh7V2aOer3y8csXLqZl\np4pp5LmvT6PVxinlz5avokmLpoQQ+OSdD4jlkfymfjZqY/aK1exckE/HJo0pWlfMkTu15ao35mSM\n6dG8gEv22Y2fvzaDFcUllffPWr6apg0b0KJRA1YUl9K/bQvmuGa5RmlOr5JQ28asLIRwBvAIFUnu\n6UBZnVWVEsP/9FMOObAXbVo2Ze7EO7jmlscZ/ugrSZe1QzrwkJ68Nm4Wp55wA3l5jbj86iGVx74/\n5BbuGzGU9euKuezCv1NSXEpZWWTf/XbjpG8dkGDVO4YeA3vzzqSZ/PGH19CwcSO+/rNvVx77609u\n5Lw7KraKOeHHQ/jXrQ9RsqGEHgN602NA78px08dMqXEN2QfT36NZmxa06tim7l/Idq7bvr15f/IM\n/nbu1TRs3Iiv/vSMymP3X/R7vnfbLwA48twhFdtlFBfTrX9vuu1b8T6Mvf9pln28mBACzdq15Mjz\nKr6R+c6rb/H2c+PIyc2hQaOGHH/xmX5BppbKItwy9T1uOXAvcgI8u2AR81av5Yc9uzB7xRrGf7qM\nH+/ZjfzcXK4Z2BOARWs3cNnrsygH7pgxj9sO2psQYM6KNTw1/9NkX5C2C6GmdQ3VBoXQFfgjMIiK\nxmw8cFGMcX4tniPmdzn9/79CbRPrFjxM0fqnki4j67XNO5FH3ns+6TKy3mndjwFg2OwXEq4ku53d\n86sAHDxyXMKVZLdxJx0MGasV69eu/W7eeiNSB95/8+JU/gulVonZxgbspLotRZIkKbvVamI3hLB7\nCOGlEML0jbf7hBB+XbelSZIkZZfarri7G/glUAIQY5wKnFZXRUmSpCwRcpK5pFRtK2sSY3x9k/tK\nt3UxkiRJ2ay238pcEkLozsa99UII3wTcPlqSJH0pbpeRqbaN2Y+p2JesZwjhY2AeFZvMSpIkaRup\nbWP2QYzxyBBCAZATY1xdl0VJkqTs4L56mWqbH84LIQwDDgDculiSJKkO1LYx2wP4LxVTmvNCCHeE\nEA6uu7IkSZKyT203mF0HjABGhBBaUvFbAEYDuXVYmyRJ2sGFWmdE2aHWZyOEMDiE8BdgCpAHDNnK\nQyRJkvQ/qFViFkKYB7xFRWp2SYzxszqtSpIkZQW3y8hU229l7hNjXFWnlUiSJGW5LTZmIYRLY4w3\nAteFEKr99vcY4wV1VpkkSdrxuV1Ghq0lZrM2/ndyXRciSZKU7bbYmMUYn954dWqM8c16qEeSJClr\n1XaN2S0hhI7AY8AjMcYZdViTJEnKFq79z1Cr0xFjPAz4ClAEDAshTAsh/LouC5MkSco2te5TY4yf\nxhhvB86lYuuMK+usKkmSlB1CSOaSUrVqzEIIvUIIvw0hTAfuAF4FOtdpZZIkSVmmtmvM/g48DBwd\nY1xYh/VIkqRskuL0KglbbcxCCLnAezHGP9ZDPZIkSVlrq1OZMcYyoHUIoVE91CNJkpS1ajuV+QEw\nPoTwFFD5ezJjjLfUSVWSJCk7uF1Ghto2Zgs3XnKApnVXjiRJUvaqVWMWY7yqrguRJEnZJ7r4P0Ot\nGrMQwiigpl9ifvg2r0iSJClL1XYq8+Iq1/OAU4DSbV+OJEnKKgZmGWo7lfnGJneNDyGMroN6JEmS\nslZtpzJbVbmZAwwAOtRJRZIkSVmqtlOZb/DFGrNSYD7ww7ooSJIkZZEc5zKr2mJjFkIYCHwYY+y2\n8faZVKwvmw/MrPPqJEmSssjWtnW7CygGCCEcCvwOGA6sBIbVbWmSJGmHF0Iyl5Ta2lRmboxx2cbr\npwLDYoxPAE+EEN6q29IkSZKyy9YSs9wQwufN2xHAy1WO1XZ9miRJUs1CQpeU2lpz9TAwOoSwBFgH\njAUIIexGxXSmJEmStpEtNmYxxutCCC8BHYEXY4yffzMzB/hpXRcnSZKUTbY6HRljnFDDfe/UTTmS\nJCmruF1Ghq2tMZMkSVI9cQG/JElKToq3rkiCiZkkSVJKmJhJkqTkGJhlMDGTJElKCRszSZKklHAq\nU5IkJcftMjKYmEmSJKWEiZkkSUqOgVkGEzNJkqSUMDGTJEmJiW4wm8HETJIkKSVszCRJklLCqUxJ\nkpQct8vIYGImSZKUEiZmkiQpOQZmGUzMJEmSUiLEGOv6Oer8CSRJ0peSWG6124nDE+kT5j51Ziqz\nunqZyixa/1R9PI22oG3eieR3OT3pMrLeugUPs6L430mXkfVaNDoOgIsmvJxwJdnttgMO33jtnUTr\n0O5JF6AqnMqUJElKCRf/S5Kk5LhdRgYTM0mSpJQwMZMkSckxMMtgYiZJkpQSJmaSJCk5wcisKhMz\nSZKklLAxkyRJSgmnMiVJUnKcysxgYiZJkpQSJmaSJCk5RkQZPB2SJEkpYWImSZKS4xqzDCZmkiRJ\nKWFjJkmSlBJOZUqSpOQ4k5nBxEySJCklTMwkSVJiYo6RWVUmZpIkSSlhYiZJkpLjdhkZTMwkSZJS\nwsZMkiQpJZzKlCRJyXEmM4OJmSRJUkqYmEmSpOS4XUYGEzNJkqSUMDGTJEnJcbuMDCZmkiRJKWFj\nJkmSlBJOZUqSpOQ4k5nBxEySJGkTIYRjQghzQghzQwiXbWbMkBDCzBDCjBDCP7bF85qYSZKk5KRw\nu4wQQi7wZ+Ao4CNgUgjhqRjjzCpjegC/BAbFGJeHENpti+c2MZMkScq0HzA3xvh+jLEYeAQ4aZMx\nPwL+HGNcDhBjXLwtntjGTJIkJScnJHIJIZwdQphc5XJ2lap2Aj6scvujjfdVtTuwewhhfAhhQgjh\nmG1xOpzKlCRJWSfGOAwYtpnDNc2vxk1uNwB6AF8BOgNjQwh7xRhXfJm6TMwkSZIyfQTsXOV2Z2Bh\nDWNGxhhLYozzgDlUNGpfio2ZJElKTAzJXLZiEtAjhNAthNAIOA14apMx/wIOAwghtKFiavP9L3s+\nbMwkSZKqiDGWAj8BXgBmASNijDNCCFeHEE7cOOwFYGkIYSYwCrgkxrj0yz63a8wkSVJyUrhdBkCM\n8d/Avze578oq1yMwdONlmzExkyRJSgkbM0mSpJRwKlOSJCUnpHMqMykmZpIkSSlhYiZJkpKT0sX/\nSTExkyRJSgkTM0mSlBwjogyeDkmSpJSwMZMkSUoJpzIlSVJy3C4jg4mZJElSSpiYSZKk5LhdRgYT\nM0mSpJQwMZMkSYmJrjHLYGImSZKUElmfmMUY+ePvR/LauNnk5TXk8mtOZY9enauNG3re3Sxdspqy\n0nL26d+NoZefTG7uF33tP4a/wl9ueZZnXvktLVoW1OdL2OHdedM5HHtEP4qWrmLAUZcmXc4OLcbI\nLTf8k1fHziIvryFXXHs6PXvvXG3chefexZKiVZSVldG3/65c8qtvkpubw68uHs4H8xcDsGb1Ogqb\n5vPg45fU98vYLhVNncGsh0YQyyOdBw+i+wlfzTheVlLC1GHDWTV/AQ0LC+h7/lk0adua8tIypt/7\nACs/+JBYVs5Og/an+9eOoay4hInX/4Hy0lJiWTkdBvajxze+ltCr237FGLnuumGMHv0GeXmNueGG\nC9lzz92qjfvud3/J4sXLyctrBMC9915N69YtePLJ/3LjjX+nffvWAHznO8fzrW99tdrjpc9lfWM2\nYdxsPlywhEee/gUzpi3g5muf5O6HLqg27pqbvktBYR4xRn798/sZ9eJUjjy2LwCLPl3B5NfepX3H\nFvVdflZ44LHR3Dn8Be659fykS9nhvTp2Fh9+UMTjz17O9KkfcOO1j3PvP35Wbdx1N59J4cbPw2VD\n7+OlF9/i6GP7c93NZ1aO+eNNIykozKvP8rdbsbycGfc/wn6XXkBeq5a8+tsbaNevD0136lg55qMx\nr9KwoAmDb7qahRMmMWfEP+n347P4dNIblJeWcsh1V1C2oZixl19FxwMGkt+mFftddhEN8vIoLy1j\nwnU306bPnrTcbdcEX+n2Z8yYN5g/fyEvvngXb789h9/+9q889tgfahx7880/Z++9e1S7/7jjDuHK\nK8+t61K3X87dZcj60zF21AyO+dq+hBDYq88urFm9niVFq6qN+/wvmLLSckpKyjK2XfnTTU9x3s+O\nJzhPXifGvz6bZSvWJF1GVhgzajrHnjiQEAJ779OV1avXsaRoZbVxhVU+D6UlpdX+7McY+e8Lb3H0\ncf3rpe7t3Yr351PQvi1N2rUlp0EDOu4/gMVT3s4Ys3jK2+x08AEAdBjYn6UzZxNjBAKlG4opLyuj\nrKSYkNuABvl5hBBokFfxPsWyMmJZmT+j/j+89NIEvv71wwkh0LdvT1at+ozFi5clXZZ2YLVKzEII\n3YGPYowbQghfAfoA98cYV9RlcfVhyeJVtGv/RdLVrn1zlixeSZu2zaqNHXru3cyc/iEHHLwHXzmq\nDwDjXplBm3bN6bFHp3qrWaorRYtX0r5D1c9DC4oWr6RN2+bVxl5wzp3MnLaAAw/uxeFH7ZNx7K03\n3qdV60K67NK2zmveEaxfvoK8Vi0rb+e1asmK9+ZtdkxObi4N8vMpWfMZHQb2Z/Gbb/PyhZdRvqGY\nnt/+Jo0KK5ZTxPJyxv/md6xdVESXIwbTonu3+ntRO4hFi5bSoUObytsdOrRm0aKltGvXqtrYyy//\nIzk5ORx99EGcf/6plY3wiy++yqRJM+jWrRO//OVZdOzo5yKD22VkqG1i9gRQFkLYDfgb0A34x+YG\nhxDODiFMDiFMHjZs2DYos+5EYvU7N/Ovylvu/BEjX7qCkuJSprw+l/Xrihl+90ucdf7RdVylVD8q\nEphN1fx5uP2uc3l21FUUl5QyeeK7GcdefG6Kadn/oobzXi3d2sxbs/L9+ZCTw+G33cDgP1zD/Of/\ny9rFRRWHc3I4+Jpfcdit17Py/fms/ujjbV/7Dq6mj0RNyePNN1/M00/fwUMP3cAbb8xg5MhRABx2\n2H68/PLfePrpP3HggX35xS9uq+uStZ2r7Rqz8hhjaQjhZOC2GOOfQghvbm5wjHEY8HlHFovWP/Vl\n69ymnnhkPE8/ORGAXnvuzOJFXwR/ixfVnJZ9rnHjhhz8lT0ZO2oGrdo05ZOPl/H9IbcCULRoJT84\n7TbufuintG6z+f+HlCaPPTyOkU+8BkDvvbqw6NOqn4cVtG235c/DoV/ZkzGjprP/QXsAUFpaxqj/\nTmX4oz+v28J3IHmtWrJ+2fLK2+uXLadxi+abjGnB+mXLyW/VkvKyMkrXraNhQQELJ7xO2733JKdB\nLo2bNaNFj+6snLeAJu2+SGUaFjShVc8eFE2dSdPOO9Xb69pePfTQs4wY8QIAe+/dg08/XVJ57NNP\na07LPl/cX1jYhBNOGMzUqe/w9a8fTsuWX3x+hgw5mptvvq9ui98eOcWeobaJWUkI4XTgTOCZjfc1\nrJuS6t4ppw3ivhFDuW/EUA45bC+ef/oNYoxMn/oBhYV51RqztWs3VK47Ky0t47Wxs9mlWzu69+jI\nM6/8lsefu5zHn7uctu2bc+8jF9mUabvyrdMP5sHHL+HBxy/h0MP34rmnJhFjZNrb8ykszK82jVnx\neahYd1ZaWsarY2fRtVu7yuOTJrxD127tM6ZEtWXNu+3CZ4sWs7ZoCeWlpXwycTLt+vXJGNOuXx8+\nHjcBgE8nTaF1rz0IIZDXuhVLZ84hxkjphg2seG8eBR3bs2HVako+WwtAWXExS2fOprBTh3p/bduj\nM844npEjb2fkyNs58sgD+Ne/XibGyFtvzaZp0ybVGrPS0jKWLav4TJSUlPLKK5Po0WMXgIz1aC+/\n/Drdu1f/lrNUVW0Ts/8DzgWuizHOCyF0Ax6su7Lqz4GH9OS1cbM49YQbyMtrxOVXD6k89v0ht3Df\niKGsX1fMZRf+nZLiUsrKIvvutxsnfeuABKvOLsP/9FMOObAXbVo2Ze7EO7jmlscZ/ugrSZe1Qxp0\nSG9eHTOLU467jry8Rlxx7WmVx77zzZt48PFLWLe2mIt/+reKz0N5OQP268HJQw6qHPef597k6OP6\nJVH+disnN5fe3z2NSTf9iVheTudDD6Jp50688+TTNO/ahfb996HzoYOYOuw+Rl9yJQ0LmtD3/B8C\nsMsRg5l2zwOMu/waIpHOhxxIsy6dWbXgI6bePRzKIzGW02G/fWnXd++EX+n2Z/DgAYwePZmjjjqb\n/PzGXH/9hZXHTjrpAkaOvJ3i4hLOOus3lJSUUV5exoEH9mXIkIolLg888DQvvzyR3Nxcmjdvyu9+\nd+HmnkoCINS8pmQLDwihJbBzjHFqLR+SuqnMbNQ270Tyu5yedBlZb92Ch1lR/O+ky8h6LRodB8BF\nE15OuJLsdtsBh2+89k6idWh32Nxi0nrQ7dJn/rdGZBuZd+MJqZxDrdVUZgjhlRBCsxBCK+Bt4O8h\nhFvqtjRJkqTsUts1Zs1jjKuAbwB/jzHuCxxZd2VJkqSsEBK6pFRtG7MGIYSOwBC+WPwvSZKkbai2\ni/+vBl4AxsUYJ4UQdgXe3cpjJEmStii6wWyGWjVmMcbHgMeq3H4fOKWuipIkScpGtf2VTHnAD4E9\ngcrfShxj/EEd1SVJkpR1arvG7AGgA/BVYDTQGVhdV0VJkqQskROSuaRUbRuz3WKMVwCfxRiHA8cD\n7lQoSZK0DdV28X/Jxv+uCCHsBXwKdK2TiiRJUvbwd2VmqG1jNmzjjv9XAE8BhcCVdVaVJElSFqrt\ntzLv2Xh1NLBr3ZUjSZKySm0XVWWJLTZmIYShWzoeY/TXMkmSJG0jW0vMmtZLFZIkSdpyYxZjvKq+\nCpEkSVnIxf8ZajWzG0IYHkJoUeV2yxDCvXVXliRJUvap7bcy+8QYV3x+I8a4PITQr45qkiRJ2SLF\nm70mobbfhcjZuF0GACGEVtS+qZMkSVIt1La5+gPwWgjhMSACQ4Dr6qwqSZKUHUzMMtR2H7P7QwiT\ngcOBAHwjxjizTiuTJEnKMlvbxywPOBfYDZgG3BljLK2PwiRJkrLN1hKz4VT8nsyxwLFAL+Ciui5K\nkiRlh+h2GRm21pj1jjHuDRBC+Bvwet2XJEmSlJ221piVfH4lxlga7GolSdK25O/KzLC1xmyfEMKq\njdcDkL/xdgBijLFZnVYnSZKURbb2K5ly66sQSZKUhZyNy2CAKEmSlBI2ZpIkSSnhr1WSJEnJcef/\nDCZmkiRJKWFiJkmSkmNilsHETJIkKSVMzCRJUnIMzDKYmEmSJKWEjZkkSVJKOJUpSZISE138n8HE\nTJIkKSVMzCRJUnL8XZkZTMwdWX+JAAAgAElEQVQkSZJSwsRMkiQlxzVmGUzMJEmSUsLGTJIkKSWc\nypQkSclxJjODiZkkSVJKmJhJkqTE5BgRZfB0SJIkpYSJmSRJSoz7y2YyMZMkSUoJGzNJkqSUcCpT\nkiQlxqnMTCZmkiRJKWFiJkmSEhOMzDKYmEmSJKWEiZkkSUqMgVkmEzNJkqSUCDHGun6OOn8CSZL0\npSSWW+1255hE+oS55x6ayqzOqUxJkpQYpzIz1Utj9sh7z9fH02gLTut+DCuK/510GVmvRaPjyO9y\netJlZL11Cx4GYOHapxOuJLt1avI1AH7y2qiEK8ludxx4WNIlqAoTM0mSlJjgavcMng5JkqSUMDGT\nJEmJcY1ZJhMzSZKklLAxkyRJSgmnMiVJUmJynMrMYGImSZKUEiZmkiQpMS7+z2RiJkmSlBImZpIk\nKTEmZplMzCRJklLCxkySJCklnMqUJEmJCc5lZjAxkyRJSgkTM0mSlJhgRJTB0yFJkpQSJmaSJCkx\nLjHLZGImSZKUEjZmkiRJKeFUpiRJSoxTmZlMzCRJklLCxEySJCXGxCyTiZkkSVJKmJhJkqTE5JiY\nZTAxkyRJSgkbM0mSpJSwMZMkSYkJIZnL1usKx4QQ5oQQ5oYQLqvh+LkhhGkhhLdCCONCCL23xfmw\nMZMkSaoihJAL/Bk4FugNnF5D4/WPGOPeMca+wI3ALdviuV38L0mSEpPS7TL2A+bGGN8HCCE8ApwE\nzPx8QIxxVZXxBUDcFk9sYyZJkrJOCOFs4Owqdw2LMQ7beH0n4MMqxz4C9q/h//FjYCjQCDh8W9Rl\nYyZJkhITEtovY2MTNmwzh2sqqloiFmP8M/DnEMK3gV8DZ37ZulxjJkmSlOkjYOcqtzsDC7cw/hHg\n69viiW3MJEmSMk0CeoQQuoUQGgGnAU9VHRBC6FHl5vHAu9viiZ3KlCRJiUnj4v8YY2kI4SfAC0Au\ncG+McUYI4WpgcozxKeAnIYQjgRJgOdtgGhNszCRJkqqJMf4b+Pcm911Z5fqFdfG8NmaSJCkxaUzM\nkuQaM0mSpJQwMZMkSYkxMctkYiZJkpQSNmaSJEkp4VSmJElKTEIb/6eWiZkkSVJKmJhJkqTEuPg/\nk4mZJElSSpiYSZKkxAQjogyeDkmSpJSwMZMkSUoJpzIlSVJiXPyfycRMkiQpJUzMJElSYoKRWQYT\nM0mSpJQwMZMkSYkxMMtkYiZJkpQSNmaSJEkpkZVTmTFGnrvrSd6dNJOGjRvy9aFn0Gm3nauNW/ju\nh/zzlocoLS6hx8DeHHvONwghMOJ397H048UArF+zjrzCfM6741KmjprM+Cdernz8onkLOef2i+nY\nvXO9vbbtVYyRW274J6+OnUVeXkOuuPZ0evau/p5ceO5dLClaRVlZGX3778olv/omubk5/Ori4Xww\nv+I9WbN6HYVN83nw8Uvq+2Xs8O686RyOPaIfRUtXMeCoS5MuZ4cWY+RPN45k4vhZ5OU14hdXncru\nvar/LLn0x3eztGgVZWXl9OnXjQt/+Q1yc3N45T9vc9+dL7Jg3mL++sAF7LFn9c+TarZk6gzm/GME\nsbycnQ4dRLcTjsk4Xl5SwvS772PV/AU0LCygz3lnkd+2DeWlpcy67yFWzf8AQmCPbw+hVa89Kh5T\nWsrsBx5h+ex3IAR2O+Uk2g/sn8TLSx2nMjNlZWP27uSZLP24iAvu+TUfzfmAZ+54jLNvG1pt3DN/\nHsGJF5xK555defDKu5g7eRY9BvZmyC+/Xznm+bv/SV5BPgB9DhtAn8MGABVN2cPX3GNTVkuvjp3F\nhx8U8fizlzN96gfceO3j3PuPn1Ubd93NZ1JYmEeMkcuG3sdLL77F0cf257qbz6wc88ebRlJQmFef\n5WeNBx4bzZ3DX+CeW89PupQd3sRxs/l4QREPjryMWdMWcOv1T/DXBy6sNu43v/8uBRs/E7+5+H5G\n/+dtDj+mH926d+DqP5zJLdc+nkD1269YXs7sBx6m/yUXkteqJROv+h1t+/WhcKdOlWM+HjOeBk2a\ncPCN1/DphEm8+9g/6XP+j/j4lXEAHHjtlRSvWsWUP9zB/r+5jJCTw7ynn6NRs6YM+v3VxPJySj5b\nm9RLVMpl5VTm7AnT6XvEQEII7NyzK+s/W8fqZSszxqxetpINa9ezc69uhBDoe8RAZk2YljEmxsiM\nsW+x9+Dq/+qZNvoN9qrhftVszKjpHHtixXuy9z5dWb16HUuKVlYbV7ix4SorLae0pLTa16xjjPz3\nhbc4+jjPfV0Y//pslq1Yk3QZWWH86BkcfcIAQgj07rMLn61ez9KiVdXGFVT9TJSWVsYPu+zani5d\n29VrzTuCle/Pp0n7djRp15acBg3osP9Ait6cmjGm6M2pdDr4QADaDezPspmziTGyZuEntOrdE4BG\nzZrRsEl+RXoGfDz21crkLeTk0KhpYT2+qnQLIZlLWm21MQshtA8h/C2E8NzG271DCD+s+9Lqzuol\nK2jWtkXl7WZtmrNqSWYTsGrJSpq1qTqmBauXrMgY88H09yhs0ZTWO1X/4Td9zJs1NmyqWdHilbTv\n8MX5bte+BUWLqzdmABeccyfHDL6CJk3yOPyofTKOvfXG+7RqXUiXXdrWab1SXVuyeCXtqnwm2rRv\nzpLNfCYuOX8YJx/xW/Kb5DH4yD71VeIOacPy5TRu1bLyduOWLdiwfHnGmPXLV5C3cUxObi4N8vMp\nWfMZTbt0ZvGUtykvK2Nd0RJWzV/A+qXLK9OxuU8+xYTfXMfbdwxjw8rqTbYEtUvM7gNeAD7Pcd8B\nLtrSA0IIZ4cQJocQJg8bNuzLVVgHYg33Vd/groZRm4yZNnoKe32levP10ez5NGzciPZdO1U7pprF\nWOO7UuPY2+86l2dHXUVxSSmTJ76bcezF56aYlmmHUONnYjP/zL/pL2fzxH+upKS4lDcnza3jynZw\nNf0o2vRnUY3vDXQ65CDyWrVg4m9/x5x/jKB5j10JuTnE8nI2LFtOi926c8BVv6LFbrvy7iNP1EX1\n26WckMwlrWqzxqxNjHFECOGXADHG0hBC2ZYeEGMcBnzekcVH3nv+S5b55U18eixTXngNgE49urCq\n6Iv0a9WSlTRt3SxjfLM2LVi1pOqYFTRt3bzydllZGbNefZtzbq++wHzamCnsXUPDpkyPPTyOkU9U\nvCe99+rCok+/ON+LF62gbbtmm3sojRs35NCv7MmYUdPZ/6CKxbWlpWWM+u9Uhj/687otXKoj/3x0\nPM8+ORGAnnvuzOIqn4kli1bSpu3mPxONGjfkoMG9Gf/KdAYcsHud17qjatyqJRuWfZGQbVi+gsYt\nW2SMyWvVkvXLlpPXqiXlZWWUrltHw4ICwsYF/597/dobadK+HQ0LC8hp1Ih2+/YFoP3A/nw8Znz9\nvCBtd2qTmH0WQmjNxn9HhBAOAGrO01Ns/68dwnl3XMp5d1xKrwP35q2XJhFj5MPZ88kryKNpq+YZ\n45u2ak6j/MZ8OHs+MUbeemkSPQ/Yq/L4+2++Q5vO7WneJvMDW15ezsyxb7HXoTZmW/Ot0w/mwccv\n4cHHL+HQw/fiuacq3pNpb8+nsDCfNm0z35O1azdUrjsrLS3j1bGz6Nrti2nkSRPeoWu39hlTotL2\n5ORTB3HPo0O559GhDDpsT158ZjIxRmZO/YCCwjxab9KYrVu7oXLdWVlpGRPHz3Zd2ZfUrNsurF20\nmHVFSygvLeXTiZNo2y9zerht3z4sHFfxj8rFk6bQqtcehBAo21BM2YYNACydPpOQk0PhTp0IIdC2\nb5+Kb2QCy2bOpqBTx/p9Ydpu1CYxGwo8BXQPIYwH2gLfrNOq6liPgb15Z9JM/vjDa2jYuBFf/9m3\nK4/99Sc3ct4dFdsAnPDjIfzr1oco2VBCjwG96TGgd+W46WOm1LiG7IPp79GsTQtadWxT9y9kBzLo\nkN68OmYWpxx3HXl5jbji2tMqj33nmzfx4OOXsG5tMRf/9G+UFJdSVl7OgP16cPKQgyrH/ee5Nzn6\nuH5JlJ81hv/ppxxyYC/atGzK3Il3cM0tjzP80VeSLmuHdMDBvZg4bjbfOfEGGuc15Be/PbXy2Fmn\n3sI9jw5l3bpifnXRvZSUlFFWVk7/gbtx4jcrFqWPfXkat//+X6xcvoZfXvA3uu/RiZv+cnZSL2e7\nkZObyx7fOZUpN99OLC+n0yEHUbhTJ+Y++RTNuu1Cu3770OnQQUwf9nfGXXoFDQuasPd5ZwFs/Cbm\nnwgh0LhlC/Y6+/8q/789hpzM9GF/Z84/HqNR00J6n3Xm5krIOmmeVkxCqHltzyaDQmgA7EHFRPuc\nGGPJ//AcqZjKzHandT+GFcX/TrqMrNei0XHkdzk96TKy3roFDwOwcO3TCVeS3To1+RoAP3ltVMKV\nZLc7DjwMNreotx4c9fz4rTcideA/xwxKZUu41cQshPCNTe7aPYSwEpgWY1xcN2VJkqRskBMS6ctS\nqzZTmT8EDgQ+/yfNV4AJVDRoV8cYH6ij2iRJkrJKbRqzcqBXjHERVOxrBvwV2B8YA9iYSZKk/y+u\nMctUm29ldv28KdtoMbB7jHEZ8L+sNZMkSdIW1CYxGxtCeAZ4bOPtU4AxIYQCYMXmHyZJkqT/RW0a\nsx8D3wAO3nj7daBjjPEz4LC6KkySJO34svKXdm/BVs9HrNhP4z0qpi1PBo4AZtVxXZIkSVlns4lZ\nCGF34DTgdGAp8CgV+56ZkkmSpG3C7TIybWkqczYwFvhajHEuQAjhZ/VSlSRJUhbaUmN2ChWJ2agQ\nwvPAIyS4M7AkSdrxuF1Gps2uMYsx/jPGeCrQE3gF+BnQPoTw1xDC0fVUnyRJUtaozeL/z2KMD8UY\nTwA6A28Bl9V5ZZIkSVmmNttlVNq4qexdGy+SJElfittlZPJ8SJIkpcT/lJhJkiRtSy7+z2RiJkmS\nlBImZpIkKTHBDWYzmJhJkiSlhI2ZJElSSjiVKUmSEuPi/0wmZpIkSSlhYiZJkhJjQpTJ8yFJkpQS\nJmaSJCkxOW6XkcHETJIkKSVszCRJklLCqUxJkpQYt8vIZGImSZKUEiZmkiQpMSZEmTwfkiRJKWFi\nJkmSEuMas0wmZpIkSSlhYyZJkpQSTmVKkqTEuPN/JhMzSZKklDAxkyRJiXHxfyYTM0mSpJQwMZMk\nSYkxIcrk+ZAkSUoJGzNJkqSUcCpTkiQlxu0yMpmYSZIkpYSJmSRJSozbZWQyMZMkSUoJEzNJkpQY\nE7NMJmaSJEkpYWMmSZKUEk5lSpKkxJgQZfJ8SJIkpYSJmSRJSowbzGYyMZMkSUoJEzNJkpQYt8vI\nZGImSZKUEjZmkiRJKRFirPNFd67qkyQp3RKbULx44suJ9Ak37394KidR62WN2bDZL9TH02gLzu75\nVS6a8HLSZWS92w44nIVrn066jKzXqcnXAMjvcnrClWS3dQseBmDIqDEJV5LdRhx2aNIlqAoX/0uS\npMS4+D+Ta8wkSZJSwsRMkiQlJrjBbAYTM0mSpJSwMZMkSUoJpzIlSVJiXPyfycRMkiQpJUzMJElS\nYkyIMnk+JEmSUsLETJIkJSbH7TIymJhJkiSlhI2ZJElSSjiVKUmSEuN2GZlMzCRJklLCxEySJCXG\nxCyTiZkkSVJKmJhJkqTE5CZdQMqYmEmSJKWEjZkkSVJKOJUpSZIS487/mUzMJEmSUsLETJIkJcbt\nMjKZmEmSJKWEjZkkSUpMTkjmsjUhhGNCCHNCCHNDCJfVcLxxCOHRjccnhhC6bpPzsS3+J5IkSTuK\nEEIu8GfgWKA3cHoIofcmw34ILI8x7gbcCvx+Wzy3jZkkSVKm/YC5Mcb3Y4zFwCPASZuMOQkYvvH6\n48ARIYQvvWLOxf+SJCkxuQkt/g8hnA2cXeWuYTHGYRuv7wR8WOXYR8D+m/wvKsfEGEtDCCuB1sCS\nL1OXjZkkSco6G5uwYZs5XFO7uOmGa7UZ8z+zMZMkSYlJ6XYZHwE7V7ndGVi4mTEfhRAaAM2BZV/2\niV1jJkmSlGkS0COE0C2E0Ag4DXhqkzFPAWduvP5N4OUYo4mZJEnafqXxVzJtXDP2E+AFIBe4N8Y4\nI4RwNTA5xvgU8DfggRDCXCqSstO2xXPbmEmSJG0ixvhv4N+b3HdllevrgW9t6+d1KlOSJCklTMwk\nSVJiUrr4PzEmZpIkSSlhYiZJkhKTm3QBKWNiJkmSlBImZpIkKTGuMctkYiZJkpQSNmaSJEkp4VSm\nJElKTBp3/k+SiZkkSVJKmJhJkqTE5Lr4P4OJmSRJUkqYmEmSpMS4XUYmEzNJkqSUsDGTJElKCacy\nJUlSYpzKzGRiJkmSlBImZpIkKTEmZplMzCRJklLCxEySJCUm11/JlMHETJIkKSVszCRJklIiK6cy\nY4yMuvsJ5r0xkwaNG3HMhWfQvvvO1cYtmruA529/iNINJXTbtzeH/egUQgiMf+hZ5k6cRsgJNGle\nyDEXfIfC1s35cNq7/Ov6u2nevjUAPQ7ow4GnHVvfL2+7UTR1BrMeGkEsj3QePIjuJ3w143hZSQlT\nhw1n1fwFNCwsoO/5Z9GkbWvKS8uYfu8DrPzgQ2JZOTsN2p/uXzuGsuISJl7/B8pLS4ll5XQY2I8e\n3/haQq9u+xRj5E83jmTi+Fnk5TXiF1edyu69Olcbd+mP72Zp0SrKysrp068bF/7yG+Tm5vDKf97m\nvjtfZMG8xfz1gQvYY8/qnyt9eXfedA7HHtGPoqWrGHDUpUmXs0NbNWM6C0c8Qiwvp9WgQ2h/TObP\n9DXvvsPCEY+y7uOP2OWHZ9Ni330rjxUvW8qHD9xPyfJlQGDXn1xAozZt6vkVpJ8JUaasbMzmvTGT\n5Z8U8YM7r+CTd+bz37+O4Iybf15t3H/vHMFR559Gxz268uTVdzJ/yiy67dubAScfzqAzjgdgytOj\nee3R5znq/FMB6Ny7OydfcU69vp7tUSwvZ8b9j7DfpReQ16olr/72Btr160PTnTpWjvlozKs0LGjC\n4JuuZuGEScwZ8U/6/fgsPp30BuWlpRxy3RWUbShm7OVX0fGAgeS3acV+l11Eg7w8ykvLmHDdzbTp\nsyctd9s1wVe6fZk4bjYfLyjiwZGXMWvaAm69/gn++sCF1cb95vffpaAwjxgjv7n4fkb/520OP6Yf\n3bp34Oo/nMkt1z6eQPXZ44HHRnPn8Be459bzky5lhxbLy/n44X+w64U/o2HLlrz7u+to3mcf8jp1\nqhzTqGUrdj7z/yj6zwvVHr/g7/fS/tjjadq7N2Xr1xP8+qFqISsb1fden0bvw/YjhECnPbqx4bN1\nrFm2MmPMmmUr2bB2PZ16diOEQO/D9mPuxKkANG6SXzmuZMMGgp+1/9mK9+dT0L4tTdq1JadBAzru\nP4DFU97OGLN4ytvsdPABAHQY2J+lM2cTYwQCpRuKKS8ro6ykmJDbgAb5eYQQaJCXB0AsKyOWlRF8\nc/4n40fP4OgTBlT8me+zC5+tXs/SolXVxhUUVpznstJySktL+fxDsMuu7enStV291pyNxr8+m2Ur\n1iRdxg5v7fx5NGrXlsZtK35OtRg4kJVT38oY06hNG/I7d2bTvwjWL1xILC+nae/eAOTm5ZHTqHG9\n1b49yQnJXNKq1olZCKEDsB8QgUkxxk/rrKo6tmbpSpq2aVF5u2mbFqxZupLCVs0zx7SuMqZ1xZjP\njXvgGWaMep3GBfkMufYnlfcvnDOP+y+8gYJWzRn8f1+nTZcvEiB9Yf3yFeS1all5O69VS1a8N2+z\nY3Jyc2mQn0/Jms/oMLA/i998m5cvvIzyDcX0/PY3aVRYAFT8C3f8b37H2kVFdDliMC26d6u/F7UD\nWLJ4Je06fPHnvk375ixZvJLWbZtVG3vJ+cOYPf1D9hvUk8FH9qnPMqV6UbJ8BY1atqq83bBFS9bO\nm7eFR3xhw+JF5DbJZ/6df2HD0iU07dmLjiefQsjJyjxE/4Na/QkJIZwFvA58A/gmMCGE8IMtjD87\nhDA5hDB52LBh26bSbagidclUPVip4eu7VcYc/N0TOOfeq+k1eF/efHYsAO26d+ZHd1/F9/54Gf2O\nP5SR19+z7Yre0dT4HmzyJtT0DeoAK9+fDzk5HH7bDQz+wzXMf/6/rF1cVHE4J4eDr/kVh916PSvf\nn8/qjz7e9rXvwGr6bGwuEr7pL2fzxH+upKS4lDcnza3jyqQkbPnvgS0+sqycz96dS8dTvsXul/2K\n4iVLWPba+G1b3g7CxCxTbROzS4B+McalACGE1sCrwL01DY4xDgM+78jisNnV597r25vPjmHaf14D\noMNuXVi9ZEXlsdVLVlBQJS0DKGzdgtVLq4xZuiIjUftcr0MH8OQ1dzHo28dlTHHuOmBPXrrrMdau\nWkOTZoXb+uVs9/JatWT9suWVt9cvW07jFs03GdOC9cuWk9+qJeVlZZSuW0fDggIWTnidtnvvSU6D\nXBo3a0aLHt1ZOW8BTdq1rXxsw4ImtOrZg6KpM2naead6e13bo38+Op5nn5wIQM89d2bxp1/8uV+y\naCVtakjLPteocUMOGtyb8a9MZ8ABu9d5rVJ9atiyJcXLl1XeLlmxnIYtWmzhEVUf24L8nXemcduK\nn0vN9unL2nnvw6A6KVU7kNpmqh8Bq6vcXg18uO3LqTv9jj+U7932C7532y/Y7YA+zBz1OjFGFs6Z\nR+OCvGpNV2Gr5jTKz2PhnHnEGJk56nW677c3AMsXLq4cN/f1abTaqWJNzWfLV1UmDp+88wGxPJLf\ntKCeXuH2pXm3Xfhs0WLWFi2hvLSUTyZOpl2/zOmwdv368PG4CQB8OmkKrXvtQQiBvNatWDpzDjFG\nSjdsYMV78yjo2J4Nq1ZT8tlaAMqKi1k6czaFnTrU+2vb3px86iDueXQo9zw6lEGH7cmLz0yu+DM/\n9QMKCvOqTWOuW7uhct1ZWWkZE8fPdl2ZdkhNdulK8eLFbFhSRHlpKSsmTaJ5n31q99iu3Shbu5bS\n1RV/da6ZM5u8jp228iip9onZx8DEEMJIKrLdk4DXQwhDAWKMt9RRfXWi2769eX/yDP527tU0bNyI\nr/70jMpj91/0e7532y8AOPLcIRXbZRQX061/b7rtW7GIc+z9T7Ps48WEEGjWriVHnlfxjcx3Xn2L\nt58bR05uDg0aNeT4i8908flm5OTm0vu7pzHppj8Ry8vpfOhBNO3ciXeefJrmXbvQvv8+dD50EFOH\n3cfoS66kYUET+p7/QwB2OWIw0+55gHGXX0Mk0vmQA2nWpTOrFnzE1LuHQ3kkxnI67Lcv7frunfAr\n3b4ccHAvJo6bzXdOvIHGeQ35xW9PrTx21qm3cM+jQ1m3rphfXXQvJSVllJWV03/gbpz4zQMBGPvy\nNG7//b9YuXwNv7zgb3TfoxM3/eXspF7ODmv4n37KIQf2ok3LpsydeAfX3PI4wx99JemydjghN5ed\nTv02799+G5RHWh00iLxOO/HpUyPJ32UXmu/Tl7Xz5zH/zr9QtnYtq6ZN5dNnRtLzN1cTcnLodMq3\neO+2P0CE/C5daHXwIUm/pFRy5/9MocY1JZsOCuE3WzoeY7xqS4fTMJWZ7c7u+VUumvBy0mVkvdsO\nOJyFa59Ouoys16lJxf52+V1OT7iS7LZuwcMADBk1JuFKstuIww6FWq+e2/b+Of+5RDqzk7sem8rk\npFaJWdXGK4TQElgRa9PRSZIkbUGaF+InYYtrzEIIV4YQem683jiE8DLwHrAohHBkfRQoSZKULba2\n+P9UYM7G62duHN8WGAxcX4d1SZKkLOB2GZm21pgVV5my/CrwcIyxLMY4iyz9dU6SJEl1ZWuN2YYQ\nwl4hhLbAYcCLVY41qbuyJEmSss/WUq8LgcepmL68NcY4DyCEcBzwZh3XJkmSdnBpnlZMwhYbs/j/\n2rvzMLmqMvHj37ebLJ2FdAc6G4SwE0CSCEEMi4ooMw6MwUGCqMjMY4wMLjz6c8HBAQQZ1AFHkUHM\nOAoy7IIG0BlAAoEghgCGkEBI0MQoIXtC9q37/P6om6QrdNIdSfW93f395OknVfeeW/Xee7tvvfWe\nU6dSmgIMbWb5r4FfVyooSZKkzqhV48Syr2C6HDiZ0gSzk4Ert35FkyRJ0l+j2opZmdZ+JdOdwBLg\nbEpfYr4EuKtSQUmSJHVGrf1kZd+U0lVN7n8zIs6qRECSJKnzqPIrmcq0tmL2WER8JCKqsp8xwK8q\nGZgkSVJns8uKWUSspjSmLIAvArdmq6qBNZTGnUmSJGkPaOlTmb3bKhBJktT5tLbrrrNoqWI2NKU0\nKyKObW59Sun5yoQlSZLU+bQ0+P+LwDjguibLmo7Se+8ej0iSJHUaTjBbrqUK4o8jYkBK6dSU0qnA\nzZTGls2gNG2GJEmS9pCWErObgE0AEfEu4BrgFuANYHxlQ5MkSR1ddeTzU1QtdWVWp5SWZ7fPBcan\nlO4F7o2IaZUNTZIkqXNpqWJWHRFbk7fTgIlN1rV2clpJkiS1QkvJ1R3ApIhYCqwHngSIiEMpdWdK\nkiT91Zz5v1xL85hdHRGPAgOBh1NKW49eFfC5SgcnSZLUmbTYHZlS+l0zy2ZXJhxJktSZOF1GOSfc\nlSRJKggH8EuSpNxYMStnxUySJKkgTMwkSZIKwq5MSZKUGytE5TwekiRJBWHFTJIk5SYc/F/Gipkk\nSVJBWDGTJEm5sWBWzoqZJElSQZiYSZIkFYRdmZIkKTcO/i9nxUySJKkgrJhJkqTcWCEq5/GQJEkq\nCCtmkiQpNxEp7xAKxYqZJElSQZiYSZIkFYRdmZIkKTfOllHOipkkSVJBWDGTJEm5cYLZclbMJEmS\nCsKKmSRJyo0Fs3JWzCRJkgrCxEySJKkg7MqUJEm5qbIvs4wVM0mSpIKwYiZJknJjwaycFTNJkqSC\nMDGTJEkqCLsyJUlSbpz5v5wVM0mSpIKIlFKln6PiTyBJkt6S3OpWL698MJc84cjaMwtZq7NiJkmS\nVBBtMsbs5AmT2+JptEJSBggAABYASURBVAuTR58MzM47DHE4n336sbyD6PRuGHUqAGMeeyLnSDq3\nu099FwA1B5yXcySd2/r5d+T6/IUsW+XIipkkSVJBmJhJkiQVhNNlSJKk3PhdmeWsmEmSJBWEFTNJ\nkpQbC2blrJhJkiQVhBUzSZKUmwjnoW/KipkkSVJBmJhJkiQVhF2ZkiQpNw7+L2fFTJIkqSCsmEmS\npNyEJbMyVswkSZIKwoqZJEnKjRWich4PSZKkgjAxkyRJKgi7MiVJUm4c/F/OipkkSVJBmJhJkqTc\nRE4/bynmiL4R8UhEzMn+r2umzZCIeC4ipkXEzIi4sDWPbWImSZK0ey4BHk0pHQY8mt3f0evAiSml\nEcAJwCURMailBzYxkyRJuYnI5+ctGg3ckt2+BThrxwYppU0ppY3Z3W60MucyMZMkSdo9/VNKrwNk\n//drrlFEDI6I6cCfgW+nlBa09MB+KlOSJHU6ETEOGNdk0fiU0vgm638DDGhm00tb+xwppT8Dw7Iu\nzF9GxM9TSot2tY2JmSRJyk1es2VkSdj4Xax/387WRcSiiBiYUno9IgYCi1t4rgURMRM4Bfj5rtra\nlSlJkrR77gcuyG5fAEzYsUFE7B8RNdntOuAk4JWWHtiKmSRJyk1V+5xg9lvA3RHxSWA+cA5ARIwE\nLkwpjQWOBK6LiESpMHhtSunFlh7YxEySJGk3pJSWAac1s/xZYGx2+xFg2O4+tomZJEnKTfssmFWO\nY8wkSZIKwsRMkiSpIOzKlCRJuSmNjddWVswkSZIKwoqZJEnKjYP/y1kxkyRJKggrZpIkKTdhyayM\nFTNJkqSCMDGTJEkqCLsyJUlSbuzJLGfFTJIkqSCsmEmSpNxYISrn8ZAkSSoIK2aSJCk3TpdRzoqZ\nJElSQZiYSZIkFYRdmZIkKUf2ZTZlxUySJKkgrJhJkqTchBWzMlbMJEmSCsKKmSRJyk2ENaKmPBqS\nJEkFYWImSZJUEHZlSpKkHDn4vykrZpIkSQVhxUySJOXG6TLKdfrE7IR+tVx8zMFUETw4fxH/M+cv\nZevPPWQQZw4ZQENjYuWmzVzz+zksWr8RgP413fjqiEPpV9ONBHz56ZkszNZp96SUuPrq8Uya9Bzd\nu3fjW9+6mKOPPvRN7c4//2ssXryC7t27AvCTn1zJPvvUct99v+E73/kp/fvvA8DHP34G55zzN226\nD+3V0ukzeeX2u0mNjez3rpM46My/LVvfuHkzM/7rZlbNm0+XXj0Z9s9jqanfl8YtW3j55ttYNe9P\nEMERHx1D3yOPKG2zZQuzbr2TFbNmQwSHnj2a/scfm8futUurZs5gwd13khob6XvSKfT/2w+UrV8z\nZzYL7r6L9a/9hSGfHEftccdtW7dp+TL+fOvP2LxiORAc/NnP03Xffdt4DzqHm/7903zgtLezZNkq\nRr7/K3mHow6iUydmVcAXhx3CF347g8XrN/Hjd49g8sJlzFu9flub2W+sZeykaWxsaOSsAwdw0dEH\ncvmzrwDw9WMP55bZf+bZJSupqa6iMaf96AieeOI55s1bwMMP/4gXXniFK674Iffcc12zba+99v9x\nzDGHvWn53/3dKVx22YWVDrVDSY2NzLr1Do798sV071vHlG9cQ/3bh9Frv0Hb2rz2xFPs1aMHJ3/n\nKhb+bipz7vkFwy76FK89PhmAUd+8jE2rVvH8dTdwwuWXEFVVzH3gf+m6d29O+vaVpMZGNq9dl9cu\ntjupsZHX7ridgy/+Al3q6phzzdX0GTac7oO2n5OudX0ZfME/seSRh960/fyf/oT+HziD3kcdRcOG\nDUSV1YhKufWeSdx0y0P8+D8uyjuUds7f0aY69RizI+t685e1G1iwbiNbUuI3ry3h5AH7lLX5/dI3\n2NhQSrlmrlhNffduABzYu4bqgGeXrARgfUPjtnbafY8++jvOOuu9RAQjRgxl1aq1LF68PO+wOrw3\n/jiPHv370aNfPVV77cWAE45nye+nl7VZ8vvpDDp5FAD9jj+W5S/NIqXEmgWv0/eooQB03XtvuvSo\nKVXPgNee/O22yltUVdG1d6823Kv2bd28uXTtV0+3+tI5qT3+eN6YPq2sTdd996Vm//0hyl/QNixY\nQGpspPdRRwFQ3b07VV27tVnsnc1Tz8xi+co1eYehDqZVFbOICOBjwMEppSsj4gBgQErpmYpGV2H1\n3buyuEnX45L1GzmqrvdO2595QH+mLF4BwOCeNaze3MDVxw9lYI/uPLtkJTe9NM+q2V9p0aJlDBiw\nvbtlwIB9WLRoGf369X1T23/5l+9TVVXF6aefyEUXnUtkL04PP/xbpk6dyUEHDeJrXxvLwIH1bRZ/\ne7VxxQq69a3bdr9bXS2r/ji3rM2GFSvpnrWpqq5mr5oaNq9ZS+8D9mfx8y/Q/4SRbFy+glXz5rNh\n2Qp69O8PwKv33c+KWbOpqa9n6PkfoVufvdtux9qxzStW0rVu++99l9o61s2du4stttu4eBHVPWqY\nd9ONbFy2lN5Dj2Tgh84mqjr1e3CpXWntX+uNwCjgvOz+auA/d9Y4IsZFxLMR8ez48ePfYoiVE81U\nT9NO2p6+fz1Da3tx+6ulMWjVEQzfZ2/+c+ZcPvXENAb17M4HDuhfuWA7uNTMgY9mTtC1136JBx64\ngdtu+xbPPTeTCRMeA+DUU9/BxIn/zQMP/IBRo0bw1a9+r9IhdwzN/sLvcNybPTkw6JQT6d63lilX\nXMMrt99Nn8MOJqqrSI2NbFy+gtpDD+Gd37iU2kMPZs6d91Yi+g6q+ePdqi0bGlk751UGnn0Oh19y\nKZuWLmX500/t2fCkPSyiKpefomptZCeklD4DbABIKa0Auu6scUppfEppZEpp5Lhx4/ZAmJWxeP0m\n+tVsL/PX13Rj6YZNb2o3sr4Pnzh8MF+d8jKbG0sXzSUbNjHnjbUsWLeRhgRPvr6MI2p7tlnsHcFt\nt/2K0aM/z+jRn6dfv74sXLh027qFC5uvlm0d3N+rVw/OPPPdTJ8+G4C6ur3p2rULAGPGnM7Mma+2\nwR60f9361rFx+Ypt9zeuWEm3utqyNt371rEha9PY0MCW9evp0rMnVdXVHPHRMYy66uuMuPgitqxb\nT4/+/ejSqydVXbvS77gRAPQ//lhW/Wl+2+1UO9elro5NK7Z3429euYIutbW72KLptrXUDB5Mt/p6\norqavYePYP18j73UnrQ2MdscEdVkb+Uioh7af6/drJWrGdyzhoE9urFXBO/br56nFpaPazqsT0++\nPPxQLpnyEis3bd62/OUVq+ndZS9qu5Z6g4+try370IBa9rGPncGECdczYcL1vO997+SXv5xISolp\n02bRu3ePNyVmW7Y0sHz5GwBs3ryFxx+fymGHDQEoG482ceIzHHLI4LbbkXZs74OGsG7RYtYvWUrj\nli0snDKV+rcPK2tTP2IYCyY/DcDiqc/T98gjiAgaNm6iYWNpKMCyGS8RVVX02m8QEUH9iGGlT2QC\ny1+aRc9BA9t2x9qxHkMOZNPixWxcuoTGLVtYOXUqfYYNb922Bx5Ew7p1bFm9GoA1r8yi+8BBLWwl\n5S1y+imm1n4q83rgF0C/iLga+DDw9YpF1UYaEnx3+h/47qi3URXwq/mLmLt6HZ8cegCzVq7hqYXL\n+czRB1FTXc1Vx5cGOS9at5FLnnmZRuCGmXP53onHEAGvrFzD/fMW5rtD7di73z2SSZOe5f3vH0dN\nTTf+7d8u3rZu9OjPM2HC9WzatJmxYy9n8+YGGhsbGDVqBGPGnA7Arbc+wMSJU6iurqZPn95cc83F\nO3sqNVFVXc0RHz+X56+9ntTYyKBTTqTXfoN49b772fugIfR7+3AGveskZoz/KZO/8q906dmDY/55\nLED2ScwfEBF0q6vlbeP+advjHjbmQ8wY/1Neuf0euvbuxVFjL8hrF9udqK5mv3M/yh+v/x40Jvqe\neBLdB+3HwvsnUDNkCH2Gj2DdvLnMu+lGGtatY9WL01n44ASGXn4lUVXFoLPP4Q/fuw4S1BxwAH1P\nPiXvXeqwbvnB5zhl1JHsW9ebV6fcwFXf/Tm33PV43mGpnYvU3PiR5hpGDAVOo5RmPppSermVz5FO\nnjD5rwxPe8rk0ScDs/MOQxzOZ59+LO8gOr0bRp0KwJjHnsg5ks7t7lPfBUDNAee10FKVtH7+HZBj\nCWn15kdbl4jsYb27nFbIslmLFbMojZCbnlJ6GzCr8iFJkiR1Ti2OMUspNQIvZFNkSJIkqUJaO8Zs\nIDAzIp4B1m5dmFL6YEWikiRJnYLflVmutYnZNyoahSRJklqXmKWUJlU6EEmS1BkVd7LXPLTqaETE\nOyNiakSsiYhNEdEQEasqHZwkSVJn0tquzBuAjwD3ACOBTwCHVSooSZLUOTT39XudWWsTM1JKr0ZE\ndUqpAfhpRPy2gnFJkiR1Oq1NzNZFRFdgWkR8B3gd8IshJUmS9qDWjrg7P2v7WUrTZQwGzq5UUJIk\nqbPwuzKb2mXFLCIOSCnNTyn9KVu0AafOkCRJqoiWKma/3HojIu6tcCySJKmTiZz+FVVLiVnTyA+u\nZCCSJEmdXUuD/9NObkuSJO0BTjDbVEuJ2fBsItkAappMKhtASintXdHoJEmSOpFdJmYppeq2CkSS\nJKmza/UEs5IkSXtakQfi58GOXUmSpIKwYiZJknLjd2WWs2ImSZJUEFbMJElSjqyYNWXFTJIkqSBM\nzCRJkgrCrkxJkpSbsEZUxqMhSZJUEFbMJElSjhz835QVM0mSpIKwYiZJknLjBLPlrJhJkiQVhImZ\nJElSQdiVKUmScmRXZlNWzCRJkgrCipkkScqNE8yW82hIkiQVhBUzSZKUI8eYNWXFTJIkqSBMzCRJ\nkgrCrkxJkpSbsCuzjBUzSZKkgrBiJkmScuN3ZZazYiZJklQQVswkSVKOrBE15dGQJEkqCBMzSZKk\ngrArU5Ik5cbpMspZMZMkSSoIK2aSJClHVsyasmImSZJUEFbMJElSbpxgtpwVM0mSpIIwMZMkSSoI\nuzIlSVKOrBE15dGQJEkqCCtmkiQpN04wWy5SSpV+joo/gSRJektyzI5m55QnHF7IjLAtErN2LyLG\npZTG5x2HPBdF4XkoBs9DMXgetCc5xqx1xuUdgLbxXBSD56EYPA/F4HnQHmNiJkmSVBAmZpIkSQVh\nYtY6jh0oDs9FMXgeisHzUAyeB+0xDv6XJEkqCCtmkiRJBWFiJkmSVBAdMjGLiEsjYmZETI+IaRFx\nwh54zA9GxCV7KL41e+Jx2quIaMjOy4yIuCcieuyi7RUR8aW2jE8QER+KiBQRQ/OOpTNp7toVET+O\niKOy9c1eOyLinRExJdvm5Yi4ok0D76CaXKu2/hyYd0zq+DrcVzJFxCjgTODYlNLGiNgX6NrKbfdK\nKW1pbl1K6X7g/j0Xaae2PqU0AiAibgMuBL6bb0jawXnAZOAjwBX5htI57OzalVIa24rNbwHGpJRe\niIhq4IhKxtqJbLtW7Y6IqE4pNVQiIHV8HbFiNhBYmlLaCJBSWppSWhAR87ILHRExMiIez25fERHj\nI+Jh4GfZu86jtz5YRDweEcdFxD9GxA0R0Sd7rKpsfY+I+HNEdImIQyLi/yLiuYh4cmu1ISIOioin\nI2JqRFzVxsej6J4EDgWIiE9klYIXIuLWHRtGxKeyY/hCRNy7tdIWEedk1bcXIuKJbNnREfFM9i53\nekQc1qZ71Y5FRC/gJOCTlBIzIqIqIm7MqjkPRsSvI+LD2brjImJS9nv/UEQMzDH89mxn167HI2Lk\n1kYRcV1EPB8Rj0ZEfba4H/B6tl1DSumlrO0VEXFrREyMiDkR8ak23qcOJyIOzK7vz2c/J2bL3xMR\nj0XE7cCL2bKPN7kO/ShLmqVd6oiJ2cPA4IiYnb2QvLsV2xwHjE4pfRS4ExgDkL3ADEopPbe1YUrp\nDeAFYOvj/j3wUEppM6WPTH8upXQc8CXgxqzN94EfppSOBxa+5T3sICJiL+ADwItZMnwp8N6U0nDg\n4mY2uS+ldHy2/mVKiQPAZcDfZMs/mC27EPh+9m53JPCXCu5KR3MW8H8ppdnA8og4FvgH4EDgGGAs\nMAogIroAPwA+nP3e/wS4Oo+gO4DWXLt6As+nlI4FJgGXZ8v/A3glIn4REZ+OiO5NthkGnEHpnF0W\nEYMquA8dTU2TbsxfZMsWA+/PzsG5wPVN2r8DuDSldFREHJmtPym7DjUAH2vL4NU+dbiuzJTSmog4\nDjgFOBW4K1oeG3Z/Sml9dvtu4BFKF7wxwD3NtL+L0h/cY5QqCjdmVYYTgXsitn0varfs/5OAs7Pb\ntwLf3t396mBqImJadvtJ4L+BTwM/TyktBUgpLW9mu7dFxDeBWqAX8FC2/Cng5oi4G7gvW/Y0cGlE\n7E8poZtTmV3pkM4DvpfdvjO73wW4J6XUCCyMiMey9UcAbwMeyX7vq8kqN9o9rbx2NVK6/gD8D9nv\ne0rpymxYwOnARymds/dk7SZk17f12Xl7B/DLSu5LB9JcV2YX4IaI2JpsHd5k3TMppbnZ7dMovemf\nmv1t1FBK6qRd6nCJGZRK+cDjwOMR8SJwAbCF7RXC7jtssrbJtq9FxLKIGEYp+fp0M09xP3BNRPSl\n9Ic3kdI72ZW7GI/ghHHbveliF6UrV0vH6GbgrGwczT+SvfCklC6M0gc8zgCmRcSIlNLtETElW/ZQ\nRIxNKU3cw/vR4UTEPsB7KSXBiVKilYBf7GwTYGZKaVQbhdih7eTatctNmmz7B+CHEfFfwJLsXJa1\n2cl97Z4vAIuA4ZReUzY0Wbe2ye0Abkkpfa0NY1MH0OG6MiPiiB3GE40A/gTMo5REwfbq1c7cCXwF\n6JNSenHHlSmlNcAzlLooH8zGdKwC5kbEOVkcERHDs02eIhurg6XsnXkUGLP1xSRLenfUG3g96z7b\ndhwj4pCU0pSU0mXAUkrdQQcDf0wpXU8pkR5W8T3oGD4M/CylNCSldGBKaTAwl9JxPTsba9af7dWY\nV4D6KA1cJ0pjLY9u7oG1a7u4djVVRekcQakyNjnb9ozYXqo/jFIlZ2V2f3REdM/+tt4DTK1A+J1J\nH+D1rHp8PqU3L815FPhwRPSD0jUtIoa0UYxqxzpcYkapi+uWiHgpIqYDR1H6VNk3gO9HxJOULlq7\n8nNKidTdu2hzF/BxtncrQClZ+GREvADMBEZnyy8GPhMRUyn9UWsHKaWZlMYmTcqOX3Of0vxXYAql\nruZZTZb/e0S8GBEzgCcojQE8F5iRdZkOBX5Wyfg7kPN4c3XsXmAQpXF6M4AfUToPb6SUNlFKFL6d\nnbdplLr0tft2du1qai1wdEQ8R6myeWW2/HxKY8ymURou8bEmnwp8BvgV8DvgqpTSgsruRod3I3BB\nRPyOUjfm2uYaZR/A+DrwcHY+H6H0AQ9pl/xKJkmtEhG9snFQ+1B6sT8ppeSHWQosSvOZrUkpXZt3\nLJJap0OOMZNUEQ9GRC2leQGvMimTpD3PipkkSVJBdMQxZpIkSe2SiZkkSVJBmJhJkiQVhImZJElS\nQZiYSZIkFcT/B8ELsusQfEFfAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "explore.correlation_plot(data=data,output_path='./output/')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Heatmap" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " year month passengers\n", + "0 1949 January 112\n", + "1 1949 February 118\n", + "2 1949 March 132\n", + "3 1949 April 129\n", + "4 1949 May 121\n", + "Image saved at ./output/Heatmap.png\n" + ] + }, + { + "data": { + "image/png": "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\nAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "flights = sns.load_dataset(\"flights\")\n", + "print(flights.head(5))\n", + "# explore.heatmap(data=data[['Sex','Survived']])\n", + "flights = flights.pivot(\"month\", \"year\", \"passengers\")\n", + "explore.heatmap(data=flights,output_path='./output/')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/2.1_Demo_Missing_Data.ipynb b/2.1_Demo_Missing_Data.ipynb new file mode 100644 index 0000000..6a6a2fe --- /dev/null +++ b/2.1_Demo_Missing_Data.ipynb @@ -0,0 +1,1109 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "import os\n", + "plt.style.use('seaborn-colorblind')\n", + "%matplotlib inline\n", + "from feature_cleaning import missing_data as ms\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(891, 6)\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFare
003male22.017.2500
111female38.0171.2833
213female26.007.9250
311female35.0153.1000
403male35.008.0500
503maleNaN08.4583
601male54.0051.8625
703male2.0321.0750
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare\n", + "0 0 3 male 22.0 1 7.2500\n", + "1 1 1 female 38.0 1 71.2833\n", + "2 1 3 female 26.0 0 7.9250\n", + "3 1 1 female 35.0 1 53.1000\n", + "4 0 3 male 35.0 0 8.0500\n", + "5 0 3 male NaN 0 8.4583\n", + "6 0 1 male 54.0 0 51.8625\n", + "7 0 3 male 2.0 3 21.0750" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "use_cols = [\n", + " 'Pclass', 'Sex', 'Age', 'Fare', 'SibSp',\n", + " 'Survived'\n", + "]\n", + "\n", + "data = pd.read_csv('./data/titanic.csv', usecols=use_cols)\n", + "print(data.shape)\n", + "data.head(8)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Missing value checking\n", + "check the total number & percentage of missing values\n", + "per variable of a pandas Dataframe" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "result saved at ./output/ missing.csv\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
total missingproportion
Survived00.000000
Pclass00.000000
Sex00.000000
Age1770.198653
SibSp00.000000
Fare00.000000
\n", + "
" + ], + "text/plain": [ + " total missing proportion\n", + "Survived 0 0.000000\n", + "Pclass 0 0.000000\n", + "Sex 0 0.000000\n", + "Age 177 0.198653\n", + "SibSp 0 0.000000\n", + "Fare 0 0.000000" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# only variable Age has missing values, totally 177 cases\n", + "# result is saved at the output dir (if given)\n", + "\n", + "ms.check_missing(data=data,output_path=r'./output/')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## Listwise deletion \n", + "excluding all cases (listwise) that have missing values" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(714, 6)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 177 cases which has NA has been dropped \n", + "data2 = ms.drop_missing(data=data)\n", + "data2.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Add a variable to denote NA\n", + "creating an additional variable indicating whether the data was missing for that observation" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 714\n", + "1 177\n", + "Name: Age_is_NA, dtype: int64\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFareAge_is_NA
003male22.017.25000
111female38.0171.28330
213female26.007.92500
311female35.0153.10000
403male35.008.05000
503maleNaN08.45831
601male54.0051.86250
703male2.0321.07500
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare Age_is_NA\n", + "0 0 3 male 22.0 1 7.2500 0\n", + "1 1 1 female 38.0 1 71.2833 0\n", + "2 1 3 female 26.0 0 7.9250 0\n", + "3 1 1 female 35.0 1 53.1000 0\n", + "4 0 3 male 35.0 0 8.0500 0\n", + "5 0 3 male NaN 0 8.4583 1\n", + "6 0 1 male 54.0 0 51.8625 0\n", + "7 0 3 male 2.0 3 21.0750 0" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Age_is_NA is created, 0-not missing 1-missing for that observation\n", + "data3 = ms.add_var_denote_NA(data=data,NA_col=['Age'])\n", + "print(data3.Age_is_NA.value_counts())\n", + "data3.head(8)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## Arbitrary Value Imputation\n", + "Replacing the NA by arbitrary values" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFareAge_-999
003male22.017.250022.0
111female38.0171.283338.0
213female26.007.925026.0
311female35.0153.100035.0
403male35.008.050035.0
503maleNaN08.4583-999.0
601male54.0051.862554.0
703male2.0321.07502.0
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare Age_-999\n", + "0 0 3 male 22.0 1 7.2500 22.0\n", + "1 1 1 female 38.0 1 71.2833 38.0\n", + "2 1 3 female 26.0 0 7.9250 26.0\n", + "3 1 1 female 35.0 1 53.1000 35.0\n", + "4 0 3 male 35.0 0 8.0500 35.0\n", + "5 0 3 male NaN 0 8.4583 -999.0\n", + "6 0 1 male 54.0 0 51.8625 54.0\n", + "7 0 3 male 2.0 3 21.0750 2.0" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data4 = ms.impute_NA_with_arbitrary(data=data,impute_value=-999,NA_col=['Age'])\n", + "data4.head(8)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Mean/Median/Mode Imputation\n", + "Replacing the NA by mean/median/mode of that variable" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "28.0\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFareAge_impute_median
003male22.017.250022.0
111female38.0171.283338.0
213female26.007.925026.0
311female35.0153.100035.0
403male35.008.050035.0
503maleNaN08.458328.0
601male54.0051.862554.0
703male2.0321.07502.0
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare Age_impute_median\n", + "0 0 3 male 22.0 1 7.2500 22.0\n", + "1 1 1 female 38.0 1 71.2833 38.0\n", + "2 1 3 female 26.0 0 7.9250 26.0\n", + "3 1 1 female 35.0 1 53.1000 35.0\n", + "4 0 3 male 35.0 0 8.0500 35.0\n", + "5 0 3 male NaN 0 8.4583 28.0\n", + "6 0 1 male 54.0 0 51.8625 54.0\n", + "7 0 3 male 2.0 3 21.0750 2.0" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(data.Age.median())\n", + "data5 = ms.impute_NA_with_avg(data=data,strategy='median',NA_col=['Age'])\n", + "data5.head(8)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## End of distribution Imputation\n", + "replacing the NA by values that are at the far end of the distribution of that variable\n", + "calculated by mean + 3*std" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFareAge_impute_end_of_distri
003male22.017.250022.00000
111female38.0171.283338.00000
213female26.007.925026.00000
311female35.0153.100035.00000
403male35.008.050035.00000
503maleNaN08.458373.27861
601male54.0051.862554.00000
703male2.0321.07502.00000
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare Age_impute_end_of_distri\n", + "0 0 3 male 22.0 1 7.2500 22.00000\n", + "1 1 1 female 38.0 1 71.2833 38.00000\n", + "2 1 3 female 26.0 0 7.9250 26.00000\n", + "3 1 1 female 35.0 1 53.1000 35.00000\n", + "4 0 3 male 35.0 0 8.0500 35.00000\n", + "5 0 3 male NaN 0 8.4583 73.27861\n", + "6 0 1 male 54.0 0 51.8625 54.00000\n", + "7 0 3 male 2.0 3 21.0750 2.00000" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data6 = ms.impute_NA_with_end_of_distribution(data=data,NA_col=['Age'])\n", + "data6.head(8)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Random Imputation\n", + "replacing the NA with random sampling from the pool of available observations of the variable\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFareAge_random
003male22.017.250022.0
111female38.0171.283338.0
213female26.007.925026.0
311female35.0153.100035.0
403male35.008.050035.0
503maleNaN08.458328.0
601male54.0051.862554.0
703male2.0321.07502.0
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare Age_random\n", + "0 0 3 male 22.0 1 7.2500 22.0\n", + "1 1 1 female 38.0 1 71.2833 38.0\n", + "2 1 3 female 26.0 0 7.9250 26.0\n", + "3 1 1 female 35.0 1 53.1000 35.0\n", + "4 0 3 male 35.0 0 8.0500 35.0\n", + "5 0 3 male NaN 0 8.4583 28.0\n", + "6 0 1 male 54.0 0 51.8625 54.0\n", + "7 0 3 male 2.0 3 21.0750 2.0" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data7 = ms.impute_NA_with_random(data=data,NA_col=['Age'])\n", + "data7.head(8)" + ] + } + ], + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/2.2_Demo_Outlier.ipynb b/2.2_Demo_Outlier.ipynb new file mode 100644 index 0000000..08d7f95 --- /dev/null +++ b/2.2_Demo_Outlier.ipynb @@ -0,0 +1,1582 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "# import seaborn as sns\n", + "# import matplotlib.pyplot as plt\n", + "import os\n", + "# plt.style.use('seaborn-colorblind')\n", + "# %matplotlib inline\n", + "from feature_cleaning import outlier as ot" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(891, 6)\n" + ] + } + ], + "source": [ + "use_cols = [\n", + " 'Pclass', 'Sex', 'Age', 'Fare', 'SibSp',\n", + " 'Survived'\n", + "]\n", + "\n", + "\n", + "data = pd.read_csv('./data/titanic.csv', usecols=use_cols)\n", + "data.head(3)\n", + "print(data.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "104 0.0000\n", + "163 4.0125\n", + "245 5.0000\n", + "152 6.2375\n", + "240 6.4375\n", + "237 6.4500\n", + "110 6.4958\n", + "85 6.7500\n", + "171 6.8583\n", + "238 6.9500\n", + "78 6.9750\n", + "185 7.0458\n", + "79 7.0500\n", + "218 7.0542\n", + "123 7.1250\n", + "76 7.1417\n", + "18 7.2250\n", + "32 7.2292\n", + "0 7.2500\n", + "91 7.3125\n", + "196 7.4958\n", + "186 7.5208\n", + "120 7.5500\n", + "192 7.6292\n", + "55 7.6500\n", + "182 7.7250\n", + "166 7.7292\n", + "93 7.7333\n", + "229 7.7375\n", + "227 7.7417\n", + " ... \n", + "46 80.0000\n", + "177 81.8583\n", + "30 82.1708\n", + "147 83.1583\n", + "47 83.4750\n", + "126 86.5000\n", + "180 89.1042\n", + "117 90.0000\n", + "136 91.0792\n", + "198 93.5000\n", + "200 106.4250\n", + "144 108.9000\n", + "143 110.8833\n", + "114 113.2750\n", + "168 120.0000\n", + "155 133.6500\n", + "151 134.5000\n", + "130 135.6333\n", + "27 146.5208\n", + "139 151.5500\n", + "129 153.4625\n", + "150 164.8667\n", + "224 211.3375\n", + "162 211.5000\n", + "199 221.7792\n", + "164 227.5250\n", + "75 247.5208\n", + "148 262.3750\n", + "23 263.0000\n", + "127 512.3292\n", + "Length: 248, dtype: float64" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.Series(data.Fare.unique()).sort_values()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Detect by arbitrary boundary\n", + "identify outliers based on arbitrary boundaries" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Num of outlier detected: 19\n", + "Proportion of outlier detected 0.02132435465768799\n", + "Upper bound: 300 \n", + "Lower bound: 5\n" + ] + } + ], + "source": [ + "index,para = ot.outlier_detect_arbitrary(data=data,col='Fare',upper_fence=300,lower_fence=5)\n", + "print('Upper bound:',para[0],'\\nLower bound:',para[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "179 0.0000\n", + "806 0.0000\n", + "732 0.0000\n", + "674 0.0000\n", + "633 0.0000\n", + "597 0.0000\n", + "815 0.0000\n", + "466 0.0000\n", + "481 0.0000\n", + "302 0.0000\n", + "277 0.0000\n", + "271 0.0000\n", + "263 0.0000\n", + "413 0.0000\n", + "822 0.0000\n", + "378 4.0125\n", + "679 512.3292\n", + "737 512.3292\n", + "258 512.3292\n", + "Name: Fare, dtype: float64" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# check the 19 found outliers\n", + "data.loc[index,'Fare'].sort_values()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## IQR method\n", + "outlier detection by Interquartile Ranges Rule" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Num of outlier detected: 31\n", + "Proportion of outlier detected 0.03479236812570146\n", + "Upper bound: 146.448 \n", + "Lower bound: -107.53760000000001\n" + ] + } + ], + "source": [ + "index,para = ot.outlier_detect_IQR(data=data,col='Fare',threshold=5)\n", + "print('Upper bound:',para[0],'\\nLower bound:',para[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "31 146.5208\n", + "195 146.5208\n", + "305 151.5500\n", + "708 151.5500\n", + "297 151.5500\n", + "498 151.5500\n", + "609 153.4625\n", + "332 153.4625\n", + "268 153.4625\n", + "318 164.8667\n", + "856 164.8667\n", + "730 211.3375\n", + "779 211.3375\n", + "689 211.3375\n", + "377 211.5000\n", + "527 221.7792\n", + "700 227.5250\n", + "716 227.5250\n", + "557 227.5250\n", + "380 227.5250\n", + "299 247.5208\n", + "118 247.5208\n", + "311 262.3750\n", + "742 262.3750\n", + "341 263.0000\n", + "88 263.0000\n", + "438 263.0000\n", + "27 263.0000\n", + "679 512.3292\n", + "258 512.3292\n", + "737 512.3292\n", + "Name: Fare, dtype: float64" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# check the 31 found outliers\n", + "data.loc[index,'Fare'].sort_values()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Mean and Standard Deviation Method\n", + "outlier detection by Mean and Standard Deviation Method." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Num of outlier detected: 20\n", + "Proportion of outlier detected 0.02244668911335578\n", + "Upper bound: 181.2844937601173 \n", + "Lower bound: -116.87607782296811\n" + ] + } + ], + "source": [ + "index,para = ot.outlier_detect_mean_std(data=data,col='Fare',threshold=3)\n", + "print('Upper bound:',para[0],'\\nLower bound:',para[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "779 211.3375\n", + "730 211.3375\n", + "689 211.3375\n", + "377 211.5000\n", + "527 221.7792\n", + "716 227.5250\n", + "700 227.5250\n", + "380 227.5250\n", + "557 227.5250\n", + "118 247.5208\n", + "299 247.5208\n", + "311 262.3750\n", + "742 262.3750\n", + "27 263.0000\n", + "341 263.0000\n", + "88 263.0000\n", + "438 263.0000\n", + "258 512.3292\n", + "737 512.3292\n", + "679 512.3292\n", + "Name: Fare, dtype: float64" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# check the 20 found outliers\n", + "data.loc[index,'Fare'].sort_values()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## MAD method\n", + "outlier detection by Median and Median Absolute Deviation Method (MAD)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Num of outlier detected: 160\n", + "Proportion of outlier detected 0.17957351290684623\n" + ] + } + ], + "source": [ + "# too aggressive for our dataset, about 18% of cases are detected as outliers.\n", + "index = ot.outlier_detect_MAD(data=data,col='Fare',threshold=3.5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Imputation with arbitrary value\n", + "impute outliers with arbitrary value" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Num of outlier detected: 19\n", + "Proportion of outlier detected 0.02132435465768799\n", + "Upper bound: 300 \n", + "Lower bound: 5\n" + ] + } + ], + "source": [ + "# use any of the detection method above\n", + "index,para = ot.outlier_detect_arbitrary(data=data,col='Fare',upper_fence=300,lower_fence=5)\n", + "print('Upper bound:',para[0],'\\nLower bound:',para[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFare
25513female29.0015.2458
25611femaleNaN079.2000
25711female30.0086.5000
25811female35.00512.3292
25912female50.0026.0000
26003maleNaN07.7500
26113male3.0431.3875
26201male52.0179.6500
26301male40.000.0000
26403femaleNaN07.7500
26502male36.0010.5000
26603male16.0439.6875
26713male25.017.7750
26811female58.00153.4625
26911female35.00135.6333
27001maleNaN031.0000
27113male25.000.0000
27212female41.0019.5000
27301male37.0029.7000
27413femaleNaN07.7500
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare\n", + "255 1 3 female 29.0 0 15.2458\n", + "256 1 1 female NaN 0 79.2000\n", + "257 1 1 female 30.0 0 86.5000\n", + "258 1 1 female 35.0 0 512.3292\n", + "259 1 2 female 50.0 0 26.0000\n", + "260 0 3 male NaN 0 7.7500\n", + "261 1 3 male 3.0 4 31.3875\n", + "262 0 1 male 52.0 1 79.6500\n", + "263 0 1 male 40.0 0 0.0000\n", + "264 0 3 female NaN 0 7.7500\n", + "265 0 2 male 36.0 0 10.5000\n", + "266 0 3 male 16.0 4 39.6875\n", + "267 1 3 male 25.0 1 7.7750\n", + "268 1 1 female 58.0 0 153.4625\n", + "269 1 1 female 35.0 0 135.6333\n", + "270 0 1 male NaN 0 31.0000\n", + "271 1 3 male 25.0 0 0.0000\n", + "272 1 2 female 41.0 0 19.5000\n", + "273 0 1 male 37.0 0 29.7000\n", + "274 1 3 female NaN 0 7.7500" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[255:275]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFare
25513female29.0015.2458
25611femaleNaN079.2000
25711female30.0086.5000
25811female35.00-999.0000
25912female50.0026.0000
26003maleNaN07.7500
26113male3.0431.3875
26201male52.0179.6500
26301male40.00-999.0000
26403femaleNaN07.7500
26502male36.0010.5000
26603male16.0439.6875
26713male25.017.7750
26811female58.00153.4625
26911female35.00135.6333
27001maleNaN031.0000
27113male25.00-999.0000
27212female41.0019.5000
27301male37.0029.7000
27413femaleNaN07.7500
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare\n", + "255 1 3 female 29.0 0 15.2458\n", + "256 1 1 female NaN 0 79.2000\n", + "257 1 1 female 30.0 0 86.5000\n", + "258 1 1 female 35.0 0 -999.0000\n", + "259 1 2 female 50.0 0 26.0000\n", + "260 0 3 male NaN 0 7.7500\n", + "261 1 3 male 3.0 4 31.3875\n", + "262 0 1 male 52.0 1 79.6500\n", + "263 0 1 male 40.0 0 -999.0000\n", + "264 0 3 female NaN 0 7.7500\n", + "265 0 2 male 36.0 0 10.5000\n", + "266 0 3 male 16.0 4 39.6875\n", + "267 1 3 male 25.0 1 7.7750\n", + "268 1 1 female 58.0 0 153.4625\n", + "269 1 1 female 35.0 0 135.6333\n", + "270 0 1 male NaN 0 31.0000\n", + "271 1 3 male 25.0 0 -999.0000\n", + "272 1 2 female 41.0 0 19.5000\n", + "273 0 1 male 37.0 0 29.7000\n", + "274 1 3 female NaN 0 7.7500" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# see index 258,263,271 have been replaced\n", + "data2 = ot.impute_outlier_with_arbitrary(data=data,outlier_index=index,\n", + " value=-999,col=['Fare'])\n", + "data2[255:275]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Windsorization\n", + "top-coding & bottom coding (capping the maximum of a distribution at an arbitrarily set value,vice versa)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Num of outlier detected: 19\n", + "Proportion of outlier detected 0.02132435465768799\n", + "Upper bound: 300 \n", + "Lower bound: 5\n" + ] + } + ], + "source": [ + "# use any of the detection method above\n", + "index,para = ot.outlier_detect_arbitrary(data,'Fare',300,5)\n", + "print('Upper bound:',para[0],'\\nLower bound:',para[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFare
25513female29.0015.2458
25611femaleNaN079.2000
25711female30.0086.5000
25811female35.00300.0000
25912female50.0026.0000
26003maleNaN07.7500
26113male3.0431.3875
26201male52.0179.6500
26301male40.005.0000
26403femaleNaN07.7500
26502male36.0010.5000
26603male16.0439.6875
26713male25.017.7750
26811female58.00153.4625
26911female35.00135.6333
27001maleNaN031.0000
27113male25.005.0000
27212female41.0019.5000
27301male37.0029.7000
27413femaleNaN07.7500
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare\n", + "255 1 3 female 29.0 0 15.2458\n", + "256 1 1 female NaN 0 79.2000\n", + "257 1 1 female 30.0 0 86.5000\n", + "258 1 1 female 35.0 0 300.0000\n", + "259 1 2 female 50.0 0 26.0000\n", + "260 0 3 male NaN 0 7.7500\n", + "261 1 3 male 3.0 4 31.3875\n", + "262 0 1 male 52.0 1 79.6500\n", + "263 0 1 male 40.0 0 5.0000\n", + "264 0 3 female NaN 0 7.7500\n", + "265 0 2 male 36.0 0 10.5000\n", + "266 0 3 male 16.0 4 39.6875\n", + "267 1 3 male 25.0 1 7.7750\n", + "268 1 1 female 58.0 0 153.4625\n", + "269 1 1 female 35.0 0 135.6333\n", + "270 0 1 male NaN 0 31.0000\n", + "271 1 3 male 25.0 0 5.0000\n", + "272 1 2 female 41.0 0 19.5000\n", + "273 0 1 male 37.0 0 29.7000\n", + "274 1 3 female NaN 0 7.7500" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# see index 258,263,271 have been replaced with top/bottom coding\n", + "\n", + "data3 = ot.windsorization(data=data,col='Fare',para=para,strategy='both')\n", + "data3[255:275]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Discard outliers\n", + "Drop the cases that are outliers" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Num of outlier detected: 19\n", + "Proportion of outlier detected 0.02132435465768799\n", + "Upper bound: 300 \n", + "Lower bound: 5\n" + ] + } + ], + "source": [ + "# use any of the detection method above\n", + "index,para = ot.outlier_detect_arbitrary(data,'Fare',300,5)\n", + "print('Upper bound:',para[0],'\\nLower bound:',para[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "263.0\n", + "5.0\n" + ] + } + ], + "source": [ + "# drop the outlier.\n", + "# we can see no more observations have value >300 or <5. They've been removed.\n", + "data4 = ot.drop_outlier(data=data,outlier_index=index)\n", + "print(data4.Fare.max())\n", + "print(data4.Fare.min())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Mean/Median/Mode Imputation\n", + "replacing the outlier by mean/median/most frequent values of that variable" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Num of outlier detected: 19\n", + "Proportion of outlier detected 0.02132435465768799\n", + "Upper bound: 300 \n", + "Lower bound: 5\n" + ] + } + ], + "source": [ + "# use any of the detection method above\n", + "index,para = ot.outlier_detect_arbitrary(data,'Fare',300,5)\n", + "print('Upper bound:',para[0],'\\nLower bound:',para[1])\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFare
25513female29.0015.245800
25611femaleNaN079.200000
25711female30.0086.500000
25811female35.0032.204208
25912female50.0026.000000
26003maleNaN07.750000
26113male3.0431.387500
26201male52.0179.650000
26301male40.0032.204208
26403femaleNaN07.750000
26502male36.0010.500000
26603male16.0439.687500
26713male25.017.775000
26811female58.00153.462500
26911female35.00135.633300
27001maleNaN031.000000
27113male25.0032.204208
27212female41.0019.500000
27301male37.0029.700000
27413femaleNaN07.750000
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare\n", + "255 1 3 female 29.0 0 15.245800\n", + "256 1 1 female NaN 0 79.200000\n", + "257 1 1 female 30.0 0 86.500000\n", + "258 1 1 female 35.0 0 32.204208\n", + "259 1 2 female 50.0 0 26.000000\n", + "260 0 3 male NaN 0 7.750000\n", + "261 1 3 male 3.0 4 31.387500\n", + "262 0 1 male 52.0 1 79.650000\n", + "263 0 1 male 40.0 0 32.204208\n", + "264 0 3 female NaN 0 7.750000\n", + "265 0 2 male 36.0 0 10.500000\n", + "266 0 3 male 16.0 4 39.687500\n", + "267 1 3 male 25.0 1 7.775000\n", + "268 1 1 female 58.0 0 153.462500\n", + "269 1 1 female 35.0 0 135.633300\n", + "270 0 1 male NaN 0 31.000000\n", + "271 1 3 male 25.0 0 32.204208\n", + "272 1 2 female 41.0 0 19.500000\n", + "273 0 1 male 37.0 0 29.700000\n", + "274 1 3 female NaN 0 7.750000" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# see index 258,263,271 have been replaced with mean\n", + "\n", + "data5 = ot.impute_outlier_with_avg(data=data,col='Fare',\n", + " outlier_index=index,strategy='mean')\n", + "data5[255:275]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/2.3_Demo_Rare_Values.ipynb b/2.3_Demo_Rare_Values.ipynb new file mode 100644 index 0000000..2fba1d9 --- /dev/null +++ b/2.3_Demo_Rare_Values.ipynb @@ -0,0 +1,271 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "# import seaborn as sns\n", + "# import matplotlib.pyplot as plt\n", + "import os\n", + "# plt.style.use('seaborn-colorblind')\n", + "# %matplotlib inline\n", + "from feature_cleaning import rare_values as ra" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Variable Pclass label proportion:\n", + "3 0.551066\n", + "1 0.242424\n", + "2 0.206510\n", + "Name: Pclass, dtype: float64\n", + "Variable SibSp label proportion:\n", + "0 0.682379\n", + "1 0.234568\n", + "2 0.031425\n", + "4 0.020202\n", + "3 0.017957\n", + "8 0.007856\n", + "5 0.005612\n", + "Name: SibSp, dtype: float64\n" + ] + } + ], + "source": [ + "use_cols = [\n", + " 'Pclass', 'Sex', 'Age', 'Fare', 'SibSp',\n", + " 'Survived'\n", + "]\n", + "\n", + "# see column Pclass & SibSp's distributions\n", + "# SibSp has values 3/8/5 that occur rarely, under 2%\n", + "# Pclass has 3 values, but no one is under 20%\n", + "data = pd.read_csv('./data/titanic.csv', usecols=use_cols)\n", + "for i in ['Pclass','SibSp']:\n", + " print('Variable',i,'label proportion:')\n", + " print(data[i].value_counts()/len(data))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Grouping into one new category\n", + "Grouping the observations that show rare labels into a unique category ('rare')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# create the encoder and fit with our data\n", + "enc = ra.GroupingRareValues(cols=['Pclass','SibSp'],threshold=0.01).fit(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[{'col': 'Pclass', 'mapping': 3 3\n", + "1 1\n", + "2 2\n", + "dtype: int64, 'data_type': dtype('int64')}, {'col': 'SibSp', 'mapping': 0 0\n", + "1 1\n", + "2 2\n", + "4 4\n", + "3 3\n", + "8 rare\n", + "5 rare\n", + "dtype: object, 'data_type': dtype('int64')}]\n" + ] + } + ], + "source": [ + "# let's see the mapping\n", + "# for SibSp, values 5 & 8 are encoded as 'rare' as they appear less than 10%\n", + "# for Pclass, nothing changed\n", + "print(enc.mapping)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# perform transformation\n", + "data2 = enc.transform(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 608\n", + "1 209\n", + "2 28\n", + "4 18\n", + "3 16\n", + "rare 12\n", + "Name: SibSp, dtype: int64\n" + ] + } + ], + "source": [ + "# check the result\n", + "print(data2.SibSp.value_counts())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Mode Imputation\n", + "Replacing the rare label by most frequent label" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# create the encoder and fit with our data\n", + "enc = ra.ModeImputation(cols=['Pclass','SibSp'],threshold=0.01).fit(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[{'col': 'Pclass', 'mapping': 3 3\n", + "1 1\n", + "2 2\n", + "dtype: int64, 'data_type': dtype('int64')}, {'col': 'SibSp', 'mapping': 0 0\n", + "1 1\n", + "2 2\n", + "4 4\n", + "3 3\n", + "8 0\n", + "5 0\n", + "dtype: int64, 'data_type': dtype('int64')}]\n" + ] + } + ], + "source": [ + "# let's see the mapping\n", + "# for SibSp, values 5 & 8 are encoded as 0, as label 0 is the most frequent label\n", + "# for Pclass, nothing changed\n", + "print(enc.mapping)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# perform transformation\n", + "data3 = enc.transform(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 620\n", + "1 209\n", + "2 28\n", + "4 18\n", + "3 16\n", + "Name: SibSp, dtype: int64\n" + ] + } + ], + "source": [ + "# check the result\n", + "print(data3.SibSp.value_counts())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/3.1_Demo_Feature_Scaling.ipynb b/3.1_Demo_Feature_Scaling.ipynb new file mode 100644 index 0000000..e2276bc --- /dev/null +++ b/3.1_Demo_Feature_Scaling.ipynb @@ -0,0 +1,326 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "# import seaborn as sns\n", + "# import matplotlib.pyplot as plt\n", + "import os\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "# plt.style.use('seaborn-colorblind')\n", + "# %matplotlib inline\n", + "#from feature_cleaning import rare_values as ra" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "use_cols = [\n", + " 'Pclass', 'Sex', 'Age', 'Fare', 'SibSp',\n", + " 'Survived'\n", + "]\n", + "\n", + "data = pd.read_csv('./data/titanic.csv', usecols=use_cols)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFare
003male22.017.2500
111female38.0171.2833
213female26.007.9250
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare\n", + "0 0 3 male 22.0 1 7.2500\n", + "1 1 1 female 38.0 1 71.2833\n", + "2 1 3 female 26.0 0 7.9250" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((623, 6), (268, 6))" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Note that we include target variable in the X_train \n", + "# because we need it to supervise our discretization\n", + "# this is not the standard way of using train-test-split\n", + "X_train, X_test, y_train, y_test = train_test_split(data, data.Survived, test_size=0.3,\n", + " random_state=0)\n", + "X_train.shape, X_test.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Normalization - Standardization (Z-score scaling)\n", + "\n", + "removes the mean and scales the data to unit variance.
z = (X - X.mean) / std" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Survived Pclass Sex Age SibSp Fare Fare_zscore\n", + "857 1 1 male 51.0 0 26.5500 -0.122530\n", + "52 1 1 female 49.0 1 76.7292 0.918124\n", + "386 0 3 male 1.0 5 46.9000 0.299503\n", + "124 0 1 male 54.0 0 77.2875 0.929702\n", + "578 0 3 female NaN 1 14.4583 -0.373297\n", + "549 1 2 male 8.0 1 36.7500 0.089005\n" + ] + } + ], + "source": [ + "# add the new created feature\n", + "from sklearn.preprocessing import StandardScaler\n", + "ss = StandardScaler().fit(X_train[['Fare']])\n", + "X_train_copy = X_train.copy(deep=True)\n", + "X_train_copy['Fare_zscore'] = ss.transform(X_train_copy[['Fare']])\n", + "print(X_train_copy.head(6))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5.916437306188636e-17\n", + "1.0008035356861\n" + ] + } + ], + "source": [ + "# check if it is with mean=0 std=1\n", + "print(X_train_copy['Fare_zscore'].mean())\n", + "print(X_train_copy['Fare_zscore'].std())\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Min-Max scaling\n", + "transforms features by scaling each feature to a given range. Default to [0,1].
X_scaled = (X - X.min / (X.max - X.min)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Survived Pclass Sex Age SibSp Fare Fare_minmax\n", + "857 1 1 male 51.0 0 26.5500 0.051822\n", + "52 1 1 female 49.0 1 76.7292 0.149765\n", + "386 0 3 male 1.0 5 46.9000 0.091543\n", + "124 0 1 male 54.0 0 77.2875 0.150855\n", + "578 0 3 female NaN 1 14.4583 0.028221\n", + "549 1 2 male 8.0 1 36.7500 0.071731\n" + ] + } + ], + "source": [ + "# add the new created feature\n", + "from sklearn.preprocessing import MinMaxScaler\n", + "mms = MinMaxScaler().fit(X_train[['Fare']])\n", + "X_train_copy = X_train.copy(deep=True)\n", + "X_train_copy['Fare_minmax'] = mms.transform(X_train_copy[['Fare']])\n", + "print(X_train_copy.head(6))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.0\n", + "0.0\n" + ] + } + ], + "source": [ + "# check the range of Fare_minmax\n", + "print(X_train_copy['Fare_minmax'].max())\n", + "print(X_train_copy['Fare_minmax'].min())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## Robust scaling\n", + "removes the median and scales the data according to the quantile range (defaults to IQR)
X_scaled = (X - X.median) / IQR" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Survived Pclass Sex Age SibSp Fare Fare_robust\n", + "857 1 1 male 51.0 0 26.5500 0.492275\n", + "52 1 1 female 49.0 1 76.7292 2.630973\n", + "386 0 3 male 1.0 5 46.9000 1.359616\n", + "124 0 1 male 54.0 0 77.2875 2.654768\n", + "578 0 3 female NaN 1 14.4583 -0.023088\n", + "549 1 2 male 8.0 1 36.7500 0.927011\n" + ] + } + ], + "source": [ + "# add the new created feature\n", + "from sklearn.preprocessing import RobustScaler\n", + "rs = RobustScaler().fit(X_train[['Fare']])\n", + "X_train_copy = X_train.copy(deep=True)\n", + "X_train_copy['Fare_robust'] = rs.transform(X_train_copy[['Fare']])\n", + "print(X_train_copy.head(6))" + ] + } + ], + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/3.2_Demo_Discretisation.ipynb b/3.2_Demo_Discretisation.ipynb new file mode 100644 index 0000000..da55259 --- /dev/null +++ b/3.2_Demo_Discretisation.ipynb @@ -0,0 +1,865 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "# import seaborn as sns\n", + "# import matplotlib.pyplot as plt\n", + "import os\n", + "from sklearn.model_selection import train_test_split\n", + "from feature_engineering import discretization as dc\n", + "\n", + "# plt.style.use('seaborn-colorblind')\n", + "# %matplotlib inline\n", + "#from feature_cleaning import rare_values as ra" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "use_cols = [\n", + " 'Pclass', 'Sex', 'Age', 'Fare', 'SibSp',\n", + " 'Survived'\n", + "]\n", + "\n", + "data = pd.read_csv('./data/titanic.csv', usecols=use_cols)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFare
003male22.017.2500
111female38.0171.2833
213female26.007.9250
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare\n", + "0 0 3 male 22.0 1 7.2500\n", + "1 1 1 female 38.0 1 71.2833\n", + "2 1 3 female 26.0 0 7.9250" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((623, 6), (268, 6))" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Note that we include target variable in the X_train \n", + "# because we need it to supervise our discretization\n", + "# this is not the standard way of using train-test-split\n", + "X_train, X_test, y_train, y_test = train_test_split(data, data.Survived, test_size=0.3,\n", + " random_state=0)\n", + "X_train.shape, X_test.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Equal width binning\n", + "divides the scope of possible values into N bins of the same width" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sklearn.preprocessing import KBinsDiscretizer\n", + "enc_equal_width = KBinsDiscretizer(n_bins=3,encode='ordinal',strategy='uniform').fit(X_train[['Fare']])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([array([ 0. , 170.7764, 341.5528, 512.3292])], dtype=object)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# equal width for every bins\n", + "enc_equal_width.bin_edges_" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.0 610\n", + "1.0 11\n", + "2.0 2\n", + "Name: 0, dtype: int64" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result = enc_equal_width.transform(X_train[['Fare']])\n", + "pd.DataFrame(result)[0].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Survived Pclass Sex Age SibSp Fare Fare_equal_width\n", + "857 1 1 male 51.0 0 26.5500 0.0\n", + "52 1 1 female 49.0 1 76.7292 0.0\n", + "386 0 3 male 1.0 5 46.9000 0.0\n", + "124 0 1 male 54.0 0 77.2875 0.0\n", + "578 0 3 female NaN 1 14.4583 0.0\n", + "549 1 2 male 8.0 1 36.7500 0.0\n", + "118 0 1 male 24.0 0 247.5208 1.0\n", + "12 0 3 male 20.0 0 8.0500 0.0\n", + "157 0 3 male 30.0 0 8.0500 0.0\n", + "127 1 3 male 24.0 0 7.1417 0.0\n" + ] + } + ], + "source": [ + "# add the new discretized variable\n", + "X_train_copy = X_train.copy(deep=True)\n", + "X_train_copy['Fare_equal_width'] = enc_equal_width.transform(X_train[['Fare']])\n", + "print(X_train_copy.head(10))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Equal frequency binning\n", + "divides the scope of possible values of the variable into N bins, \n", + "where each bin carries the same amount of observations" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "enc_equal_freq = KBinsDiscretizer(n_bins=3,encode='ordinal',strategy='quantile').fit(X_train[['Fare']])" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([array([ 0. , 8.69303333, 26.2875 , 512.3292 ])],\n", + " dtype=object)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# check the bin edges\n", + "enc_equal_freq.bin_edges_" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.0 209\n", + "0.0 208\n", + "1.0 206\n", + "Name: 0, dtype: int64" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# equal number of case for every bins\n", + "result = enc_equal_freq.transform(X_train[['Fare']])\n", + "pd.DataFrame(result)[0].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Survived Pclass Sex Age SibSp Fare Fare_equal_freq\n", + "857 1 1 male 51.0 0 26.5500 2.0\n", + "52 1 1 female 49.0 1 76.7292 2.0\n", + "386 0 3 male 1.0 5 46.9000 2.0\n", + "124 0 1 male 54.0 0 77.2875 2.0\n", + "578 0 3 female NaN 1 14.4583 1.0\n", + "549 1 2 male 8.0 1 36.7500 2.0\n", + "118 0 1 male 24.0 0 247.5208 2.0\n", + "12 0 3 male 20.0 0 8.0500 0.0\n", + "157 0 3 male 30.0 0 8.0500 0.0\n", + "127 1 3 male 24.0 0 7.1417 0.0\n" + ] + } + ], + "source": [ + "# add the new discretized variable\n", + "X_train_copy = X_train.copy(deep=True)\n", + "X_train_copy['Fare_equal_freq'] = enc_equal_freq.transform(X_train[['Fare']])\n", + "print(X_train_copy.head(10))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## K-means binning\n", + "using k-means to partition values into clusters" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "enc_kmeans = KBinsDiscretizer(n_bins=3,encode='ordinal',strategy='kmeans').fit(X_train[['Fare']])" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([array([ 0. , 93.5271531 , 338.08506324, 512.3292 ])],\n", + " dtype=object)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# check the bin edges\n", + "enc_kmeans.bin_edges_" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.0 587\n", + "1.0 34\n", + "2.0 2\n", + "Name: 0, dtype: int64" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result = enc_kmeans.transform(X_train[['Fare']])\n", + "pd.DataFrame(result)[0].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Survived Pclass Sex Age SibSp Fare Fare_kmeans\n", + "857 1 1 male 51.0 0 26.5500 0.0\n", + "52 1 1 female 49.0 1 76.7292 0.0\n", + "386 0 3 male 1.0 5 46.9000 0.0\n", + "124 0 1 male 54.0 0 77.2875 0.0\n", + "578 0 3 female NaN 1 14.4583 0.0\n", + "549 1 2 male 8.0 1 36.7500 0.0\n", + "118 0 1 male 24.0 0 247.5208 1.0\n", + "12 0 3 male 20.0 0 8.0500 0.0\n", + "157 0 3 male 30.0 0 8.0500 0.0\n", + "127 1 3 male 24.0 0 7.1417 0.0\n" + ] + } + ], + "source": [ + "# add the new discretized variable\n", + "X_train_copy = X_train.copy(deep=True)\n", + "X_train_copy['Fare_kmeans'] = enc_kmeans.transform(X_train[['Fare']])\n", + "print(X_train_copy.head(10))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Discretisation with Decision Tree\n", + "using a decision tree to identify the optimal splitting points that would determine the bins" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "enc1 = dc.DiscretizeByDecisionTree(col='Fare',max_depth=2).fit(X=X_train,y=y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=2,\n", + " max_features=None, max_leaf_nodes=None,\n", + " min_impurity_decrease=0.0, min_impurity_split=None,\n", + " min_samples_leaf=1, min_samples_split=2,\n", + " min_weight_fraction_leaf=0.0, presort=False, random_state=None,\n", + " splitter='best')" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "enc1.tree_model" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "data1 = enc1.transform(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Survived Pclass Sex Age SibSp Fare Fare_tree_discret\n", + "0 0 3 male 22.0 1 7.2500 0.107143\n", + "1 1 1 female 38.0 1 71.2833 0.442308\n", + "2 1 3 female 26.0 0 7.9250 0.255319\n", + "3 1 1 female 35.0 1 53.1000 0.442308\n", + "4 0 3 male 35.0 0 8.0500 0.255319\n", + "[0.10714286 0.44230769 0.25531915 0.74626866]\n" + ] + } + ], + "source": [ + "# see how the new column Fare_tree_discret is distributed\n", + "# the values are corresponding to the proba of the prediction by the tree\n", + "print(data1.head(5))\n", + "\n", + "# the unique value of the discretisized column\n", + "print(data1.Fare_tree_discret.unique())" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Fare Fare\n", + "Fare_tree_discret \n", + "0.107143 0.0000 7.5208\n", + "0.255319 7.5500 10.5167\n", + "0.442308 11.1333 73.5000\n", + "0.746269 75.2500 512.3292\n" + ] + } + ], + "source": [ + "# see how the bins are cut\n", + "# because we use a tree with max-depth of 2, we have at most 2*2=4 bins generated by the tree\n", + "col='Fare'\n", + "bins = pd.concat([data1.groupby([col+'_tree_discret'])[col].min(),\n", + " data1.groupby([col+'_tree_discret'])[col].max()], axis=1)\n", + "print(bins)\n", + "\n", + "# all values between 0 to 7.5208 in the original variable 'Fare' \n", + "# are given new value 0.107143 in the new column 'Fare_tree_discret'\n", + "# and so on" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Discretisation with Decision Tree with optimal depth search" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "result ROC-AUC for each depth\n", + " depth roc_auc_mean roc_auc_std\n", + "0 2 0.662132 0.026253\n", + "1 3 0.647950 0.045010\n", + "2 4 0.650984 0.035127\n", + "3 5 0.651180 0.027663\n", + "4 6 0.653961 0.037421\n", + "5 7 0.643688 0.033513\n", + "optimal_depth: [2]\n" + ] + } + ], + "source": [ + "# search for the best depth from range 2-7\n", + "# we see when depth=2 we get the best roc-auc mean\n", + "enc2 = dc.DiscretizeByDecisionTree(col='Fare',max_depth=[2,3,4,5,6,7]).fit(X=X_train,y=y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "DecisionTreeClassifier(class_weight=None, criterion='gini',\n", + " max_depth=array([2], dtype=int64), max_features=None,\n", + " max_leaf_nodes=None, min_impurity_decrease=0.0,\n", + " min_impurity_split=None, min_samples_leaf=1,\n", + " min_samples_split=2, min_weight_fraction_leaf=0.0,\n", + " presort=False, random_state=None, splitter='best')" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# using optimal depth=2 we train the model, same result as last one\n", + "enc2.tree_model" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFareFare_tree_discret
003male22.017.25000.107143
111female38.0171.28330.442308
213female26.007.92500.255319
311female35.0153.10000.442308
403male35.008.05000.255319
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare Fare_tree_discret\n", + "0 0 3 male 22.0 1 7.2500 0.107143\n", + "1 1 1 female 38.0 1 71.2833 0.442308\n", + "2 1 3 female 26.0 0 7.9250 0.255319\n", + "3 1 1 female 35.0 1 53.1000 0.442308\n", + "4 0 3 male 35.0 0 8.0500 0.255319" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data2 = enc2.transform(data)\n", + "data2.head(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## Discretisation with ChiMerge\n", + "supervised hierarchical bottom-up (merge) method that locally exploits the chi-square criterion to decide whether two adjacent intervals are similar enough to be merged" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Interval for variable Fare\n", + " variable interval flag_0 flag_1\n", + "0 Fare -inf,7.875 94.0 28.0\n", + "1 Fare 7.875,7.8792 0.0 3.0\n", + "2 Fare 7.8792,7.8958 25.0 1.0\n", + "3 Fare 7.8958,73.5 245.0 160.0\n", + "4 Fare 73.5+ 17.0 50.0\n" + ] + } + ], + "source": [ + "enc3 = dc.ChiMerge(col='Fare',num_of_bins=5).fit(X=X_train,y='Survived')" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[-0.1, 7.875, 7.8792, 7.8958, 73.5, 512.3292]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# the bins boundary created by ChiMerge\n", + "\n", + "enc3.bins" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "data3 = enc3.transform(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Survived Pclass Sex Age SibSp Fare Fare_chimerge\n", + "0 0 3 male 22.0 1 7.2500 (-0.101, 7.875]\n", + "1 1 1 female 38.0 1 71.2833 (7.896, 73.5]\n", + "2 1 3 female 26.0 0 7.9250 (7.896, 73.5]\n", + "3 1 1 female 35.0 1 53.1000 (7.896, 73.5]\n", + "4 0 3 male 35.0 0 8.0500 (7.896, 73.5]\n" + ] + } + ], + "source": [ + "print(data3.head(5))" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(-0.101, 7.875], (7.896, 73.5], (73.5, 512.329], (7.875, 7.879], (7.879, 7.896]]\n", + "Categories (5, interval[float64]): [(-0.101, 7.875] < (7.875, 7.879] < (7.879, 7.896] < (7.896, 73.5] < (73.5, 512.329]]" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# all values are grouped into 5 intervals\n", + "data3.Fare_chimerge.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/3.3_Demo_Feature_Encoding.ipynb b/3.3_Demo_Feature_Encoding.ipynb new file mode 100644 index 0000000..880667e --- /dev/null +++ b/3.3_Demo_Feature_Encoding.ipynb @@ -0,0 +1,688 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "# import seaborn as sns\n", + "# import matplotlib.pyplot as plt\n", + "import os\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "import category_encoders as ce\n", + "from feature_engineering import encoding\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFare
003male22.017.2500
111female38.0171.2833
213female26.007.9250
311female35.0153.1000
403male35.008.0500
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare\n", + "0 0 3 male 22.0 1 7.2500\n", + "1 1 1 female 38.0 1 71.2833\n", + "2 1 3 female 26.0 0 7.9250\n", + "3 1 1 female 35.0 1 53.1000\n", + "4 0 3 male 35.0 0 8.0500" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "use_cols = [\n", + " 'Pclass', 'Sex', 'Age', 'Fare', 'SibSp',\n", + " 'Survived'\n", + "]\n", + "\n", + "data = pd.read_csv('./data/titanic.csv', usecols=use_cols)\n", + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((623, 6), (268, 6))" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(data, data.Survived, test_size=0.3,\n", + " random_state=0)\n", + "X_train.shape, X_test.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## One-hot encoding\n", + "replace the categorical variable by different boolean variables (0/1) to indicate whether or not certain label is true for that observation" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "data1 = pd.get_dummies(data,drop_first=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassAgeSibSpFareSex_male
00322.017.25001
11138.0171.28330
21326.007.92500
31135.0153.10000
40335.008.05001
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Age SibSp Fare Sex_male\n", + "0 0 3 22.0 1 7.2500 1\n", + "1 1 1 38.0 1 71.2833 0\n", + "2 1 3 26.0 0 7.9250 0\n", + "3 1 1 35.0 1 53.1000 0\n", + "4 0 3 35.0 0 8.0500 1" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data1.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ordinal-encoding\n", + "replace the labels by some ordinal number if ordinal is meaningful" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "ord_enc = ce.OrdinalEncoder(cols=['Sex']).fit(X_train,y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Survived Pclass Sex Age SibSp Fare\n", + "0 0 3 1 22.0 1 7.2500\n", + "1 1 1 2 38.0 1 71.2833\n", + "2 1 3 2 26.0 0 7.9250\n", + "3 1 1 2 35.0 1 53.1000\n", + "4 0 3 1 35.0 0 8.0500\n" + ] + } + ], + "source": [ + "data4 = ord_enc.transform(data)\n", + "print(data4.head(5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Mean encoding\n", + "replace the label by the mean of the target for that label. \n", + "(the target must be 0/1 valued or continuous)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Sex\n", + "female 0.753488\n", + "male 0.196078\n", + "Name: Survived, dtype: float64" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# cross check-- the mean of target group by Sex\n", + "X_train['Survived'].groupby(data['Sex']).mean()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "mean_enc = encoding.MeanEncoding(cols=['Sex']).fit(X_train,y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Survived Pclass Sex Age SibSp Fare\n", + "0 0 3 0.196078 22.0 1 7.2500\n", + "1 1 1 0.753488 38.0 1 71.2833\n", + "2 1 3 0.753488 26.0 0 7.9250\n", + "3 1 1 0.753488 35.0 1 53.1000\n", + "4 0 3 0.196078 35.0 0 8.0500\n" + ] + } + ], + "source": [ + "data6 = mean_enc.transform(data)\n", + "print(data6.head(5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Target-encoding\n", + "Similar to mean encoding, but use both posterior probability and prior probability of the target" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# create the encoder and fit with our data\n", + "target_enc = ce.TargetEncoder(cols=['Sex']).fit(X_train,y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# perform transformation\n", + "# data.Survived.groupby(data['Sex']).agg(['mean'])\n", + "data2 = target_enc.transform(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFare
0030.19607822.017.2500
1110.75348838.0171.2833
2130.75348826.007.9250
3110.75348835.0153.1000
4030.19607835.008.0500
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare\n", + "0 0 3 0.196078 22.0 1 7.2500\n", + "1 1 1 0.753488 38.0 1 71.2833\n", + "2 1 3 0.753488 26.0 0 7.9250\n", + "3 1 1 0.753488 35.0 1 53.1000\n", + "4 0 3 0.196078 35.0 0 8.0500" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# check the result\n", + "data2.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## WOE-encoding\n", + "replace the label with Weight of Evidence of each label. WOE is computed from the basic odds ratio: \n", + "\n", + "ln( (Proportion of Good Outcomes) / (Proportion of Bad Outcomes))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "woe_enc = ce.WOEEncoder(cols=['Sex']).fit(X_train,y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "data3 = woe_enc.transform(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFare
003-0.95074222.017.2500
1111.55563338.0171.2833
2131.55563326.007.9250
3111.55563335.0153.1000
403-0.95074235.008.0500
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare\n", + "0 0 3 -0.950742 22.0 1 7.2500\n", + "1 1 1 1.555633 38.0 1 71.2833\n", + "2 1 3 1.555633 26.0 0 7.9250\n", + "3 1 1 1.555633 35.0 1 53.1000\n", + "4 0 3 -0.950742 35.0 0 8.0500" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data3.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/3.4_Demo_Feature_Transformation.ipynb b/3.4_Demo_Feature_Transformation.ipynb new file mode 100644 index 0000000..b61ccbf --- /dev/null +++ b/3.4_Demo_Feature_Transformation.ipynb @@ -0,0 +1,497 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "# import seaborn as sns\n", + "# import matplotlib.pyplot as plt\n", + "import os\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "from feature_engineering import transformation\n", + "# plt.style.use('seaborn-colorblind')\n", + "# %matplotlib inline\n", + "#from feature_cleaning import rare_values as ra" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "use_cols = [\n", + " 'Pclass', 'Sex', 'Age', 'Fare', 'SibSp',\n", + " 'Survived'\n", + "]\n", + "\n", + "data = pd.read_csv('./data/titanic.csv', usecols=use_cols)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFare
003male22.017.2500
111female38.0171.2833
213female26.007.9250
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare\n", + "0 0 3 male 22.0 1 7.2500\n", + "1 1 1 female 38.0 1 71.2833\n", + "2 1 3 female 26.0 0 7.9250" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((623, 6), (268, 6))" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Note that we include target variable in the X_train \n", + "# because we need it to supervise our discretization\n", + "# this is not the standard way of using train-test-split\n", + "X_train, X_test, y_train, y_test = train_test_split(data, data.Survived, test_size=0.3,\n", + " random_state=0)\n", + "X_train.shape, X_test.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Logarithmic transformation" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Variable Fare Q-Q plot\n" + ] + }, + { + "data": { + "image/png": "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\ngg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Survived Pclass Sex Age SibSp Fare Fare_log\n", + "857 1 1 male 51.0 0 26.5500 3.316003\n", + "52 1 1 female 49.0 1 76.7292 4.353231\n", + "386 0 3 male 1.0 5 46.9000 3.869116\n", + "124 0 1 male 54.0 0 77.2875 4.360388\n", + "578 0 3 female NaN 1 14.4583 2.738146\n", + "549 1 2 male 8.0 1 36.7500 3.630985\n" + ] + } + ], + "source": [ + "# add the new created feature\n", + "X_train_copy = X_train.copy(deep=True)\n", + "X_train_copy = transformation.log_transform(data=X_train,cols=['Fare'])\n", + "print(X_train_copy.head(6))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reciprocal transformation" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Variable Fare Q-Q plot\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Survived Pclass Sex Age SibSp Fare Fare_reciprocal\n", + "857 1 1 male 51.0 0 26.5500 0.037665\n", + "52 1 1 female 49.0 1 76.7292 0.013033\n", + "386 0 3 male 1.0 5 46.9000 0.021322\n", + "124 0 1 male 54.0 0 77.2875 0.012939\n", + "578 0 3 female NaN 1 14.4583 0.069164\n", + "549 1 2 male 8.0 1 36.7500 0.027211\n" + ] + } + ], + "source": [ + "# add the new created feature\n", + "X_train_copy = X_train.copy(deep=True)\n", + "X_train_copy = X_train_copy[X_train_copy.Fare!=0] # Warning that x should not be 0\n", + "#X_train_copy[X_train_copy.Fare==0]\n", + "X_train_copy = transformation.reciprocal_transform(data=X_train_copy,cols=['Fare'])\n", + "print(X_train_copy.head(6))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## Square root transformation" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Variable Fare Q-Q plot\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Survived Pclass Sex Age SibSp Fare Fare_square_root\n", + "857 1 1 male 51.0 0 26.5500 5.152669\n", + "52 1 1 female 49.0 1 76.7292 8.759521\n", + "386 0 3 male 1.0 5 46.9000 6.848357\n", + "124 0 1 male 54.0 0 77.2875 8.791331\n", + "578 0 3 female NaN 1 14.4583 3.802407\n", + "549 1 2 male 8.0 1 36.7500 6.062178\n" + ] + } + ], + "source": [ + "# add the new created feature\n", + "X_train_copy = X_train.copy(deep=True)\n", + "X_train_copy = transformation.square_root_transform(data=X_train,cols=['Fare'])\n", + "print(X_train_copy.head(6))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exponential transformation" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Variable Fare Q-Q plot\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Survived Pclass Sex Age SibSp Fare Fare_exp\n", + "857 1 1 male 51.0 0 26.5500 1.926695\n", + "52 1 1 female 49.0 1 76.7292 2.382276\n", + "386 0 3 male 1.0 5 46.9000 2.158910\n", + "124 0 1 male 54.0 0 77.2875 2.385733\n", + "578 0 3 female NaN 1 14.4583 1.706174\n", + "549 1 2 male 8.0 1 36.7500 2.056134\n" + ] + } + ], + "source": [ + "# add the new created feature\n", + "X_train_copy = X_train.copy(deep=True)\n", + "X_train_copy = transformation.exp_transform(data=X_train,cols=['Fare'],coef=0.2)\n", + "print(X_train_copy.head(6))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Box-cox transformation" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Survived Pclass Sex Age SibSp Fare Fare_boxcox\n", + "857 1 1 male 51.0 0 26.5500 0.398696\n", + "52 1 1 female 49.0 1 76.7292 1.401774\n", + "386 0 3 male 1.0 5 46.9000 0.950718\n", + "124 0 1 male 54.0 0 77.2875 1.408228\n", + "578 0 3 female NaN 1 14.4583 -0.222897\n", + "549 1 2 male 8.0 1 36.7500 0.718007\n" + ] + } + ], + "source": [ + "from sklearn.preprocessing import PowerTransformer\n", + "pt = PowerTransformer().fit(X_train[['Fare']])\n", + "X_train_copy = X_train.copy(deep=True)\n", + "X_train_copy['Fare_boxcox'] = pt.transform(X_train_copy[['Fare']])\n", + "print(X_train_copy.head(6))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\noVwMjJc0TtJ2wOnA3S06l5mZmZmZWUdoyQhcRGySNBOYBwwDbo2IVa04l5mZmZmZWado1RRKIuI+\n4L5WHZ8mpl+2oVxyySUPcC7tKpdccskD8sqlU3TCe5Z7jrnnB84xB7nnBwXl2JKbmJiZmZmZmdng\na9U1cGZmZmZmZjbIsmjgJF0qKSSNLDqWRki6WtJySUslzZe0Z9ExNUrStZKeTvncJem9RcfUKEnT\nJK2S9Lak0t1FSdJkSWskrZV0WdHxNEPSrZI2SFpZdCzNkDRa0kJJq9PP1sVFx9QoSdtLelzSspTL\nVUXHZP2XU92pJ6d6VEvZa1Q9OdWuWnKpZ73JqdbV0g71r/QNnKTRwPHAn4uOpQnXRsRBEdEF3ANc\nWXRATVgAHBARBwHPAJcXHE8zVgKnAA8XHchASRoG3AScBEwAzpA0odiomjIHmFx0EINgE3BJROwH\nHAFcUOL35S3guIg4GOgCJks6ouCYrP9yqjv15FSPailtjaonw9pVyxzyqGe9yanW1VJ4/St9Awdc\nD3weKO3FfBHxWtXqDpQ7l/kRsSmtPkrlMwBLKSJWR8RAP2C+XUwE1kbEsxHxb+A2YGrBMTUsIh4G\n/lp0HM2KiJciYklafh1YDYwqNqrGRMUbaXV4+irt365Ok1PdqSenelRLyWtUPVnVrlpyqWe9yanW\n1dIO9a/UDZykKcALEbGs6FiaJelrkp4HppPPf0LPAX5TdBAdahTwfNX6ejL645kDSWOBQ4DHio2k\ncZKGSVoKbAAWRERpc+lEmdadelyPysG1KzM51Lpaiq5/LfsYgcEi6QFg9xq7ZgFXACcMbUSN6S2P\niPhVRMwCZkm6HJgJfHlIAxyAvnJJj5lFZQh97lDGNlD9yaWkVGNbdv9hLytJOwJ3Ap/dYiSkVCJi\nM9CVri26S9IBEZHtdR1lk1PdqSenelRLxjWqHteujORS62opuv61fQMXEZNqbZd0IDAOWCYJKlMj\nlkiaGBEvD2GI/VIvjxp+AtxLGxfSvnKR9Bng48BHo80/p2IA70vZrAdGV63vBbxYUCxWRdJwKgVt\nbkT8ouh4BkNEbJS0iMp1HW7g2kROdaeenOpRLRnXqHpcuzKRY62rpaj6V9oplBGxIiJ2jYixETGW\nyi/9oe3YvPVF0viq1SnA00XF0ixJk4EvAFMi4s2i4+lgi4HxksZJ2g44Hbi74Jg6nir/bfo+sDoi\nris6nmZI2qXnrn6SRgCTKPHfrk6TU92px/WolFy7MpBTraulHepfaRu4zFwjaaWk5VSmhJb5dqs3\nAjsBC9LtqW8uOqBGSTpZ0nrgSOBeSfOKjqm/0oX7M4F5VC4e/llErCo2qsZJ+inwCLCPpPWSzi06\npgYdDZwJHJd+P5ZK+n++0G0AAASpSURBVFjRQTVoD2Bh+ru1mMo1APcUHJP1X051p55s6lEtZa5R\n9eRWu2rJqJ71JqdaV0vh9U8lnFFgZmZmZmbWkTwCZ2ZmZmZmVhJu4MzMzMzMzErCDZyZmZmZmVlJ\nuIEzMzMzMzMrCTdwZmZmZmZmJeEGzszMzKzEJO1cdbv2lyW9kJY3SnpqiGPpqr5lvKQpki5r8Fjr\nJI0cvOgGdO6zJO1Ztf49SROKjssM3MCZmZmZlVpEvBoRXRHRBdwMXJ+Wu4C3B/t8krbtZXcX8E4D\nFxF3R8Q1gx3DEDgLeKeBi4jzImJIm2GzetzAmZmZmeVrmKRbJK2SNF/SCABJH5B0v6QnJf1O0r5p\n+xhJD0panr7vnbbPkXSdpIXANyTtIOlWSYsl/VHSVEnbAV8FTksjgKelkawb0zF2k3SXpGXp66i0\n/ZcpjlWSZvSVkKSzJT0j6aGUW8/x50g6tepxb6TvO6ZclkhaIWlq2j5W0uotX590jG5gbspjhKRF\nkrprxPIpSY+nx31X0rD0NUfSynS+zzXx/pltxQ2cmZmZWb7GAzdFxP7ARuATafts4MKIOAy4FPhO\n2n4j8KOIOAiYC9xQdawPApMi4hJgFvDbiPgQcCxwLTAcuBK4PY0I3r5FLDcAD0XEwcChwKq0/ZwU\nRzdwkaSd6yUjaQ/gKuBo4HhgQj9eg38BJ0fEoSnWb0lSvdcnIn4OPAFMT3n8s04s+wGnAUenEc/N\nwHQqo5CjIuKAiDgQ+EE/YjTrt96GwM3MzMys3J6LiKVp+UlgrKQdgaOAO/7Xx/Cu9P1I4JS0/GPg\nm1XHuiMiNqflE4Apki5N69sDe/cRy3HApwHScf6etl8k6eS0PJpKU/VqnWMcDiyKiFcAJN1OpbHs\njYCvS/owlSmlo4Dd0r6tXp8+jlXto8BhwOL0Oo4ANgC/Bt4v6dvAvcD8ARzTrE9u4MzMzMzy9VbV\n8mYqTcY2wMY0atSXqFr+R9WyqIxWral+sKTDBxKcpGOAScCREfGmpEVUmsH+xlRtE2l2WRph2y5t\nnw7sAhwWEf+RtK7qHLVen36HD/wwIi7faod0MHAicAHwSeCcARzXrFeeQmlmZmbWQSLiNeA5SdOg\n0uykhgPgD8DpaXk68Ps6h5kHXNgzFVHSIWn768BOdZ7zIHB+evwwSe8G3gP8LTVv+wJH9BH+Y8Ax\n6c6bw4FpVfvWURkRA5hKZUon6RwbUvN2LDCmj3P0lUd1PqdK2jXl9L50DeFIYJuIuBP4EpXpomaD\nxg2cmZmZWeeZDpwraRmVa9Gmpu0XAWdLWg6cCVxc5/lXU2mQlktamdYBFgITem5issVzLgaOlbSC\nynTF/YH7gW3T+a4GHu0t6Ih4CfgK8AjwALCkavctwEckPU5lqmXPiOFcoFvSEynvp3s7RzIHuLnn\nJiZ1YnkK+CIwP8W/ANiDyhTNRZKWpuNsNUJn1gxF1BuFNjMzMzNrX5LOArojYmbRsZgNFY/AmZmZ\nmZmZlYRH4MzMzMzMzErCI3BmZmZmZmYl4QbOzMzMzMysJNzAmZmZmZmZlYQbODMzMzMzs5JwA2dm\nZmZmZlYSbuDMzMzMzMxK4r+4mbuoGH9rRQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "transformation.diagnostic_plots(X_train_copy,'Fare_boxcox')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Quantile transformation" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Survived Pclass Sex Age SibSp Fare Fare_qt\n", + "857 1 1 male 51.0 0 26.5500 0.468203\n", + "52 1 1 female 49.0 1 76.7292 1.269664\n", + "386 0 3 male 1.0 5 46.9000 0.840906\n", + "124 0 1 male 54.0 0 77.2875 1.289578\n", + "578 0 3 female NaN 1 14.4583 -0.023839\n", + "549 1 2 male 8.0 1 36.7500 0.744646\n" + ] + } + ], + "source": [ + "from sklearn.preprocessing import QuantileTransformer\n", + "qt = QuantileTransformer(output_distribution='normal').fit(X_train[['Fare']])\n", + "X_train_copy = X_train.copy(deep=True)\n", + "X_train_copy['Fare_qt'] = qt.transform(X_train_copy[['Fare']])\n", + "print(X_train_copy.head(6))" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nVCYMcJIkSZJUJgxwkiRJklQmDHCSJEmSVCYMcJIkSZJUJgxwkiRJklQmDHCSJEmSVCYMcJIkSZJU\nJgxwkiRJklQmDHCSJEmSVCYMcJIkSZJUJgxwkiRJklQmDHCSJEmSVCYMcJIkSZJUJpYa4CJi3Yh4\nKCKej4jnIuLowvbVIuK+iHip8H3VwvaIiN9GxNSIeCYitmjpNyFJkiRJbUExI3DzgCEppW8C2wBH\nRERPYBjwQEppQ+CBwmOAHwEbFr4GAaObvWpJkiRJaoOWGuBSSm+mlJ4s/Pwx8DzQFdgTGFs4bCyw\nV+HnPYHrU+YxoFNErNXslUuSJElSG7NMQw6OiB7A5sC/gS4ppTchC3kR8dXCYV2B12s8bUZh25u1\nzjWIbISOLl26MGHChIZXX0Zmz55d8e+xWHlfiyG95uX22jV1WaF0asn7dzPv34lS4XWQJElLU3SA\ni4iVgD8Bx6SUPoqIxR5az7ZUZ0NKY4AxAL179059+vQptpSyNGHCBCr9PRYr72txyLC7cnvtmob0\nmscFkxv0bygt5rX+fXJ9/bx/J0qF10GSJC1NUV0oI2JZsvBWlVL6c2HzW9VTIwvf3y5snwGsW+Pp\n6wAzm6dcSZLKX0S0j4j/RMSdedciSSovxXShDOBq4PmU0oU1do0HBhZ+HgjcUWP7wYVulNsAH1ZP\ntZQkSQAcTXZPuSRJDVLMCNx3gYOAHSLiqcLXLsAoYMeIeAnYsfAY4G7gFWAqcCUwuPnLliSpPEXE\nOsCuwFV51yJJKj9LvQEnpfQw9d/XBtC3nuMTcEQT65IkqVJdDBwPrJx3IZKk8lPUPXCSJKnpImI3\n4O2U0qSlHDcoIiZGxMR33nmnlaqTJJUDA5wkSa3nu8AeEfEacBPZ7Qnjah+UUhqTUuqdUuq9xhpr\ntHaNkqQSZoCTJKmVpJSGp5TWSSn1AA4AHkwpDci5LElSGTHASZIkSVKZKI1VhCVJamNSShOACTmX\nIUkqM47ASZIkSVKZMMBJkiRJUpkwwEmSJElSmTDASZIkSVKZMMBJkiRJUpkwwEmSJElSmTDASZIk\nSVKZMMBJkiRJUpkwwEmSJElSmTDASZIkSVKZMMBJkiRJUpkwwEmSJElSmTDASZIkSVJjzJ0Ll14K\nt97aai9pgJMkSZKkhkgJbr8dNt4YjjoKxo9vtZc2wEmSJElSsZ54Avr0gb33hmWWgTvvhOuvb7WX\n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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "transformation.diagnostic_plots(X_train_copy,'Fare_qt')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/3.5_Demo_Feature_Generation.ipynb b/3.5_Demo_Feature_Generation.ipynb new file mode 100644 index 0000000..c07adac --- /dev/null +++ b/3.5_Demo_Feature_Generation.ipynb @@ -0,0 +1,522 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "# import seaborn as sns\n", + "# import matplotlib.pyplot as plt\n", + "import os\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.metrics import roc_curve, roc_auc_score\n", + "\n", + "# plt.style.use('seaborn-colorblind')\n", + "# %matplotlib inline\n", + "#from feature_cleaning import rare_values as ra" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "use_cols = [\n", + " 'Pclass', 'Sex', 'Age', 'Fare', 'SibSp',\n", + " 'Survived'\n", + "]\n", + "\n", + "data = pd.read_csv('./data/titanic.csv', usecols=use_cols)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SurvivedPclassSexAgeSibSpFare
003male22.017.2500
111female38.0171.2833
213female26.007.9250
\n", + "
" + ], + "text/plain": [ + " Survived Pclass Sex Age SibSp Fare\n", + "0 0 3 male 22.0 1 7.2500\n", + "1 1 1 female 38.0 1 71.2833\n", + "2 1 3 female 26.0 0 7.9250" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((623, 6), (268, 6))" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Note that we include target variable in the X_train \n", + "# because we need it to supervise our discretization\n", + "# this is not the standard way of using train-test-split\n", + "X_train, X_test, y_train, y_test = train_test_split(data, data.Survived, test_size=0.3,\n", + " random_state=0)\n", + "X_train.shape, X_test.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Polynomial Expansion\n", + "\n", + "generate a new feature set consisting of all polynomial combinations of the features with degree less than or equal to the specified degree" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Pclass SibSp Pclass^2 Pclass SibSp SibSp^2\n", + "0 1.0 0.0 1.0 0.0 0.0\n", + "1 1.0 1.0 1.0 1.0 1.0\n", + "2 3.0 5.0 9.0 15.0 25.0\n", + "3 1.0 0.0 1.0 0.0 0.0\n", + "4 3.0 1.0 9.0 3.0 1.0\n", + "5 2.0 1.0 4.0 2.0 1.0\n" + ] + } + ], + "source": [ + "# create polynomial combinations of feature 'Pclass','SibSp' with degree 2\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "pf = PolynomialFeatures(degree=2,include_bias=False).fit(X_train[['Pclass','SibSp']])\n", + "tmp = pf.transform(X_train[['Pclass','SibSp']])\n", + "X_train_copy = pd.DataFrame(tmp,columns=pf.get_feature_names(['Pclass','SibSp']))\n", + "print(X_train_copy.head(6))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Feature Learning by Trees\n", + "GBDT derived feature + LR" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sample's belonging node of each base tree \n", + "' [[ 7. 7. 6. ... 4. 7. 4.]\n", + " [ 7. 7. 6. ... 14. 7. 7.]\n", + " [11. 11. 11. ... 4. 6. 11.]\n", + " ...\n", + " [10. 10. 10. ... 4. 6. 10.]\n", + " [13. 14. 13. ... 4. 7. 13.]\n", + " [ 7. 7. 6. ... 6. 7. 7.]]\n", + "AUC for GBDT derived feature + LR: 0.7746130952380953\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:368: FutureWarning: The handling of integer data will change in version 0.22. Currently, the categories are determined based on the range [0, max(values)], while in the future they will be determined based on the unique values.\n", + "If you want the future behaviour and silence this warning, you can specify \"categories='auto'\".\n", + "In case you used a LabelEncoder before this OneHotEncoder to convert the categories to integers, then you can now use the OneHotEncoder directly.\n", + " warnings.warn(msg, FutureWarning)\n" + ] + } + ], + "source": [ + "from sklearn.ensemble import GradientBoostingClassifier,RandomForestClassifier\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "\n", + "gbdt = GradientBoostingClassifier(n_estimators=20)\n", + "one_hot = OneHotEncoder()\n", + "\n", + "X_train = X_train[[ 'Pclass', 'Age', 'Fare', 'SibSp']].fillna(0)\n", + "X_test = X_test[[ 'Pclass', 'Age', 'Fare', 'SibSp']].fillna(0)\n", + "\n", + "gbdt.fit(X_train, y_train)\n", + "\n", + "X_leaf_index = gbdt.apply(X_train)[:, :, 0] # apply return the node index on each tree \n", + "print(\"sample's belonging node of each base tree \\n'\",X_leaf_index)\n", + "# fit one-hot encoder\n", + "one_hot.fit(X_leaf_index) \n", + "X_one_hot = one_hot.transform(X_leaf_index) \n", + "\n", + "\n", + "from sklearn.linear_model import LogisticRegression\n", + "lr = LogisticRegression(solver='lbfgs', max_iter=1000)\n", + "lr.fit(X_one_hot,y_train)\n", + "y_pred = lr.predict_proba(\n", + " one_hot.transform(gbdt.apply(X_test)[:, :, 0]))[:,1]\n", + "fpr_grd_lm, tpr_grd_lm, _ = roc_curve(y_test, y_pred)\n", + "print(\"AUC for GBDT derived feature + LR:\", roc_auc_score(y_test, y_pred))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Feature Learning by Trees\n", + "RandomForest derived feature + LR" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sample's belonging node of each base tree \n", + "' [[212 35 79 ... 146 60 46]\n", + " [307 165 266 ... 136 132 44]\n", + " [285 285 320 ... 301 294 300]\n", + " ...\n", + " [ 13 177 133 ... 186 169 117]\n", + " [190 296 311 ... 282 289 297]\n", + " [264 165 243 ... 152 110 314]]\n", + "AUC for RandomForest derived feature + LR: 0.759672619047619\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\_encoders.py:368: FutureWarning: The handling of integer data will change in version 0.22. Currently, the categories are determined based on the range [0, max(values)], while in the future they will be determined based on the unique values.\n", + "If you want the future behaviour and silence this warning, you can specify \"categories='auto'\".\n", + "In case you used a LabelEncoder before this OneHotEncoder to convert the categories to integers, then you can now use the OneHotEncoder directly.\n", + " warnings.warn(msg, FutureWarning)\n" + ] + } + ], + "source": [ + "rf = RandomForestClassifier(n_estimators=20)\n", + "one_hot = OneHotEncoder()\n", + "\n", + "X_train = X_train[[ 'Pclass', 'Age', 'Fare', 'SibSp']].fillna(0)\n", + "X_test = X_test[[ 'Pclass', 'Age', 'Fare', 'SibSp']].fillna(0)\n", + "\n", + "rf.fit(X_train, y_train)\n", + "\n", + "X_leaf_index = rf.apply(X_train) # apply return the node index on each tree \n", + "print(\"sample's belonging node of each base tree \\n'\",X_leaf_index)\n", + "# fit one-hot encoder\n", + "one_hot.fit(X_leaf_index) \n", + "X_one_hot = one_hot.transform(X_leaf_index) \n", + "\n", + "\n", + "lr = LogisticRegression(solver='lbfgs', max_iter=1000)\n", + "lr.fit(X_one_hot,y_train)\n", + "y_pred = lr.predict_proba(\n", + " one_hot.transform(rf.apply(X_test)))[:,1]\n", + "fpr_grd_lm, tpr_grd_lm, _ = roc_curve(y_test, y_pred)\n", + "print(\"AUC for RandomForest derived feature + LR:\", roc_auc_score(y_test, y_pred))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## Feature Learning by Trees\n", + "GBDT derived feature + Raw feature +LR" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "AUC for GBDT derived feature + Raw feature +LR: 0.7603571428571428\n" + ] + } + ], + "source": [ + "from scipy.sparse import hstack\n", + "\n", + "X_train_ext = hstack([one_hot.transform(gbdt.apply(X_train)[:, :, 0]), X_train])\n", + "X_test_ext = hstack([one_hot.transform(gbdt.apply(X_test)[:, :, 0]), X_test])\n", + "lr = LogisticRegression(solver='lbfgs', max_iter=1000)\n", + "lr.fit(X_train_ext,y_train)\n", + "y_pred = lr.predict_proba(X_test_ext)[:,1]\n", + "fpr_grd_lm, tpr_grd_lm, _ = roc_curve(y_test, y_pred)\n", + "print(\"AUC for GBDT derived feature + Raw feature +LR:\", roc_auc_score(y_test, y_pred))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Feature Learning by Trees\n", + "RandomForest derived feature + Raw feature +LR" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "AUC for RandomForest derived feature + Raw feature + LR: 0.76\n" + ] + } + ], + "source": [ + "X_train_ext = hstack([one_hot.transform(rf.apply(X_train)), X_train])\n", + "X_test_ext = hstack([one_hot.transform(rf.apply(X_test)), X_test])\n", + "lr = LogisticRegression(solver='lbfgs', max_iter=1000)\n", + "lr.fit(X_train_ext,y_train)\n", + "y_pred = lr.predict_proba(X_test_ext)[:,1]\n", + "fpr_grd_lm, tpr_grd_lm, _ = roc_curve(y_test, y_pred)\n", + "print(\"AUC for RandomForest derived feature + Raw feature + LR:\", roc_auc_score(y_test, y_pred))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Feature Learning by Trees\n", + "Use only Raw Feature + LR" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "AUC for RandomForest derived feature + LR: 0.6988690476190476\n" + ] + } + ], + "source": [ + "lr = LogisticRegression(solver='lbfgs', max_iter=1000)\n", + "lr.fit(X_train,y_train)\n", + "y_pred = lr.predict_proba(X_test)[:,1]\n", + "fpr_grd_lm, tpr_grd_lm, _ = roc_curve(y_test, y_pred)\n", + "print(\"AUC for RandomForest derived feature + LR:\", roc_auc_score(y_test, y_pred))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Feature Learning by Trees\n", + "\n", + "Use only Raw Feature + GBDT" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "AUC for Raw feature + GBDT: 0.7613988095238096\n" + ] + } + ], + "source": [ + "gbdt = GradientBoostingClassifier(n_estimators=20)\n", + "\n", + "X_train = X_train[[ 'Pclass', 'Age', 'Fare', 'SibSp']].fillna(0)\n", + "X_test = X_test[[ 'Pclass', 'Age', 'Fare', 'SibSp']].fillna(0)\n", + "\n", + "gbdt.fit(X_train, y_train)\n", + "y_pred = gbdt.predict_proba(X_test)[:,1]\n", + "fpr_grd_lm, tpr_grd_lm, _ = roc_curve(y_test, y_pred)\n", + "print(\"AUC for Raw feature + GBDT:\", roc_auc_score(y_test, y_pred))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Feature Learning by Trees\n", + "\n", + "Use only Raw Feature + RF\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "AUC for Raw feature + RF: 0.7235119047619047\n" + ] + } + ], + "source": [ + "rf = RandomForestClassifier(n_estimators=20)\n", + "\n", + "X_train = X_train[[ 'Pclass', 'Age', 'Fare', 'SibSp']].fillna(0)\n", + "X_test = X_test[[ 'Pclass', 'Age', 'Fare', 'SibSp']].fillna(0)\n", + "\n", + "rf.fit(X_train, y_train)\n", + "y_pred = rf.predict_proba(X_test)[:,1]\n", + "fpr_grd_lm, tpr_grd_lm, _ = roc_curve(y_test, y_pred)\n", + "print(\"AUC for Raw feature + RF:\", roc_auc_score(y_test, y_pred))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Without tuning, we can see GBDT derived feature + LR get the best result" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/4.1_Demo_Feature_Selection_Filter.ipynb b/4.1_Demo_Feature_Selection_Filter.ipynb new file mode 100644 index 0000000..43ebccb --- /dev/null +++ b/4.1_Demo_Feature_Selection_Filter.ipynb @@ -0,0 +1,696 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "# import seaborn as sns\n", + "# import matplotlib.pyplot as plt\n", + "import os\n", + "from sklearn.model_selection import train_test_split\n", + "# plt.style.use('seaborn-colorblind')\n", + "# %matplotlib inline\n", + "from feature_selection import filter_method as ft" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sklearn.datasets import load_breast_cancer\n", + "data = load_breast_cancer()\n", + "data = pd.DataFrame(np.c_[data['data'], data['target']],\n", + " columns= np.append(data['feature_names'], ['target']))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mean radiusmean texturemean perimetermean areamean smoothnessmean compactnessmean concavitymean concave pointsmean symmetrymean fractal dimension...worst textureworst perimeterworst areaworst smoothnessworst compactnessworst concavityworst concave pointsworst symmetryworst fractal dimensiontarget
017.9910.38122.801001.00.118400.277600.30010.147100.24190.07871...17.33184.602019.00.16220.66560.71190.26540.46010.118900.0
120.5717.77132.901326.00.084740.078640.08690.070170.18120.05667...23.41158.801956.00.12380.18660.24160.18600.27500.089020.0
219.6921.25130.001203.00.109600.159900.19740.127900.20690.05999...25.53152.501709.00.14440.42450.45040.24300.36130.087580.0
311.4220.3877.58386.10.142500.283900.24140.105200.25970.09744...26.5098.87567.70.20980.86630.68690.25750.66380.173000.0
420.2914.34135.101297.00.100300.132800.19800.104300.18090.05883...16.67152.201575.00.13740.20500.40000.16250.23640.076780.0
\n", + "

5 rows × 31 columns

\n", + "
" + ], + "text/plain": [ + " mean radius mean texture mean perimeter mean area mean smoothness \\\n", + "0 17.99 10.38 122.80 1001.0 0.11840 \n", + "1 20.57 17.77 132.90 1326.0 0.08474 \n", + "2 19.69 21.25 130.00 1203.0 0.10960 \n", + "3 11.42 20.38 77.58 386.1 0.14250 \n", + "4 20.29 14.34 135.10 1297.0 0.10030 \n", + "\n", + " mean compactness mean concavity mean concave points mean symmetry \\\n", + "0 0.27760 0.3001 0.14710 0.2419 \n", + "1 0.07864 0.0869 0.07017 0.1812 \n", + "2 0.15990 0.1974 0.12790 0.2069 \n", + "3 0.28390 0.2414 0.10520 0.2597 \n", + "4 0.13280 0.1980 0.10430 0.1809 \n", + "\n", + " mean fractal dimension ... worst texture worst perimeter worst area \\\n", + "0 0.07871 ... 17.33 184.60 2019.0 \n", + "1 0.05667 ... 23.41 158.80 1956.0 \n", + "2 0.05999 ... 25.53 152.50 1709.0 \n", + "3 0.09744 ... 26.50 98.87 567.7 \n", + "4 0.05883 ... 16.67 152.20 1575.0 \n", + "\n", + " worst smoothness worst compactness worst concavity worst concave points \\\n", + "0 0.1622 0.6656 0.7119 0.2654 \n", + "1 0.1238 0.1866 0.2416 0.1860 \n", + "2 0.1444 0.4245 0.4504 0.2430 \n", + "3 0.2098 0.8663 0.6869 0.2575 \n", + "4 0.1374 0.2050 0.4000 0.1625 \n", + "\n", + " worst symmetry worst fractal dimension target \n", + "0 0.4601 0.11890 0.0 \n", + "1 0.2750 0.08902 0.0 \n", + "2 0.3613 0.08758 0.0 \n", + "3 0.6638 0.17300 0.0 \n", + "4 0.2364 0.07678 0.0 \n", + "\n", + "[5 rows x 31 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((455, 30), (114, 30))" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(data.drop(labels=['target'], axis=1), \n", + " data.target, test_size=0.2,\n", + " random_state=0)\n", + "X_train.shape, X_test.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Variance method\n", + "removing features that show the same value for the majority/all of the observations (constant/quasi-constant features)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 variables are found to be almost constant\n" + ] + } + ], + "source": [ + "# the original dataset has no constant variable\n", + "quasi_constant_feature = ft.constant_feature_detect(data=X_train,threshold=0.9)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.0 0.923077\n", + "0.0 0.068132\n", + "2.0 0.008791\n", + "Name: dummy, dtype: float64" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# lets create a duumy variable that help us do the demonstration\n", + "X_train['dummy'] = np.floor(X_train['worst smoothness']*10)\n", + "# variable dummy has> 92% of the observations show one value, 1.0\n", + "X_train.dummy.value_counts() / np.float(len(X_train))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 variables are found to be almost constant\n" + ] + }, + { + "data": { + "text/plain": [ + "['dummy']" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "quasi_constant_feature = ft.constant_feature_detect(data=X_train,threshold=0.9)\n", + "quasi_constant_feature" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(455, 30)\n" + ] + } + ], + "source": [ + "# drop that variable\n", + "X_train.drop(labels=quasi_constant_feature,axis=1,inplace=True)\n", + "print(X_train.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Correlation method\n", + "remove features that are highly correlated with each other" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " feature1 feature2 corr\n", + "0 mean perimeter mean radius 0.998185\n", + "6 mean perimeter mean area 0.986692\n", + "14 mean perimeter worst perimeter 0.970507\n", + "19 mean perimeter worst radius 0.969520\n", + "33 mean perimeter worst area 0.941920 \n", + "\n", + " feature1 feature2 corr\n", + "12 perimeter error radius error 0.978323\n", + "30 perimeter error area error 0.944995 \n", + "\n", + " feature1 feature2 corr\n", + "36 mean concavity mean concave points 0.914627 \n", + "\n", + " feature1 feature2 corr\n", + "38 mean texture worst texture 0.908182 \n", + "\n", + " feature1 feature2 corr\n", + "40 worst concave points mean concave points 0.906312 \n", + "\n" + ] + } + ], + "source": [ + "corr = ft.corr_feature_detect(data=X_train,threshold=0.9)\n", + "# print all the correlated feature groups!\n", + "for i in corr:\n", + " print(i,'\\n')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "then we can decide which ones to remove." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Mutual Information Filter\n", + "Mutual information measures how much information the presence/absence of a feature contributes to making the correct prediction on Y." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index(['mean concave points', 'worst perimeter', 'worst area'], dtype='object')\n" + ] + } + ], + "source": [ + "# select the top 3 features\n", + "mi = ft.mutual_info(X=X_train,y=y_train,select_k=3)\n", + "print(mi)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index(['mean perimeter', 'mean concave points', 'worst radius',\n", + " 'worst perimeter', 'worst area', 'worst concave points'],\n", + " dtype='object')\n" + ] + } + ], + "source": [ + "# select the top 20% features\n", + "mi = ft.mutual_info(X=X_train,y=y_train,select_k=0.2)\n", + "print(mi)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Chi-Square Filter\n", + "Compute chi-squared stats between each non-negative feature and class" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index(['mean area', 'area error', 'worst area'], dtype='object')\n" + ] + } + ], + "source": [ + "# select the top 3 features\n", + "chi = ft.chi_square_test(X=X_train,y=y_train,select_k=3)\n", + "print(chi)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index(['mean perimeter', 'mean area', 'area error', 'worst radius',\n", + " 'worst perimeter', 'worst area'],\n", + " dtype='object')\n" + ] + } + ], + "source": [ + "# select the top 20% features\n", + "chi = ft.chi_square_test(X=X_train,y=y_train,select_k=0.2)\n", + "print(chi)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Univariate ROC-AUC or MSE\n", + "builds one decision tree per feature, to predict the target, then make predictions and ranks the features according to the machine learning metric (roc-auc or mse)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "worst perimeter 0.917275\n", + "worst area 0.895840\n", + "worst radius 0.893458\n", + "worst concave points 0.863131\n", + "mean concavity 0.856939\n", + "mean radius 0.849000\n", + "mean area 0.839314\n", + "worst concavity 0.831375\n", + "mean perimeter 0.829628\n", + "mean concave points 0.826453\n", + "area error 0.812321\n", + "worst compactness 0.742299\n", + "radius error 0.740235\n", + "mean compactness 0.734360\n", + "perimeter error 0.680534\n", + "worst texture 0.647666\n", + "worst fractal dimension 0.640997\n", + "concavity error 0.640203\n", + "worst symmetry 0.620991\n", + "concave points error 0.618133\n", + "compactness error 0.607336\n", + "mean symmetry 0.591775\n", + "mean texture 0.573357\n", + "texture error 0.568593\n", + "worst smoothness 0.565100\n", + "mean smoothness 0.557637\n", + "fractal dimension error 0.542077\n", + "smoothness error 0.522706\n", + "symmetry error 0.493649\n", + "mean fractal dimension 0.475548\n", + "dtype: float64\n", + "11 out of the 30 featues are kept\n", + "mean radius 0.849000\n", + "mean perimeter 0.829628\n", + "mean area 0.839314\n", + "mean concavity 0.856939\n", + "mean concave points 0.826453\n", + "area error 0.812321\n", + "worst radius 0.893458\n", + "worst perimeter 0.917275\n", + "worst area 0.895840\n", + "worst concavity 0.831375\n", + "worst concave points 0.863131\n", + "dtype: float64\n" + ] + } + ], + "source": [ + "uni_roc_auc = ft.univariate_roc_auc(X_train=X_train,y_train=y_train,\n", + " X_test=X_test,y_test=y_test,threshold=0.8)\n", + "print(uni_roc_auc)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mean fractal dimension 0.491228\n", + "symmetry error 0.480750\n", + "fractal dimension error 0.456140\n", + "smoothness error 0.449561\n", + "texture error 0.412281\n", + "worst smoothness 0.403265\n", + "mean smoothness 0.399123\n", + "mean texture 0.396930\n", + "mean symmetry 0.363060\n", + "compactness error 0.361842\n", + "concave points error 0.357456\n", + "worst fractal dimension 0.355263\n", + "worst symmetry 0.350877\n", + "worst texture 0.333333\n", + "concavity error 0.333333\n", + "perimeter error 0.300439\n", + "mean compactness 0.258772\n", + "worst compactness 0.254386\n", + "radius error 0.245614\n", + "area error 0.179825\n", + "mean perimeter 0.166667\n", + "mean concave points 0.166667\n", + "worst concavity 0.162281\n", + "mean radius 0.146930\n", + "mean concavity 0.142544\n", + "mean area 0.140351\n", + "worst concave points 0.123782\n", + "worst area 0.103070\n", + "worst radius 0.100877\n", + "worst perimeter 0.098684\n", + "dtype: float64\n", + "6 out of the 30 featues are kept\n", + "mean fractal dimension 0.491228\n", + "texture error 0.412281\n", + "smoothness error 0.449561\n", + "symmetry error 0.480750\n", + "fractal dimension error 0.456140\n", + "worst smoothness 0.403265\n", + "dtype: float64\n" + ] + } + ], + "source": [ + "uni_mse = ft.univariate_mse(X_train=X_train,y_train=y_train,\n", + " X_test=X_test,y_test=y_test,threshold=0.4)\n", + "print(uni_mse)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/4.2_Demo_Feature_Selection_Wrapper.ipynb b/4.2_Demo_Feature_Selection_Wrapper.ipynb new file mode 100644 index 0000000..b02b386 --- /dev/null +++ b/4.2_Demo_Feature_Selection_Wrapper.ipynb @@ -0,0 +1,548 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "# import seaborn as sns\n", + "# import matplotlib.pyplot as plt\n", + "import os\n", + "from sklearn.model_selection import train_test_split\n", + "from mlxtend.feature_selection import SequentialFeatureSelector as SFS\n", + "from mlxtend.feature_selection import ExhaustiveFeatureSelector as EFS\n", + "from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier\n", + "\n", + "# plt.style.use('seaborn-colorblind')\n", + "# %matplotlib inline\n", + "# from feature_selection import filter_method as ft" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sklearn.datasets import load_breast_cancer\n", + "data = load_breast_cancer()\n", + "data = pd.DataFrame(np.c_[data['data'], data['target']],\n", + " columns= np.append(data['feature_names'], ['target']))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mean radiusmean texturemean perimetermean areamean smoothnessmean compactnessmean concavitymean concave pointsmean symmetrymean fractal dimension...worst textureworst perimeterworst areaworst smoothnessworst compactnessworst concavityworst concave pointsworst symmetryworst fractal dimensiontarget
017.9910.38122.801001.00.118400.277600.30010.147100.24190.07871...17.33184.602019.00.16220.66560.71190.26540.46010.118900.0
120.5717.77132.901326.00.084740.078640.08690.070170.18120.05667...23.41158.801956.00.12380.18660.24160.18600.27500.089020.0
219.6921.25130.001203.00.109600.159900.19740.127900.20690.05999...25.53152.501709.00.14440.42450.45040.24300.36130.087580.0
311.4220.3877.58386.10.142500.283900.24140.105200.25970.09744...26.5098.87567.70.20980.86630.68690.25750.66380.173000.0
420.2914.34135.101297.00.100300.132800.19800.104300.18090.05883...16.67152.201575.00.13740.20500.40000.16250.23640.076780.0
\n", + "

5 rows × 31 columns

\n", + "
" + ], + "text/plain": [ + " mean radius mean texture mean perimeter mean area mean smoothness \\\n", + "0 17.99 10.38 122.80 1001.0 0.11840 \n", + "1 20.57 17.77 132.90 1326.0 0.08474 \n", + "2 19.69 21.25 130.00 1203.0 0.10960 \n", + "3 11.42 20.38 77.58 386.1 0.14250 \n", + "4 20.29 14.34 135.10 1297.0 0.10030 \n", + "\n", + " mean compactness mean concavity mean concave points mean symmetry \\\n", + "0 0.27760 0.3001 0.14710 0.2419 \n", + "1 0.07864 0.0869 0.07017 0.1812 \n", + "2 0.15990 0.1974 0.12790 0.2069 \n", + "3 0.28390 0.2414 0.10520 0.2597 \n", + "4 0.13280 0.1980 0.10430 0.1809 \n", + "\n", + " mean fractal dimension ... worst texture worst perimeter worst area \\\n", + "0 0.07871 ... 17.33 184.60 2019.0 \n", + "1 0.05667 ... 23.41 158.80 1956.0 \n", + "2 0.05999 ... 25.53 152.50 1709.0 \n", + "3 0.09744 ... 26.50 98.87 567.7 \n", + "4 0.05883 ... 16.67 152.20 1575.0 \n", + "\n", + " worst smoothness worst compactness worst concavity worst concave points \\\n", + "0 0.1622 0.6656 0.7119 0.2654 \n", + "1 0.1238 0.1866 0.2416 0.1860 \n", + "2 0.1444 0.4245 0.4504 0.2430 \n", + "3 0.2098 0.8663 0.6869 0.2575 \n", + "4 0.1374 0.2050 0.4000 0.1625 \n", + "\n", + " worst symmetry worst fractal dimension target \n", + "0 0.4601 0.11890 0.0 \n", + "1 0.2750 0.08902 0.0 \n", + "2 0.3613 0.08758 0.0 \n", + "3 0.6638 0.17300 0.0 \n", + "4 0.2364 0.07678 0.0 \n", + "\n", + "[5 rows x 31 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((455, 30), (114, 30))" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(data.drop(labels=['target'], axis=1), \n", + " data.target, test_size=0.2,\n", + " random_state=0)\n", + "X_train.shape, X_test.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Forward Selection\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 30 out of 30 | elapsed: 11.4s finished\n", + "Features: 1/10[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 29 out of 29 | elapsed: 11.2s finished\n", + "Features: 2/10[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 28 out of 28 | elapsed: 10.7s finished\n", + "Features: 3/10[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 27 out of 27 | elapsed: 10.3s finished\n", + "Features: 4/10[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 26 out of 26 | elapsed: 10.0s finished\n", + "Features: 5/10[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 25 out of 25 | elapsed: 9.6s finished\n", + "Features: 6/10[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 24 out of 24 | elapsed: 9.2s finished\n", + "Features: 7/10[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 23 out of 23 | elapsed: 8.8s finished\n", + "Features: 8/10[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 22 out of 22 | elapsed: 8.4s finished\n", + "Features: 9/10[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 21 out of 21 | elapsed: 8.1s finished\n", + "Features: 10/10" + ] + } + ], + "source": [ + "# step forward feature selection\n", + "# select top 10 features based on the optimal roc_auc and RandomForest Classifier\n", + "\n", + "sfs1 = SFS(RandomForestClassifier(n_jobs=-1,n_estimators=5), \n", + " k_features=10, \n", + " forward=True, \n", + " floating=False, \n", + " verbose=1,\n", + " scoring='roc_auc',\n", + " cv=3)\n", + "\n", + "sfs1 = sfs1.fit(np.array(X_train), y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['mean texture', 'mean perimeter', 'mean concavity',\n", + " 'mean fractal dimension', 'area error', 'compactness error',\n", + " 'worst perimeter', 'worst area', 'worst smoothness', 'worst symmetry'],\n", + " dtype='object')" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "selected_feat1= X_train.columns[list(sfs1.k_feature_idx_)]\n", + "selected_feat1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Backward Elimination" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 30 out of 30 | elapsed: 11.5s finished\n", + "Features: 1/10[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 29 out of 29 | elapsed: 11.2s finished\n", + "Features: 2/10[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 28 out of 28 | elapsed: 10.7s finished\n", + "Features: 3/10[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 27 out of 27 | elapsed: 10.2s finished\n", + "Features: 4/10[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 26 out of 26 | elapsed: 10.1s finished\n", + "Features: 5/10[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 25 out of 25 | elapsed: 9.6s finished\n", + "Features: 6/10[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 24 out of 24 | elapsed: 9.2s finished\n", + "Features: 7/10[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 23 out of 23 | elapsed: 8.8s finished\n", + "Features: 8/10[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 22 out of 22 | elapsed: 8.5s finished\n", + "Features: 9/10[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n", + "[Parallel(n_jobs=1)]: Done 21 out of 21 | elapsed: 8.2s finished\n", + "Features: 10/10" + ] + } + ], + "source": [ + "# step backward feature selection\n", + "# select top 10 features based on the optimal roc_auc and RandomForest Classifier\n", + "\n", + "sfs2 = SFS(RandomForestClassifier(n_jobs=-1,n_estimators=5), \n", + " k_features=10, \n", + " forward=False, \n", + " floating=False, \n", + " verbose=1,\n", + " scoring='roc_auc',\n", + " cv=3)\n", + "\n", + "sfs2 = sfs1.fit(np.array(X_train.fillna(0)), y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['mean area', 'mean compactness', 'texture error', 'area error',\n", + " 'compactness error', 'concavity error', 'worst texture',\n", + " 'worst perimeter', 'worst smoothness', 'worst concavity'],\n", + " dtype='object')" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "selected_feat2= X_train.columns[list(sfs2.k_feature_idx_)]\n", + "selected_feat2\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that SFS and SBE return different results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exhaustive Feature Selection" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Features: 847/847" + ] + } + ], + "source": [ + "efs1 = EFS(RandomForestClassifier(n_jobs=-1,n_estimators=5, random_state=0), \n", + " min_features=1,\n", + " max_features=6, \n", + " scoring='roc_auc',\n", + " print_progress=True,\n", + " cv=2)\n", + "\n", + "# in order to shorter search time for the demonstration\n", + "# we only try all possible 1,2,3,4,5,6\n", + "# feature combinations from a dataset of 10 features\n", + "\n", + "efs1 = efs1.fit(np.array(X_train[X_train.columns[0:10]].fillna(0)), y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['mean radius', 'mean texture', 'mean area', 'mean smoothness',\n", + " 'mean concavity'],\n", + " dtype='object')" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "selected_feat3= X_train.columns[list(efs1.best_idx_)]\n", + "selected_feat3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/4.3_Demo_Feature_Selection_Embedded.ipynb b/4.3_Demo_Feature_Selection_Embedded.ipynb new file mode 100644 index 0000000..db49478 --- /dev/null +++ b/4.3_Demo_Feature_Selection_Embedded.ipynb @@ -0,0 +1,679 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "# import seaborn as sns\n", + "# import matplotlib.pyplot as plt\n", + "import os\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.linear_model import Lasso, LogisticRegression\n", + "from sklearn.preprocessing import RobustScaler\n", + "from sklearn.feature_selection import SelectFromModel\n", + "from feature_selection import embedded_method\n", + "# plt.style.use('seaborn-colorblind')\n", + "# %matplotlib inline\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sklearn.datasets import load_breast_cancer\n", + "data = load_breast_cancer()\n", + "data = pd.DataFrame(np.c_[data['data'], data['target']],\n", + " columns= np.append(data['feature_names'], ['target']))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mean radiusmean texturemean perimetermean areamean smoothnessmean compactnessmean concavitymean concave pointsmean symmetrymean fractal dimension...worst textureworst perimeterworst areaworst smoothnessworst compactnessworst concavityworst concave pointsworst symmetryworst fractal dimensiontarget
017.9910.38122.801001.00.118400.277600.30010.147100.24190.07871...17.33184.602019.00.16220.66560.71190.26540.46010.118900.0
120.5717.77132.901326.00.084740.078640.08690.070170.18120.05667...23.41158.801956.00.12380.18660.24160.18600.27500.089020.0
219.6921.25130.001203.00.109600.159900.19740.127900.20690.05999...25.53152.501709.00.14440.42450.45040.24300.36130.087580.0
311.4220.3877.58386.10.142500.283900.24140.105200.25970.09744...26.5098.87567.70.20980.86630.68690.25750.66380.173000.0
420.2914.34135.101297.00.100300.132800.19800.104300.18090.05883...16.67152.201575.00.13740.20500.40000.16250.23640.076780.0
\n", + "

5 rows × 31 columns

\n", + "
" + ], + "text/plain": [ + " mean radius mean texture mean perimeter mean area mean smoothness \\\n", + "0 17.99 10.38 122.80 1001.0 0.11840 \n", + "1 20.57 17.77 132.90 1326.0 0.08474 \n", + "2 19.69 21.25 130.00 1203.0 0.10960 \n", + "3 11.42 20.38 77.58 386.1 0.14250 \n", + "4 20.29 14.34 135.10 1297.0 0.10030 \n", + "\n", + " mean compactness mean concavity mean concave points mean symmetry \\\n", + "0 0.27760 0.3001 0.14710 0.2419 \n", + "1 0.07864 0.0869 0.07017 0.1812 \n", + "2 0.15990 0.1974 0.12790 0.2069 \n", + "3 0.28390 0.2414 0.10520 0.2597 \n", + "4 0.13280 0.1980 0.10430 0.1809 \n", + "\n", + " mean fractal dimension ... worst texture worst perimeter worst area \\\n", + "0 0.07871 ... 17.33 184.60 2019.0 \n", + "1 0.05667 ... 23.41 158.80 1956.0 \n", + "2 0.05999 ... 25.53 152.50 1709.0 \n", + "3 0.09744 ... 26.50 98.87 567.7 \n", + "4 0.05883 ... 16.67 152.20 1575.0 \n", + "\n", + " worst smoothness worst compactness worst concavity worst concave points \\\n", + "0 0.1622 0.6656 0.7119 0.2654 \n", + "1 0.1238 0.1866 0.2416 0.1860 \n", + "2 0.1444 0.4245 0.4504 0.2430 \n", + "3 0.2098 0.8663 0.6869 0.2575 \n", + "4 0.1374 0.2050 0.4000 0.1625 \n", + "\n", + " worst symmetry worst fractal dimension target \n", + "0 0.4601 0.11890 0.0 \n", + "1 0.2750 0.08902 0.0 \n", + "2 0.3613 0.08758 0.0 \n", + "3 0.6638 0.17300 0.0 \n", + "4 0.2364 0.07678 0.0 \n", + "\n", + "[5 rows x 31 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((455, 30), (114, 30))" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(data.drop(labels=['target'], axis=1), \n", + " data.target, test_size=0.2,\n", + " random_state=0)\n", + "X_train.shape, X_test.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lasso\n", + "Regularization with Lasso.Lasso (L1) has the property that is able to shrink some of the coefficients to zero. Therefore, that feature can be removed from the model" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "RobustScaler(copy=True, quantile_range=(25.0, 75.0), with_centering=True,\n", + " with_scaling=True)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# linear models benefit from feature scaling\n", + "\n", + "scaler = RobustScaler()\n", + "scaler.fit(X_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n", + " FutureWarning)\n" + ] + }, + { + "data": { + "text/plain": [ + "SelectFromModel(estimator=LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", + " intercept_scaling=1, max_iter=100, multi_class='warn',\n", + " n_jobs=None, penalty='l1', random_state=None, solver='warn',\n", + " tol=0.0001, verbose=0, warm_start=False),\n", + " max_features=None, norm_order=1, prefit=False, threshold=None)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# fit the LR model\n", + "sel_ = SelectFromModel(LogisticRegression(C=1, penalty='l1'))\n", + "sel_.fit(scaler.transform(X_train), y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "total features: 30\n", + "selected features: 14\n", + "features with coefficients shrank to zero: 16\n" + ] + } + ], + "source": [ + "# make a list with the selected features\n", + "selected_feat = X_train.columns[(sel_.get_support())]\n", + "\n", + "print('total features: {}'.format((X_train.shape[1])))\n", + "print('selected features: {}'.format(len(selected_feat)))\n", + "print('features with coefficients shrank to zero: {}'.format(\n", + " np.sum(sel_.estimator_.coef_ == 0)))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['mean radius', 'mean perimeter', 'mean area', 'mean smoothness',\n", + " 'mean compactness', 'mean concavity', 'mean fractal dimension',\n", + " 'texture error', 'perimeter error', 'smoothness error',\n", + " 'concavity error', 'concave points error', 'symmetry error',\n", + " 'worst radius', 'worst perimeter', 'worst compactness'],\n", + " dtype='object')" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# we can identify the removed features like this:\n", + "removed_feats = X_train.columns[(sel_.estimator_.coef_ == 0).ravel().tolist()]\n", + "removed_feats" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((455, 14), (114, 14))" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# remove the features from the training and testing set\n", + "\n", + "X_train_selected = sel_.transform(X_train.fillna(0))\n", + "X_test_selected = sel_.transform(X_test.fillna(0))\n", + "\n", + "X_train_selected.shape, X_test_selected.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Random Forest Importance\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Feature ranking:\n", + "1. feature no:27 feature name:worst concave points (0.206316)\n", + "2. feature no:22 feature name:worst perimeter (0.147163)\n", + "3. feature no:7 feature name:mean concave points (0.100672)\n", + "4. feature no:20 feature name:worst radius (0.082449)\n", + "5. feature no:6 feature name:mean concavity (0.060420)\n", + "6. feature no:2 feature name:mean perimeter (0.048284)\n", + "7. feature no:23 feature name:worst area (0.046151)\n", + "8. feature no:3 feature name:mean area (0.038594)\n", + "9. feature no:13 feature name:area error (0.035627)\n", + "10. feature no:0 feature name:mean radius (0.030476)\n", + "11. feature no:10 feature name:radius error (0.028711)\n", + "12. feature no:26 feature name:worst concavity (0.028533)\n", + "13. feature no:12 feature name:perimeter error (0.019986)\n", + "14. feature no:21 feature name:worst texture (0.018623)\n", + "15. feature no:1 feature name:mean texture (0.013840)\n", + "16. feature no:25 feature name:worst compactness (0.013195)\n", + "17. feature no:29 feature name:worst fractal dimension (0.011840)\n", + "18. feature no:24 feature name:worst smoothness (0.008988)\n", + "19. feature no:28 feature name:worst symmetry (0.008973)\n", + "20. feature no:18 feature name:symmetry error (0.007378)\n", + "21. feature no:11 feature name:texture error (0.006736)\n", + "22. feature no:15 feature name:compactness error (0.005464)\n", + "23. feature no:19 feature name:fractal dimension error (0.005117)\n", + "24. feature no:16 feature name:concavity error (0.004957)\n", + "25. feature no:8 feature name:mean symmetry (0.004660)\n", + "26. feature no:4 feature name:mean smoothness (0.004614)\n", + "27. feature no:9 feature name:mean fractal dimension (0.003689)\n", + "28. feature no:17 feature name:concave points error (0.002993)\n", + "29. feature no:5 feature name:mean compactness (0.002844)\n", + "30. feature no:14 feature name:smoothness error (0.002706)\n" + ] + }, + { + "data": { + "image/png": "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\nQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "model = embedded_method.rf_importance(X_train=X_train,y_train=y_train,\n", + " max_depth=10,top_n=10)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['mean concavity', 'mean concave points', 'worst radius',\n", + " 'worst perimeter', 'worst concave points'],\n", + " dtype='object')" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# select features whose importance > threshold\n", + "from sklearn.feature_selection import SelectFromModel\n", + "\n", + "# only 5 features have importance > 0.05\n", + "feature_selection = SelectFromModel(model, threshold=0.05,prefit=True) \n", + "selected_feat = X_train.columns[(feature_selection.get_support())]\n", + "selected_feat" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['mean radius', 'mean perimeter', 'mean area', 'mean concavity',\n", + " 'mean concave points', 'radius error', 'area error', 'worst radius',\n", + " 'worst perimeter', 'worst area', 'worst concavity',\n", + " 'worst concave points'],\n", + " dtype='object')" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# only 12 features have importance > 2 times median\n", + "feature_selection2 = SelectFromModel(model, threshold='2*median',prefit=True) \n", + "selected_feat2 = X_train.columns[(feature_selection2.get_support())]\n", + "selected_feat2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Gradient Boosted Trees Importance" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Feature ranking:\n", + "1. feature no:27 feature name:worst concave points (0.694636)\n", + "2. feature no:23 feature name:worst area (0.131077)\n", + "3. feature no:4 feature name:mean smoothness (0.033800)\n", + "4. feature no:8 feature name:mean symmetry (0.018609)\n", + "5. feature no:22 feature name:worst perimeter (0.015998)\n", + "6. feature no:21 feature name:worst texture (0.013732)\n", + "7. feature no:2 feature name:mean perimeter (0.010792)\n", + "8. feature no:26 feature name:worst concavity (0.010138)\n", + "9. feature no:17 feature name:concave points error (0.008941)\n", + "10. feature no:13 feature name:area error (0.008934)\n", + "11. feature no:0 feature name:mean radius (0.007928)\n", + "12. feature no:12 feature name:perimeter error (0.006268)\n", + "13. feature no:18 feature name:symmetry error (0.005472)\n", + "14. feature no:3 feature name:mean area (0.005069)\n", + "15. feature no:1 feature name:mean texture (0.005034)\n", + "16. feature no:10 feature name:radius error (0.004299)\n", + "17. feature no:16 feature name:concavity error (0.003595)\n", + "18. feature no:6 feature name:mean concavity (0.003354)\n", + "19. feature no:19 feature name:fractal dimension error (0.003092)\n", + "20. feature no:14 feature name:smoothness error (0.002149)\n", + "21. feature no:29 feature name:worst fractal dimension (0.001952)\n", + "22. feature no:25 feature name:worst compactness (0.001149)\n", + "23. feature no:9 feature name:mean fractal dimension (0.000942)\n", + "24. feature no:11 feature name:texture error (0.000917)\n", + "25. feature no:15 feature name:compactness error (0.000671)\n", + "26. feature no:5 feature name:mean compactness (0.000636)\n", + "27. feature no:20 feature name:worst radius (0.000354)\n", + "28. feature no:24 feature name:worst smoothness (0.000305)\n", + "29. feature no:28 feature name:worst symmetry (0.000145)\n", + "30. feature no:7 feature name:mean concave points (0.000013)\n" + ] + }, + { + "data": { + "image/png": "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\ncDczS9D/A7FX/jyOxZ4EAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "model = embedded_method.gbt_importance(X_train=X_train,y_train=y_train,\n", + " max_depth=10,top_n=10)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['mean perimeter', 'mean smoothness', 'mean symmetry', 'worst texture',\n", + " 'worst perimeter', 'worst area', 'worst concavity',\n", + " 'worst concave points'],\n", + " dtype='object')" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# select features whose importance > threshold\n", + "\n", + "# only 8 features have importance > 0.01\n", + "feature_selection = SelectFromModel(model, threshold=0.01,prefit=True) \n", + "selected_feat = X_train.columns[(feature_selection.get_support())]\n", + "selected_feat" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/4.4_Demo_Feature_Selection_Feature_Shuffling.ipynb b/4.4_Demo_Feature_Selection_Feature_Shuffling.ipynb new file mode 100644 index 0000000..dd58566 --- /dev/null +++ b/4.4_Demo_Feature_Selection_Feature_Shuffling.ipynb @@ -0,0 +1,595 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "# import seaborn as sns\n", + "# import matplotlib.pyplot as plt\n", + "import os\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.feature_selection import SelectFromModel\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "# plt.style.use('seaborn-colorblind')\n", + "# %matplotlib inline\n", + "from feature_selection import feature_shuffle\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sklearn.datasets import load_breast_cancer\n", + "data = load_breast_cancer()\n", + "data = pd.DataFrame(np.c_[data['data'], data['target']],\n", + " columns= np.append(data['feature_names'], ['target']))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mean radiusmean texturemean perimetermean areamean smoothnessmean compactnessmean concavitymean concave pointsmean symmetrymean fractal dimension...worst textureworst perimeterworst areaworst smoothnessworst compactnessworst concavityworst concave pointsworst symmetryworst fractal dimensiontarget
017.9910.38122.801001.00.118400.277600.30010.147100.24190.07871...17.33184.602019.00.16220.66560.71190.26540.46010.118900.0
120.5717.77132.901326.00.084740.078640.08690.070170.18120.05667...23.41158.801956.00.12380.18660.24160.18600.27500.089020.0
219.6921.25130.001203.00.109600.159900.19740.127900.20690.05999...25.53152.501709.00.14440.42450.45040.24300.36130.087580.0
311.4220.3877.58386.10.142500.283900.24140.105200.25970.09744...26.5098.87567.70.20980.86630.68690.25750.66380.173000.0
420.2914.34135.101297.00.100300.132800.19800.104300.18090.05883...16.67152.201575.00.13740.20500.40000.16250.23640.076780.0
\n", + "

5 rows × 31 columns

\n", + "
" + ], + "text/plain": [ + " mean radius mean texture mean perimeter mean area mean smoothness \\\n", + "0 17.99 10.38 122.80 1001.0 0.11840 \n", + "1 20.57 17.77 132.90 1326.0 0.08474 \n", + "2 19.69 21.25 130.00 1203.0 0.10960 \n", + "3 11.42 20.38 77.58 386.1 0.14250 \n", + "4 20.29 14.34 135.10 1297.0 0.10030 \n", + "\n", + " mean compactness mean concavity mean concave points mean symmetry \\\n", + "0 0.27760 0.3001 0.14710 0.2419 \n", + "1 0.07864 0.0869 0.07017 0.1812 \n", + "2 0.15990 0.1974 0.12790 0.2069 \n", + "3 0.28390 0.2414 0.10520 0.2597 \n", + "4 0.13280 0.1980 0.10430 0.1809 \n", + "\n", + " mean fractal dimension ... worst texture worst perimeter worst area \\\n", + "0 0.07871 ... 17.33 184.60 2019.0 \n", + "1 0.05667 ... 23.41 158.80 1956.0 \n", + "2 0.05999 ... 25.53 152.50 1709.0 \n", + "3 0.09744 ... 26.50 98.87 567.7 \n", + "4 0.05883 ... 16.67 152.20 1575.0 \n", + "\n", + " worst smoothness worst compactness worst concavity worst concave points \\\n", + "0 0.1622 0.6656 0.7119 0.2654 \n", + "1 0.1238 0.1866 0.2416 0.1860 \n", + "2 0.1444 0.4245 0.4504 0.2430 \n", + "3 0.2098 0.8663 0.6869 0.2575 \n", + "4 0.1374 0.2050 0.4000 0.1625 \n", + "\n", + " worst symmetry worst fractal dimension target \n", + "0 0.4601 0.11890 0.0 \n", + "1 0.2750 0.08902 0.0 \n", + "2 0.3613 0.08758 0.0 \n", + "3 0.6638 0.17300 0.0 \n", + "4 0.2364 0.07678 0.0 \n", + "\n", + "[5 rows x 31 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((455, 30), (114, 30))" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(data.drop(labels=['target'], axis=1), \n", + " data.target, test_size=0.2,\n", + " random_state=0)\n", + "X_train.shape, X_test.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Feature Shuffling\n", + "permute the values of each feature, one at the time, and measure how much the permutation decreases the accuracy, or the roc_auc, or the mse of the machine learning model.\n", + "If the variables are important, this is, highly predictive, a random permutation of their values will decrease dramatically any of these metrics." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "auc_drop, selected_features = feature_shuffle.feature_shuffle_rf(X_train=X_train,\n", + " y_train=y_train,\n", + " random_state=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
featureauc_drop
22worst perimeter8.359457e-05
27worst concave points3.134796e-05
23worst area1.110223e-16
12perimeter error1.110223e-16
0mean radius0.000000e+00
16concavity error0.000000e+00
28worst symmetry0.000000e+00
26worst concavity0.000000e+00
25worst compactness0.000000e+00
24worst smoothness0.000000e+00
21worst texture0.000000e+00
20worst radius0.000000e+00
19fractal dimension error0.000000e+00
18symmetry error0.000000e+00
17concave points error0.000000e+00
15compactness error0.000000e+00
1mean texture0.000000e+00
14smoothness error0.000000e+00
13area error0.000000e+00
11texture error0.000000e+00
10radius error0.000000e+00
9mean fractal dimension0.000000e+00
8mean symmetry0.000000e+00
7mean concave points0.000000e+00
6mean concavity0.000000e+00
5mean compactness0.000000e+00
4mean smoothness0.000000e+00
3mean area0.000000e+00
2mean perimeter0.000000e+00
29worst fractal dimension0.000000e+00
\n", + "
" + ], + "text/plain": [ + " feature auc_drop\n", + "22 worst perimeter 8.359457e-05\n", + "27 worst concave points 3.134796e-05\n", + "23 worst area 1.110223e-16\n", + "12 perimeter error 1.110223e-16\n", + "0 mean radius 0.000000e+00\n", + "16 concavity error 0.000000e+00\n", + "28 worst symmetry 0.000000e+00\n", + "26 worst concavity 0.000000e+00\n", + "25 worst compactness 0.000000e+00\n", + "24 worst smoothness 0.000000e+00\n", + "21 worst texture 0.000000e+00\n", + "20 worst radius 0.000000e+00\n", + "19 fractal dimension error 0.000000e+00\n", + "18 symmetry error 0.000000e+00\n", + "17 concave points error 0.000000e+00\n", + "15 compactness error 0.000000e+00\n", + "1 mean texture 0.000000e+00\n", + "14 smoothness error 0.000000e+00\n", + "13 area error 0.000000e+00\n", + "11 texture error 0.000000e+00\n", + "10 radius error 0.000000e+00\n", + "9 mean fractal dimension 0.000000e+00\n", + "8 mean symmetry 0.000000e+00\n", + "7 mean concave points 0.000000e+00\n", + "6 mean concavity 0.000000e+00\n", + "5 mean compactness 0.000000e+00\n", + "4 mean smoothness 0.000000e+00\n", + "3 mean area 0.000000e+00\n", + "2 mean perimeter 0.000000e+00\n", + "29 worst fractal dimension 0.000000e+00" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# we select features that have auc_drop > 0\n", + "auc_drop" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "22 worst perimeter\n", + "27 worst concave points\n", + "23 worst area\n", + "12 perimeter error\n", + "Name: feature, dtype: object" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "selected_features" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/4.5_Demo_Feature_Selection_Hybrid_method.ipynb b/4.5_Demo_Feature_Selection_Hybrid_method.ipynb new file mode 100644 index 0000000..59717fa --- /dev/null +++ b/4.5_Demo_Feature_Selection_Hybrid_method.ipynb @@ -0,0 +1,884 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "# import seaborn as sns\n", + "# import matplotlib.pyplot as plt\n", + "import os\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.feature_selection import SelectFromModel\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "# plt.style.use('seaborn-colorblind')\n", + "# %matplotlib inline\n", + "from sklearn.feature_selection import RFE\n", + "from feature_selection import hybrid\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sklearn.datasets import load_breast_cancer\n", + "data = load_breast_cancer()\n", + "data = pd.DataFrame(np.c_[data['data'], data['target']],\n", + " columns= np.append(data['feature_names'], ['target']))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mean radiusmean texturemean perimetermean areamean smoothnessmean compactnessmean concavitymean concave pointsmean symmetrymean fractal dimension...worst textureworst perimeterworst areaworst smoothnessworst compactnessworst concavityworst concave pointsworst symmetryworst fractal dimensiontarget
017.9910.38122.801001.00.118400.277600.30010.147100.24190.07871...17.33184.602019.00.16220.66560.71190.26540.46010.118900.0
120.5717.77132.901326.00.084740.078640.08690.070170.18120.05667...23.41158.801956.00.12380.18660.24160.18600.27500.089020.0
219.6921.25130.001203.00.109600.159900.19740.127900.20690.05999...25.53152.501709.00.14440.42450.45040.24300.36130.087580.0
311.4220.3877.58386.10.142500.283900.24140.105200.25970.09744...26.5098.87567.70.20980.86630.68690.25750.66380.173000.0
420.2914.34135.101297.00.100300.132800.19800.104300.18090.05883...16.67152.201575.00.13740.20500.40000.16250.23640.076780.0
\n", + "

5 rows × 31 columns

\n", + "
" + ], + "text/plain": [ + " mean radius mean texture mean perimeter mean area mean smoothness \\\n", + "0 17.99 10.38 122.80 1001.0 0.11840 \n", + "1 20.57 17.77 132.90 1326.0 0.08474 \n", + "2 19.69 21.25 130.00 1203.0 0.10960 \n", + "3 11.42 20.38 77.58 386.1 0.14250 \n", + "4 20.29 14.34 135.10 1297.0 0.10030 \n", + "\n", + " mean compactness mean concavity mean concave points mean symmetry \\\n", + "0 0.27760 0.3001 0.14710 0.2419 \n", + "1 0.07864 0.0869 0.07017 0.1812 \n", + "2 0.15990 0.1974 0.12790 0.2069 \n", + "3 0.28390 0.2414 0.10520 0.2597 \n", + "4 0.13280 0.1980 0.10430 0.1809 \n", + "\n", + " mean fractal dimension ... worst texture worst perimeter worst area \\\n", + "0 0.07871 ... 17.33 184.60 2019.0 \n", + "1 0.05667 ... 23.41 158.80 1956.0 \n", + "2 0.05999 ... 25.53 152.50 1709.0 \n", + "3 0.09744 ... 26.50 98.87 567.7 \n", + "4 0.05883 ... 16.67 152.20 1575.0 \n", + "\n", + " worst smoothness worst compactness worst concavity worst concave points \\\n", + "0 0.1622 0.6656 0.7119 0.2654 \n", + "1 0.1238 0.1866 0.2416 0.1860 \n", + "2 0.1444 0.4245 0.4504 0.2430 \n", + "3 0.2098 0.8663 0.6869 0.2575 \n", + "4 0.1374 0.2050 0.4000 0.1625 \n", + "\n", + " worst symmetry worst fractal dimension target \n", + "0 0.4601 0.11890 0.0 \n", + "1 0.2750 0.08902 0.0 \n", + "2 0.3613 0.08758 0.0 \n", + "3 0.6638 0.17300 0.0 \n", + "4 0.2364 0.07678 0.0 \n", + "\n", + "[5 rows x 31 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((455, 30), (114, 30))" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(data.drop(labels=['target'], axis=1), \n", + " data.target, test_size=0.2,\n", + " random_state=0)\n", + "X_train.shape, X_test.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Recursive Feature Elimination \n", + "### with Random Forests Importance\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example 1\n", + "This method is slightly **different from the guide**, as it use a different stopping criterion: the desired number of features to select is eventually reached." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "RFE(estimator=RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n", + " max_depth=None, max_features='auto', max_leaf_nodes=None,\n", + " min_impurity_decrease=0.0, min_impurity_split=None,\n", + " min_samples_leaf=1, min_samples_split=2,\n", + " min_weight_fraction_leaf=0.0, n_estimators=20, n_jobs=None,\n", + " oob_score=False, random_state=None, verbose=0,\n", + " warm_start=False),\n", + " n_features_to_select=10, step=1, verbose=0)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# n_features_to_select decide the stopping criterion\n", + "# we stop till 10 features remaining\n", + "\n", + "sel_ = RFE(RandomForestClassifier(n_estimators=20), n_features_to_select=10)\n", + "sel_.fit(X_train.fillna(0), y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index(['mean texture', 'mean perimeter', 'mean area', 'mean concavity',\n", + " 'mean concave points', 'worst radius', 'worst perimeter', 'worst area',\n", + " 'worst concave points', 'worst symmetry'],\n", + " dtype='object')\n" + ] + } + ], + "source": [ + "selected_feat = X_train.columns[(sel_.get_support())]\n", + "print(selected_feat)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "### Example 2\n", + "recursive feature elimination with RandomForest\n", + "with the method same as the guide\n", + "1. Rank the features according to their importance derived from a machine learning algorithm: it can be tree importance, or LASSO / Ridge, or the linear / logistic regression coefficients.\n", + "2. Remove one feature -the least important- and build a machine learning algorithm utilizing the remaining features.\n", + "3. Calculate a performance metric of your choice: roc-auc, mse, rmse, accuracy.\n", + "4. If the metric decreases by more of an arbitrarily set threshold, then that feature is important and should be kept. Otherwise, we can remove that feature.\n", + "5. Repeat steps 2-4 until all features have been removed (and therefore evaluated) and the drop in performance assessed.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "testing feature: mean radius which is feature 1 out of 30\n", + "New Test ROC AUC=0.9941251190854239\n", + "All features Test ROC AUC=0.9968243886948238\n", + "Drop in ROC AUC=0.0026992696093999236\n", + "keep: mean radius\n", + "\n", + "testing feature: mean texture which is feature 2 out of 30\n", + "New Test ROC AUC=0.9936487773896475\n", + "All features Test ROC AUC=0.9968243886948238\n", + "Drop in ROC AUC=0.0031756113051762958\n", + "keep: mean texture\n", + "\n", + "testing feature: mean perimeter which is feature 3 out of 30\n", + "New Test ROC AUC=0.9968243886948238\n", + "All features Test ROC AUC=0.9968243886948238\n", + "Drop in ROC AUC=0.0\n", + "remove: mean perimeter\n", + "\n", + "testing feature: mean area which is feature 4 out of 30\n", + "New Test ROC AUC=0.9960304858685297\n", + "All features Test ROC AUC=0.9968243886948238\n", + "Drop in ROC AUC=0.0007939028262941017\n", + "remove: mean area\n", + "\n", + "testing feature: mean smoothness which is feature 5 out of 30\n", + "New Test ROC AUC=0.9965068275643061\n", + "All features Test ROC AUC=0.9960304858685297\n", + "Drop in ROC AUC=-0.0004763416957763722\n", + "remove: mean smoothness\n", + "\n", + "testing feature: mean compactness which is feature 6 out of 30\n", + "New Test ROC AUC=0.9942838996506828\n", + "All features Test ROC AUC=0.9965068275643061\n", + "Drop in ROC AUC=0.0022229279136233293\n", + "keep: mean compactness\n", + "\n", + "testing feature: mean concavity which is feature 7 out of 30\n", + "New Test ROC AUC=0.9957129247380121\n", + "All features Test ROC AUC=0.9965068275643061\n", + "Drop in ROC AUC=0.0007939028262939907\n", + "remove: mean concavity\n", + "\n", + "testing feature: mean concave points which is feature 8 out of 30\n", + "New Test ROC AUC=0.9976182915211178\n", + "All features Test ROC AUC=0.9957129247380121\n", + "Drop in ROC AUC=-0.0019053667831057108\n", + "remove: mean concave points\n", + "\n", + "testing feature: mean symmetry which is feature 9 out of 30\n", + "New Test ROC AUC=0.9953953636074945\n", + "All features Test ROC AUC=0.9976182915211178\n", + "Drop in ROC AUC=0.0022229279136233293\n", + "keep: mean symmetry\n", + "\n", + "testing feature: mean fractal dimension which is feature 10 out of 30\n", + "New Test ROC AUC=0.9949190219117181\n", + "All features Test ROC AUC=0.9976182915211178\n", + "Drop in ROC AUC=0.0026992696093997015\n", + "keep: mean fractal dimension\n", + "\n", + "testing feature: radius error which is feature 11 out of 30\n", + "New Test ROC AUC=0.9952365830422356\n", + "All features Test ROC AUC=0.9976182915211178\n", + "Drop in ROC AUC=0.002381708478882194\n", + "keep: radius error\n", + "\n", + "testing feature: texture error which is feature 12 out of 30\n", + "New Test ROC AUC=0.9952365830422356\n", + "All features Test ROC AUC=0.9976182915211178\n", + "Drop in ROC AUC=0.002381708478882194\n", + "keep: texture error\n", + "\n", + "testing feature: perimeter error which is feature 13 out of 30\n", + "New Test ROC AUC=0.9939663385201651\n", + "All features Test ROC AUC=0.9976182915211178\n", + "Drop in ROC AUC=0.003651953000952668\n", + "keep: perimeter error\n", + "\n", + "testing feature: area error which is feature 14 out of 30\n", + "New Test ROC AUC=0.994919021911718\n", + "All features Test ROC AUC=0.9976182915211178\n", + "Drop in ROC AUC=0.0026992696093998125\n", + "keep: area error\n", + "\n", + "testing feature: smoothness error which is feature 15 out of 30\n", + "New Test ROC AUC=0.995871705303271\n", + "All features Test ROC AUC=0.9976182915211178\n", + "Drop in ROC AUC=0.001746586217846846\n", + "keep: smoothness error\n", + "\n", + "testing feature: compactness error which is feature 16 out of 30\n", + "New Test ROC AUC=0.9958717053032708\n", + "All features Test ROC AUC=0.9976182915211178\n", + "Drop in ROC AUC=0.0017465862178469571\n", + "keep: compactness error\n", + "\n", + "testing feature: concavity error which is feature 17 out of 30\n", + "New Test ROC AUC=0.9961892664337886\n", + "All features Test ROC AUC=0.9976182915211178\n", + "Drop in ROC AUC=0.0014290250873292276\n", + "keep: concavity error\n", + "\n", + "testing feature: concave points error which is feature 18 out of 30\n", + "New Test ROC AUC=0.9961892664337885\n", + "All features Test ROC AUC=0.9976182915211178\n", + "Drop in ROC AUC=0.0014290250873293386\n", + "keep: concave points error\n", + "\n", + "testing feature: symmetry error which is feature 19 out of 30\n", + "New Test ROC AUC=0.9968243886948238\n", + "All features Test ROC AUC=0.9976182915211178\n", + "Drop in ROC AUC=0.0007939028262939907\n", + "remove: symmetry error\n", + "\n", + "testing feature: fractal dimension error which is feature 20 out of 30\n", + "New Test ROC AUC=0.9946014607812005\n", + "All features Test ROC AUC=0.9968243886948238\n", + "Drop in ROC AUC=0.0022229279136233293\n", + "keep: fractal dimension error\n", + "\n", + "testing feature: worst radius which is feature 21 out of 30\n", + "New Test ROC AUC=0.9955541441727532\n", + "All features Test ROC AUC=0.9968243886948238\n", + "Drop in ROC AUC=0.001270244522070585\n", + "keep: worst radius\n", + "\n", + "testing feature: worst texture which is feature 22 out of 30\n", + "New Test ROC AUC=0.9958717053032708\n", + "All features Test ROC AUC=0.9968243886948238\n", + "Drop in ROC AUC=0.0009526833915529664\n", + "remove: worst texture\n", + "\n", + "testing feature: worst perimeter which is feature 23 out of 30\n", + "New Test ROC AUC=0.995871705303271\n", + "All features Test ROC AUC=0.9958717053032708\n", + "Drop in ROC AUC=-1.1102230246251565e-16\n", + "remove: worst perimeter\n", + "\n", + "testing feature: worst area which is feature 24 out of 30\n", + "New Test ROC AUC=0.9938075579549063\n", + "All features Test ROC AUC=0.995871705303271\n", + "Drop in ROC AUC=0.0020641473483646866\n", + "keep: worst area\n", + "\n", + "testing feature: worst smoothness which is feature 25 out of 30\n", + "New Test ROC AUC=0.9939663385201651\n", + "All features Test ROC AUC=0.995871705303271\n", + "Drop in ROC AUC=0.0019053667831058219\n", + "keep: worst smoothness\n", + "\n", + "testing feature: worst compactness which is feature 26 out of 30\n", + "New Test ROC AUC=0.9960304858685296\n", + "All features Test ROC AUC=0.995871705303271\n", + "Drop in ROC AUC=-0.0001587805652586427\n", + "remove: worst compactness\n", + "\n", + "testing feature: worst concavity which is feature 27 out of 30\n", + "New Test ROC AUC=0.9966656081295648\n", + "All features Test ROC AUC=0.9960304858685296\n", + "Drop in ROC AUC=-0.0006351222610352369\n", + "remove: worst concavity\n", + "\n", + "testing feature: worst concave points which is feature 28 out of 30\n", + "New Test ROC AUC=0.9936487773896475\n", + "All features Test ROC AUC=0.9966656081295648\n", + "Drop in ROC AUC=0.00301683073991732\n", + "keep: worst concave points\n", + "\n", + "testing feature: worst symmetry which is feature 29 out of 30\n", + "New Test ROC AUC=0.9976182915211178\n", + "All features Test ROC AUC=0.9966656081295648\n", + "Drop in ROC AUC=-0.0009526833915529664\n", + "remove: worst symmetry\n", + "\n", + "testing feature: worst fractal dimension which is feature 30 out of 30\n", + "New Test ROC AUC=0.9973007303906002\n", + "All features Test ROC AUC=0.9976182915211178\n", + "Drop in ROC AUC=0.00031756113051761847\n", + "remove: worst fractal dimension\n", + "DONE!!\n", + "total features to remove: 12\n", + "total features to keep: 18\n" + ] + } + ], + "source": [ + "# tol decide whether we should drop or keep the feature in current round\n", + "features_to_keep = hybrid.recursive_feature_elimination_rf(X_train=X_train,\n", + " y_train=y_train,\n", + " X_test=X_test,\n", + " y_test=y_test,\n", + " tol=0.001)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['mean radius',\n", + " 'mean texture',\n", + " 'mean compactness',\n", + " 'mean symmetry',\n", + " 'mean fractal dimension',\n", + " 'radius error',\n", + " 'texture error',\n", + " 'perimeter error',\n", + " 'area error',\n", + " 'smoothness error',\n", + " 'compactness error',\n", + " 'concavity error',\n", + " 'concave points error',\n", + " 'fractal dimension error',\n", + " 'worst radius',\n", + " 'worst area',\n", + " 'worst smoothness',\n", + " 'worst concave points']" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "features_to_keep" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Recursive Feature Addition\n", + "### with Random Forests Importance" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example 1\n", + "recursive feature addition with RandomForest\n", + "with the method same as the guide\n", + "1. Rank the features according to their importance derived from a machine learning algorithm: it can be tree importance, or LASSO / Ridge, or the linear / logistic regression coefficients.\n", + "2. Build a machine learning model with only 1 feature, the most important one, and calculate the model metric for performance.\n", + "3. Add one feature -the most important- and build a machine learning algorithm utilizing the added and any feature from previous rounds.\n", + "4. Calculate a performance metric of your choice: roc-auc, mse, rmse, accuracy.\n", + "5. If the metric increases by more than an arbitrarily set threshold, then that feature is important and should be kept. Otherwise, we can remove that feature.\n", + "6. Repeat steps 2-5 until all features have been removed (and therefore evaluated) and the drop in performance assessed.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "testing feature: mean texture which is feature 1 out of 30\n", + "New Test ROC AUC=0.9558590028580501\n", + "All features Test ROC AUC=0.9009209272785013\n", + "Increase in ROC AUC=0.054938075579548884\n", + "keep: mean texture\n", + "\n", + "testing feature: mean perimeter which is feature 2 out of 30\n", + "New Test ROC AUC=0.9609399809463322\n", + "All features Test ROC AUC=0.9558590028580501\n", + "Increase in ROC AUC=0.005080978088282007\n", + "keep: mean perimeter\n", + "\n", + "testing feature: mean area which is feature 3 out of 30\n", + "New Test ROC AUC=0.9609399809463322\n", + "All features Test ROC AUC=0.9609399809463322\n", + "Increase in ROC AUC=0.0\n", + "remove: mean area\n", + "\n", + "testing feature: mean smoothness which is feature 4 out of 30\n", + "New Test ROC AUC=0.9684026675134964\n", + "All features Test ROC AUC=0.9609399809463322\n", + "Increase in ROC AUC=0.007462686567164201\n", + "keep: mean smoothness\n", + "\n", + "testing feature: mean compactness which is feature 5 out of 30\n", + "New Test ROC AUC=0.9750714512543665\n", + "All features Test ROC AUC=0.9684026675134964\n", + "Increase in ROC AUC=0.006668783740870099\n", + "keep: mean compactness\n", + "\n", + "testing feature: mean concavity which is feature 6 out of 30\n", + "New Test ROC AUC=0.9933312162591298\n", + "All features Test ROC AUC=0.9750714512543665\n", + "Increase in ROC AUC=0.01825976500476334\n", + "keep: mean concavity\n", + "\n", + "testing feature: mean concave points which is feature 7 out of 30\n", + "New Test ROC AUC=0.9925373134328358\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=-0.0007939028262939907\n", + "remove: mean concave points\n", + "\n", + "testing feature: mean symmetry which is feature 8 out of 30\n", + "New Test ROC AUC=0.9895204826929185\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=-0.0038107335662113107\n", + "remove: mean symmetry\n", + "\n", + "testing feature: mean fractal dimension which is feature 9 out of 30\n", + "New Test ROC AUC=0.9892029215624007\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=-0.00412829469672904\n", + "remove: mean fractal dimension\n", + "\n", + "testing feature: radius error which is feature 10 out of 30\n", + "New Test ROC AUC=0.9895204826929184\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=-0.0038107335662114217\n", + "remove: radius error\n", + "\n", + "testing feature: texture error which is feature 11 out of 30\n", + "New Test ROC AUC=0.9868212130835186\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=-0.006510003175611234\n", + "remove: texture error\n", + "\n", + "testing feature: perimeter error which is feature 12 out of 30\n", + "New Test ROC AUC=0.9890441409971419\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=-0.004287075261987905\n", + "remove: perimeter error\n", + "\n", + "testing feature: area error which is feature 13 out of 30\n", + "New Test ROC AUC=0.989044140997142\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=-0.004287075261987794\n", + "remove: area error\n", + "\n", + "testing feature: smoothness error which is feature 14 out of 30\n", + "New Test ROC AUC=0.988091457605589\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=-0.00523975865354076\n", + "remove: smoothness error\n", + "\n", + "testing feature: compactness error which is feature 15 out of 30\n", + "New Test ROC AUC=0.9895204826929184\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=-0.0038107335662114217\n", + "remove: compactness error\n", + "\n", + "testing feature: concavity error which is feature 16 out of 30\n", + "New Test ROC AUC=0.9911082883455065\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=-0.0022229279136233293\n", + "remove: concavity error\n", + "\n", + "testing feature: concave points error which is feature 17 out of 30\n", + "New Test ROC AUC=0.9906319466497301\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=-0.0026992696093997015\n", + "remove: concave points error\n", + "\n", + "testing feature: symmetry error which is feature 18 out of 30\n", + "New Test ROC AUC=0.9876151159098127\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=-0.0057161003493171325\n", + "remove: symmetry error\n", + "\n", + "testing feature: fractal dimension error which is feature 19 out of 30\n", + "New Test ROC AUC=0.9896792632581772\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=-0.003651953000952557\n", + "remove: fractal dimension error\n", + "\n", + "testing feature: worst radius which is feature 20 out of 30\n", + "New Test ROC AUC=0.994125119085424\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=0.0007939028262942127\n", + "remove: worst radius\n", + "\n", + "testing feature: worst texture which is feature 21 out of 30\n", + "New Test ROC AUC=0.9906319466497301\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=-0.0026992696093997015\n", + "remove: worst texture\n", + "\n", + "testing feature: worst perimeter which is feature 22 out of 30\n", + "New Test ROC AUC=0.9933312162591299\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=1.1102230246251565e-16\n", + "remove: worst perimeter\n", + "\n", + "testing feature: worst area which is feature 23 out of 30\n", + "New Test ROC AUC=0.9931724356938711\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=-0.0001587805652586427\n", + "remove: worst area\n", + "\n", + "testing feature: worst smoothness which is feature 24 out of 30\n", + "New Test ROC AUC=0.9933312162591299\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=1.1102230246251565e-16\n", + "remove: worst smoothness\n", + "\n", + "testing feature: worst compactness which is feature 25 out of 30\n", + "New Test ROC AUC=0.9895204826929184\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=-0.0038107335662114217\n", + "remove: worst compactness\n", + "\n", + "testing feature: worst concavity which is feature 26 out of 30\n", + "New Test ROC AUC=0.9938075579549063\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=0.0004763416957764832\n", + "remove: worst concavity\n", + "\n", + "testing feature: worst concave points which is feature 27 out of 30\n", + "New Test ROC AUC=0.9971419498253413\n", + "All features Test ROC AUC=0.9933312162591298\n", + "Increase in ROC AUC=0.0038107335662115327\n", + "keep: worst concave points\n", + "\n", + "testing feature: worst symmetry which is feature 28 out of 30\n", + "New Test ROC AUC=0.9957129247380121\n", + "All features Test ROC AUC=0.9971419498253413\n", + "Increase in ROC AUC=-0.0014290250873292276\n", + "remove: worst symmetry\n", + "\n", + "testing feature: worst fractal dimension which is feature 29 out of 30\n", + "New Test ROC AUC=0.9950778024769769\n", + "All features Test ROC AUC=0.9971419498253413\n", + "Increase in ROC AUC=-0.0020641473483644646\n", + "remove: worst fractal dimension\n", + "DONE!!\n", + "total features to keep: 7\n" + ] + } + ], + "source": [ + "features_to_keep = hybrid.recursive_feature_addition_rf(X_train=X_train,\n", + " y_train=y_train,\n", + " X_test=X_test,\n", + " y_test=y_test,\n", + " tol=0.001)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['mean radius',\n", + " 'mean texture',\n", + " 'mean perimeter',\n", + " 'mean smoothness',\n", + " 'mean compactness',\n", + " 'mean concavity',\n", + " 'worst concave points']" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "features_to_keep" + ] + } + ], + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/A Short Guide for Feature Engineering and Feature Selection.md b/A Short Guide for Feature Engineering and Feature Selection.md new file mode 100644 index 0000000..306f51c --- /dev/null +++ b/A Short Guide for Feature Engineering and Feature Selection.md @@ -0,0 +1,824 @@ +**Table of Contents**: + +[TOC] + +# A Short Guide for Feature Engineering and Feature Selection + +Feature engineering and selection is the art/science of converting data to the best way possible, which involve an elegant blend of domain expertise, intuition and mathematics. This guide is a concise reference for beginners with most simple yet widely used techniques for feature engineering and selection. Any comments and commits are most welcome. + +## 0. Basic Concepts + +### 0.1 What is Machine Learning + +> Machine Learning is the science of getting computers to act without being explicitly programmed - [Arthur Samuel](https://simple.wikipedia.org/wiki/Machine_learning) + +> Machine Learning is a technique of data science that helps computers learn from existing data in order to forecast future behaviors, outcomes and trends - [Microsoft](https://docs.microsoft.com/en-us/azure/machine-learning/service/overview-what-is-azure-ml) + +> The field of Machine Learning seeks to answer the question “How can we build computer systems that automatically improve with experience, and what are the fundamental laws that govern all learning processes?“ - [Carnegie Mellon University](http://www.cs.cmu.edu/~tom/pubs/MachineLearning.pdf) + +Narrowly speaking, in data mining context, machine learning (ML) is the process of letting computers to learn from historical data, recognize pattern/relationship within data, and then make predictions. + + + +### 0.2 Methodology + +A typical ML workflow/pipeline looks like this: + + +![workflow](/images/workflow2.png) + + +​ Source: Practical Machine Learning with Python, Springer + + +There can be many ways to divide the tasks that make up the ML workflow into phases. But generally the basic steps are similar as the graph above. + + + +### 0.3 Typical Tasks + +| Task | Definition | Example | +| ----------------- | --------------------------------------------- | ------------------------------------ | +| Classification | predict what category new instance belongs to | is the tumor malign/benign? | +| Regression | predict a continuous numeric value | predict house/stock prices in future | +| Anomaly Detection | identify outliers | fraud detection | +| Clustering | separate similar data points into groups | customer segmentation | + + + +### 0.4 Terminology + +- **Feature**: also known as Attribute/ Independent Variable/ Predictor/ Input Variable. It's an individual measurable property/characteristic of a phenomenon being observed [[wiki]](https://en.wikipedia.org/wiki/Feature_(machine_learning)). The age of a person, etc. +- **Target**: also known as Dependent Variable/ Response Variable/ Output Variable. It's the variable being predicted in supervised learning. +- **Algorithm**: the specific procedure used to implement a particular ML technique. Linear Regression, etc. +- **Model**: the algorithm applied to a dataset, complete with its settings (its parameters). Y=4.5x+0.8, etc. We want the model that best captures the relationship between features and the target. +- **Supervised learning** : train the model with labeled data to generate reasonable predictions for the response to new data. +- **Unsupervised learning** : train the model with un-labeled data to find intrinsic structures/ patterns within the data. +- **Reinforcement learning**: the model is learned from a series of actions by maximizing a reward function, which can either be maximized by penalizing bad actions and/or rewarding good actions. Self-driving, etc. + + + + + +## 1. Data Exploration + +### 1.1 Variables + +**Definition**: any measurable property/characteristic of a phenomenon being observed. They are called 'variables' because the value they take may vary (and it usually does) in a population. + +**Types of Variable** + +| Type | Sub-type | Definition | Example | +| ----------- | ---------- | ------------------------------------------------------------ | ------------------------------ | +| Categorical | Nominal | Variables with values selected from a group of categories, while not having any kind of natural order. [ref](http://www-ist.massey.ac.nz/dstirlin/CAST/CAST/Hstructures/structures_c2.html) | Gender, car types | +| | Ordinal | A categorical variable whose categories can be meaningfully ordered. [ref](http://www-ist.massey.ac.nz/dstirlin/CAST/CAST/Hstructures/structures_c2.html) | Grade of an exam | +| Numerical | Discrete | Variables whose values are either finite or countably infinite. [wiki](https://en.wikipedia.org/wiki/Continuous_or_discrete_variable) | Number of children in a family | +| | Continuous | Variable which can take on infinitely many, uncountable values. [wiki](https://en.wikipedia.org/wiki/Continuous_or_discrete_variable) | House prices, time passed | + + + +### 1.2 Variable Identification + +**Definition**: Identify the data types of each variable. + +**Note**: In reality we may have mixed type of variable for a variety of reasons. For example, in credit scoring "Missed payment status" is a common variable that can take values 1, 2, 3 meaning that the customer has missed 1-3 payments in their account. And it can also take the value D, if the customer defaulted on that account. We may have to convert data types after certain steps of data cleaning. + + + +### 1.3 Univariate Analysis + +Descriptive statistics on one single variable. + +| Variable | What to look | +| ----------- | ------------------------------------------------------------ | +| Categorical | **Shape**:
Histogram/ Frequency table... | +| Numerical | **Central Tendency**:
Mean/ Median/ Mode
**Dispersion**:
Min/ Max/ Range/ Quantile/ IQR/ MAD/ Variance/ Standard Deviation/
**Shape**:
Skewness/ Histogram/ Boxplot... | + +Below are some methods that can give us the basic stats on the variable: + +- pandas.Dataframe.describe() +- pandas.Dataframe.dtypes +- Barplot +- Countplot +- Boxplot +- Distplot + + + +### 1.4 Bi-variate Analysis + +Descriptive statistics between two or more variables. + +- Scatter Plot + +- Correlation Plot +- Heat Map + +**Scatter Plot** is a type of plot or mathematical diagram using Cartesian coordinates to display values for typically two variables for a set of data. If the pattern of dots slopes from lower left to upper right, it indicates a positive correlation between the variables being studied. If the pattern of dots slopes from upper left to lower right, it indicates a negative correlation. [[wiki]](https://en.wikipedia.org/wiki/Scatter_plot) + +**Correlation plot** can be used to quickly find insights. It is used to investigate the dependence between multiple variables at the same time and to highlight the most correlated variables in a data table. + +**Heat map** (or heatmap) is a graphical representation of data where the individual values contained in a matrix are represented as colors. + + + + + +## 2. Feature Cleaning + +### 2.1 Missing Values + +**Definition**: no value is stored in a certain observation within a variable. + +#### 2.1.1 Why Missing Data Matters + +- certain algorithms cannot work when missing value are present +- even for algorithm that handle missing data, without treatment the model can lead to inaccurate conclusion + +A study on the impact of missing data on different ML algorithm can be found [here](http://core.ecu.edu/omgt/krosj/IMDSDataMining2003.pdf). + +#### 2.1.2 Missing Mechanisms[^1] + +It is important to understand the mechanisms by which missing fields are introduced in a dataset. Depending on the mechanism, we may choose to process the missing values differently. The mechanisms were first introduced by Rubin[^2]. + +**Missing Completely at Random** + +A variable is missing completely at random (MCAR) if the probability of being missing is the same for all the observations. When data is MCAR, there is absolutely no relationship between the data missing and any other values, observed or missing, within the dataset. In other words, those missing data points are a random subset of the data. There is nothing systematic going on that makes some data more likely to be missing than other. + +If values for observations are missing completely at random, then disregarding those cases would not bias the inferences made. + +**Missing at Random** + +Missing as Random (MAR) occurs when there is a systematic relationship between the propensity of missing values and the observed data. In other words, the probability an observation being missing depends only on available information (other variables in the dataset), but not on the variable itself. + +For example, if men are more likely to disclose their weight than women, weight is MAR (on variable gender). The weight information will be missing at random for those men and women that decided not to disclose their weight, but as men are more prone to disclose it, there will be more missing values for women than for men. + +In a situation like the above, if we decide to proceed with the variable with missing values, we might benefit from including gender to control the bias in weight for the missing observations. + +**Missing Not At Random - Depends on Unobserved Predictors** + +Missingness depends on information that has not been recorded, and this information also predicts the missing values. E.g., if a particular treatment causes discomfort, a patient is more likely to drop out of the study (and 'discomfort' is not measured). + +In this situation, data sample is biased if we drop those missing cases. + +**Missing Not At Random - Depends on Missing Value Itself** + +Missingness depends on the (potentially missing) variable itself. E.g., people with higher earnings are less likely to reveal them. + + + +#### 2.1.3 How to Assume a Missing Mechanism + +- By **business understanding**. In many situations we can assume the mechanism by probing into the business logic behind that variable. +- By **statistical test**. Divide the dataset into ones with/without missing and perform t-test to see if there's significant differences. If there is, we can assume that missing is not completed at random. + +But we should keep in mind that we can hardly 100% be sure that data are MCAR, MAR, or MNAR because unobserved predictors (lurking variables) are unobserved. + + + +#### 2.1.4 How to Handle Missing Data + +| Method | Definition | Pros | Cons | +| ------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------ | :----------------------------------------------------------- | +| Listwise Deletion | excluding all cases (listwise) that have missing values | preserve distribution if MCAR | 1. may discard too much data and hurt the model
2. may yield biased estimates if not MCAR (as we keep a special subsample from the population) | +| Mean/Median/Mode Imputation | replacing the NA by mean/median/most frequent values (for categorical feature) of that variable | good practice if MCAR | 1. distort distribution
2. distort relationship with other variables | +| End of distribution Imputation | replacing the NA by values that are at the far end of the distribution of that variable, calculated by mean + 3*std | Captures the importance of missingness if there is one | 1. distort distribution
2. may be considered outlier if NA is few or mask true outlier if NA is many.
3. if missingness is not important this may mask the predictive power of the original variable | +| Random Imputation | replacing the NA by taking a random value from the pool of available observations of that variable | preserve distribution if MCAR | not recommended in business settings for its randomness (different result for same input) | +| Arbitrary Value Imputation | replacing the NA by arbitrary values | Captures the importance of missingness if there is one | 1. distort distribution
2. typical used value: -9999/9999. But be aware it may be regarded as outliers. | +| Add a variable to denote NA | creating an additional variable indicating whether the data was missing for that observation | Captures the importance of missingness if there is one | expand feature space | + +In real settings, when it's hard to decide the missing mechanism or there's few time to study deeply about each missing variables, the popular way is to adopt: + +- Mean/Median/Mode Imputation (depend on the distribution) +- End of distribution Imputation +- Add a variable to denote NA + +simultaneously, so that we both catch the value of missingness and obtain a complete dataset. + +**Note**: Some algorithms like XGboost incorporate missing data treatment into its model building process, so you don't need to do the step. However it's important to make sure you understand how the algorithm treat them and explain to the business team. + + + +### 2.2 Outliers + +**Definition**: An outlier is an observation which deviates so much from the other observations as to arouse suspicions that it was generated by a different mechanism.[^3] + +**Note**: Outliers, depending on the context, either deserve special attention or should be completely ignored. For example, an unusual transaction on a credit card is usually a sign of fraudulent activity, while a height of 1600cm of a person is very likely due to measurement error and should be filter out or impute with something else. + +#### 2.2.1 Why Outlier Matters + +The presence of outliers may: + +- make algorithm not work properly +- introduce noises to dataset +- make samples less representative + +Some algorithms are very sensitive to outliers, For example, Adaboost may treat outliers as "hard" cases and put tremendous weights on outliers, therefore producing a model with bad generalization. Any algorithms that rely on means/variance are sensitive to outliers as those stats are greatly influenced by extreme values. + +On the other hand some algorithm are more robust to outliers. For example, decision trees tend to ignore the presence of outliers when creating the branches of their trees. Typically, trees make splits by asking if variable x >= value t, and therefore the outlier will fall on each side of the branch, but it will be treated equally as the remaining values, regardless of its magnitude. + +#### 2.2.2 Outlier Detection + +In fact outlier analysis and anomaly detection is a huge field of research. Charu's book "Outlier Analysis"[^4] offer a great insight into the topic. PyOD[^5] is a comprehensive Python toolkit which contains many of the advanced methods in this field. + +All the methods here listed are for univariate outlier detection. Multivariate outlier detection is beyond the scope of this guide. + +| Method | Definition | Pros | Cons | +| ---------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| Detect by arbitrary boundary | identify outliers based on arbitrary boundaries | flexiable | require business understanding | +| Mean & Standard Deviation method[^6][^7] | outlier detection by Mean & Standard Deviation Method | good for variable with Gaussian distribution (68-95-99 rule) | sensitive to extreme value itself (as the outlier increase the sd) | +| IQR method[^8] | outlier detection by Interquartile Ranges Rule | robust than Mean & SD method as it use quantile & IQR. Resilient to extremes. | can be too aggressive | +| MAD method[^6][^7] | outlier detection by Median and Median Absolute Deviation Method | robust than Mean & SD method. Resilient to extremes. | can be too aggressive | + +However, beyond these methods, it's more important to keep in mind that the business context should govern how you define and react to these outliers. The meanings of your findings should be dictated by the underlying context, rather than the number itself. + + + +#### 2.2.3 How to Handle Outliers + +| Method | Definition | Pros | Cons | +| ------------------------------- | ------------------------------------------------------------ | -------------------------------- | ------------------------------------------- | +| Mean/Median/Mode Imputation | replacing the outlier by mean/median/most frequent values of that variable | preserve distribution | lose information of outlier if there is one | +| Discretization | transform continuous variables into discrete variables | minimize the impact from outlier | lose information of outlier if there is one | +| Imputation with arbitrary value | impute outliers with arbitrary value. | flexiable | hard to decide the value | +| Windsorization | top-coding & bottom coding (capping the maximum of a distribution at an arbitrarily set value, vice versa). | prevent model over-fitting | distort distribution | +| Discard outliers | drop all the observations that are outliers | / | lose information of outlier if there is one | + +**Note**: A detailed guide of doing windsorization can be found [here](https://www.statisticshowto.datasciencecentral.com/winsorize/). + +There are many strategies for dealing with outliers in data, and depending on the context and data set, any could be the right or the wrong way. It’s important to investigate the nature of the outlier before deciding. + + + +### 2.3 Rare Values + +**Definition**: Categorical variable with some of its values appear only seldomly. + +**Note**: In some situations rare values, like outliers, may contains valuable information of the dataset and therefore need particular attention. For example, a rare value in transaction may denote fraudulent. + +#### 2.3.1 Why Rare Value Matters + +- Rare values in categorical variables tend to cause over-fitting, particularly in **tree based** methods. +- A big number of infrequent labels adds noise, with little information, therefore causing over-fitting. +- Rare labels may be present in training set, but not in test set, therefore causing over-fitting to the train set. +- Rare labels may appear in the test set, and not in the train set. Thus, the model will not know how to evaluate it. + +#### 2.3.2 How to Handle Rare Value + +| Method | Definition | +| ------------------------------ | ------------------------------------------------------------ | +| Mode Imputation | Replacing the rare label by most frequent label | +| Grouping into one new category | Grouping the observations that show rare labels into a unique category | + +Depending on the situation, we may use different strategies: + +- when **there's one predominant category (over 90%)** in the variable: observe the relationship between that variable and the target, then either discard that variable, or keep it as it was. In this case, variable often is not useful for prediction as it is quasi-constant (as we will later see in Feature Selection part). +- when **there's a small number of categories**: keep it as it was. Because only few categories are unlikely to bring so much noise. +- when **there's high cardinality**: try the 2 methods above. But it does not guarantee better results than original variable. + + + +### 2.4 High Cardinality + +**Definition**: The number of labels within a categorical variable is known as cardinality. A high number of labels within a variable is known as high cardinality. + +#### 2.4.1 Why High Cardinality Matters + +- Variables with too many labels tend to dominate over those with only a few labels, particularly in **tree based** algorithms. +- A big number of labels within a variable may introduce noise with little if any information, therefore making the machine learning models prone to over-fit. +- Some of the labels may only be present in the training data set, but not in the test set, therefore causing algorithms to over-fit the training set. +- Contrarily, new labels may appear in the test set that were not present in the training set, therefore leaving algorithm unable to perform a calculation over the new observation. + +#### 2.4.2 How to Handle High Cardinality + +| Method | +| ------------------------------------------------------ | +| Grouping labels with business understanding | +| Grouping labels with rare occurrence into one category | +| Grouping labels with decision tree | + +All these methods attempt to group some of the labels and reduce cardinality. Grouping labels with decision tree is equivalent to the method introduced in section 3.2.2 Discretization with decision tree, which aims to merge labels into more homogenous groups. Grouping labels with rare occurrence into one category is equivalent to method in section 2.3.2. + + + + + +## 3. Feature Engineering + +### 3.1 Feature Scaling + +**Definition**: Feature scaling is a method used to standardize the range of independent variables or features of data. In data processing, it is also known as data normalization and is generally performed during the data preprocessing step. + +#### 3.1.1 Why Feature Scaling Matters + +- If range of inputs varies, in some algorithms, object functions will not work properly. + +- **Gradient descent** converges much faster with feature scaling done. Gradient descent is a common optimization algorithm used in logistic regression, SVMs, neural networks etc. + +- Algorithms that involve **distance calculation** like KNN, Clustering are also affected by the magnitude of the feature. Just consider how Euclidean distance is calculated: taking the square root of the sum of the squared differences between observations. This distance can be greatly affected by differences in scale among the variables. Variables with large variances have a larger effect on this measure than variables with small variances. + +**Note**: Tree-based algorithms are almost the only algorithms that are not affected by the magnitude of the input, as we can easily see from how trees are built. When deciding how to make a split, tree algorithm look for decisions like "whether feature value X>3.0" and compute the purity of the child node after the split, so the scale of the feature does not count. + +#### 3.1.2 How to Handle Feature Scaling + +| Method | Definition | Pros | Cons | +| ------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| Normalization - Standardization (Z-score scaling) | removes the mean and scales the data to unit variance.
z = (X - X.mean) / std | feature is rescaled to have a standard normal distribution that centered around 0 with SD of 1 | compress the observations in the narrow range if the variable is skewed or has outliers, thus impair the predictive power. | +| Min-Max scaling | transforms features by scaling each feature to a given range. Default to [0,1].
X_scaled = (X - X.min / (X.max - X.min) | / | compress the observations in the narrow range if the variable is skewed or has outliers, thus impair the predictive power. | +| Robust scaling | removes the median and scales the data according to the quantile range (defaults to IQR)
X_scaled = (X - X.median) / IQR | better at preserving the spread of the variable after transformation for skewed variables | / | + + + +A comparison of three methods when facing outliers: + +
+ +![scaling](/images/scaling.png) + +[img source](https://stackoverflow.com/questions/51841506/data-standardization-vs-normalization-vs-robust-scaler) + +As we can see, Normalization - Standardization and Min-Max method will compress most data to a narrow range, while robust scaler does a better job at keeping the spread of the data, although it cannot **remove** the outlier from the processed result. Remember removing/imputing outliers is another topic in data cleaning and should be done beforehand. + +Experience on how to choose feature scaling method: + +- if your feature is not Gaussian like, say, has a skewed distribution or has outliers, Normalization - Standardization is not a good choice as it will compress most data to a narrow range. +- However, we can transform the feature into Gaussian like and then use Normalization - Standardization. Feature transformation will be discussed in section 3.4 +- When performing distance or covariance calculation (algorithm like Clustering, PCA and LDA), it is better to use Normalization - Standardization as it will remove the effect of scales on variance and covariance. Explanation [here](https://blog.csdn.net/zbc1090549839/article/details/44103801). +- Min-Max scaling has the same drawbacks as Normalization - Standardization, and also new data may not be bounded to [0,1] as they can be out of the original range. Some algorithms, for example some deep learning network prefer input on a 0-1 scale so this is a good choice. + + + +Below is some additional resource on this topic: + +- A comparison of the three methods when facing skewed variables can be found [here](https://scikit-learn.org/stable/auto_examples/preprocessing/plot_all_scaling.html#sphx-glr-auto-examples-preprocessing-plot-all-scaling-py). +- An in-depth study of feature scaling can be found [here](http://sebastianraschka.com/Articles/2014_about_feature_scaling.html). + + + +### 3.2 Discretize + +**Definition**: Discretization is the process of transforming continuous variables into discrete variables by creating a set of contiguous intervals that spans the range of the variable's values. + +#### 3.2.1 Why Discretize Matters + +- help to improve model performance by grouping of similar attributes with similar predictive strengths +- enhance interpretability with grouped values +- minimize the impact of **extreme values/seldom reversal patterns** +- prevent overfitting possible with numerical variables +- allow feature interaction between continuous variables (section 3.5.5) + + + +#### 3.2.2 How to Handle Discretization + +| Method | Definition | Pros | Cons | +| ----------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| Equal width binning | divides the scope of possible values into N bins of the same width | / | sensitive to skewed distribution | +| Equal frequency binning | divides the scope of possible values of the variable into N bins, where each bin carries the same amount of observations | may help boost the algorithm's performance | this arbitrary binning may disrupt the relationship with the target | +| K-means binning | using k-means to partition values into clusters | / | needs hyper-parameter tuning | +| Discretization using decision trees | using a decision tree to identify the optimal splitting points that would determine the bins | observations within each bin are more similar to themselves than to those of other bins | 1. may cause over-fitting
2. may not get a good performing tree | +| ChiMerge[^11] | supervised hierarchical bottom-up (merge) method that locally exploits the chi-square criterion to decide whether two adjacent intervals are similar enough to be merged | robust and make use of a priori knowledge | cannot handle unlabeled data | + +In general there's no best choice of discretization method. It really depends on the dataset and the following learning algorithm. Study carefully about your features and context before deciding. You can also try different methods and compare the model performance. + +Some literature reviews on feature discretization can be found [here1](https://pdfs.semanticscholar.org/94c3/d92eccbb66f571153f99b7ae6c6167a00923.pdf), [here2](http://robotics.stanford.edu/users/sahami/papers-dir/disc.pdf), [here3](http://axon.cs.byu.edu/papers/ventura.thesis.ps). + + + +### 3.3 Feature Encoding + +#### 3.3.1 Why Feature Encoding Matters + +We must transform strings of categorical variables into numbers so that algorithms can handle those values. Even if you see an algorithm can take into categorical inputs, it's most likely that the algorithm incorporate the encoding process within. + +#### 3.3.2 How to Handle Feature Encoding + +| Method | Definition | Pros | Cons | +| ------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| One-hot encoding | replace the categorical variable by different boolean variables (0/1) to indicate whether or not certain label is true for that observation | keep all information of that variable | 1. expand feature space dramatically if too many labels in that variable
2. does not add additional value to make the variable more predictive | +| Ordinal-encoding | replace the labels by some ordinal number if ordinal is meaningful | straightforward | does not add additional value to make the variable more predictive | +| Count/frequency encoding | replace each label of the categorical variable by the count/frequency within that category | / | 1. may yield same encoding for two different labels (if they appear same times) and lose valuable info.
2. may not add predictive power | +| Mean encoding | replace the label by the mean of the target for that label. (the target must be 0/1 valued or continuous) | 1. Capture information within the label, therefore rendering more predictive features
2. Create a monotonic relationship between the variable and the target
3. Do not expand the feature space | Prone to cause over-fitting | +| WOE encoding[^9] | replace the label with Weight of Evidence of each label. WOE is computed from the basic odds ratio: ln( (Proportion of Good Outcomes) / (Proportion of Bad Outcomes)) | 1. Establishes a monotonic relationship to the dependent variable
2. Orders the categories on a "logistic" scale which is natural for logistic regression
3,The transformed variables, can then be compared because they are on the same scale. Therefore, it is possible to determine which one is more predictive. | 1. May incur in loss of information (variation) due to binning to few categories
2. Prone to cause over-fitting | +| Target encoding[^10] | Similar to mean encoding, but use both posterior probability and prior probability of the target | 1. Capture information within the label, therefore rendering more predictive features
2. Create a monotonic relationship between the variable and the target
3. Do not expand the feature space | Prone to cause over-fitting | + +**Note**: if we are using one-hot encoding in linear regression, we should keep k-1 binary variable to avoid multicollinearity. This is true for any algorithms that look at all features at the same time during training. Including SVM, neural network and clustering. Tree-based algorithm, on the other hand, need the entire set of binary variable to select the best split. + +An in-detail intro to WOE can be found [here](http://documentation.statsoft.com/StatisticaHelp.aspx?path=WeightofEvidence/WeightofEvidenceWoEIntroductoryOverview). + + + +### 3.4 Feature Transformation + +#### 3.4.1 Why Feature Transformation Matters + +##### 3.4.1.1 Linear Assumption + +**Regression** + +Linear regression is a straightforward approach for predicting a quantitative response Y on the basis of a different predictor variable X1, X2, ... Xn. It assumes that there is a linear relationship between X(s) and Y. Mathematically, we can write this linear relationship as Y ≈ β0 + β1X1 + β2X2 + ... + βnXn. + +**Classification** + +Similarly, for classification, Logistic Regression assumes a linear relationship between the variables and the log of the odds. + +Odds = p / (1 - p), where p is the probability of y = 1 + +log(odds) = β0 + β1X1 + β2X2 + ... + βnXn + +**Why it's important to follow linear assumption** + +If the machine learning model assumes a linear dependency between the predictors Xs and the outcome Y, when there is not such a linear relationship, the model will have a poor performance. In such cases, we are better off trying another machine learning model that does not make such assumption. + +If there is no linear relationship and we have to use the linear/logistic regression models, mathematical transformation/discretization may help create the relationship, though it cannot guarantee a better result. + +##### 3.4.1.2 Variable Distribution + +**Linear Regression Assumptions** + +Linear Regression has the following assumptions over the predictor variables X: + +- Linear relationship with the outcome Y + +- Multivariate normality +- No or little multicollinearity +- Homoscedasticity + +Normality assumption means that every variable X should follow a Gaussian distribution. + +Homoscedasticity, also known as homogeneity of variance, describes a situation in which the error term (that is, the “noise” or random disturbance in the relationship between the independent variables (Xs) and the dependent variable (Y)) is the same across all values of the independent variables. + +Violations in the assumptions of homoscedasticity and / or normality (assuming a distribution of data is homoscedastic or Gaussian, when in reality it is not) may result in poor model performance. + +The remaining machine learning models, including Neural Networks, Support Vector Machines, Tree based methods and PCA do not make any assumption over the distribution of the independent variables. However, in many occasions the model performance may **benefit from a "Gaussian-like" distribution**. + +Why may models benefit from a "Gaussian-like" distributions? In variables with a normal distribution, the observations of X available to predict Y vary across a greater range of values, that is, the values of X are "spread" over a greater range. + +In the situations above, transformation of the original variable can help give the variable more of a bell-shape of the Gaussian distribution. + +#### 3.4.2 How to Handle Feature Transformation + +| Method | Definition | +| --------------------------- | -------------------------------------------------------- | +| Logarithmic transformation | log(x+1). We use (x+1) instead of x to avoid value of 0 | +| Reciprocal transformation | 1/x. Warning that x should not be 0. | +| Square root transformation | x**(1/2) | +| Exponential transformation | X**(m) | +| Box-cox transformation[^12] | (X**λ-1)/λ | +| Quantile transformation | transform features using quantiles information | + +**Log transformation** is useful when applied to skewed distributions as they tend to expand the values which fall in the range of lower magnitudes and tend to compress or reduce the values which fall in the range of higher magnitudes, which helps to make the skewed distribution as normal-like as possible. **Square root transformation** does a similar thing in this sense. + +**Box-Cox transformation** in sklearn[^13] is another popular function belonging to the power transform family of functions. This function has a pre-requisite that the numeric values to be transformed must be positive (similar to what log transform expects). In case they are negative, shifting using a constant value helps. Mathematically, the Box-Cox transform function can be denoted as follows. + +![](images/box-cox.png) + +**Quantile transformation** in sklearn[^14] transforms the features to follow a uniform or a normal distribution. Therefore, for a given feature, this transformation tends to spread out the most frequent values. It also reduces the impact of (marginal) outliers: this is therefore a robust preprocessing scheme. However, this transform is non-linear. It may distort linear correlations between variables measured at the same scale but renders variables measured at different scales more directly comparable. + + + +We can use **Q-Q plot** to check if the variable is normally distributed (a 45 degree straight line of the values over the theoretical quantiles) after transformation. + +Below is an example showing the effect of sklearn's Box-plot/Yeo-johnson/Quantile transform to map data from various distributions to a normal distribution. + +
+ +![sphx_glr_plot_map_data_to_normal_001](.\images\sphx_glr_plot_map_data_to_normal_001.png) + +[img source](https://scikit-learn.org/stable/auto_examples/preprocessing/plot_map_data_to_normal.html#sphx-glr-auto-examples-preprocessing-plot-map-data-to-normal-py) + +On “small” datasets (less than a few hundred points), the quantile transformer is prone to overfitting. The use of the power transform is then recommended. + + + + +### 3.5 Feature Generation + +**Definition**: Creating new features as a combination of existing ones. It's a great way to add domain knowledge to the dataset. + +#### 3.5.1 Missing Data Derived Feature + +As mentioned in section 2.1, we can create new binary feature denoting whether the observations have missing value on raw feature with value 0/1. + +#### 3.5.2 Simple Statistical Derived Feature + +Creating new features by performing simple statistical calculations on the raw features, including: + + - count/sum + - average/median/mode + - max/min/stddev/variance/range/IQR/Coefficient of Variation + - time span/interval + +Take call log for example, we can create new features like: number of calls, number of call-in/call-out, average calling duration, monthly average calling duration, max calling duration, etc. + +#### 3.5.3 Feature Crossing + +After having some simple statistical derived features, we can have them crossed together. Common dimensions used for crossing include: + +- time +- region +- business types + +Still take call log for example, we can have crossed features like: number of calls during night times/day times, number of calls under different business types (banks/taxi services/travelling/hospitalities), number of calls during the past 3 months, etc. Many of the statistical calculations mentioned in section 3.5.2 can be used again to create more features. + +**Note**: An open-source python framework named **Featuretools** that helps automatically generate such features can be found [here](https://github.com/Featuretools/featuretools). + +![featuretools](images/featuretools.png) + +Personally I haven't used it in practice. You may try and discover if it can be of industry usage. + +#### 3.5.4 Ratios and Proportions + +Common techniques. For example, in order to predict future performance of credit card sales of a branch, ratios like credit card sales / sales person or credit card sales / marketing spend would be more powerful than just using absolute number of card sold in the branch. + +#### 3.5.5 Cross Products between Categorical Features + +Consider a categorical feature A, with two possible values {A1, A2}. Let B be a feature with possibilities {B1, B2}. Then, a feature-cross between A & B would take one of the following values: {(A1, B1), (A1, B2), (A2, B1), (A2, B2)}. You can basically give these ‘combinations’ any names you like. Just remember that every combination denotes a synergy between the information contained by the corresponding values of A and B. + +This is an extremely useful technique, when certain features together denote a property better than individually by themselves. Mathematically speaking, you are doing a cross product between all possible values of the categorical features. The concepts is similar to Feature Crossing of section 3.5.3, but this one particularly refers to the crossing between 2 categorical features. + +#### 3.5.6 Polynomial Expansion + +The cross product can also be applied to numerical features, which results in a new interaction feature between A and B. This can be done easily be sklearn's [PolynomialFeatures](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeatures.html#sklearn.preprocessing.PolynomialFeatures), which generate a new feature set consisting of all polynomial combinations of the features with degree less than or equal to the specified degree. For example, three raw features {X1, X2, X3} can generate a feature set of {1, X1X2, X1X3, X2X3, X1X2X3} with a degree of 2. + +#### 3.5.7 Feature Learning by Trees + +In tree-based algorithms, each sample will be assigned to a particular leaf node. The decision path to each node can be seen as a new non-linear feature, and we can create N new binary features where n equals to the total number of leaf nodes in a tree or tree ensembles. The features can then be fed into other algorithms such as logistic regression. + +The idea of using tree algorithm to generate new features is first introduced by Facebook in this [paper](http://quinonero.net/Publications/predicting-clicks-facebook.pdf). + +The good things about this method is that we can get a complex combinations of several features together, which is informative (as is constructed by the tree's learning algorithm). This saves us much time compared to doing feature crossing manually, and is widely used in CTR (click-through rate) of online advertising industry. + +#### 3.5.8 Feature Learning by Deep Networks + +As we can see from all above, feature generation by manual takes lots of effort and may not guarantee good returns, particular when we have huge amounts of features to work with. Feature learning with trees can be seen as an early attempt in creating features automatically, and with the deep learning methods come into fashion from around 2016, they also have achieved some success in this area, such as **autoencoders** and **restricted Boltzmann machines**. They have been shown to automatically and in a unsupervised or semi-supervised way, learn abstract representations of features (a compressed form), that in turn have supported state-of-the-art results in domains such as speech recognition, image classification, object recognition and other areas. However, such features have limited interpretability and deep learning require much more data to be able to extract high quality result. + + + + + +## 4. Feature Selection + +**Definition**: Feature Selection is the process of selecting a subset of relevant features for use in machine learning model building. + +It is not always the truth that the more data, the better the result will be. Including irrelevant features (the ones that are just unhelpful to the prediction) and redundant features (irrelevant in the presence of others) will only make the learning process overwhelmed and easy to cause overfitting. + +With feature selection, we can have: + +- simplification of models to make them easier to interpret +- shorter training times and lesser computational cost +- lesser cost in data collection +- avoid the curse of dimensionality +- enhanced generalization by reducing overfitting + +We should keep in mind that different feature subsets render optimal performance for different algorithms. So it's not a separate process along with the machine learning model training. Therefore, if we are selecting features for a linear model, it is better to use selection procedures targeted to those models, like importance by regression coefficient or Lasso. And if we are selecting features for trees, it is better to use tree derived importance. + + + +### 4.1 Filter Method + +Filter methods select features based on a performance measure regardless of the ML algorithm later employed. + +Univariate filters evaluate and rank a single feature according to a certain criteria, while multivariate filters evaluate the entire feature space. Filter methods are: + +- selecting variable regardless of the model +- less computationally expensive +- usually give lower prediction performance + +As a result, filter methods are suited for a first step quick screen and removal of irrelevant features. + +| Method | Definition | +| ------------------------- | ------------------------------------------------------------ | +| Variance | removing features that show the same value for the majority/all of the observations (constant/quasi-constant features) | +| Correlation | remove features that are highly correlated with each other | +| Chi-Square | Compute chi-squared stats between each non-negative feature and class | +| Mutual Information Filter | Mutual information measures how much information the presence/absence of a feature contributes to making the correct prediction on Y. | +| Univariate ROC-AUC or MSE | builds one decision tree per feature, to predict the target, then make predictions and ranks the features according to the machine learning metric (roc-auc or mse) | +| Information Value (IV) | a byproduct of WOE.
IV = Σ(Proportion of Good Outcomes - Proportion of Bad Outcomes) * WOE | + +WOE encoding (see section 3.3.2) and IV often go hand in hand in scorecard development. The two concepts both derived from logistic regression and is kind of standard practice in credit card industry. IV is a popular and widely used measure as there are very convenient rules of thumb for variables selection associated with IV as below: + +![sphx_glr_plot_map_data_to_normal_001](.\images\IV.png) + +However, all these filtering methods fail to consider the interaction between features and may reduce our predict power. Personally I only use variance and correlation to filter some absolutely unnecessary features. + + + +**Note**: One thing to keep in mind when using chi-square test or univariate selection methods, is that in very big datasets, most of the features will show a small p_value, and therefore look like they are highly predictive. This is in fact an effect of the sample size. So care should be taken when selecting features using these procedures. An ultra tiny p_value does not highlight an ultra-important feature, it rather indicates that the dataset contains too many samples. + +**Note**: Correlated features do not necessarily affect model performance (trees, etc), but high dimensionality does and too many features hurt model interpretability. So it's always better to reduce correlated features. + + + +### 4.2 Wrapper Method + +Wrappers use a search strategy to search through the space of possible feature subsets and evaluate each subset by the quality of the performance on a ML algorithm. Practically any combination of search strategy and algorithm can be used as a wrapper. It is featured as: + +- use ML models to score the feature subset +- train a new model on each subset +- very computationally expensive +- usually provide the best performing subset for a give ML algorithm, but probably not for another +- need an arbitrary defined stopping criteria + +The most common **search strategy** group is Sequential search, including Forward Selection, Backward Elimination and Exhaustive Search. Randomized search is another popular choice, including Evolutionary computation algorithms such as genetic, and Simulated annealing. + +Another key element in wrappers is **stopping criteria**. When to stop the search? In general there're three: + +- performance increase +- performance decrease +- predefined number of features is reached + + + +#### 4.2.1 Forward Selection + +Step forward feature selection starts by evaluating all features individually and selects the one that generates the best performing algorithm, according to a pre-set evaluation criteria. In the second step, it evaluates all possible combinations of the selected feature and a second feature, and selects the pair that produce the best performing algorithm based on the same pre-set criteria. + +The pre-set criteria can be the roc_auc for classification and the r squared for regression for example. + +This selection procedure is called greedy, because it evaluates all possible single, double, triple and so on feature combinations. Therefore, it is quite computationally expensive, and sometimes, if feature space is big, even unfeasible. + +There is a special package for python that implements this type of feature selection: [mlxtend](https://github.com/rasbt/mlxtend). + +#### 4.2.2 Backward Elimination + +Step backward feature selection starts by fitting a model using all features. Then it removes one feature. It will remove the one that produces the highest performing algorithm (least statistically significant) for a certain evaluation criteria. In the second step, it will remove a second feature, the one that again produces the best performing algorithm. And it proceeds, removing feature after feature, until a certain criteria is met. + +The pre-set criteria can be the roc_auc for classification and the r squared for regression for example. + +#### 4.2.3 Exhaustive Feature Selection + +In an exhaustive feature selection the best subset of features is selected, over all possible feature subsets, by optimizing a specified performance metric for a certain machine learning algorithm. For example, if the classifier is a logistic regression and the dataset consists of **4** features, the algorithm will evaluate all **15** feature combinations as follows: + +- all possible combinations of 1 feature +- all possible combinations of 2 features +- all possible combinations of 3 features +- all the 4 features + +and select the one that results in the best performance (e.g., classification accuracy) of the logistic regression classifier. + +This exhaustive search is very computationally expensive. In practice for this computational cost, it is rarely used. + +#### 4.2.4 Genetic Algorithm + +TODO + + + +### 4.3 Embedded Method + +Embedded Method combine the advantages of the filter and wrapper methods. A learning algorithm takes advantage of its own variable selection process and performs feature selection and classification at same time. Common embedded methods include Lasso and various types of tree-based algorithms. It is featured as: + +- perform feature selection as part of the model building process +- consider interactions between features +- less computationally expensive as it only train the model once, compared to Wrappers +- usually provide the best performing subset for a give ML algorithm, but probably not for another + + + +#### 4.3.1 Regularization with Lasso + +Regularization consists in adding a penalty to the different parameters of the machine learning model to reduce the freedom of the model. Hence, the model will be less likely to fit the noise of the training data so less likely to be overfitting. + +In linear model regularization, the penalty is applied over the coefficients that multiply each of the predictors. For linear models there are in general 3 types of regularization: + +- L1 regularization (Lasso) +- L2 regularization (Ridge) +- L1/L2 (Elastic net) + +From the different types of regularization, **Lasso (L1)** has the property that is able to shrink some of the coefficients to zero. Therefore, that feature can be removed from the model. + +Both for linear and logistic regression we can use the Lasso regularization to remove non-important features. Keep in mind that increasing the penalization will increase the number of features removed. Therefore, you will need to keep an eye and monitor that you don't set a penalty too high so that to remove even important features, or too low and then not remove non-important features. + +Having said this, if the penalty is too high and important features are removed, you should notice a drop in the performance of the algorithm and then realize that you need to decrease the regularization. + +Regularization is a large topic. For for information you can refer to here: + +- [Least angle and l1 penalised regression: A review](https://projecteuclid.org/download/pdfview_1/euclid.ssu/1211317636) +- [Penalised feature selection and classification in bioinformatics](https://www.ncbi.nlm.nih.gov/pubmed/18562478) +- [Feature selection for classification: A review](https://web.archive.org/web/20160314145552/http://www.public.asu.edu/~jtang20/publication/feature_selection_for_classification.pdf) + +- [Machine Learning Explained: Regularization](https://www.r-bloggers.com/machine-learning-explained-regularization/) + + + +#### 4.3.2 Random Forest Importance + +Random forests are one of the most popular machine learning algorithms. They are so successful because they provide in general a good predictive performance, low overfitting and easy interpretability. This interpretability is given by the fact that it is straightforward to derive the importance of each variable on the tree decision. In other words, it is easy to compute how much each variable is contributing to the decision. + +Random forest is a bagging algorithm consists a bunch of base estimators (decision trees), each of them built over a random extraction of the observations from the dataset and a random extraction of the features. Not every tree sees all the features or all the observations, and this guarantees that the trees are **de-correlated** and therefore **less prone to over-fitting.** + +Each tree is also a sequence of yes-no questions based on a single or combination of features. At each split, the question divides the dataset into 2 buckets, each of them hosting observations that are more similar among themselves and different from the ones in the other bucket. Therefore, the importance of each feature is derived by how "**pure**" each of the buckets is. + +For classification, the measure of impurity is either the **Gini impurity** or the **information gain/entropy**. For regression the measure of impurity is **variance**. Therefore, when training a tree, it is possible to compute how much each feature decreases the impurity. The more a feature decreases the impurity, the more important the feature is. In random forests, the impurity decrease from each feature can be averaged across trees to determine the final importance of the variable. + +Selecting features by using tree derived feature importance is a very straightforward, fast and generally accurate way of selecting good features for machine learning. In particular, if you are going to build tree methods. + +However, correlated features will show in a tree similar and lowered importance, compared to what their importance would be if the tree was built without correlated counterparts. + +**Limitation** + +- correlated features show similar importance + +- correlated features importance is lower than real importance, when tree is build without its correlated counterparts + +- high carinal variable tend to show higher importance + + +#### 4.3.3 Gradient Boosted Trees Importance + +Similarly to selecting features using Random Forests derived feature importance, we can select features based on the importance derived by gradient boosted trees. And we can do that in one go, or in a recursive manner, depending on how much time we have, how many features are in the dataset, and whether they are correlated or not. + + + +### 4.4 Feature Shuffling + +A popular method of feature selection consists in random shuffling the values of a specific variable and determining how that permutation affects the performance metric of the machine learning algorithm. In other words, the idea is to permute the values of each feature, one at the time, and measure how much the permutation decreases the accuracy, or the roc_auc, or the mse of the machine learning model. If the variables are important, this is, highly predictive, a random permutation of their values will decrease dramatically any of these metrics. Contrarily, non-important / non-predictive variables, should have little to no effect on the model performance metric we are assessing. + + + +### 4.5 Hybrid Method + +#### 4.5.1 Recursive Feature Elimination + +This method consists of the following steps: + +1. Rank the features according to their importance derived from a machine learning algorithm: it can be tree importance, or LASSO / Ridge, or the linear / logistic regression coefficients. +2. Remove one feature -the least important- and build a machine learning algorithm utilizing the remaining features. + +3. Calculate a performance metric of your choice: roc-auc, mse, rmse, accuracy. +4. If the metric decreases by more of an arbitrarily set threshold, then that feature is important and should be kept. Otherwise, we can remove that feature. +5. Repeat steps 2-4 until all features have been removed (and therefore evaluated) and the drop in performance assessed. + +The method combines the selection process like wrappers and feature importance derivation from ML models like embedded methods so it's called hybrid. + +The difference between this method and the step backwards feature selection lies in that it does not remove all features first in order to determine which one to remove. It removes the least important one, based on the machine learning model derived importance. And then, it makes an assessment as to whether that feature should be removed or not. So it removes each feature only once during selection, whereas step backward feature selection removes all the features at each step of selection. + +This method is therefore faster than wrapper methods and generally better than embedded methods. In practice it works extremely well. It does also account for correlations (depending on how stringent you set the arbitrary performance drop threshold). On the downside, the drop in performance assessed to decide whether the feature should be kept or removed, is set arbitrarily. The smaller the drop the more features will be selected, and vice versa. + + + +**Example: Recursive Feature Elimination with Random Forests Importance** + +As we talked about in section 4.3.2, Random Forests assign equal or similar importance to features that are highly correlated. In addition, when features are correlated, the importance assigned is lower than the importance attributed to the feature itself, should the tree be built without the correlated counterparts. + +Therefore, instead of eliminating features based on importance **at one time** (from all initial features), we may get a better selection by removing one feature **recursively**, and recalculating the importance on each round. + +In this situation, when a feature that is highly correlated to another one is removed, then, the importance of the remaining feature increases. This may lead to a better subset feature space selection. On the downside, building several random forests is quite time consuming, in particular if the dataset contains a high number of features. + +#### 4.5.2 Recursive Feature Addition + +This method consists of the following steps: + +1. Rank the features according to their importance derived from a machine learning algorithm: it can be tree importance, or LASSO / Ridge, or the linear / logistic regression coefficients. +2. Build a machine learning model with only 1 feature, the most important one, and calculate the model metric for performance. + +3. Add one feature -the most important- and build a machine learning algorithm utilizing the added and any feature from previous rounds. + +4. Calculate a performance metric of your choice: roc-auc, mse, rmse, accuracy. + +5. If the metric increases by more than an arbitrarily set threshold, then that feature is important and should be kept. Otherwise, we can remove that feature. + +6. Repeat steps 2-5 until all features have been removed (and therefore evaluated) and the drop in performance assessed. + +The difference between this method and the step forward feature selection is similar. It does not look for all features first in order to determine which one to add, so it's faster than wrappers. + + + +### 4.6 Dimensionality Reduction + +- PCA(主成分分析) + +- SVD(奇异值分解) + + + + + +## 5. Data Leakage + +This section is a remainder to myself as I have had made huge mistakes because of not aware of the problem. Data leakage is when information from outside the training dataset is used to create the model[^15]. The result is that you may be creating overly optimistic models that are practically useless and cannot be used in production. The model shows great result on both your training and testing data but in fact it's not because your model really has a good generalizability but it uses information from the test data. + +While it is well known to use cross-validation or at least separate a validation set in training and evaluating the models, people may easily forget to do the same during the feature engineering & selection process. Keep in mind that the test dataset must not be used in any way to make choices about the model, including feature engineering & selection. + + + +------ + +**Reference** + +[^1]: http://www.simonqueenborough.info/R/basic/missing-data +[^2]: Rubin, D. B. (1976). Inference and missing data. Biometrika 63(3): 581-592. +[^3]: D. Hawkins. Identification of Outliers, Chapman and Hall , 1980. +[^4]: https://www.springer.com/gp/book/9781461463955 +[^5]: https://github.com/yzhao062/pyod +[^6]: https://docs.oracle.com/cd/E40248_01/epm.1112/cb_statistical/frameset.htm?ch07s02s10s01.html +[^7]: https://www.academia.edu/5324493/Detecting_outliers_Do_not_use_standard_deviation_around_the_mean_use_absolute_deviation_around_the_median +[^8]: https://www.purplemath.com/modules/boxwhisk3.htm +[^9]: http://documentation.statsoft.com/StatisticaHelp.aspx?path=WeightofEvidence/WeightofEvidenceWoEIntroductoryOverview +[^10]: A Preprocessing Scheme for High-Cardinality Categorical Attributes in Classification and Prediction Problems. https://kaggle2.blob.core.windows.net/forum-message-attachments/225952/7441/high%20cardinality%20categoricals.pdf +[^11]: https://www.aaai.org/Papers/AAAI/1992/AAAI92-019.pdf +[^12]: http://onlinestatbook.com/2/transformations/box-cox.html +[^13]: https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PowerTransformer.html#sklearn.preprocessing.PowerTransformer +[^14]: https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.QuantileTransformer.html#sklearn.preprocessing.QuantileTransformer +[^15]: https://machinelearningmastery.com/data-leakage-machine-learning/ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..d17e2e4 --- /dev/null +++ b/README.md @@ -0,0 +1,204 @@ +# Feature Engineering & Feature Selection + +## About + +A comprehensive [guide]() for **Feature Engineering** and **Feature Selection**, with implementations and examples in Python. + + + +## What You'll Learn + +Not only a collection of hands-on functions, but also explanation on **Why**, **How** and **When** to adopt **Which** techniques of feature engineering in data mining. + +- the nature and risk of data problem we often encounter +- explanation of the various feature engineering & selection techniques +- rationale to use it +- pros & cons of each method +- code & example + + + +## Getting Started + +This repo is mainly used as a reference for anyone who are doing feature engineering, and most of the modules are implemented through scikit-learn or its communities. + +To run the demos or use the customized function, please download the ZIP file from the repo or just copy-paste any part of the code you find helpful. They should all be very easy to understand. + +**Required Dependencies**: + +- Python 3.5, 3.6 or 3.7 +- numpy>=1.15 +- pandas>=0.23 +- scipy>=1.1.0 +- scikit_learn>=0.20.1 +- seaborn>=0.9.0 + + + +## Table of Contents and Code Examples + +Below is a list of methods currently implemented in the repo. The complete guide can be found [here](). + +**1. Data Exploration** + + 1.1 Variables + 1.2 Variable Identification + ​ Check Data Types + 1.3 Univariate Analysis + ​ Descriptive Analysis + ​ Discrete Variable Barplot + ​ Discrete Variable Countplot + ​ Discrete Variable Boxplot + ​ Continuous Variable Distplot + 1.4 Bi-variate Analysis + ​ Scatter Plot + ​ Correlation Plot + ​ Heat Map + +**2. Feature Cleaning** + + 2.1 Missing Values + ​ Missing Value Check + ​ Listwise Deletion + ​ Mean/Median/Mode Imputation + ​ End of distribution Imputation + ​ Random Imputation + ​ Arbitrary Value Imputation + ​ Add a variable to denote NA + 2.2 Outliers + ​ Detect by Arbitrary Boundary + ​ Detect by Mean & Standard Deviation + ​ Detect by IQR + ​ Detect by MAD + ​ Mean/Median/Mode Imputation + ​ Discretization + ​ Imputation with Arbitrary Value + ​ Windsorization + ​ Discard Outliers + 2.3 Rare Values + ​ Mode Imputation + ​ Grouping into One New Category + 2.4 High Cardinality + ​ Grouping Labels with Business Understanding + ​ Grouping Labels with Rare Occurrence into One Category + ​ Grouping Labels with Decision Tree + +**3. Feature Engineering** + + 3.1 Feature Scaling + ​ Normalization - Standardization + ​ Min-Max Scaling + ​ Robust Scaling + 3.2 Discretize + ​ Equal Width Binning + ​ Equal Frequency Binning + ​ K-means Binning + ​ Discretization by Decision Trees + ​ ChiMerge + 3.3 Feature Encoding + ​ One-hot Encoding + ​ Ordinal-Encoding + ​ Count/frequency Encoding + ​ Mean Encoding + ​ WOE Encoding + ​ Target Encoding + 3.4 Feature Transformation + ​ Logarithmic Transformation + ​ Reciprocal Transformation + ​ Square Root Transformation + ​ Exponential Transformation + ​ Box-cox Transformation + ​ Quantile Transformation + 3.5 Feature Generation + ​ Missing Data Derived + ​ Simple Stats + ​ Crossing + ​ Ratio & Proportion + ​ Cross Product + ​ Polynomial + ​ Feature Leanring by Tree + ​ Feature Leanring by Deep Network + +**4. Feature Selection** + + 4.1 Filter Method + ​ Variance + ​ Correlation + ​ Chi-Square + ​ Mutual Information Filter + ​ Univariate ROC-AUC or MSE + ​ Information Value (IV) + 4.2 Wrapper Method + ​ Forward Selection + ​ Backward Elimination + ​ Exhaustive Feature Selection + ​ Genetic Algorithm + 4.3 Embedded Method + ​ Lasso (L1) + ​ Random Forest Importance + ​ Gradient Boosted Trees Importance + 4.4 Feature Shuffling + ​ Random Shuffling + 4.5 Hybrid Method + ​ Recursive Feature Selection + ​ Recursive Feature Addition + + + + +## Motivation + +Feature Engineering & Selection is the most essential part of building a useable machine learning project, even though hundreds of cutting-edge machine learning algorithms coming in these days like deep learning and transfer learning. Indeed, like what Prof Domingos, the author of  *'The Master Algorithm'* says: + +> “At the end of the day, some machine learning projects succeed and some fail. What makes the difference? Easily the most important factor is the features used.” +> +> — Prof. Pedro Domingos + +![001](./images/001.png) +Data and feature determine the upper limit of a ML project, while models and algorithms are just approaching that limit. However, few materials could be found that systematically introduce the art of feature engineering, and even fewer could explain the rationale behind. This repo aims at teaching you a good guide for Feature Engineering & Selection. + + + +## Key Links and Resources + +- Udemy's Feature Engineering online course + +https://www.udemy.com/feature-engineering-for-machine-learning/ + +- Udemy's Feature Selection online course + +https://www.udemy.com/feature-selection-for-machine-learning + +- JMLR Special Issue on Variable and Feature Selection + +http://jmlr.org/papers/special/feature03.html + +- Data Analysis Using Regression and Multilevel/Hierarchical Models, Chapter 25: Missing data + +http://www.stat.columbia.edu/~gelman/arm/missing.pdf + +- Data mining and the impact of missing data + +http://core.ecu.edu/omgt/krosj/IMDSDataMining2003.pdf + +- PyOD: A Python Toolkit for Scalable Outlier Detection + +https://github.com/yzhao062/pyod + +- Weight of Evidence (WoE) Introductory Overview + +http://documentation.statsoft.com/StatisticaHelp.aspx?path=WeightofEvidence/WeightofEvidenceWoEIntroductoryOverview + +- About Feature Scaling and Normalization + +http://sebastianraschka.com/Articles/2014_about_feature_scaling.html + +- Feature Generation with RF, GBDT and Xgboost + +https://blog.csdn.net/anshuai_aw1/article/details/82983997 + +- A review of feature selection methods with applications + +https://ieeexplore.ieee.org/iel7/7153596/7160221/07160458.pdf + + diff --git a/data/housing.data.txt b/data/housing.data.txt new file mode 100644 index 0000000..b488787 --- /dev/null +++ b/data/housing.data.txt @@ -0,0 +1,506 @@ + 0.00632 18.00 2.310 0 0.5380 6.5750 65.20 4.0900 1 296.0 15.30 396.90 4.98 24.00 + 0.02731 0.00 7.070 0 0.4690 6.4210 78.90 4.9671 2 242.0 17.80 396.90 9.14 21.60 + 0.02729 0.00 7.070 0 0.4690 7.1850 61.10 4.9671 2 242.0 17.80 392.83 4.03 34.70 + 0.03237 0.00 2.180 0 0.4580 6.9980 45.80 6.0622 3 222.0 18.70 394.63 2.94 33.40 + 0.06905 0.00 2.180 0 0.4580 7.1470 54.20 6.0622 3 222.0 18.70 396.90 5.33 36.20 + 0.02985 0.00 2.180 0 0.4580 6.4300 58.70 6.0622 3 222.0 18.70 394.12 5.21 28.70 + 0.08829 12.50 7.870 0 0.5240 6.0120 66.60 5.5605 5 311.0 15.20 395.60 12.43 22.90 + 0.14455 12.50 7.870 0 0.5240 6.1720 96.10 5.9505 5 311.0 15.20 396.90 19.15 27.10 + 0.21124 12.50 7.870 0 0.5240 5.6310 100.00 6.0821 5 311.0 15.20 386.63 29.93 16.50 + 0.17004 12.50 7.870 0 0.5240 6.0040 85.90 6.5921 5 311.0 15.20 386.71 17.10 18.90 + 0.22489 12.50 7.870 0 0.5240 6.3770 94.30 6.3467 5 311.0 15.20 392.52 20.45 15.00 + 0.11747 12.50 7.870 0 0.5240 6.0090 82.90 6.2267 5 311.0 15.20 396.90 13.27 18.90 + 0.09378 12.50 7.870 0 0.5240 5.8890 39.00 5.4509 5 311.0 15.20 390.50 15.71 21.70 + 0.62976 0.00 8.140 0 0.5380 5.9490 61.80 4.7075 4 307.0 21.00 396.90 8.26 20.40 + 0.63796 0.00 8.140 0 0.5380 6.0960 84.50 4.4619 4 307.0 21.00 380.02 10.26 18.20 + 0.62739 0.00 8.140 0 0.5380 5.8340 56.50 4.4986 4 307.0 21.00 395.62 8.47 19.90 + 1.05393 0.00 8.140 0 0.5380 5.9350 29.30 4.4986 4 307.0 21.00 386.85 6.58 23.10 + 0.78420 0.00 8.140 0 0.5380 5.9900 81.70 4.2579 4 307.0 21.00 386.75 14.67 17.50 + 0.80271 0.00 8.140 0 0.5380 5.4560 36.60 3.7965 4 307.0 21.00 288.99 11.69 20.20 + 0.72580 0.00 8.140 0 0.5380 5.7270 69.50 3.7965 4 307.0 21.00 390.95 11.28 18.20 + 1.25179 0.00 8.140 0 0.5380 5.5700 98.10 3.7979 4 307.0 21.00 376.57 21.02 13.60 + 0.85204 0.00 8.140 0 0.5380 5.9650 89.20 4.0123 4 307.0 21.00 392.53 13.83 19.60 + 1.23247 0.00 8.140 0 0.5380 6.1420 91.70 3.9769 4 307.0 21.00 396.90 18.72 15.20 + 0.98843 0.00 8.140 0 0.5380 5.8130 100.00 4.0952 4 307.0 21.00 394.54 19.88 14.50 + 0.75026 0.00 8.140 0 0.5380 5.9240 94.10 4.3996 4 307.0 21.00 394.33 16.30 15.60 + 0.84054 0.00 8.140 0 0.5380 5.5990 85.70 4.4546 4 307.0 21.00 303.42 16.51 13.90 + 0.67191 0.00 8.140 0 0.5380 5.8130 90.30 4.6820 4 307.0 21.00 376.88 14.81 16.60 + 0.95577 0.00 8.140 0 0.5380 6.0470 88.80 4.4534 4 307.0 21.00 306.38 17.28 14.80 + 0.77299 0.00 8.140 0 0.5380 6.4950 94.40 4.4547 4 307.0 21.00 387.94 12.80 18.40 + 1.00245 0.00 8.140 0 0.5380 6.6740 87.30 4.2390 4 307.0 21.00 380.23 11.98 21.00 + 1.13081 0.00 8.140 0 0.5380 5.7130 94.10 4.2330 4 307.0 21.00 360.17 22.60 12.70 + 1.35472 0.00 8.140 0 0.5380 6.0720 100.00 4.1750 4 307.0 21.00 376.73 13.04 14.50 + 1.38799 0.00 8.140 0 0.5380 5.9500 82.00 3.9900 4 307.0 21.00 232.60 27.71 13.20 + 1.15172 0.00 8.140 0 0.5380 5.7010 95.00 3.7872 4 307.0 21.00 358.77 18.35 13.10 + 1.61282 0.00 8.140 0 0.5380 6.0960 96.90 3.7598 4 307.0 21.00 248.31 20.34 13.50 + 0.06417 0.00 5.960 0 0.4990 5.9330 68.20 3.3603 5 279.0 19.20 396.90 9.68 18.90 + 0.09744 0.00 5.960 0 0.4990 5.8410 61.40 3.3779 5 279.0 19.20 377.56 11.41 20.00 + 0.08014 0.00 5.960 0 0.4990 5.8500 41.50 3.9342 5 279.0 19.20 396.90 8.77 21.00 + 0.17505 0.00 5.960 0 0.4990 5.9660 30.20 3.8473 5 279.0 19.20 393.43 10.13 24.70 + 0.02763 75.00 2.950 0 0.4280 6.5950 21.80 5.4011 3 252.0 18.30 395.63 4.32 30.80 + 0.03359 75.00 2.950 0 0.4280 7.0240 15.80 5.4011 3 252.0 18.30 395.62 1.98 34.90 + 0.12744 0.00 6.910 0 0.4480 6.7700 2.90 5.7209 3 233.0 17.90 385.41 4.84 26.60 + 0.14150 0.00 6.910 0 0.4480 6.1690 6.60 5.7209 3 233.0 17.90 383.37 5.81 25.30 + 0.15936 0.00 6.910 0 0.4480 6.2110 6.50 5.7209 3 233.0 17.90 394.46 7.44 24.70 + 0.12269 0.00 6.910 0 0.4480 6.0690 40.00 5.7209 3 233.0 17.90 389.39 9.55 21.20 + 0.17142 0.00 6.910 0 0.4480 5.6820 33.80 5.1004 3 233.0 17.90 396.90 10.21 19.30 + 0.18836 0.00 6.910 0 0.4480 5.7860 33.30 5.1004 3 233.0 17.90 396.90 14.15 20.00 + 0.22927 0.00 6.910 0 0.4480 6.0300 85.50 5.6894 3 233.0 17.90 392.74 18.80 16.60 + 0.25387 0.00 6.910 0 0.4480 5.3990 95.30 5.8700 3 233.0 17.90 396.90 30.81 14.40 + 0.21977 0.00 6.910 0 0.4480 5.6020 62.00 6.0877 3 233.0 17.90 396.90 16.20 19.40 + 0.08873 21.00 5.640 0 0.4390 5.9630 45.70 6.8147 4 243.0 16.80 395.56 13.45 19.70 + 0.04337 21.00 5.640 0 0.4390 6.1150 63.00 6.8147 4 243.0 16.80 393.97 9.43 20.50 + 0.05360 21.00 5.640 0 0.4390 6.5110 21.10 6.8147 4 243.0 16.80 396.90 5.28 25.00 + 0.04981 21.00 5.640 0 0.4390 5.9980 21.40 6.8147 4 243.0 16.80 396.90 8.43 23.40 + 0.01360 75.00 4.000 0 0.4100 5.8880 47.60 7.3197 3 469.0 21.10 396.90 14.80 18.90 + 0.01311 90.00 1.220 0 0.4030 7.2490 21.90 8.6966 5 226.0 17.90 395.93 4.81 35.40 + 0.02055 85.00 0.740 0 0.4100 6.3830 35.70 9.1876 2 313.0 17.30 396.90 5.77 24.70 + 0.01432 100.00 1.320 0 0.4110 6.8160 40.50 8.3248 5 256.0 15.10 392.90 3.95 31.60 + 0.15445 25.00 5.130 0 0.4530 6.1450 29.20 7.8148 8 284.0 19.70 390.68 6.86 23.30 + 0.10328 25.00 5.130 0 0.4530 5.9270 47.20 6.9320 8 284.0 19.70 396.90 9.22 19.60 + 0.14932 25.00 5.130 0 0.4530 5.7410 66.20 7.2254 8 284.0 19.70 395.11 13.15 18.70 + 0.17171 25.00 5.130 0 0.4530 5.9660 93.40 6.8185 8 284.0 19.70 378.08 14.44 16.00 + 0.11027 25.00 5.130 0 0.4530 6.4560 67.80 7.2255 8 284.0 19.70 396.90 6.73 22.20 + 0.12650 25.00 5.130 0 0.4530 6.7620 43.40 7.9809 8 284.0 19.70 395.58 9.50 25.00 + 0.01951 17.50 1.380 0 0.4161 7.1040 59.50 9.2229 3 216.0 18.60 393.24 8.05 33.00 + 0.03584 80.00 3.370 0 0.3980 6.2900 17.80 6.6115 4 337.0 16.10 396.90 4.67 23.50 + 0.04379 80.00 3.370 0 0.3980 5.7870 31.10 6.6115 4 337.0 16.10 396.90 10.24 19.40 + 0.05789 12.50 6.070 0 0.4090 5.8780 21.40 6.4980 4 345.0 18.90 396.21 8.10 22.00 + 0.13554 12.50 6.070 0 0.4090 5.5940 36.80 6.4980 4 345.0 18.90 396.90 13.09 17.40 + 0.12816 12.50 6.070 0 0.4090 5.8850 33.00 6.4980 4 345.0 18.90 396.90 8.79 20.90 + 0.08826 0.00 10.810 0 0.4130 6.4170 6.60 5.2873 4 305.0 19.20 383.73 6.72 24.20 + 0.15876 0.00 10.810 0 0.4130 5.9610 17.50 5.2873 4 305.0 19.20 376.94 9.88 21.70 + 0.09164 0.00 10.810 0 0.4130 6.0650 7.80 5.2873 4 305.0 19.20 390.91 5.52 22.80 + 0.19539 0.00 10.810 0 0.4130 6.2450 6.20 5.2873 4 305.0 19.20 377.17 7.54 23.40 + 0.07896 0.00 12.830 0 0.4370 6.2730 6.00 4.2515 5 398.0 18.70 394.92 6.78 24.10 + 0.09512 0.00 12.830 0 0.4370 6.2860 45.00 4.5026 5 398.0 18.70 383.23 8.94 21.40 + 0.10153 0.00 12.830 0 0.4370 6.2790 74.50 4.0522 5 398.0 18.70 373.66 11.97 20.00 + 0.08707 0.00 12.830 0 0.4370 6.1400 45.80 4.0905 5 398.0 18.70 386.96 10.27 20.80 + 0.05646 0.00 12.830 0 0.4370 6.2320 53.70 5.0141 5 398.0 18.70 386.40 12.34 21.20 + 0.08387 0.00 12.830 0 0.4370 5.8740 36.60 4.5026 5 398.0 18.70 396.06 9.10 20.30 + 0.04113 25.00 4.860 0 0.4260 6.7270 33.50 5.4007 4 281.0 19.00 396.90 5.29 28.00 + 0.04462 25.00 4.860 0 0.4260 6.6190 70.40 5.4007 4 281.0 19.00 395.63 7.22 23.90 + 0.03659 25.00 4.860 0 0.4260 6.3020 32.20 5.4007 4 281.0 19.00 396.90 6.72 24.80 + 0.03551 25.00 4.860 0 0.4260 6.1670 46.70 5.4007 4 281.0 19.00 390.64 7.51 22.90 + 0.05059 0.00 4.490 0 0.4490 6.3890 48.00 4.7794 3 247.0 18.50 396.90 9.62 23.90 + 0.05735 0.00 4.490 0 0.4490 6.6300 56.10 4.4377 3 247.0 18.50 392.30 6.53 26.60 + 0.05188 0.00 4.490 0 0.4490 6.0150 45.10 4.4272 3 247.0 18.50 395.99 12.86 22.50 + 0.07151 0.00 4.490 0 0.4490 6.1210 56.80 3.7476 3 247.0 18.50 395.15 8.44 22.20 + 0.05660 0.00 3.410 0 0.4890 7.0070 86.30 3.4217 2 270.0 17.80 396.90 5.50 23.60 + 0.05302 0.00 3.410 0 0.4890 7.0790 63.10 3.4145 2 270.0 17.80 396.06 5.70 28.70 + 0.04684 0.00 3.410 0 0.4890 6.4170 66.10 3.0923 2 270.0 17.80 392.18 8.81 22.60 + 0.03932 0.00 3.410 0 0.4890 6.4050 73.90 3.0921 2 270.0 17.80 393.55 8.20 22.00 + 0.04203 28.00 15.040 0 0.4640 6.4420 53.60 3.6659 4 270.0 18.20 395.01 8.16 22.90 + 0.02875 28.00 15.040 0 0.4640 6.2110 28.90 3.6659 4 270.0 18.20 396.33 6.21 25.00 + 0.04294 28.00 15.040 0 0.4640 6.2490 77.30 3.6150 4 270.0 18.20 396.90 10.59 20.60 + 0.12204 0.00 2.890 0 0.4450 6.6250 57.80 3.4952 2 276.0 18.00 357.98 6.65 28.40 + 0.11504 0.00 2.890 0 0.4450 6.1630 69.60 3.4952 2 276.0 18.00 391.83 11.34 21.40 + 0.12083 0.00 2.890 0 0.4450 8.0690 76.00 3.4952 2 276.0 18.00 396.90 4.21 38.70 + 0.08187 0.00 2.890 0 0.4450 7.8200 36.90 3.4952 2 276.0 18.00 393.53 3.57 43.80 + 0.06860 0.00 2.890 0 0.4450 7.4160 62.50 3.4952 2 276.0 18.00 396.90 6.19 33.20 + 0.14866 0.00 8.560 0 0.5200 6.7270 79.90 2.7778 5 384.0 20.90 394.76 9.42 27.50 + 0.11432 0.00 8.560 0 0.5200 6.7810 71.30 2.8561 5 384.0 20.90 395.58 7.67 26.50 + 0.22876 0.00 8.560 0 0.5200 6.4050 85.40 2.7147 5 384.0 20.90 70.80 10.63 18.60 + 0.21161 0.00 8.560 0 0.5200 6.1370 87.40 2.7147 5 384.0 20.90 394.47 13.44 19.30 + 0.13960 0.00 8.560 0 0.5200 6.1670 90.00 2.4210 5 384.0 20.90 392.69 12.33 20.10 + 0.13262 0.00 8.560 0 0.5200 5.8510 96.70 2.1069 5 384.0 20.90 394.05 16.47 19.50 + 0.17120 0.00 8.560 0 0.5200 5.8360 91.90 2.2110 5 384.0 20.90 395.67 18.66 19.50 + 0.13117 0.00 8.560 0 0.5200 6.1270 85.20 2.1224 5 384.0 20.90 387.69 14.09 20.40 + 0.12802 0.00 8.560 0 0.5200 6.4740 97.10 2.4329 5 384.0 20.90 395.24 12.27 19.80 + 0.26363 0.00 8.560 0 0.5200 6.2290 91.20 2.5451 5 384.0 20.90 391.23 15.55 19.40 + 0.10793 0.00 8.560 0 0.5200 6.1950 54.40 2.7778 5 384.0 20.90 393.49 13.00 21.70 + 0.10084 0.00 10.010 0 0.5470 6.7150 81.60 2.6775 6 432.0 17.80 395.59 10.16 22.80 + 0.12329 0.00 10.010 0 0.5470 5.9130 92.90 2.3534 6 432.0 17.80 394.95 16.21 18.80 + 0.22212 0.00 10.010 0 0.5470 6.0920 95.40 2.5480 6 432.0 17.80 396.90 17.09 18.70 + 0.14231 0.00 10.010 0 0.5470 6.2540 84.20 2.2565 6 432.0 17.80 388.74 10.45 18.50 + 0.17134 0.00 10.010 0 0.5470 5.9280 88.20 2.4631 6 432.0 17.80 344.91 15.76 18.30 + 0.13158 0.00 10.010 0 0.5470 6.1760 72.50 2.7301 6 432.0 17.80 393.30 12.04 21.20 + 0.15098 0.00 10.010 0 0.5470 6.0210 82.60 2.7474 6 432.0 17.80 394.51 10.30 19.20 + 0.13058 0.00 10.010 0 0.5470 5.8720 73.10 2.4775 6 432.0 17.80 338.63 15.37 20.40 + 0.14476 0.00 10.010 0 0.5470 5.7310 65.20 2.7592 6 432.0 17.80 391.50 13.61 19.30 + 0.06899 0.00 25.650 0 0.5810 5.8700 69.70 2.2577 2 188.0 19.10 389.15 14.37 22.00 + 0.07165 0.00 25.650 0 0.5810 6.0040 84.10 2.1974 2 188.0 19.10 377.67 14.27 20.30 + 0.09299 0.00 25.650 0 0.5810 5.9610 92.90 2.0869 2 188.0 19.10 378.09 17.93 20.50 + 0.15038 0.00 25.650 0 0.5810 5.8560 97.00 1.9444 2 188.0 19.10 370.31 25.41 17.30 + 0.09849 0.00 25.650 0 0.5810 5.8790 95.80 2.0063 2 188.0 19.10 379.38 17.58 18.80 + 0.16902 0.00 25.650 0 0.5810 5.9860 88.40 1.9929 2 188.0 19.10 385.02 14.81 21.40 + 0.38735 0.00 25.650 0 0.5810 5.6130 95.60 1.7572 2 188.0 19.10 359.29 27.26 15.70 + 0.25915 0.00 21.890 0 0.6240 5.6930 96.00 1.7883 4 437.0 21.20 392.11 17.19 16.20 + 0.32543 0.00 21.890 0 0.6240 6.4310 98.80 1.8125 4 437.0 21.20 396.90 15.39 18.00 + 0.88125 0.00 21.890 0 0.6240 5.6370 94.70 1.9799 4 437.0 21.20 396.90 18.34 14.30 + 0.34006 0.00 21.890 0 0.6240 6.4580 98.90 2.1185 4 437.0 21.20 395.04 12.60 19.20 + 1.19294 0.00 21.890 0 0.6240 6.3260 97.70 2.2710 4 437.0 21.20 396.90 12.26 19.60 + 0.59005 0.00 21.890 0 0.6240 6.3720 97.90 2.3274 4 437.0 21.20 385.76 11.12 23.00 + 0.32982 0.00 21.890 0 0.6240 5.8220 95.40 2.4699 4 437.0 21.20 388.69 15.03 18.40 + 0.97617 0.00 21.890 0 0.6240 5.7570 98.40 2.3460 4 437.0 21.20 262.76 17.31 15.60 + 0.55778 0.00 21.890 0 0.6240 6.3350 98.20 2.1107 4 437.0 21.20 394.67 16.96 18.10 + 0.32264 0.00 21.890 0 0.6240 5.9420 93.50 1.9669 4 437.0 21.20 378.25 16.90 17.40 + 0.35233 0.00 21.890 0 0.6240 6.4540 98.40 1.8498 4 437.0 21.20 394.08 14.59 17.10 + 0.24980 0.00 21.890 0 0.6240 5.8570 98.20 1.6686 4 437.0 21.20 392.04 21.32 13.30 + 0.54452 0.00 21.890 0 0.6240 6.1510 97.90 1.6687 4 437.0 21.20 396.90 18.46 17.80 + 0.29090 0.00 21.890 0 0.6240 6.1740 93.60 1.6119 4 437.0 21.20 388.08 24.16 14.00 + 1.62864 0.00 21.890 0 0.6240 5.0190 100.00 1.4394 4 437.0 21.20 396.90 34.41 14.40 + 3.32105 0.00 19.580 1 0.8710 5.4030 100.00 1.3216 5 403.0 14.70 396.90 26.82 13.40 + 4.09740 0.00 19.580 0 0.8710 5.4680 100.00 1.4118 5 403.0 14.70 396.90 26.42 15.60 + 2.77974 0.00 19.580 0 0.8710 4.9030 97.80 1.3459 5 403.0 14.70 396.90 29.29 11.80 + 2.37934 0.00 19.580 0 0.8710 6.1300 100.00 1.4191 5 403.0 14.70 172.91 27.80 13.80 + 2.15505 0.00 19.580 0 0.8710 5.6280 100.00 1.5166 5 403.0 14.70 169.27 16.65 15.60 + 2.36862 0.00 19.580 0 0.8710 4.9260 95.70 1.4608 5 403.0 14.70 391.71 29.53 14.60 + 2.33099 0.00 19.580 0 0.8710 5.1860 93.80 1.5296 5 403.0 14.70 356.99 28.32 17.80 + 2.73397 0.00 19.580 0 0.8710 5.5970 94.90 1.5257 5 403.0 14.70 351.85 21.45 15.40 + 1.65660 0.00 19.580 0 0.8710 6.1220 97.30 1.6180 5 403.0 14.70 372.80 14.10 21.50 + 1.49632 0.00 19.580 0 0.8710 5.4040 100.00 1.5916 5 403.0 14.70 341.60 13.28 19.60 + 1.12658 0.00 19.580 1 0.8710 5.0120 88.00 1.6102 5 403.0 14.70 343.28 12.12 15.30 + 2.14918 0.00 19.580 0 0.8710 5.7090 98.50 1.6232 5 403.0 14.70 261.95 15.79 19.40 + 1.41385 0.00 19.580 1 0.8710 6.1290 96.00 1.7494 5 403.0 14.70 321.02 15.12 17.00 + 3.53501 0.00 19.580 1 0.8710 6.1520 82.60 1.7455 5 403.0 14.70 88.01 15.02 15.60 + 2.44668 0.00 19.580 0 0.8710 5.2720 94.00 1.7364 5 403.0 14.70 88.63 16.14 13.10 + 1.22358 0.00 19.580 0 0.6050 6.9430 97.40 1.8773 5 403.0 14.70 363.43 4.59 41.30 + 1.34284 0.00 19.580 0 0.6050 6.0660 100.00 1.7573 5 403.0 14.70 353.89 6.43 24.30 + 1.42502 0.00 19.580 0 0.8710 6.5100 100.00 1.7659 5 403.0 14.70 364.31 7.39 23.30 + 1.27346 0.00 19.580 1 0.6050 6.2500 92.60 1.7984 5 403.0 14.70 338.92 5.50 27.00 + 1.46336 0.00 19.580 0 0.6050 7.4890 90.80 1.9709 5 403.0 14.70 374.43 1.73 50.00 + 1.83377 0.00 19.580 1 0.6050 7.8020 98.20 2.0407 5 403.0 14.70 389.61 1.92 50.00 + 1.51902 0.00 19.580 1 0.6050 8.3750 93.90 2.1620 5 403.0 14.70 388.45 3.32 50.00 + 2.24236 0.00 19.580 0 0.6050 5.8540 91.80 2.4220 5 403.0 14.70 395.11 11.64 22.70 + 2.92400 0.00 19.580 0 0.6050 6.1010 93.00 2.2834 5 403.0 14.70 240.16 9.81 25.00 + 2.01019 0.00 19.580 0 0.6050 7.9290 96.20 2.0459 5 403.0 14.70 369.30 3.70 50.00 + 1.80028 0.00 19.580 0 0.6050 5.8770 79.20 2.4259 5 403.0 14.70 227.61 12.14 23.80 + 2.30040 0.00 19.580 0 0.6050 6.3190 96.10 2.1000 5 403.0 14.70 297.09 11.10 23.80 + 2.44953 0.00 19.580 0 0.6050 6.4020 95.20 2.2625 5 403.0 14.70 330.04 11.32 22.30 + 1.20742 0.00 19.580 0 0.6050 5.8750 94.60 2.4259 5 403.0 14.70 292.29 14.43 17.40 + 2.31390 0.00 19.580 0 0.6050 5.8800 97.30 2.3887 5 403.0 14.70 348.13 12.03 19.10 + 0.13914 0.00 4.050 0 0.5100 5.5720 88.50 2.5961 5 296.0 16.60 396.90 14.69 23.10 + 0.09178 0.00 4.050 0 0.5100 6.4160 84.10 2.6463 5 296.0 16.60 395.50 9.04 23.60 + 0.08447 0.00 4.050 0 0.5100 5.8590 68.70 2.7019 5 296.0 16.60 393.23 9.64 22.60 + 0.06664 0.00 4.050 0 0.5100 6.5460 33.10 3.1323 5 296.0 16.60 390.96 5.33 29.40 + 0.07022 0.00 4.050 0 0.5100 6.0200 47.20 3.5549 5 296.0 16.60 393.23 10.11 23.20 + 0.05425 0.00 4.050 0 0.5100 6.3150 73.40 3.3175 5 296.0 16.60 395.60 6.29 24.60 + 0.06642 0.00 4.050 0 0.5100 6.8600 74.40 2.9153 5 296.0 16.60 391.27 6.92 29.90 + 0.05780 0.00 2.460 0 0.4880 6.9800 58.40 2.8290 3 193.0 17.80 396.90 5.04 37.20 + 0.06588 0.00 2.460 0 0.4880 7.7650 83.30 2.7410 3 193.0 17.80 395.56 7.56 39.80 + 0.06888 0.00 2.460 0 0.4880 6.1440 62.20 2.5979 3 193.0 17.80 396.90 9.45 36.20 + 0.09103 0.00 2.460 0 0.4880 7.1550 92.20 2.7006 3 193.0 17.80 394.12 4.82 37.90 + 0.10008 0.00 2.460 0 0.4880 6.5630 95.60 2.8470 3 193.0 17.80 396.90 5.68 32.50 + 0.08308 0.00 2.460 0 0.4880 5.6040 89.80 2.9879 3 193.0 17.80 391.00 13.98 26.40 + 0.06047 0.00 2.460 0 0.4880 6.1530 68.80 3.2797 3 193.0 17.80 387.11 13.15 29.60 + 0.05602 0.00 2.460 0 0.4880 7.8310 53.60 3.1992 3 193.0 17.80 392.63 4.45 50.00 + 0.07875 45.00 3.440 0 0.4370 6.7820 41.10 3.7886 5 398.0 15.20 393.87 6.68 32.00 + 0.12579 45.00 3.440 0 0.4370 6.5560 29.10 4.5667 5 398.0 15.20 382.84 4.56 29.80 + 0.08370 45.00 3.440 0 0.4370 7.1850 38.90 4.5667 5 398.0 15.20 396.90 5.39 34.90 + 0.09068 45.00 3.440 0 0.4370 6.9510 21.50 6.4798 5 398.0 15.20 377.68 5.10 37.00 + 0.06911 45.00 3.440 0 0.4370 6.7390 30.80 6.4798 5 398.0 15.20 389.71 4.69 30.50 + 0.08664 45.00 3.440 0 0.4370 7.1780 26.30 6.4798 5 398.0 15.20 390.49 2.87 36.40 + 0.02187 60.00 2.930 0 0.4010 6.8000 9.90 6.2196 1 265.0 15.60 393.37 5.03 31.10 + 0.01439 60.00 2.930 0 0.4010 6.6040 18.80 6.2196 1 265.0 15.60 376.70 4.38 29.10 + 0.01381 80.00 0.460 0 0.4220 7.8750 32.00 5.6484 4 255.0 14.40 394.23 2.97 50.00 + 0.04011 80.00 1.520 0 0.4040 7.2870 34.10 7.3090 2 329.0 12.60 396.90 4.08 33.30 + 0.04666 80.00 1.520 0 0.4040 7.1070 36.60 7.3090 2 329.0 12.60 354.31 8.61 30.30 + 0.03768 80.00 1.520 0 0.4040 7.2740 38.30 7.3090 2 329.0 12.60 392.20 6.62 34.60 + 0.03150 95.00 1.470 0 0.4030 6.9750 15.30 7.6534 3 402.0 17.00 396.90 4.56 34.90 + 0.01778 95.00 1.470 0 0.4030 7.1350 13.90 7.6534 3 402.0 17.00 384.30 4.45 32.90 + 0.03445 82.50 2.030 0 0.4150 6.1620 38.40 6.2700 2 348.0 14.70 393.77 7.43 24.10 + 0.02177 82.50 2.030 0 0.4150 7.6100 15.70 6.2700 2 348.0 14.70 395.38 3.11 42.30 + 0.03510 95.00 2.680 0 0.4161 7.8530 33.20 5.1180 4 224.0 14.70 392.78 3.81 48.50 + 0.02009 95.00 2.680 0 0.4161 8.0340 31.90 5.1180 4 224.0 14.70 390.55 2.88 50.00 + 0.13642 0.00 10.590 0 0.4890 5.8910 22.30 3.9454 4 277.0 18.60 396.90 10.87 22.60 + 0.22969 0.00 10.590 0 0.4890 6.3260 52.50 4.3549 4 277.0 18.60 394.87 10.97 24.40 + 0.25199 0.00 10.590 0 0.4890 5.7830 72.70 4.3549 4 277.0 18.60 389.43 18.06 22.50 + 0.13587 0.00 10.590 1 0.4890 6.0640 59.10 4.2392 4 277.0 18.60 381.32 14.66 24.40 + 0.43571 0.00 10.590 1 0.4890 5.3440 100.00 3.8750 4 277.0 18.60 396.90 23.09 20.00 + 0.17446 0.00 10.590 1 0.4890 5.9600 92.10 3.8771 4 277.0 18.60 393.25 17.27 21.70 + 0.37578 0.00 10.590 1 0.4890 5.4040 88.60 3.6650 4 277.0 18.60 395.24 23.98 19.30 + 0.21719 0.00 10.590 1 0.4890 5.8070 53.80 3.6526 4 277.0 18.60 390.94 16.03 22.40 + 0.14052 0.00 10.590 0 0.4890 6.3750 32.30 3.9454 4 277.0 18.60 385.81 9.38 28.10 + 0.28955 0.00 10.590 0 0.4890 5.4120 9.80 3.5875 4 277.0 18.60 348.93 29.55 23.70 + 0.19802 0.00 10.590 0 0.4890 6.1820 42.40 3.9454 4 277.0 18.60 393.63 9.47 25.00 + 0.04560 0.00 13.890 1 0.5500 5.8880 56.00 3.1121 5 276.0 16.40 392.80 13.51 23.30 + 0.07013 0.00 13.890 0 0.5500 6.6420 85.10 3.4211 5 276.0 16.40 392.78 9.69 28.70 + 0.11069 0.00 13.890 1 0.5500 5.9510 93.80 2.8893 5 276.0 16.40 396.90 17.92 21.50 + 0.11425 0.00 13.890 1 0.5500 6.3730 92.40 3.3633 5 276.0 16.40 393.74 10.50 23.00 + 0.35809 0.00 6.200 1 0.5070 6.9510 88.50 2.8617 8 307.0 17.40 391.70 9.71 26.70 + 0.40771 0.00 6.200 1 0.5070 6.1640 91.30 3.0480 8 307.0 17.40 395.24 21.46 21.70 + 0.62356 0.00 6.200 1 0.5070 6.8790 77.70 3.2721 8 307.0 17.40 390.39 9.93 27.50 + 0.61470 0.00 6.200 0 0.5070 6.6180 80.80 3.2721 8 307.0 17.40 396.90 7.60 30.10 + 0.31533 0.00 6.200 0 0.5040 8.2660 78.30 2.8944 8 307.0 17.40 385.05 4.14 44.80 + 0.52693 0.00 6.200 0 0.5040 8.7250 83.00 2.8944 8 307.0 17.40 382.00 4.63 50.00 + 0.38214 0.00 6.200 0 0.5040 8.0400 86.50 3.2157 8 307.0 17.40 387.38 3.13 37.60 + 0.41238 0.00 6.200 0 0.5040 7.1630 79.90 3.2157 8 307.0 17.40 372.08 6.36 31.60 + 0.29819 0.00 6.200 0 0.5040 7.6860 17.00 3.3751 8 307.0 17.40 377.51 3.92 46.70 + 0.44178 0.00 6.200 0 0.5040 6.5520 21.40 3.3751 8 307.0 17.40 380.34 3.76 31.50 + 0.53700 0.00 6.200 0 0.5040 5.9810 68.10 3.6715 8 307.0 17.40 378.35 11.65 24.30 + 0.46296 0.00 6.200 0 0.5040 7.4120 76.90 3.6715 8 307.0 17.40 376.14 5.25 31.70 + 0.57529 0.00 6.200 0 0.5070 8.3370 73.30 3.8384 8 307.0 17.40 385.91 2.47 41.70 + 0.33147 0.00 6.200 0 0.5070 8.2470 70.40 3.6519 8 307.0 17.40 378.95 3.95 48.30 + 0.44791 0.00 6.200 1 0.5070 6.7260 66.50 3.6519 8 307.0 17.40 360.20 8.05 29.00 + 0.33045 0.00 6.200 0 0.5070 6.0860 61.50 3.6519 8 307.0 17.40 376.75 10.88 24.00 + 0.52058 0.00 6.200 1 0.5070 6.6310 76.50 4.1480 8 307.0 17.40 388.45 9.54 25.10 + 0.51183 0.00 6.200 0 0.5070 7.3580 71.60 4.1480 8 307.0 17.40 390.07 4.73 31.50 + 0.08244 30.00 4.930 0 0.4280 6.4810 18.50 6.1899 6 300.0 16.60 379.41 6.36 23.70 + 0.09252 30.00 4.930 0 0.4280 6.6060 42.20 6.1899 6 300.0 16.60 383.78 7.37 23.30 + 0.11329 30.00 4.930 0 0.4280 6.8970 54.30 6.3361 6 300.0 16.60 391.25 11.38 22.00 + 0.10612 30.00 4.930 0 0.4280 6.0950 65.10 6.3361 6 300.0 16.60 394.62 12.40 20.10 + 0.10290 30.00 4.930 0 0.4280 6.3580 52.90 7.0355 6 300.0 16.60 372.75 11.22 22.20 + 0.12757 30.00 4.930 0 0.4280 6.3930 7.80 7.0355 6 300.0 16.60 374.71 5.19 23.70 + 0.20608 22.00 5.860 0 0.4310 5.5930 76.50 7.9549 7 330.0 19.10 372.49 12.50 17.60 + 0.19133 22.00 5.860 0 0.4310 5.6050 70.20 7.9549 7 330.0 19.10 389.13 18.46 18.50 + 0.33983 22.00 5.860 0 0.4310 6.1080 34.90 8.0555 7 330.0 19.10 390.18 9.16 24.30 + 0.19657 22.00 5.860 0 0.4310 6.2260 79.20 8.0555 7 330.0 19.10 376.14 10.15 20.50 + 0.16439 22.00 5.860 0 0.4310 6.4330 49.10 7.8265 7 330.0 19.10 374.71 9.52 24.50 + 0.19073 22.00 5.860 0 0.4310 6.7180 17.50 7.8265 7 330.0 19.10 393.74 6.56 26.20 + 0.14030 22.00 5.860 0 0.4310 6.4870 13.00 7.3967 7 330.0 19.10 396.28 5.90 24.40 + 0.21409 22.00 5.860 0 0.4310 6.4380 8.90 7.3967 7 330.0 19.10 377.07 3.59 24.80 + 0.08221 22.00 5.860 0 0.4310 6.9570 6.80 8.9067 7 330.0 19.10 386.09 3.53 29.60 + 0.36894 22.00 5.860 0 0.4310 8.2590 8.40 8.9067 7 330.0 19.10 396.90 3.54 42.80 + 0.04819 80.00 3.640 0 0.3920 6.1080 32.00 9.2203 1 315.0 16.40 392.89 6.57 21.90 + 0.03548 80.00 3.640 0 0.3920 5.8760 19.10 9.2203 1 315.0 16.40 395.18 9.25 20.90 + 0.01538 90.00 3.750 0 0.3940 7.4540 34.20 6.3361 3 244.0 15.90 386.34 3.11 44.00 + 0.61154 20.00 3.970 0 0.6470 8.7040 86.90 1.8010 5 264.0 13.00 389.70 5.12 50.00 + 0.66351 20.00 3.970 0 0.6470 7.3330 100.00 1.8946 5 264.0 13.00 383.29 7.79 36.00 + 0.65665 20.00 3.970 0 0.6470 6.8420 100.00 2.0107 5 264.0 13.00 391.93 6.90 30.10 + 0.54011 20.00 3.970 0 0.6470 7.2030 81.80 2.1121 5 264.0 13.00 392.80 9.59 33.80 + 0.53412 20.00 3.970 0 0.6470 7.5200 89.40 2.1398 5 264.0 13.00 388.37 7.26 43.10 + 0.52014 20.00 3.970 0 0.6470 8.3980 91.50 2.2885 5 264.0 13.00 386.86 5.91 48.80 + 0.82526 20.00 3.970 0 0.6470 7.3270 94.50 2.0788 5 264.0 13.00 393.42 11.25 31.00 + 0.55007 20.00 3.970 0 0.6470 7.2060 91.60 1.9301 5 264.0 13.00 387.89 8.10 36.50 + 0.76162 20.00 3.970 0 0.6470 5.5600 62.80 1.9865 5 264.0 13.00 392.40 10.45 22.80 + 0.78570 20.00 3.970 0 0.6470 7.0140 84.60 2.1329 5 264.0 13.00 384.07 14.79 30.70 + 0.57834 20.00 3.970 0 0.5750 8.2970 67.00 2.4216 5 264.0 13.00 384.54 7.44 50.00 + 0.54050 20.00 3.970 0 0.5750 7.4700 52.60 2.8720 5 264.0 13.00 390.30 3.16 43.50 + 0.09065 20.00 6.960 1 0.4640 5.9200 61.50 3.9175 3 223.0 18.60 391.34 13.65 20.70 + 0.29916 20.00 6.960 0 0.4640 5.8560 42.10 4.4290 3 223.0 18.60 388.65 13.00 21.10 + 0.16211 20.00 6.960 0 0.4640 6.2400 16.30 4.4290 3 223.0 18.60 396.90 6.59 25.20 + 0.11460 20.00 6.960 0 0.4640 6.5380 58.70 3.9175 3 223.0 18.60 394.96 7.73 24.40 + 0.22188 20.00 6.960 1 0.4640 7.6910 51.80 4.3665 3 223.0 18.60 390.77 6.58 35.20 + 0.05644 40.00 6.410 1 0.4470 6.7580 32.90 4.0776 4 254.0 17.60 396.90 3.53 32.40 + 0.09604 40.00 6.410 0 0.4470 6.8540 42.80 4.2673 4 254.0 17.60 396.90 2.98 32.00 + 0.10469 40.00 6.410 1 0.4470 7.2670 49.00 4.7872 4 254.0 17.60 389.25 6.05 33.20 + 0.06127 40.00 6.410 1 0.4470 6.8260 27.60 4.8628 4 254.0 17.60 393.45 4.16 33.10 + 0.07978 40.00 6.410 0 0.4470 6.4820 32.10 4.1403 4 254.0 17.60 396.90 7.19 29.10 + 0.21038 20.00 3.330 0 0.4429 6.8120 32.20 4.1007 5 216.0 14.90 396.90 4.85 35.10 + 0.03578 20.00 3.330 0 0.4429 7.8200 64.50 4.6947 5 216.0 14.90 387.31 3.76 45.40 + 0.03705 20.00 3.330 0 0.4429 6.9680 37.20 5.2447 5 216.0 14.90 392.23 4.59 35.40 + 0.06129 20.00 3.330 1 0.4429 7.6450 49.70 5.2119 5 216.0 14.90 377.07 3.01 46.00 + 0.01501 90.00 1.210 1 0.4010 7.9230 24.80 5.8850 1 198.0 13.60 395.52 3.16 50.00 + 0.00906 90.00 2.970 0 0.4000 7.0880 20.80 7.3073 1 285.0 15.30 394.72 7.85 32.20 + 0.01096 55.00 2.250 0 0.3890 6.4530 31.90 7.3073 1 300.0 15.30 394.72 8.23 22.00 + 0.01965 80.00 1.760 0 0.3850 6.2300 31.50 9.0892 1 241.0 18.20 341.60 12.93 20.10 + 0.03871 52.50 5.320 0 0.4050 6.2090 31.30 7.3172 6 293.0 16.60 396.90 7.14 23.20 + 0.04590 52.50 5.320 0 0.4050 6.3150 45.60 7.3172 6 293.0 16.60 396.90 7.60 22.30 + 0.04297 52.50 5.320 0 0.4050 6.5650 22.90 7.3172 6 293.0 16.60 371.72 9.51 24.80 + 0.03502 80.00 4.950 0 0.4110 6.8610 27.90 5.1167 4 245.0 19.20 396.90 3.33 28.50 + 0.07886 80.00 4.950 0 0.4110 7.1480 27.70 5.1167 4 245.0 19.20 396.90 3.56 37.30 + 0.03615 80.00 4.950 0 0.4110 6.6300 23.40 5.1167 4 245.0 19.20 396.90 4.70 27.90 + 0.08265 0.00 13.920 0 0.4370 6.1270 18.40 5.5027 4 289.0 16.00 396.90 8.58 23.90 + 0.08199 0.00 13.920 0 0.4370 6.0090 42.30 5.5027 4 289.0 16.00 396.90 10.40 21.70 + 0.12932 0.00 13.920 0 0.4370 6.6780 31.10 5.9604 4 289.0 16.00 396.90 6.27 28.60 + 0.05372 0.00 13.920 0 0.4370 6.5490 51.00 5.9604 4 289.0 16.00 392.85 7.39 27.10 + 0.14103 0.00 13.920 0 0.4370 5.7900 58.00 6.3200 4 289.0 16.00 396.90 15.84 20.30 + 0.06466 70.00 2.240 0 0.4000 6.3450 20.10 7.8278 5 358.0 14.80 368.24 4.97 22.50 + 0.05561 70.00 2.240 0 0.4000 7.0410 10.00 7.8278 5 358.0 14.80 371.58 4.74 29.00 + 0.04417 70.00 2.240 0 0.4000 6.8710 47.40 7.8278 5 358.0 14.80 390.86 6.07 24.80 + 0.03537 34.00 6.090 0 0.4330 6.5900 40.40 5.4917 7 329.0 16.10 395.75 9.50 22.00 + 0.09266 34.00 6.090 0 0.4330 6.4950 18.40 5.4917 7 329.0 16.10 383.61 8.67 26.40 + 0.10000 34.00 6.090 0 0.4330 6.9820 17.70 5.4917 7 329.0 16.10 390.43 4.86 33.10 + 0.05515 33.00 2.180 0 0.4720 7.2360 41.10 4.0220 7 222.0 18.40 393.68 6.93 36.10 + 0.05479 33.00 2.180 0 0.4720 6.6160 58.10 3.3700 7 222.0 18.40 393.36 8.93 28.40 + 0.07503 33.00 2.180 0 0.4720 7.4200 71.90 3.0992 7 222.0 18.40 396.90 6.47 33.40 + 0.04932 33.00 2.180 0 0.4720 6.8490 70.30 3.1827 7 222.0 18.40 396.90 7.53 28.20 + 0.49298 0.00 9.900 0 0.5440 6.6350 82.50 3.3175 4 304.0 18.40 396.90 4.54 22.80 + 0.34940 0.00 9.900 0 0.5440 5.9720 76.70 3.1025 4 304.0 18.40 396.24 9.97 20.30 + 2.63548 0.00 9.900 0 0.5440 4.9730 37.80 2.5194 4 304.0 18.40 350.45 12.64 16.10 + 0.79041 0.00 9.900 0 0.5440 6.1220 52.80 2.6403 4 304.0 18.40 396.90 5.98 22.10 + 0.26169 0.00 9.900 0 0.5440 6.0230 90.40 2.8340 4 304.0 18.40 396.30 11.72 19.40 + 0.26938 0.00 9.900 0 0.5440 6.2660 82.80 3.2628 4 304.0 18.40 393.39 7.90 21.60 + 0.36920 0.00 9.900 0 0.5440 6.5670 87.30 3.6023 4 304.0 18.40 395.69 9.28 23.80 + 0.25356 0.00 9.900 0 0.5440 5.7050 77.70 3.9450 4 304.0 18.40 396.42 11.50 16.20 + 0.31827 0.00 9.900 0 0.5440 5.9140 83.20 3.9986 4 304.0 18.40 390.70 18.33 17.80 + 0.24522 0.00 9.900 0 0.5440 5.7820 71.70 4.0317 4 304.0 18.40 396.90 15.94 19.80 + 0.40202 0.00 9.900 0 0.5440 6.3820 67.20 3.5325 4 304.0 18.40 395.21 10.36 23.10 + 0.47547 0.00 9.900 0 0.5440 6.1130 58.80 4.0019 4 304.0 18.40 396.23 12.73 21.00 + 0.16760 0.00 7.380 0 0.4930 6.4260 52.30 4.5404 5 287.0 19.60 396.90 7.20 23.80 + 0.18159 0.00 7.380 0 0.4930 6.3760 54.30 4.5404 5 287.0 19.60 396.90 6.87 23.10 + 0.35114 0.00 7.380 0 0.4930 6.0410 49.90 4.7211 5 287.0 19.60 396.90 7.70 20.40 + 0.28392 0.00 7.380 0 0.4930 5.7080 74.30 4.7211 5 287.0 19.60 391.13 11.74 18.50 + 0.34109 0.00 7.380 0 0.4930 6.4150 40.10 4.7211 5 287.0 19.60 396.90 6.12 25.00 + 0.19186 0.00 7.380 0 0.4930 6.4310 14.70 5.4159 5 287.0 19.60 393.68 5.08 24.60 + 0.30347 0.00 7.380 0 0.4930 6.3120 28.90 5.4159 5 287.0 19.60 396.90 6.15 23.00 + 0.24103 0.00 7.380 0 0.4930 6.0830 43.70 5.4159 5 287.0 19.60 396.90 12.79 22.20 + 0.06617 0.00 3.240 0 0.4600 5.8680 25.80 5.2146 4 430.0 16.90 382.44 9.97 19.30 + 0.06724 0.00 3.240 0 0.4600 6.3330 17.20 5.2146 4 430.0 16.90 375.21 7.34 22.60 + 0.04544 0.00 3.240 0 0.4600 6.1440 32.20 5.8736 4 430.0 16.90 368.57 9.09 19.80 + 0.05023 35.00 6.060 0 0.4379 5.7060 28.40 6.6407 1 304.0 16.90 394.02 12.43 17.10 + 0.03466 35.00 6.060 0 0.4379 6.0310 23.30 6.6407 1 304.0 16.90 362.25 7.83 19.40 + 0.05083 0.00 5.190 0 0.5150 6.3160 38.10 6.4584 5 224.0 20.20 389.71 5.68 22.20 + 0.03738 0.00 5.190 0 0.5150 6.3100 38.50 6.4584 5 224.0 20.20 389.40 6.75 20.70 + 0.03961 0.00 5.190 0 0.5150 6.0370 34.50 5.9853 5 224.0 20.20 396.90 8.01 21.10 + 0.03427 0.00 5.190 0 0.5150 5.8690 46.30 5.2311 5 224.0 20.20 396.90 9.80 19.50 + 0.03041 0.00 5.190 0 0.5150 5.8950 59.60 5.6150 5 224.0 20.20 394.81 10.56 18.50 + 0.03306 0.00 5.190 0 0.5150 6.0590 37.30 4.8122 5 224.0 20.20 396.14 8.51 20.60 + 0.05497 0.00 5.190 0 0.5150 5.9850 45.40 4.8122 5 224.0 20.20 396.90 9.74 19.00 + 0.06151 0.00 5.190 0 0.5150 5.9680 58.50 4.8122 5 224.0 20.20 396.90 9.29 18.70 + 0.01301 35.00 1.520 0 0.4420 7.2410 49.30 7.0379 1 284.0 15.50 394.74 5.49 32.70 + 0.02498 0.00 1.890 0 0.5180 6.5400 59.70 6.2669 1 422.0 15.90 389.96 8.65 16.50 + 0.02543 55.00 3.780 0 0.4840 6.6960 56.40 5.7321 5 370.0 17.60 396.90 7.18 23.90 + 0.03049 55.00 3.780 0 0.4840 6.8740 28.10 6.4654 5 370.0 17.60 387.97 4.61 31.20 + 0.03113 0.00 4.390 0 0.4420 6.0140 48.50 8.0136 3 352.0 18.80 385.64 10.53 17.50 + 0.06162 0.00 4.390 0 0.4420 5.8980 52.30 8.0136 3 352.0 18.80 364.61 12.67 17.20 + 0.01870 85.00 4.150 0 0.4290 6.5160 27.70 8.5353 4 351.0 17.90 392.43 6.36 23.10 + 0.01501 80.00 2.010 0 0.4350 6.6350 29.70 8.3440 4 280.0 17.00 390.94 5.99 24.50 + 0.02899 40.00 1.250 0 0.4290 6.9390 34.50 8.7921 1 335.0 19.70 389.85 5.89 26.60 + 0.06211 40.00 1.250 0 0.4290 6.4900 44.40 8.7921 1 335.0 19.70 396.90 5.98 22.90 + 0.07950 60.00 1.690 0 0.4110 6.5790 35.90 10.7103 4 411.0 18.30 370.78 5.49 24.10 + 0.07244 60.00 1.690 0 0.4110 5.8840 18.50 10.7103 4 411.0 18.30 392.33 7.79 18.60 + 0.01709 90.00 2.020 0 0.4100 6.7280 36.10 12.1265 5 187.0 17.00 384.46 4.50 30.10 + 0.04301 80.00 1.910 0 0.4130 5.6630 21.90 10.5857 4 334.0 22.00 382.80 8.05 18.20 + 0.10659 80.00 1.910 0 0.4130 5.9360 19.50 10.5857 4 334.0 22.00 376.04 5.57 20.60 + 8.98296 0.00 18.100 1 0.7700 6.2120 97.40 2.1222 24 666.0 20.20 377.73 17.60 17.80 + 3.84970 0.00 18.100 1 0.7700 6.3950 91.00 2.5052 24 666.0 20.20 391.34 13.27 21.70 + 5.20177 0.00 18.100 1 0.7700 6.1270 83.40 2.7227 24 666.0 20.20 395.43 11.48 22.70 + 4.26131 0.00 18.100 0 0.7700 6.1120 81.30 2.5091 24 666.0 20.20 390.74 12.67 22.60 + 4.54192 0.00 18.100 0 0.7700 6.3980 88.00 2.5182 24 666.0 20.20 374.56 7.79 25.00 + 3.83684 0.00 18.100 0 0.7700 6.2510 91.10 2.2955 24 666.0 20.20 350.65 14.19 19.90 + 3.67822 0.00 18.100 0 0.7700 5.3620 96.20 2.1036 24 666.0 20.20 380.79 10.19 20.80 + 4.22239 0.00 18.100 1 0.7700 5.8030 89.00 1.9047 24 666.0 20.20 353.04 14.64 16.80 + 3.47428 0.00 18.100 1 0.7180 8.7800 82.90 1.9047 24 666.0 20.20 354.55 5.29 21.90 + 4.55587 0.00 18.100 0 0.7180 3.5610 87.90 1.6132 24 666.0 20.20 354.70 7.12 27.50 + 3.69695 0.00 18.100 0 0.7180 4.9630 91.40 1.7523 24 666.0 20.20 316.03 14.00 21.90 +13.52220 0.00 18.100 0 0.6310 3.8630 100.00 1.5106 24 666.0 20.20 131.42 13.33 23.10 + 4.89822 0.00 18.100 0 0.6310 4.9700 100.00 1.3325 24 666.0 20.20 375.52 3.26 50.00 + 5.66998 0.00 18.100 1 0.6310 6.6830 96.80 1.3567 24 666.0 20.20 375.33 3.73 50.00 + 6.53876 0.00 18.100 1 0.6310 7.0160 97.50 1.2024 24 666.0 20.20 392.05 2.96 50.00 + 9.23230 0.00 18.100 0 0.6310 6.2160 100.00 1.1691 24 666.0 20.20 366.15 9.53 50.00 + 8.26725 0.00 18.100 1 0.6680 5.8750 89.60 1.1296 24 666.0 20.20 347.88 8.88 50.00 +11.10810 0.00 18.100 0 0.6680 4.9060 100.00 1.1742 24 666.0 20.20 396.90 34.77 13.80 +18.49820 0.00 18.100 0 0.6680 4.1380 100.00 1.1370 24 666.0 20.20 396.90 37.97 13.80 +19.60910 0.00 18.100 0 0.6710 7.3130 97.90 1.3163 24 666.0 20.20 396.90 13.44 15.00 +15.28800 0.00 18.100 0 0.6710 6.6490 93.30 1.3449 24 666.0 20.20 363.02 23.24 13.90 + 9.82349 0.00 18.100 0 0.6710 6.7940 98.80 1.3580 24 666.0 20.20 396.90 21.24 13.30 +23.64820 0.00 18.100 0 0.6710 6.3800 96.20 1.3861 24 666.0 20.20 396.90 23.69 13.10 +17.86670 0.00 18.100 0 0.6710 6.2230 100.00 1.3861 24 666.0 20.20 393.74 21.78 10.20 +88.97620 0.00 18.100 0 0.6710 6.9680 91.90 1.4165 24 666.0 20.20 396.90 17.21 10.40 +15.87440 0.00 18.100 0 0.6710 6.5450 99.10 1.5192 24 666.0 20.20 396.90 21.08 10.90 + 9.18702 0.00 18.100 0 0.7000 5.5360 100.00 1.5804 24 666.0 20.20 396.90 23.60 11.30 + 7.99248 0.00 18.100 0 0.7000 5.5200 100.00 1.5331 24 666.0 20.20 396.90 24.56 12.30 +20.08490 0.00 18.100 0 0.7000 4.3680 91.20 1.4395 24 666.0 20.20 285.83 30.63 8.80 +16.81180 0.00 18.100 0 0.7000 5.2770 98.10 1.4261 24 666.0 20.20 396.90 30.81 7.20 +24.39380 0.00 18.100 0 0.7000 4.6520 100.00 1.4672 24 666.0 20.20 396.90 28.28 10.50 +22.59710 0.00 18.100 0 0.7000 5.0000 89.50 1.5184 24 666.0 20.20 396.90 31.99 7.40 +14.33370 0.00 18.100 0 0.7000 4.8800 100.00 1.5895 24 666.0 20.20 372.92 30.62 10.20 + 8.15174 0.00 18.100 0 0.7000 5.3900 98.90 1.7281 24 666.0 20.20 396.90 20.85 11.50 + 6.96215 0.00 18.100 0 0.7000 5.7130 97.00 1.9265 24 666.0 20.20 394.43 17.11 15.10 + 5.29305 0.00 18.100 0 0.7000 6.0510 82.50 2.1678 24 666.0 20.20 378.38 18.76 23.20 +11.57790 0.00 18.100 0 0.7000 5.0360 97.00 1.7700 24 666.0 20.20 396.90 25.68 9.70 + 8.64476 0.00 18.100 0 0.6930 6.1930 92.60 1.7912 24 666.0 20.20 396.90 15.17 13.80 +13.35980 0.00 18.100 0 0.6930 5.8870 94.70 1.7821 24 666.0 20.20 396.90 16.35 12.70 + 8.71675 0.00 18.100 0 0.6930 6.4710 98.80 1.7257 24 666.0 20.20 391.98 17.12 13.10 + 5.87205 0.00 18.100 0 0.6930 6.4050 96.00 1.6768 24 666.0 20.20 396.90 19.37 12.50 + 7.67202 0.00 18.100 0 0.6930 5.7470 98.90 1.6334 24 666.0 20.20 393.10 19.92 8.50 +38.35180 0.00 18.100 0 0.6930 5.4530 100.00 1.4896 24 666.0 20.20 396.90 30.59 5.00 + 9.91655 0.00 18.100 0 0.6930 5.8520 77.80 1.5004 24 666.0 20.20 338.16 29.97 6.30 +25.04610 0.00 18.100 0 0.6930 5.9870 100.00 1.5888 24 666.0 20.20 396.90 26.77 5.60 +14.23620 0.00 18.100 0 0.6930 6.3430 100.00 1.5741 24 666.0 20.20 396.90 20.32 7.20 + 9.59571 0.00 18.100 0 0.6930 6.4040 100.00 1.6390 24 666.0 20.20 376.11 20.31 12.10 +24.80170 0.00 18.100 0 0.6930 5.3490 96.00 1.7028 24 666.0 20.20 396.90 19.77 8.30 +41.52920 0.00 18.100 0 0.6930 5.5310 85.40 1.6074 24 666.0 20.20 329.46 27.38 8.50 +67.92080 0.00 18.100 0 0.6930 5.6830 100.00 1.4254 24 666.0 20.20 384.97 22.98 5.00 +20.71620 0.00 18.100 0 0.6590 4.1380 100.00 1.1781 24 666.0 20.20 370.22 23.34 11.90 +11.95110 0.00 18.100 0 0.6590 5.6080 100.00 1.2852 24 666.0 20.20 332.09 12.13 27.90 + 7.40389 0.00 18.100 0 0.5970 5.6170 97.90 1.4547 24 666.0 20.20 314.64 26.40 17.20 +14.43830 0.00 18.100 0 0.5970 6.8520 100.00 1.4655 24 666.0 20.20 179.36 19.78 27.50 +51.13580 0.00 18.100 0 0.5970 5.7570 100.00 1.4130 24 666.0 20.20 2.60 10.11 15.00 +14.05070 0.00 18.100 0 0.5970 6.6570 100.00 1.5275 24 666.0 20.20 35.05 21.22 17.20 +18.81100 0.00 18.100 0 0.5970 4.6280 100.00 1.5539 24 666.0 20.20 28.79 34.37 17.90 +28.65580 0.00 18.100 0 0.5970 5.1550 100.00 1.5894 24 666.0 20.20 210.97 20.08 16.30 +45.74610 0.00 18.100 0 0.6930 4.5190 100.00 1.6582 24 666.0 20.20 88.27 36.98 7.00 +18.08460 0.00 18.100 0 0.6790 6.4340 100.00 1.8347 24 666.0 20.20 27.25 29.05 7.20 +10.83420 0.00 18.100 0 0.6790 6.7820 90.80 1.8195 24 666.0 20.20 21.57 25.79 7.50 +25.94060 0.00 18.100 0 0.6790 5.3040 89.10 1.6475 24 666.0 20.20 127.36 26.64 10.40 +73.53410 0.00 18.100 0 0.6790 5.9570 100.00 1.8026 24 666.0 20.20 16.45 20.62 8.80 +11.81230 0.00 18.100 0 0.7180 6.8240 76.50 1.7940 24 666.0 20.20 48.45 22.74 8.40 +11.08740 0.00 18.100 0 0.7180 6.4110 100.00 1.8589 24 666.0 20.20 318.75 15.02 16.70 + 7.02259 0.00 18.100 0 0.7180 6.0060 95.30 1.8746 24 666.0 20.20 319.98 15.70 14.20 +12.04820 0.00 18.100 0 0.6140 5.6480 87.60 1.9512 24 666.0 20.20 291.55 14.10 20.80 + 7.05042 0.00 18.100 0 0.6140 6.1030 85.10 2.0218 24 666.0 20.20 2.52 23.29 13.40 + 8.79212 0.00 18.100 0 0.5840 5.5650 70.60 2.0635 24 666.0 20.20 3.65 17.16 11.70 +15.86030 0.00 18.100 0 0.6790 5.8960 95.40 1.9096 24 666.0 20.20 7.68 24.39 8.30 +12.24720 0.00 18.100 0 0.5840 5.8370 59.70 1.9976 24 666.0 20.20 24.65 15.69 10.20 +37.66190 0.00 18.100 0 0.6790 6.2020 78.70 1.8629 24 666.0 20.20 18.82 14.52 10.90 + 7.36711 0.00 18.100 0 0.6790 6.1930 78.10 1.9356 24 666.0 20.20 96.73 21.52 11.00 + 9.33889 0.00 18.100 0 0.6790 6.3800 95.60 1.9682 24 666.0 20.20 60.72 24.08 9.50 + 8.49213 0.00 18.100 0 0.5840 6.3480 86.10 2.0527 24 666.0 20.20 83.45 17.64 14.50 +10.06230 0.00 18.100 0 0.5840 6.8330 94.30 2.0882 24 666.0 20.20 81.33 19.69 14.10 + 6.44405 0.00 18.100 0 0.5840 6.4250 74.80 2.2004 24 666.0 20.20 97.95 12.03 16.10 + 5.58107 0.00 18.100 0 0.7130 6.4360 87.90 2.3158 24 666.0 20.20 100.19 16.22 14.30 +13.91340 0.00 18.100 0 0.7130 6.2080 95.00 2.2222 24 666.0 20.20 100.63 15.17 11.70 +11.16040 0.00 18.100 0 0.7400 6.6290 94.60 2.1247 24 666.0 20.20 109.85 23.27 13.40 +14.42080 0.00 18.100 0 0.7400 6.4610 93.30 2.0026 24 666.0 20.20 27.49 18.05 9.60 +15.17720 0.00 18.100 0 0.7400 6.1520 100.00 1.9142 24 666.0 20.20 9.32 26.45 8.70 +13.67810 0.00 18.100 0 0.7400 5.9350 87.90 1.8206 24 666.0 20.20 68.95 34.02 8.40 + 9.39063 0.00 18.100 0 0.7400 5.6270 93.90 1.8172 24 666.0 20.20 396.90 22.88 12.80 +22.05110 0.00 18.100 0 0.7400 5.8180 92.40 1.8662 24 666.0 20.20 391.45 22.11 10.50 + 9.72418 0.00 18.100 0 0.7400 6.4060 97.20 2.0651 24 666.0 20.20 385.96 19.52 17.10 + 5.66637 0.00 18.100 0 0.7400 6.2190 100.00 2.0048 24 666.0 20.20 395.69 16.59 18.40 + 9.96654 0.00 18.100 0 0.7400 6.4850 100.00 1.9784 24 666.0 20.20 386.73 18.85 15.40 +12.80230 0.00 18.100 0 0.7400 5.8540 96.60 1.8956 24 666.0 20.20 240.52 23.79 10.80 +10.67180 0.00 18.100 0 0.7400 6.4590 94.80 1.9879 24 666.0 20.20 43.06 23.98 11.80 + 6.28807 0.00 18.100 0 0.7400 6.3410 96.40 2.0720 24 666.0 20.20 318.01 17.79 14.90 + 9.92485 0.00 18.100 0 0.7400 6.2510 96.60 2.1980 24 666.0 20.20 388.52 16.44 12.60 + 9.32909 0.00 18.100 0 0.7130 6.1850 98.70 2.2616 24 666.0 20.20 396.90 18.13 14.10 + 7.52601 0.00 18.100 0 0.7130 6.4170 98.30 2.1850 24 666.0 20.20 304.21 19.31 13.00 + 6.71772 0.00 18.100 0 0.7130 6.7490 92.60 2.3236 24 666.0 20.20 0.32 17.44 13.40 + 5.44114 0.00 18.100 0 0.7130 6.6550 98.20 2.3552 24 666.0 20.20 355.29 17.73 15.20 + 5.09017 0.00 18.100 0 0.7130 6.2970 91.80 2.3682 24 666.0 20.20 385.09 17.27 16.10 + 8.24809 0.00 18.100 0 0.7130 7.3930 99.30 2.4527 24 666.0 20.20 375.87 16.74 17.80 + 9.51363 0.00 18.100 0 0.7130 6.7280 94.10 2.4961 24 666.0 20.20 6.68 18.71 14.90 + 4.75237 0.00 18.100 0 0.7130 6.5250 86.50 2.4358 24 666.0 20.20 50.92 18.13 14.10 + 4.66883 0.00 18.100 0 0.7130 5.9760 87.90 2.5806 24 666.0 20.20 10.48 19.01 12.70 + 8.20058 0.00 18.100 0 0.7130 5.9360 80.30 2.7792 24 666.0 20.20 3.50 16.94 13.50 + 7.75223 0.00 18.100 0 0.7130 6.3010 83.70 2.7831 24 666.0 20.20 272.21 16.23 14.90 + 6.80117 0.00 18.100 0 0.7130 6.0810 84.40 2.7175 24 666.0 20.20 396.90 14.70 20.00 + 4.81213 0.00 18.100 0 0.7130 6.7010 90.00 2.5975 24 666.0 20.20 255.23 16.42 16.40 + 3.69311 0.00 18.100 0 0.7130 6.3760 88.40 2.5671 24 666.0 20.20 391.43 14.65 17.70 + 6.65492 0.00 18.100 0 0.7130 6.3170 83.00 2.7344 24 666.0 20.20 396.90 13.99 19.50 + 5.82115 0.00 18.100 0 0.7130 6.5130 89.90 2.8016 24 666.0 20.20 393.82 10.29 20.20 + 7.83932 0.00 18.100 0 0.6550 6.2090 65.40 2.9634 24 666.0 20.20 396.90 13.22 21.40 + 3.16360 0.00 18.100 0 0.6550 5.7590 48.20 3.0665 24 666.0 20.20 334.40 14.13 19.90 + 3.77498 0.00 18.100 0 0.6550 5.9520 84.70 2.8715 24 666.0 20.20 22.01 17.15 19.00 + 4.42228 0.00 18.100 0 0.5840 6.0030 94.50 2.5403 24 666.0 20.20 331.29 21.32 19.10 +15.57570 0.00 18.100 0 0.5800 5.9260 71.00 2.9084 24 666.0 20.20 368.74 18.13 19.10 +13.07510 0.00 18.100 0 0.5800 5.7130 56.70 2.8237 24 666.0 20.20 396.90 14.76 20.10 + 4.34879 0.00 18.100 0 0.5800 6.1670 84.00 3.0334 24 666.0 20.20 396.90 16.29 19.90 + 4.03841 0.00 18.100 0 0.5320 6.2290 90.70 3.0993 24 666.0 20.20 395.33 12.87 19.60 + 3.56868 0.00 18.100 0 0.5800 6.4370 75.00 2.8965 24 666.0 20.20 393.37 14.36 23.20 + 4.64689 0.00 18.100 0 0.6140 6.9800 67.60 2.5329 24 666.0 20.20 374.68 11.66 29.80 + 8.05579 0.00 18.100 0 0.5840 5.4270 95.40 2.4298 24 666.0 20.20 352.58 18.14 13.80 + 6.39312 0.00 18.100 0 0.5840 6.1620 97.40 2.2060 24 666.0 20.20 302.76 24.10 13.30 + 4.87141 0.00 18.100 0 0.6140 6.4840 93.60 2.3053 24 666.0 20.20 396.21 18.68 16.70 +15.02340 0.00 18.100 0 0.6140 5.3040 97.30 2.1007 24 666.0 20.20 349.48 24.91 12.00 +10.23300 0.00 18.100 0 0.6140 6.1850 96.70 2.1705 24 666.0 20.20 379.70 18.03 14.60 +14.33370 0.00 18.100 0 0.6140 6.2290 88.00 1.9512 24 666.0 20.20 383.32 13.11 21.40 + 5.82401 0.00 18.100 0 0.5320 6.2420 64.70 3.4242 24 666.0 20.20 396.90 10.74 23.00 + 5.70818 0.00 18.100 0 0.5320 6.7500 74.90 3.3317 24 666.0 20.20 393.07 7.74 23.70 + 5.73116 0.00 18.100 0 0.5320 7.0610 77.00 3.4106 24 666.0 20.20 395.28 7.01 25.00 + 2.81838 0.00 18.100 0 0.5320 5.7620 40.30 4.0983 24 666.0 20.20 392.92 10.42 21.80 + 2.37857 0.00 18.100 0 0.5830 5.8710 41.90 3.7240 24 666.0 20.20 370.73 13.34 20.60 + 3.67367 0.00 18.100 0 0.5830 6.3120 51.90 3.9917 24 666.0 20.20 388.62 10.58 21.20 + 5.69175 0.00 18.100 0 0.5830 6.1140 79.80 3.5459 24 666.0 20.20 392.68 14.98 19.10 + 4.83567 0.00 18.100 0 0.5830 5.9050 53.20 3.1523 24 666.0 20.20 388.22 11.45 20.60 + 0.15086 0.00 27.740 0 0.6090 5.4540 92.70 1.8209 4 711.0 20.10 395.09 18.06 15.20 + 0.18337 0.00 27.740 0 0.6090 5.4140 98.30 1.7554 4 711.0 20.10 344.05 23.97 7.00 + 0.20746 0.00 27.740 0 0.6090 5.0930 98.00 1.8226 4 711.0 20.10 318.43 29.68 8.10 + 0.10574 0.00 27.740 0 0.6090 5.9830 98.80 1.8681 4 711.0 20.10 390.11 18.07 13.60 + 0.11132 0.00 27.740 0 0.6090 5.9830 83.50 2.1099 4 711.0 20.10 396.90 13.35 20.10 + 0.17331 0.00 9.690 0 0.5850 5.7070 54.00 2.3817 6 391.0 19.20 396.90 12.01 21.80 + 0.27957 0.00 9.690 0 0.5850 5.9260 42.60 2.3817 6 391.0 19.20 396.90 13.59 24.50 + 0.17899 0.00 9.690 0 0.5850 5.6700 28.80 2.7986 6 391.0 19.20 393.29 17.60 23.10 + 0.28960 0.00 9.690 0 0.5850 5.3900 72.90 2.7986 6 391.0 19.20 396.90 21.14 19.70 + 0.26838 0.00 9.690 0 0.5850 5.7940 70.60 2.8927 6 391.0 19.20 396.90 14.10 18.30 + 0.23912 0.00 9.690 0 0.5850 6.0190 65.30 2.4091 6 391.0 19.20 396.90 12.92 21.20 + 0.17783 0.00 9.690 0 0.5850 5.5690 73.50 2.3999 6 391.0 19.20 395.77 15.10 17.50 + 0.22438 0.00 9.690 0 0.5850 6.0270 79.70 2.4982 6 391.0 19.20 396.90 14.33 16.80 + 0.06263 0.00 11.930 0 0.5730 6.5930 69.10 2.4786 1 273.0 21.00 391.99 9.67 22.40 + 0.04527 0.00 11.930 0 0.5730 6.1200 76.70 2.2875 1 273.0 21.00 396.90 9.08 20.60 + 0.06076 0.00 11.930 0 0.5730 6.9760 91.00 2.1675 1 273.0 21.00 396.90 5.64 23.90 + 0.10959 0.00 11.930 0 0.5730 6.7940 89.30 2.3889 1 273.0 21.00 393.45 6.48 22.00 + 0.04741 0.00 11.930 0 0.5730 6.0300 80.80 2.5050 1 273.0 21.00 396.90 7.88 11.90 \ No newline at end of file diff --git a/data/pima-indians-diabetes.data.csv b/data/pima-indians-diabetes.data.csv new file mode 100644 index 0000000..9c3e9b8 --- /dev/null +++ b/data/pima-indians-diabetes.data.csv @@ -0,0 +1,768 @@ +6,148,72,35,0,33.6,0.627,50,1 +1,85,66,29,0,26.6,0.351,31,0 +8,183,64,0,0,23.3,0.672,32,1 +1,89,66,23,94,28.1,0.167,21,0 +0,137,40,35,168,43.1,2.288,33,1 +5,116,74,0,0,25.6,0.201,30,0 +3,78,50,32,88,31.0,0.248,26,1 +10,115,0,0,0,35.3,0.134,29,0 +2,197,70,45,543,30.5,0.158,53,1 +8,125,96,0,0,0.0,0.232,54,1 +4,110,92,0,0,37.6,0.191,30,0 +10,168,74,0,0,38.0,0.537,34,1 +10,139,80,0,0,27.1,1.441,57,0 +1,189,60,23,846,30.1,0.398,59,1 +5,166,72,19,175,25.8,0.587,51,1 +7,100,0,0,0,30.0,0.484,32,1 +0,118,84,47,230,45.8,0.551,31,1 +7,107,74,0,0,29.6,0.254,31,1 +1,103,30,38,83,43.3,0.183,33,0 +1,115,70,30,96,34.6,0.529,32,1 +3,126,88,41,235,39.3,0.704,27,0 +8,99,84,0,0,35.4,0.388,50,0 +7,196,90,0,0,39.8,0.451,41,1 +9,119,80,35,0,29.0,0.263,29,1 +11,143,94,33,146,36.6,0.254,51,1 +10,125,70,26,115,31.1,0.205,41,1 +7,147,76,0,0,39.4,0.257,43,1 +1,97,66,15,140,23.2,0.487,22,0 +13,145,82,19,110,22.2,0.245,57,0 +5,117,92,0,0,34.1,0.337,38,0 +5,109,75,26,0,36.0,0.546,60,0 +3,158,76,36,245,31.6,0.851,28,1 +3,88,58,11,54,24.8,0.267,22,0 +6,92,92,0,0,19.9,0.188,28,0 +10,122,78,31,0,27.6,0.512,45,0 +4,103,60,33,192,24.0,0.966,33,0 +11,138,76,0,0,33.2,0.420,35,0 +9,102,76,37,0,32.9,0.665,46,1 +2,90,68,42,0,38.2,0.503,27,1 +4,111,72,47,207,37.1,1.390,56,1 +3,180,64,25,70,34.0,0.271,26,0 +7,133,84,0,0,40.2,0.696,37,0 +7,106,92,18,0,22.7,0.235,48,0 +9,171,110,24,240,45.4,0.721,54,1 +7,159,64,0,0,27.4,0.294,40,0 +0,180,66,39,0,42.0,1.893,25,1 +1,146,56,0,0,29.7,0.564,29,0 +2,71,70,27,0,28.0,0.586,22,0 +7,103,66,32,0,39.1,0.344,31,1 +7,105,0,0,0,0.0,0.305,24,0 +1,103,80,11,82,19.4,0.491,22,0 +1,101,50,15,36,24.2,0.526,26,0 +5,88,66,21,23,24.4,0.342,30,0 +8,176,90,34,300,33.7,0.467,58,1 +7,150,66,42,342,34.7,0.718,42,0 +1,73,50,10,0,23.0,0.248,21,0 +7,187,68,39,304,37.7,0.254,41,1 +0,100,88,60,110,46.8,0.962,31,0 +0,146,82,0,0,40.5,1.781,44,0 +0,105,64,41,142,41.5,0.173,22,0 +2,84,0,0,0,0.0,0.304,21,0 +8,133,72,0,0,32.9,0.270,39,1 +5,44,62,0,0,25.0,0.587,36,0 +2,141,58,34,128,25.4,0.699,24,0 +7,114,66,0,0,32.8,0.258,42,1 +5,99,74,27,0,29.0,0.203,32,0 +0,109,88,30,0,32.5,0.855,38,1 +2,109,92,0,0,42.7,0.845,54,0 +1,95,66,13,38,19.6,0.334,25,0 +4,146,85,27,100,28.9,0.189,27,0 +2,100,66,20,90,32.9,0.867,28,1 +5,139,64,35,140,28.6,0.411,26,0 +13,126,90,0,0,43.4,0.583,42,1 +4,129,86,20,270,35.1,0.231,23,0 +1,79,75,30,0,32.0,0.396,22,0 +1,0,48,20,0,24.7,0.140,22,0 +7,62,78,0,0,32.6,0.391,41,0 +5,95,72,33,0,37.7,0.370,27,0 +0,131,0,0,0,43.2,0.270,26,1 +2,112,66,22,0,25.0,0.307,24,0 +3,113,44,13,0,22.4,0.140,22,0 +2,74,0,0,0,0.0,0.102,22,0 +7,83,78,26,71,29.3,0.767,36,0 +0,101,65,28,0,24.6,0.237,22,0 +5,137,108,0,0,48.8,0.227,37,1 +2,110,74,29,125,32.4,0.698,27,0 +13,106,72,54,0,36.6,0.178,45,0 +2,100,68,25,71,38.5,0.324,26,0 +15,136,70,32,110,37.1,0.153,43,1 +1,107,68,19,0,26.5,0.165,24,0 +1,80,55,0,0,19.1,0.258,21,0 +4,123,80,15,176,32.0,0.443,34,0 +7,81,78,40,48,46.7,0.261,42,0 +4,134,72,0,0,23.8,0.277,60,1 +2,142,82,18,64,24.7,0.761,21,0 +6,144,72,27,228,33.9,0.255,40,0 +2,92,62,28,0,31.6,0.130,24,0 +1,71,48,18,76,20.4,0.323,22,0 +6,93,50,30,64,28.7,0.356,23,0 +1,122,90,51,220,49.7,0.325,31,1 +1,163,72,0,0,39.0,1.222,33,1 +1,151,60,0,0,26.1,0.179,22,0 +0,125,96,0,0,22.5,0.262,21,0 +1,81,72,18,40,26.6,0.283,24,0 +2,85,65,0,0,39.6,0.930,27,0 +1,126,56,29,152,28.7,0.801,21,0 +1,96,122,0,0,22.4,0.207,27,0 +4,144,58,28,140,29.5,0.287,37,0 +3,83,58,31,18,34.3,0.336,25,0 +0,95,85,25,36,37.4,0.247,24,1 +3,171,72,33,135,33.3,0.199,24,1 +8,155,62,26,495,34.0,0.543,46,1 +1,89,76,34,37,31.2,0.192,23,0 +4,76,62,0,0,34.0,0.391,25,0 +7,160,54,32,175,30.5,0.588,39,1 +4,146,92,0,0,31.2,0.539,61,1 +5,124,74,0,0,34.0,0.220,38,1 +5,78,48,0,0,33.7,0.654,25,0 +4,97,60,23,0,28.2,0.443,22,0 +4,99,76,15,51,23.2,0.223,21,0 +0,162,76,56,100,53.2,0.759,25,1 +6,111,64,39,0,34.2,0.260,24,0 +2,107,74,30,100,33.6,0.404,23,0 +5,132,80,0,0,26.8,0.186,69,0 +0,113,76,0,0,33.3,0.278,23,1 +1,88,30,42,99,55.0,0.496,26,1 +3,120,70,30,135,42.9,0.452,30,0 +1,118,58,36,94,33.3,0.261,23,0 +1,117,88,24,145,34.5,0.403,40,1 +0,105,84,0,0,27.9,0.741,62,1 +4,173,70,14,168,29.7,0.361,33,1 +9,122,56,0,0,33.3,1.114,33,1 +3,170,64,37,225,34.5,0.356,30,1 +8,84,74,31,0,38.3,0.457,39,0 +2,96,68,13,49,21.1,0.647,26,0 +2,125,60,20,140,33.8,0.088,31,0 +0,100,70,26,50,30.8,0.597,21,0 +0,93,60,25,92,28.7,0.532,22,0 +0,129,80,0,0,31.2,0.703,29,0 +5,105,72,29,325,36.9,0.159,28,0 +3,128,78,0,0,21.1,0.268,55,0 +5,106,82,30,0,39.5,0.286,38,0 +2,108,52,26,63,32.5,0.318,22,0 +10,108,66,0,0,32.4,0.272,42,1 +4,154,62,31,284,32.8,0.237,23,0 +0,102,75,23,0,0.0,0.572,21,0 +9,57,80,37,0,32.8,0.096,41,0 +2,106,64,35,119,30.5,1.400,34,0 +5,147,78,0,0,33.7,0.218,65,0 +2,90,70,17,0,27.3,0.085,22,0 +1,136,74,50,204,37.4,0.399,24,0 +4,114,65,0,0,21.9,0.432,37,0 +9,156,86,28,155,34.3,1.189,42,1 +1,153,82,42,485,40.6,0.687,23,0 +8,188,78,0,0,47.9,0.137,43,1 +7,152,88,44,0,50.0,0.337,36,1 +2,99,52,15,94,24.6,0.637,21,0 +1,109,56,21,135,25.2,0.833,23,0 +2,88,74,19,53,29.0,0.229,22,0 +17,163,72,41,114,40.9,0.817,47,1 +4,151,90,38,0,29.7,0.294,36,0 +7,102,74,40,105,37.2,0.204,45,0 +0,114,80,34,285,44.2,0.167,27,0 +2,100,64,23,0,29.7,0.368,21,0 +0,131,88,0,0,31.6,0.743,32,1 +6,104,74,18,156,29.9,0.722,41,1 +3,148,66,25,0,32.5,0.256,22,0 +4,120,68,0,0,29.6,0.709,34,0 +4,110,66,0,0,31.9,0.471,29,0 +3,111,90,12,78,28.4,0.495,29,0 +6,102,82,0,0,30.8,0.180,36,1 +6,134,70,23,130,35.4,0.542,29,1 +2,87,0,23,0,28.9,0.773,25,0 +1,79,60,42,48,43.5,0.678,23,0 +2,75,64,24,55,29.7,0.370,33,0 +8,179,72,42,130,32.7,0.719,36,1 +6,85,78,0,0,31.2,0.382,42,0 +0,129,110,46,130,67.1,0.319,26,1 +5,143,78,0,0,45.0,0.190,47,0 +5,130,82,0,0,39.1,0.956,37,1 +6,87,80,0,0,23.2,0.084,32,0 +0,119,64,18,92,34.9,0.725,23,0 +1,0,74,20,23,27.7,0.299,21,0 +5,73,60,0,0,26.8,0.268,27,0 +4,141,74,0,0,27.6,0.244,40,0 +7,194,68,28,0,35.9,0.745,41,1 +8,181,68,36,495,30.1,0.615,60,1 +1,128,98,41,58,32.0,1.321,33,1 +8,109,76,39,114,27.9,0.640,31,1 +5,139,80,35,160,31.6,0.361,25,1 +3,111,62,0,0,22.6,0.142,21,0 +9,123,70,44,94,33.1,0.374,40,0 +7,159,66,0,0,30.4,0.383,36,1 +11,135,0,0,0,52.3,0.578,40,1 +8,85,55,20,0,24.4,0.136,42,0 +5,158,84,41,210,39.4,0.395,29,1 +1,105,58,0,0,24.3,0.187,21,0 +3,107,62,13,48,22.9,0.678,23,1 +4,109,64,44,99,34.8,0.905,26,1 +4,148,60,27,318,30.9,0.150,29,1 +0,113,80,16,0,31.0,0.874,21,0 +1,138,82,0,0,40.1,0.236,28,0 +0,108,68,20,0,27.3,0.787,32,0 +2,99,70,16,44,20.4,0.235,27,0 +6,103,72,32,190,37.7,0.324,55,0 +5,111,72,28,0,23.9,0.407,27,0 +8,196,76,29,280,37.5,0.605,57,1 +5,162,104,0,0,37.7,0.151,52,1 +1,96,64,27,87,33.2,0.289,21,0 +7,184,84,33,0,35.5,0.355,41,1 +2,81,60,22,0,27.7,0.290,25,0 +0,147,85,54,0,42.8,0.375,24,0 +7,179,95,31,0,34.2,0.164,60,0 +0,140,65,26,130,42.6,0.431,24,1 +9,112,82,32,175,34.2,0.260,36,1 +12,151,70,40,271,41.8,0.742,38,1 +5,109,62,41,129,35.8,0.514,25,1 +6,125,68,30,120,30.0,0.464,32,0 +5,85,74,22,0,29.0,1.224,32,1 +5,112,66,0,0,37.8,0.261,41,1 +0,177,60,29,478,34.6,1.072,21,1 +2,158,90,0,0,31.6,0.805,66,1 +7,119,0,0,0,25.2,0.209,37,0 +7,142,60,33,190,28.8,0.687,61,0 +1,100,66,15,56,23.6,0.666,26,0 +1,87,78,27,32,34.6,0.101,22,0 +0,101,76,0,0,35.7,0.198,26,0 +3,162,52,38,0,37.2,0.652,24,1 +4,197,70,39,744,36.7,2.329,31,0 +0,117,80,31,53,45.2,0.089,24,0 +4,142,86,0,0,44.0,0.645,22,1 +6,134,80,37,370,46.2,0.238,46,1 +1,79,80,25,37,25.4,0.583,22,0 +4,122,68,0,0,35.0,0.394,29,0 +3,74,68,28,45,29.7,0.293,23,0 +4,171,72,0,0,43.6,0.479,26,1 +7,181,84,21,192,35.9,0.586,51,1 +0,179,90,27,0,44.1,0.686,23,1 +9,164,84,21,0,30.8,0.831,32,1 +0,104,76,0,0,18.4,0.582,27,0 +1,91,64,24,0,29.2,0.192,21,0 +4,91,70,32,88,33.1,0.446,22,0 +3,139,54,0,0,25.6,0.402,22,1 +6,119,50,22,176,27.1,1.318,33,1 +2,146,76,35,194,38.2,0.329,29,0 +9,184,85,15,0,30.0,1.213,49,1 +10,122,68,0,0,31.2,0.258,41,0 +0,165,90,33,680,52.3,0.427,23,0 +9,124,70,33,402,35.4,0.282,34,0 +1,111,86,19,0,30.1,0.143,23,0 +9,106,52,0,0,31.2,0.380,42,0 +2,129,84,0,0,28.0,0.284,27,0 +2,90,80,14,55,24.4,0.249,24,0 +0,86,68,32,0,35.8,0.238,25,0 +12,92,62,7,258,27.6,0.926,44,1 +1,113,64,35,0,33.6,0.543,21,1 +3,111,56,39,0,30.1,0.557,30,0 +2,114,68,22,0,28.7,0.092,25,0 +1,193,50,16,375,25.9,0.655,24,0 +11,155,76,28,150,33.3,1.353,51,1 +3,191,68,15,130,30.9,0.299,34,0 +3,141,0,0,0,30.0,0.761,27,1 +4,95,70,32,0,32.1,0.612,24,0 +3,142,80,15,0,32.4,0.200,63,0 +4,123,62,0,0,32.0,0.226,35,1 +5,96,74,18,67,33.6,0.997,43,0 +0,138,0,0,0,36.3,0.933,25,1 +2,128,64,42,0,40.0,1.101,24,0 +0,102,52,0,0,25.1,0.078,21,0 +2,146,0,0,0,27.5,0.240,28,1 +10,101,86,37,0,45.6,1.136,38,1 +2,108,62,32,56,25.2,0.128,21,0 +3,122,78,0,0,23.0,0.254,40,0 +1,71,78,50,45,33.2,0.422,21,0 +13,106,70,0,0,34.2,0.251,52,0 +2,100,70,52,57,40.5,0.677,25,0 +7,106,60,24,0,26.5,0.296,29,1 +0,104,64,23,116,27.8,0.454,23,0 +5,114,74,0,0,24.9,0.744,57,0 +2,108,62,10,278,25.3,0.881,22,0 +0,146,70,0,0,37.9,0.334,28,1 +10,129,76,28,122,35.9,0.280,39,0 +7,133,88,15,155,32.4,0.262,37,0 +7,161,86,0,0,30.4,0.165,47,1 +2,108,80,0,0,27.0,0.259,52,1 +7,136,74,26,135,26.0,0.647,51,0 +5,155,84,44,545,38.7,0.619,34,0 +1,119,86,39,220,45.6,0.808,29,1 +4,96,56,17,49,20.8,0.340,26,0 +5,108,72,43,75,36.1,0.263,33,0 +0,78,88,29,40,36.9,0.434,21,0 +0,107,62,30,74,36.6,0.757,25,1 +2,128,78,37,182,43.3,1.224,31,1 +1,128,48,45,194,40.5,0.613,24,1 +0,161,50,0,0,21.9,0.254,65,0 +6,151,62,31,120,35.5,0.692,28,0 +2,146,70,38,360,28.0,0.337,29,1 +0,126,84,29,215,30.7,0.520,24,0 +14,100,78,25,184,36.6,0.412,46,1 +8,112,72,0,0,23.6,0.840,58,0 +0,167,0,0,0,32.3,0.839,30,1 +2,144,58,33,135,31.6,0.422,25,1 +5,77,82,41,42,35.8,0.156,35,0 +5,115,98,0,0,52.9,0.209,28,1 +3,150,76,0,0,21.0,0.207,37,0 +2,120,76,37,105,39.7,0.215,29,0 +10,161,68,23,132,25.5,0.326,47,1 +0,137,68,14,148,24.8,0.143,21,0 +0,128,68,19,180,30.5,1.391,25,1 +2,124,68,28,205,32.9,0.875,30,1 +6,80,66,30,0,26.2,0.313,41,0 +0,106,70,37,148,39.4,0.605,22,0 +2,155,74,17,96,26.6,0.433,27,1 +3,113,50,10,85,29.5,0.626,25,0 +7,109,80,31,0,35.9,1.127,43,1 +2,112,68,22,94,34.1,0.315,26,0 +3,99,80,11,64,19.3,0.284,30,0 +3,182,74,0,0,30.5,0.345,29,1 +3,115,66,39,140,38.1,0.150,28,0 +6,194,78,0,0,23.5,0.129,59,1 +4,129,60,12,231,27.5,0.527,31,0 +3,112,74,30,0,31.6,0.197,25,1 +0,124,70,20,0,27.4,0.254,36,1 +13,152,90,33,29,26.8,0.731,43,1 +2,112,75,32,0,35.7,0.148,21,0 +1,157,72,21,168,25.6,0.123,24,0 +1,122,64,32,156,35.1,0.692,30,1 +10,179,70,0,0,35.1,0.200,37,0 +2,102,86,36,120,45.5,0.127,23,1 +6,105,70,32,68,30.8,0.122,37,0 +8,118,72,19,0,23.1,1.476,46,0 +2,87,58,16,52,32.7,0.166,25,0 +1,180,0,0,0,43.3,0.282,41,1 +12,106,80,0,0,23.6,0.137,44,0 +1,95,60,18,58,23.9,0.260,22,0 +0,165,76,43,255,47.9,0.259,26,0 +0,117,0,0,0,33.8,0.932,44,0 +5,115,76,0,0,31.2,0.343,44,1 +9,152,78,34,171,34.2,0.893,33,1 +7,178,84,0,0,39.9,0.331,41,1 +1,130,70,13,105,25.9,0.472,22,0 +1,95,74,21,73,25.9,0.673,36,0 +1,0,68,35,0,32.0,0.389,22,0 +5,122,86,0,0,34.7,0.290,33,0 +8,95,72,0,0,36.8,0.485,57,0 +8,126,88,36,108,38.5,0.349,49,0 +1,139,46,19,83,28.7,0.654,22,0 +3,116,0,0,0,23.5,0.187,23,0 +3,99,62,19,74,21.8,0.279,26,0 +5,0,80,32,0,41.0,0.346,37,1 +4,92,80,0,0,42.2,0.237,29,0 +4,137,84,0,0,31.2,0.252,30,0 +3,61,82,28,0,34.4,0.243,46,0 +1,90,62,12,43,27.2,0.580,24,0 +3,90,78,0,0,42.7,0.559,21,0 +9,165,88,0,0,30.4,0.302,49,1 +1,125,50,40,167,33.3,0.962,28,1 +13,129,0,30,0,39.9,0.569,44,1 +12,88,74,40,54,35.3,0.378,48,0 +1,196,76,36,249,36.5,0.875,29,1 +5,189,64,33,325,31.2,0.583,29,1 +5,158,70,0,0,29.8,0.207,63,0 +5,103,108,37,0,39.2,0.305,65,0 +4,146,78,0,0,38.5,0.520,67,1 +4,147,74,25,293,34.9,0.385,30,0 +5,99,54,28,83,34.0,0.499,30,0 +6,124,72,0,0,27.6,0.368,29,1 +0,101,64,17,0,21.0,0.252,21,0 +3,81,86,16,66,27.5,0.306,22,0 +1,133,102,28,140,32.8,0.234,45,1 +3,173,82,48,465,38.4,2.137,25,1 +0,118,64,23,89,0.0,1.731,21,0 +0,84,64,22,66,35.8,0.545,21,0 +2,105,58,40,94,34.9,0.225,25,0 +2,122,52,43,158,36.2,0.816,28,0 +12,140,82,43,325,39.2,0.528,58,1 +0,98,82,15,84,25.2,0.299,22,0 +1,87,60,37,75,37.2,0.509,22,0 +4,156,75,0,0,48.3,0.238,32,1 +0,93,100,39,72,43.4,1.021,35,0 +1,107,72,30,82,30.8,0.821,24,0 +0,105,68,22,0,20.0,0.236,22,0 +1,109,60,8,182,25.4,0.947,21,0 +1,90,62,18,59,25.1,1.268,25,0 +1,125,70,24,110,24.3,0.221,25,0 +1,119,54,13,50,22.3,0.205,24,0 +5,116,74,29,0,32.3,0.660,35,1 +8,105,100,36,0,43.3,0.239,45,1 +5,144,82,26,285,32.0,0.452,58,1 +3,100,68,23,81,31.6,0.949,28,0 +1,100,66,29,196,32.0,0.444,42,0 +5,166,76,0,0,45.7,0.340,27,1 +1,131,64,14,415,23.7,0.389,21,0 +4,116,72,12,87,22.1,0.463,37,0 +4,158,78,0,0,32.9,0.803,31,1 +2,127,58,24,275,27.7,1.600,25,0 +3,96,56,34,115,24.7,0.944,39,0 +0,131,66,40,0,34.3,0.196,22,1 +3,82,70,0,0,21.1,0.389,25,0 +3,193,70,31,0,34.9,0.241,25,1 +4,95,64,0,0,32.0,0.161,31,1 +6,137,61,0,0,24.2,0.151,55,0 +5,136,84,41,88,35.0,0.286,35,1 +9,72,78,25,0,31.6,0.280,38,0 +5,168,64,0,0,32.9,0.135,41,1 +2,123,48,32,165,42.1,0.520,26,0 +4,115,72,0,0,28.9,0.376,46,1 +0,101,62,0,0,21.9,0.336,25,0 +8,197,74,0,0,25.9,1.191,39,1 +1,172,68,49,579,42.4,0.702,28,1 +6,102,90,39,0,35.7,0.674,28,0 +1,112,72,30,176,34.4,0.528,25,0 +1,143,84,23,310,42.4,1.076,22,0 +1,143,74,22,61,26.2,0.256,21,0 +0,138,60,35,167,34.6,0.534,21,1 +3,173,84,33,474,35.7,0.258,22,1 +1,97,68,21,0,27.2,1.095,22,0 +4,144,82,32,0,38.5,0.554,37,1 +1,83,68,0,0,18.2,0.624,27,0 +3,129,64,29,115,26.4,0.219,28,1 +1,119,88,41,170,45.3,0.507,26,0 +2,94,68,18,76,26.0,0.561,21,0 +0,102,64,46,78,40.6,0.496,21,0 +2,115,64,22,0,30.8,0.421,21,0 +8,151,78,32,210,42.9,0.516,36,1 +4,184,78,39,277,37.0,0.264,31,1 +0,94,0,0,0,0.0,0.256,25,0 +1,181,64,30,180,34.1,0.328,38,1 +0,135,94,46,145,40.6,0.284,26,0 +1,95,82,25,180,35.0,0.233,43,1 +2,99,0,0,0,22.2,0.108,23,0 +3,89,74,16,85,30.4,0.551,38,0 +1,80,74,11,60,30.0,0.527,22,0 +2,139,75,0,0,25.6,0.167,29,0 +1,90,68,8,0,24.5,1.138,36,0 +0,141,0,0,0,42.4,0.205,29,1 +12,140,85,33,0,37.4,0.244,41,0 +5,147,75,0,0,29.9,0.434,28,0 +1,97,70,15,0,18.2,0.147,21,0 +6,107,88,0,0,36.8,0.727,31,0 +0,189,104,25,0,34.3,0.435,41,1 +2,83,66,23,50,32.2,0.497,22,0 +4,117,64,27,120,33.2,0.230,24,0 +8,108,70,0,0,30.5,0.955,33,1 +4,117,62,12,0,29.7,0.380,30,1 +0,180,78,63,14,59.4,2.420,25,1 +1,100,72,12,70,25.3,0.658,28,0 +0,95,80,45,92,36.5,0.330,26,0 +0,104,64,37,64,33.6,0.510,22,1 +0,120,74,18,63,30.5,0.285,26,0 +1,82,64,13,95,21.2,0.415,23,0 +2,134,70,0,0,28.9,0.542,23,1 +0,91,68,32,210,39.9,0.381,25,0 +2,119,0,0,0,19.6,0.832,72,0 +2,100,54,28,105,37.8,0.498,24,0 +14,175,62,30,0,33.6,0.212,38,1 +1,135,54,0,0,26.7,0.687,62,0 +5,86,68,28,71,30.2,0.364,24,0 +10,148,84,48,237,37.6,1.001,51,1 +9,134,74,33,60,25.9,0.460,81,0 +9,120,72,22,56,20.8,0.733,48,0 +1,71,62,0,0,21.8,0.416,26,0 +8,74,70,40,49,35.3,0.705,39,0 +5,88,78,30,0,27.6,0.258,37,0 +10,115,98,0,0,24.0,1.022,34,0 +0,124,56,13,105,21.8,0.452,21,0 +0,74,52,10,36,27.8,0.269,22,0 +0,97,64,36,100,36.8,0.600,25,0 +8,120,0,0,0,30.0,0.183,38,1 +6,154,78,41,140,46.1,0.571,27,0 +1,144,82,40,0,41.3,0.607,28,0 +0,137,70,38,0,33.2,0.170,22,0 +0,119,66,27,0,38.8,0.259,22,0 +7,136,90,0,0,29.9,0.210,50,0 +4,114,64,0,0,28.9,0.126,24,0 +0,137,84,27,0,27.3,0.231,59,0 +2,105,80,45,191,33.7,0.711,29,1 +7,114,76,17,110,23.8,0.466,31,0 +8,126,74,38,75,25.9,0.162,39,0 +4,132,86,31,0,28.0,0.419,63,0 +3,158,70,30,328,35.5,0.344,35,1 +0,123,88,37,0,35.2,0.197,29,0 +4,85,58,22,49,27.8,0.306,28,0 +0,84,82,31,125,38.2,0.233,23,0 +0,145,0,0,0,44.2,0.630,31,1 +0,135,68,42,250,42.3,0.365,24,1 +1,139,62,41,480,40.7,0.536,21,0 +0,173,78,32,265,46.5,1.159,58,0 +4,99,72,17,0,25.6,0.294,28,0 +8,194,80,0,0,26.1,0.551,67,0 +2,83,65,28,66,36.8,0.629,24,0 +2,89,90,30,0,33.5,0.292,42,0 +4,99,68,38,0,32.8,0.145,33,0 +4,125,70,18,122,28.9,1.144,45,1 +3,80,0,0,0,0.0,0.174,22,0 +6,166,74,0,0,26.6,0.304,66,0 +5,110,68,0,0,26.0,0.292,30,0 +2,81,72,15,76,30.1,0.547,25,0 +7,195,70,33,145,25.1,0.163,55,1 +6,154,74,32,193,29.3,0.839,39,0 +2,117,90,19,71,25.2,0.313,21,0 +3,84,72,32,0,37.2,0.267,28,0 +6,0,68,41,0,39.0,0.727,41,1 +7,94,64,25,79,33.3,0.738,41,0 +3,96,78,39,0,37.3,0.238,40,0 +10,75,82,0,0,33.3,0.263,38,0 +0,180,90,26,90,36.5,0.314,35,1 +1,130,60,23,170,28.6,0.692,21,0 +2,84,50,23,76,30.4,0.968,21,0 +8,120,78,0,0,25.0,0.409,64,0 +12,84,72,31,0,29.7,0.297,46,1 +0,139,62,17,210,22.1,0.207,21,0 +9,91,68,0,0,24.2,0.200,58,0 +2,91,62,0,0,27.3,0.525,22,0 +3,99,54,19,86,25.6,0.154,24,0 +3,163,70,18,105,31.6,0.268,28,1 +9,145,88,34,165,30.3,0.771,53,1 +7,125,86,0,0,37.6,0.304,51,0 +13,76,60,0,0,32.8,0.180,41,0 +6,129,90,7,326,19.6,0.582,60,0 +2,68,70,32,66,25.0,0.187,25,0 +3,124,80,33,130,33.2,0.305,26,0 +6,114,0,0,0,0.0,0.189,26,0 +9,130,70,0,0,34.2,0.652,45,1 +3,125,58,0,0,31.6,0.151,24,0 +3,87,60,18,0,21.8,0.444,21,0 +1,97,64,19,82,18.2,0.299,21,0 +3,116,74,15,105,26.3,0.107,24,0 +0,117,66,31,188,30.8,0.493,22,0 +0,111,65,0,0,24.6,0.660,31,0 +2,122,60,18,106,29.8,0.717,22,0 +0,107,76,0,0,45.3,0.686,24,0 +1,86,66,52,65,41.3,0.917,29,0 +6,91,0,0,0,29.8,0.501,31,0 +1,77,56,30,56,33.3,1.251,24,0 +4,132,0,0,0,32.9,0.302,23,1 +0,105,90,0,0,29.6,0.197,46,0 +0,57,60,0,0,21.7,0.735,67,0 +0,127,80,37,210,36.3,0.804,23,0 +3,129,92,49,155,36.4,0.968,32,1 +8,100,74,40,215,39.4,0.661,43,1 +3,128,72,25,190,32.4,0.549,27,1 +10,90,85,32,0,34.9,0.825,56,1 +4,84,90,23,56,39.5,0.159,25,0 +1,88,78,29,76,32.0,0.365,29,0 +8,186,90,35,225,34.5,0.423,37,1 +5,187,76,27,207,43.6,1.034,53,1 +4,131,68,21,166,33.1,0.160,28,0 +1,164,82,43,67,32.8,0.341,50,0 +4,189,110,31,0,28.5,0.680,37,0 +1,116,70,28,0,27.4,0.204,21,0 +3,84,68,30,106,31.9,0.591,25,0 +6,114,88,0,0,27.8,0.247,66,0 +1,88,62,24,44,29.9,0.422,23,0 +1,84,64,23,115,36.9,0.471,28,0 +7,124,70,33,215,25.5,0.161,37,0 +1,97,70,40,0,38.1,0.218,30,0 +8,110,76,0,0,27.8,0.237,58,0 +11,103,68,40,0,46.2,0.126,42,0 +11,85,74,0,0,30.1,0.300,35,0 +6,125,76,0,0,33.8,0.121,54,1 +0,198,66,32,274,41.3,0.502,28,1 +1,87,68,34,77,37.6,0.401,24,0 +6,99,60,19,54,26.9,0.497,32,0 +0,91,80,0,0,32.4,0.601,27,0 +2,95,54,14,88,26.1,0.748,22,0 +1,99,72,30,18,38.6,0.412,21,0 +6,92,62,32,126,32.0,0.085,46,0 +4,154,72,29,126,31.3,0.338,37,0 +0,121,66,30,165,34.3,0.203,33,1 +3,78,70,0,0,32.5,0.270,39,0 +2,130,96,0,0,22.6,0.268,21,0 +3,111,58,31,44,29.5,0.430,22,0 +2,98,60,17,120,34.7,0.198,22,0 +1,143,86,30,330,30.1,0.892,23,0 +1,119,44,47,63,35.5,0.280,25,0 +6,108,44,20,130,24.0,0.813,35,0 +2,118,80,0,0,42.9,0.693,21,1 +10,133,68,0,0,27.0,0.245,36,0 +2,197,70,99,0,34.7,0.575,62,1 +0,151,90,46,0,42.1,0.371,21,1 +6,109,60,27,0,25.0,0.206,27,0 +12,121,78,17,0,26.5,0.259,62,0 +8,100,76,0,0,38.7,0.190,42,0 +8,124,76,24,600,28.7,0.687,52,1 +1,93,56,11,0,22.5,0.417,22,0 +8,143,66,0,0,34.9,0.129,41,1 +6,103,66,0,0,24.3,0.249,29,0 +3,176,86,27,156,33.3,1.154,52,1 +0,73,0,0,0,21.1,0.342,25,0 +11,111,84,40,0,46.8,0.925,45,1 +2,112,78,50,140,39.4,0.175,24,0 +3,132,80,0,0,34.4,0.402,44,1 +2,82,52,22,115,28.5,1.699,25,0 +6,123,72,45,230,33.6,0.733,34,0 +0,188,82,14,185,32.0,0.682,22,1 +0,67,76,0,0,45.3,0.194,46,0 +1,89,24,19,25,27.8,0.559,21,0 +1,173,74,0,0,36.8,0.088,38,1 +1,109,38,18,120,23.1,0.407,26,0 +1,108,88,19,0,27.1,0.400,24,0 +6,96,0,0,0,23.7,0.190,28,0 +1,124,74,36,0,27.8,0.100,30,0 +7,150,78,29,126,35.2,0.692,54,1 +4,183,0,0,0,28.4,0.212,36,1 +1,124,60,32,0,35.8,0.514,21,0 +1,181,78,42,293,40.0,1.258,22,1 +1,92,62,25,41,19.5,0.482,25,0 +0,152,82,39,272,41.5,0.270,27,0 +1,111,62,13,182,24.0,0.138,23,0 +3,106,54,21,158,30.9,0.292,24,0 +3,174,58,22,194,32.9,0.593,36,1 +7,168,88,42,321,38.2,0.787,40,1 +6,105,80,28,0,32.5,0.878,26,0 +11,138,74,26,144,36.1,0.557,50,1 +3,106,72,0,0,25.8,0.207,27,0 +6,117,96,0,0,28.7,0.157,30,0 +2,68,62,13,15,20.1,0.257,23,0 +9,112,82,24,0,28.2,1.282,50,1 +0,119,0,0,0,32.4,0.141,24,1 +2,112,86,42,160,38.4,0.246,28,0 +2,92,76,20,0,24.2,1.698,28,0 +6,183,94,0,0,40.8,1.461,45,0 +0,94,70,27,115,43.5,0.347,21,0 +2,108,64,0,0,30.8,0.158,21,0 +4,90,88,47,54,37.7,0.362,29,0 +0,125,68,0,0,24.7,0.206,21,0 +0,132,78,0,0,32.4,0.393,21,0 +5,128,80,0,0,34.6,0.144,45,0 +4,94,65,22,0,24.7,0.148,21,0 +7,114,64,0,0,27.4,0.732,34,1 +0,102,78,40,90,34.5,0.238,24,0 +2,111,60,0,0,26.2,0.343,23,0 +1,128,82,17,183,27.5,0.115,22,0 +10,92,62,0,0,25.9,0.167,31,0 +13,104,72,0,0,31.2,0.465,38,1 +5,104,74,0,0,28.8,0.153,48,0 +2,94,76,18,66,31.6,0.649,23,0 +7,97,76,32,91,40.9,0.871,32,1 +1,100,74,12,46,19.5,0.149,28,0 +0,102,86,17,105,29.3,0.695,27,0 +4,128,70,0,0,34.3,0.303,24,0 +6,147,80,0,0,29.5,0.178,50,1 +4,90,0,0,0,28.0,0.610,31,0 +3,103,72,30,152,27.6,0.730,27,0 +2,157,74,35,440,39.4,0.134,30,0 +1,167,74,17,144,23.4,0.447,33,1 +0,179,50,36,159,37.8,0.455,22,1 +11,136,84,35,130,28.3,0.260,42,1 +0,107,60,25,0,26.4,0.133,23,0 +1,91,54,25,100,25.2,0.234,23,0 +1,117,60,23,106,33.8,0.466,27,0 +5,123,74,40,77,34.1,0.269,28,0 +2,120,54,0,0,26.8,0.455,27,0 +1,106,70,28,135,34.2,0.142,22,0 +2,155,52,27,540,38.7,0.240,25,1 +2,101,58,35,90,21.8,0.155,22,0 +1,120,80,48,200,38.9,1.162,41,0 +11,127,106,0,0,39.0,0.190,51,0 +3,80,82,31,70,34.2,1.292,27,1 +10,162,84,0,0,27.7,0.182,54,0 +1,199,76,43,0,42.9,1.394,22,1 +8,167,106,46,231,37.6,0.165,43,1 +9,145,80,46,130,37.9,0.637,40,1 +6,115,60,39,0,33.7,0.245,40,1 +1,112,80,45,132,34.8,0.217,24,0 +4,145,82,18,0,32.5,0.235,70,1 +10,111,70,27,0,27.5,0.141,40,1 +6,98,58,33,190,34.0,0.430,43,0 +9,154,78,30,100,30.9,0.164,45,0 +6,165,68,26,168,33.6,0.631,49,0 +1,99,58,10,0,25.4,0.551,21,0 +10,68,106,23,49,35.5,0.285,47,0 +3,123,100,35,240,57.3,0.880,22,0 +8,91,82,0,0,35.6,0.587,68,0 +6,195,70,0,0,30.9,0.328,31,1 +9,156,86,0,0,24.8,0.230,53,1 +0,93,60,0,0,35.3,0.263,25,0 +3,121,52,0,0,36.0,0.127,25,1 +2,101,58,17,265,24.2,0.614,23,0 +2,56,56,28,45,24.2,0.332,22,0 +0,162,76,36,0,49.6,0.364,26,1 +0,95,64,39,105,44.6,0.366,22,0 +4,125,80,0,0,32.3,0.536,27,1 +5,136,82,0,0,0.0,0.640,69,0 +2,129,74,26,205,33.2,0.591,25,0 +3,130,64,0,0,23.1,0.314,22,0 +1,107,50,19,0,28.3,0.181,29,0 +1,140,74,26,180,24.1,0.828,23,0 +1,144,82,46,180,46.1,0.335,46,1 +8,107,80,0,0,24.6,0.856,34,0 +13,158,114,0,0,42.3,0.257,44,1 +2,121,70,32,95,39.1,0.886,23,0 +7,129,68,49,125,38.5,0.439,43,1 +2,90,60,0,0,23.5,0.191,25,0 +7,142,90,24,480,30.4,0.128,43,1 +3,169,74,19,125,29.9,0.268,31,1 +0,99,0,0,0,25.0,0.253,22,0 +4,127,88,11,155,34.5,0.598,28,0 +4,118,70,0,0,44.5,0.904,26,0 +2,122,76,27,200,35.9,0.483,26,0 +6,125,78,31,0,27.6,0.565,49,1 +1,168,88,29,0,35.0,0.905,52,1 +2,129,0,0,0,38.5,0.304,41,0 +4,110,76,20,100,28.4,0.118,27,0 +6,80,80,36,0,39.8,0.177,28,0 +10,115,0,0,0,0.0,0.261,30,1 +2,127,46,21,335,34.4,0.176,22,0 +9,164,78,0,0,32.8,0.148,45,1 +2,93,64,32,160,38.0,0.674,23,1 +3,158,64,13,387,31.2,0.295,24,0 +5,126,78,27,22,29.6,0.439,40,0 +10,129,62,36,0,41.2,0.441,38,1 +0,134,58,20,291,26.4,0.352,21,0 +3,102,74,0,0,29.5,0.121,32,0 +7,187,50,33,392,33.9,0.826,34,1 +3,173,78,39,185,33.8,0.970,31,1 +10,94,72,18,0,23.1,0.595,56,0 +1,108,60,46,178,35.5,0.415,24,0 +5,97,76,27,0,35.6,0.378,52,1 +4,83,86,19,0,29.3,0.317,34,0 +1,114,66,36,200,38.1,0.289,21,0 +1,149,68,29,127,29.3,0.349,42,1 +5,117,86,30,105,39.1,0.251,42,0 +1,111,94,0,0,32.8,0.265,45,0 +4,112,78,40,0,39.4,0.236,38,0 +1,116,78,29,180,36.1,0.496,25,0 +0,141,84,26,0,32.4,0.433,22,0 +2,175,88,0,0,22.9,0.326,22,0 +2,92,52,0,0,30.1,0.141,22,0 +3,130,78,23,79,28.4,0.323,34,1 +8,120,86,0,0,28.4,0.259,22,1 +2,174,88,37,120,44.5,0.646,24,1 +2,106,56,27,165,29.0,0.426,22,0 +2,105,75,0,0,23.3,0.560,53,0 +4,95,60,32,0,35.4,0.284,28,0 +0,126,86,27,120,27.4,0.515,21,0 +8,65,72,23,0,32.0,0.600,42,0 +2,99,60,17,160,36.6,0.453,21,0 +1,102,74,0,0,39.5,0.293,42,1 +11,120,80,37,150,42.3,0.785,48,1 +3,102,44,20,94,30.8,0.400,26,0 +1,109,58,18,116,28.5,0.219,22,0 +9,140,94,0,0,32.7,0.734,45,1 +13,153,88,37,140,40.6,1.174,39,0 +12,100,84,33,105,30.0,0.488,46,0 +1,147,94,41,0,49.3,0.358,27,1 +1,81,74,41,57,46.3,1.096,32,0 +3,187,70,22,200,36.4,0.408,36,1 +6,162,62,0,0,24.3,0.178,50,1 +4,136,70,0,0,31.2,1.182,22,1 +1,121,78,39,74,39.0,0.261,28,0 +3,108,62,24,0,26.0,0.223,25,0 +0,181,88,44,510,43.3,0.222,26,1 +8,154,78,32,0,32.4,0.443,45,1 +1,128,88,39,110,36.5,1.057,37,1 +7,137,90,41,0,32.0,0.391,39,0 +0,123,72,0,0,36.3,0.258,52,1 +1,106,76,0,0,37.5,0.197,26,0 +6,190,92,0,0,35.5,0.278,66,1 +2,88,58,26,16,28.4,0.766,22,0 +9,170,74,31,0,44.0,0.403,43,1 +9,89,62,0,0,22.5,0.142,33,0 +10,101,76,48,180,32.9,0.171,63,0 +2,122,70,27,0,36.8,0.340,27,0 +5,121,72,23,112,26.2,0.245,30,0 +1,126,60,0,0,30.1,0.349,47,1 +1,93,70,31,0,30.4,0.315,23,0 \ No newline at end of file diff --git a/data/titanic.csv b/data/titanic.csv new file mode 100644 index 0000000..5cc466e --- /dev/null +++ b/data/titanic.csv @@ -0,0 +1,892 @@ +PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked +1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S +2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C +3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S +4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35,1,0,113803,53.1,C123,S +5,0,3,"Allen, Mr. William Henry",male,35,0,0,373450,8.05,,S +6,0,3,"Moran, Mr. James",male,,0,0,330877,8.4583,,Q +7,0,1,"McCarthy, Mr. Timothy J",male,54,0,0,17463,51.8625,E46,S +8,0,3,"Palsson, Master. Gosta Leonard",male,2,3,1,349909,21.075,,S +9,1,3,"Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)",female,27,0,2,347742,11.1333,,S +10,1,2,"Nasser, Mrs. Nicholas (Adele Achem)",female,14,1,0,237736,30.0708,,C +11,1,3,"Sandstrom, Miss. Marguerite Rut",female,4,1,1,PP 9549,16.7,G6,S +12,1,1,"Bonnell, Miss. Elizabeth",female,58,0,0,113783,26.55,C103,S +13,0,3,"Saundercock, Mr. William Henry",male,20,0,0,A/5. 2151,8.05,,S +14,0,3,"Andersson, Mr. Anders Johan",male,39,1,5,347082,31.275,,S +15,0,3,"Vestrom, Miss. Hulda Amanda Adolfina",female,14,0,0,350406,7.8542,,S +16,1,2,"Hewlett, Mrs. (Mary D Kingcome) ",female,55,0,0,248706,16,,S +17,0,3,"Rice, Master. Eugene",male,2,4,1,382652,29.125,,Q +18,1,2,"Williams, Mr. Charles Eugene",male,,0,0,244373,13,,S +19,0,3,"Vander Planke, Mrs. Julius (Emelia Maria Vandemoortele)",female,31,1,0,345763,18,,S +20,1,3,"Masselmani, Mrs. Fatima",female,,0,0,2649,7.225,,C +21,0,2,"Fynney, Mr. Joseph J",male,35,0,0,239865,26,,S +22,1,2,"Beesley, Mr. Lawrence",male,34,0,0,248698,13,D56,S +23,1,3,"McGowan, Miss. Anna ""Annie""",female,15,0,0,330923,8.0292,,Q +24,1,1,"Sloper, Mr. William Thompson",male,28,0,0,113788,35.5,A6,S +25,0,3,"Palsson, Miss. Torborg Danira",female,8,3,1,349909,21.075,,S +26,1,3,"Asplund, Mrs. Carl Oscar (Selma Augusta Emilia Johansson)",female,38,1,5,347077,31.3875,,S +27,0,3,"Emir, Mr. Farred Chehab",male,,0,0,2631,7.225,,C +28,0,1,"Fortune, Mr. Charles Alexander",male,19,3,2,19950,263,C23 C25 C27,S +29,1,3,"O'Dwyer, Miss. Ellen ""Nellie""",female,,0,0,330959,7.8792,,Q +30,0,3,"Todoroff, Mr. Lalio",male,,0,0,349216,7.8958,,S +31,0,1,"Uruchurtu, Don. Manuel E",male,40,0,0,PC 17601,27.7208,,C +32,1,1,"Spencer, Mrs. William Augustus (Marie Eugenie)",female,,1,0,PC 17569,146.5208,B78,C +33,1,3,"Glynn, Miss. Mary Agatha",female,,0,0,335677,7.75,,Q +34,0,2,"Wheadon, Mr. Edward H",male,66,0,0,C.A. 24579,10.5,,S +35,0,1,"Meyer, Mr. Edgar Joseph",male,28,1,0,PC 17604,82.1708,,C +36,0,1,"Holverson, Mr. Alexander Oskar",male,42,1,0,113789,52,,S +37,1,3,"Mamee, Mr. Hanna",male,,0,0,2677,7.2292,,C +38,0,3,"Cann, Mr. Ernest Charles",male,21,0,0,A./5. 2152,8.05,,S +39,0,3,"Vander Planke, Miss. Augusta Maria",female,18,2,0,345764,18,,S +40,1,3,"Nicola-Yarred, Miss. Jamila",female,14,1,0,2651,11.2417,,C +41,0,3,"Ahlin, Mrs. Johan (Johanna Persdotter Larsson)",female,40,1,0,7546,9.475,,S +42,0,2,"Turpin, Mrs. William John Robert (Dorothy Ann Wonnacott)",female,27,1,0,11668,21,,S +43,0,3,"Kraeff, Mr. Theodor",male,,0,0,349253,7.8958,,C +44,1,2,"Laroche, Miss. Simonne Marie Anne Andree",female,3,1,2,SC/Paris 2123,41.5792,,C +45,1,3,"Devaney, Miss. Margaret Delia",female,19,0,0,330958,7.8792,,Q +46,0,3,"Rogers, Mr. William John",male,,0,0,S.C./A.4. 23567,8.05,,S +47,0,3,"Lennon, Mr. Denis",male,,1,0,370371,15.5,,Q +48,1,3,"O'Driscoll, Miss. Bridget",female,,0,0,14311,7.75,,Q +49,0,3,"Samaan, Mr. Youssef",male,,2,0,2662,21.6792,,C +50,0,3,"Arnold-Franchi, Mrs. Josef (Josefine Franchi)",female,18,1,0,349237,17.8,,S +51,0,3,"Panula, Master. Juha Niilo",male,7,4,1,3101295,39.6875,,S +52,0,3,"Nosworthy, Mr. Richard Cater",male,21,0,0,A/4. 39886,7.8,,S +53,1,1,"Harper, Mrs. Henry Sleeper (Myna Haxtun)",female,49,1,0,PC 17572,76.7292,D33,C +54,1,2,"Faunthorpe, Mrs. Lizzie (Elizabeth Anne Wilkinson)",female,29,1,0,2926,26,,S +55,0,1,"Ostby, Mr. Engelhart Cornelius",male,65,0,1,113509,61.9792,B30,C +56,1,1,"Woolner, Mr. Hugh",male,,0,0,19947,35.5,C52,S +57,1,2,"Rugg, Miss. Emily",female,21,0,0,C.A. 31026,10.5,,S +58,0,3,"Novel, Mr. Mansouer",male,28.5,0,0,2697,7.2292,,C +59,1,2,"West, Miss. Constance Mirium",female,5,1,2,C.A. 34651,27.75,,S +60,0,3,"Goodwin, Master. William Frederick",male,11,5,2,CA 2144,46.9,,S +61,0,3,"Sirayanian, Mr. Orsen",male,22,0,0,2669,7.2292,,C +62,1,1,"Icard, Miss. Amelie",female,38,0,0,113572,80,B28, +63,0,1,"Harris, Mr. Henry Birkhardt",male,45,1,0,36973,83.475,C83,S +64,0,3,"Skoog, Master. Harald",male,4,3,2,347088,27.9,,S +65,0,1,"Stewart, Mr. Albert A",male,,0,0,PC 17605,27.7208,,C +66,1,3,"Moubarek, Master. Gerios",male,,1,1,2661,15.2458,,C +67,1,2,"Nye, Mrs. (Elizabeth Ramell)",female,29,0,0,C.A. 29395,10.5,F33,S +68,0,3,"Crease, Mr. Ernest James",male,19,0,0,S.P. 3464,8.1583,,S +69,1,3,"Andersson, Miss. Erna Alexandra",female,17,4,2,3101281,7.925,,S +70,0,3,"Kink, Mr. Vincenz",male,26,2,0,315151,8.6625,,S +71,0,2,"Jenkin, Mr. Stephen Curnow",male,32,0,0,C.A. 33111,10.5,,S +72,0,3,"Goodwin, Miss. Lillian Amy",female,16,5,2,CA 2144,46.9,,S +73,0,2,"Hood, Mr. Ambrose Jr",male,21,0,0,S.O.C. 14879,73.5,,S +74,0,3,"Chronopoulos, Mr. Apostolos",male,26,1,0,2680,14.4542,,C +75,1,3,"Bing, Mr. Lee",male,32,0,0,1601,56.4958,,S +76,0,3,"Moen, Mr. Sigurd Hansen",male,25,0,0,348123,7.65,F G73,S +77,0,3,"Staneff, Mr. Ivan",male,,0,0,349208,7.8958,,S +78,0,3,"Moutal, Mr. Rahamin Haim",male,,0,0,374746,8.05,,S +79,1,2,"Caldwell, Master. Alden Gates",male,0.83,0,2,248738,29,,S +80,1,3,"Dowdell, Miss. Elizabeth",female,30,0,0,364516,12.475,,S +81,0,3,"Waelens, Mr. Achille",male,22,0,0,345767,9,,S +82,1,3,"Sheerlinck, Mr. Jan Baptist",male,29,0,0,345779,9.5,,S +83,1,3,"McDermott, Miss. Brigdet Delia",female,,0,0,330932,7.7875,,Q +84,0,1,"Carrau, Mr. Francisco M",male,28,0,0,113059,47.1,,S +85,1,2,"Ilett, Miss. Bertha",female,17,0,0,SO/C 14885,10.5,,S +86,1,3,"Backstrom, Mrs. Karl Alfred (Maria Mathilda Gustafsson)",female,33,3,0,3101278,15.85,,S +87,0,3,"Ford, Mr. William Neal",male,16,1,3,W./C. 6608,34.375,,S +88,0,3,"Slocovski, Mr. Selman Francis",male,,0,0,SOTON/OQ 392086,8.05,,S +89,1,1,"Fortune, Miss. Mabel Helen",female,23,3,2,19950,263,C23 C25 C27,S +90,0,3,"Celotti, Mr. Francesco",male,24,0,0,343275,8.05,,S +91,0,3,"Christmann, Mr. Emil",male,29,0,0,343276,8.05,,S +92,0,3,"Andreasson, Mr. Paul Edvin",male,20,0,0,347466,7.8542,,S +93,0,1,"Chaffee, Mr. Herbert Fuller",male,46,1,0,W.E.P. 5734,61.175,E31,S +94,0,3,"Dean, Mr. Bertram Frank",male,26,1,2,C.A. 2315,20.575,,S +95,0,3,"Coxon, Mr. Daniel",male,59,0,0,364500,7.25,,S +96,0,3,"Shorney, Mr. Charles Joseph",male,,0,0,374910,8.05,,S +97,0,1,"Goldschmidt, Mr. George B",male,71,0,0,PC 17754,34.6542,A5,C +98,1,1,"Greenfield, Mr. William Bertram",male,23,0,1,PC 17759,63.3583,D10 D12,C +99,1,2,"Doling, Mrs. John T (Ada Julia Bone)",female,34,0,1,231919,23,,S +100,0,2,"Kantor, Mr. Sinai",male,34,1,0,244367,26,,S +101,0,3,"Petranec, Miss. Matilda",female,28,0,0,349245,7.8958,,S +102,0,3,"Petroff, Mr. Pastcho (""Pentcho"")",male,,0,0,349215,7.8958,,S +103,0,1,"White, Mr. Richard Frasar",male,21,0,1,35281,77.2875,D26,S +104,0,3,"Johansson, Mr. Gustaf Joel",male,33,0,0,7540,8.6542,,S +105,0,3,"Gustafsson, Mr. Anders Vilhelm",male,37,2,0,3101276,7.925,,S +106,0,3,"Mionoff, Mr. Stoytcho",male,28,0,0,349207,7.8958,,S +107,1,3,"Salkjelsvik, Miss. Anna Kristine",female,21,0,0,343120,7.65,,S +108,1,3,"Moss, Mr. Albert Johan",male,,0,0,312991,7.775,,S +109,0,3,"Rekic, Mr. Tido",male,38,0,0,349249,7.8958,,S +110,1,3,"Moran, Miss. Bertha",female,,1,0,371110,24.15,,Q +111,0,1,"Porter, Mr. Walter Chamberlain",male,47,0,0,110465,52,C110,S +112,0,3,"Zabour, Miss. Hileni",female,14.5,1,0,2665,14.4542,,C +113,0,3,"Barton, Mr. David John",male,22,0,0,324669,8.05,,S +114,0,3,"Jussila, Miss. Katriina",female,20,1,0,4136,9.825,,S +115,0,3,"Attalah, Miss. Malake",female,17,0,0,2627,14.4583,,C +116,0,3,"Pekoniemi, Mr. Edvard",male,21,0,0,STON/O 2. 3101294,7.925,,S +117,0,3,"Connors, Mr. Patrick",male,70.5,0,0,370369,7.75,,Q +118,0,2,"Turpin, Mr. William John Robert",male,29,1,0,11668,21,,S +119,0,1,"Baxter, Mr. Quigg Edmond",male,24,0,1,PC 17558,247.5208,B58 B60,C +120,0,3,"Andersson, Miss. Ellis Anna Maria",female,2,4,2,347082,31.275,,S +121,0,2,"Hickman, Mr. Stanley George",male,21,2,0,S.O.C. 14879,73.5,,S +122,0,3,"Moore, Mr. Leonard Charles",male,,0,0,A4. 54510,8.05,,S +123,0,2,"Nasser, Mr. Nicholas",male,32.5,1,0,237736,30.0708,,C +124,1,2,"Webber, Miss. Susan",female,32.5,0,0,27267,13,E101,S +125,0,1,"White, Mr. Percival Wayland",male,54,0,1,35281,77.2875,D26,S +126,1,3,"Nicola-Yarred, Master. Elias",male,12,1,0,2651,11.2417,,C +127,0,3,"McMahon, Mr. Martin",male,,0,0,370372,7.75,,Q +128,1,3,"Madsen, Mr. Fridtjof Arne",male,24,0,0,C 17369,7.1417,,S +129,1,3,"Peter, Miss. Anna",female,,1,1,2668,22.3583,F E69,C +130,0,3,"Ekstrom, Mr. Johan",male,45,0,0,347061,6.975,,S +131,0,3,"Drazenoic, Mr. Jozef",male,33,0,0,349241,7.8958,,C +132,0,3,"Coelho, Mr. Domingos Fernandeo",male,20,0,0,SOTON/O.Q. 3101307,7.05,,S +133,0,3,"Robins, Mrs. Alexander A (Grace Charity Laury)",female,47,1,0,A/5. 3337,14.5,,S +134,1,2,"Weisz, Mrs. Leopold (Mathilde Francoise Pede)",female,29,1,0,228414,26,,S +135,0,2,"Sobey, Mr. Samuel James Hayden",male,25,0,0,C.A. 29178,13,,S +136,0,2,"Richard, Mr. Emile",male,23,0,0,SC/PARIS 2133,15.0458,,C +137,1,1,"Newsom, Miss. Helen Monypeny",female,19,0,2,11752,26.2833,D47,S +138,0,1,"Futrelle, Mr. Jacques Heath",male,37,1,0,113803,53.1,C123,S +139,0,3,"Osen, Mr. Olaf Elon",male,16,0,0,7534,9.2167,,S +140,0,1,"Giglio, Mr. Victor",male,24,0,0,PC 17593,79.2,B86,C +141,0,3,"Boulos, Mrs. Joseph (Sultana)",female,,0,2,2678,15.2458,,C +142,1,3,"Nysten, Miss. Anna Sofia",female,22,0,0,347081,7.75,,S +143,1,3,"Hakkarainen, Mrs. Pekka Pietari (Elin Matilda Dolck)",female,24,1,0,STON/O2. 3101279,15.85,,S +144,0,3,"Burke, Mr. Jeremiah",male,19,0,0,365222,6.75,,Q +145,0,2,"Andrew, Mr. Edgardo Samuel",male,18,0,0,231945,11.5,,S +146,0,2,"Nicholls, Mr. Joseph Charles",male,19,1,1,C.A. 33112,36.75,,S +147,1,3,"Andersson, Mr. August Edvard (""Wennerstrom"")",male,27,0,0,350043,7.7958,,S +148,0,3,"Ford, Miss. Robina Maggie ""Ruby""",female,9,2,2,W./C. 6608,34.375,,S +149,0,2,"Navratil, Mr. Michel (""Louis M Hoffman"")",male,36.5,0,2,230080,26,F2,S +150,0,2,"Byles, Rev. Thomas Roussel Davids",male,42,0,0,244310,13,,S +151,0,2,"Bateman, Rev. Robert James",male,51,0,0,S.O.P. 1166,12.525,,S +152,1,1,"Pears, Mrs. Thomas (Edith Wearne)",female,22,1,0,113776,66.6,C2,S +153,0,3,"Meo, Mr. Alfonzo",male,55.5,0,0,A.5. 11206,8.05,,S +154,0,3,"van Billiard, Mr. Austin Blyler",male,40.5,0,2,A/5. 851,14.5,,S +155,0,3,"Olsen, Mr. Ole Martin",male,,0,0,Fa 265302,7.3125,,S +156,0,1,"Williams, Mr. Charles Duane",male,51,0,1,PC 17597,61.3792,,C +157,1,3,"Gilnagh, Miss. Katherine ""Katie""",female,16,0,0,35851,7.7333,,Q +158,0,3,"Corn, Mr. Harry",male,30,0,0,SOTON/OQ 392090,8.05,,S +159,0,3,"Smiljanic, Mr. Mile",male,,0,0,315037,8.6625,,S +160,0,3,"Sage, Master. Thomas Henry",male,,8,2,CA. 2343,69.55,,S +161,0,3,"Cribb, Mr. John Hatfield",male,44,0,1,371362,16.1,,S +162,1,2,"Watt, Mrs. James (Elizabeth ""Bessie"" Inglis Milne)",female,40,0,0,C.A. 33595,15.75,,S +163,0,3,"Bengtsson, Mr. John Viktor",male,26,0,0,347068,7.775,,S +164,0,3,"Calic, Mr. Jovo",male,17,0,0,315093,8.6625,,S +165,0,3,"Panula, Master. Eino Viljami",male,1,4,1,3101295,39.6875,,S +166,1,3,"Goldsmith, Master. Frank John William ""Frankie""",male,9,0,2,363291,20.525,,S +167,1,1,"Chibnall, Mrs. (Edith Martha Bowerman)",female,,0,1,113505,55,E33,S +168,0,3,"Skoog, Mrs. William (Anna Bernhardina Karlsson)",female,45,1,4,347088,27.9,,S +169,0,1,"Baumann, Mr. John D",male,,0,0,PC 17318,25.925,,S +170,0,3,"Ling, Mr. Lee",male,28,0,0,1601,56.4958,,S +171,0,1,"Van der hoef, Mr. Wyckoff",male,61,0,0,111240,33.5,B19,S +172,0,3,"Rice, Master. Arthur",male,4,4,1,382652,29.125,,Q +173,1,3,"Johnson, Miss. Eleanor Ileen",female,1,1,1,347742,11.1333,,S +174,0,3,"Sivola, Mr. Antti Wilhelm",male,21,0,0,STON/O 2. 3101280,7.925,,S +175,0,1,"Smith, Mr. James Clinch",male,56,0,0,17764,30.6958,A7,C +176,0,3,"Klasen, Mr. Klas Albin",male,18,1,1,350404,7.8542,,S +177,0,3,"Lefebre, Master. Henry Forbes",male,,3,1,4133,25.4667,,S +178,0,1,"Isham, Miss. Ann Elizabeth",female,50,0,0,PC 17595,28.7125,C49,C +179,0,2,"Hale, Mr. Reginald",male,30,0,0,250653,13,,S +180,0,3,"Leonard, Mr. Lionel",male,36,0,0,LINE,0,,S +181,0,3,"Sage, Miss. Constance Gladys",female,,8,2,CA. 2343,69.55,,S +182,0,2,"Pernot, Mr. Rene",male,,0,0,SC/PARIS 2131,15.05,,C +183,0,3,"Asplund, Master. Clarence Gustaf Hugo",male,9,4,2,347077,31.3875,,S +184,1,2,"Becker, Master. Richard F",male,1,2,1,230136,39,F4,S +185,1,3,"Kink-Heilmann, Miss. Luise Gretchen",female,4,0,2,315153,22.025,,S +186,0,1,"Rood, Mr. Hugh Roscoe",male,,0,0,113767,50,A32,S +187,1,3,"O'Brien, Mrs. Thomas (Johanna ""Hannah"" Godfrey)",female,,1,0,370365,15.5,,Q +188,1,1,"Romaine, Mr. Charles Hallace (""Mr C Rolmane"")",male,45,0,0,111428,26.55,,S +189,0,3,"Bourke, Mr. John",male,40,1,1,364849,15.5,,Q +190,0,3,"Turcin, Mr. Stjepan",male,36,0,0,349247,7.8958,,S +191,1,2,"Pinsky, Mrs. (Rosa)",female,32,0,0,234604,13,,S +192,0,2,"Carbines, Mr. William",male,19,0,0,28424,13,,S +193,1,3,"Andersen-Jensen, Miss. Carla Christine Nielsine",female,19,1,0,350046,7.8542,,S +194,1,2,"Navratil, Master. Michel M",male,3,1,1,230080,26,F2,S +195,1,1,"Brown, Mrs. James Joseph (Margaret Tobin)",female,44,0,0,PC 17610,27.7208,B4,C +196,1,1,"Lurette, Miss. Elise",female,58,0,0,PC 17569,146.5208,B80,C +197,0,3,"Mernagh, Mr. Robert",male,,0,0,368703,7.75,,Q +198,0,3,"Olsen, Mr. Karl Siegwart Andreas",male,42,0,1,4579,8.4042,,S +199,1,3,"Madigan, Miss. Margaret ""Maggie""",female,,0,0,370370,7.75,,Q +200,0,2,"Yrois, Miss. Henriette (""Mrs Harbeck"")",female,24,0,0,248747,13,,S +201,0,3,"Vande Walle, Mr. Nestor Cyriel",male,28,0,0,345770,9.5,,S +202,0,3,"Sage, Mr. Frederick",male,,8,2,CA. 2343,69.55,,S +203,0,3,"Johanson, Mr. Jakob Alfred",male,34,0,0,3101264,6.4958,,S +204,0,3,"Youseff, Mr. Gerious",male,45.5,0,0,2628,7.225,,C +205,1,3,"Cohen, Mr. Gurshon ""Gus""",male,18,0,0,A/5 3540,8.05,,S +206,0,3,"Strom, Miss. Telma Matilda",female,2,0,1,347054,10.4625,G6,S +207,0,3,"Backstrom, Mr. Karl Alfred",male,32,1,0,3101278,15.85,,S +208,1,3,"Albimona, Mr. Nassef Cassem",male,26,0,0,2699,18.7875,,C +209,1,3,"Carr, Miss. Helen ""Ellen""",female,16,0,0,367231,7.75,,Q +210,1,1,"Blank, Mr. Henry",male,40,0,0,112277,31,A31,C +211,0,3,"Ali, Mr. Ahmed",male,24,0,0,SOTON/O.Q. 3101311,7.05,,S +212,1,2,"Cameron, Miss. Clear Annie",female,35,0,0,F.C.C. 13528,21,,S +213,0,3,"Perkin, Mr. John Henry",male,22,0,0,A/5 21174,7.25,,S +214,0,2,"Givard, Mr. Hans Kristensen",male,30,0,0,250646,13,,S +215,0,3,"Kiernan, Mr. Philip",male,,1,0,367229,7.75,,Q +216,1,1,"Newell, Miss. Madeleine",female,31,1,0,35273,113.275,D36,C +217,1,3,"Honkanen, Miss. Eliina",female,27,0,0,STON/O2. 3101283,7.925,,S +218,0,2,"Jacobsohn, Mr. Sidney Samuel",male,42,1,0,243847,27,,S +219,1,1,"Bazzani, Miss. Albina",female,32,0,0,11813,76.2917,D15,C +220,0,2,"Harris, Mr. Walter",male,30,0,0,W/C 14208,10.5,,S +221,1,3,"Sunderland, Mr. Victor Francis",male,16,0,0,SOTON/OQ 392089,8.05,,S +222,0,2,"Bracken, Mr. James H",male,27,0,0,220367,13,,S +223,0,3,"Green, Mr. George Henry",male,51,0,0,21440,8.05,,S +224,0,3,"Nenkoff, Mr. Christo",male,,0,0,349234,7.8958,,S +225,1,1,"Hoyt, Mr. Frederick Maxfield",male,38,1,0,19943,90,C93,S +226,0,3,"Berglund, Mr. Karl Ivar Sven",male,22,0,0,PP 4348,9.35,,S +227,1,2,"Mellors, Mr. William John",male,19,0,0,SW/PP 751,10.5,,S +228,0,3,"Lovell, Mr. John Hall (""Henry"")",male,20.5,0,0,A/5 21173,7.25,,S +229,0,2,"Fahlstrom, Mr. Arne Jonas",male,18,0,0,236171,13,,S +230,0,3,"Lefebre, Miss. Mathilde",female,,3,1,4133,25.4667,,S +231,1,1,"Harris, Mrs. Henry Birkhardt (Irene Wallach)",female,35,1,0,36973,83.475,C83,S +232,0,3,"Larsson, Mr. Bengt Edvin",male,29,0,0,347067,7.775,,S +233,0,2,"Sjostedt, Mr. Ernst Adolf",male,59,0,0,237442,13.5,,S +234,1,3,"Asplund, Miss. Lillian Gertrud",female,5,4,2,347077,31.3875,,S +235,0,2,"Leyson, Mr. Robert William Norman",male,24,0,0,C.A. 29566,10.5,,S +236,0,3,"Harknett, Miss. Alice Phoebe",female,,0,0,W./C. 6609,7.55,,S +237,0,2,"Hold, Mr. Stephen",male,44,1,0,26707,26,,S +238,1,2,"Collyer, Miss. Marjorie ""Lottie""",female,8,0,2,C.A. 31921,26.25,,S +239,0,2,"Pengelly, Mr. Frederick William",male,19,0,0,28665,10.5,,S +240,0,2,"Hunt, Mr. George Henry",male,33,0,0,SCO/W 1585,12.275,,S +241,0,3,"Zabour, Miss. Thamine",female,,1,0,2665,14.4542,,C +242,1,3,"Murphy, Miss. Katherine ""Kate""",female,,1,0,367230,15.5,,Q +243,0,2,"Coleridge, Mr. Reginald Charles",male,29,0,0,W./C. 14263,10.5,,S +244,0,3,"Maenpaa, Mr. Matti Alexanteri",male,22,0,0,STON/O 2. 3101275,7.125,,S +245,0,3,"Attalah, Mr. Sleiman",male,30,0,0,2694,7.225,,C +246,0,1,"Minahan, Dr. William Edward",male,44,2,0,19928,90,C78,Q +247,0,3,"Lindahl, Miss. Agda Thorilda Viktoria",female,25,0,0,347071,7.775,,S +248,1,2,"Hamalainen, Mrs. William (Anna)",female,24,0,2,250649,14.5,,S +249,1,1,"Beckwith, Mr. Richard Leonard",male,37,1,1,11751,52.5542,D35,S +250,0,2,"Carter, Rev. Ernest Courtenay",male,54,1,0,244252,26,,S +251,0,3,"Reed, Mr. James George",male,,0,0,362316,7.25,,S +252,0,3,"Strom, Mrs. Wilhelm (Elna Matilda Persson)",female,29,1,1,347054,10.4625,G6,S +253,0,1,"Stead, Mr. William Thomas",male,62,0,0,113514,26.55,C87,S +254,0,3,"Lobb, Mr. William Arthur",male,30,1,0,A/5. 3336,16.1,,S +255,0,3,"Rosblom, Mrs. Viktor (Helena Wilhelmina)",female,41,0,2,370129,20.2125,,S +256,1,3,"Touma, Mrs. Darwis (Hanne Youssef Razi)",female,29,0,2,2650,15.2458,,C +257,1,1,"Thorne, Mrs. Gertrude Maybelle",female,,0,0,PC 17585,79.2,,C +258,1,1,"Cherry, Miss. Gladys",female,30,0,0,110152,86.5,B77,S +259,1,1,"Ward, Miss. Anna",female,35,0,0,PC 17755,512.3292,,C +260,1,2,"Parrish, Mrs. (Lutie Davis)",female,50,0,1,230433,26,,S +261,0,3,"Smith, Mr. Thomas",male,,0,0,384461,7.75,,Q +262,1,3,"Asplund, Master. Edvin Rojj Felix",male,3,4,2,347077,31.3875,,S +263,0,1,"Taussig, Mr. Emil",male,52,1,1,110413,79.65,E67,S +264,0,1,"Harrison, Mr. William",male,40,0,0,112059,0,B94,S +265,0,3,"Henry, Miss. Delia",female,,0,0,382649,7.75,,Q +266,0,2,"Reeves, Mr. David",male,36,0,0,C.A. 17248,10.5,,S +267,0,3,"Panula, Mr. Ernesti Arvid",male,16,4,1,3101295,39.6875,,S +268,1,3,"Persson, Mr. Ernst Ulrik",male,25,1,0,347083,7.775,,S +269,1,1,"Graham, Mrs. William Thompson (Edith Junkins)",female,58,0,1,PC 17582,153.4625,C125,S +270,1,1,"Bissette, Miss. Amelia",female,35,0,0,PC 17760,135.6333,C99,S +271,0,1,"Cairns, Mr. Alexander",male,,0,0,113798,31,,S +272,1,3,"Tornquist, Mr. William Henry",male,25,0,0,LINE,0,,S +273,1,2,"Mellinger, Mrs. (Elizabeth Anne Maidment)",female,41,0,1,250644,19.5,,S +274,0,1,"Natsch, Mr. Charles H",male,37,0,1,PC 17596,29.7,C118,C +275,1,3,"Healy, Miss. Hanora ""Nora""",female,,0,0,370375,7.75,,Q +276,1,1,"Andrews, Miss. Kornelia Theodosia",female,63,1,0,13502,77.9583,D7,S +277,0,3,"Lindblom, Miss. Augusta Charlotta",female,45,0,0,347073,7.75,,S +278,0,2,"Parkes, Mr. Francis ""Frank""",male,,0,0,239853,0,,S +279,0,3,"Rice, Master. Eric",male,7,4,1,382652,29.125,,Q +280,1,3,"Abbott, Mrs. Stanton (Rosa Hunt)",female,35,1,1,C.A. 2673,20.25,,S +281,0,3,"Duane, Mr. Frank",male,65,0,0,336439,7.75,,Q +282,0,3,"Olsson, Mr. Nils Johan Goransson",male,28,0,0,347464,7.8542,,S +283,0,3,"de Pelsmaeker, Mr. Alfons",male,16,0,0,345778,9.5,,S +284,1,3,"Dorking, Mr. Edward Arthur",male,19,0,0,A/5. 10482,8.05,,S +285,0,1,"Smith, Mr. Richard William",male,,0,0,113056,26,A19,S +286,0,3,"Stankovic, Mr. Ivan",male,33,0,0,349239,8.6625,,C +287,1,3,"de Mulder, Mr. Theodore",male,30,0,0,345774,9.5,,S +288,0,3,"Naidenoff, Mr. Penko",male,22,0,0,349206,7.8958,,S +289,1,2,"Hosono, Mr. Masabumi",male,42,0,0,237798,13,,S +290,1,3,"Connolly, Miss. Kate",female,22,0,0,370373,7.75,,Q +291,1,1,"Barber, Miss. Ellen ""Nellie""",female,26,0,0,19877,78.85,,S +292,1,1,"Bishop, Mrs. Dickinson H (Helen Walton)",female,19,1,0,11967,91.0792,B49,C +293,0,2,"Levy, Mr. Rene Jacques",male,36,0,0,SC/Paris 2163,12.875,D,C +294,0,3,"Haas, Miss. Aloisia",female,24,0,0,349236,8.85,,S +295,0,3,"Mineff, Mr. Ivan",male,24,0,0,349233,7.8958,,S +296,0,1,"Lewy, Mr. Ervin G",male,,0,0,PC 17612,27.7208,,C +297,0,3,"Hanna, Mr. Mansour",male,23.5,0,0,2693,7.2292,,C +298,0,1,"Allison, Miss. Helen Loraine",female,2,1,2,113781,151.55,C22 C26,S +299,1,1,"Saalfeld, Mr. Adolphe",male,,0,0,19988,30.5,C106,S +300,1,1,"Baxter, Mrs. James (Helene DeLaudeniere Chaput)",female,50,0,1,PC 17558,247.5208,B58 B60,C +301,1,3,"Kelly, Miss. Anna Katherine ""Annie Kate""",female,,0,0,9234,7.75,,Q +302,1,3,"McCoy, Mr. Bernard",male,,2,0,367226,23.25,,Q +303,0,3,"Johnson, Mr. William Cahoone Jr",male,19,0,0,LINE,0,,S +304,1,2,"Keane, Miss. Nora A",female,,0,0,226593,12.35,E101,Q +305,0,3,"Williams, Mr. Howard Hugh ""Harry""",male,,0,0,A/5 2466,8.05,,S +306,1,1,"Allison, Master. Hudson Trevor",male,0.92,1,2,113781,151.55,C22 C26,S +307,1,1,"Fleming, Miss. Margaret",female,,0,0,17421,110.8833,,C +308,1,1,"Penasco y Castellana, Mrs. Victor de Satode (Maria Josefa Perez de Soto y Vallejo)",female,17,1,0,PC 17758,108.9,C65,C +309,0,2,"Abelson, Mr. Samuel",male,30,1,0,P/PP 3381,24,,C +310,1,1,"Francatelli, Miss. Laura Mabel",female,30,0,0,PC 17485,56.9292,E36,C +311,1,1,"Hays, Miss. Margaret Bechstein",female,24,0,0,11767,83.1583,C54,C +312,1,1,"Ryerson, Miss. Emily Borie",female,18,2,2,PC 17608,262.375,B57 B59 B63 B66,C +313,0,2,"Lahtinen, Mrs. William (Anna Sylfven)",female,26,1,1,250651,26,,S +314,0,3,"Hendekovic, Mr. Ignjac",male,28,0,0,349243,7.8958,,S +315,0,2,"Hart, Mr. Benjamin",male,43,1,1,F.C.C. 13529,26.25,,S +316,1,3,"Nilsson, Miss. Helmina Josefina",female,26,0,0,347470,7.8542,,S +317,1,2,"Kantor, Mrs. Sinai (Miriam Sternin)",female,24,1,0,244367,26,,S +318,0,2,"Moraweck, Dr. Ernest",male,54,0,0,29011,14,,S +319,1,1,"Wick, Miss. Mary Natalie",female,31,0,2,36928,164.8667,C7,S +320,1,1,"Spedden, Mrs. Frederic Oakley (Margaretta Corning Stone)",female,40,1,1,16966,134.5,E34,C +321,0,3,"Dennis, Mr. Samuel",male,22,0,0,A/5 21172,7.25,,S +322,0,3,"Danoff, Mr. Yoto",male,27,0,0,349219,7.8958,,S +323,1,2,"Slayter, Miss. Hilda Mary",female,30,0,0,234818,12.35,,Q +324,1,2,"Caldwell, Mrs. Albert Francis (Sylvia Mae Harbaugh)",female,22,1,1,248738,29,,S +325,0,3,"Sage, Mr. George John Jr",male,,8,2,CA. 2343,69.55,,S +326,1,1,"Young, Miss. Marie Grice",female,36,0,0,PC 17760,135.6333,C32,C +327,0,3,"Nysveen, Mr. Johan Hansen",male,61,0,0,345364,6.2375,,S +328,1,2,"Ball, Mrs. (Ada E Hall)",female,36,0,0,28551,13,D,S +329,1,3,"Goldsmith, Mrs. Frank John (Emily Alice Brown)",female,31,1,1,363291,20.525,,S +330,1,1,"Hippach, Miss. Jean Gertrude",female,16,0,1,111361,57.9792,B18,C +331,1,3,"McCoy, Miss. Agnes",female,,2,0,367226,23.25,,Q +332,0,1,"Partner, Mr. Austen",male,45.5,0,0,113043,28.5,C124,S +333,0,1,"Graham, Mr. George Edward",male,38,0,1,PC 17582,153.4625,C91,S +334,0,3,"Vander Planke, Mr. Leo Edmondus",male,16,2,0,345764,18,,S +335,1,1,"Frauenthal, Mrs. Henry William (Clara Heinsheimer)",female,,1,0,PC 17611,133.65,,S +336,0,3,"Denkoff, Mr. Mitto",male,,0,0,349225,7.8958,,S +337,0,1,"Pears, Mr. Thomas Clinton",male,29,1,0,113776,66.6,C2,S +338,1,1,"Burns, Miss. Elizabeth Margaret",female,41,0,0,16966,134.5,E40,C +339,1,3,"Dahl, Mr. Karl Edwart",male,45,0,0,7598,8.05,,S +340,0,1,"Blackwell, Mr. Stephen Weart",male,45,0,0,113784,35.5,T,S +341,1,2,"Navratil, Master. Edmond Roger",male,2,1,1,230080,26,F2,S +342,1,1,"Fortune, Miss. Alice Elizabeth",female,24,3,2,19950,263,C23 C25 C27,S +343,0,2,"Collander, Mr. Erik Gustaf",male,28,0,0,248740,13,,S +344,0,2,"Sedgwick, Mr. Charles Frederick Waddington",male,25,0,0,244361,13,,S +345,0,2,"Fox, Mr. Stanley Hubert",male,36,0,0,229236,13,,S +346,1,2,"Brown, Miss. Amelia ""Mildred""",female,24,0,0,248733,13,F33,S +347,1,2,"Smith, Miss. Marion Elsie",female,40,0,0,31418,13,,S +348,1,3,"Davison, Mrs. Thomas Henry (Mary E Finck)",female,,1,0,386525,16.1,,S +349,1,3,"Coutts, Master. William Loch ""William""",male,3,1,1,C.A. 37671,15.9,,S +350,0,3,"Dimic, Mr. Jovan",male,42,0,0,315088,8.6625,,S +351,0,3,"Odahl, Mr. Nils Martin",male,23,0,0,7267,9.225,,S +352,0,1,"Williams-Lambert, Mr. Fletcher Fellows",male,,0,0,113510,35,C128,S +353,0,3,"Elias, Mr. Tannous",male,15,1,1,2695,7.2292,,C +354,0,3,"Arnold-Franchi, Mr. Josef",male,25,1,0,349237,17.8,,S +355,0,3,"Yousif, Mr. Wazli",male,,0,0,2647,7.225,,C +356,0,3,"Vanden Steen, Mr. Leo Peter",male,28,0,0,345783,9.5,,S +357,1,1,"Bowerman, Miss. Elsie Edith",female,22,0,1,113505,55,E33,S +358,0,2,"Funk, Miss. Annie Clemmer",female,38,0,0,237671,13,,S +359,1,3,"McGovern, Miss. Mary",female,,0,0,330931,7.8792,,Q +360,1,3,"Mockler, Miss. Helen Mary ""Ellie""",female,,0,0,330980,7.8792,,Q +361,0,3,"Skoog, Mr. Wilhelm",male,40,1,4,347088,27.9,,S +362,0,2,"del Carlo, Mr. Sebastiano",male,29,1,0,SC/PARIS 2167,27.7208,,C +363,0,3,"Barbara, Mrs. (Catherine David)",female,45,0,1,2691,14.4542,,C +364,0,3,"Asim, Mr. Adola",male,35,0,0,SOTON/O.Q. 3101310,7.05,,S +365,0,3,"O'Brien, Mr. Thomas",male,,1,0,370365,15.5,,Q +366,0,3,"Adahl, Mr. Mauritz Nils Martin",male,30,0,0,C 7076,7.25,,S +367,1,1,"Warren, Mrs. Frank Manley (Anna Sophia Atkinson)",female,60,1,0,110813,75.25,D37,C +368,1,3,"Moussa, Mrs. (Mantoura Boulos)",female,,0,0,2626,7.2292,,C +369,1,3,"Jermyn, Miss. Annie",female,,0,0,14313,7.75,,Q +370,1,1,"Aubart, Mme. Leontine Pauline",female,24,0,0,PC 17477,69.3,B35,C +371,1,1,"Harder, Mr. George Achilles",male,25,1,0,11765,55.4417,E50,C +372,0,3,"Wiklund, Mr. Jakob Alfred",male,18,1,0,3101267,6.4958,,S +373,0,3,"Beavan, Mr. William Thomas",male,19,0,0,323951,8.05,,S +374,0,1,"Ringhini, Mr. Sante",male,22,0,0,PC 17760,135.6333,,C +375,0,3,"Palsson, Miss. Stina Viola",female,3,3,1,349909,21.075,,S +376,1,1,"Meyer, Mrs. Edgar Joseph (Leila Saks)",female,,1,0,PC 17604,82.1708,,C +377,1,3,"Landergren, Miss. Aurora Adelia",female,22,0,0,C 7077,7.25,,S +378,0,1,"Widener, Mr. Harry Elkins",male,27,0,2,113503,211.5,C82,C +379,0,3,"Betros, Mr. Tannous",male,20,0,0,2648,4.0125,,C +380,0,3,"Gustafsson, Mr. Karl Gideon",male,19,0,0,347069,7.775,,S +381,1,1,"Bidois, Miss. Rosalie",female,42,0,0,PC 17757,227.525,,C +382,1,3,"Nakid, Miss. Maria (""Mary"")",female,1,0,2,2653,15.7417,,C +383,0,3,"Tikkanen, Mr. Juho",male,32,0,0,STON/O 2. 3101293,7.925,,S +384,1,1,"Holverson, Mrs. Alexander Oskar (Mary Aline Towner)",female,35,1,0,113789,52,,S +385,0,3,"Plotcharsky, Mr. Vasil",male,,0,0,349227,7.8958,,S +386,0,2,"Davies, Mr. Charles Henry",male,18,0,0,S.O.C. 14879,73.5,,S +387,0,3,"Goodwin, Master. Sidney Leonard",male,1,5,2,CA 2144,46.9,,S +388,1,2,"Buss, Miss. Kate",female,36,0,0,27849,13,,S +389,0,3,"Sadlier, Mr. Matthew",male,,0,0,367655,7.7292,,Q +390,1,2,"Lehmann, Miss. Bertha",female,17,0,0,SC 1748,12,,C +391,1,1,"Carter, Mr. William Ernest",male,36,1,2,113760,120,B96 B98,S +392,1,3,"Jansson, Mr. Carl Olof",male,21,0,0,350034,7.7958,,S +393,0,3,"Gustafsson, Mr. Johan Birger",male,28,2,0,3101277,7.925,,S +394,1,1,"Newell, Miss. Marjorie",female,23,1,0,35273,113.275,D36,C +395,1,3,"Sandstrom, Mrs. Hjalmar (Agnes Charlotta Bengtsson)",female,24,0,2,PP 9549,16.7,G6,S +396,0,3,"Johansson, Mr. Erik",male,22,0,0,350052,7.7958,,S +397,0,3,"Olsson, Miss. Elina",female,31,0,0,350407,7.8542,,S +398,0,2,"McKane, Mr. Peter David",male,46,0,0,28403,26,,S +399,0,2,"Pain, Dr. Alfred",male,23,0,0,244278,10.5,,S +400,1,2,"Trout, Mrs. William H (Jessie L)",female,28,0,0,240929,12.65,,S +401,1,3,"Niskanen, Mr. Juha",male,39,0,0,STON/O 2. 3101289,7.925,,S +402,0,3,"Adams, Mr. John",male,26,0,0,341826,8.05,,S +403,0,3,"Jussila, Miss. Mari Aina",female,21,1,0,4137,9.825,,S +404,0,3,"Hakkarainen, Mr. Pekka Pietari",male,28,1,0,STON/O2. 3101279,15.85,,S +405,0,3,"Oreskovic, Miss. Marija",female,20,0,0,315096,8.6625,,S +406,0,2,"Gale, Mr. Shadrach",male,34,1,0,28664,21,,S +407,0,3,"Widegren, Mr. Carl/Charles Peter",male,51,0,0,347064,7.75,,S +408,1,2,"Richards, Master. William Rowe",male,3,1,1,29106,18.75,,S +409,0,3,"Birkeland, Mr. Hans Martin Monsen",male,21,0,0,312992,7.775,,S +410,0,3,"Lefebre, Miss. Ida",female,,3,1,4133,25.4667,,S +411,0,3,"Sdycoff, Mr. Todor",male,,0,0,349222,7.8958,,S +412,0,3,"Hart, Mr. Henry",male,,0,0,394140,6.8583,,Q +413,1,1,"Minahan, Miss. Daisy E",female,33,1,0,19928,90,C78,Q +414,0,2,"Cunningham, Mr. Alfred Fleming",male,,0,0,239853,0,,S +415,1,3,"Sundman, Mr. Johan Julian",male,44,0,0,STON/O 2. 3101269,7.925,,S +416,0,3,"Meek, Mrs. Thomas (Annie Louise Rowley)",female,,0,0,343095,8.05,,S +417,1,2,"Drew, Mrs. James Vivian (Lulu Thorne Christian)",female,34,1,1,28220,32.5,,S +418,1,2,"Silven, Miss. Lyyli Karoliina",female,18,0,2,250652,13,,S +419,0,2,"Matthews, Mr. William John",male,30,0,0,28228,13,,S +420,0,3,"Van Impe, Miss. Catharina",female,10,0,2,345773,24.15,,S +421,0,3,"Gheorgheff, Mr. Stanio",male,,0,0,349254,7.8958,,C +422,0,3,"Charters, Mr. David",male,21,0,0,A/5. 13032,7.7333,,Q +423,0,3,"Zimmerman, Mr. Leo",male,29,0,0,315082,7.875,,S +424,0,3,"Danbom, Mrs. Ernst Gilbert (Anna Sigrid Maria Brogren)",female,28,1,1,347080,14.4,,S +425,0,3,"Rosblom, Mr. Viktor Richard",male,18,1,1,370129,20.2125,,S +426,0,3,"Wiseman, Mr. Phillippe",male,,0,0,A/4. 34244,7.25,,S +427,1,2,"Clarke, Mrs. Charles V (Ada Maria Winfield)",female,28,1,0,2003,26,,S +428,1,2,"Phillips, Miss. Kate Florence (""Mrs Kate Louise Phillips Marshall"")",female,19,0,0,250655,26,,S +429,0,3,"Flynn, Mr. James",male,,0,0,364851,7.75,,Q +430,1,3,"Pickard, Mr. Berk (Berk Trembisky)",male,32,0,0,SOTON/O.Q. 392078,8.05,E10,S +431,1,1,"Bjornstrom-Steffansson, Mr. Mauritz Hakan",male,28,0,0,110564,26.55,C52,S +432,1,3,"Thorneycroft, Mrs. Percival (Florence Kate White)",female,,1,0,376564,16.1,,S +433,1,2,"Louch, Mrs. Charles Alexander (Alice Adelaide Slow)",female,42,1,0,SC/AH 3085,26,,S +434,0,3,"Kallio, Mr. Nikolai Erland",male,17,0,0,STON/O 2. 3101274,7.125,,S +435,0,1,"Silvey, Mr. William Baird",male,50,1,0,13507,55.9,E44,S +436,1,1,"Carter, Miss. Lucile Polk",female,14,1,2,113760,120,B96 B98,S +437,0,3,"Ford, Miss. Doolina Margaret ""Daisy""",female,21,2,2,W./C. 6608,34.375,,S +438,1,2,"Richards, Mrs. Sidney (Emily Hocking)",female,24,2,3,29106,18.75,,S +439,0,1,"Fortune, Mr. Mark",male,64,1,4,19950,263,C23 C25 C27,S +440,0,2,"Kvillner, Mr. Johan Henrik Johannesson",male,31,0,0,C.A. 18723,10.5,,S +441,1,2,"Hart, Mrs. Benjamin (Esther Ada Bloomfield)",female,45,1,1,F.C.C. 13529,26.25,,S +442,0,3,"Hampe, Mr. Leon",male,20,0,0,345769,9.5,,S +443,0,3,"Petterson, Mr. Johan Emil",male,25,1,0,347076,7.775,,S +444,1,2,"Reynaldo, Ms. Encarnacion",female,28,0,0,230434,13,,S +445,1,3,"Johannesen-Bratthammer, Mr. Bernt",male,,0,0,65306,8.1125,,S +446,1,1,"Dodge, Master. Washington",male,4,0,2,33638,81.8583,A34,S +447,1,2,"Mellinger, Miss. Madeleine Violet",female,13,0,1,250644,19.5,,S +448,1,1,"Seward, Mr. Frederic Kimber",male,34,0,0,113794,26.55,,S +449,1,3,"Baclini, Miss. Marie Catherine",female,5,2,1,2666,19.2583,,C +450,1,1,"Peuchen, Major. Arthur Godfrey",male,52,0,0,113786,30.5,C104,S +451,0,2,"West, Mr. Edwy Arthur",male,36,1,2,C.A. 34651,27.75,,S +452,0,3,"Hagland, Mr. Ingvald Olai Olsen",male,,1,0,65303,19.9667,,S +453,0,1,"Foreman, Mr. Benjamin Laventall",male,30,0,0,113051,27.75,C111,C +454,1,1,"Goldenberg, Mr. Samuel L",male,49,1,0,17453,89.1042,C92,C +455,0,3,"Peduzzi, Mr. Joseph",male,,0,0,A/5 2817,8.05,,S +456,1,3,"Jalsevac, Mr. Ivan",male,29,0,0,349240,7.8958,,C +457,0,1,"Millet, Mr. Francis Davis",male,65,0,0,13509,26.55,E38,S +458,1,1,"Kenyon, Mrs. Frederick R (Marion)",female,,1,0,17464,51.8625,D21,S +459,1,2,"Toomey, Miss. Ellen",female,50,0,0,F.C.C. 13531,10.5,,S +460,0,3,"O'Connor, Mr. Maurice",male,,0,0,371060,7.75,,Q +461,1,1,"Anderson, Mr. Harry",male,48,0,0,19952,26.55,E12,S +462,0,3,"Morley, Mr. William",male,34,0,0,364506,8.05,,S +463,0,1,"Gee, Mr. Arthur H",male,47,0,0,111320,38.5,E63,S +464,0,2,"Milling, Mr. Jacob Christian",male,48,0,0,234360,13,,S +465,0,3,"Maisner, Mr. Simon",male,,0,0,A/S 2816,8.05,,S +466,0,3,"Goncalves, Mr. Manuel Estanslas",male,38,0,0,SOTON/O.Q. 3101306,7.05,,S +467,0,2,"Campbell, Mr. William",male,,0,0,239853,0,,S +468,0,1,"Smart, Mr. John Montgomery",male,56,0,0,113792,26.55,,S +469,0,3,"Scanlan, Mr. James",male,,0,0,36209,7.725,,Q +470,1,3,"Baclini, Miss. Helene Barbara",female,0.75,2,1,2666,19.2583,,C +471,0,3,"Keefe, Mr. Arthur",male,,0,0,323592,7.25,,S +472,0,3,"Cacic, Mr. Luka",male,38,0,0,315089,8.6625,,S +473,1,2,"West, Mrs. Edwy Arthur (Ada Mary Worth)",female,33,1,2,C.A. 34651,27.75,,S +474,1,2,"Jerwan, Mrs. Amin S (Marie Marthe Thuillard)",female,23,0,0,SC/AH Basle 541,13.7917,D,C +475,0,3,"Strandberg, Miss. Ida Sofia",female,22,0,0,7553,9.8375,,S +476,0,1,"Clifford, Mr. George Quincy",male,,0,0,110465,52,A14,S +477,0,2,"Renouf, Mr. Peter Henry",male,34,1,0,31027,21,,S +478,0,3,"Braund, Mr. Lewis Richard",male,29,1,0,3460,7.0458,,S +479,0,3,"Karlsson, Mr. Nils August",male,22,0,0,350060,7.5208,,S +480,1,3,"Hirvonen, Miss. Hildur E",female,2,0,1,3101298,12.2875,,S +481,0,3,"Goodwin, Master. Harold Victor",male,9,5,2,CA 2144,46.9,,S +482,0,2,"Frost, Mr. Anthony Wood ""Archie""",male,,0,0,239854,0,,S +483,0,3,"Rouse, Mr. Richard Henry",male,50,0,0,A/5 3594,8.05,,S +484,1,3,"Turkula, Mrs. (Hedwig)",female,63,0,0,4134,9.5875,,S +485,1,1,"Bishop, Mr. Dickinson H",male,25,1,0,11967,91.0792,B49,C +486,0,3,"Lefebre, Miss. Jeannie",female,,3,1,4133,25.4667,,S +487,1,1,"Hoyt, Mrs. Frederick Maxfield (Jane Anne Forby)",female,35,1,0,19943,90,C93,S +488,0,1,"Kent, Mr. Edward Austin",male,58,0,0,11771,29.7,B37,C +489,0,3,"Somerton, Mr. Francis William",male,30,0,0,A.5. 18509,8.05,,S +490,1,3,"Coutts, Master. Eden Leslie ""Neville""",male,9,1,1,C.A. 37671,15.9,,S +491,0,3,"Hagland, Mr. Konrad Mathias Reiersen",male,,1,0,65304,19.9667,,S +492,0,3,"Windelov, Mr. Einar",male,21,0,0,SOTON/OQ 3101317,7.25,,S +493,0,1,"Molson, Mr. Harry Markland",male,55,0,0,113787,30.5,C30,S +494,0,1,"Artagaveytia, Mr. Ramon",male,71,0,0,PC 17609,49.5042,,C +495,0,3,"Stanley, Mr. Edward Roland",male,21,0,0,A/4 45380,8.05,,S +496,0,3,"Yousseff, Mr. Gerious",male,,0,0,2627,14.4583,,C +497,1,1,"Eustis, Miss. Elizabeth Mussey",female,54,1,0,36947,78.2667,D20,C +498,0,3,"Shellard, Mr. Frederick William",male,,0,0,C.A. 6212,15.1,,S +499,0,1,"Allison, Mrs. Hudson J C (Bessie Waldo Daniels)",female,25,1,2,113781,151.55,C22 C26,S +500,0,3,"Svensson, Mr. Olof",male,24,0,0,350035,7.7958,,S +501,0,3,"Calic, Mr. Petar",male,17,0,0,315086,8.6625,,S +502,0,3,"Canavan, Miss. Mary",female,21,0,0,364846,7.75,,Q +503,0,3,"O'Sullivan, Miss. Bridget Mary",female,,0,0,330909,7.6292,,Q +504,0,3,"Laitinen, Miss. Kristina Sofia",female,37,0,0,4135,9.5875,,S +505,1,1,"Maioni, Miss. Roberta",female,16,0,0,110152,86.5,B79,S +506,0,1,"Penasco y Castellana, Mr. Victor de Satode",male,18,1,0,PC 17758,108.9,C65,C +507,1,2,"Quick, Mrs. Frederick Charles (Jane Richards)",female,33,0,2,26360,26,,S +508,1,1,"Bradley, Mr. George (""George Arthur Brayton"")",male,,0,0,111427,26.55,,S +509,0,3,"Olsen, Mr. Henry Margido",male,28,0,0,C 4001,22.525,,S +510,1,3,"Lang, Mr. Fang",male,26,0,0,1601,56.4958,,S +511,1,3,"Daly, Mr. Eugene Patrick",male,29,0,0,382651,7.75,,Q +512,0,3,"Webber, Mr. James",male,,0,0,SOTON/OQ 3101316,8.05,,S +513,1,1,"McGough, Mr. James Robert",male,36,0,0,PC 17473,26.2875,E25,S +514,1,1,"Rothschild, Mrs. Martin (Elizabeth L. Barrett)",female,54,1,0,PC 17603,59.4,,C +515,0,3,"Coleff, Mr. Satio",male,24,0,0,349209,7.4958,,S +516,0,1,"Walker, Mr. William Anderson",male,47,0,0,36967,34.0208,D46,S +517,1,2,"Lemore, Mrs. (Amelia Milley)",female,34,0,0,C.A. 34260,10.5,F33,S +518,0,3,"Ryan, Mr. Patrick",male,,0,0,371110,24.15,,Q +519,1,2,"Angle, Mrs. William A (Florence ""Mary"" Agnes Hughes)",female,36,1,0,226875,26,,S +520,0,3,"Pavlovic, Mr. Stefo",male,32,0,0,349242,7.8958,,S +521,1,1,"Perreault, Miss. Anne",female,30,0,0,12749,93.5,B73,S +522,0,3,"Vovk, Mr. Janko",male,22,0,0,349252,7.8958,,S +523,0,3,"Lahoud, Mr. Sarkis",male,,0,0,2624,7.225,,C +524,1,1,"Hippach, Mrs. Louis Albert (Ida Sophia Fischer)",female,44,0,1,111361,57.9792,B18,C +525,0,3,"Kassem, Mr. Fared",male,,0,0,2700,7.2292,,C +526,0,3,"Farrell, Mr. James",male,40.5,0,0,367232,7.75,,Q +527,1,2,"Ridsdale, Miss. Lucy",female,50,0,0,W./C. 14258,10.5,,S +528,0,1,"Farthing, Mr. John",male,,0,0,PC 17483,221.7792,C95,S +529,0,3,"Salonen, Mr. Johan Werner",male,39,0,0,3101296,7.925,,S +530,0,2,"Hocking, Mr. Richard George",male,23,2,1,29104,11.5,,S +531,1,2,"Quick, Miss. Phyllis May",female,2,1,1,26360,26,,S +532,0,3,"Toufik, Mr. Nakli",male,,0,0,2641,7.2292,,C +533,0,3,"Elias, Mr. Joseph Jr",male,17,1,1,2690,7.2292,,C +534,1,3,"Peter, Mrs. Catherine (Catherine Rizk)",female,,0,2,2668,22.3583,,C +535,0,3,"Cacic, Miss. Marija",female,30,0,0,315084,8.6625,,S +536,1,2,"Hart, Miss. Eva Miriam",female,7,0,2,F.C.C. 13529,26.25,,S +537,0,1,"Butt, Major. Archibald Willingham",male,45,0,0,113050,26.55,B38,S +538,1,1,"LeRoy, Miss. Bertha",female,30,0,0,PC 17761,106.425,,C +539,0,3,"Risien, Mr. Samuel Beard",male,,0,0,364498,14.5,,S +540,1,1,"Frolicher, Miss. Hedwig Margaritha",female,22,0,2,13568,49.5,B39,C +541,1,1,"Crosby, Miss. Harriet R",female,36,0,2,WE/P 5735,71,B22,S +542,0,3,"Andersson, Miss. Ingeborg Constanzia",female,9,4,2,347082,31.275,,S +543,0,3,"Andersson, Miss. Sigrid Elisabeth",female,11,4,2,347082,31.275,,S +544,1,2,"Beane, Mr. Edward",male,32,1,0,2908,26,,S +545,0,1,"Douglas, Mr. Walter Donald",male,50,1,0,PC 17761,106.425,C86,C +546,0,1,"Nicholson, Mr. Arthur Ernest",male,64,0,0,693,26,,S +547,1,2,"Beane, Mrs. Edward (Ethel Clarke)",female,19,1,0,2908,26,,S +548,1,2,"Padro y Manent, Mr. Julian",male,,0,0,SC/PARIS 2146,13.8625,,C +549,0,3,"Goldsmith, Mr. Frank John",male,33,1,1,363291,20.525,,S +550,1,2,"Davies, Master. John Morgan Jr",male,8,1,1,C.A. 33112,36.75,,S +551,1,1,"Thayer, Mr. John Borland Jr",male,17,0,2,17421,110.8833,C70,C +552,0,2,"Sharp, Mr. Percival James R",male,27,0,0,244358,26,,S +553,0,3,"O'Brien, Mr. Timothy",male,,0,0,330979,7.8292,,Q +554,1,3,"Leeni, Mr. Fahim (""Philip Zenni"")",male,22,0,0,2620,7.225,,C +555,1,3,"Ohman, Miss. Velin",female,22,0,0,347085,7.775,,S +556,0,1,"Wright, Mr. George",male,62,0,0,113807,26.55,,S +557,1,1,"Duff Gordon, Lady. (Lucille Christiana Sutherland) (""Mrs Morgan"")",female,48,1,0,11755,39.6,A16,C +558,0,1,"Robbins, Mr. Victor",male,,0,0,PC 17757,227.525,,C +559,1,1,"Taussig, Mrs. Emil (Tillie Mandelbaum)",female,39,1,1,110413,79.65,E67,S +560,1,3,"de Messemaeker, Mrs. Guillaume Joseph (Emma)",female,36,1,0,345572,17.4,,S +561,0,3,"Morrow, Mr. Thomas Rowan",male,,0,0,372622,7.75,,Q +562,0,3,"Sivic, Mr. Husein",male,40,0,0,349251,7.8958,,S +563,0,2,"Norman, Mr. Robert Douglas",male,28,0,0,218629,13.5,,S +564,0,3,"Simmons, Mr. John",male,,0,0,SOTON/OQ 392082,8.05,,S +565,0,3,"Meanwell, Miss. (Marion Ogden)",female,,0,0,SOTON/O.Q. 392087,8.05,,S +566,0,3,"Davies, Mr. Alfred J",male,24,2,0,A/4 48871,24.15,,S +567,0,3,"Stoytcheff, Mr. Ilia",male,19,0,0,349205,7.8958,,S +568,0,3,"Palsson, Mrs. Nils (Alma Cornelia Berglund)",female,29,0,4,349909,21.075,,S +569,0,3,"Doharr, Mr. Tannous",male,,0,0,2686,7.2292,,C +570,1,3,"Jonsson, Mr. Carl",male,32,0,0,350417,7.8542,,S +571,1,2,"Harris, Mr. George",male,62,0,0,S.W./PP 752,10.5,,S +572,1,1,"Appleton, Mrs. Edward Dale (Charlotte Lamson)",female,53,2,0,11769,51.4792,C101,S +573,1,1,"Flynn, Mr. John Irwin (""Irving"")",male,36,0,0,PC 17474,26.3875,E25,S +574,1,3,"Kelly, Miss. Mary",female,,0,0,14312,7.75,,Q +575,0,3,"Rush, Mr. Alfred George John",male,16,0,0,A/4. 20589,8.05,,S +576,0,3,"Patchett, Mr. George",male,19,0,0,358585,14.5,,S +577,1,2,"Garside, Miss. Ethel",female,34,0,0,243880,13,,S +578,1,1,"Silvey, Mrs. William Baird (Alice Munger)",female,39,1,0,13507,55.9,E44,S +579,0,3,"Caram, Mrs. Joseph (Maria Elias)",female,,1,0,2689,14.4583,,C +580,1,3,"Jussila, Mr. Eiriik",male,32,0,0,STON/O 2. 3101286,7.925,,S +581,1,2,"Christy, Miss. Julie Rachel",female,25,1,1,237789,30,,S +582,1,1,"Thayer, Mrs. John Borland (Marian Longstreth Morris)",female,39,1,1,17421,110.8833,C68,C +583,0,2,"Downton, Mr. William James",male,54,0,0,28403,26,,S +584,0,1,"Ross, Mr. John Hugo",male,36,0,0,13049,40.125,A10,C +585,0,3,"Paulner, Mr. Uscher",male,,0,0,3411,8.7125,,C +586,1,1,"Taussig, Miss. Ruth",female,18,0,2,110413,79.65,E68,S +587,0,2,"Jarvis, Mr. John Denzil",male,47,0,0,237565,15,,S +588,1,1,"Frolicher-Stehli, Mr. Maxmillian",male,60,1,1,13567,79.2,B41,C +589,0,3,"Gilinski, Mr. Eliezer",male,22,0,0,14973,8.05,,S +590,0,3,"Murdlin, Mr. Joseph",male,,0,0,A./5. 3235,8.05,,S +591,0,3,"Rintamaki, Mr. Matti",male,35,0,0,STON/O 2. 3101273,7.125,,S +592,1,1,"Stephenson, Mrs. Walter Bertram (Martha Eustis)",female,52,1,0,36947,78.2667,D20,C +593,0,3,"Elsbury, Mr. William James",male,47,0,0,A/5 3902,7.25,,S +594,0,3,"Bourke, Miss. Mary",female,,0,2,364848,7.75,,Q +595,0,2,"Chapman, Mr. John Henry",male,37,1,0,SC/AH 29037,26,,S +596,0,3,"Van Impe, Mr. Jean Baptiste",male,36,1,1,345773,24.15,,S +597,1,2,"Leitch, Miss. Jessie Wills",female,,0,0,248727,33,,S +598,0,3,"Johnson, Mr. Alfred",male,49,0,0,LINE,0,,S +599,0,3,"Boulos, Mr. Hanna",male,,0,0,2664,7.225,,C +600,1,1,"Duff Gordon, Sir. Cosmo Edmund (""Mr Morgan"")",male,49,1,0,PC 17485,56.9292,A20,C +601,1,2,"Jacobsohn, Mrs. Sidney Samuel (Amy Frances Christy)",female,24,2,1,243847,27,,S +602,0,3,"Slabenoff, Mr. Petco",male,,0,0,349214,7.8958,,S +603,0,1,"Harrington, Mr. Charles H",male,,0,0,113796,42.4,,S +604,0,3,"Torber, Mr. Ernst William",male,44,0,0,364511,8.05,,S +605,1,1,"Homer, Mr. Harry (""Mr E Haven"")",male,35,0,0,111426,26.55,,C +606,0,3,"Lindell, Mr. Edvard Bengtsson",male,36,1,0,349910,15.55,,S +607,0,3,"Karaic, Mr. Milan",male,30,0,0,349246,7.8958,,S +608,1,1,"Daniel, Mr. Robert Williams",male,27,0,0,113804,30.5,,S +609,1,2,"Laroche, Mrs. Joseph (Juliette Marie Louise Lafargue)",female,22,1,2,SC/Paris 2123,41.5792,,C +610,1,1,"Shutes, Miss. Elizabeth W",female,40,0,0,PC 17582,153.4625,C125,S +611,0,3,"Andersson, Mrs. Anders Johan (Alfrida Konstantia Brogren)",female,39,1,5,347082,31.275,,S +612,0,3,"Jardin, Mr. Jose Neto",male,,0,0,SOTON/O.Q. 3101305,7.05,,S +613,1,3,"Murphy, Miss. Margaret Jane",female,,1,0,367230,15.5,,Q +614,0,3,"Horgan, Mr. John",male,,0,0,370377,7.75,,Q +615,0,3,"Brocklebank, Mr. William Alfred",male,35,0,0,364512,8.05,,S +616,1,2,"Herman, Miss. Alice",female,24,1,2,220845,65,,S +617,0,3,"Danbom, Mr. Ernst Gilbert",male,34,1,1,347080,14.4,,S +618,0,3,"Lobb, Mrs. William Arthur (Cordelia K Stanlick)",female,26,1,0,A/5. 3336,16.1,,S +619,1,2,"Becker, Miss. Marion Louise",female,4,2,1,230136,39,F4,S +620,0,2,"Gavey, Mr. Lawrence",male,26,0,0,31028,10.5,,S +621,0,3,"Yasbeck, Mr. Antoni",male,27,1,0,2659,14.4542,,C +622,1,1,"Kimball, Mr. Edwin Nelson Jr",male,42,1,0,11753,52.5542,D19,S +623,1,3,"Nakid, Mr. Sahid",male,20,1,1,2653,15.7417,,C +624,0,3,"Hansen, Mr. Henry Damsgaard",male,21,0,0,350029,7.8542,,S +625,0,3,"Bowen, Mr. David John ""Dai""",male,21,0,0,54636,16.1,,S +626,0,1,"Sutton, Mr. Frederick",male,61,0,0,36963,32.3208,D50,S +627,0,2,"Kirkland, Rev. Charles Leonard",male,57,0,0,219533,12.35,,Q +628,1,1,"Longley, Miss. Gretchen Fiske",female,21,0,0,13502,77.9583,D9,S +629,0,3,"Bostandyeff, Mr. Guentcho",male,26,0,0,349224,7.8958,,S +630,0,3,"O'Connell, Mr. Patrick D",male,,0,0,334912,7.7333,,Q +631,1,1,"Barkworth, Mr. Algernon Henry Wilson",male,80,0,0,27042,30,A23,S +632,0,3,"Lundahl, Mr. Johan Svensson",male,51,0,0,347743,7.0542,,S +633,1,1,"Stahelin-Maeglin, Dr. Max",male,32,0,0,13214,30.5,B50,C +634,0,1,"Parr, Mr. William Henry Marsh",male,,0,0,112052,0,,S +635,0,3,"Skoog, Miss. Mabel",female,9,3,2,347088,27.9,,S +636,1,2,"Davis, Miss. Mary",female,28,0,0,237668,13,,S +637,0,3,"Leinonen, Mr. Antti Gustaf",male,32,0,0,STON/O 2. 3101292,7.925,,S +638,0,2,"Collyer, Mr. Harvey",male,31,1,1,C.A. 31921,26.25,,S +639,0,3,"Panula, Mrs. Juha (Maria Emilia Ojala)",female,41,0,5,3101295,39.6875,,S +640,0,3,"Thorneycroft, Mr. Percival",male,,1,0,376564,16.1,,S +641,0,3,"Jensen, Mr. Hans Peder",male,20,0,0,350050,7.8542,,S +642,1,1,"Sagesser, Mlle. Emma",female,24,0,0,PC 17477,69.3,B35,C +643,0,3,"Skoog, Miss. Margit Elizabeth",female,2,3,2,347088,27.9,,S +644,1,3,"Foo, Mr. Choong",male,,0,0,1601,56.4958,,S +645,1,3,"Baclini, Miss. Eugenie",female,0.75,2,1,2666,19.2583,,C +646,1,1,"Harper, Mr. Henry Sleeper",male,48,1,0,PC 17572,76.7292,D33,C +647,0,3,"Cor, Mr. Liudevit",male,19,0,0,349231,7.8958,,S +648,1,1,"Simonius-Blumer, Col. Oberst Alfons",male,56,0,0,13213,35.5,A26,C +649,0,3,"Willey, Mr. Edward",male,,0,0,S.O./P.P. 751,7.55,,S +650,1,3,"Stanley, Miss. Amy Zillah Elsie",female,23,0,0,CA. 2314,7.55,,S +651,0,3,"Mitkoff, Mr. Mito",male,,0,0,349221,7.8958,,S +652,1,2,"Doling, Miss. Elsie",female,18,0,1,231919,23,,S +653,0,3,"Kalvik, Mr. Johannes Halvorsen",male,21,0,0,8475,8.4333,,S +654,1,3,"O'Leary, Miss. Hanora ""Norah""",female,,0,0,330919,7.8292,,Q +655,0,3,"Hegarty, Miss. Hanora ""Nora""",female,18,0,0,365226,6.75,,Q +656,0,2,"Hickman, Mr. Leonard Mark",male,24,2,0,S.O.C. 14879,73.5,,S +657,0,3,"Radeff, Mr. Alexander",male,,0,0,349223,7.8958,,S +658,0,3,"Bourke, Mrs. John (Catherine)",female,32,1,1,364849,15.5,,Q +659,0,2,"Eitemiller, Mr. George Floyd",male,23,0,0,29751,13,,S +660,0,1,"Newell, Mr. Arthur Webster",male,58,0,2,35273,113.275,D48,C +661,1,1,"Frauenthal, Dr. Henry William",male,50,2,0,PC 17611,133.65,,S +662,0,3,"Badt, Mr. Mohamed",male,40,0,0,2623,7.225,,C +663,0,1,"Colley, Mr. Edward Pomeroy",male,47,0,0,5727,25.5875,E58,S +664,0,3,"Coleff, Mr. Peju",male,36,0,0,349210,7.4958,,S +665,1,3,"Lindqvist, Mr. Eino William",male,20,1,0,STON/O 2. 3101285,7.925,,S +666,0,2,"Hickman, Mr. Lewis",male,32,2,0,S.O.C. 14879,73.5,,S +667,0,2,"Butler, Mr. Reginald Fenton",male,25,0,0,234686,13,,S +668,0,3,"Rommetvedt, Mr. Knud Paust",male,,0,0,312993,7.775,,S +669,0,3,"Cook, Mr. Jacob",male,43,0,0,A/5 3536,8.05,,S +670,1,1,"Taylor, Mrs. Elmer Zebley (Juliet Cummins Wright)",female,,1,0,19996,52,C126,S +671,1,2,"Brown, Mrs. Thomas William Solomon (Elizabeth Catherine Ford)",female,40,1,1,29750,39,,S +672,0,1,"Davidson, Mr. Thornton",male,31,1,0,F.C. 12750,52,B71,S +673,0,2,"Mitchell, Mr. Henry Michael",male,70,0,0,C.A. 24580,10.5,,S +674,1,2,"Wilhelms, Mr. Charles",male,31,0,0,244270,13,,S +675,0,2,"Watson, Mr. Ennis Hastings",male,,0,0,239856,0,,S +676,0,3,"Edvardsson, Mr. Gustaf Hjalmar",male,18,0,0,349912,7.775,,S +677,0,3,"Sawyer, Mr. Frederick Charles",male,24.5,0,0,342826,8.05,,S +678,1,3,"Turja, Miss. Anna Sofia",female,18,0,0,4138,9.8417,,S +679,0,3,"Goodwin, Mrs. Frederick (Augusta Tyler)",female,43,1,6,CA 2144,46.9,,S +680,1,1,"Cardeza, Mr. Thomas Drake Martinez",male,36,0,1,PC 17755,512.3292,B51 B53 B55,C +681,0,3,"Peters, Miss. Katie",female,,0,0,330935,8.1375,,Q +682,1,1,"Hassab, Mr. Hammad",male,27,0,0,PC 17572,76.7292,D49,C +683,0,3,"Olsvigen, Mr. Thor Anderson",male,20,0,0,6563,9.225,,S +684,0,3,"Goodwin, Mr. Charles Edward",male,14,5,2,CA 2144,46.9,,S +685,0,2,"Brown, Mr. Thomas William Solomon",male,60,1,1,29750,39,,S +686,0,2,"Laroche, Mr. Joseph Philippe Lemercier",male,25,1,2,SC/Paris 2123,41.5792,,C +687,0,3,"Panula, Mr. Jaako Arnold",male,14,4,1,3101295,39.6875,,S +688,0,3,"Dakic, Mr. Branko",male,19,0,0,349228,10.1708,,S +689,0,3,"Fischer, Mr. Eberhard Thelander",male,18,0,0,350036,7.7958,,S +690,1,1,"Madill, Miss. Georgette Alexandra",female,15,0,1,24160,211.3375,B5,S +691,1,1,"Dick, Mr. Albert Adrian",male,31,1,0,17474,57,B20,S +692,1,3,"Karun, Miss. Manca",female,4,0,1,349256,13.4167,,C +693,1,3,"Lam, Mr. Ali",male,,0,0,1601,56.4958,,S +694,0,3,"Saad, Mr. Khalil",male,25,0,0,2672,7.225,,C +695,0,1,"Weir, Col. John",male,60,0,0,113800,26.55,,S +696,0,2,"Chapman, Mr. Charles Henry",male,52,0,0,248731,13.5,,S +697,0,3,"Kelly, Mr. James",male,44,0,0,363592,8.05,,S +698,1,3,"Mullens, Miss. Katherine ""Katie""",female,,0,0,35852,7.7333,,Q +699,0,1,"Thayer, Mr. John Borland",male,49,1,1,17421,110.8833,C68,C +700,0,3,"Humblen, Mr. Adolf Mathias Nicolai Olsen",male,42,0,0,348121,7.65,F G63,S +701,1,1,"Astor, Mrs. John Jacob (Madeleine Talmadge Force)",female,18,1,0,PC 17757,227.525,C62 C64,C +702,1,1,"Silverthorne, Mr. Spencer Victor",male,35,0,0,PC 17475,26.2875,E24,S +703,0,3,"Barbara, Miss. Saiide",female,18,0,1,2691,14.4542,,C +704,0,3,"Gallagher, Mr. Martin",male,25,0,0,36864,7.7417,,Q +705,0,3,"Hansen, Mr. Henrik Juul",male,26,1,0,350025,7.8542,,S +706,0,2,"Morley, Mr. Henry Samuel (""Mr Henry Marshall"")",male,39,0,0,250655,26,,S +707,1,2,"Kelly, Mrs. Florence ""Fannie""",female,45,0,0,223596,13.5,,S +708,1,1,"Calderhead, Mr. Edward Pennington",male,42,0,0,PC 17476,26.2875,E24,S +709,1,1,"Cleaver, Miss. Alice",female,22,0,0,113781,151.55,,S +710,1,3,"Moubarek, Master. Halim Gonios (""William George"")",male,,1,1,2661,15.2458,,C +711,1,1,"Mayne, Mlle. Berthe Antonine (""Mrs de Villiers"")",female,24,0,0,PC 17482,49.5042,C90,C +712,0,1,"Klaber, Mr. Herman",male,,0,0,113028,26.55,C124,S +713,1,1,"Taylor, Mr. Elmer Zebley",male,48,1,0,19996,52,C126,S +714,0,3,"Larsson, Mr. August Viktor",male,29,0,0,7545,9.4833,,S +715,0,2,"Greenberg, Mr. Samuel",male,52,0,0,250647,13,,S +716,0,3,"Soholt, Mr. Peter Andreas Lauritz Andersen",male,19,0,0,348124,7.65,F G73,S +717,1,1,"Endres, Miss. Caroline Louise",female,38,0,0,PC 17757,227.525,C45,C +718,1,2,"Troutt, Miss. Edwina Celia ""Winnie""",female,27,0,0,34218,10.5,E101,S +719,0,3,"McEvoy, Mr. Michael",male,,0,0,36568,15.5,,Q +720,0,3,"Johnson, Mr. Malkolm Joackim",male,33,0,0,347062,7.775,,S +721,1,2,"Harper, Miss. Annie Jessie ""Nina""",female,6,0,1,248727,33,,S +722,0,3,"Jensen, Mr. Svend Lauritz",male,17,1,0,350048,7.0542,,S +723,0,2,"Gillespie, Mr. William Henry",male,34,0,0,12233,13,,S +724,0,2,"Hodges, Mr. Henry Price",male,50,0,0,250643,13,,S +725,1,1,"Chambers, Mr. Norman Campbell",male,27,1,0,113806,53.1,E8,S +726,0,3,"Oreskovic, Mr. Luka",male,20,0,0,315094,8.6625,,S +727,1,2,"Renouf, Mrs. Peter Henry (Lillian Jefferys)",female,30,3,0,31027,21,,S +728,1,3,"Mannion, Miss. Margareth",female,,0,0,36866,7.7375,,Q +729,0,2,"Bryhl, Mr. Kurt Arnold Gottfrid",male,25,1,0,236853,26,,S +730,0,3,"Ilmakangas, Miss. Pieta Sofia",female,25,1,0,STON/O2. 3101271,7.925,,S +731,1,1,"Allen, Miss. Elisabeth Walton",female,29,0,0,24160,211.3375,B5,S +732,0,3,"Hassan, Mr. Houssein G N",male,11,0,0,2699,18.7875,,C +733,0,2,"Knight, Mr. Robert J",male,,0,0,239855,0,,S +734,0,2,"Berriman, Mr. William John",male,23,0,0,28425,13,,S +735,0,2,"Troupiansky, Mr. Moses Aaron",male,23,0,0,233639,13,,S +736,0,3,"Williams, Mr. Leslie",male,28.5,0,0,54636,16.1,,S +737,0,3,"Ford, Mrs. Edward (Margaret Ann Watson)",female,48,1,3,W./C. 6608,34.375,,S +738,1,1,"Lesurer, Mr. Gustave J",male,35,0,0,PC 17755,512.3292,B101,C +739,0,3,"Ivanoff, Mr. Kanio",male,,0,0,349201,7.8958,,S +740,0,3,"Nankoff, Mr. Minko",male,,0,0,349218,7.8958,,S +741,1,1,"Hawksford, Mr. Walter James",male,,0,0,16988,30,D45,S +742,0,1,"Cavendish, Mr. Tyrell William",male,36,1,0,19877,78.85,C46,S +743,1,1,"Ryerson, Miss. Susan Parker ""Suzette""",female,21,2,2,PC 17608,262.375,B57 B59 B63 B66,C +744,0,3,"McNamee, Mr. Neal",male,24,1,0,376566,16.1,,S +745,1,3,"Stranden, Mr. Juho",male,31,0,0,STON/O 2. 3101288,7.925,,S +746,0,1,"Crosby, Capt. Edward Gifford",male,70,1,1,WE/P 5735,71,B22,S +747,0,3,"Abbott, Mr. Rossmore Edward",male,16,1,1,C.A. 2673,20.25,,S +748,1,2,"Sinkkonen, Miss. Anna",female,30,0,0,250648,13,,S +749,0,1,"Marvin, Mr. Daniel Warner",male,19,1,0,113773,53.1,D30,S +750,0,3,"Connaghton, Mr. Michael",male,31,0,0,335097,7.75,,Q +751,1,2,"Wells, Miss. Joan",female,4,1,1,29103,23,,S +752,1,3,"Moor, Master. Meier",male,6,0,1,392096,12.475,E121,S +753,0,3,"Vande Velde, Mr. Johannes Joseph",male,33,0,0,345780,9.5,,S +754,0,3,"Jonkoff, Mr. Lalio",male,23,0,0,349204,7.8958,,S +755,1,2,"Herman, Mrs. Samuel (Jane Laver)",female,48,1,2,220845,65,,S +756,1,2,"Hamalainen, Master. Viljo",male,0.67,1,1,250649,14.5,,S +757,0,3,"Carlsson, Mr. August Sigfrid",male,28,0,0,350042,7.7958,,S +758,0,2,"Bailey, Mr. Percy Andrew",male,18,0,0,29108,11.5,,S +759,0,3,"Theobald, Mr. Thomas Leonard",male,34,0,0,363294,8.05,,S +760,1,1,"Rothes, the Countess. of (Lucy Noel Martha Dyer-Edwards)",female,33,0,0,110152,86.5,B77,S +761,0,3,"Garfirth, Mr. John",male,,0,0,358585,14.5,,S +762,0,3,"Nirva, Mr. Iisakki Antino Aijo",male,41,0,0,SOTON/O2 3101272,7.125,,S +763,1,3,"Barah, Mr. Hanna Assi",male,20,0,0,2663,7.2292,,C +764,1,1,"Carter, Mrs. William Ernest (Lucile Polk)",female,36,1,2,113760,120,B96 B98,S +765,0,3,"Eklund, Mr. Hans Linus",male,16,0,0,347074,7.775,,S +766,1,1,"Hogeboom, Mrs. John C (Anna Andrews)",female,51,1,0,13502,77.9583,D11,S +767,0,1,"Brewe, Dr. Arthur Jackson",male,,0,0,112379,39.6,,C +768,0,3,"Mangan, Miss. Mary",female,30.5,0,0,364850,7.75,,Q +769,0,3,"Moran, Mr. Daniel J",male,,1,0,371110,24.15,,Q +770,0,3,"Gronnestad, Mr. Daniel Danielsen",male,32,0,0,8471,8.3625,,S +771,0,3,"Lievens, Mr. Rene Aime",male,24,0,0,345781,9.5,,S +772,0,3,"Jensen, Mr. Niels Peder",male,48,0,0,350047,7.8542,,S +773,0,2,"Mack, Mrs. (Mary)",female,57,0,0,S.O./P.P. 3,10.5,E77,S +774,0,3,"Elias, Mr. Dibo",male,,0,0,2674,7.225,,C +775,1,2,"Hocking, Mrs. Elizabeth (Eliza Needs)",female,54,1,3,29105,23,,S +776,0,3,"Myhrman, Mr. Pehr Fabian Oliver Malkolm",male,18,0,0,347078,7.75,,S +777,0,3,"Tobin, Mr. Roger",male,,0,0,383121,7.75,F38,Q +778,1,3,"Emanuel, Miss. Virginia Ethel",female,5,0,0,364516,12.475,,S +779,0,3,"Kilgannon, Mr. Thomas J",male,,0,0,36865,7.7375,,Q +780,1,1,"Robert, Mrs. Edward Scott (Elisabeth Walton McMillan)",female,43,0,1,24160,211.3375,B3,S +781,1,3,"Ayoub, Miss. Banoura",female,13,0,0,2687,7.2292,,C +782,1,1,"Dick, Mrs. Albert Adrian (Vera Gillespie)",female,17,1,0,17474,57,B20,S +783,0,1,"Long, Mr. Milton Clyde",male,29,0,0,113501,30,D6,S +784,0,3,"Johnston, Mr. Andrew G",male,,1,2,W./C. 6607,23.45,,S +785,0,3,"Ali, Mr. William",male,25,0,0,SOTON/O.Q. 3101312,7.05,,S +786,0,3,"Harmer, Mr. Abraham (David Lishin)",male,25,0,0,374887,7.25,,S +787,1,3,"Sjoblom, Miss. Anna Sofia",female,18,0,0,3101265,7.4958,,S +788,0,3,"Rice, Master. George Hugh",male,8,4,1,382652,29.125,,Q +789,1,3,"Dean, Master. Bertram Vere",male,1,1,2,C.A. 2315,20.575,,S +790,0,1,"Guggenheim, Mr. Benjamin",male,46,0,0,PC 17593,79.2,B82 B84,C +791,0,3,"Keane, Mr. Andrew ""Andy""",male,,0,0,12460,7.75,,Q +792,0,2,"Gaskell, Mr. Alfred",male,16,0,0,239865,26,,S +793,0,3,"Sage, Miss. Stella Anna",female,,8,2,CA. 2343,69.55,,S +794,0,1,"Hoyt, Mr. William Fisher",male,,0,0,PC 17600,30.6958,,C +795,0,3,"Dantcheff, Mr. Ristiu",male,25,0,0,349203,7.8958,,S +796,0,2,"Otter, Mr. Richard",male,39,0,0,28213,13,,S +797,1,1,"Leader, Dr. Alice (Farnham)",female,49,0,0,17465,25.9292,D17,S +798,1,3,"Osman, Mrs. Mara",female,31,0,0,349244,8.6833,,S +799,0,3,"Ibrahim Shawah, Mr. Yousseff",male,30,0,0,2685,7.2292,,C +800,0,3,"Van Impe, Mrs. Jean Baptiste (Rosalie Paula Govaert)",female,30,1,1,345773,24.15,,S +801,0,2,"Ponesell, Mr. Martin",male,34,0,0,250647,13,,S +802,1,2,"Collyer, Mrs. Harvey (Charlotte Annie Tate)",female,31,1,1,C.A. 31921,26.25,,S +803,1,1,"Carter, Master. William Thornton II",male,11,1,2,113760,120,B96 B98,S +804,1,3,"Thomas, Master. Assad Alexander",male,0.42,0,1,2625,8.5167,,C +805,1,3,"Hedman, Mr. Oskar Arvid",male,27,0,0,347089,6.975,,S +806,0,3,"Johansson, Mr. Karl Johan",male,31,0,0,347063,7.775,,S +807,0,1,"Andrews, Mr. Thomas Jr",male,39,0,0,112050,0,A36,S +808,0,3,"Pettersson, Miss. Ellen Natalia",female,18,0,0,347087,7.775,,S +809,0,2,"Meyer, Mr. August",male,39,0,0,248723,13,,S +810,1,1,"Chambers, Mrs. Norman Campbell (Bertha Griggs)",female,33,1,0,113806,53.1,E8,S +811,0,3,"Alexander, Mr. William",male,26,0,0,3474,7.8875,,S +812,0,3,"Lester, Mr. James",male,39,0,0,A/4 48871,24.15,,S +813,0,2,"Slemen, Mr. Richard James",male,35,0,0,28206,10.5,,S +814,0,3,"Andersson, Miss. Ebba Iris Alfrida",female,6,4,2,347082,31.275,,S +815,0,3,"Tomlin, Mr. Ernest Portage",male,30.5,0,0,364499,8.05,,S +816,0,1,"Fry, Mr. Richard",male,,0,0,112058,0,B102,S +817,0,3,"Heininen, Miss. Wendla Maria",female,23,0,0,STON/O2. 3101290,7.925,,S +818,0,2,"Mallet, Mr. Albert",male,31,1,1,S.C./PARIS 2079,37.0042,,C +819,0,3,"Holm, Mr. John Fredrik Alexander",male,43,0,0,C 7075,6.45,,S +820,0,3,"Skoog, Master. Karl Thorsten",male,10,3,2,347088,27.9,,S +821,1,1,"Hays, Mrs. Charles Melville (Clara Jennings Gregg)",female,52,1,1,12749,93.5,B69,S +822,1,3,"Lulic, Mr. Nikola",male,27,0,0,315098,8.6625,,S +823,0,1,"Reuchlin, Jonkheer. John George",male,38,0,0,19972,0,,S +824,1,3,"Moor, Mrs. (Beila)",female,27,0,1,392096,12.475,E121,S +825,0,3,"Panula, Master. Urho Abraham",male,2,4,1,3101295,39.6875,,S +826,0,3,"Flynn, Mr. John",male,,0,0,368323,6.95,,Q +827,0,3,"Lam, Mr. Len",male,,0,0,1601,56.4958,,S +828,1,2,"Mallet, Master. Andre",male,1,0,2,S.C./PARIS 2079,37.0042,,C +829,1,3,"McCormack, Mr. Thomas Joseph",male,,0,0,367228,7.75,,Q +830,1,1,"Stone, Mrs. George Nelson (Martha Evelyn)",female,62,0,0,113572,80,B28, +831,1,3,"Yasbeck, Mrs. Antoni (Selini Alexander)",female,15,1,0,2659,14.4542,,C +832,1,2,"Richards, Master. George Sibley",male,0.83,1,1,29106,18.75,,S +833,0,3,"Saad, Mr. Amin",male,,0,0,2671,7.2292,,C +834,0,3,"Augustsson, Mr. Albert",male,23,0,0,347468,7.8542,,S +835,0,3,"Allum, Mr. Owen George",male,18,0,0,2223,8.3,,S +836,1,1,"Compton, Miss. Sara Rebecca",female,39,1,1,PC 17756,83.1583,E49,C +837,0,3,"Pasic, Mr. Jakob",male,21,0,0,315097,8.6625,,S +838,0,3,"Sirota, Mr. Maurice",male,,0,0,392092,8.05,,S +839,1,3,"Chip, Mr. Chang",male,32,0,0,1601,56.4958,,S +840,1,1,"Marechal, Mr. Pierre",male,,0,0,11774,29.7,C47,C +841,0,3,"Alhomaki, Mr. Ilmari Rudolf",male,20,0,0,SOTON/O2 3101287,7.925,,S +842,0,2,"Mudd, Mr. Thomas Charles",male,16,0,0,S.O./P.P. 3,10.5,,S +843,1,1,"Serepeca, Miss. Augusta",female,30,0,0,113798,31,,C +844,0,3,"Lemberopolous, Mr. Peter L",male,34.5,0,0,2683,6.4375,,C +845,0,3,"Culumovic, Mr. Jeso",male,17,0,0,315090,8.6625,,S +846,0,3,"Abbing, Mr. Anthony",male,42,0,0,C.A. 5547,7.55,,S +847,0,3,"Sage, Mr. Douglas Bullen",male,,8,2,CA. 2343,69.55,,S +848,0,3,"Markoff, Mr. Marin",male,35,0,0,349213,7.8958,,C +849,0,2,"Harper, Rev. John",male,28,0,1,248727,33,,S +850,1,1,"Goldenberg, Mrs. Samuel L (Edwiga Grabowska)",female,,1,0,17453,89.1042,C92,C +851,0,3,"Andersson, Master. Sigvard Harald Elias",male,4,4,2,347082,31.275,,S +852,0,3,"Svensson, Mr. Johan",male,74,0,0,347060,7.775,,S +853,0,3,"Boulos, Miss. Nourelain",female,9,1,1,2678,15.2458,,C +854,1,1,"Lines, Miss. Mary Conover",female,16,0,1,PC 17592,39.4,D28,S +855,0,2,"Carter, Mrs. Ernest Courtenay (Lilian Hughes)",female,44,1,0,244252,26,,S +856,1,3,"Aks, Mrs. Sam (Leah Rosen)",female,18,0,1,392091,9.35,,S +857,1,1,"Wick, Mrs. George Dennick (Mary Hitchcock)",female,45,1,1,36928,164.8667,,S +858,1,1,"Daly, Mr. Peter Denis ",male,51,0,0,113055,26.55,E17,S +859,1,3,"Baclini, Mrs. Solomon (Latifa Qurban)",female,24,0,3,2666,19.2583,,C +860,0,3,"Razi, Mr. Raihed",male,,0,0,2629,7.2292,,C +861,0,3,"Hansen, Mr. Claus Peter",male,41,2,0,350026,14.1083,,S +862,0,2,"Giles, Mr. Frederick Edward",male,21,1,0,28134,11.5,,S +863,1,1,"Swift, Mrs. Frederick Joel (Margaret Welles Barron)",female,48,0,0,17466,25.9292,D17,S +864,0,3,"Sage, Miss. Dorothy Edith ""Dolly""",female,,8,2,CA. 2343,69.55,,S +865,0,2,"Gill, Mr. John William",male,24,0,0,233866,13,,S +866,1,2,"Bystrom, Mrs. (Karolina)",female,42,0,0,236852,13,,S +867,1,2,"Duran y More, Miss. Asuncion",female,27,1,0,SC/PARIS 2149,13.8583,,C +868,0,1,"Roebling, Mr. Washington Augustus II",male,31,0,0,PC 17590,50.4958,A24,S +869,0,3,"van Melkebeke, Mr. Philemon",male,,0,0,345777,9.5,,S +870,1,3,"Johnson, Master. Harold Theodor",male,4,1,1,347742,11.1333,,S +871,0,3,"Balkic, Mr. Cerin",male,26,0,0,349248,7.8958,,S +872,1,1,"Beckwith, Mrs. Richard Leonard (Sallie Monypeny)",female,47,1,1,11751,52.5542,D35,S +873,0,1,"Carlsson, Mr. Frans Olof",male,33,0,0,695,5,B51 B53 B55,S +874,0,3,"Vander Cruyssen, Mr. Victor",male,47,0,0,345765,9,,S +875,1,2,"Abelson, Mrs. Samuel (Hannah Wizosky)",female,28,1,0,P/PP 3381,24,,C +876,1,3,"Najib, Miss. Adele Kiamie ""Jane""",female,15,0,0,2667,7.225,,C +877,0,3,"Gustafsson, Mr. Alfred Ossian",male,20,0,0,7534,9.8458,,S +878,0,3,"Petroff, Mr. Nedelio",male,19,0,0,349212,7.8958,,S +879,0,3,"Laleff, Mr. Kristo",male,,0,0,349217,7.8958,,S +880,1,1,"Potter, Mrs. Thomas Jr (Lily Alexenia Wilson)",female,56,0,1,11767,83.1583,C50,C +881,1,2,"Shelley, Mrs. William (Imanita Parrish Hall)",female,25,0,1,230433,26,,S +882,0,3,"Markun, Mr. Johann",male,33,0,0,349257,7.8958,,S +883,0,3,"Dahlberg, Miss. Gerda Ulrika",female,22,0,0,7552,10.5167,,S +884,0,2,"Banfield, Mr. Frederick James",male,28,0,0,C.A./SOTON 34068,10.5,,S +885,0,3,"Sutehall, Mr. Henry Jr",male,25,0,0,SOTON/OQ 392076,7.05,,S +886,0,3,"Rice, Mrs. William (Margaret Norton)",female,39,0,5,382652,29.125,,Q +887,0,2,"Montvila, Rev. Juozas",male,27,0,0,211536,13,,S +888,1,1,"Graham, Miss. Margaret Edith",female,19,0,0,112053,30,B42,S +889,0,3,"Johnston, Miss. Catherine Helen ""Carrie""",female,,1,2,W./C. 6607,23.45,,S +890,1,1,"Behr, Mr. Karl Howell",male,26,0,0,111369,30,C148,C +891,0,3,"Dooley, Mr. Patrick",male,32,0,0,370376,7.75,,Q diff --git a/data_exploration/explore.py b/data_exploration/explore.py new file mode 100644 index 0000000..81fac64 --- /dev/null +++ b/data_exploration/explore.py @@ -0,0 +1,207 @@ +#import pandas as pd +import numpy as np +import seaborn as sns +import matplotlib.pyplot as plt +import os +plt.style.use('seaborn-colorblind') + +# 2018.11.07 Created by Eamon.Zhang + + +def get_dtypes(data,drop_col=[]): + """Return the dtypes for each column of a pandas Dataframe + + Parameters + ---------- + data : pandas Dataframe + + drop_col : columns to omit in a list + + Returns + ------- + str_var_list, num_var_list, all_var_list + + """ + + name_of_col = list(data.columns) + num_var_list = [] + str_var_list = [] + all_var_list = [] + + str_var_list = name_of_col.copy() + for var in name_of_col: + # check if column belongs to numeric type + if (data[var].dtypes in (np.int, np.int64, np.uint, np.int32, np.float, + np.float64, np.float32, np.double)): + str_var_list.remove(var) + num_var_list.append(var) + # drop the omit column from list + for var in drop_col: + if var in str_var_list: + str_var_list.remove(var) + if var in num_var_list: + num_var_list.remove(var) + + all_var_list.extend(str_var_list) + all_var_list.extend(num_var_list) + return str_var_list, num_var_list, all_var_list + + +def describe(data,output_path=None): + """output the general description of a pandas Dataframe + into a csv file + + """ + + result = data.describe(include='all') + if output_path is not None: + output = os.path.join(output_path,'describe.csv') + result.to_csv(output) + print('result saved at:', str(output)) + return result + + +def discrete_var_barplot(x,y,data,output_path=None): + """draw the barplot of a discrete variable x against y(target variable). + By default the bar shows the mean value of y. + + Parameters + ---------- + + + Returns + ------- + figure save as PNG + """ + + plt.figure(figsize=(15,10)) + sns.barplot(x=x,y=y,data=data) + if output_path is not None: + output = os.path.join(output_path,'Barplot_'+str(x)+'_'+str(y)+'.png') + plt.savefig(output) + print('Image saved at', str(output)) + + +def discrete_var_countplot(x,data,output_path=None): + """draw the countplot of a discrete variable x. + + Parameters + ---------- + + + Returns + ------- + figure save as PNG + """ + + plt.figure(figsize=(15,10)) + sns.countplot(x=x,data=data) + if output_path is not None: + output = os.path.join(output_path,'Countplot_'+str(x)+'.png') + plt.savefig(output) + print('Image saved at',str(output)) + + +def discrete_var_boxplot(x,y,data,output_path=None): + """draw the boxplot of a discrete variable x against y. + + Parameters + ---------- + + + Returns + ------- + figure save as PNG + """ + + plt.figure(figsize=(15,10)) + sns.boxplot(x=x,y=y,data=data) + if output_path is not None: + output = os.path.join(output_path,'Boxplot_'+str(x)+'_'+str(y)+'.png') + plt.savefig(output) + print('Image saved at',str(output)) + + +def continuous_var_distplot(x,output_path=None,bins=None): + """draw the distplot of a continuous variable x. + + Parameters + ---------- + + + Returns + ------- + figure save as PNG + """ + + plt.figure(figsize=(15,10)) + sns.distplot(a=x,kde=False,bins=bins) + if output_path is not None: + output=os.path.join(output_path,'Distplot_'+str(x.name)+'.png') + plt.savefig(output) + print('Image saved at',str(output)) + + +# 2018.11.28 Created by Eamon.Zhang + +def scatter_plot(x,y,data,output_path=None): + """draw the scatter-plot of two variables. + + Parameters + ---------- + + + Returns + ------- + figure save as PNG + """ + + plt.figure(figsize=(15,10)) + sns.scatterplot(x=x,y=y,data=data) + if output_path is not None: + output = os.path.join(output_path,'Scatter_plot_'+str(x.name)+'_'+str(y.name)+'.png') + plt.savefig(output) + print('Image saved at',str(output)) + + +def correlation_plot(data,output_path=None): + """draw the correlation plot between variables. + + Parameters + ---------- + + + Returns + ------- + figure save as PNG + """ + + corrmat = data.corr() + fig, ax = plt.subplots() + fig.set_size_inches(11,11) + sns.heatmap(corrmat,cmap="YlGnBu",linewidths=.5,annot=True) + if output_path is not None: + output = os.path.join(output_path,'Corr_plot'+'.png') + plt.savefig(output) + print('Image saved at',str(output)) + + +def heatmap(data,output_path=None,fmt='d'): + """draw the heatmap between 2 variables. + + Parameters + ---------- + + + Returns + ------- + figure save as PNG + """ + + fig, ax = plt.subplots() + fig.set_size_inches(11,11) + sns.heatmap(data,cmap="YlGnBu",linewidths=.5,annot=True,fmt=fmt) + if output_path is not None: + output = os.path.join(output_path,'Heatmap'+'.png') + plt.savefig(output) + print('Image saved at',str(output)) \ No newline at end of file diff --git a/feature_cleaning/missing_data.py b/feature_cleaning/missing_data.py new file mode 100644 index 0000000..f948de9 --- /dev/null +++ b/feature_cleaning/missing_data.py @@ -0,0 +1,122 @@ +import pandas as pd +import numpy as np +from warnings import warn + +# 2018.11.07 Created by Eamon.Zhang + + +def check_missing(data,output_path=None): + """ + check the total number & percentage of missing values + per variable of a pandas Dataframe + """ + + result = pd.concat([data.isnull().sum(),data.isnull().mean()],axis=1) + result = result.rename(index=str,columns={0:'total missing',1:'proportion'}) + if output_path is not None: + result.to_csv(output_path+'missing.csv') + print('result saved at', output_path, 'missing.csv') + return result + + +def drop_missing(data,axis=0): + """ + Listwise deletion: + excluding all cases (listwise) that have missing values + + Parameters + ---------- + axis: drop cases(0)/columns(1),default 0 + + Returns + ------- + Pandas dataframe with missing cases/columns dropped + """ + + data_copy = data.copy(deep=True) + data_copy = data_copy.dropna(axis=axis,inplace=False) + return data_copy + + +def add_var_denote_NA(data,NA_col=[]): + """ + creating an additional variable indicating whether the data + was missing for that observation (1) or not (0). + """ + + data_copy = data.copy(deep=True) + for i in NA_col: + if data_copy[i].isnull().sum()>0: + data_copy[i+'_is_NA'] = np.where(data_copy[i].isnull(),1,0) + else: + warn("Column %s has no missing cases" % i) + + return data_copy + + +def impute_NA_with_arbitrary(data,impute_value,NA_col=[]): + """ + replacing NA with arbitrary values. + """ + + data_copy = data.copy(deep=True) + for i in NA_col: + if data_copy[i].isnull().sum()>0: + data_copy[i+'_'+str(impute_value)] = data_copy[i].fillna(impute_value) + else: + warn("Column %s has no missing cases" % i) + return data_copy + + +def impute_NA_with_avg(data,strategy='mean',NA_col=[]): + """ + replacing the NA with mean/median/most frequent values of that variable. + Note it should only be performed over training set and then propagated to test set. + """ + + data_copy = data.copy(deep=True) + for i in NA_col: + if data_copy[i].isnull().sum()>0: + if strategy=='mean': + data_copy[i+'_impute_mean'] = data_copy[i].fillna(data[i].mean()) + elif strategy=='median': + data_copy[i+'_impute_median'] = data_copy[i].fillna(data[i].median()) + elif strategy=='mode': + data_copy[i+'_impute_mode'] = data_copy[i].fillna(data[i].mode()[0]) + else: + warn("Column %s has no missing" % i) + return data_copy + + +def impute_NA_with_end_of_distribution(data,NA_col=[]): + """ + replacing the NA by values that are at the far end of the distribution of that variable + calculated by mean + 3*std + """ + + data_copy = data.copy(deep=True) + for i in NA_col: + if data_copy[i].isnull().sum()>0: + data_copy[i+'_impute_end_of_distri'] = data_copy[i].fillna(data[i].mean()+3*data[i].std()) + else: + warn("Column %s has no missing" % i) + return data_copy + + +def impute_NA_with_random(data,NA_col=[],random_state=0): + """ + replacing the NA with random sampling from the pool of available observations of the variable + """ + + data_copy = data.copy(deep=True) + for i in NA_col: + if data_copy[i].isnull().sum()>0: + data_copy[i+'_random'] = data_copy[i] + # extract the random sample to fill the na + random_sample = data_copy[i].dropna().sample(data_copy[i].isnull().sum(), random_state=random_state) + random_sample.index = data_copy[data_copy[i].isnull()].index + data_copy.loc[data_copy[i].isnull(), str(i)+'_random'] = random_sample + else: + warn("Column %s has no missing" % i) + return data_copy + \ No newline at end of file diff --git a/feature_cleaning/outlier.py b/feature_cleaning/outlier.py new file mode 100644 index 0000000..64b0d53 --- /dev/null +++ b/feature_cleaning/outlier.py @@ -0,0 +1,138 @@ +import pandas as pd +import numpy as np +# from warnings import warn + +# 2018.11.07 Created by Eamon.Zhang + +def outlier_detect_arbitrary(data,col,upper_fence,lower_fence): + ''' + identify outliers based on arbitrary boundaries passed to the function. + ''' + + para = (upper_fence, lower_fence) + tmp = pd.concat([data[col]>upper_fence,data[col]Upper_fence,data[col]Upper_fence,data[col] threshold + print('Num of outlier detected:',outlier_index.value_counts()[1]) + print('Proportion of outlier detected',outlier_index.value_counts()[1]/len(outlier_index)) + return outlier_index + + +# 2018.11.10 outlier treatment +def impute_outlier_with_arbitrary(data,outlier_index,value,col=[]): + """ + impute outliers with arbitrary value + """ + + data_copy = data.copy(deep=True) + for i in col: + data_copy.loc[outlier_index,i] = value + return data_copy + + +def windsorization(data,col,para,strategy='both'): + """ + top-coding & bottom coding (capping the maximum of a distribution at an arbitrarily set value,vice versa) + """ + + data_copy = data.copy(deep=True) + if strategy == 'both': + data_copy.loc[data_copy[col]>para[0],col] = para[0] + data_copy.loc[data_copy[col]para[0],col] = para[0] + elif strategy == 'bottom': + data_copy.loc[data_copy[col]= threshold].index else k) + for k in temp_df.index} + + mapping = pd.Series(mapping) + mapping_out.append({'col': col, 'mapping': mapping, 'data_type': X[col].dtype}, ) + + return X, mapping_out + + + +#============================================================================== +# def rare_imputation(X_train, X_test, variable): +# +# # find the most frequent category +# frequent_cat = X_train.groupby(variable)[variable].count().sort_values().tail(1).index.values[0] +# +# # find rare labels +# temp = X_train.groupby([variable])[variable].count()/np.float(len(X_train)) +# rare_cat = [x for x in temp.loc[temp<0.05].index.values] +# +# # create new variables, with Rare labels imputed +# +# # by the most frequent category +# X_train[variable+'_freq_imp'] = np.where(X_train[variable].isin(rare_cat), frequent_cat, X_train[variable]) +# X_test[variable+'_freq_imp'] = np.where(X_test[variable].isin(rare_cat), frequent_cat, X_test[variable]) +# +# # by adding a new label 'Rare' +# X_train[variable+'_rare_imp'] = np.where(X_train[variable].isin(rare_cat), 'Rare', X_train[variable]) +# X_test[variable+'_rare_imp'] = np.where(X_test[variable].isin(rare_cat), 'Rare', X_test[variable]) +#============================================================================== + +# 2018.11.26 created by Eamon.Zhang +class ModeImputation(): + """ + Replacing the rare label by most frequent label + + Parameters + ---------- + + """ + + def __init__(self, mapping=None, cols=None, threshold=0.01): + self.cols = cols + self.mapping = mapping + self._dim = None + self.threshold = threshold + + + def fit(self, X, y=None, **kwargs): + """Fit encoder according to X and y. + Parameters + ---------- + X : array-like, shape = [n_samples, n_features] + Training vectors, where n_samples is the number of samples + and n_features is the number of features. + y : array-like, shape = [n_samples] + Target values. + Returns + ------- + self : encoder + Returns self. + """ + + self._dim = X.shape[1] + + _, categories = self.impute_with_mode( + X, + mapping=self.mapping, + cols=self.cols, + threshold=self.threshold + ) + self.mapping = categories + return self + + + def transform(self, X): + """Perform the transformation to new categorical data. + Will use the mapping (if available) and the column list to encode the + data. + Parameters + ---------- + X : array-like, shape = [n_samples, n_features] + Returns + ------- + X : Transformed values with encoding applied. + """ + + if self._dim is None: + raise ValueError('Must train encoder before it can be used to transform data.') + + # make sure that it is the right size + if X.shape[1] != self._dim: + raise ValueError('Unexpected input dimension %d, expected %d' % (X.shape[1], self._dim,)) + + X, _ = self.impute_with_mode( + X, + mapping=self.mapping, + cols=self.cols, + threshold=self.threshold + ) + + return X + + + def impute_with_mode(self, X_in, threshold, mapping=None, cols=None): + """ + Grouping the observations that show rare labels into a unique category ('rare') + + """ + + X = X_in.copy(deep=True) + +# if cols is None: +# cols = X.columns.values + + if mapping is not None: # transform + mapping_out = mapping + for i in mapping: + column = i.get('col') # get the column name + X[column] = X[column].map(i['mapping']) + +# try: +# X[column] = X[column].astype(int) +# except ValueError as e: +# X[column] = X[column].astype(float) + else: # fit + mapping_out = [] + for col in cols: +# if util.is_category(X[col].dtype): +# categories = X[col].cat.categories +# else: + temp_df = pd.Series(X[col].value_counts()/len(X)) + median = X[col].mode()[0] + mapping = { k: (median if k not in temp_df[temp_df >= threshold].index else k) + for k in temp_df.index} + + mapping = pd.Series(mapping) + mapping_out.append({'col': col, 'mapping': mapping, 'data_type': X[col].dtype}, ) + + return X, mapping_out diff --git a/feature_engineering/discretization.py b/feature_engineering/discretization.py new file mode 100644 index 0000000..fc04561 --- /dev/null +++ b/feature_engineering/discretization.py @@ -0,0 +1,329 @@ +import pandas as pd +from sklearn.tree import DecisionTreeClassifier +from sklearn.model_selection import cross_val_score +import numpy as np + +# from warnings import warn + +# 2018.11.17 Created by Eamon.Zhang +# ChiMerge method modeified from https://github.com/tatsumiw/ChiMerge/blob/master/ChiMerge.py +# TODO: add more constraits to the discretized result. +class ChiMerge(): + """ + supervised discretization using the ChiMerge method. + + + Parameters + ---------- + confidenceVal: number + default=3.841, correspond to p=0.05 dof=1 + num_of_bins: int + number of bins after discretize + col: str + the column to be performed + + """ + + def __init__(self, col=None, bins=None, confidenceVal=3.841, num_of_bins=10): + self.col = col + self._dim = None + self.confidenceVal = confidenceVal + self.bins = bins + self.num_of_bins = num_of_bins + + + def fit(self, X, y, **kwargs): + """Fit encoder according to X and y. + Parameters + ---------- + X : array-like, shape = [n_samples, n_features] + Training vectors, where n_samples is the number of samples + and n_features is the number of features. + y : array-like, shape = [n_samples] + Target values. + Returns + ------- + self : encoder + Returns self. + """ + + self._dim = X.shape[1] + + _, bins = self.chimerge( + X_in=X, + y=y, + confidenceVal=self.confidenceVal, + col=self.col, + num_of_bins=self.num_of_bins + ) + self.bins = bins + return self + + + def transform(self, X): + """Perform the transformation to new data. + Will use the tree model and the column list to discretize the + column. + Parameters + ---------- + X : array-like, shape = [n_samples, n_features] + Returns + ------- + X : new dataframe with discretized new column. + """ + + if self._dim is None: + raise ValueError('Must train encoder before it can be used to transform data.') + + # make sure that it is the right size + if X.shape[1] != self._dim: + raise ValueError('Unexpected input dimension %d, expected %d' % (X.shape[1], self._dim,)) + + X, _ = self.chimerge( + X_in=X, + col=self.col, + bins=self.bins + ) + + return X + + def chimerge(self, X_in, y=None, confidenceVal=None, num_of_bins=None, col=None, bins=None): + """ + discretize a variable using ChiMerge + + """ + + X = X_in.copy(deep=True) + + if bins is not None: # transform + try: + X[col+'_chimerge'] = pd.cut(X[col],bins=bins,include_lowest=True) + except Exception as e: + print(e) + + else: # fit + try: + # create an array which save the num of 0/1 samples of the column to be chimerge + total_num = X.groupby([col])[y].count() + total_num = pd.DataFrame({'total_num': total_num}) + positive_class = X.groupby([col])[y].sum() + positive_class = pd.DataFrame({'positive_class': positive_class}) + regroup = pd.merge(total_num, positive_class, left_index=True, right_index=True,how='inner') + regroup.reset_index(inplace=True) + regroup['negative_class'] = regroup['total_num'] - regroup['positive_class'] + regroup = regroup.drop('total_num', axis=1) + np_regroup = np.array(regroup) + # merge interval that have 0 pos/neg samples + i = 0 + while (i <= np_regroup.shape[0] - 2): + if ((np_regroup[i, 1] == 0 and np_regroup[i + 1, 1] == 0) or ( np_regroup[i, 2] == 0 and np_regroup[i + 1, 2] == 0)): + np_regroup[i, 1] = np_regroup[i, 1] + np_regroup[i + 1, 1] # pos + np_regroup[i, 2] = np_regroup[i, 2] + np_regroup[i + 1, 2] # neg + np_regroup[i, 0] = np_regroup[i + 1, 0] + np_regroup = np.delete(np_regroup, i + 1, 0) + i = i - 1 + i = i + 1 + # calculate chi for neighboring intervals + # ∑[(yA-yB)²/yB] + chi_table = np.array([]) + for i in np.arange(np_regroup.shape[0] - 1): + chi = (np_regroup[i, 1] * np_regroup[i + 1, 2] - np_regroup[i, 2] * np_regroup[i + 1, 1]) ** 2 \ + * (np_regroup[i, 1] + np_regroup[i, 2] + np_regroup[i + 1, 1] + np_regroup[i + 1, 2]) / \ + ((np_regroup[i, 1] + np_regroup[i, 2]) * (np_regroup[i + 1, 1] + np_regroup[i + 1, 2]) * ( + np_regroup[i, 1] + np_regroup[i + 1, 1]) * (np_regroup[i, 2] + np_regroup[i + 1, 2])) + chi_table = np.append(chi_table, chi) + # merge intervals that have closing chi + while (1): + if (len(chi_table) <= (num_of_bins - 1) and min(chi_table) >= confidenceVal): + break + chi_min_index = np.argwhere(chi_table == min(chi_table))[0] + np_regroup[chi_min_index, 1] = np_regroup[chi_min_index, 1] + np_regroup[chi_min_index + 1, 1] + np_regroup[chi_min_index, 2] = np_regroup[chi_min_index, 2] + np_regroup[chi_min_index + 1, 2] + np_regroup[chi_min_index, 0] = np_regroup[chi_min_index + 1, 0] + np_regroup = np.delete(np_regroup, chi_min_index + 1, 0) + + if (chi_min_index == np_regroup.shape[0] - 1): + chi_table[chi_min_index - 1] = (np_regroup[chi_min_index - 1, 1] * np_regroup[chi_min_index, 2] - np_regroup[chi_min_index - 1, 2] * np_regroup[chi_min_index, 1]) ** 2 \ + * (np_regroup[chi_min_index - 1, 1] + np_regroup[chi_min_index - 1, 2] + np_regroup[chi_min_index, 1] + np_regroup[chi_min_index, 2]) / \ + ((np_regroup[chi_min_index - 1, 1] + np_regroup[chi_min_index - 1, 2]) * (np_regroup[chi_min_index, 1] + np_regroup[chi_min_index, 2]) * (np_regroup[chi_min_index - 1, 1] + np_regroup[chi_min_index, 1]) * (np_regroup[chi_min_index - 1, 2] + np_regroup[chi_min_index, 2])) + chi_table = np.delete(chi_table, chi_min_index, axis=0) + + else: + chi_table[chi_min_index - 1] = (np_regroup[chi_min_index - 1, 1] * np_regroup[chi_min_index, 2] - np_regroup[chi_min_index - 1, 2] * np_regroup[chi_min_index, 1]) ** 2 \ + * (np_regroup[chi_min_index - 1, 1] + np_regroup[chi_min_index - 1, 2] + np_regroup[chi_min_index, 1] + np_regroup[chi_min_index, 2]) / \ + ((np_regroup[chi_min_index - 1, 1] + np_regroup[chi_min_index - 1, 2]) * (np_regroup[chi_min_index, 1] + np_regroup[chi_min_index, 2]) * (np_regroup[chi_min_index - 1, 1] + np_regroup[chi_min_index, 1]) * (np_regroup[chi_min_index - 1, 2] + np_regroup[chi_min_index, 2])) + chi_table[chi_min_index] = (np_regroup[chi_min_index, 1] * np_regroup[chi_min_index + 1, 2] - np_regroup[chi_min_index, 2] * np_regroup[chi_min_index + 1, 1]) ** 2 \ + * (np_regroup[chi_min_index, 1] + np_regroup[chi_min_index, 2] + np_regroup[chi_min_index + 1, 1] + np_regroup[chi_min_index + 1, 2]) / \ + ((np_regroup[chi_min_index, 1] + np_regroup[chi_min_index, 2]) * (np_regroup[chi_min_index + 1, 1] + np_regroup[chi_min_index + 1, 2]) * (np_regroup[chi_min_index, 1] + np_regroup[chi_min_index + 1, 1]) * (np_regroup[chi_min_index, 2] + np_regroup[chi_min_index + 1, 2])) + chi_table = np.delete(chi_table, chi_min_index + 1, axis=0) + result_data = pd.DataFrame() + result_data['variable'] = [col] * np_regroup.shape[0] + bins = [] + tmp = [] + for i in np.arange(np_regroup.shape[0]): + if i == 0: + y = '-inf' + ',' + str(np_regroup[i, 0]) + #x = np_regroup[i, 0] + #list_temp.append(x) + elif i == np_regroup.shape[0] - 1: + y = str(np_regroup[i - 1, 0]) + '+' + #x = 100000000. + #list_temp.append(x) + else: + y = str(np_regroup[i - 1, 0]) + ',' + str(np_regroup[i, 0]) + #x = np_regroup[i, 0] + #list_temp.append(x) + bins.append(np_regroup[i - 1, 0]) + tmp.append(y) + + #list_temp.append(df[variable].max()+0.1) + bins.append(X[col].min()-0.1) + + result_data['interval'] = tmp + result_data['flag_0'] = np_regroup[:, 2] + result_data['flag_1'] = np_regroup[:, 1] + bins.sort(reverse=False) + print('Interval for variable %s' % col) + print(result_data) + + except Exception as e: + print(e) + + return X, bins + + + + +# 2018.11.15 Created by Eamon.Zhang +class DiscretizeByDecisionTree(): + """ + Discretisation with Decision Trees consists of using a decision tree + to identify the optimal splitting points that would determine the bins + or contiguous intervals: + + 1.train a decision tree of limited depth (2, 3 or 4) using the variable + we want to discretise to predict the target. + 2.the original variable values are then replaced by the + probability returned by the tree. + + Parameters + ---------- + col: str + column to discretise + max_depth: int or list of int + max depth of the tree. Can be an int or a list of int we want the tree model to search + for the optimal depth. + + """ + + def __init__(self, col=None, max_depth=None, tree_model=None): + self.col = col + self._dim = None + self.max_depth = max_depth + self.tree_model = tree_model + + + def fit(self, X, y, **kwargs): + """Fit encoder according to X and y. + Parameters + ---------- + X : array-like, shape = [n_samples, n_features] + Training vectors, where n_samples is the number of samples + and n_features is the number of features. + y : array-like, shape = [n_samples] + Target values. + Returns + ------- + self : encoder + Returns self. + """ + + self._dim = X.shape[1] + + _, tree = self.discretize( + X_in=X, + y=y, + max_depth=self.max_depth, + col=self.col, + tree_model=self.tree_model + ) + self.tree_model = tree + return self + + def transform(self, X): + """Perform the transformation to new categorical data. + Will use the tree model and the column list to discretize the + column. + Parameters + ---------- + X : array-like, shape = [n_samples, n_features] + Returns + ------- + X : new dataframe with discretized new column. + """ + + if self._dim is None: + raise ValueError('Must train encoder before it can be used to transform data.') + + # make sure that it is the right size + if X.shape[1] != self._dim: + raise ValueError('Unexpected input dimension %d, expected %d' % (X.shape[1], self._dim,)) + + X, _ = self.discretize( + X_in=X, + col=self.col, + tree_model=self.tree_model + ) + + return X + + + def discretize(self, X_in, y=None, max_depth=None, tree_model=None, col=None): + """ + discretize a variable using DecisionTreeClassifier + + """ + + X = X_in.copy(deep=True) + + if tree_model is not None: # transform + X[col+'_tree_discret'] = tree_model.predict_proba(X[col].to_frame())[:,1] + + else: # fit + if isinstance(max_depth,int): + tree_model = DecisionTreeClassifier(max_depth=max_depth) + tree_model.fit(X[col].to_frame(), y) + # X[col+'_tree_discret'] = tree_model.predict_proba(X[col].to_frame())[:,1] + #print(x.tree_discret.unique()) +# bins = pd.concat( [X.groupby([col+'_tree_discret'])[col].min(), +# X.groupby([col+'_tree_discret'])[col].max()], axis=1) +# print('bins:') +# print(bins) + + elif len(max_depth)>1: + score_ls = [] # here I will store the roc auc + score_std_ls = [] # here I will store the standard deviation of the roc_auc + for tree_depth in max_depth: + tree_model = DecisionTreeClassifier(max_depth=tree_depth) + scores = cross_val_score(tree_model, X[col].to_frame(), y, cv=3, scoring='roc_auc') + score_ls.append(np.mean(scores)) + score_std_ls.append(np.std(scores)) + temp = pd.concat([pd.Series(max_depth), pd.Series(score_ls), pd.Series(score_std_ls)], axis=1) + temp.columns = ['depth', 'roc_auc_mean', 'roc_auc_std'] + print('result ROC-AUC for each depth') + print(temp) + max_roc = temp.roc_auc_mean.max() + optimal_depth=temp[temp.roc_auc_mean==max_roc]['depth'].values + print('optimal_depth:',optimal_depth) + tree_model = DecisionTreeClassifier(max_depth=optimal_depth) + tree_model.fit(X[col].to_frame(), y) +# bins = pd.concat( [X.groupby([col+'_tree_discret'])[col].min(), +# X.groupby([col+'_tree_discret'])[col].max()], axis=1) +# print('bins:') +# print(bins) + else: + raise ValueError('max_depth of a tree must be an integer or a list') + + return X, tree_model + + diff --git a/feature_engineering/encoding.py b/feature_engineering/encoding.py new file mode 100644 index 0000000..c524076 --- /dev/null +++ b/feature_engineering/encoding.py @@ -0,0 +1,109 @@ +import pandas as pd + +# 2018.11.28 Created by Eamon.Zhang + +class MeanEncoding(): + """ + replacing the label by the mean of the target for that label. + + Parameters + ---------- + + """ + + def __init__(self, mapping=None, cols=None): + self.cols = cols + self.mapping = mapping + self._dim = None + # self.threshold = threshold + + + def fit(self, X, y=None, **kwargs): + """Fit encoder according to X and y. + Parameters + ---------- + X : array-like, shape = [n_samples, n_features] + Training vectors, where n_samples is the number of samples + and n_features is the number of features. + y : array-like, shape = [n_samples] + Target values. + Returns + ------- + self : encoder + Returns self. + """ + + self._dim = X.shape[1] + + _, categories = self.mean_encoding( + X, + y, + mapping=self.mapping, + cols=self.cols + # threshold=self.threshold + ) + self.mapping = categories + return self + + + def transform(self, X): + """Perform the transformation to new categorical data. + Will use the mapping (if available) and the column list to encode the + data. + Parameters + ---------- + X : array-like, shape = [n_samples, n_features] + Returns + ------- + X : Transformed values with encoding applied. + """ + + if self._dim is None: + raise ValueError('Must train encoder before it can be used to transform data.') + + # make sure that it is the right size + if X.shape[1] != self._dim: + raise ValueError('Unexpected input dimension %d, expected %d' % (X.shape[1], self._dim,)) + + X, _ = self.mean_encoding( + X, + mapping=self.mapping, + cols=self.cols + # threshold=self.threshold + ) + + return X + + + def mean_encoding(self, X_in, y=None, mapping=None, cols=None): + """ + Grouping the observations that show rare labels into a unique category ('rare') + + """ + + X = X_in.copy(deep=True) + +# if cols is None: +# cols = X.columns.values + + if mapping is not None: # transform + mapping_out = mapping + for i in mapping: + column = i.get('col') # get the column name + X[column] = X[column].map(i['mapping']) + +# try: +# X[column] = X[column].astype(int) +# except ValueError as e: +# X[column] = X[column].astype(float) + else: # fit + mapping_out = [] + for col in cols: +# if util.is_category(X[col].dtype): +# categories = X[col].cat.categories +# else: + mapping = X[y.name].groupby(X[col]).mean().to_dict() + mapping = pd.Series(mapping) + mapping_out.append({'col': col, 'mapping': mapping, 'data_type': X[col].dtype}, ) + + return X, mapping_out \ No newline at end of file diff --git a/feature_engineering/transformation.py b/feature_engineering/transformation.py new file mode 100644 index 0000000..f8aed9c --- /dev/null +++ b/feature_engineering/transformation.py @@ -0,0 +1,73 @@ +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import scipy.stats as stats +import pylab +# from warnings import warn + +# 2018.11.26 Created by Eamon.Zhang +def diagnostic_plots(df, variable): + # function to plot a histogram and a Q-Q plot + # side by side, for a certain variable + + plt.figure(figsize=(15,6)) + plt.subplot(1, 2, 1) + df[variable].hist() + + plt.subplot(1, 2, 2) + stats.probplot(df[variable], dist="norm", plot=pylab) + + plt.show() + + +def log_transform(data,cols=[]): + """ + Logarithmic transformation + """ + + data_copy = data.copy(deep=True) + for i in cols: + data_copy[i+'_log'] = np.log(data_copy[i]+1) + print('Variable ' + i +' Q-Q plot') + diagnostic_plots(data_copy,str(i+'_log')) + return data_copy + + +def reciprocal_transform(data,cols=[]): + """ + Reciprocal transformation + """ + + data_copy = data.copy(deep=True) + for i in cols: + data_copy[i+'_reciprocal'] = 1/(data_copy[i]) + print('Variable ' + i +' Q-Q plot') + diagnostic_plots(data_copy,str(i+'_reciprocal')) + return data_copy + + +def square_root_transform(data,cols=[]): + """ + square root transformation + """ + + data_copy = data.copy(deep=True) + for i in cols: + data_copy[i+'_square_root'] = (data_copy[i])**(0.5) + print('Variable ' + i +' Q-Q plot') + diagnostic_plots(data_copy,str(i+'_square_root')) + return data_copy + + +def exp_transform(data,coef,cols=[]): + """ + exp transformation + """ + + data_copy = data.copy(deep=True) + for i in cols: + data_copy[i+'_exp'] = (data_copy[i])**coef + print('Variable ' + i +' Q-Q plot') + diagnostic_plots(data_copy,str(i+'_exp')) + return data_copy + diff --git a/feature_selection/embedded_method.py b/feature_selection/embedded_method.py new file mode 100644 index 0000000..3e4c803 --- /dev/null +++ b/feature_selection/embedded_method.py @@ -0,0 +1,76 @@ +#import pandas as pd +import numpy as np + +import matplotlib.pyplot as plt +#import seaborn as sns +#from sklearn.model_selection import train_test_split + +from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier #RandomForestRegressor +#from sklearn.feature_selection import SelectFromModel + +# 2018.11.27 Created by Eamon.Zhang + +def rf_importance(X_train,y_train,max_depth=10,class_weight=None,top_n=15,n_estimators=50,random_state=0): + + model = RandomForestClassifier(n_estimators=n_estimators,max_depth=max_depth, + random_state=random_state,class_weight=class_weight, + n_jobs=-1) + model.fit(X_train, y_train) + importances = model.feature_importances_ + indices = np.argsort(importances)[::-1] + feat_labels = X_train.columns + std = np.std([tree.feature_importances_ for tree in model.estimators_], + axis=0) # inter-trees variability. + print("Feature ranking:") +# l1,l2,l3,l4 = [],[],[],[] + for f in range(X_train.shape[1]): + print("%d. feature no:%d feature name:%s (%f)" % (f + 1, indices[f], feat_labels[indices[f]], importances[indices[f]])) +# l1.append(f+1) +# l2.append(indices[f]) +# l3.append(feat_labels[indices[f]]) +# l4.append(importances[indices[f]]) + #feature_rank = pd.Dataframe(zip(l1,l2,l3,l4),columns=['id','indice','feature','importances']) + + # plotting + indices = indices[0:top_n] + plt.figure() + plt.title("Feature importances top %d" % top_n) + plt.bar(range(top_n), importances[indices], + color="r", yerr=std[indices], align="center") + plt.xticks(range(top_n), indices) + plt.xlim([-1,top_n]) + plt.show() + + return model + + +def gbt_importance(X_train,y_train,max_depth=10,top_n=15,n_estimators=50,random_state=0): + + model = GradientBoostingClassifier(n_estimators=n_estimators,max_depth=max_depth, + random_state=random_state) + model.fit(X_train, y_train) + importances = model.feature_importances_ + indices = np.argsort(importances)[::-1] + feat_labels = X_train.columns + std = np.std([tree[0].feature_importances_ for tree in model.estimators_], + axis=0) # inter-trees variability. + print("Feature ranking:") +# l1,l2,l3,l4 = [],[],[],[] + for f in range(X_train.shape[1]): + print("%d. feature no:%d feature name:%s (%f)" % (f + 1, indices[f], feat_labels[indices[f]], importances[indices[f]])) +# l1.append(f+1) +# l2.append(indices[f]) +# l3.append(feat_labels[indices[f]]) +# l4.append(importances[indices[f]]) +# feature_rank = pd.Dataframe(zip(l1,l2,l3,l4),columns=['id','indice','feature','importances']) + # plotting + indices = indices[0:top_n] + plt.figure() + plt.title("Feature importances top %d" % top_n) + plt.bar(range(top_n), importances[indices], + color="r", yerr=std[indices], align="center") + plt.xticks(range(top_n), indices) + plt.xlim([-1,top_n]) + plt.show() + + return model \ No newline at end of file diff --git a/feature_selection/feature_shuffle.py b/feature_selection/feature_shuffle.py new file mode 100644 index 0000000..c39e103 --- /dev/null +++ b/feature_selection/feature_shuffle.py @@ -0,0 +1,43 @@ +import pandas as pd +#import numpy as np + + +from sklearn.ensemble import RandomForestClassifier #, RandomForestRegressor +from sklearn.metrics import roc_auc_score #, mean_squared_error + +# 2018.11.28 Created by Eamon.Zhang + + +def feature_shuffle_rf(X_train,y_train,max_depth=None,class_weight=None,top_n=15,n_estimators=50,random_state=0): + + model = RandomForestClassifier(n_estimators=n_estimators,max_depth=max_depth, + random_state=random_state,class_weight=class_weight, + n_jobs=-1) + model.fit(X_train, y_train) + train_auc = roc_auc_score(y_train, (model.predict_proba(X_train))[:, 1]) + feature_dict = {} + + # selection logic + for feature in X_train.columns: + X_train_c = X_train.copy().reset_index(drop=True) + y_train_c = y_train.copy().reset_index(drop=True) + + # shuffle individual feature + X_train_c[feature] = X_train_c[feature].sample(frac=1,random_state=random_state).reset_index( + drop=True) + #print(X_train_c.isnull().sum()) + # make prediction with shuffled feature and calculate roc-auc + shuff_auc = roc_auc_score(y_train_c, + (model.predict_proba(X_train_c))[:, 1]) + #print(shuff_auc) + # save the drop in roc-auc + feature_dict[feature] = (train_auc - shuff_auc) + #print(feature_dict) + + auc_drop = pd.Series(feature_dict).reset_index() + auc_drop.columns = ['feature', 'auc_drop'] + auc_drop.sort_values(by=['auc_drop'], ascending=False, inplace=True) + selected_features = auc_drop[auc_drop.auc_drop>0]['feature'] + + return auc_drop, selected_features + diff --git a/feature_selection/filter_method.py b/feature_selection/filter_method.py new file mode 100644 index 0000000..473176d --- /dev/null +++ b/feature_selection/filter_method.py @@ -0,0 +1,156 @@ +import pandas as pd +import numpy as np +#from sklearn.feature_selection import VarianceThreshold +from sklearn.feature_selection import mutual_info_classif,chi2 +from sklearn.feature_selection import SelectKBest, SelectPercentile +from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor +from sklearn.metrics import roc_auc_score, mean_squared_error + +# 2018.11.17 Created by Eamon.Zhang + +def constant_feature_detect(data,threshold=0.98): + """ detect features that show the same value for the + majority/all of the observations (constant/quasi-constant features) + + Parameters + ---------- + data : pd.Dataframe + threshold : threshold to identify the variable as constant + + Returns + ------- + list of variables names + """ + + data_copy = data.copy(deep=True) + quasi_constant_feature = [] + for feature in data_copy.columns: + predominant = (data_copy[feature].value_counts() / np.float( + len(data_copy))).sort_values(ascending=False).values[0] + if predominant >= threshold: + quasi_constant_feature.append(feature) + print(len(quasi_constant_feature),' variables are found to be almost constant') + return quasi_constant_feature + + +def corr_feature_detect(data,threshold=0.8): + """ detect highly-correlated features of a Dataframe + Parameters + ---------- + data : pd.Dataframe + threshold : threshold to identify the variable correlated + + Returns + ------- + pairs of correlated variables + """ + + corrmat = data.corr() + corrmat = corrmat.abs().unstack() # absolute value of corr coef + corrmat = corrmat.sort_values(ascending=False) + corrmat = corrmat[corrmat >= threshold] + corrmat = corrmat[corrmat < 1] # remove the digonal + corrmat = pd.DataFrame(corrmat).reset_index() + corrmat.columns = ['feature1', 'feature2', 'corr'] + + grouped_feature_ls = [] + correlated_groups = [] + + for feature in corrmat.feature1.unique(): + if feature not in grouped_feature_ls: + + # find all features correlated to a single feature + correlated_block = corrmat[corrmat.feature1 == feature] + grouped_feature_ls = grouped_feature_ls + list( + correlated_block.feature2.unique()) + [feature] + + # append the block of features to the list + correlated_groups.append(correlated_block) + return correlated_groups + + +def mutual_info(X,y,select_k=10): + +# mi = mutual_info_classif(X,y) +# mi = pd.Series(mi) +# mi.index = X.columns +# mi.sort_values(ascending=False) + + if select_k >= 1: + sel_ = SelectKBest(mutual_info_classif, k=select_k).fit(X,y) + col = X.columns[sel_.get_support()] + + elif 0 < select_k < 1: + sel_ = SelectPercentile(mutual_info_classif, percentile=select_k*100).fit(X,y) + col = X.columns[sel_.get_support()] + + else: + raise ValueError("select_k must be a positive number") + + return col + + +# 2018.11.27 edit Chi-square test +def chi_square_test(X,y,select_k=10): + + """ + Compute chi-squared stats between each non-negative feature and class. + This score should be used to evaluate categorical variables in a classification task + """ + if select_k >= 1: + sel_ = SelectKBest(chi2, k=select_k).fit(X,y) + col = X.columns[sel_.get_support()] + elif 0 < select_k < 1: + sel_ = SelectPercentile(chi2, percentile=select_k*100).fit(X,y) + col = X.columns[sel_.get_support()] + else: + raise ValueError("select_k must be a positive number") + + return col + + +def univariate_roc_auc(X_train,y_train,X_test,y_test,threshold): + + """ + First, it builds one decision tree per feature, to predict the target + Second, it makes predictions using the decision tree and the mentioned feature + Third, it ranks the features according to the machine learning metric (roc-auc or mse) + It selects the highest ranked features + + """ + roc_values = [] + for feature in X_train.columns: + clf = DecisionTreeClassifier() + clf.fit(X_train[feature].to_frame(), y_train) + y_scored = clf.predict_proba(X_test[feature].to_frame()) + roc_values.append(roc_auc_score(y_test, y_scored[:, 1])) + roc_values = pd.Series(roc_values) + roc_values.index = X_train.columns + print(roc_values.sort_values(ascending=False)) + print(len(roc_values[roc_values > threshold]),'out of the %s featues are kept'% len(X_train.columns)) + keep_col = roc_values[roc_values > threshold] + return keep_col + + +def univariate_mse(X_train,y_train,X_test,y_test,threshold): + + """ + First, it builds one decision tree per feature, to predict the target + Second, it makes predictions using the decision tree and the mentioned feature + Third, it ranks the features according to the machine learning metric (roc-auc or mse) + It selects the highest ranked features + + """ + mse_values = [] + for feature in X_train.columns: + clf = DecisionTreeRegressor() + clf.fit(X_train[feature].to_frame(), y_train) + y_scored = clf.predict(X_test[feature].to_frame()) + mse_values.append(mean_squared_error(y_test, y_scored)) + mse_values = pd.Series(mse_values) + mse_values.index = X_train.columns + print(mse_values.sort_values(ascending=False)) + print(len(mse_values[mse_values > threshold]),'out of the %s featues are kept'% len(X_train.columns)) + keep_col = mse_values[mse_values > threshold] + return keep_col + \ No newline at end of file diff --git a/feature_selection/hybrid.py b/feature_selection/hybrid.py new file mode 100644 index 0000000..4ff73b7 --- /dev/null +++ b/feature_selection/hybrid.py @@ -0,0 +1,128 @@ +#import pandas as pd +#import numpy as np + +from sklearn.ensemble import RandomForestClassifier #, RandomForestRegressor +from sklearn.metrics import roc_auc_score #, mean_squared_error + +# 2018.12.02 Created by Eamon.Zhang + + +def recursive_feature_elimination_rf(X_train,y_train,X_test,y_test, + tol=0.001,max_depth=None, + class_weight=None, + top_n=15,n_estimators=50,random_state=0): + + + features_to_remove = [] + count = 1 + # initial model using all the features + model_all_features = RandomForestClassifier(n_estimators=n_estimators,max_depth=max_depth, + random_state=random_state,class_weight=class_weight, + n_jobs=-1) + model_all_features.fit(X_train, y_train) + y_pred_test = model_all_features.predict_proba(X_test)[:, 1] + auc_score_all = roc_auc_score(y_test, y_pred_test) + + for feature in X_train.columns: + print() + print('testing feature: ', feature, ' which is feature ', count, + ' out of ', len(X_train.columns)) + count += 1 + model = RandomForestClassifier(n_estimators=n_estimators,max_depth=max_depth, + random_state=random_state,class_weight=class_weight, + n_jobs=-1) + + # fit model with all variables minus the removed features + # and the feature to be evaluated + model.fit(X_train.drop(features_to_remove + [feature], axis=1), y_train) + y_pred_test = model.predict_proba( + X_test.drop(features_to_remove + [feature], axis=1))[:, 1] + auc_score_int = roc_auc_score(y_test, y_pred_test) + print('New Test ROC AUC={}'.format((auc_score_int))) + + # print the original roc-auc with all the features + print('All features Test ROC AUC={}'.format((auc_score_all))) + + # determine the drop in the roc-auc + diff_auc = auc_score_all - auc_score_int + + # compare the drop in roc-auc with the tolerance + if diff_auc >= tol: + print('Drop in ROC AUC={}'.format(diff_auc)) + print('keep: ', feature) + + else: + print('Drop in ROC AUC={}'.format(diff_auc)) + print('remove: ', feature) + + # if the drop in the roc is small and we remove the + # feature, we need to set the new roc to the one based on + # the remaining features + auc_score_all = auc_score_int + + # and append the feature to remove to the list + features_to_remove.append(feature) + print('DONE!!') + print('total features to remove: ', len(features_to_remove)) + features_to_keep = [x for x in X_train.columns if x not in features_to_remove] + print('total features to keep: ', len(features_to_keep)) + + return features_to_keep + + +def recursive_feature_addition_rf(X_train,y_train,X_test,y_test, + tol=0.001,max_depth=None, + class_weight=None, + top_n=15,n_estimators=50,random_state=0): + + + features_to_keep = [X_train.columns[0]] + count = 1 + # initial model using only one feature + model_one_feature = RandomForestClassifier(n_estimators=n_estimators,max_depth=max_depth, + random_state=random_state,class_weight=class_weight, + n_jobs=-1) + model_one_feature.fit(X_train[[X_train.columns[0]]], y_train) + y_pred_test = model_one_feature.predict_proba(X_test[[X_train.columns[0]]])[:, 1] + auc_score_all = roc_auc_score(y_test, y_pred_test) + + for feature in X_train.columns[1:]: + print() + print('testing feature: ', feature, ' which is feature ', count, + ' out of ', len(X_train.columns)) + count += 1 + model = RandomForestClassifier(n_estimators=n_estimators,max_depth=max_depth, + random_state=random_state,class_weight=class_weight, + n_jobs=-1) + + # fit model with the selected features + # and the feature to be evaluated + model.fit(X_train[features_to_keep + [feature]], y_train) + y_pred_test = model.predict_proba( + X_test[features_to_keep + [feature]])[:, 1] + auc_score_int = roc_auc_score(y_test, y_pred_test) + print('New Test ROC AUC={}'.format((auc_score_int))) + + # print the original roc-auc with all the features + print('All features Test ROC AUC={}'.format((auc_score_all))) + + # determine the drop in the roc-auc + diff_auc = auc_score_int - auc_score_all + + # compare the drop in roc-auc with the tolerance + if diff_auc >= tol: + # if the increase in the roc is bigger than the threshold + # we keep the feature and re-adjust the roc-auc to the new value + # considering the added feature + print('Increase in ROC AUC={}'.format(diff_auc)) + print('keep: ', feature) + auc_score_all = auc_score_int + features_to_keep.append(feature) + else: + print('Increase in ROC AUC={}'.format(diff_auc)) + print('remove: ', feature) + + print('DONE!!') + print('total features to keep: ', len(features_to_keep)) + + return features_to_keep \ No newline at end of file diff --git a/images/001.png b/images/001.png new file mode 100644 index 0000000000000000000000000000000000000000..614162fa3a283151eb381b9c95535e7ed98a1ba5 GIT binary patch literal 114276 zcmXtf1yCDI*KTl!prvRiE=39ycXxM(Qrz9GK!5_p-HUsRyF0<%-Q9}cyx*OFCNoJk z$>yB1yT_hqBa{`TFi?q50RRAojI_8a0027)0Ki-z!$L={uL78%PjD`xGU~|4$SYe) zn*aa^AR{iK?wNU-<&jAumGsZZO=)$BB#Bxt{`2UP^8k;DnXmEn)y{d~&LycM5)#r& z*S@q=7`daPBcd;S0{U0M11egb|F#rG8_5d@54aE}&I4AMqE zF~u=EwHy@(_OZdxlfa9Np@U0~+E^k4a4UX`e)>7OeCH`{`je>?UgVctC zrxB_w(J=`ktqD_9i((9ZFbE*M1wu9r>&hQ_rU7ZdXR#aq`uwMZ>YE%%9J$>RaxnMP ze^U3M=UVx)M*CUG%n^bB!C|bKW@|gjsywOydXX{j|E9>-{k8Kg=%H9g1cpyC5r&Qd z-F#6z+vSThu&?5O>XyM`%cZaL!3^^sl5q2q!>2L{E8)0MVM%&5B8iMy|0l~fP()ngpk0OpB5JH&;`9?vez(Sk1PxVp5IH#2?SJ}E1P$?!PnZOt zqEdH7mXL&fnH0)nEK}r#PNDd}DU^kO_(nV^Zi)wWtINW}4JBy@L>69iNF;;4(sBU0oY7yP{|uFa_q*zrGG~Vc z=w^05Z@reJ*wHnZ+ljuk%^^72Jgrt06=`>$i>OtS&1Zow5S=D!k}oJhBI`N}7y5q# zc$gY99$3F~7Wvx>t8W+g5juHMq@cwEQ;KUDcawETD~9HuX1|3UjN3c zRng%W42r=A%At}=Z&|J*uR1EqS2r}rLH@pROc1zH@zIHl5tU^X_VCzsJXXpLPk zO>4+i7C6W^{R8#f$4GXX^W`3yWn zmsLhr)^oDapsP_0q#s*z#t{1?nCP@zCMKs_Hd$Mt1an*CX{-x%htt4JvFUt~(*tT1 z=FklD-_m%Q=_~aO4~YP21;Z;GH~)P*+Jn@RhFHs)*{B&*IspNvC2TtJE5s*AZg0~; ziIA&l{7R>39^~yNc(<5dD}PV~PiW9+wDTd|khkihdI)W(Clym11Ulc>@I%$Kv2x;j z>PAewjN|llT$Bf&9)EnIT5 ziz^e!cF093>8=Xf1fFaKS7>RQqCa%~w|MYE3rb2dFy(E}$EAAjKD)Wa_hni+0>JaW z-0%S8QD-T$5URP3HV5a2uHTX$5mB~1#Z(@ZBe9C63O?lCHDyfY?=uQ3%U0aXi_rW? z2+nKxDKB~f&%*E&_o@IdLSluvTp0hkg!qBhXgwi_={ZQC7(KQ(ojB>hc>ej26mZk z@00ed$vZNK_+7sp6BYY_rG!i{Hyclrh2B&h>1!#*TAE`;M`fO3a)CjG2`4t?AtsS0K`oEApEhb&n*xlR7NX3}VIahs z=~vHgFuhY5jX|OF^>Yz&*O-G(FF&)dY20OI^8QvuoxR5&p|pZ#M|h{x0xMsR-e}@hqXQ(h(f>I>%TbuC7>dwtLeJG=@_?QL<&tYFC?1@LMuO2Jy zrj$!Ed%7wdzQ3FKZBGro%+F_2`FNi!PKsx%#ft=Uhizrj-gqC>WYeSGs4|_hg``f6 zE^>7Wqt=x$iIDuo!&}eji<9{-v_KL^$t4J|bXa5ve=sBAxIbNk z24Gb$Zq@;I1VyxAsPMzH-5HrXlj0`hkf|y*KSdi#N2WwP0041ISvpxhsqoKsuCsv# zCki3p$G1`%!@tcI=rGkntp&|rHSenbi%eT2gMZp=^tDFr-xPDXVgKZUl>wLi?x35! z6;=jo5=2$j+1$YbCQ*|;c&8q=JF_fCdcBr-KA#y1o=g&QY285$18W<58wdNuzzB9V zlIqW?Qm!#(!@EQOEICdI)l(r{q(dzB5m}u~B&fse&*jL$C5RB{@joM*okrL+N6+KU z@5{vS@sJ%kr0&9&{Ar>KF z1QFn`XY7i7+|7guG~cm?KVF45orF96sAW1Q->FwwSMCig8iE?PZx$5^ z&hqEq1if8XWc8#YeNl0ZIn*IJCJ-VVcB%ly26qp3VB^42k2gU)wJ{Tw+!P(hY&ed| z0FRWD9U{~VGh~{58GMMo%HQ{5IP)diSIi}&C?nqf*X!O2FK`TD(+GbPnilQLXt9Gd>DSgbp1e1c4lkmvoUtKoM*I7@Ge z9&TyoV6Qa+4gRVCteu;xTCfbxN2texH_=6vVj@5b6-_UK0YHPO*p{s)H(WnRqWiuY zxz_ZH*;TrynVA|t8T&dYo=PSj4>Me53j{Vp(%6Bc_oM37AbZjOB60>qPs=7DHqWG? zTmCZAgH7W+DNr;>sj83&ja}R#sl1lz@xP^^;)US+yK*zlNzRrFhA`u=3--mBBp zN^`3wl$0t^oh}fX{jB>>ok^aYp`+HYyWvlPB}(vxr`Nk{baMTYBPz-!6NC=Zhf(P| z+~WV8g@`Wba+!@yqM(odz@F=-8VIBScy+s!!-J3Ng8E475;|0 z!vbm}#$#ZNT>r9wwt24YScwh0L7+gdx0$}RBJ0<26jrFi>?Kj%m>|?1f&WWV@1LnZ znEi7II_gtGL@r3_5hCo4t zufK%Uc;JWYAcrso*z5!3QC#taWUG|_iwnIMdwWS5%IpZ?@i&|XRq&H*^cVaoS@z=@ z>C_~nr237Z5U6bF&=G-4B2R^eG3-BO_FtOBqPZLGR0{~3&0nY=TYN9ssKj>GZ zKruFD^^Wk%ip8iJIj~g(MxHM$SVE7YMJ1#y-;jDc6i&{Y57yyAcBJ;5;hp63Tu8EK zTjRY|*ze#jylwrJhlXJGMd`PPQMt>DLG#{l}yA$M$N!s~}FjAzpD3 z&7V5wJ3Mv^zp^3Cwuuc+JuikKBAq&7QUv$Dx)!Ld`4PZi$Lp+ejoe5W+LIDM7sl`VHwDSet5ju~cVa8Gb&v{pz>Az0A;kh=AU^h@Yz56dAR^WEm#b%Ip&I^sez^?xz}5$77gn1wAzIC!pcU2qkTfWlF;4ZPKDi6 zyyV+I%Gk42u2jo3kMVJb_M>Z!hUJ1?wTVjqZ{tzK;RAz|5y>u^2A;2O3z;0%bNu6S zEP{8F0$BX>e5tn9X&#SrT%Bk0Cr@7m-@}CjwBZ+9&*NJCH!iifHfHC6Aa)UTluzHI zbPs-gP3G(s7)6Zy0uXod!*gkfBsH>@it%Ac*8~<||CQ%q43*1aW46$Q|Hi7bn^my* z>lZH(ogPSpB&9~y$wY)uaU(+gDPp{!J#BGyKE{&!M+g22u*;u*7qwsA`ta1t@hUP# z{1cn`cJ=hPjaFv8j;Qv>DO&$_SHpgtmt5zI*iYvbRI}Z*DJ@;<>AUa^uI9;7~64O+T`%#HcDyZ8f(Mg_2k{)xzR!A@or_^`I%**O4n=p-tPHCk61D+ zoOnOmwb$)KWyky5ryohCiVK@zSpHYpIsR0-^VJ0oo^o?08ibtZ2M z9X&;bmX)%l1^+9c{nC|-veVS zv)F8U7_)WG4-)u2DLt!LE<(4OR^kI=DL-pXF1*Wps?M?JE=T*s9A(3OyJg}$sl=hx zCW(hSey>TIVdz!#9kvltIEg-F_m?KgYtNYnf2+xc&->X)tYGa^+FY#POGx9X;lt)a zXTS%f#oD9C_m>?pIf&m09G1}AP%oCyWjNo5IlPY7vm6hl61X+K0LO>+&vMmoH}8V? zhm^7W*9S&9oLtTeu>n`m)bL$YHI?lbH4RK4Npj!^NgCOW$0dh(!S~zn_owlrZn%KA zv-a}!tGKy|_RD{M?=Fy@C)#&MBa4Y2RB|RdL`O?3oQBR9uS)!{W5+oG4>6YhmwX$~ z=lgyIfXTlHcR8=u=Z-hcovjyJ;bgvtSG45Kk7eveK5t703wE%9kmw1&JtQHf`LXvU z@^de!egThX@0s&tPyGS!&fRzKFRgr?ACa0~{BnFQCxis-{Kxawg@WnOKK-<~t8yA+ z7$VfZ!mnb*#EZAm9+XI}F&VJ;0+^IV)r|U*pExVBf*0U=0jNYLa$C~63*3c!An;CX znLfh+?!+3J>N66Xre;nEX&&)N?6$`=pZV%WlA-}`5ht+rK)8CB#|K?b#^d|x35Z?(S|JI`g z7WAL7IXZ*CPVy{o4m#bRKWpV+0ptXq9GWS%rVHJ@&t1I^iLD}XulQiY-5=eCVsED<8P0uzf+uCTC&eRi6{h8RvQ*qAK zn5j?hbJPKStB37U3cvY!Pjc8IG?KooExlAW8n$m&u&+PWva~m%gRMBe7k*A0dHDE-q(3pt!K53*Qly3X%xFii8Yi?Z|iY9^p###4{2 z%anpVdM*()RBfX3{wC*TkR{-v3hDfHcqjJdj|n7LZlZI)A>c9PWW#Z}&D>(+DlInP zIO_c(B0S*nR4u?VmEB>EC*^e@t$BdD>w=HRUCC+U+9Ef99d52=+j1I@AtQq_m zwf}XF&oDM-|K9tT>W(BjVwK-zw!`~Dz{NQ+6P|3IW7DrJVHsEyVXZG#2t>)u=_h0T zl^5E+UW2B9)I~*}7;rBF?C&V(*;4utJvhH}z1a}k%R40O`K$7ry!)$O@>Q0$&%pZ_ zdK|kM$EP~DO-=`72Xq^N*?=Pez#1rz(n@<9gXrg^9v=t`&3BvfbVGa7OfOI+2GhJz zKnDQFBR4K1r*o@xdrvWF_7OWr1<_swNf8OUKR;~TLmu9)I>Nc^mTpJNPu?FUJOrPv zP%+#wH7*G{=s#6Z8y*5A?5fk;1?_T=`?0jiKLPD zfvDuRPv`QB=mA@)@PP7*$E#=iXImNjfR)w_|Lb@O#tDJWi$bHdtM&~_B!Kv4mzd-x z*l)>H1`SCeiyEAkUvk_UURU*dAeuU>T{{8tQiYvT)TM9Xhx&u{sYah}EFFQ}KqiY2 zTWbeBjMnKOcRuqMk@XO)G;k1ueN$D$#tD8P)4=ruHy-yFdi9yvZWv8N#~sp~XT8?; z6td<3v-jQAhL(jKZ_Bfo4jTvm3tFKE^ZLY#i?#P&2md1^kJr8Cg?pxfH>qszD-5pJ zH7Oyt@G1hN=T`r#oeTd*9}j_c_nVb!Zoh%=*Ocxa=j3ELw%HDZ47Y2oTnB+U&9=;d z3a{;;M6zc{tp8hWXDiPqIKa#8UaJNI04RF3@8wqGKY0IIQ0$(Xpq%~o`p|J#UMzUk z@4yl*ZXqii3=~#45ZF0>V^gU8liCW2$|I=qKL4^U5@4djmsX|UK}m)`_3cVa(DD6iUuYrMICp|1au|-OW_IeDelGAy-=lqTXKi@ zfeHMG_P0Lhl9tB4Kjsy~fJiEJ{+#|~WadW$P}WL6By;Ax-*&FO7Kg(KV-6B9={TJg z9>@UVnI=|K!J$-Eo)=G?He5u{xNs}vZ4ZWEcYViwXTXrfUsdiF+kTm_hPd;Ux6R%O zYhGy_I3E9X^Ay0hH`j~yfk-x8_sfOOw&&8h6PkKUZAp0HG+1tM8ay^Fny!+n(*CF? zufco-sJ{2f^OdZsJar>~Yi6$LT}=chR+@kZzcv0zT9W-|F0>eXRyWyVeXSdc{&??R zm%=T#2b3Z!IZ0gUf@4c zgBzTh9^CVQe)KHGu?s0Ul5L<^#D8%|)dGfda`w~lk`{!S71LSVdg+|}af*hY6Y8V)jt@QMk^e{(mbih=4`qR^Z@=zOl zo?~4{2Zajm-vE1Vg4hMB{4F5BImV4tj-V00SYOXxIb{ZBZLg!VoPcM)&d2_OhnM418;93etoExDqqkTk-&Z~l|A+EU zxgYEjucwUmPY-!Sx2Vt?n_& zEyLY4M)9{9r-DVc$6No0OkxagmS~LAGqNFOosRrMiZ8Q&J&ffII<^yA(pdp`&ZP!f z&nFptiiZ3f{}jwZ)}Egwm2|u$>DFGgQlRboi({XF`-@(muO1kMdc6BauEYIkD;a0W zGhzZ0{H@=q3@kGm9p^$nuw<)sn!k=BAto?FTK~-=R01Yj9iE>s^!`ZHm)dogp|PYc zs9LC>3f0&QW@mevt?*dn7!Xr0psL{i2Mn~g87*<65kqh=h*=BB zD$}17*4y$k&A8WUa#2_+ug0L73?`bTlT5v+L|8o;q6@0l#i@*rqxc1iu_`-#cH;dQ zhUJtzBBGWzDx|**ZJ&u7s9~u+!>b5@S<|QPqpcD81^1&5B&Tv<);%Y>kX4*YzC@d# z{p~!1-~S$k^bmX*mY3psN;DHb!+RigtRM#LqhN!ZF~#T&+h~K)sK|HL5B%A0b3z0~ zB@rsH2kDTJ6ApZ;PJ$$2Bj6a-T_y4&{XbqFQNw&8d>W_F`GjF6 zGto4!$w+Og`bqY`G?p;bdqhksW-j|Zj4`GG4_<{pJagy@=MEPqhwi=F>6)Ps|$IX(43~I-y0hv_jVVzPlYmT!5t&HW$;dR3&ZrXm{E0> zoqdk4dyVt;N1EK%^ym3Tlg65PdlxRsRDsk4l-H+fA5vp5?)9TOMlZ$yO}4>)t3CCTsQFn=iwpd`7>QS9 zO^hu?b@GpVcCQi#lUcI_KTA2Wc?c*5QAJ2xCbTG~EO6*X)CB5eu;w_{3BQ z{#ZbT_7rMp(FRrIyY~u8@)EuJWUh-g@wj#7e*j{wR1#`9VZ*soqiJX(kq9sxmx=Bv z2)o`wf2N7Ys?VPp`^>A=(vJfteAI%AxSmM&3paN*{P0 zn5%r1RdE>un#<`)BGleAbQB%dk$Rxy1}yMk?zzQ8s(LM7B|4^X#L|(tW0os$P9LHD zmQMXoa5nKdX8d;_&``8o0kktK3i=l5yOGM9{MRS`6zBB+xBw@mWJ0(0idJcvZx zHQPR9*!NrEH*~sCuL|VL?{XN>{%1Y0v93C8rQfM+!wNs`Xpy(2gUX7?2{rD2mPKOz zL@~)yOhcWZ3Qma7r{ZpI{`I#_HDqsF*w0(BtIYmT-?GK@1lbSwDI1%bEa`X$uSgO& zh{}G;v8;%11Ifs0S=2WO(r18o`Zwh&n5fx!n{-W0xd{vCN?OD1!sYD-5VD(cv6j@3 z8ksDx@&7hGR|=?0mNGZ#A~a*7D;ouN0Y$*$06zNCrc~R>LC)v?ME$L%cB3;Q6?FyL z8wL>)$}#2bYUd&)%3?NpV(8z9>^8@Dc!-mZJFoG>|NJ-r^U!Pc0MVZ?r*ZvuwLG9K zO)%s5XmVaiHoA8KG(!3b18dzc&z6%=P|q2mEB;MBo(hFWYPTy@SNed4wl`wHGk@M{ zRh1XE?>>^+aILoEcVwH3c-9J4aevB4%59m}DX} zM!>-U)2L*g4PVyQjQlrd9^NISPzYxdd%ihS84bC71BD_ryzEs$TXOelbG&FP_;CIE zmU8F5r}1R9oTM!YPv;`_CD$PaxEUaDuZRX}_|6o*A$&v5e8UgbO#%@Td)F*1i@M5J z>mtiEJPALMOY3D>IKYlR@zK)MO7mZ3Wf9W`#)6(fD{bWCO-p}D-qx_z5SUS=+xxS% zRUy`rg1+6MJ_u64^WH<-$#;2Gw4>T?xFz|4y3nU}$}lYggkd;87Jr^7277Yl z=lHUsDLF7GMv#3+^@>{|^^WEb7nEq>3o=!idq8J|vohG}O64-n27|mMxpg#pbroNaj z_E4euF62(DGIE7eMH)GA;~acID($kmL)c8SJG)AOl}9qdUfDELu|K>{g`^%r0OX;5e; zYUvxZK;Drz_xj`{uhcdJ7bgH7@+*iW(mK?Ym;Gb8jlGWdQQ;^vf;hwt!Xu@FXiSmj zBEIxTfK>)lLN={dpBEud+wLY)T6&suJTZn6Fp@{-OwBG>;#5)U5H(N$K(9CbDo}Mo z=wKP$zmu+Ns#${qr_8y?SJW^oQ%)ck$69$J36x6cHQy4ZvHkU)2*M-=r;gb0g~=Y} z+gmLD&E`RDn{C`%va=yyZ*^-|Wun&IXW@BHpJ8q`e~YJHcSrw=TxL)$&~em^B#HD~ zfPtpie5nwnWaw)=gBH=BlI6e71151bf8VEVH?rR1;Kxw})4TX!6IEWa0ck5W()=!HRS6nq$S zSiF|o_&iDh5N@BmTh93^=;ttzo#otSKFqU_{XX#E?m8xdsGYgk_T({a`fU#(1;f_Y zb|ziwMxtSJten~FWP^5hY`^%e#^)xgA7_m3Zri2G=V5!Vn3&*04Wf`20$+H&#Q5YD6xl-Ebq)eip z^~hYFRp)E6QFv(JtQLCy$9M7XZo2>Mknk&db!f*)bI$99QfD$F14x3fYUOd;XrD>v z>ukNvRlSkGP4JEI0^h=#-$a0ap0@h&a`FOgKAc|m@!GZeK|_G=iCvC^m8CKorOo>_ zoFTi1jhwr&6CklWLv#hJm)Of>O5plj&djk0y2_I^~cJb?;v zjpfz-L9F!)PkT`<+eV{@B^=x?*g$D$EpoJ;lJm6o5G8RJ@8P$zP3#a6RybuaA>@2O`keFr7-s&#(B*_L zl}Z8^qx7od&2_X)PtfVuE9Eoy-tMayHUK%iH*-$^Ezajd=39c$>kGtuA>dznDTE4in)Sx{#SvyqJZcb#{JMr#+;O z#^dV~NyC86DICkV^t=3ti*S^4*(G$k_`S|^&&R)Ux2`56$)@K9PBr_CkTu=)8G{5a*YYP91o}N zLfdUw)cUoDoy!L*qU8_SJ~uiGohX3oN3tw-z7ZTk)=BS1LB21Ux{hx?RlX}i<9eQ| zqxl*Oo$sTJihScOBp2(qyN>V5gG-HuR}d_Y`tedLOQEA_55ueZhfw7U-@RISn(!_F zxAc~a!&@hp-{n32fsw|B_63u2Y(>%CZZZ!k09bBgqvvX!|1}1jDW)*0v+%m6r6hC^ z9F`nftbYyJv&ahRS9i7@ldlRw24y+z&@u;%K4&a{U~av(E6!|22PpdYwpRNdJnJ1W z>v%u5LYg-90o0s=zfbn3oh%3XVZRLF)w+n2k6Ql6K8qok)8+p8jt&=gH4fxvH(*#z z-Y|`lll~1A@Uy=8;#avw2GDZpqop+x3xY|)SEB38h zCGVzpl@CUdudhenS~|W~9T5SjmXmYb=EnIv&c%&O@Shs0X9^ETMmIEYqZ|z+0GN6G zkWYbjH(G0nV0MkE-^wLb%&34+ zU+gKOJ?$BrkAX3Z>{a&BVm5ws1j)m-qClzavdSnyJ6H_3&$v0B|8XS63=T7tJub&6w)Z-7Ont3h^Qwp&tsT%7OA!2Ri8{y)IB>3@$BA&sTKS6j9C_}W z3vtgcl}V<8$A}A}l9_6{LL1X1(a9Gy%n*iP1JcGsQ2^4jG~5RRsQ2?@cs8Uy2k`(v zm$uKBlZi})K!NFA!n%#ElpAW&ODKfZ9&BQ)<(yeH0aNRj#bZyYwY zD9wBGKm+Npcp3hTt{vfqu~;0vJRhhlg;LK0oI-Tg;HJ@ zftANJyp}=kch)@U>3Uw+=zm)gRV_2iweYq6T<>+w?j&1^aeJjAVrW-dK_EngDN((K z&(UC_@LAnVFLLmNDtlX2=I>u$SO7~=(y$BPhljQmc(j)8GnE{)cKGPIJ88(E$*=9#3NHfR%|o84Ye*t$k}_1kc#KJ7!^Oa<8^Tw3akIMd@&;ZD%~oK10Z)WJ7z0YIexY z0`C$-Zu}{b^Z$pucwi-Y({el?{cTmlBNs#L`UaRpGwb(F9{#d`_H6X>x<7{n3xKk1 zsED}ZLTy%*+R*_XLJv1^&-Ws9zsnyXoE{gR=9NpvbiD6BZOk|MvLDR@9AfbzLJORz zXWEa3g-Vd4AZ>Y79h&M`V;TxS4%O8ZcLB<&nd-8U2ZKpmCSY^lhd#gj9#vLJ8#5li zL1X%?nWH&zpj14A0mB;*!%P^L`w&X)wFb5hCazKHDmqdByAyIoRz1m2s;`~g-0$SS zDj%SxWs!Su*tk9QYYs*P^tKwVH@qd8({inhJO6mJSgo<$d-d^XyPXX1d%8tqVTn0k zsy&Z`jfKI(=J~`V_%J>S@wROftp(uZ@6hO7kTe_7E9|eWCd4S30sN(03AX!E}|c_XOe7>9oAvMw)7O z5(gcRWsSBzPeDd@UbmeM(9=83)%Jdj2Jw4TdY@{196ngQmU#CjJ^%;m$2S$tyI1(m z48GZ{U34~kovE>$dXWJXTXqdx4!EjXA1v~;!7gMr0%rqQ0a6_&YJ6X-$W|Mcn^bq= z(W+lpSU&Sw1yz-ShniymmY*$yjqe``;{(~M=UG5vh)l$E+-$%(5m_B1;4#~ zow^GmfpJX)j7wNzkLw${f5Z%whlRjk$5C340De(;B-fiG-}5T%qp}0K0u=}z_uo{_ zM0Mv)DnzCJW1Tk(l&FP(GjIN504Nj~By2S#$CNN>X>$JwHT}x>$GXGyf8alb%&jMG zU*0d4QsR~yn+LqV)DS{ecGK3jHA|B-dhkK|Cezzp?^^s>(>Md3#nA} zOIzz_Hd0T|zm*ll2Cth(Ates>Y=+cBatUT)ph4@5Wpfntk4gHxTxpopM9}^c47XXu zFCtmYhY%90%vOGe^0bI=bybBlDi*|ak!e?=%pV+VWBYfy>QDP>io^_VNOY1h5+v#Q zvM2Vf(+?ylO?GG!oeP@fnKc)PlxCMBL;V6?))Ta)d2K{?%hYh)u2?@GL+gS-Yl~7) zpgrA3V}_5bmA-(<-}u3)Fx&^PxW`o#oO+_=XcERS2BmONdRG1C&Jw#v38+v0b54>$ zkTX@c$jV@BcjAkP&Vz)4#3j&Ta^`Xa@fk%}SRHB_p!z6>3#Vs@h|E>T;j#+=w~)!y zv9urB$xWp@S%+E!SZO4P`4mk7ByOxNem|u1>2+6vOESJ<^?B~BA}HK+-R}0KA8>-4 zeWo~t!E=oRM9W>=L%)}kA0hF#=m71yDgn)jzOR(^XH&cb+|HW~@!h{D{;smwe^3|M z@d-=nAJ0p=`OR7gO9}2(x{K%pjuoo@B37!%v(p|4f8;H@{{qj}Dv~``R_*b@JAomv z2Kn#Vf~%~qn(~-|tGE7hYE_2bn4=*8@IzaBIL6-RE!L;OE@IFoIma(1{cPiE%wfK> zrJ-nNT7oubBrYQx)n4$VLn0ms1iCF?o564vMB*BEOVql}3S1x`;8>Q)KzN(>^&~vj zU;vw|k5h_G;g|PUZDGIx7he~n(ps9jn$T(J9Rd>zNt}SBE9!(~5gvgdQ#}Ep;ZzYDTZz<55(F33=U3gqSElBr}O`Av~6E| zRJH9|qqt5KjP)V@-~n~m>a81eG95k@%Ts3O&?GYXkdGLrSO9qNJunlOajuu5%yr_W z51>5?srtX_6{TlAlnzvacnA5|@G1yP`5k7tvjSBgDX@+Gh}RKDExMFX^93|v@{sQD z2Sq;`99%Wbuy|c)L40g<=?T(EVrY&j<5IC7O_c6g(}f4*QxMG116LS}@=Ak+H#LH{ zx!^d^MEqj~w;DH^iXf;D-5S_&OSl$4>n$p@W-Kv1(CKe7de1Oay!EjAw#+069L$0t zTV6A9(3-Fe#*MUfK$Z_NDSuyHn(YIF%Uy;jX}JrA`g8MhTwSZl03kqZw`*71z@~!W zqgm!j<_ZjXGW*~>Tm{B|VEH}o?fF174~VQ3*1s(GH<+G-8`jLQR^stY!I6=`*jC$g z<;|+>-HoHn#dy{OLMm9NLxbb1hl!F~O{ouP$+$JyXsrP61((W!;?DPS3xoim*9b z>L#NTr*Nv&eOV?`G?7<+WaBtNEkHt4RAoyUopq8Yobc_cNE^{YN&NA+S{>Y7Xlvsx z^R<3)EYicoxQG$Q6V}@C19mu!tncuhVT?bVVyw&;HrGF5Ngr!FgW{p&NYJ4yLOkf0)ZK(STgH<+8dq`Om=WO8<`6Re8raePxFP+SYL5ix-fqgiQGFRf$|QuV&vp1Y z8j10%Clg7GCm=Fx1#z}Pw~!4x^2ZRg;9wu#VkPE0|7;(%Ulp#kqKO%I&+2K(x+L*#-|;X)#Rvhs{tuhL8}0!2Pd2XedUpw|Q@-Tase?9W*Wqh64g z5c;b=j=COIIWrd^M}CbdfK{Y_|TRj-llLKDsqm8V?uQdS8i3#iyv`g6!mOVy6C_d>*fyF#&ngH7bA`Hq5GWE zu#E6*?CQg|=UQU6@dmz+k^(?Nq%Z9x9-H(=h|&AS|IlC1469M z=HNo1j;$bwO%mGydhu;eP!xYZFHvtT4up&qInXKYw!UnWxsAmK7eYs7>}S zm5Hcm;Adu5l~$XFu(f^3$lLsG+eBx$8Gj3^JBy{jNrkDm=V1b*&_8y!|c{spTX|BvBVT5-&R6aKh=1xE4y-;9)+QTa}%0K{2 zOg3qjjLeHUzjQ?Re$J?wzWnLi=ZEAp)zcBJ>TfM2+6xRinzj_AAODRewx+?BVYY_L zM(KUJyHaNAfp$=U;RAV$B%=Df$((1r=EzVbQkgBQJr2TYIh{T)mVU<7ERw%q7-!z- zuRDczm(fZJ`G+F1A`)%v^*Ttq6C*=2CObbK2flqbLpzU<+-kYlKRz?(sU z@bg^vDSq@@qs=u-bZn856S_p8{a5vK-Jot++~xxep~vU$ksqlTdSptfpJSPWk`W|* z$!oq)kT8E9qBXh1g1O0ucy;d{gGqOpuMa87Dlylx8N>&2bFa_f3ir+mXZA58D zNzQ979rxHTaq{)7fx3y)uhIXLVDR_yDlFJfe}w?(*i$@M9UULW-PY2~b=ay-TeFpn z8yAb3V1k#%;ib{`VV%H$;6+OnLtD8liOv)BfP6LDD$w#kou%!+jtXli>J3RS0vf0AnwhHMW38*!I@$-z_Q&XMoQ)be@ZqRY&#VL#J1>-&*y0+zzt}5w>>xw&1IRK4eKW%<1t5CJU z;8uQvZXx%*P0yBqNy95Bi`+cwlVmXRjpc~T9-A00eE{Ny@fX0Fbj7tWIJ);Rvl)7F3Dt<)!h4MSwF~tiQiX zHBuyikO6>6o((?r#o3IB;K)!ZTdk9%K7zf*eniJ>e*`e8Yj5{MzUV`;TpIRo2J0rX+?rfA z-=pg%N9p_rQW1F>PGQ-W*&JA?Ar@4QnEamUL~F2IDb0ZSEAe-7sKM+ezSAngiWljL31 zIzedBsb*?xV7+Ii&Wel$D&#LF?h~{`rI41d!SiR`LnZ|N^|K~QAy0;k}-MsXx<1!KXR2v5O@jo(*+re z{qd+0fh(I19jxP)9^HilEKtAn4}XZWld!`?Dkn?O_vd}2EDSZha^e5u0>pfW>AZto z3-BG|Hup6ttJDY`-GJ!~wD%ki+`5&Erq2P~aCDYUm7O&{ zC0#rUue4zL62mP=L?swn`H#6s9$7|6Xvxi+hm>UzH76!%hJ zaTVVVfow~_RLL*Ns)&|=D5q#K+u*{9$;Vf=_G6c$=E`aYd73&MIY30c=qXoaAIrj} z>-q^f7=Q+&BsZvBk#;Q1iXYlcp4W=80?WN!E@!ky|s}{_Lnj z0T&BGq$AH?bhj<-%nE!VOS=2xEGn;L+nMpfk0_fm2}&T^;D(!YU1ZZv-$-oze*pJD z2*3Okxjs${$r40asl&r)38bmUMQ7WCm3WxZ<>>f}lQKY{ByinL=z){;9+c{u%Czm6OUo7u>ud zcCN%X_Z1F|6uC~06@nmQU<3Zj2VMBL5XC&SzQw#x_mFq#Akm2tpE%hCRiU8JZ7x#n`m(C$t z8CkGPA^3_xWn5y5Vw7vdH|oH^=xUW0~zr2kjdkBo&H+1>SJ~%pd?z zId1JQoZK3@c&QwXgy^M55PoK0Efpt25SDqxkW+=2jo?VS^lDeGFQtONpG0I<;!AKV z1OdI7Ro@<}+ljfvmeD#cTm=BUtD`s_?IHAu=n>WT$b0&5dnrfoE-Nkktl)~m4|H@U zS6;7!6x*$nVTG%MWD*DdB!p@{BgWqo(HXF@f)wt&7L0EFIKoGN1PieP}tI!SG4jgqgti~ zql&TXxIK*I55T}$9@SIR=ndVmnnCWB;47O8r3#%Wvy_9f53tMLVD37-ITIBgE6&0z zxgEjb4l%XvKzXq(uPtN1t=3()V!C1n-f;V*x#t%ft-up>$Mkw6H>)G;8&h@+6x-_} z^)(T{NCYu!sXA!Xe&((B0ApfEIYG=Wbgp-e71nfSQh6OLbHCjom6@zzc4Wr$V<`Y& zg=G6G`1XZ<&}Cip2Qqlt@pRP8SUT1UOekj_5XCk&&?B~?AGj~aY}=m^dB3r;!!3e1VL-(3jJn}Kb|9tb92xVD^6ie$e^BgMnb7~*XFW=T zr(Z-wU{-9S-4DA=7v8IwyNJ%ZXpA8@^#)O@z^4~QsXSs^eZNO+pEpFdus6dm980b)zZ8_8i1Ou^Ei!^jG$0=QM;Dx5Sx5junCcs7~Qvh9behtz;N) zJ;uNo-Wh5L89aztfTr`kBZUpUMTH}?yMG_(nIS4XG9c;=B4Qb^2Hm1vfid%l)rirB zn`3#ej)P*$9x+fb{Y>%{_UAp?{;2@%0Y0&>4+V8!$GuQIM_GS zt;q>D+%Dr28vs-tcMmJu`wMM#kwlaQ|73!gWmIS3VAjIZ%(8G8Zwd2x2DHZx4E8KlS<7RzKZ^91YE*y%`J>&;BZwj zo?=!(4H6pni0$Mt6U0VqH(21x@&`$7%U@1xb0Flu37#sxyKNr#h+SSPuh;+pm{GJB z_GT9~MOVzPA;$_qKy}k%t!EF7>;B|YAx?AfE%mTMtJ7 z5In9nyFIfEg8i|51ZevUDs_9px42!I5$rI^K%Jw4 zug8|8T>PawfkhOhVL+v`HjHKBMkL<`9hvz)3e9PW5>V^m{(n_=_xkP#<3I5Mfcus1V2 zsRo=27?C?YSI}TSz?@+0a*o`{r01*RFKi6kEeoV=fOJ|$4D3N2vB8nqENIIdXg%?p z0UWV8B0%L7fPy8(Ew;UD$zDP73Sw8j;eqm)V)L>Uh2QO#(=zC!^4d%LvpvZo=QQdf zW;;hBe431j#EDJ5q;2WTb`F;~`jR;K3Riv{yn2Rn-0@FNr?tw*{rZYGI0VXwQRXV; z6bbKPv;RkQHHl@*2VETl3cJosBj>48($WmvT2y&G%qSA?E}tHpAWz~ zh4!~Ns{`#xrReP1_;n(;vLQ%f$?usX>icyVAU2v6xixPTQOtJX(rIk5og*IkMX}3i zJ=SHX=}-aB??zW+7$kOJ9$3HFj{E=sP*m}iuH3xF$i>T~nkX$KOUz!XwQ!i@17m(1 z1AD_2ghdc1Du@$Vb>05VKuXcMaR8?Lf8R5J4j730YKmoi`hlxW+oK6~*rP8X(qGZ6 z3y$#O6;LSP5eYnEd!!P78V3I~vw$d~JKD5NrGpV0gN~QKnIIH!#10ZAKy3FV43c^M zrTw}7i4qT7T8AKJ2UREjvSz~)#4Mz!>RbEr+xiNs=8jdehteKg-Hm4iZvE>Sl9!Fh zbd?Vt*?TYN$EWoK;z;GJ1noMF-UF4cCNzLzc8uU_mk;ptbng|!whcfGTy@Ia%;{h& zYTg>=uX7#d9J-Rl^#?Kw8l&+Th1b2cs-Z3Hy_YUQs z-#s~=*C5a`QE6cAe7ibb2FR`6N-QJxjJCC(o8^s)+^QI$JfOFYN^%B@?R%OL&17Sy z{8NeTM3=keLv)GlyFVVaqRda2me{82SG?hX0b+Zv7j(l7nAeA9Z+LaTY>~gTFMCo; z?A#@Fv4~7M2Qdq&ek~OgRz;fT^fQ7u?m@&%QGIEDre{Lo_L5@dd&9ssjPIazNXnLW zZCkTnjf&u}C_a&Py>ixwgBus1OG%oB*iMJ;dmjW;^u}KZ!4c&yFg>yDD+-B5r>@|? z;lXviH`Y>g7y!a}PJi)0c7AhoVM~mr$P%-VDq}dvbV1BgG#z*J=eP6~idLxTAwLXu zmlo*O@HguzU%6?onqt{h5S&l&Wu|W1D^G`II47>@|%j~~Ox!YUr>J`eNeTUIi z#J-S*&^c7x+?y*XG)0z}jm+Hg^ubhk7ZJqq3L+m&6<^qs8PDnfF7Lo0H79&Sa8DL| z#1n>Drq374AOsYyN^F?oDGxY2owtJTr+Ji&8PGY(*FE$b?wgV;?lORMUVCMKc2RTm z%moQarhMnb>|#a~4(5A>xZYsZ4E_k>SOXE$d3Eic%dnE5pmY&*~>ZlL3H^d}~0!WEjMD^2RZJ6&!Kp}!S-a*99q5P)a zT&ARZ9P#M>_>YLk!M6+UXT`m3$2cPR9w}q|Y>lET3O|*_!Ed%e*VO}lUAY#-0@k+c z>Ymoh$zCDq+#_DF*bI#5R{!1hh~aOxLSa`GQEjlc{Yg6viYj&v6*u?hi;7O#1~IER zL<@&ItQ*DTIIh(i>3JefEI7yUtomH%WPd6ki@66Z=dAFq1Ln#TQBEgd0Nm=sg67)_ z-CG4M#w0jQRBQwt!K|S>dOBcNCXq5?qb+vj0CKb&2ol@fc(5g5O0fmIhbJ*dIguRs zD~auCsjS$R^bAsYea)W9g)Na4b7e_766u}^;#gpYVmOR}p1l}7V?i$sf;hfG#B5Pr zw>PzGu%zh70Fa4EcD?;Ly1Q5JyacNcL@*|p8vUZFu)8XIW{r9h`}(95dSv6lbh2ky zSV4>Keq6jdxZCg+x5PF#fq@{lsaUwh4zw<~#CFNTklE|q3r#Sep~SdS8L~K@jTJU@=O^)mfN|$9RaR`*O$dN7 zz+wq^3>LQa=Ps)WMZ%PpgP0Y}jKX247xwzmqVfSiRu1CC0LL=Qv%AxsBSoEYqt|4{ z(Aqc+oB=~&(GTyk?A8YNIS-Hlch*lsPkCE?uC(5()!#+e0DB>lxYGV%yFR^eyKi7(`rBq5r4(+$na+AhD4#&@HhA zg~ZHM=x)bBw|HN7ENr4O4O*q*o_7YiUmYKK&1CwSeEVm?e1$+?)m*O?M{2| zZ2^4sZ0Y;r#MHs2!r>=Qn4Ld?U-1-2(~#4GGPoF)YQLS5eaDn7~Vk12wWjU z%-$x;O&C@JV?98Mj|Cjt2?CVVM^@}<%}({@Wd#z^apB^q$Dv+_!-b1u0f<=J8rxYN z4#mV2Z&C|`0yxf-j5jM*Jprby@)(A^f;b1r_Ma_Pn94UXOib7`tJEo@C5}WN6EYS+ z)Mytc!Y0}PHvE&K4ffIiTT8_#aI3TdfpE$O4!UQ_LEuV0hQCrmoOVKhQruG;DX9(T zqUFcf;Rl&Tu!{7n3z*K^|8!_5Dowd;Yb?~H9<@ZNC7u`)WtE4 zt{NOf9S_xat(N2FO-l^8aB*~kQrZ%x6|JN_#wl8m0OyglLWkTFXsb&QfK#(^>Q`qZ zV{ovX}g`g(WDK>}rA{~Vz40JSeR4h}TtFgXPjQow`@DBX8kVj6#Y+V;Fy zf;Oq0{4${KD$QnK>eXT|smbABqw!UN$Ag(|GD%e)EOUl7>vpl2F)D2}yN!M2*iHz6 zmIyi6gy{h(Hx+;ocV!M2$0WKQ!=b&5Y@QJ9p>v-e7e^x~#fEmQX(J-4g9s*#Y1yo+ zqlnjo))cGJ#b7gB!Pagn(L&o$e0R`h$Qq7_kv3SOCJn62BPyz1wpcs%_D)Bbn_y!d zssEXSJ+)uN<~Pu97Qx0cgt!7nAPpg|wgs~S)Z=dI=HeJdR}2pQ$+hcL0f4d~u&$qD=~A*SKbzJv+l9iLwn-RM?4?Xi1~>>TRO~Y*xBqRGMMo3=21{ zisWen=&T@anfg~_-=1Y|LmQa)1-pfvMg4ck1z;7pQ+EBgU<7EMEMuS3U?HJ1ZKv9! zJgEpmZaNlZB5?;+TpWw&(vS)Q01`m$F;Xum51MI9Mi(xQ9uVMpS{tPGA&#;=SBK=R zW-^rnnwDa^{)s2nGKPq5+1M#~+Zy$hhDTG)m58>9A$u3BzU&Zf6MyR*QQOf9t1HE^ zYS4Ltvzkvh!`8fLiS>3IG6Eym__UqK2P5QQ6Q=s4tTZ6R-DAbYv4$=Vsi3yx4r^Gb zJp|>F>)&v3)PW*4hOsh81d*^q5++qalMCBmb79;A;*`!bXabg}&RnN@NgY+`&|_%U zi`Kh{Uz*WR;1KT7877qR+1T8>F|pG@l7Z}2`-i=)_`kcAcH)c(5<*Qoh$x8kU?Z&z647iZ8x^J@t^$cg zqv|P*k%r7hCu%_e0P19NtG-lKux6d8tGGC(a7cy;U2DU|Q4GXjgjNP2D%kt%o!T@q2~2-r{Dee> zut)N+rPhBom0&H0^})PuT= zzp34$1zIj}R&s0t{m(A7)h0lP^G=1Ur_8i9^4eD`?Klb;HS@^A+@^NR?byPQ(IjvS zZCh!_7rR;O$EBUTz~j-j6FAG9189qq%4QOZ#g~l>7e^Vo6vM&zg!LeE)kwhk1a73QT}rO3I0G_?SQty`L_3i)QZxkqYRn~ssvu;h&|y9j@Nw?Iii=|dT^&+M z_;eCI*29I1BN>PkTcflh2;o@gU+|VLugxQ3?p535PUsEkNYX@w#N%qbYW2Z%f{Wda z8}cWFv(v@C00(~7-=PBnPf%r|asa^cUNn>>NKnxN4egRd-Ts=3V+7r>TP%VyLEmPY zyK88;IBGy*qEy)o4Q&KLcNZ9Y%cdzLhNT{~2_}lG+@KJZH2MjnM?#$j;k+n^o#z0R zOSY3#tO@O>q8MoFvs=)R5%m?XkY%B)FOno}6Mt*xrvPNh-!>k~|fAvGEbOGMjV;A&pxX9|W%MKh)cq?|N2dep_SfG+PAi^`i- ze`xHM%5kGdT^!Lsd_6eR9sWS#nBE#3`S^06NY1MbN=zbM%(`YEaHJg1gLC*rjSIbJ7dMg zQID<~9K`50m0gRX1a!o`saUZR!FSkp!r?*=kGTD0r~w)nh1=4$ zrcAzMQ{mPcJ5->ROng?RiaJ`jt-zBJRFYLV71E`4(j12JCJe0nqFE{;%ic}Rt^ zHmo)U<6U(h6&FV+BuX3GrGw2F;pNr25ajp*0A<-+73Md-90#C>U)T*>m?m)OP%Ux8 zqL=y;;}{o_2!xOXv{`Oo^zb{;Hbh_OM~8qmfVx_-4Q(5NcbK+C;0APxxm+L5>*6RzHw2AB!Y+wxY`8d5fr#xM%4&LEf5l9 z>jU*wtPKlE0%1C|#26#WRG@#_dif}#JU!Bsn*boSGve8BMP|`$ec4VWW(q-FZIb{{ z!X#$0o0#ef+DKbdmsaw&w1F53N4wgU8rgtZ1PVa3<;1l}Pwkhn6L=hH+tRiOoGFli zb@de|fwQZwvV@7&!P0*bT^go#Vzr2DM%$Fe9P?>;L&l>`AV#4w zND8yC$cz5&aZI~#ak$atmP?d5am>Ii`^adc#4cPMVL*)X(*6e8)DEa@A5N&IuvEvm z>LEu0gaA;YCm;xv=-VVKiqW9N*d4^!s`Wt!b%9bf20}?e*yS|zy~_|NA==0Sg5p=C zfPjR``Hh|u?HdwhaKcDXR;uh!ivG-+$4gK#j5L{8Xv+l%a)eN=MwK=I z5R^$NOK?(xgc8{}Ao_N#G6|ClNEt#g)3yj)9T{OW%VIPQ{h%UZZIlEN2w`b!MX>Dz z0Vx53L>Ur7K!QXbno}HEtiS=1qumyzr45jtO7ha(ffW}=CAwi94$A@rx{E_Ua*Ylb zM-&iwQL1dF2U~!b#YXqF4!p7+C=^4w+~xaj9_|PPB~z zx7-kbnYPpI*t%hjP77iXCd%#(11o)_O0Aust>Z&|ADY{Vjr2@kHQE%QHVFFyQfhBV z4|rWSvWue*-Q$}hs%a05jSu?U%r!S$99f`%tx+gz#Apm;wT%DP!}adpa2}JK@en(E=NfLq6B(Kqxy(xPZ{bQkfjY4=H||| z{jd)LDh?K+=4ah6`U#3QwAI^E1*`lcgyCU)EvU3rk!XTZnXsq8PSng96K$2bB1~;F z6NA3ieKi^_3dk|Pg1Tu7`(rZpkfoidNs0c|X84L}B-+iIE~>5-0EkFX6@0X;W%w z*Q~xYJOP}!e~Xk=j%t8{Jj_qkFa^DQgG*h`Xnv$LwaCy`hDJDIM_aGm$W5nh$Vd@5 zBGX1qOUi^LCO|=sCP_$Jy;EdEQm8@aE42fFMnk7&D^}HM@ zLN%j7PsXefZty!OLlSoLWX+Hjxnba(+I<-^Itbj3j5@NTrX(!6ve7&M03ZNKL_t(-O*q!PcI^Z$tp%I~ zuBKtKsI-;5GHnr|ww07M(xC+;HDEJR=EB7hi!OUO&}>gAW3{S_R2{l>;o`^uLVJXk zHDYTN7}cdKNn>x_qFLE92EQI#1-n_7A$4MM+9z|!Xeq1JkR)yENhXugK2UNP{0i~O zqxsODwu!&>cARJ%Z_SpAWlSsy*mZ;uOuwatzk@K%%yT4)E$W~0$wTYlOR{u_WJjp? z(cz~t8C066G!`Om0=lIfM3RF(xEPYxN@y>NE&Uj<(bFj^1uJhzAW$iDasCGFhC?9}=J{?c_ZX#)D3iw8=;S z!U7&>l3K!&WEV8#!o?AY?(lFJjc>yuV5oh#aPdO|5k*m|Xp(Azz)Q#(V{?=WMR)QMHwG_g-S@=3 z7%&LaUY#3ntvhLhJ@f7nIAKbT-%cb7jqPxtk*4{iv=rhl1?J+&N7oGwM14&}B|?;W z^BES^bK&BL0;ROBP1;*e+hPFvoQU}Sev>A%ohYHHNhg21Q>3A(`%9U`+IjPgjJUcj z;dqVhkP2J7>1ItCZQTjTB(tTBc5<_Y)9^ujftw0UhPL)g*=p!Gw-X20LE2V-qG5v`Z#`qj+UHoP~#AFySrtOqTAn0 zNtR}ttdoLjjbK@$)Do7CvglEkEfN0v_Ts<(^^LGocuaEGw&LCUfB#6UK!OK0-Fo+< z8xKZOI-%c;Vr;J3{o*r!U9xs>u&L_#XP zdWPCH^0u1ajyAF6wbBNLwz+DSFdAv24Q*3)Ywf1O&HSwy8G$>MY(pDt1kQ>G*}pin zP3^=|g`>1B?Zk{%n;c=?Hgk@SntJIm8S&9igO(ue-^r}aB)wKMexDjR~(t1v6l+8k{U^~@{w z9kq_6BLQ6-QbFd;!;VEB9nIdwj{%5?jqT!|I;lCV4E-Uf=CS%dVi)ctL|??ou#&mF zR~O3Xl`~Y^n+%vwc^w*)R%G6NvMG*e&d44p36%BImAELUVR|Rpgk9#_qUeCw(l$T6 zTBQmNCW+01?o8Xt-?UhkE^WI)z)s-F(1y4IH)XN@#4K&&0VVsQ?gF|P!(rW{$bzHG(dXjW0wP3ssl1UkwJQb&`^vT-!*^(~s=7^FqirE3b(`?9 zFfUw*`a$yVWj2@LJOFgW@fgQwh@al}Yckop>wHJ+P5vi#I?u|g6ZF^x1>$Gd3jt`4 zLRlltNuzlgNAwg~AsX7eX$SA5#iH*e&)NyR-p0KjovC|JK?)$;P%*4~3g z%$#w2W{RqwP~5X^(}qpkTBAa7zacYcOwY{-m`bkLu`UXve?h(&ZK-RD4bLf-EdwgX zcJ0`06>bYTJv3cUf)dGw0ixftbU`0^$Kj?q>rh&pK{+@BhB}@2z`E z%lEE(?6IeoF8%PeH{Xk5-;-vH^>PHL@Ws1NUUl`2?|l5_y47F*`(H1Y*244?r|ISh z004Ns#G6(;cmCYIg}D?wv*$0EFtiwuzWdTcm;daR_dZ^>dgbyr7QeD$UCGQ-X7|iV zhe*YRSNwFz>hC{#?YX}%dS&I#=9-P~zVOc1yd>@TcKKUxzEkTdnmV#LXW)cuuDVF7 zFBeh^fBv&8@-kE9>ehVn&zpXCe>A=C|E`CrTVslt3 zZIBv6ajgy3Mm7$$bfmJlvl*PGiI{5a1d~HVJANO6P1ZTu&{@K4b|=KAO_I1HryAMY z>>LudllYgM1>Vk+vSujEmI||v+<}$U?80B(aJ%%#@7FYBU4QLwihJjtG_F5@L^v)K zJg{sfck|tk^ht00;~yS+`NhAUzHrv;34N;etiJuOKh}FjKlQ?&#}ub5`s2ONKL3|t zqbL3ThBMfb`;9;KFOQ!pAK(4RW6D_?E#3azgxP0Zbm94fbN%nU_|W68y!Y-WSB|>w zEC2#h+q#e5958Cyt#{m!nl*UxAivPk{`!}j=3j8*Nn;0$nK^ax%<+>?1OR|BGw&KR zlc^0$w{7}#*;mCUTyWh5a}R^uju~{*Zn4M?MzT9nyC#Q=9}38ew5(pNZlRK4Z&15; zw&qONhsxR4IT-WmRoE9|!-Xk~fMJIbc9$=MQehXgiK`@uF&4unrPE`mMJrflud@Xj zXamCv^qt0%qHV0hEURS97A6gG7Pz$xmX&o|HQgLUFn5&VwiBB)kSuL$KCqPGMBCxk z8rooAy_A{4Wu+dW11qVSdFNky@O?>fil(bb+jZLP)7Et>B48i!VEUIsnw{ z-~Ri5e7t90$?OSzKKt~ejr*fdz4hcJXH5ZsN1u88vv22ow&e4>ZaBl2us$y37xyl@ zF}qi)7XV;bKmX!aKHGEfAO+wEU_?mmG33#|FS_8Qv2yZQ+4A>RY@PjoSKWNZ(75H2 z6VLqV-~7WT&pxF~;`s5Qi{npvlp6CIC(0){yfj?6IP{PttZoqwG|?~*gfOPB9FIuU z(Qi-=a;GCqW75bc0*5C{!d$i+~g6|lsPpjCaOjns&SDvN(5zAM&>rO z!TKnouDJ}WPnifZ>sH94;;foC-!MyC5iA<+LQifLxMI*S_p4q2i`cEfGWzY9XoC{B zDPNF(MAHrHrK>bh&6l8^Sc*VoEjVIK1jIz!G%-eNPg?cV&`z|NR=u5o&QPLQ-i*0v z;_zb5cceNw06>r^NHh|P0A$K%DAKI#ai=YqE`J@`Z+Mz-sYFBos5p3#O1N>wfA3zu zTtY70*U}UX`&&yx667SjMZ)Fe^=hms|911X%G!q3=IRtLNXo9k7~^65#JQ)RI95v@ z69fR@!_kDdFmUwLn@3OW_^tog(bb?)07O7S)aCOCXkP)~h#g9Faclz-gJE%BgVYdG zZ2>eTkpI)ZgE<+;*gQr(RRwqv;)U>f~t!H2$&X8Ws7KyKxu=NmnrtjCIrZl>F2No0fLgU zP(!{yC53PV34j!7ZUCSwmo3do4%}1}_cK1E|8>H;ajDTOP zqTo?wf=JT*DZZmdLdOES>frz&^7GHEd`u95Fs@Fgw}T58hXyE!w7gL|*hD32eC4Vh zIOBjg+vPQMlG)y;mO$%R0&~C?V)cTk*>!)1!6&GeW1e5mdJSbu-qLF}(Y7s|Nu#q; zQyOTS)&d9p;nheODnmse%r_GkbqvCRxlP}mSbh;LB`bM->aW8R=Im?7SUX{8GbyZJ z60{RA|Y7_GkQv^gTP^^9pv7b<(z zj$Gf+QIGCvk%alwJsgJjn`?ErI830F*0+fz4N`lIm^+p7f(>$~S3aXIyMWqt0DU)4 z0@PRnt05^M0Ya5-r~H*EQdJkIs|{2$>dtmS30Kw{gdk!?rx%QSz&zc7S zb^F>|WAU6mX<4}(5WcN7VaefO!``xrUi}6a=4K|t#D$D*SZUO-RG(sjst*nVU=kDC zUAX8bAYyxz?r)Il+n8oa5Q)}4)qah(f+OqGHhndk%7kt0h(JO9WOX$HpbU!Ivb#o# z4u5J&D{WANERcQJ>}aC{ZJjv-8`>&)u+nyBt`(!x1{>PI&_+vnEPrC8t&o=qYXY~@ zrgqYfOWW|L(PlEnX(#4ikFiqX(>AsfP}+%=w^KVoyLO@qTqe*Q!O{k)zD+zb*E`Se zJuFhU=bbkeFZuA}UFG$v8q%qrb!y`LFl1fY;v61OUh_=VbTiS69Qu@6a-YJ<|jW-7A%S?rz$nN%4{BDTA) z`^>Gq)dWR#$J1nU_f93-Rb*?EC8#gir11){;poKHu13c~;@8?`B&Mx{7>-fT-r;s) zJdh}<3Swn5jfwOKd>2ofea7&@z~lGcxbUp=zuCGUz$*xRG$Lt4MM;cBqY|Y6Fnr>y z`)9QZId}fNGtRnja|NH5>EU?^ z001Et<9S|Ur89iu^x2a~EPMC)g=d}d)SFA=lpGAUmL05YYHsP20Din69W{Xwky6^y z68vOS-OhTFmY(a07Yx zHgEWTe??UwqsN4a6M{ASJvn_x4eAY2Y~A{e-t?Xm#tvqrgLUPl-)-40pl{UpNkjYf zaw@i|wqorjUmeeN6C8_1lR8t)31dd5yGW)6+iOYQ zYJ%D|whq0i4vbcGqW0vn$GK|TBs#$s5e_!fie`})q$Hy(UAQ=;==v-bwAkM+TpVs7 zVnaLKQ7tvJ8+-zWeslb_EMyRZh{~t-)iJF+1%rUHUn{ZQM3g0|FtKa}fT}M+D^Nbr z-3IZY(pGATOWVqyTI>n7Qay&0DWAP1!rYGXE?`9+Ux0dTO!jf^tPj6s!Pv>_UX~?&s3D*04-;&w5_Gv^0VBRHn}w(ZM44#cJ=6# z*$fV8Y?8$nI4eeWeJ5v`nrYjO2HOZc(H&wO+Hrqf^Icoh8_C$ymM9!(lq#D=K{PEy z;=;w@MmH?{rM_Z_^=X87FA*0mx&w&8u(+d2sB1&CEWIfA5S8YsBnJQhX4z|F22hrN zv_e^lVO|&iH zmogJ|)hhsvm_2QyV0GHeOTwxs!Au)Xw24+VXzQZs0*^ymYY=v6%;|yQsUc1~vCw9u ztu-Y1JSr=vt5#U`rF|g|M73g7w|Lytp!dnq@@bAA za4yi0%BDYHN7C*rt6SrH@=;C0&N*>1#GEQN<+8sE$J`D)lXwx?TY#2w(BYCs+ce(> z)m)C7z*q_~OFN05%(>|!Ky4c>trN0Sx%8C8d#t)}afs06St^RRQtJp1wVT7fVO^WU z#UTMw+R!fUtrNq1!lcY6`_*|hNt-fkRTvuo5|d6MP5i{h8g(aGI=-|S881`5lZW&s%B9TrH+*A!bNwY zYaR~O#sFYUa>G~I`{{b{Ty#H>VmK!4tr2TlDMjE+TfWP%EWcp4bcEu=2hg4Q$*c)s zDkPrM-nlr-gcZgauJ)BloZ^kN!6BJ#*B#@~PO$8QPCj|s<}w@y3bfm@zYC0$LL=`? zTNAjwSzwHQkJnBT!Crm|+lj*^$9AG+WZfcci&Oi9%@N#HD`ur~J+p|r7*ZF}P*e8J zw_C;@H+^v5{2!W2H=yR=o^MvIZwd1wM$edj{IEmUIJ#1@K47jzO)I+tD4$@AGjrjh zJHd|VtOcd3fC#dDX&?Qy-ofLs;J=!GxoCf>Z+D-01`OidK zcND5$6Z{!zLkDRq_ih>1SG*=hR?3r1jO5jn9iz=UF*-z;6*yREgAHx7*iFAU=xOBh zlx-VUS%D4n&a@L_Kh3}mY-l^S6EFyzZQhijEq|6bNu~8-RFK?vau=~{^U9xH`|D*Z zcLP98$%c#0oPEphpAC11^QdY6)+-h+xaN+(Ma9GP8-;53-FVd{mt20$-M9Vj;fMYm zI+QN3E_pb#2OwTA4a_eE7cROEirCaH?yeC+y!u#bFJcW253Kn#o009=cjT?C>s{My z#FECgc4J;d!#R60sOqOq(Kb}XcD~toSR-wdg!S4J(Kg?=oqg6(&a$#+320V`6K#XS zwq@o-+tg0%5_f<$SOmlrYa{JWw-Z%92oM!uU%gnI?dg~Ab$uLN0a7aPBBcNTE%gUh zezAO5$_QS9w2rTJvVGMjD|R%Vf5Ev0IcWe8Y;9b=W+k>3M=7Qp7TvjX%j%^oHl1?G z&40N5TtP|;9Lk2#Z9${9(4H>W?PSj4E zZp@*bXha#y!!(Sg(FTBq5N@jAv(vfkRIfX*(s>ZVah&`+_8BqrFV8N@>N76AQ}MW; zzxv0U7dK8id4X(j^d2!>ZcbI;i_NKZRmv`QImmEKR@}aJ)dkl_veIOSu zx*H;;2b;uw^-@e^-`$!&4fPkSO^=Xh-;_@@EX~QbUZVm)Rc){*37gVR)g|o6>ux}q zwnE;}T_sBSOg1zwamE@L4DI+@(n6cL-{cxGAWs&G#Y56jWz-|8dR9Pw6zjg zEzCgkkQfN7RmNMw)uh~QX@ffYY-Mh$&3YH6c4Fj@Y#KwWXK51x0)>Mubbq}tqKKsV zNy3d|x))+Bv~9~KZ)U-$5kqBlN`=_Yjhm$0qLD-T`3L|?2TFEq-?cByOS$=l6DCc} z%S;1+wx;UsyUY6x8ByFb8vv*n+rD)h1TsgD8pZ)u9@tYA^bG5rxo+*cm@i|>v>An& zhV5iStxY?3?5wJ;r5<1ZL8Hfv8YFA;hT8Jd%Jy+12OcchvSaVTKz6~n@e_OJX9569 zvF+Qp`Lg;A$miCrT~{BB7WNxDW#SmW#fOoakv(bZw3LiOpCU_IvUA(+k}`?&_wPS^ z^r(Se4gj#StaSIDl3-gXH7jrQ=m~v`b5P{>?%BS#vK$Zy8Mvp&j;EsPc*oatt`G##f!Jj^U@|1psJ?uq~ zxPR}K-FwQ~Vp4uV(fA4Ddt{~oiU&&eZr!~PQ~Z?`d)Iy|4H-2$FDs+Vzq2C_v4=x_ z{k!v2Tyz%@u{|p7tPxtGl(Oan1EUpUc!R5JT^n?hRre^V2$&QMVOCNwj~=Rhd1BPM zOqZK6gNQwCru(Z?)SVV)Prl7_g@{JlsxGoTgotL^sFFA6R-!b8XTdf%G-W*MQh%ax88WQU$!3r>dU^r{QPrAUUJ*B5B|nS#3lcJ_<=_j z?XQb?IS?di#@x#vd+dSXeRFnv`_TngKYZI?U%27YlK~(cth)8aYe?~=w_pEP7AL*^ z>fat;T7TXc-@jh}$e%axnb$tLXnJ3*(uT6{Z~5Il%f8u22;pPVw5$R5J^J{y7t98L zua~}Y(^H>cvvBG=|9-Kyg%?C}{JgUkJ@@Q@yc8kSaL?^GH0R8il3Tv`?az6ULTdg! ze|+%9tIzjx2BEdo?!WGu{~I*<=l^`>1~1@>#n0V%|D%;HA&!7Qz5i_wKYZiGb5<;Q z@uoW;t8NH-2u7o^@h6txq-}=as}*MsA;5?|$M}SI_kT9N4}3qO0#e|J*Y-EO~d^!D>O2Mov2S zmBmjE@1125J7R3v+t1wb`@fad$9x_XM0(2UKY!?vdx!RnJ^F`RUi)B$5aOS>_lD=Z z-p5}1-{q%HJ#-DAt4qh}A|y<}Xt=qNB86L(bc2b(2HUN}*Wvt$1#qV*3E z^*t<m8%nN z+do5Vb8aVQVOpfE(^jHuZQ6;IIZIKd4Pe8Z;SW~kjNi+yc>`3p(k&HyYeaB%*c=jM z<`xX;U9jPsZ`N$uBcEBf?Bh)bYsQWkoaKRCYu>rx*82~%XZ`kpNB{BnN6$QQ+=p*H zb=SSm@)C%AtiHZ65>ckVBbAz(8=G2!GW!T0tyuluqPM<0{k)4WJMYZGRKwUt+1BN| z%WKZL`j;=fviPCfe;%&i{>Y!7sEbknhzYTZt;-&I^oilq&Uo;V2d51$TK3K>k3IFK z1OR}+Xw%nkJoefrn|^l7?f3ldmx1=mKi%`l`rWmro1#=~YHSP!!vvsy`^sPZ;^xXw z_O18+`H?^0J))0i`HBq^6*jK?Fs*pRoew|p%1bX?GaK zQnJrJ=jYd6_1mki`t8MdE{s9|03ZNKL_t&+UqIShYHFG&0Of;E{Na{o7Jqfzob#W0 zZqWm`{nQ_>{_S<)>fz&>Hl)d-Vs` z|MIuhe8CNO|M{PPe`M~|(eEyP?Cu8^@t8V${=zfoPT~TYvlm?Y>uYZsH@JVd{@`YG z*~3AUK}*dv$2e2YT)5~OB#G7p#gYao$|DfNE>>*pf^l;(rANs2K#4NSu6|LQFEbJ^ zC)UTwnfE{F`I6n`v0_&KHMeI6lrOZU_L@h`CUKX9^>GdjdYsVcTPcOUXXt)CDiU|Hq~OTYk~3 zF~GNe{Q1h%o?}iqaVAL7|NQ5z1JV3v7d?C3xhDd^yc1_u9GJE8t2cKXxYq0SbHuP0 z3`aPk#h^$4;JfnHN1nXr(^(Fz@8=R<3w+!_KPuXhGjJKmfsa z?QIV{a^EePellx#;lgt-TfY3$`u59udN>GUexDIfzwqk$bEW{$j8M%l9stZhGr#=z z>h;@B7}?8wUmVAIJs!Y!{Ce#0GYdp`c^wWeR+_uI(>asYs@+_mw)Z&9Qi2W4B=F8a^%sXw{) zpNpR8ofQB$yKh0>|6P0c>#x5(ck;~~M=*q^oPEtpi~iO>KkMu{$F2GHw2f;&4GRC) zgSEJ%_J6(j(!Nl^%db9r<>|)*z)8nXtvhSM()V86dgqnrUv_^{|t1%-ceyF0`>kqb03bh74kF@ZMI%hA&F?)5j5&`%}GL4Ujjp0 zW1c*1v%neJ24S+Sj1Cnxo%*ZU&{ltL1MT<%mubs?325836SFW?Zq~M9x-Yc>8>^!> z?S$nIOs<6O1dP%)71A2TUA0nkSUS8;4s!B>1;qs^->mtvE(Xn2rRz8C96n|Ghygvs zaOTIbTO;fz>{W9YYWxYH8%nwag-IJ91Go?u&u5JC|K4mst_Ia2@t zfSbEu4guj{#I8)1 z1G_F1g1mz~0)S;=g?Vi#V@5~XaycC_&<(Urh1=3L@VA{0qW6mdSbqjXSg*U2w88Y! zX88liAt5N&t}!$ST+MBw&6Lh&v=O*&l60z_n1Fgw2*l7H7}+@^U0fP_%pDs8XiGXkE>)Wg>)OdmMu+*8Ip@!`hJI}T=6Y%HyAzV?RsSzd_n ze6+o_XU_4t=_wlXKt=|YfR9NDHHgQP*(1Y#mPmX3!N(uIbMb#yP?D0G=Bq2;2YJJ^ z#z%^>qB36V<@DgwoZfvo00aT-6dD1bBF~4yS!q490_nz!xP8s1 zcieTy=6%g6fq>6TOCylX>ROT3W`N9o`NjHe`cr%XUyPST<%i_FL@CJU_2mar!a}M<4wr`gm5(B3eDY&LlZQL#$(soaM5K*5^ZW1OB=-yZ!l-|PPv*A z<1{$CF$ty=V@kWLn$l8z)aFX9BQMH%bx$~AM;q0Tc;sza5n~=F+Dz?exE-ZZO{3e? zi1HLn#_Z7V+Gyb=PuqB?6yjunFy~F=Z$_9_?$hcur07IX=~ z*m=xX%N-_YU@}+5E6x0k5~?D@b$_zIkVy{p@@9F8^j#kAq)CxZbDC zJstpn<2*iJI93ak_bNclv=#`q4 zMY#6T$};)Vo^2b-57v4-Nf=2q{OyKysktNX`@PLShIe|0lAsK@gjE1ia1oU`QiwlYxsBtP{&4#ZXP$BT^vTDu)p}Mkd-+iCbbNJw*yktt~ zMs&&GP{T9ijkk&VOrZ7&U3!(eaG^kuq>?(mq(R^%qZMy%Wr^Avn><0&RF#MFx+jD{ zd)7T-yh+!tC+{F_BdNs9b=sD~(fTF%2Naoujy&1P3f#nsNPMWd z=0HQ`{`U5EOK}}Srv#1w2;r8RhRS_SH3xY?OsVnx>0S*8>DOsn^na2ey9=h+gZ#HZx*}3WQNB{KU zx_z_e&mGn$x3Hjh?=;W5um0oxgZi{99^<+}$T{oBs^(9Bb(=VuT~smH_Bl&-t+ zm%sjE^@cA#c>OOgy_4Q&*wiV*v^tq;5Rg*f&YV9dMF>6p=LbLfa_#qPzy947SKjl7 zS0Ip`o00O}mhV-tL2JW4r5Lm{&7(@&PJUAu1g!FqWvH6l<71BV|s zf693~5Dcj>GXxIvsxmH)Nl=PS?P5ut&>CiXxL`PBV=uZf za7c6Na~xFd`0C^5?%TI_Ck4ppKmD2qUMnulO0tt-2OILnYY2q%`T`usp(F}I2S!^B z!4TaHWP=#&Xm=i_qBxJQwQ~JiPv76x8k%&$y|YjI2~e?%p$4`?Y8q{iFW~WbkV+!2 z^e72PTRwbr<(FTlqw$ z`GKT-23?0I{iOM)r9J;H2wfBfc)-}+0R zP)j5|JGVvPRqs1;p7db@^Y8k_CAR?}z_@vr{_Lk$Z~y`TBFX95S8CiocgAD@@TKSd z>d*I19Nq^2BuNZMqP#=_0Fg!_(P&hZ04AJz!EIM9{qrmDo;hbJ0HkE)-*DSGJ&T82 zdEwc=eQ44A8SC=WB`MG&JC%#6@e^aG%^BYF#fN_P(}%!w*NY$CKBsRq8s;Pc5i$w~ z-Erq#`)|Gd{@?uKFZZN|LXqtJKKDKH^!)Mt0DwwTM2PUBdf$lANF0KJ^5sobpa{nHh3fiLnz2s++4m0HD%J7;oEs^cSK~$kKsZha)vS8$fs(z7 zr_|#iMD@*_SI{4lvaocMSTWNpE0)_vf8}D0msjnKA@Mf)TSg!BgdZo@;|RzzhYG@Plk+~ICJ`O zsT=^nm`QW~^PiW;O&JXU**yn5_3X7OX#_QvzjhESa(tF(Y*xw`m z>}*S5Mp}N~`xY&pcg2c5`>O;>iu(?lF>^-G93`@K{H$}|dVT!V3H`eIqb7mw@Nl5M z5&$T+hjF#O!{n%QaSTGBw7fysS0_eAG0pVh|^p)g5WN#1u$?i#1o)>@5L+ z)SN!k&b_{%&*03A08+VsWAb}D!thMQr40ZG92MHPta|TYSyk`W$h3u*_&o6@FtRGp zT%bcPX4uo76??Kn0yiag%IjE;nhSx*;d_J-Krl`0>>Oh$%u%aL4!sQ8#LN2_C<%D^s+1vyG0Ql2#W}SNWEW1ku{f1xAZ@5#&?nO6Di|wMj(1i;p zAYxNU++EAJMCcFeGNV+aA^M!-xf{2lJlh(^y(#9BKwXF5CZKy?x`31hT#>fw;BL|Xe%CM_Ur-7Tne@jAe=H=50O#{ ztzrKRD~=t0F_W)?nk9a!L+fKGXE11m1cIF6%K zlqAaDI{}V(IC(k-Qc0h-pq9*zMj391shab6ispy?Lv=O+TlFe#p=ZTxQ za-}9HZLNr<`bm#;A32mZ2OonZHtCOh>()m!{_rc<^VxSinKRNg6K`nN=-`#KtL(l)+`8;FOZRz znJq<{4{ZDD;QsQyV-^k^H9)b72nQ&&HSDX}yQ#ja!V}0S8aky{|Dl1D6adwgqsbW! zicPMU5JCvVf>nDqeAQ4}1wcIMd3}c;Uo>E7N+3X~#0p#%L9DI5?!eaSeI+rT&nq5P zJYqstZZ082Gt}a}H3$Jhgh)&M{>>F7yLg_@D<0iz*w~!Be4_o7`tMCRj+2CN?cU}4 zcW#VE1OzUtXyk~=CuL@510o`gwKv70%{(6i07`|{rs_b<<4eo-`~7^RUEpKDdHksv z9MN~;C4>W{t#$kMZCcS(Uq_L80~rG+&F?*6sMkXna}$MdYcvujUVmC<9`Rs%-M-4b z8)~a6eE$5R;S+if8sYbQ_2^@h$%Kk2q&IJ+mD+fg(e9WTT0)!V%|MV~UxQeXDP#mZ zejhn>>z$|O7T3{_4=3pbVI1EB@~MRK*_SdKC$ZA ztp3x^yXlF7ybRe_(OkBE^#@OETfZjU78XUG^ZHZLvU*QgFlE6tqsC1jAnE;Rj*B!O z`2NFZHZ1?Rsj*QM1OOnMH;|UuYsm3a7hXT=xamHhm$vSI@8O@9mmP?Pf&fsrWBCg= z&r0dhXW?(2A2woa>56BTyz-AoOgi~j|2$#FY?K69BXK@od-cx$KJu%Bl?O+hegByk zU+v?>Xs~?AQ#Y3E*gJamO{bhY>$B(X*|G6kJ_aXUK6KEyA;|Nb*Bh!U*|_u{Yrpug zJ=n&_qJ;AV(zEjhPMUK1b>pU;?DsOxOHF2q%LM^|5KiLT_bh+ytN*=JS5YR4A^-sA z4WwoikDfdGqTdY~F%+q!NdWlp?p3dS{lN=0mDPMSLMinH(ldJYA2sW;$@4BMD9ELD zYZB-n9Fd~?*S)*^y=SV*tD@mBBK4(Yr04b;e$wS9oc4b`3-YO?PhsUeT=RjoD_(wd z$F_Cha7ext&X@8{-?7tw^6N<_o$iOwnt$K8=IeDrtPKEKYf4_fV~*FKcG9(vPoFt! z?c2A1_30OBJ^G&Un-_)+>Mx2S01}UvZ>`$!(Ua?zz2DT(B1wYWcv9YdVc7BK&Aj;f z-o=Gf5((iv82SFwzkK@6o4JEeJNLRfE7!d6^+#{FwA2f{KsbLOJ+o-+yaiX>*{5G$ zDvGx4Ru^^WEC90`(6JmsAQ;8nbwbZ9PrtlFXbKR{laZO3INhO#*B{9A2kfsAE-mAT zAbBjIJ7PG{*=y$pcev;bkQZo44PRO(h?3H=(*_01N!bIf1Lz#DkIFcp(e14F91UGb zf`Ag=+E^V9h2`u*Bq&6JB)d_RC;}3Xr*YdCAOG{NU3>Qe03n>m5MogDPsAd1UciJ0*7v1?xQSY9TC=$XUAKvl7 z6Cb|ybX%AQ0M6s}csL;zYOdI^>b3hScke&{=6iE;(kYdc3RG`}x_t}bfZw^~>7{Q! z(->@*OW=SLqU|l!C2QZjzrL(`;dQs?^~_K@C~3>;?cJ9$#7j1zr@Q zjr-OwUG!TnkTvD_NwH8%xUEsSFG&nF*Aicvz{da~+S=6KT*p(7JkpN$f5j z5YEGSJXGSNZH@a^zwx;@=lq)_&+5n7_Cy*h1u zX=of&u@09w#p@d~GLyOut3m=$q=B5l3vYZnRJ&`%;wM^pVbt88jh#4|q~>R327q`X z4ZA*h@s3@4O98w^V`ram+7&%|WJg+Swte~H_VsHc^_!MFdwWK&e+}&0Q=-UmT-DZh zR)4V!0kZl|nRWiJiU$nvd7!PXbo=sGHm+J3YdY}lhi~^EIxZunVD?oHw$zq=^WKvU zHT8LeCZBlrwSlzs!opti@Pr|XgINreiSQuG5|zps&%y2Q9}t_kKu(|G$7N^d_3B>? zNTgWv@>lQpcI`?8$nJmK38!Dxr{4gHZ`rlxz0E5=2uG@yzj{}CLH?9!lc^-3QF`(* z;kfqdt>3)$WGKd`_ZT$u;#&re9OvQ0P~HB`pFX#F-FNl-maX~dgVV3N*6$&lhbvq2 z`u`R`84^WrX734eFCIN{rq?Sq?BBfZ&w1-ap{|V&%Wlm6ffAVs!2ExIq=QP zOJ04fl@}q9H|f+%M^Bj@@L_GqhRt8RSYB4MZ|y%nPD{V&H+TDq1VF@a-B!i^Xu`&d*<2_syq5d;RjapXxj0?-S0vwQxek=Fgrl*|9S{ukXxD?#@Z` z77iOLNs=73K{SUB5`w~xrTE_t?O_paJ)OFnt2 z#|5`Nl$9P(!YBa3l^egS+{gubPCnzZA>*b5yl`OsyKBGvUnC-we)rz~T^Ej>I0-~U z^rG5I0rUgCc^ezFsd+OcI5%&`aitH7$3)muD;8z(BZ@e`-;Gvw(Vgi2fEd<+r<&K` zvX)|#~+E^g&TE+uFB<$s=a+SzHTX+WU=m>B~{4*%e9Hy)^L*}v|; z2liY#eDnY+(Yo!QZr`vG0CM_FJN^1c2Mrl42ekGcJUk}UZ&>|(Yx%~q(()5doL4wB zSh3}Uk{vt!X}Ke3UDz`XC5a-MRu@I!xNz;Z?>>K5LhxtwKl$p1rp}(_^>7GKJZy4d zzv3lN{bp}TMfsLbc5S?P+DX&cH5^Gw{*0^tGHdRssi|o|$iUGPfVM9GWEl;&R30cB zHGTrKT!+@|weSl=^ERafJxT+#1j>(P*Sx{*MGb(25FpSJp?m9vf^2UuALp*9$Z?U2!~=c!lh>A7xf=Ab@1phDDk2Y6$M@t_{@S4`2)rR0HtA3 z6cCY0q9loG{3E53KqXBWDr{~?k5x1s5RY%txp&Ms^_))&jqm zhbF-(FI-Zx`qF0%6`B2!KF1uJOS4`*!UBfTD2=W}bdwir**j zQIU^PBn89gAHU!#4*?-^u%c|6NWCbAcCTF;iiyONI`-6G^dB@p5@I4B6ZohUMp`;wp2QHsvFukk5P?wV1{DM{b)4- z7#lSx2lD%xaNhQc_2re70MKv38G{E86eUTWtVsYcr{9>tqlQ<1y}G5MGT6|R)vthJ zV9I%SjyWytOU=&8NJSuo^8x@zJZ%koo2&M-EEHY9d{y)V(K%{rAJk_K4Yz`N0)VVO zlg3Y9zyXyc3IK%jM1mD%do}_^U4edhJ_HE+Avj}5dDZ?u$Rqy_)T|my4HR{Ckv(h{Q zFXeRVcgu~%z zui*p1xURGO3#06tWq$=Agv9oLzdH8+>|J-99mSEZo)`9QPTJM3(ke?JAqho9GDrlI zY!iIg2A>a{BaV0WVGNi%d^nwPz!+mP*v8n{*aplIOppM9gpg2{R&lja8()4iUH8Y# z^mLkeZ?%%G@Jjo8n$TVSb#+a5b#bP-RIt`vei5<(nc;%={^e~uq+VYUr7 z6yuG+aH<3Hgbr7^omc4`Y--OmRfVQC$HM=Z{mu^?WfKSf{_-15Ei>kvFzFwfFipR@ z@^vdxbIRhmVUj;MqvT-EsyEj*jGHoR`ac%%;ir)q9JZH^d7<5VZ)at9fq&7@QKUjB zowas!X7}`2CW67~47wdW=H76hBezx%fXyxCeq~aoHjBJ9p|oU#;6Uq^OgaSsQA~Dj zdkc8?J0T&GwrCar%ydUO*#|Hh!KiMUQWpwk(?f~Aw&Y;nP;YzR{%sw*w+(jf*tKDU zlL?So4-S)bz!p1?6nH76v;_35FuWcM#R#9DAUV)ZH zDWa7;uziOu9BW|T-i-;1+o~jFgp%EDkthOSHoha1gP81oC1@tQw`>Lg5(-)Ij@=tp zS*9m*5{_CudkljBKw@CGX<0PY-#3&5fathIwRP2$qN6YX1gTLzZt;6Q=jKT{NkX<$ zZLKpf)7#lQ2mocxGaH*mqiZ0rImzMDhPv@n_I7W|qz|^I%^@X3@@*n?*edhmx zG}5zFY`dS> zhBsbJCE_|Gfw;~L&ZCc>X9c;(LF7eo@)-_?NQm%GkX$B}%TfU7-1f=?|8b5lE6C=| z6cuIWCIU!l)!2E(Q40V_fm#+qn7yKu zqNCW(3?v~iSb&9m>~~1yFDm4xk?9C9~G2g@!W+ibP_S(UPb(7y?GC8pGi*AP}(j zyz-l;ANuco`+5Mth?K@kOGDwZ>iP){<0f_QSk<;?n}G3^V)(rObrjtoZt$~hp zum5q~rq`c3W^`AC0K0Hs@u}n| zT`<&LJL*mO3B|g&l08WYkYolocV?SwLoM~j;ok53a1t>L!}w=7X$<3_Ax#ZoS`b5|=r4N-5dw>Ee8d@wX%ccPE;spQ$fJ90sExx>E z{sn#Qt^Mt-?X7R^-TY?jniXl&9Bkk6+}*c~8Z&MBw0d_0W!wc{{84>vxnxujAckR3 zYDFt*!kD!%Ou2HS00bSt;ga!Z{oA)&ri@VzizkLbC}O0dE*c4?2(d@zC^4wxr}D~| z0N)!Dd_U+2TnK>x79b_g_=06pN+}Y~iDVannad6K0zfDn3Pr*e6&Ryup%CB(a!^Sw zSiRlnS{p+82t1|sV<@J{T_Eo3HMh2B>&n7aWs#9@%YoEN#N$RJR#xh6w}qID$7#5v zyfkWaH?zt1w)RBUs;zHm993&Sw5)6*k&cy?N1e?{F%eG?BV1M%1At6AnX^cFEV93C zZ_X$gJGMFE57o@3;)zUIWmPl`i9{k4EsKS)y{#>tvBr!WR~{2~7R_anogE$Vv{gT< zaa4V^EtF(3VOmgGQEm&w%H`sTRAp7A{k0&aL-BYxR#v9Nkc{`Y?Qb`t4F z4IJp|=)g9iABR9FILxqSXFKF=*DRHNH+>c>?k90 zB`tgy#0^uVBKZ@gxVJC&*4|7a18g#=QW;9-1cKxGCH5I4_5?dNla7T{N5+*4`5iJN znH>j?QYeZTDk&==VF1$#l~*-Qoo9g5_(5i{Hu|nf|&B01_+46)l!WMMe48F>dg+&q1;4Kcf2~FFQ-v^o;!d3l{=iG zS|G$ke7h|(sxmZdtPvaWz{)_!_A4*FC_Cn~Uq5tjQ@H^Ey?fq%-?I0Px$FzSxb-X5 z5$m;Q9=_@3@2q&IBNibRgx>$JU%BBwzc_AG?9FE${J=-Q_to#+_1UY=1c1bW-B(``{%)m!at^MxpzofNO?s(*>tIurF0?2ml{N$A%`ped#2mkn& zcTI;6|Leb%O+9Z+@A~_G_vZxWPF#HPZQuXlvIQ*w0BFAQn#aU43}Q{ zk+0r-!*!#|GT-^qNA6$I{^;)?J7vZg0QlX{umAjiJ$U=CpZU=8lK^1dt51C3-@g38 zFMsb_A3se<+e-ZAuG?tjmMwEQKZRFI(hY^lua?fDo}SVQ$)==}UUYcd?!z zA|Mj9mlvWtzk%x~y1iCE-dcv*Kjb+x1-37|#inimYLeQiCzQlW0ciWyH-?51XqlGj z{#i6T)cNZD|M{C+Km6pcemFRkH4KtTbW;-mB2$)}S5sR}sYR`vWttQ*HP|`WzDt4c z`T0GZ+$o8sg`7YTFxTC>CKb={JP6_B%sW%FnN=wN&t*dq^xoJ*-J0^ zcv&v!+mPKeLXP3@*55ye}nK!@XNJwL@5PB!6*;2=NSV>d15q zWHsjz4wK5N>Kd!cSFLwjbzyx> zH${^e)QbQ3hOa&N_q7Wze*c2m6LRV7z+l&7_uh8z-(I`;>T51uws7r>f4Jp4zsMp0 zz|Oay{p{yHzh+nNeIL5!i(mNIw5G~CzIWsQ-uZ+TDxW)f^xh3`zqO$i0MHs*`Rw0& zx;y^<(rOC;0JprkVozIdL(@bqX#l`i{(AS9{^OQ-)zs^6xcT$fd|=1xfBEWHZ{9zc z1%P!gJaPTa-%CLK$3FeZQ>NEEbpONsL+OxV7y!@y`j@x;?9rJ^F1hhr*Ds#g($Ud9 zcE;@aGnxT&kKgy*uiyH!adVe_>)SV9b-|ghJpQY1-ulZ#_J}^vc!UNAI%YNk0gbNP zc6@QyuObCdCTF#FWj1%@a^jc5=@I4rY!jE&!N@{V*7%B(E0xVF{D^=%+1Y8n(YsJl zQJO0ow{YTwNdVBZ?YWI_zCuDV=MXbOjBsf0TYp&f@*g{Ptj}bvlFCv_DL5_=w6`R; zH(5e32;{cD^6Q=3_5c9727;Zs3(X+*IkW&kX}Gi+LIwcr+3-fjq=sPtAx0=N)b`fu zr~Z)hpaR-`0`zX3ZZ;sLG+H%&^2{Xwkm%aH;iboN)G!Rg76S?btBT z+h0~!fk;{V>j?o7LM2vrYy0-~@2q^PqoczxLI~(g$3#SM9KV&-RS0Cl3Ck*DF#y>7 z;yrzRgQ0NPagiD!GugT3sh@4%_I5|>)>uQeyiV0gIy`#D^2(Ah(Cm&^f78*~ZF8`X zz_n66YoEVs+r~FLS~o{4D~vD=l{ZXWxP$;?<9pXW^;p&-#2^SjLSZw}z4qlNGbV&$ zHDgaaiSSK30mCo|(bkPfG19X5tg@&9kY4-LBRzfbP{;rR00ctOOz+OsPyZePj9Al* z1*aK61E%;2_6(veVJQFvsy8|t)u@}VXo(2LC#tvGIkX|6dpfUU9_{KeH}202rcJ;R z*&NY|Q5T+jPPVJ{=_gkJ0AT8gr=AN{ww!bJy9i_-y7!l>c35BgpP$|P`}q;zj+dhZ63H{)f8CQ$KJ~{(?>l#4vz&7hGHB}2yKlVV zuHV1=)7Rhs!*4W{8Wu&!Sg~l$|K4@~J$L@(!G|6?d-23qpZ!g1zX?|2fnWZ7-QJR$ zZ@>G2JAQEejo*Lx{<~(igdVu(r+c~+OD=kEeI)sRe|wVx4DH+U=9azT5_o;}3++QD z(DaHIpRQ<_edgks;M!+~0hyuB+kg72T?Y0q?Jv(aOg-yocm3pJAOFmqKe@G~seayB zS6zDgjNbhlzkmCEjk7L(=(i7k@}nR9@xu>acf}cheBi;&yZc5`K!=+SfrmqC14Os9 zqt8W?qexmp#LmIo+j}!Z8B4NP-QhYmBEW{Ly-L%qL%lF;0L1i0DzjgbaE)0&9K%50Qx)j?Af}mzo$K$ z%Tb`!jV)EBF#y=R@^`O4^@oAJp433k{!P#S-@P}t?%BgZLlZp{NGRCc&cyX->|}sa^nzR_%m&(`U^GfWF#>)!!@(KAn&+P8bWX%yeImkH|UeH_Q7~+h#2qe-k(Xv*X`IndDi^%&t3=s(em1> zKYT@9RS89;)QV%Stg51-A_@SdWwEe<$^HZYbna{2+BPs@LiO&A>z{jW<%*RX%Ephi z(mOi(21ZsuhnEh`VkdDfQgPx&kqRS(!E|mzTe^Knp04P;c8Q3$+>JLXtqtR+g{Ye` z$8nIXXFXAh1QW}J*xs=s~1zU|vdX?1OLWq*55qI=g1_ug>ASywMP z_tH=#R#93407HA%{OSAGG>)Hn)-|_Gm^is|{H%#{=JmY1GMC!_@&jMl_UgP?#OT_& zerTY-eAKvT1pC_Cw8*7gQ`4%McKV|CedvY99>~UfpTGNSn_pZ|J8E<;)xT%s%J{$l z05qR?>D*-(8DLM&^u*%Lt)O)5{P#?r{JZU~Z9Ct%@An7Z9ye`HRo&=#&(6K?ywug+ z0RR&hUow93B&1fTeDulh|3d5DFC6IZUH8<__itP=di>;22oCIdr>%7h0EA=X7rp1x zHMJFJnQGY~rJ=G>3*Z0weH~xx+~2X~?+mYXlHykaiH(!py^(?Oh0qTu%9WKpH1^^gL z`LX+$e(>ND9bLy5FeG4YgBmOg#oinZ_TZQrumY?}Fri%I>qW@b{UL?T{S zUs+z_G{@mc#4rc|M#HhCbEZA??BjRbbX2FJoeV# zU$QI+hXEi_Q&&ylh#pcIp}}FBaL!<$#&=k>J&NQ*h?vP)J32D&?9Zli=v8&vz=bg6 zZ-`J~J5Q9rwyQ*1nW7JmXy&p2;B2MfJf)F}=CiN;pQ_s1S3UcO#6a7QH``d0Q2FRt z=X`S6<=2*k4N4I#tE_hF@~dyi+!m|2eTS{rew$rLT9e zeZ$|&$1Ys79HV6oC!TfL?k(R-npUc3_ugbYolGL4Q95Sn2XBfGer5C9>#b~}ZNmzi zPvg{Or(gErt5rJAc0HBu14X`-)!H6xq^gm0>8&^Dj_krF6d)7U_ z$IC$3%{rvCm?AYJlwPSVHj@689^|-mGUVZb4C(WUjiO$Md69B9nMKC0b zgHW{0EC87H%ooX}qZ7DeIEWTEfS|FS=}?$@gKkNVm^M&=?cHWWWx6~Xsw@kSpjt1x z^2#e7d+wIMz3}3weNPWsjTc?K8~~6IBNEPJ`!lA+T6=gvFd{QF5|xGT|#`wIZ7rCc0PDUw2n z*fp42w=Xl8qRiC`pz}P4n-U>-^O2qB0$ZW?$CjxOv4YOKK9H>eAOJ{dw07$9>wcCt z&4y`V}t}*uC`~1c+9To-p&YmbvemID2t+S@CgoGQW zESfa;%&Cjct*ak}riu3CazaMWTz26XM{j!h@y&0(FwlR17?J9+Cr&!)j7jsCHMdMA z)S?IkfLgio#<>@M?k8q8H)_g4bj5C2v|;A5^FBLv!pc8wdhMCso^BEf*N&S#*LafY z001BWNklk*OPhvVp=1T4&iVilzf{ic17@nI8xtik{1LFzP>n01pQMq)gn< zo*h#inNebdMzG)c+@;H=kNe3pk3Ue+_3E@G7oReH3;;w*Vzu>+J6CPlyt94W+z9|+ zCHuFnT~}IKKdPo42FnRacJ_DK9D3UK^d9INHNMa(0hXB=-7@_PpFi!nbFcWpcW*gu z-o5iCHwJ`{lvdQ#Rj=H>p|#^cV`Vb{Wc#{yZrWT?KDw@|3IJx#nl*M*fRUH|&Jmkw-)vC~hQHc_5L5-Y7LD=Ql!p&9d+PN)!GCHkV3l~u3rY;Wrx z8eLus06VvAO(inKAjw4kOK-fnH)+1_7jFW-lA-%z>ncU_{C%&O6UbU(LN`q7iMLb#~K?GtM$Ilp+Ae zKsmn&g+rl;VT6Ey`B=fCGm zb1(R;Wtu>Y5aVE(6vXiZ%Os(SF|*GdbK){;Zv{pSBNQTp0QJW55GfduaSJXObMpDF zv;iqLOj$a5%2KeMTgYrpiX_}PZE3@lC5tZms%4r0Bov7np)fHBaE2YCQPXmAZOeQ+ z2|;-%4aI6EFMf|54w0g+o!9HFPQCS{Q*Tc=V)S5ch;Sf5*SDp|)JAH`je~Y_G`Gxo z_Zf?Cec%Zo#@D`oc71sW03u~I=Pfz?-aq}|``@``?5)>VMakbDyXTST)}MaW7p6{b z>`ye+#H`;va^Gd=E-Fpz{Py+#v3>v0*u}#zdQ6j^_^!*p{moB(?#4U6dE<{Bz4unX zO)C)5sA#xk>1ls>{?6~+cH2$={)O67J_RC;FouXjef`-tsyi^Q== zG`?uwf)Sta=Xaxp+%5315h)NLMmTJb!rCeFO$)L-*^NF4g(5Btq?T(3P;h4AyN!gi zlE5{%gmEXN==hc$5YEI$q(Gz`>6hscmIpfxVuYflA$O}jwzx+v9cKSAX(J$52mnSn zVuYg3dUFyD+3c?c}0HsKi6Wb_kL5#4%O~At4Ak z($bAyAoWfqW(80AMbTVXr(ldw)CiY&Via@Xg!GP=lBFr>iPp7%qRmG{ryT&>rb`o7 zhRvrXc?!i_Mvk5U5CGG}ZC$x3o$1-*MzAeMtornKpHuqaQ&!!i(-tpuvm83-@(;iN zug^UG=-rpBT~SjO+O&Dw>RdLPgt#!jDe&ilsK z)xP`Et4@04>3e_ltrgEc)VqIg%cPd(cs!fUmXuY^nK}Oczy9U**Gpm%lIZC^kVri8 z*b@&u{NRk{v7f%~x{Y7C=^NL5{5SW`uQXB{-`PCo^vf=K@5TC=EJp@~Zo28F;l@G4 zbUL%GBhi&0p>T;|u%kKk;Z2Jgn3-4?8aJvU8jX&8ySgGB)kG;h5YN82CAp{HqHbGB z2yutVS#|8`39|MF-Hk{UXNG5X1S%M^I+c3_Zt5U#ci##D1ysa~D0;({M2XarD6nNz za&-Ab3@JY-_V;8`S__ZX`pm0N8AT7jT8hzvV+S{A~EZM((b%E?Ml+`yaKY#hmsV!yYRinqW zTyoh5Z@l@YQ%{-<0HKnKB}-17Ft(|_q3)EkF1-GR8_t+LbH?0-^XJVD0T2?NG-J+L zXU;DP>A;XsX~n2B&U)9(X=6&NMx8u=-l*pK6K0+`X~Ni8ta8Dkr6H{P^h`dG%bY23v6+Qv(-ylnYt3!-78 zwxOwUbo0V9FZjp@FRCc9T`xu`QZ|3lsSD;!3lkVM;e_+feb55)>c&n!{j>#5jrF7I8ZNl(>YKj#_4zX<%vo?oU1;drU%zGYxgUPyfqOo2 z?MFU*^@p26@p~V7q;BqoXV0D3a>BypXPw&EP#=p$>YB$bzvznVK7Gy9@eN1vp6I%n zo`Hmjl+ynGfhX5?zSC($VwItg!F|t~&T1x`3tNNlni@T2=IHYB@}qfA{vsU$N@jAa zcO{?OoJ{ACui$u9B&=5jAO-NMPyj%=H|9o{TPcN!7eM=*zm++A{bmg+JCq-C_o3cE z*TM#_#?K2|D@+zwW$4TUPiqBnj z{r$iE_P?rSU|FU;D5tzZ)3idNFlWKqfPq zB(rM%VKm}797r5TuUCUPr`4+-!6FsOvS?d>c3oRGl@o^Eq>9fwP{n)1^&o-kt%`1B z`x~a>vGtxJipe2&{I~R64sSOOE?^Bqeuf{j59CBWFl0EeIT?8Hh=^0dEkv_76VrDs zMA(D?8@LgfQEv94AQL7=NmeowPvDvyNw8Tn={6O*5+T6K&TW>70vox_B~;>NqBR18 z^@OUja!t}e*m{9`IQSY<(UV|-%gIS0ebk%TL9Wpw8zP>x0RS;=l1&}i=9=)FapCB2 z4qms($_zgHm#5RT`rQ|vsx=bWwzdipr#-e&vdAQln?-8#*{y5~=qylwFd7@D0Dce( z>lqSagxS0jLI9wlY2xhB)%XAOd!cyO3F8~ucC5eW{s+cPS$gTBX?(P>55psnMs|3c zvzxi#u;f)!*NZFC@k^9qZ#=hpXKMdI&T9}r?)TY2#hwBHJ3365t>L{FE|?zzL7ezt zzx7lWy_cG<9mey4I6{)^~$;LNBqVV4k$4J4mJP?qL%XL zSQC`L_0sfUvpdb~83voUuu%(}6SzhOTx$n>yXdDUwx~rXfR`G2u=zv;DT;muV9Ldw zauNLW#FGirlR{uKfm14$lp+?%l3>WiBGw4p#UCJW+pGg{9o@Wo^R|eR9fGtkiLdWW zHB^Si)y6_0!h7}dQmVhZqc6McL!Ub9q=|*cIu2>v%q4f;bLY?Rdhp5L-t+53y0WHz z;dvkY)aO1wZ({8~8`?qANDL0b8{+-}i2GNh=Q2MCZh2D!ghF8ZC9b%DnYrVg8!EEQFYv+$3#k+Y zyGF?c-#YTJJ;WN=f*nSPK9C-ZpeHI!C4$m;2h(uWTfnT9qx;;29i%5g_(YSAkwu|% zz}(c9sVNIrl?EKns-e=l@wfc+SERJEzWk`^n*URX7~#_{{J`AP-#sumlr^nrNojRW zO+{%*{+LH99fD=CD4cpsIQ=Hv{Pe?7*%s+&B1&mze{Rj5bbrcnl}2>abCnwJ2L=$U zMn0mBgt+Kq7>hk`WKM3z9ldvQEbrEXZ6_)@*u7ZVW=bXA0WP<-;w_(B9=3x=fvrv5 zO^(6Vr%sfNA2e(pzumRwnAp8(M3hQLE^b%g?j6b{ULb6jmH0&G!_n!9 z+c436tTjeZjITC+9z&wjWw8+uxXGg@dGuT~sAR9b>hwYPfuFUZi@?DKALJ@*J~16L zVDgbTIH~9&q6}NH`4qd1A<-|UP&9;SVC(W0AaG4I1*gK0@TLlH5ZwU@0>8hQ{QI(a2m^10lu1srpHlsZ?TsjPK)#te&eOwmXT4zyjM z{LC%skGQKFi<)>m6C(BuOVO`c~20Nm^!=?}PR5ne=g3jqA-m#FEq z0>{VhoqMOaqsy4FWPg$(`=uU;JP&LJ9(-X7e-dntw=ZlJhAI=SzfQgLt*52g4{v4&8 zcU%gF>TQ6TiegCbk=*xmm5<{ucRj^s(jC_zLUb)iA$8<$^BdTHu#pd-TYjNo1ql3B zzd>7<>0$V|C&ff`+=dBTG}okxL7Fy`PfwHrEfjV@Xg8RwL>ypnr>rSen){#-*aZkY z4{VK|>mD=YoO-)sj()>dfiP4oh|m=`*X~QzRfa}Ys%NSdsYo6jqO(+luSg7#zwRy4 zF-&NhbXRwJ)a!A-5#oc?8tm z4aqya4JCFc-}>*D0w!?w2~SNFZv?;d487h&hwdW$bCHy?Rm z6StYx^gIZ^#=PgjB#2)zVH5Rxr8V{QfF$~ziA!k87 zW`cTyq$f<^N)fBbRoEF5w{~V4t3szu4M)O7o1;j+G;)Ij*|HRNoFumj%bh<}G&_z@ zLg*RFt=^sP7&L)Z(`qkOXR-2?7OV4FUGG$yZhPaKzLXS-FLd>{uX9-q@597rMxWP8 z<%R9b+uwfY{O$Q*`#k4S@wOQgIB{?D3LI7O1$0WJfNJ1;dV-3!@UWpUflEmh2wTOk zb;4+wsHh}UW~8uniR$&lPvE*+RZjq*FKMmbogP;knKUXE4j=rvZbdq_X+(24Z119N zRj{qz*sZtun>;jGq~nD$rnP=wYS)1*&0k{+gyJ8F7is|6oY36{q{Z_;IPybu6Gkzm#$*P;r@ni?^0iiZg{iow_)JrsI!nADqp)isn`yEi$M zHj7^EBKgq>=WqZhUJaGxIbKCNKFGAJ-972``%(jG3d67O0>b+l7HXJb*&KO;1ykWn z^1==dGc1OM(@2Cl64(b#sQmizFA&u~(&i|H+Yu%3yeVca*wmgKTa{WgITVQ$cl0Wf zhDNwb1>NaLY|ff6Ib1vSx=6)w4UE?QC6CMYSo z=^~1Jycu(#Po3kBj(IEqE+QW#SWols^vRAE3A+UV z0??PFtM{dL9mpWkLdKzrbiC2wwnGm|m!L>TA7yja=KbldU0KsP@&Wa0 zR$iq>#9MF!ix*l#47@~Vyz^5b# zmI#m4l`ax&kH6TK=o8Xh<$)c5U!xcSdP3wzQDzlP&Xfi5p`>`|-3I817e>+(8MYgk zqafJ!G9YpP zplEy?M}&w2iQL+@)SmvFQ0#=$4R&isv2Wd1x}GN&QVQUX+9C0n1XP_UGG$Ypk?3n< zp1-En^^X|b*s(wo?11)EGEUfk!La>!2CtJElcNCG zjDwg5L?A#A-6ieldgMKSi{r8P;;ECvMVSas1z<|wLyoAt3eXcTJ1j2>Y_2Rc0uO)< zej)XtWO5Q$`&w*IGl384%^#*GL=Yx0g9h_!c!BE8q~(cS2_|S2_e|sc=04_QE6RSSkXc7XI)3Poofb=E#nfCE>DVSj988*T?o4dy%-EYqI$at^i8o18NoKf8!Y78B(krMI8y;+Q00??M9QF1ha#`j$ zsZJveU_bTdv#eF`0`z2GUv|~bL{*8=R1+)iJz6B24&K92;AdE*idz(Q?GjqZe|O|Ev2OH`6P9k z3*Z;r1J+AJ?(ybJMTIR!^e`6;J6KQn=cooK7`EpC;oKw=%)*P$gN+*4ObFg{^e%?0 z-VCUqU}BqgVjX&2mF>ZndCEEDSo5tD0MUCS1c9S>l!}r) z!d-IhHRplggLskoaTf(8iVwJ;oWP}VI3ctP8^p%b3qklxhDn1{%bN)I!T^S<-iWfE z$h;-kV&dK-CU7dsl+%;^u=Q%e8=Bl_VqbB`Jd2hHXRdK(w)f$;c4t<#8V!|^QB{#c zuqd)fM>!qFjlYUU#&JVPDc#qbd8aKM&jc)l^V0~vOJAVYs8$32j&%oF^(jRRNX4(U z(S+1CF9l@5R}R3L6_VwW7tF9is_oneU_0-`_D|E?6~Hz~G9oX@9tkFW7*4|I6YkLJ zi7K363J&IBR;;;$fbE+dB}8z>g|j*PxiySgF(OY@;QZf6C_vgAY|j%gLfCMK1fExW5r?56Y7zvXKSkH> zP3`Z`A}wyqalF%^*lE;u%W{5mxpP)DI*w_Ir*mufB;MSWG%X6^HVsaN=#8)QJyUNl z2?B(=dqIF0MILxp#_U*7ZM~@-H%4dv0MCZ7PBTBQ!94QF&*#v=wr7p77KQLr1{5TD zVXN6B9&9x?de|&c*39v9Q|$kPVEd)VVI3B1ccy@V9CWZbJ+WaEcM^>xaPWf-2PJTj zqPR&DIYY9*`Md|KH!pC8pHE(eZC?yuPb7&1>4}4xQ*F*oNL0XndV&gmJK~m(Y;9Sh zwlrK@8TI)ni*#Jj;rDUL)<=3rucQd_{|Zt0eA+e_5};KT+!0GE|Xj`J)0}dR{o9pjiH}70g2VehkGu9U$*u z1Zu9dKy)bFKVDA?Dq`Q~iXr6(n}6(|s^&2#aLJb(P{e+)6_(PIVQ8-3ZPucj+S9Gw z8PhB}IgV=@@uX2eboYDY`!VixH{E2hA{{$~gDG=eTe|f?&a#~W?txVZz^^3Xx_xeM zm0N9sD4cW!;2NpihRdQ7$L>U9LFh*Xlrx#1CqXY@3!dL zIJPO9v$nOT*X~PZO{e1FD?YV?6;#Epv|Kwt-Y{EsZV=IS(C#(lZZIz3kjFN(`xQwS z3@~!*7@gd3TSE!3eNk~4*S!_D7PnU_x`5p*OUDJM#9)Ica5uQ#?#Ce5g$Nvm1zW{0 zS(uz5QGlKVO)Ln4%>?crmUv%Ua^!e>;X(#9HHsMBOQCxiXa|EJc=vo&->nXwJ zdT-o7y~KpeFpu2J4splK1=yZFBZMIWV2Ql-xj`m`W>Kvt61BUk6Szj0&dv>mz?Sig zMT~CZURg5OT0IffOfPMno^VbJ)k}dwD-6MUA|$HO6F=CBvT^y)ZLllD4iq>K8 zNzuoJ#sTJ~>j&HK!{p`ZK1gP)H+Ln*)kIGm7cz{Z&2c=^$PEtU^iS@b6zSL{97>z( z_NKOVW+`>66k7${eK>&dwW;@>RhiBs_nlxVpy=@+?%oB&slmMIoamTo8~^|y07*na zRC1Lm{O3MI%{9BA=)o5IeKH#cn|tJDhwD5lVLXS4cNqX%K`3=prHHK3cfUWCH&Ib> zxLlEPJ#pe~^`P%23&;zDEk&fV80zGy$)Jy(2w~()RlOZ( zlAaJn&)wu?JrNiN3S52&dDYt!ILfai*ui>21jI5c3b23Bd~N4YV^z4Jx}-R;avahj z@Nh5-+wDs@kUmQ>`*;8G+c6DQ;r{Hc`{o^AAX0Mvfx>!agGu1@82}nOPzxB%zRjXrf%1T5v^v;=Ygv;a{c{zziiBt3Yl)!{ z##i799tpM=aX11OK@bpko_m)Q`ai&U0UK-j&y$3$9851cw5ppea4iF|Ua49YeDHbAQ zOB7l0EsGae+^j+a+b&HBzZ8XX_@MwjVR6+4S1n?#!2Og&8szZP6IGaguvLvx16jqX!o9tjRlAa@oLvJ-{aaM8c@spxd|KfXz(jm2bX8G_rIOqJAki^* zrf~WsO5`DTKUAoOEF88Pktl%G6oX;=K@EVdhUZ)FfYkk92Wv|J?0l&5NE>_v?iWRD z@PqWkk2o_cSbGc76ArK!QOlFFXT8~n@#9rl0YZP$TD>RH8#jwh$Z`kS!RJSbz>c;eiad7lP$}#Onb~t+{B273ivbP|F8?ZpoogeGNK@Z!li}_g)`gmfk z?VJNj08n1kD@WIjQ21sxUtUmpC2r=WkH_xa*@0{c5S6}Ku7A(le;k8+CWsGg`LS*e zjGP=3IB_(@IiA-~+KPra0(S=j@{?G^8a?5{k?ytvB<=uH-Veann=qr!X`;<^fC631n9?KVImZgv&6 zi%Q_C_4B)NWG^%~SwT))%I_h9?J@Tot5Q?v@k73d+Lizh8Eo%=9)<)P#rX={i~%7R z3Ugn9i+LFqY;-yB0?_c$O|akvB~J3E^?GMc z^DFjw+zY`a?kWm$TBPYGa<9EEo1KcQaNa*LfD9l2ykF{kx*&!_;k|^-L&Sk{LL-8Z zDN$B=JF|IkGpXvEr=UiQi^vrwleQvr2}uF45x{AZkW0=VHj^QW@8q%;LWA&%2M;Lh za-seO!S;$-lXq0$v0I&+NJiAqTkZNr0(gk3?(u=x_;(+05jA@)xF5E?FhaZ3VsQE51HCFO3p=>|Zs z&oril?HbEMTwwun|RnqwYT*sqR?-VuZC?-mAe}CqUU5VbL<(iVLveVYi#8UzGhJOh{ zBxH3V-*Cw5sYPxMGI8>d*DSjsSc3*y*m9*TwE&1bV5Mo|SAYu}tOsg4dWN_I+qvcB z006*Sbpf31W`i?ESfAK8ILjRZ0i>)+m5PV>MdY@H@|^ST|HL&h?T}i5b6hyP%WJ13 zAjk)C^+b?~s#QAVqMrElg0uqH>j|He0QHuV1+U)HSulQjLR8q2JcLJ@ zTSU1mIM|X-%6x3t?E69fd$di_WDeHsO-&sgo7r3z2^R-ej&T}U0qbUINTzj>j();a z)_iMEa(8dWv_)!}fvgW%Qnb`p8ElsPDk*M2O+ z1}^d-+%wxM@MSoxl)MHTTz`iGdw9?V27ZnOO>n=~Jpj24+im<0g`UWmIm=5IoSA^b z)e}Spn@y28sI?uU)D&A?uihxe9wzbmR$1CN?E|^hyAlnR(WdH9aa)dKn?_`C*u!+5 z>y14J=@JjJ3N6wRK$)Dip)L99j(9vxNx+Gv4xxI@&OLE_{wP&Awm$@=x*L!i))lI0 zvCc-fdx^;PJ*ApIulh+LJ>){yPFS13{K~H$nSPMRAQMxBy859N^ zMC71>ZL1ZHC zOlPgP_a?S=WwMrVCZAWKIHUMZ1n#74$M-I6b?=dKdbkjVwIb5-;^?&`5)yf0gqsBq zh6EcCCFVRT_f|&EHE-e^4lXbIPwc=la2;$YKu;KW29h~txF`A|wwZAP z4^r=-O%Z+78vw9yJ>k^blZcukMP#tqf>rMb7TLj}lQ#GYTtK7Cq89dngt>A@qPZqI zt*MNV;^FnjARU6^>1{KaGnVavNdnAA3!Fw4=_sL0)>^+ezO^%*G0`Bv`fLCo_Su9! zjOeN$(k~kkL9QdKOEhg}cqoE9Dix97}wJGV}D+`g!$))XV^=LB#ed7E35 z3hyY#LSO?ga1NoS%9pa^_D&TKhyUlNbQQoAxC|Sdro!t<7Y;9NgG*#W5_WCbe-wt}2zE5LSO_`znWyXFxH zqefe#6q!MgUrz$sA`f<;o&>;V6rd;iL^)~u!Oo*6q5(f#J>g;V_=EL?3ET!O=y{;D zWj&D#m8%X4P;Vd*&swYZCZ;x)&TFYC?stCd(a4s?y4on&{&H7_)iXtd_2?iROyyqP z8Q;~L0dQ+Qp~L9aj6x%Zz%R!{HLz%s_;!BKi_1OJ7_35{ifu9{RC6d_sGTtmwy@75 z5gP#X2kbT#+NMrbdp>KN2K?Ytj#fE!lwiVSD+NN|sNZvt@X|`C-f2B6Np67`}Rf zy0|=SpT=A(a38S<7HzPe2t;IQYhb%3gQwo2f_WEe>XM$w_=WF9NVx#@78OtAj9k%p zIrY&Kkr-f)EeTR@03Zaqhpg9j#hYp(6Y7oPz{)X3BQiLY9;xS!^BO4<(6AKgNTh7e zTE8c;eqS=3qeSP3cf1U;NdO4K_KidiOx(&30EAjy48uit>n58s03f*As(bpSbL;!( zPHz%$+mU+xEk9I@lN5lpfXJl;b_MUa#aXtzCP0L(Z82Fwnpa9hUsOU2JERQT6)bWx zapw+rB9aAOAZ#g&e9MBN4BPeaBUhbxY4Wh`h!Si!Ee&ifq0kii>WMBE5n=P@fehP4 zE*yi10EElF3!8wdCt76?Q}@zS)Em?f(-x)!L)v~uNQ#H8)e|l|g~I0R6BA)`d-~1l z_^66#d8}w~98)w>4+o%V{DR;%cSZu`@1;mbE+M76dr~WQ40R5fcIQ;voU_xZsaU)5 zr&hB`be;*qO+BN|R67t%3oj&aBLHFme$*K4icZOeE^B;kOI@_u?5N0XNDgeSJIQ4Y z_^dJ5d~{aXa$P+k4A;_Wkb@{~K8*m_JaRp%yd^@MTc=@A1RemJ0Y(uaaL*+^I#fhO z#Rm8#*kaz;v`vkk_|-`~mtZ~7t688hl}~`kBVB??>k41l6;H*l!shV@>j^{U3;`*q z_;C;kwr9!^W>GWz!&7f?vGpgdH+Ck*)RZimR22>rf8(%7M;RR=4~JsUBd?A{YvZUP z97>z3b|$uVr75D}vuvK9fzMZGQiY<9H}jrb{#PB`4RDH4YL78H5$#(EA-9Qu_tt?I z2%81tdGe4D_3fhMl-9y#6aYIw;6P-Pj)x68CJeduGvt;X33>EG?lee>OoCyn0%ynt zKfQ<_K=W(YGrYj_!*+S90@tq;5qFZvt0z2u9*iJ!1$KbIRXqVt!g-3=eZm__5^SxW zc$igS%()~=NrvqzhJ;@&;sEt#fC<3f{_N{JhgwFJG}pw6lShvk8nK6ia5{qg3jp^c zBt;L$Q9>4_TicVXcPHW*%2!o->(+pxFDSj^YEKkFNY$cROR{=C2zKz~ z2Iayp4Dx`vgaxhF)z<;7j-Sv1q%GyWkPi+;*j}q9Wk*c{6+Xd9yUpRj2^_VzT#E<{ zwhs%fz(oc=sPgHFf0{l4Bs~d4?x*K@6BS&5>MJg8@Q3N$>g)zpPx9I&`IB}9o};j7 zf99<{iQ4jTX*8l|RHUPgMmP-^ow|fGQF#?CyzVQ~Kb@5?+$Py8Z6K2d-U`N8Q4ix}{E4ogqa=UPpj z{Sxt_5ZJ1EbI%QcfwcMhj-lqN$h?*+!zg+=js-dtTbmb9^%v>Lr)0+3urINxJ#C3Q zP!ErecfgI5%IY`93(Zj#|iy&GkZwXn(T`PID@}pL?2RjNz#PZ^%se1Eq?E|AU$Dh0RRmGeMxiWj-jTS$js()QXE)0%4uXy zDn!LD<=-k7MLHrWouixDk{jAnIm@Z>^Ou-k;T9BGVdl0rIGof`jHqJqi>L{zuux&B zEzGb}=OW@kMU=zl`@}Sl6;bC)-IE9pc-ZAUl1czQ*l@4{Ke&j#N}yw*XNyND>>%~V zgN4nN)Irq*8bk=Ny*s^jPkbnyE4C#^JB|1(75fK4aGn*l;^-lybW3~U`OO0d5+>i% zQOb~j?Tod{8pNf~gzGhd>)%4h3(qYqbf4Ng2e~^S5+GC_QjxkxEG;C2AW)+0Jmga? zGWVMMzclrqpC4=c(~$tU`)W%A%}9{ba~`%>J0p>i*x!h=7Y9ql10};|$X$U8hkv8g z({>!xioo5p?F|x8N{kzL;+RNccVN5x9nl~NoH)?#MqGr4?Z8DTjvz{5C8wY#4o?IC zV&94aN2y~C;OYr?8Y(9;4RTKN)TuE{(ZE#^@RC(Hpcl?%g#=yTeCj&ntcV>wu{VPC z(-Y3|!t}(G0OwBPK)Z^k{V;_iSJ)QDR*7koz^Wz96JP^;mzH_McKo&r5m1@K?11Q{C4zVAJ;!DengTXp zC}PyWc3WGuQ6?^C)JIj2do7d#7=$LylY^dX@cKk{qil-qH1f#(C!Efw<>}cb8rb4i z@gfjEJ>l?cnq9X^R+ed^D`KZn3xdsFDWkt`io|*Cpy4bifjmn|%(VjBW=fQUrr2;a z^00%;kAPCbtj$JAPl#SmxcXZ7F!ivtdg6STu1%JALKAwn320;`3cPD5_v+4}v2`Ua zql){TAH{U|SE)FGigYAWE@y3SPp;jYOq(>g7`bke-)sE?xvu422w^nLy^fMEl6)h~ zUJ`!cwCxLbshABuNYob|a-nZs;MX8!GcW8sjhpUKf%`fLZBah>L9m0{AL&A;Cz@M- z=AIn#n0EOv1_(uc;3s|F3&%Yb?ME-j@L(TWJyE{aVd%-Q+}y*_6GYgsKQ*->URxfj zE-T5)yGTbS9UAwPw7|N!DCMXiN@;6%>bcDW9fLXGKXYRL2q$6-6XH0JmUn!s7l{2Q zHx68H$acVr6Xy9b4u_9}i@2R9qIaP4pj=cOB8RI758P8OfNiurxq>Vz@9a zWE_7j5zgHxL6_p=sAfP)cT}961W)H$}?gQkC#!cOmnWQJ;e|DeO zlNF~%9zzi@;b6;48zk=&;aS*`+)lPm=1lRlE)Q4WE?>TgJv~90taVVABus^xKFIy22D_40TTb5$gg-q#I5&*RzOWl*eLI zMuXF-AkL`8aJdc3f#tgFT{km;y9$BuVG3f%F#&~1fnbJ*oFze!{ey$kd1v9sVT3L8 zW?fmSMXd3&1haK>JzP2ju>JHTScU{W&|Ik<4ic<(fAxk!M8QUW4zr%{s94fOCuiBu z;>U`(Ym@lTvtYm)zYD_!|Iglc$Jj58SL(8?e1-w zK4)5E?Hi3{vIGkS+S-SmdCR53WVmL2Q;ewG2^@?6l<309fxWcYgsS)YS6VnBzKSt$ zic=E&FoBm)g$m7ULioU9iU9u7m2j6kauw|b3usNQ18ZpcrL;z+=KrA&8xdw^xZG=9snr=vMNrn2F!~`2A z%9Ci=pn<`eNU(FDFoq|=bSbxRNeW}+iKJh{b4vP0Q@i?Ubp@@hfbx!&e=V7u(qgR^ z-}&JG{p-pTcYpVtZ$0~0zklM52I7ld$Zy@ead&6$xUEVl_U38pAhBIQK=u#(!eW>H z-_Sz>3EB)2++~|P;|D)M5}tkt{`yLIBnm1%qUI5V+EnDsbMe;^ux0#Wq9J}>2}@Lm z%9t-HYa;Bhh2{;8eiRI98{sOS#^4I_Py>pvO{h#}*WKrhNkrI^!HMWI67fW|zw|H4 z+ER%~Ath88pfdABZ*VQD2zn>9b3&dd22Tpx0E0yrtQ2cZo<+eU!8p;dIfD}sxxf<_ zpmT_H525RZX_e()LMEZZf#N^-7w=(6;uJ;)28YJR+&3DCFP&RoeE0Fke(IaIkJ0f& zN2Eie?#@1IaMY5vEub9I|BDES82m*5;0`C&g;6LWHPJF8K6NE>1f!6PVMZRpj?0<{ z6(!^*5mFCaFK{k7x)!LFMT;tUB;!Y3c-UMgB06aaHUl49h4qgjdBVX48MgnU6rP}h zJON-+)+AH_Jbozv2*~*cc>+8s6?T$}nFw~I!3CF&GX7|u@NIzgaZxQzFG;%j!{ajUfyYnKdpXOAEOl0&FS! zaj+rQ;H+_#^ed>eC4#yxkH*e&^II}(6@NlwYAq&54^q@X)2cE9mdY+UDw*Coz}o${ zYFb+T(W0*-+~yT6DnG87C&t=68L-D=aGfztMdNK?=^L?H`e`mhYjULgjg@~DnWS?# zln-o9BBb?tA+2zdilp+Dui$aVMXCI#~k6Ln2Wj2k}?P_ncQx#L{t2VBB z_W76BS2fLf%ZlUY&uCj@Wex>{o<|%yqjlU`q9%5nR4A1zdATZ0idFK)^~q>&->o7%mV1$yym|@ z`k~+cb!D!q1`8ua_cIrL{L43d;i`S6RgLamd)Zsx+Bx&|6Xp;7=vVjdd-O?fIsLRM z%f9PpH(&kVU)VL~W;5xcZ7)Cl;v2vHjpG*2Qo%fU%V#dX{^y^(;f}9sNwJ($a83Prnl@$#Sl;3sFTSWE!M`r7~JOP~D4Eq9WNnu-)17|zdFaPT+2ed{IX zEGGc8F!GZduKL_fKN%=MWiCBhu#YI19eC?O$~lq5(> z{*(sSb0!Q4=&~sGr6BO>QE5fOmRhnHgL9wl2rfgdV78&YrHLsW1l7M2*)WNC!afZn z!A`&vUNf@Ni2|$`+`AUDGA@G$in#>*WX-T6I@vL>o?@zQoZxjwkFEk6-w| z6rM=sD{;%e?1ZXJws%Z(M!l_wRjd`5Ev0>}Re%?Jb9Qw(Wf6!AJ7B>1UjH z1ms(Pd;4!zZCJlgn zeY{XT7>&po-}RrmZ$k2C-1%OBcJ?g zcGkY{egCK4d-2(Yo{oP$@n~Oq`l-hslN#*VuwnDm#YesW(hE*K<@lzWOu|yLUD`f? zJ9@1#2M9=Wm%IxLCt39VE3KJTfhn+B@ zq=Y*IP5q}vjOB?CvJ}`c5w);6o`8znU=ta(YCRqeQGRHnn9gKF1-}3o0bGP!3Ti7z zIz`4ezAek^DHEOH0LAwLgu_C8^ARfqh+PECU3T5KzW#~J0ATN_))k-n#_U7Rx#OPS z?LW0@tZl>D8&|x%Ze>^RVE5L){NJ5_UUcFGcijH7xlNS-aK=eTyzQiO|M-hrKm5K6 z4z5Tcx^yIe;b*`5zhC&TsdYJLxc#PYd~IiE^-uov+xMS!1OQz5p$jiN?bO@o(r>{a;>u$`SxNt8nTyzkGc2Yp*Sz zy8rlMlah1pu6N{L(YdIOorI{Pl)wK6B$uwGZ9% z=Y3XO@XfD%DtYyyln##3Z9OnF=D8GcSmBkUUzhpPVy?xXXuO4(%9br#$Gad6W{=eBEgny!fgOG7&8IAwf*ZP zMM(e$( zkN^@8JOKh=xHl`TjU|fXx-;i4e%Co?d6&(zW&ps!r@npvsZ{__(KvnH!o3|bT(E~% zJ^Ij~le+ZsE4io}Qk;vD~R=90%CDdgCi`U=c8N-uV~R=h6UBQ{PlsSuy*NqmDcBAOHZc z79Vjq0L|NZ1VBnF8Wz3hytjLmAYDD}g3HfKWAXX*n*rdW|Nh?>pMT=4WB2Xt>2BGz zm z(V8XYg296{Fu*L~Pr?%fjkP(G#Pg(N*dXu(4F->e4WKbNPj87Qs6>pl2?U#B67nRX zh$YQD?4eQE+6_ZvG;-5VS>6;fp&1Sm^er?Ui=cPvj|fZDj7aM$XE#+{;z|DA7!kQoJ@GdIKwUu`;S{tpqF5?m zP>`DeMl{*TgOtJ+G1s=rJuh?txtokV+u|qyYG%8$W-|*MB&Yt~zSz(!CZR ze%RuD{&CNDUu>sdj?hX~)HbFj<68lUI5bAL_rhRa{{B)-L}B`xYY!0l$#Ry8K}k4L zj7=O-pc2zq5^M=M1YHLcV4*Y>D%9^@DB0oua=C~{F2OFz z;7}q@m~xhj*r6>iVJt6=aao&3E;M7l%0z7{3U*2m9uYVrpje2d01gcOGG0fZip~X) zR4xUD!QQ@ME}Y%9V>`)Yn(M0xoSxP;+lESSj>8^#c1)lqVSe@coR?`$%SR?^0Yx!F7AIJdr_B^E$OCo`h#k@M(rp0#8Kn3QwY7Q!b)} z9FnY-WI>1z7Z=IuYDv2N`%Yr4lsZEbB`U0q#m z&3!-o#`))6^4JTTCJ~%vLC^NJ&px*%06Y4`gZCFOz3h;E^L<@Cef^6LKls86PM+G> zP*suZ+`8u37hlU})5Nl7?YGa|z3QKR?$K9Uy1b}8E$gqn`pVDUaO=RBlOhBFNIH|` z01lVZ?h)EH2xE4DLR%Q&Y^_0&?2eW2lIxJ~kDmgbJJ!e7rXF!$Qlkb#@u?9t^WVVz zApApAePd`e6z;1(gi8fPj4>0MTJgw1iyu>BrUx;g3)mJNd$xZ6#?Pt~` zJ#CejRyNH$?6P;C_37{4apfnkzTvYUn_Zv&>%F&M|HEHevz8uu;Qo_{jaVsa_k8GR&DEl_h-(X-&EPzN-4nZHP1fy z*QbwPeq>{{aa$}R9T}rrx?v!Xu70h$u7W%=!SY)Z)(Mb>O-TkNz zmZ2jf+?4F5^_P*^H{MknNwYCyN{SC6?EugRiZ^)j)LEFQk}|`FfFT0xggoICM!}Yt zoFqHiOk;`_Z$_DDhXYx$qmjJhQA-Gb#VH{mbzBG#La0j{<{x_9XFm7-tH1P( zYd`()9X}fzXxp@X=fTIF`N@x7mLo8NfR+Uier%bfD=zuuRZpyW<-R+Aa_OoknrhPP zU)f+a%=yZ7*B>;uK?B84nE(JKK!Akvbp(jSYQp{i0FYF=edqHZdEX^7XVh)qym2%; z?fR>(I&`nb6s>vpJI}oC=3jsAV;{V2{*1OAJ9E?af7{6`9(?S{Yp=O>;XQX;_MuPx z<>8h0-uvrK&p%zAD{kAqYteD%T=k&~vldh}Oxt(S)W@Iu<3~TS`?r6%|M>lzOg6L~ zZ0Vz&gTz7p_%7Aa$hH?UQ-Vm!wK^xl3k*=1lF-f_Cs7+=lZg^J&fw#Q4Pr@2os7wX z9gT`lWqh!uv?j=tB(NvW6VMraf+8t--C*x&gR6a-l6XRNY>~o*LIHY5U`H?3SI~-5 zj$kg!>n0OA_^Wjg(aI8wc%Qo_!Gs3u9e8~44*pt@_~0)>Af3$~c*M!ej#ylowE%!v zsrsgwr<`)qUNf5fB&^K-2QE48n4@bdbNelQ%h5|0A$5_YX3pQ|trz^)jW>Mh&;>I9 zAZ2Azl?_XdddtyAEoMtQYZ_;tdB&Ly*%T5|UEh54@>9Qj!;P1my<7{6q@a2Bq7^5e zviH0u%YvDE9eU!4$2K=q0RSPXTvgpM%ipr(z=dgleJV6gpMT0JCr_`k?*94DyBZJs z!4GbnQ*A@0ZppIauet8}554E~Gyx!~qmDUl!IXN;WSXWlpLEtm-@5t6b5B1elS<8B zwD`EU95Z9~+%wKOwZ5jNrlxAvyajK&-~-?I>K6~5KMepX>!&O}Xi-hWl*5)Db;5DW zO$UD=(yjrzxr+{rfw&^w@FGB$^%5O~n#5!YCWDJSjP@i%@i-CJVI{R!Pg<%JTY1 zDf_Yj000pwrTzT_55C;-!Y-Glt1ZhCceTkg9FF7EkdagOuUvM(^y;eWJ#+?bAwM#l zAIs!&b+t9gV$i|<0T)s=wKbX4Btt6n?z-gEQ~owM=WlxeMOBFSLrPVJ!Qp4y=8v*#%OgePh) z_)|3#^TY&O#jl1@Ve3L0U~@dtpdm4^OJHwo0LkFm6e8&z&yxfOPtJ2aY({UJLdPI% z>!OtzQki`{R&wNrx_1km9fa_O+@{|w82atZKBBc(ffuV*3(MzGIAqlGJtTD|I$b~Q> zY!l!JgR8J5R4Qy!)-Wh~6)OK*GPpKt(Xd(cQVkvvz+`Veb*;fs7gBpU5uT`$1U87U zS$LD#)qL?hiAI&2ClQ(A!SHS*mM7Xv)WJ5Tp3vZWr~m~Dtpm_CMA7h>%E^`CzK$RL z;M>2v>%P&r)1STf1Fr+5H?2&3(J1=6*n{ppKl|sMp+L-&?EkKk%GI2C;pO`mYiBg* z4lCPZf{0@UXJ-#~4k1P2A7T-VL}Fjz%8v*j1YeZo4}kQVG!p(5B5|J5Km0z>=CAb$ zX294is(0io1aIb~Peeq(Cdv&yih&?Dk>_`q6*h;#{~e0;t5NRrO0>^0hnit z#FLUx@p)GnE0ul-8-Q@IeFi4z&hq$uz;UQzdBPaWbDK{N#Y+Yolkr4r@Fb`tLb9h) zL-C23J#@AZ&J1hE3!jQi+tzSmkkP$R$)f5+1qWl7oAk!AoZBr0^sTb_^J9VJuft{z7#*mBc*ZkcYWK^%j3j zhzOfEcrxSpfEc8%9@uq zZ{9kPFEr1Xw{+=|^Jh1Wjr70t!c)8Y2-to9c=X}z&2%?;yNxA!k26Yg*zMl9J!q7DGcvZrL!cDMJ?&LMP>@H@i7&w?PZV}mt= zAgR(T)0CV$R;K=q!g+0V-cxjlVl)m_2wU4jLfJi$&_#yfP>dwxQ`L&$rP^$Pu4VQQ z=;jH}TB!)wA`sv6l3)rT8o8W$n7*;WCGvw14hpbko=6dt>~rm)!V{(8k&$B@PYj(r zl_#1c%m!y+4JVsN3CkoixT;%I`T}e}S^lM?9=7;2?C}H2R8&`g8t5(YMCG}J+(d7p zx&mXb&g<8*5T#U1p5ENOIG%J5;kHg_sH9c7$y`0^j1Ap(!{i2!`*N@aTPE8kwJNxqIzyG@1esE1q=HK>(%OqvYJCh%S_b2>OaVYbo zER!yX=(uiMAKlrD1qT2y_}n%C0!5(c6$<))nTwa(lJFlzq)bn6DTV8;=L z!338=iX3bj1v@5nir!yf;3FeOVP=4N*c5fJK|l`3YC+P}gHLty-=;UAQeo>2E+ID; zv1D*icwz)VLFP&FESJa=2w{h|5_uA%9QDY9-=)x779I=(Z!Tg0#*+j#;Z@1sc8`gu zK8-TC7I|nQmEMVqn*t9TBk7&UCb2vL0GmQfKkn#uiZ&hRXOMNW=FvN@x$%el9ewUy z_dodiUwx;_>FygGO<9Bhpq=mNXut9cU;p#Nk390wL!Y|j#D6~Y>-!&lVd~t2esJ3_ zS1hQipLh7JKmEhKcl_-5gXfO*w~yG?wKx6X;YS{Mvm5T&Nrb< z)=8tma5B8jdc@MBvg{Gb7imjB_UA!b15NoKXqvSK0NvcJQgX5qQqZaiYj2;96uG2Qzbwm*c@`;V0%Bb_7PG9vs%!l&cUV_N^x!4X~oF zHh2D|A97rZ09LO4>aYI1aq2WL{mU-D;-|lPYmS}YIP>g_&z_Y7 z0HD?Tef{R2HZ^&tMIU(4d(OZ8PoLk~+7E}#odle3N||Vfg9KBOY-M_I+xw3|40X#g z31T~RS2x|=$G(}O%$c+9KU>Kup5P;d@r6?*9T63lbY!a=YDNH{Kmd>ifx``J-b5%G z8bdV07W|#59|X!Ib7I&5Hok2$!j{&8NXF#fHi8%cb+C;FXZWK4a|Y*HI01Q}N1BCB z$`eB)Gj7-*!H(t$2`^2kB6uP%W>#K9ltk}fVYXy#F+em=bUlvnE6FNsktcfOkN~#c z;6lEbst`Y)khx-pfTY)I6Z0n=s$~8I0HAFMYP+#IN2@EWNqDhh=hyA-m^x?fQHLz> zZXC4ah#Auw9M=T^AXd}VY1=lfUbA*nXWu}_mRBmWK>dAOBMwERZhp{#<}?6U>0DDI zY+Uog`VE_Vhx1!r+)zo#>#~#g4U@^3;XnXF_yvM&J(71?o?j!&vS-9~Y3Go$v!9MR zpxI+5tgQ+D0&|pHc&Vn#Z^sNB5sfo49AK&55A~ThHAcfm&IyAERr5021Y6h4`@uar z>wv|=27aignvuaVz}6Z(d?a3)&TWkxBSyha&J$w>lfmZk$MPh?jYws|!)9$HF^3eA z5s9JlgpVkk+iL2G>0pPsHe?4xdPkIqk{%a;TVoN$6UE?B^^vb5I#kFPzPP|8sXx*7 zDW#6D8MbIu$0aQTw4n<2n?_UViB593wp|#_XL9MZ|2+$ET^iPQw{Y*TZ~4ki-|rc= zYHBLM8R~JsbjG@!ANa|4zH-Y??<_!7O;xU#?;Ay9;C~O9j9n^(l|2B2Ckg-{SK0op zt@s8C;;2n`^)MZe|b3%{|+mzT(2m-2e;)01F`K z^K5wGZ=dV#+@GaFD;YM;Xq`E zeF1=f>KAgIQw-L@m1VL8U5dMV-L2i!HlAN6j5YYpXeOOOv~cH~DWdipI%fAXK9Tp( zY0>g-OWLZK5H{%WCr2)9mkItF1|w_BOD zswQ^)ILTJ+J+ryz;eR~8X3HV-rUKBFk3YO)XUEjT)5L<#?XR?tIq$vjgKs+PnK-8){`}9-)?Zv_+6Y-PAdCDR|&d ze>{2VENoqW-3?#eJp?HaHpw;5UD)^Nv%mV)&koyr=F!KWFm>A83=H3S_wSFGlj+>} z%r#&6&IpCc{*dUKOD53a2&m^xXAof9j=0_0-k&7LzLup#LBx@QyQ9Z#9YB{qSX&*l zO7BG3%U#(?v-|9lDB1vk&_JQMAuYJ%qxb`}*jEPHghc!r*d-|>GENz`ACYp@)sM1- zT~S6WTg026qza>QAee(5u-uleR}=bwEqSXCEYe*V0Te|L(b zh|s+6@-KesifeEB#hH)aowMNJBbQHaYIR)y4bj=}xcHt2pZn^kKMc9%KmGHmQ{VEo z51)V9EqC60(tWp8WU~hyzO<&j!~M7Z*vbSxPrs_;`4-o)*yrYrdK|~8weqJQP_;)t zPyZh#=(_Z^4rldlw{KK-|NPj+G*NFlB9X-v9drCl1ygQniy{tXWC3+flq7^LoXja; zEdjQ!X^kIMnGkZu4DFu`c8tNrA~rRxG01hPC*p~2GCUD%Pzc7wP0AAt!OBGo_e&8N8|hp7^6J*kzPjdF z2kf_?yM1TfwE6R9P5}UP3Y#~s+p@E@vVPjqC5P5ld z(S|fQF(D6Cy>769OGpu2JL3V?F8|jwrh5c=!f60G#Yot%gTd9|X{o+Qdf{yv{&F{9 zPvDP$7-euyk2a=W$pnPxd8kcXfejq~7@ml=WAY?1Yy*A(Kp?Z~$@Oh@tn-ENne4$?f`*NXQG4r9`e8a5 zfhaA9wD-*fJKP#2`#~9eDX>9uYLba`{S7~i+2HI^XmDX)p{~oNH8_u70jx2&tPq4E z=3$F!V|Zd}M`B?EL@-3h6JwW1KrUGuqIsg=kGAtTc*3jYi`c*uP4X=1Se}?9f{iM2 zdBdq_B8effJYjiavo{j*SbxHoI3LdhJGzKP;$hbyzSe;?S*WjmT|ebr7T6OV4uz4V zynbVH#i6uo$lcoI7935z)$A10j@7Y*zzLN^7qls`3CZiPBqFeS8IfXyRkhj@DoOGv zB3Q!wYL&!tY=Vy>Qv4U?iAhP4D5j*xQE*9OO-d0*D;b|t+C%=NNMTnWPOWh(vTim# z(Ot4-DM|K-t;-#ZJt;U+pxe7>e;(BlPg%-Rma>#3LI}XH4cof0Kkxo~AM5!hlnI|S zs_sA$rn-_Wr7BBu!GcY9^*Xx;sEq`4Z>_yiO~a#9nGpMXWpi*n8K zIn*GDNABG*@W%w3=ur6)5P)d17N)Lz6NsOjje$*sY(~(&G=sC*VBV^#!9ytW;usSa zy&X#D2~i-i2#H{WvV?|)s;*_3 zRGIiI6#~*e0`JT({w-X&G$%{)LGPSG;q(A@aDC_vD0+MDEC?61BLESQpn{*Z-Aok$P`B9`)>xtaNma zUW83(XmE}d;f4tA+%T^=JjC%l34-xS+i=I%uqj@LH!^m4$^_l1-<|eU8^hUWY}a<$|0fK^QC2?LD-AM5sHO7Kk4rsQrIU zq^Q@X2&}^DVrn%aK=36@znNEtM4E`9)93!z&?k&4!Zz3>JRl}q8fQu!*&W_p>C)z4 zhTRN5ipJm~AV0eNnIQ=k^5E5ciT4?7eTm4*S&<-jC#JH75p|l8hpmsRJVnF+0pm%0 zL=OkwWXAaz6TKNRA`Gj6%^MsN!v@w~12Fsv=#BDy(cnD2l>l1R!e?5I!uo1n>2Mu^ zxQKFJT%6sA=7|I~fPx@>JlPyxCRnhVRDAd>|RswABCuSvE`mn)wsS<3$7YR366Hed< z*ZQNAB-jRngE+p^z?KcpA?Nx+;cb~MVdApE1+&O)p`YhH%o9G>{FJ{JCe)mSCx+%; z#Tf-#h$kzOU<*p5im3xp61~+VlF=JPV}-~S*evl#eHvA!&mCwuUfO1Ymgi85NGJ9^xn;n;5%pr+D#wM%{N z8jeSp+e7vjfVHEXVzp4C+#0Wt#Lva@O&E&z`FMO!z;i4pMHbs8ZZIVTP?{|r6paVc z1eeeX$;qfNcm+cuV28@or=qPzG@RcziQ1NkdbG9*Zio%G4ztPx5=IU$W!NY@PYRwx ztDfer^mb4-riQOEO61^S>#lYy;$drh8(cq@Hzw-BD6rW)RZN$I4$?al0u+NN!x3Zr2-p}7 ztfi)b>y|Ot8m*DAL2Vd8nUygrk|TOhxbBiaX`_YB+I8+S1}X#W6_DbKC4-w4$fDs1 zDlwvX5^b2^9^tIbr5C}IID-eUk(*5LsK|4XPZz}E5VRU>W@>%~tLR}H+HL=K(ENt< z4%f0WFQ6b74Q>W6y=GFLtMxJ3tAJu~;OHG1oWT|kT<2gXs*ft{Bs|foCN9O6erT?7 zYb&g5ru<@M&&q^495g6>)Oq5vOo|}Vu0d!0Zl^yV_?giCFt5qgB@})MwUGGB!?|!= zXm1U8FjS*R2_Y0I5FkLjOEGnp1d0m7!skbSLPX>HS4|#_u+jf!pa(lxx$onlKna8q zc^4Hl1>t=}5M2fIEV`{vfzXeDG8xTmarap`&l(3|Y@Cj1x_(j>I zngu9w)8e7xR>A0aqRjgspm*QE6CO5lfPMTjZ1pTlHvEm`iSkIp6Ds2Oc*5n5>l_A3 zOg!O;qFscb!VYsCT0uXJkAAnp#FN0za)$YW3ZH0rBIMM>^H77(Rb^VV71Q7Q#9%{M z5g1S8X+W-Giu4v>Nr&gkJc;xtg26?4=Zkbh2R7D_IgM7@BIOq=drl_Qp-WsWnz~q) zB!Y+qo9^s&yNA%_Cm5Lnk;)*bx8A6N`GDvGFuq9+?wVd0$Cj(&1fv5Zj~wHoORX-~ zHZv<=7+tYKj7<`=RLiRK$2DQ1KEN8BqZrt6ZwZnl)ki zT3I5!4NZ{=v#NSvly2>GMhdPnsaclElnKpn1k+{4PYB9?%2J|G#I7NCO9#!{;be8# zRSzsHZ$}Vxgu@zsZdnrD;!yt_4yH9sJ)F%7*R@3oqBIR=nBdSU66ThpVY3qyIOJjK zoW_K(K|0mWG{HdtX!x2*GPtqN5doW(6rUWAKLRjcQd|_l;4)AlU=&Xz{1FjRgpHA~ zjRcc;!U3kj8~!M3gVEr?UjFdSAD3J_PgtS`i-fSj$P=Tblkp^+fnj!wvvyQTfrf9u zUVkL?CkFfw&6D`=*76fL3H*r{kTbZPcP6$2J9}|vy;G5~av7yslx31+LLCl6XHXiI zfbOy^@q$PPN1Y9AcHbC9zb6+j%G+1wg1FbEAp1eSXA$V}=PW}wqDDzMh7+7JE23fZ zbkQ~z31M^hCFH7FEo|X_EOH4pXLiBhzy$!oyiu@4R2uwAiZ~j%0y|V?GB}uvDIsj} zW*9IzY^n4m*!*=YPbB0jtRy^%t&*`kF}zSoL~kiOYEeeOjyAYz%piW05)|XA_~Uru zE9Y~{t54_vRs8(_de{Vp3b?7msjISP)@Q8pu^f9wCfMNs0OB7NM|692+-vEQ@=I%dE{^vREKFLGFbm_2051fOj;du)cxa4^59fExk=h62dm|oQDlOffb$*15Zfs0|E@PP6KSv z%ta-xk6QeEZDp{V!Tv<}kE?RIU2Rhdnfx5!SeOt`~A z6qZOGX@oewmqidtY4?!5se=xVsoxs{0Ih`q0Q}8C>TIiaehGmafXK=1SWp<=PskJQtSqtA6v`{dr*eVE!4otT zv3OTm6RB$Bij1#2F|Yyj70sL$tHp-wh1Kp7^ZA8eGd*sfgLxm=RMsDr~8C zn+)!|0x_d{*br7sCHEq15tib71cQsYkPU9+iOJ`HQY%H+5L?6qnBG{P5P-f>+|p%F zud^De%Bx2wQzrb9D!LPzG)P%|p_K0Kw|Df=F(+~e6!={fZg3S{7ZJsWY7oU>h>{)theoT=a}bbg zc_QB&7tW9;hN98mHq$#6b~0EoWh_%g31%W{L~0m^e}eRmK&yfQqm83NCZhLv`OMa; zCYxr8dJxMK0I(^x_R}3bwjH;Kt}G?VB%H%RK?d+NQOVfl+V35BBDGwiNwwY&2a z0FVL@z+gujQlSqoRUt4{wxpd1A-H^j;>bhmTEc7qNPP|kb_t-&fruHP5n*&!i8r{K zMs%|s-=u568(||i@{9BRF+9;>G~PmqP0NNjzc9m^~o?g9Y5s?$lHk z_nw-yh*h5Fm=u|uT`Jrj6=9CC#K!JFTyU&_Tf6Mme(JjHvk88^^gg~!_^e@c&)ch~~#h%B>b z+|i&~*qp(GxoHsqM{@3=09%;2W=BWJXSFg|;WP>9chk`Dm1d8R|%y1B3Lkw&w^Zq4a!J=UEhnIE@ zk=HuhsnxW;s=Qxia%4~1QPUwWi%}41+km~b+ZlBdtWpXbCqI$EMiT0f0)<))C_a~B zp%|-l;R_xiLGh#VSHL4}vIpS@DybNjqhaF3mST7%Qp}_-N|y|+fRhznG$s)?U&wJH zYL{MeNugq4@Zlv89tq>95(8U)CchKewik+cDTgoH_+y#mqsz4hLKAG{23y>!LymF`HW$DI zTR{*S92jgLj|e-MV&GEYEw40DD(plCXQ)g~w2mhMcFy1|l5QT}#1lUS0#du~Ax4bg z2?z#fae@g70(#goPXa5kP+WZR#V*%Aay-Exj8NXfXgGl3|A^%Y2@omgv&*nS;7MR- zK?SEBb@UDcGQ0AEe9q!v8+Z~RClVU}heU7AV+a+K>0$W!S}Dv9YW)cxju&CaOagx* z+tp7|I*8clPXPNzab26;SWV_MWi2ZOWto_azr$f1groAKERli;MVs#Ev0M77L(RK9 zf(9&7mw9TJbpZ{^O-~^x$;^}etIjq$I(!D+6*2t#z1`B_ANkXM1kXPFO|teG{5 z^rqbO8p5Yg)Z!05MJtu*-?8$w4eMPb0MIyp$$~`(6aNTo1HB_lEjhha{5%!e$rj=I zj7Xj+?QWd4gCB%ggB|NPzWf3JAkv1}2QFB=G?gluCld0|;HAM%fLw{L5w1B;LT?{7 zmgY}l=pD^^?R{}Ro)1X?3J&b(ai`Zg`&XnatK8?9kWBcMN@V#)7JXSf!QK()l~#LK zuN&oDA~w;3dXxdDop0>;&pU};-FrbJEUltIf~EL`5K8r*MoT0rY-4t0K{ITASt5}d z7zj6;j2||`sa`VtaRv|XhCjmBVLWWD!7;E;Qsk0h)u)jySR79vFr+RnErBN_lWTeL zcfY^&XI?2C_||LoUUW#xGiL-(wE5M)77G6|o_O?@@O!Y;?3G~fAg20=1Q|ia>?D4jr3{>lX6%DH1Uh`N681OLT{%Qa zUFivcGMLvSAj1y+pubT|4Je~g;YB+zhFJ_}gsl$br35&X2&FmC@V$57ltFa+nprCY zY(z?|OqReH0sy2k8PU8^eB){djt%t|iw*$*uqtZmve|6JTN&9B9KFRpmWFRp4A+z> zL0TLg9&jB1pg_`9^$jV@LXIbh2v&+!_H-r_jnKLQ zqg2JY64&$=aENpIL4%ev>@P{Y_*eLOYh2`fq*nQa!$$6rM z&4Uk;Gr|_*c>G|?BDKA4f%XUh)PCuY*FV4V6)Q#1tv>GZ>z6J&no>7RBCH>JgG-nL zgL6G8i6;VN00IyeamW)wtis^VhkyM4cJ1mWgr+mI&bj*k=FXjgF6DWmVnAWpXGuH( z#o$uK=7=l64x-2(ZQ^OqO=?8@6C(UD^&8Ew^_}Msw(tM}*um?3ze30k&vidFjDa1d z$k|}bfvr7GbDg!I*-E9#t4GHv6Fm3}ASfeNQp7Laa%Uq}Fkf&twb?DbE(IiP1mJxK zK(t@jr9<$h+F9^m3Y!bd{iJ||5bw-y??>1#B*Jb7{?Gz24fk2|4?&lM^XkMq20{@5 zHX%V@C4lXZ&ji>^C_w^x*wR@G+BS*`z>^^7T7z@(gRCUviCV^*<`YENBs4exK_a#$1pEWzylxMM zb`D-FDLf&B01S5SXxp|1003%621dBO2^>#|o+n!57&KMLI=d22q>P6}%=b$Ox=z=w zO|4s603ekfDEMdEOf~=jAOJ~3K~yIP^E`0XR;C5j?d? z{0V21uqo#>OTa~c;yVYqz68+;7cn7E{QqfC6O8`Ez!PThwgGoTt39ngm~X&2pa=b|w*_m>+Q`2R&l6OOXsF6DUYJPBya zPTJ(D?D^Ek0QM!7pbZko+X`$ZM%ZXjV?-|IfB}!OANLfMA6m@ZJg?EhCBRnR|0m-K zijWc-oPfr#Q9LoJR1rim1$|@rL*FE@{m|?rAzs(1yq3^! zlZa)7Sqwr+?h-+s;TQ+KLzRhOhoMo#A02^B(nMEGt*U6)VU`WZnJbfECo5n!(9qL6 z*5HV+t;d<&P^`*XxlF3OdUPBz@q@omDyOm}5kwpqrLT24-T9E;krqTX6mtJeaZpon zq7&d%#+Pa0pdm>l*ip@29BeLcl6_*}pzX=o!RHvGXWCC`6Q%P5{ZJ1 z+Mt3B6D9$w)_f5*ciQa(Hl@*1RAtdidC}+_A&8>|_qF!omTrf=v<{}f^)seYe18&A z^GKM&45mh76?)+iAh^Ae0nOq@+BF3})hql;tG)BY46}L}BLk_;zx&s1*$`(+%a5%;H8!v?Tj+|p%FskZ7WQkislF-K`Kp$-SptskQZmUx_bdG3i9L^?3)Yygx% zYrpESJBDdctC0Qhf&@YJ9d3D*bvT~zLb5lY0Di4x=k@X%)TOo)gPMyVI-4MM1VxGX zkv<-dC}!9IY==h(TI*F**kaZ~<#LxKfX&?yU=u=!W!YmRBYo|C?K|^BLo}VKYns(G zV_sEly=7U{b-fmmsUyTcN`MeVq{Y!u^e|ZIY_0+bq^wk7q__RGmv(Mg?U4HYjyY}C z+<8b{hMy2(rBbe480y{Kw)w@DEgK7CV*p^Kvkf!$p1bJCsk7(jDyopWLDmHP0N~n1 z$1ZwSAXX-m%Y{u$U=wC5r!eNaj@O)~vbl6R<30C`X6Hu{C;$*EmCjWVVx>|k>J&%% z+B$c<+S#&oc(6B4 zroys_Wm$!h-nPvz?%J@1X6pAj^0e9W<^ZDO6zxKRSe_Bn*@_Af=q*%CyD;iH-gl2M zm99vo(*S^O(JmH%ScUuuH|tIdqr+pPL$2*usZ=^!$yK#bB_aSxA-H1$9qn6QZrQqi zEI&#JscxD*d%va4bM~&Rt_Dhh9bq9_U#uqK$X-Yzkw5XQ9YzngrC@|V2~8AsT|%dU z^0Y&kdW1jG;SY5i++a{KdCTyqB4D$ufxq4iWqJb;grNd%>?qD`OwVe_T2{HkQG!hD zl?nny_9cLD)I||3{uM!4I4Rn6YiDswr)|4zcUe&P#I9M`(FftQ9|-FwfYP@QclNQy zn`--ik@r6820byV5jLO*o4uq(t`o<>4t3HX z00ObnXy;otKKarkzuCO{x%_CJQVN8m(wVyE1qU8~!J#L-ZThTPJ+D6Y;uDWj1R&}8 zOV3<*@ZspX0DvT2=-v46t=F~p4S-9lXCL$SE5FcCQ_-^SFaNyjmRHxjRLGAY)VcM0 z&E9Koq^^&jSe9jVZ+T|bV|TB8`mg;xUB$u}gJ-3)xr*xfOHModl#3S~wk(rLQ`Z&o zlT-?}K6}q&fA}?|QJv{p z(JmAL0f`00wm<*hH64BJfHXJb(6_$t%d@7}biDTbx+m^g{m*-QdPnTSD0Lk|(%Fj2 zT*K@GmcM=JX&26&Kc6~|P-4Lt(z4Rj9@_QtqpP31Z_}!kqxlhUtEy$CGquwfEjxS3 z3GdnW(4+WLrU;1sUl3bOnJ18fLd$(Oey(S+v?!t?ij?d6rvr_yPPu<+E+oP5^Fh@^Af z-~RIJ@8!|OvEh!E4llf8xBcmRAFivZa9yWi@8xH|_nMljG*zZ6tW?Gx?p*)mT`M2H zy=~|A;#l6ZgO$o;tLmohd+bqXTy)^kCuY;BaA~Q~Hy6sC->B<9C%zj2)t`u8e)sAl zU$Rn-Q~e2}0FR0vM}&2g1yKD74K5Y&y$a>%q4OsgbaI4a;#E>9JsCcC3^_8#C{2+d z>>i-6w%av1tG+5zUOk#zCOX5xezL#bAd_-sQx+z!OWOyX^=)?E=H_jcVF$lKos9|D zxJK%sOEn8vPeo~>z3Rzk_9+)c`U~9Df}})p7Q#q{>$u3GoXjZ^Bt*_|qoIr-L=cmMB`5B*_ia9DyoI`l%v))&@3{orXI_-1YYn#b<^j;G_en%N5v zK8m92`8sOnJ2$+vv$qETrWU3Hb$2}blRLlrwceh-K$D9U*^D_7VqtOf<3E4!mp6B` zcd4eLPH}X&xbcZQx4ih*15W+mX%}4CSXYgFyGH;3iX-hiH$Cs0rDnQIy-9n4Cw^$^ zj_i7A*QT`q08lym=s|$s5Go|#7IwF--Mw`i08|fFIu3p9iC;hXv#+oZ#ls(wG^7mhV;=wzI3pR){mLGiKzMI$o^UtS$ z1l+=o-7ojFcZ#}kq;1nk8vsDM;eh<8w+$7EQ|Q?6;?BWA0GRGB zK-b>&-0y$?y{~q41eQli{mB}zhdWv}Kj%;YfHAAu;rjIgDkOmJ$nMp6UGyg`O;CzV02K{e zbbta4xc%tKcp~8Eucw1;8M!1uSW5QHzy6jJftrW{Pi>eh~^gh-xLuM{qJD`QdA2@il`PCONdL_ zf60!)0Z9xn^J^SnPC$Syr4ABu_78phCfJ~Ztsv)MO9m$v76+gE#g`ww=T~ZPgGtw` zk3IOqFKpZ1n$4yF08$ytN{OixD>w)!mCbc;di2jf{RY?D05;r0zeOfn9=Yv-@82Nx zHY_V;rBb}#vh%%b9=Q3wAAPHUwrBqN+wTmF6hZ`^RS5xm=;_;U_}jg=tGx{-`MynmyX`Y; zUVMS_?k6ZOi027avL^|$SV(}CPCAqA-}cM{KmJPC+X$=>EFTFoWRX)|JNU<6G@Xec1D2SE9znkxR>bGBBsq{94n8lIj?)t{6r=PYmIf2`1#Z+o#5`Q9? zkG~9tj}iWaMT{vJ1{**FTXul{4-z_-uwL`9quqk^HAe;yA9Uu240@Ldf z5`-5%2_}{i6|rbOl)#jPxMV>wbqK)wu!ETghD1iFC=BN*{J_GQw%{*66yj=;E7rCM zEv$Rs+mAhTSCNg;NVajtKJ``y`noy*pnvP%{@L}M?NCk|5P$U}+nNUe zV2`vvapx^Nb_VSkNoBHGq*YeR@&9ifhRw3lf5A1wcd!l{L-t4qTQWE&?6x-1%yuPy_&C<)-bmf37k|ZMR|m zzQiKJ3>*Le>{|8E4x0DOR^2qKdCsDld+nbhL!CP|ckbNO-`np6b4S}>eE2s99=W`> zDkVce-eHJO*kAO!VzNIG0in2dfrUhaKLN2~Qtnu$=vv9rih!-cU>a4P@D5OjD5YqI z&Dfo%co7BNoi`NoBwI=@aA0#8=m?3#*^QA=%I_zbz*F#*aC>gmz#Lyj1D@Z000$Ddo4NR zeMg@3j%hPzr&1}TPVcst9{bI8t5!bk8_en1viAAIj#`!p2A@_sJ<_`RAAkDUh!ea} zuyO~ixbUbmFWG1RCE08Skq)%3e*S?UJ^jF)W3Edu=xqc@Vp)g)1YO9?dB-PzihzK{ zM{l|4$$zW_0D!6^-~HvcoP2`oI)qrMbk=oTLQ)*Nt?r#GyP*I80O_gw9l2=9imB75 z0j8SwTY!{8;?;jTJ|iGdr!aNj6ED2xI3!lFXX71TyL8*O-2h;vr=Rh$+xA&7$8}uG zN?BHlQkt@a3>SvIZWGL0a`p-5erVyL%W}Ca5aJewcCEhu!Q1|4_s$kCK=;P3 z*9PLK#d|SLg;7nYnT@XaaTo>zEaXNiI_v3S6GA9bq6~$BU%bx24)ItPDGsgw`)}L3 z{5L77>iMUA{D(&zwJb%@b?u^4Bvx+DL8r}JaK!Y+=11=S*%%KD(X$4X$GHgL0zfKP zv;4v@AAQQXb@dIYbQ%z;Yg5;?QknL(53G9TnIL@TptpbVoQvOEk+JMz!5^`?4$0IU zcMHKJ`HP+X!vKK!_U9kEeZNK5S7fXpr^4Dgpl@JGW0jvGwO@VWw>x*X z1!^jfI``UBE_!cGb(Lcmiv@=eQakgI6R!B?%-M4u`1!X7^Nx}-B;g4HSeXnV7P!Q+ z*f-CtR4SXwR1nJnfM9bnrD5Kw_xhe>a>rco2mr)NWphAMZYCRSmIeY=I$e>@R1o420+iBlMn{m!Lr(wr8SlNauCAUsMaM26 zqGjdgA9>N+aP;}XJp$>3A z0$U>2+aTNws380!_D_2mgvY?m1&g2vVgIx~lt;*5OT!?Bnd>AG34@AU!q4YO!LNsn z2t4cv@Jc_140mi?_rgDz7hH7gdk$TC6hX&vY`>XCbnF7;>JNYS)dwHFOo|RbD5BDu zBY+Jgb-<|~I`Q1g8XFq`U8gwa*aeCRB!$l4+NT~I3)i%VWNUNDJiB0UioxCw4nKx(RJ{7iJtY-O-}!}u4qt|D z!F3(KObIx4Ava~wVJpte24RaMn@00P{uQx`LoI8b{d>?0B6E*;`-=0fsH(`=#R7BO zu46;GV*fKfzU-v4lviHl6!)U39%g3A%w1YUr(NdN|~iQlwPeC4m%ON?q@1kR6cpG%q?~#rYqqud8+Kg5M=1 zgi`9*&dh_(*n9pwKO7w!=-J{1oy(xFDO5}_!jAGMlG)YED1QP%#pG+Hre_wQm0%fAO7&sG76}Sl7dz{T3g|VV5M<|OT6Fl17&m&)l_z>X_`B|K9Ob1s zc6*oUrUgsRx+rVOtpos~Yo}^wEIIZ3nq1Pkz^Zx2EI;RinG`sVu$qjdtdaK3JJziY zZsZo9baC_aDUPG@Q-~DPm5W!L-&|Yi-6;;XZeH~YNu`5~PQb8{Q5)tRd-MsX1O9*Z z-aO8)qq-A4b$@IBdT+JV+GWeKELrj<8w@r!I|Q;2NCHE`%gZ*-B$JSkNivhkWPOw5 zF?j(p$%haiKo%fjLP&tHV=!Q2OO|X|wqq5k~;v zWPX#3>WtwXy>4~Ok^G90nH*FY!$gh{|Hez`xJsqQMkI4(OYwU&oFlhj>)>T}I$(Oy zfE@#tu;r;Wz)kS`VC!QI2|h`}5mDE+%$-N$2lmv3V_$#s>(;MZ7Y~^A;sD02?Da2Q zbfYt;O!GneS3C3(dp2JTQ=Ts6LRk43Fo|T%}wjB-)5FT0`v03;+rPH#S_gM+2*_7 zwr*8_7;(yTsS<6-v#~X;!(&opU@n9X&qUn3@l-`UWo}EWx5t1SB(BiV93Lbuh6ZxuJ0eN`hYV%E=0H?($t=w?K9il-2 zogqnMWwlx`%Ik(!l1g2 z`K(g27h;&UYAwT*rllLEag*et4rp=6QZto%9#10v%jAhJP-gFfEs&c+Bwzrb)H2es zi1Wi|!q@~o6%FJS{LTHkF3fK=`qm!Lr3yl z7_pWH7D z4z9j7VCaGk0011JP#YfTHC+fgj!J`r{mX`cN0uChQDb7_oSbs)x#qU6GNZI`IKZG# z?OQHio@h+XH|xz5Peyp6LG!BB%DGS}_x5$mT_pfSTNjH)C=`k{Mpom;O$Q6Y`h_!- z;zb_T)xUmwi4i53-W@rX23M_=&#BPS04ywMJW<^j005{AF6&=5gpP(To7h0;;dN;y z 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¥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

(3R4l^ynnS1xZTF3+K8*6M74TCcI51s&B8S)UJ z&%XkWtoHK+Sz19i5Ay^oI$o>Z4d2VlOT7XlgTlyzz0Qt1%FE`_%84erx!%Gzs3$Ok zJJiLO`LW-FU5!aZMm!pKz*qdXUKp3Cc--~k7g!-t(TC6387Sv7Usz1^P~CSB#20!y ziyd}~c-X24-bU(bpw0rv_X-y?vyqRnf->uKb5xVJg6Xgp+QQpHh&dODt=T79z#kbN z*4rV2$aca^-Ul+=D6qhHi~N5p_^7G>hi*SM-$f9u>49?()6GwD#ooqrGF4)k2t>;G zkEE~@=wH82Y%jE33XcAzH3S1yehB7xWf1&-d@ss>a3%iFzgXqJdjaAf7bxlD#;q3& UC-vZaW&V00AtzoWru+VX0YQN9w*UYD literal 0 HcmV?d00001 diff --git a/images/featuretools.png b/images/featuretools.png new file mode 100644 index 0000000000000000000000000000000000000000..a7fc76ab5b75f2a5dee80382e36546e3e5843c84 GIT binary patch literal 10076 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 literal 0 HcmV?d00001 diff --git a/images/filter.png b/images/filter.png new file mode 100644 index 0000000000000000000000000000000000000000..d8205343e0b66bc131a56140a8e1ca75dda43fff GIT binary patch literal 19691 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 literal 0 HcmV?d00001 diff --git a/images/scaling.png b/images/scaling.png new file mode 100644 index 0000000000000000000000000000000000000000..41b359ac20bf876e82937ae49a2982168624b0ce GIT binary patch literal 146672 zcmcG#V{j&6*EO06CYspJ#I|kQ&O~=?TNB&1ZQHhOTX&qCdA_e+oWG~)bXC{Yd-soB zy=q^*s#ot7rXVK{2ZId*0s;ajDIuZ+0s;;X0s=Y>_48kb@>p^D-vaI^B&h=R@9=^$ z4*eHH+ev6Tf`Gse{^$IWL=BJgFNx(Os^O$;3vhBZa4-QewXwA}p>;HJFfp-lG_!TO z0qfxd0U-pD6cJQ$%e>4o)ld<~@Y^X043%goSf!>iWCw0*vjEL#!oucC>rw_WqZE5m z4J#S3qiBKKp6V)>8c1kp3TMu)H_w3(*Zp)fm-(R&_m>Z~t~ZleY23`F$CGKy;iplK zq%wX~w?E2H5M+^5nSK~By3t)*&T~M33SJvR4{SRlgM;>I16F5Uvq1d?Vm0Y#yB@0( z2oa$odoOj#1^!)t|I7cMMQ~b_0{*|F|0GZUKPJ|qP0ZzOB!uHwa%!D}>UlA7#=VsT_p`mkD1Ms9cgx)^B-dswWg$Ej*QlBa;h!kjUI?jyk%Q<2YTnNY1oq` zB+}(qcgci~O^_9X+i*xL&iq~P^@-__KC4kkM_CBgJsaItpbSmb#(meb@}J5RdLp@(mnD0K zke^@ZYNiSLzH^3NuAYbmtGJ^(w?-8DxCzcnI@;<^N$Sd5Qo#D&14_wlaW?k953UPs zDaxIn82M*tW?sna+QBF@&+eC)n^l^ZyM21d=^ohb$4MadObH0Yva2Xm>LCL!oJ&l~ z&Q+WoM=0GNaV9R*UE6@CP#e>`*lzW z9^ZVC6ECU|e&JjHgc4-5uk|5uUg^`ezMmKS*{F2al6&|CrS^6_p6xTF96U=Di^WVy z$20v4c()O|UrLO>y-Ef{5RWnZifH}9PstSzL*0eNo=8fHxmOf3ZI+~&ug2i^oj$F! zGki=coj>pKjl8l+O`x9jf5xsL3k*H5E8d8ZQCCtk7JkzuyQR!JhQP^9XS28f3+tXK zins9PFNPf3FsZc`LZmU}ImeXc>Vv``k1)h`BVRk@)S{1meAmS;fgI+^qN740Bdm>6 z0FX*gqTTx2LJ*#B4QMA`()mxtMN!3ybYk8A?(Yf<8u*{ES8?+4qmbQ;M%;aVT`yv` zXJt?H&o%&Ke~^V zoUPAA<~9pBf4s7jYSic5*T=0SGx{iW%y&*Gq&pXY8wN-9!2wLso_!I#ZzmIC}2T zNLOWq?{S{21OZ4ub^>siOzmYOeTyQ&L+a%jF41Rn?$WcSq@Pvr%;¥@iXftF!jz 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 literal 0 HcmV?d00001 diff --git a/images/sphx_glr_plot_map_data_to_normal_001.png b/images/sphx_glr_plot_map_data_to_normal_001.png new file mode 100644 index 0000000000000000000000000000000000000000..c82667da49ee573e2e27bc17593eaeed6566d7ee GIT binary patch literal 35754 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 literal 0 HcmV?d00001 diff --git a/images/workflow2.png b/images/workflow2.png new file mode 100644 index 0000000000000000000000000000000000000000..14a0e958b337aa7ae79ae0b9baa406fda669ecef GIT binary patch literal 20720 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 literal 0 HcmV?d00001 diff --git a/output/Barplot_Pclass_Survived.png b/output/Barplot_Pclass_Survived.png new file mode 100644 index 0000000000000000000000000000000000000000..64458fc85c91a26ba4958b310b5ed22c0428c839 GIT binary patch literal 10673 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 kW=j=hY&8<-{^O@C`=}Orpy!( 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 I36tCZ2E!FUD*ylh literal 0 HcmV?d00001 diff --git a/output/Corr_plot.png b/output/Corr_plot.png new file mode 100644 index 0000000000000000000000000000000000000000..35668e886e373819cb20d2b0dda08ee4c913f87e GIT binary patch literal 26237 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

4Bzj}2VN5pU#S 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 literal 0 HcmV?d00001 diff --git a/output/Distplot_Fare.png b/output/Distplot_Fare.png new file mode 100644 index 0000000000000000000000000000000000000000..f5b5b285f0d9791e104be7a854cd60a105e06b9f GIT binary patch literal 10779 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 literal 0 HcmV?d00001 diff --git a/output/Heatmap.png b/output/Heatmap.png new file mode 100644 index 0000000000000000000000000000000000000000..b7feb005428b00e5fb3bc7a83fe968d2616b1666 GIT binary patch literal 77411 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
C1afFJWX|BO89C82rvaV1& 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 literal 0 HcmV?d00001 diff --git a/output/describe.csv b/output/describe.csv new file mode 100644 index 0000000..0c386e4 --- /dev/null +++ b/output/describe.csv @@ -0,0 +1,12 @@ +,Survived,Pclass,Sex,Age,SibSp,Fare +count,891.0,891.0,891,714.0,891.0,891.0 +unique,,,2,,, +top,,,male,,, +freq,,,577,,, +mean,0.3838383838383838,2.308641975308642,,29.69911764705882,0.5230078563411896,32.2042079685746 +std,0.4865924542648585,0.8360712409770513,,14.526497332334044,1.1027434322934275,49.693428597180905 +min,0.0,1.0,,0.42,0.0,0.0 +25%,0.0,2.0,,20.125,0.0,7.9104 +50%,0.0,3.0,,28.0,0.0,14.4542 +75%,1.0,3.0,,38.0,1.0,31.0 +max,1.0,3.0,,80.0,8.0,512.3292 diff --git a/output/missing.csv b/output/missing.csv new file mode 100644 index 0000000..b838210 --- /dev/null +++ b/output/missing.csv @@ -0,0 +1,7 @@ +,total missing,proportion +Survived,0,0.0 +Pclass,0,0.0 +Sex,0,0.0 +Age,177,0.19865319865319866 +SibSp,0,0.0 +Fare,0,0.0