From 3a50d987c2f4fd3353839fdfcd66392c6c59c042 Mon Sep 17 00:00:00 2001 From: Alaa Date: Wed, 23 Oct 2024 18:55:07 +0100 Subject: [PATCH 1/3] initial cleaning --- data/Dirty Data.ipynb | 3196 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 3183 insertions(+), 13 deletions(-) diff --git a/data/Dirty Data.ipynb b/data/Dirty Data.ipynb index de8964f..c224a42 100644 --- a/data/Dirty Data.ipynb +++ b/data/Dirty Data.ipynb @@ -2,56 +2,3226 @@ "cells": [ { "cell_type": "code", - "execution_count": 19, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", - "import numpy as np" + "import matplotlib.pyplot as plt\n", + "import seaborn as sn\n", + "import numpy as np\n", + "import plotly.graph_objs as go\n", + "from plotly.offline import iplot\n" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ - "dataset = pd.read_csv('BankChurners.csv')" + "# Read the dataset\n", + "dataset = pd.read_csv('BankChurners_v2.csv')" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(10127, 23)\n" + ] + } + ], + "source": [ + "# Check the shape of the dataset\n", + "print(dataset.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['CLIENTNUM', 'Attrition_Flag', 'Customer_Age', 'Gender',\n", + " 'Dependent_count', 'Education_Level', 'Marital_Status',\n", + " 'Income_Category', 'Card_Category', 'Months_on_book',\n", + " 'Total_Relationship_Count', 'Months_Inactive_12_mon',\n", + " 'Contacts_Count_12_mon', 'Credit_Limit', 'Total_Revolving_Bal',\n", + " 'Avg_Open_To_Buy', 'Total_Amt_Chng_Q4_Q1', 'Total_Trans_Amt',\n", + " 'Total_Trans_Ct', 'Total_Ct_Chng_Q4_Q1', 'Avg_Utilization_Ratio',\n", + " 'Naive_Bayes_Classifier_Attrition_Flag_Card_Category_Contacts_Count_12_mon_Dependent_count_Education_Level_Months_Inactive_12_mon_1',\n", + " 'Naive_Bayes_Classifier_Attrition_Flag_Card_Category_Contacts_Count_12_mon_Dependent_count_Education_Level_Months_Inactive_12_mon_2'],\n", + " dtype='object')" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Display the features of the dataset\n", + "dataset.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "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", + "
CLIENTNUMAttrition_FlagCustomer_AgeGenderDependent_countEducation_LevelMarital_StatusIncome_CategoryCard_CategoryMonths_on_book...Credit_LimitTotal_Revolving_BalAvg_Open_To_BuyTotal_Amt_Chng_Q4_Q1Total_Trans_AmtTotal_Trans_CtTotal_Ct_Chng_Q4_Q1Avg_Utilization_RatioNaive_Bayes_Classifier_Attrition_Flag_Card_Category_Contacts_Count_12_mon_Dependent_count_Education_Level_Months_Inactive_12_mon_1Naive_Bayes_Classifier_Attrition_Flag_Card_Category_Contacts_Count_12_mon_Dependent_count_Education_Level_Months_Inactive_12_mon_2
090032Existing Customer45M3High SchoolMarried$60K - $80KBlue39...12691.077711914.01.3351144421.6250.0610.0000930.99991
190033Existing Customer49F5GraduateSingleLess than $40KBlue44...8256.08647392.01.5411291333.7140.1050.0000570.99994
290034Existing Customer51M3GraduateMarried$80K - $120KBlue36...3418.003418.02.5941887202.3330.0000.0000210.99998
390035Existing Customer40F4High SchoolNaNLess than $40KBlue34...3313.02517796.01.4051171202.3330.7600.0001340.99987
490036Existing Customer40M3UneducatedMarried$60K - $80KBlue21...4716.004716.02.175816282.5000.0000.0000220.99998
\n", + "

5 rows × 23 columns

\n", + "
" + ], + "text/plain": [ + " CLIENTNUM Attrition_Flag Customer_Age Gender Dependent_count \\\n", + "0 90032 Existing Customer 45 M 3 \n", + "1 90033 Existing Customer 49 F 5 \n", + "2 90034 Existing Customer 51 M 3 \n", + "3 90035 Existing Customer 40 F 4 \n", + "4 90036 Existing Customer 40 M 3 \n", + "\n", + " Education_Level Marital_Status Income_Category Card_Category \\\n", + "0 High School Married $60K - $80K Blue \n", + "1 Graduate Single Less than $40K Blue \n", + "2 Graduate Married $80K - $120K Blue \n", + "3 High School NaN Less than $40K Blue \n", + "4 Uneducated Married $60K - $80K Blue \n", + "\n", + " Months_on_book ... Credit_Limit Total_Revolving_Bal Avg_Open_To_Buy \\\n", + "0 39 ... 12691.0 777 11914.0 \n", + "1 44 ... 8256.0 864 7392.0 \n", + "2 36 ... 3418.0 0 3418.0 \n", + "3 34 ... 3313.0 2517 796.0 \n", + "4 21 ... 4716.0 0 4716.0 \n", + "\n", + " Total_Amt_Chng_Q4_Q1 Total_Trans_Amt Total_Trans_Ct Total_Ct_Chng_Q4_Q1 \\\n", + "0 1.335 1144 42 1.625 \n", + "1 1.541 1291 33 3.714 \n", + "2 2.594 1887 20 2.333 \n", + "3 1.405 1171 20 2.333 \n", + "4 2.175 816 28 2.500 \n", + "\n", + " Avg_Utilization_Ratio \\\n", + "0 0.061 \n", + "1 0.105 \n", + "2 0.000 \n", + "3 0.760 \n", + "4 0.000 \n", + "\n", + " Naive_Bayes_Classifier_Attrition_Flag_Card_Category_Contacts_Count_12_mon_Dependent_count_Education_Level_Months_Inactive_12_mon_1 \\\n", + "0 0.000093 \n", + "1 0.000057 \n", + "2 0.000021 \n", + "3 0.000134 \n", + "4 0.000022 \n", + "\n", + " Naive_Bayes_Classifier_Attrition_Flag_Card_Category_Contacts_Count_12_mon_Dependent_count_Education_Level_Months_Inactive_12_mon_2 \n", + "0 0.99991 \n", + "1 0.99994 \n", + "2 0.99998 \n", + "3 0.99987 \n", + "4 0.99998 \n", + "\n", + "[5 rows x 23 columns]" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Display the first 5 rows of the dataset\n", + "dataset.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Cleaning " + ] + }, + { + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "dataset = dataset.replace('Unknown', np.nan)" + "Duplication" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10127" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Data Duplication\n", + "# Check the original number of rows \n", + "dataset.shape[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are two ways to check if there are duplications. " + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10127" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# First way\n", + "# CLIENTNUM is a unique number, so it should not be duplicated\n", + "# Check if all the CLIENTNUM values are unique\n", + "dataset['CLIENTNUM'].nunique()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "No duplication in the dataset " + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(10127, 23)" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Second way \n", + "# Drop the duplication\n", + "dataset.drop_duplicates(subset= 'CLIENTNUM', keep= False, inplace=True )\n", + "\n", + "# Check back the number of row after dropping any duplicates\n", + "dataset.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Both ways showed no duplicated rows" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Drop irrelevant columns" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, "outputs": [], "source": [ - "dataset['CLIENTNUM'] = [x + 90032 for x in list(range(len(dataset)))]" + "dataset.drop(columns=['Naive_Bayes_Classifier_Attrition_Flag_Card_Category_Contacts_Count_12_mon_Dependent_count_Education_Level_Months_Inactive_12_mon_1',\n", + " 'Naive_Bayes_Classifier_Attrition_Flag_Card_Category_Contacts_Count_12_mon_Dependent_count_Education_Level_Months_Inactive_12_mon_2'], inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index(['CLIENTNUM', 'Attrition_Flag', 'Customer_Age', 'Gender',\n", + " 'Dependent_count', 'Education_Level', 'Marital_Status',\n", + " 'Income_Category', 'Card_Category', 'Months_on_book',\n", + " 'Total_Relationship_Count', 'Months_Inactive_12_mon',\n", + " 'Contacts_Count_12_mon', 'Credit_Limit', 'Total_Revolving_Bal',\n", + " 'Avg_Open_To_Buy', 'Total_Amt_Chng_Q4_Q1', 'Total_Trans_Amt',\n", + " 'Total_Trans_Ct', 'Total_Ct_Chng_Q4_Q1', 'Avg_Utilization_Ratio'],\n", + " dtype='object')\n", + "(10127, 21)\n" + ] + } + ], + "source": [ + "# Check the columns\n", + "print(dataset.columns)\n", + "# Check the number of columns\n", + "print(dataset.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Features' Datatypes" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "CLIENTNUM int64\n", + "Attrition_Flag object\n", + "Customer_Age int64\n", + "Gender object\n", + "Dependent_count int64\n", + "Education_Level object\n", + "Marital_Status object\n", + "Income_Category object\n", + "Card_Category object\n", + "Months_on_book int64\n", + "Total_Relationship_Count int64\n", + "Months_Inactive_12_mon int64\n", + "Contacts_Count_12_mon int64\n", + "Credit_Limit float64\n", + "Total_Revolving_Bal int64\n", + "Avg_Open_To_Buy float64\n", + "Total_Amt_Chng_Q4_Q1 float64\n", + "Total_Trans_Amt int64\n", + "Total_Trans_Ct int64\n", + "Total_Ct_Chng_Q4_Q1 float64\n", + "Avg_Utilization_Ratio float64\n", + "dtype: object" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check the datatype of the variables\n", + "dataset.dtypes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Missing Values" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "CLIENTNUM 0\n", + "Attrition_Flag 0\n", + "Customer_Age 0\n", + "Gender 0\n", + "Dependent_count 0\n", + "Education_Level 1519\n", + "Marital_Status 749\n", + "Income_Category 1112\n", + "Card_Category 0\n", + "Months_on_book 0\n", + "Total_Relationship_Count 0\n", + "Months_Inactive_12_mon 0\n", + "Contacts_Count_12_mon 0\n", + "Credit_Limit 0\n", + "Total_Revolving_Bal 0\n", + "Avg_Open_To_Buy 0\n", + "Total_Amt_Chng_Q4_Q1 0\n", + "Total_Trans_Amt 0\n", + "Total_Trans_Ct 0\n", + "Total_Ct_Chng_Q4_Q1 0\n", + "Avg_Utilization_Ratio 0\n", + "dtype: int64" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check if there are any missing values\n", + "dataset.isna().sum() # OR dataset.isnull().sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Three variables have missing values. These variables are categorical." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CLIENTNUMAttrition_FlagCustomer_AgeGenderDependent_countEducation_LevelMarital_StatusIncome_CategoryCard_CategoryMonths_on_book...Months_Inactive_12_monContacts_Count_12_monCredit_LimitTotal_Revolving_BalAvg_Open_To_BuyTotal_Amt_Chng_Q4_Q1Total_Trans_AmtTotal_Trans_CtTotal_Ct_Chng_Q4_Q1Avg_Utilization_Ratio
690038Existing Customer51M4NaNMarried$120K +Gold46...1334516.0226432252.01.9751330310.7220.066
1190043Existing Customer65M1NaNMarried$40K - $60KBlue54...239095.015877508.01.4331314261.3640.174
1590047Existing Customer44M4NaNNaN$80K - $120KBlue37...124234.09723262.01.7071348271.7000.230
1790049Existing Customer41M3NaNMarried$80K - $120KBlue34...4113535.0129112244.00.6531028211.6250.095
2390055Existing Customer47F4NaNSingleLess than $40KBlue36...322492.01560932.00.5731126230.3530.626
..................................................................
10090100122Existing Customer36F3NaNMarried$40K - $60KBlue22...3312958.0227310685.00.60815681960.6270.175
10094100126Existing Customer59M1NaNSingle$60K - $80KBlue48...127288.007288.00.640148731200.7140.000
10095100127Existing Customer46M3NaNMarried$80K - $120KBlue33...1334516.0109933417.00.816154901100.6180.032
10118100150Attrited Customer50M1NaNNaN$80K - $120KBlue36...349959.09529007.00.82510310631.1000.096
10123100155Attrited Customer41M2NaNDivorced$40K - $60KBlue25...234277.021862091.00.8048764690.6830.511
\n", + "

1519 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " CLIENTNUM Attrition_Flag Customer_Age Gender Dependent_count \\\n", + "6 90038 Existing Customer 51 M 4 \n", + "11 90043 Existing Customer 65 M 1 \n", + "15 90047 Existing Customer 44 M 4 \n", + "17 90049 Existing Customer 41 M 3 \n", + "23 90055 Existing Customer 47 F 4 \n", + "... ... ... ... ... ... \n", + "10090 100122 Existing Customer 36 F 3 \n", + "10094 100126 Existing Customer 59 M 1 \n", + "10095 100127 Existing Customer 46 M 3 \n", + "10118 100150 Attrited Customer 50 M 1 \n", + "10123 100155 Attrited Customer 41 M 2 \n", + "\n", + " Education_Level Marital_Status Income_Category Card_Category \\\n", + "6 NaN Married $120K + Gold \n", + "11 NaN Married $40K - $60K Blue \n", + "15 NaN NaN $80K - $120K Blue \n", + "17 NaN Married $80K - $120K Blue \n", + "23 NaN Single Less than $40K Blue \n", + "... ... ... ... ... \n", + "10090 NaN Married $40K - $60K Blue \n", + "10094 NaN Single $60K - $80K Blue \n", + "10095 NaN Married $80K - $120K Blue \n", + "10118 NaN NaN $80K - $120K Blue \n", + "10123 NaN Divorced $40K - $60K Blue \n", + "\n", + " Months_on_book ... Months_Inactive_12_mon Contacts_Count_12_mon \\\n", + "6 46 ... 1 3 \n", + "11 54 ... 2 3 \n", + "15 37 ... 1 2 \n", + "17 34 ... 4 1 \n", + "23 36 ... 3 2 \n", + "... ... ... ... ... \n", + "10090 22 ... 3 3 \n", + "10094 48 ... 1 2 \n", + "10095 33 ... 1 3 \n", + "10118 36 ... 3 4 \n", + "10123 25 ... 2 3 \n", + "\n", + " Credit_Limit Total_Revolving_Bal Avg_Open_To_Buy \\\n", + "6 34516.0 2264 32252.0 \n", + "11 9095.0 1587 7508.0 \n", + "15 4234.0 972 3262.0 \n", + "17 13535.0 1291 12244.0 \n", + "23 2492.0 1560 932.0 \n", + "... ... ... ... \n", + "10090 12958.0 2273 10685.0 \n", + "10094 7288.0 0 7288.0 \n", + "10095 34516.0 1099 33417.0 \n", + "10118 9959.0 952 9007.0 \n", + "10123 4277.0 2186 2091.0 \n", + "\n", + " Total_Amt_Chng_Q4_Q1 Total_Trans_Amt Total_Trans_Ct \\\n", + "6 1.975 1330 31 \n", + "11 1.433 1314 26 \n", + "15 1.707 1348 27 \n", + "17 0.653 1028 21 \n", + "23 0.573 1126 23 \n", + "... ... ... ... \n", + "10090 0.608 15681 96 \n", + "10094 0.640 14873 120 \n", + "10095 0.816 15490 110 \n", + "10118 0.825 10310 63 \n", + "10123 0.804 8764 69 \n", + "\n", + " Total_Ct_Chng_Q4_Q1 Avg_Utilization_Ratio \n", + "6 0.722 0.066 \n", + "11 1.364 0.174 \n", + "15 1.700 0.230 \n", + "17 1.625 0.095 \n", + "23 0.353 0.626 \n", + "... ... ... \n", + "10090 0.627 0.175 \n", + "10094 0.714 0.000 \n", + "10095 0.618 0.032 \n", + "10118 1.100 0.096 \n", + "10123 0.683 0.511 \n", + "\n", + "[1519 rows x 21 columns]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Have a look on the missing values in Education_Level\n", + "dataset[dataset.Education_Level.isna()]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "No trend is seen. There also other missing values in other variables in the above rows." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CLIENTNUMAttrition_FlagCustomer_AgeGenderDependent_countEducation_LevelMarital_StatusIncome_CategoryCard_CategoryMonths_on_book...Months_Inactive_12_monContacts_Count_12_monCredit_LimitTotal_Revolving_BalAvg_Open_To_BuyTotal_Amt_Chng_Q4_Q1Total_Trans_AmtTotal_Trans_CtTotal_Ct_Chng_Q4_Q1Avg_Utilization_Ratio
390035Existing Customer40F4High SchoolNaNLess than $40KBlue34...413313.02517796.01.4051171202.3330.760
790039Existing Customer32M0High SchoolNaN$60K - $80KSilver27...2229081.0139627685.02.2041538360.7140.048
1090042Existing Customer42M5UneducatedNaN$120K +Blue31...326748.014675281.00.8311201420.6800.217
1390045Existing Customer35M3GraduateNaN$60K - $80KBlue30...138547.016666881.01.1631311332.0000.195
1590047Existing Customer44M4NaNNaN$80K - $120KBlue37...124234.09723262.01.7071348271.7000.230
..................................................................
10070100102Existing Customer47M3High SchoolNaN$80K - $120KSilver40...3234516.0137133145.00.691159301230.8360.040
10100100132Existing Customer39M2GraduateNaN$60K - $80KSilver36...2229808.0029808.00.669160981280.6840.000
10101100133Existing Customer42M2GraduateNaN$40K - $60KBlue30...253735.017232012.00.59514501920.8400.461
10118100150Attrited Customer50M1NaNNaN$80K - $120KBlue36...349959.09529007.00.82510310631.1000.096
10125100157Attrited Customer30M2GraduateNaN$40K - $60KBlue36...335281.005281.00.5358395620.7220.000
\n", + "

749 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " CLIENTNUM Attrition_Flag Customer_Age Gender Dependent_count \\\n", + "3 90035 Existing Customer 40 F 4 \n", + "7 90039 Existing Customer 32 M 0 \n", + "10 90042 Existing Customer 42 M 5 \n", + "13 90045 Existing Customer 35 M 3 \n", + "15 90047 Existing Customer 44 M 4 \n", + "... ... ... ... ... ... \n", + "10070 100102 Existing Customer 47 M 3 \n", + "10100 100132 Existing Customer 39 M 2 \n", + "10101 100133 Existing Customer 42 M 2 \n", + "10118 100150 Attrited Customer 50 M 1 \n", + "10125 100157 Attrited Customer 30 M 2 \n", + "\n", + " Education_Level Marital_Status Income_Category Card_Category \\\n", + "3 High School NaN Less than $40K Blue \n", + "7 High School NaN $60K - $80K Silver \n", + "10 Uneducated NaN $120K + Blue \n", + "13 Graduate NaN $60K - $80K Blue \n", + "15 NaN NaN $80K - $120K Blue \n", + "... ... ... ... ... \n", + "10070 High School NaN $80K - $120K Silver \n", + "10100 Graduate NaN $60K - $80K Silver \n", + "10101 Graduate NaN $40K - $60K Blue \n", + "10118 NaN NaN $80K - $120K Blue \n", + "10125 Graduate NaN $40K - $60K Blue \n", + "\n", + " Months_on_book ... Months_Inactive_12_mon Contacts_Count_12_mon \\\n", + "3 34 ... 4 1 \n", + "7 27 ... 2 2 \n", + "10 31 ... 3 2 \n", + "13 30 ... 1 3 \n", + "15 37 ... 1 2 \n", + "... ... ... ... ... \n", + "10070 40 ... 3 2 \n", + "10100 36 ... 2 2 \n", + "10101 30 ... 2 5 \n", + "10118 36 ... 3 4 \n", + "10125 36 ... 3 3 \n", + "\n", + " Credit_Limit Total_Revolving_Bal Avg_Open_To_Buy \\\n", + "3 3313.0 2517 796.0 \n", + "7 29081.0 1396 27685.0 \n", + "10 6748.0 1467 5281.0 \n", + "13 8547.0 1666 6881.0 \n", + "15 4234.0 972 3262.0 \n", + "... ... ... ... \n", + "10070 34516.0 1371 33145.0 \n", + "10100 29808.0 0 29808.0 \n", + "10101 3735.0 1723 2012.0 \n", + "10118 9959.0 952 9007.0 \n", + "10125 5281.0 0 5281.0 \n", + "\n", + " Total_Amt_Chng_Q4_Q1 Total_Trans_Amt Total_Trans_Ct \\\n", + "3 1.405 1171 20 \n", + "7 2.204 1538 36 \n", + "10 0.831 1201 42 \n", + "13 1.163 1311 33 \n", + "15 1.707 1348 27 \n", + "... ... ... ... \n", + "10070 0.691 15930 123 \n", + "10100 0.669 16098 128 \n", + "10101 0.595 14501 92 \n", + "10118 0.825 10310 63 \n", + "10125 0.535 8395 62 \n", + "\n", + " Total_Ct_Chng_Q4_Q1 Avg_Utilization_Ratio \n", + "3 2.333 0.760 \n", + "7 0.714 0.048 \n", + "10 0.680 0.217 \n", + "13 2.000 0.195 \n", + "15 1.700 0.230 \n", + "... ... ... \n", + "10070 0.836 0.040 \n", + "10100 0.684 0.000 \n", + "10101 0.840 0.461 \n", + "10118 1.100 0.096 \n", + "10125 0.722 0.000 \n", + "\n", + "[749 rows x 21 columns]" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Investigate the missing values in Marital_Status\n", + "dataset[dataset['Marital_Status'].isna()]" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CLIENTNUMAttrition_FlagCustomer_AgeGenderDependent_countEducation_LevelMarital_StatusIncome_CategoryCard_CategoryMonths_on_book...Months_Inactive_12_monContacts_Count_12_monCredit_LimitTotal_Revolving_BalAvg_Open_To_BuyTotal_Amt_Chng_Q4_Q1Total_Trans_AmtTotal_Trans_CtTotal_Ct_Chng_Q4_Q1Avg_Utilization_Ratio
1990051Existing Customer45F2GraduateMarriedNaNBlue37...1214470.0115713313.00.9661207210.9090.080
2890060Existing Customer44F3UneducatedSingleNaNBlue34...2210100.0010100.00.5251052181.5710.000
3990071Attrited Customer66F0DoctorateMarriedNaNBlue56...437882.06057277.01.052704160.1430.077
4490076Existing Customer38F4GraduateSingleNaNBlue28...339830.020557775.00.9771042230.9170.209
5890090Existing Customer44F5GraduateMarriedNaNBlue35...126273.09785295.02.2751359251.0830.156
..................................................................
10021100053Attrited Customer30F1GraduateMarriedNaNBlue18...144377.025171860.00.9418759740.6090.575
10040100072Attrited Customer50F3DoctorateSingleNaNBlue36...335173.005173.00.9128757680.7890.000
10083100115Existing Customer42F4UneducatedMarriedNaNBlue23...128348.008348.00.695159051110.7080.000
10092100124Attrited Customer40F3GraduateMarriedNaNBlue25...236888.018785010.01.0599038640.8290.273
10119100151Attrited Customer55F3UneducatedSingleNaNBlue47...3314657.0251712140.00.1666009530.5140.172
\n", + "

1112 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " CLIENTNUM Attrition_Flag Customer_Age Gender Dependent_count \\\n", + "19 90051 Existing Customer 45 F 2 \n", + "28 90060 Existing Customer 44 F 3 \n", + "39 90071 Attrited Customer 66 F 0 \n", + "44 90076 Existing Customer 38 F 4 \n", + "58 90090 Existing Customer 44 F 5 \n", + "... ... ... ... ... ... \n", + "10021 100053 Attrited Customer 30 F 1 \n", + "10040 100072 Attrited Customer 50 F 3 \n", + "10083 100115 Existing Customer 42 F 4 \n", + "10092 100124 Attrited Customer 40 F 3 \n", + "10119 100151 Attrited Customer 55 F 3 \n", + "\n", + " Education_Level Marital_Status Income_Category Card_Category \\\n", + "19 Graduate Married NaN Blue \n", + "28 Uneducated Single NaN Blue \n", + "39 Doctorate Married NaN Blue \n", + "44 Graduate Single NaN Blue \n", + "58 Graduate Married NaN Blue \n", + "... ... ... ... ... \n", + "10021 Graduate Married NaN Blue \n", + "10040 Doctorate Single NaN Blue \n", + "10083 Uneducated Married NaN Blue \n", + "10092 Graduate Married NaN Blue \n", + "10119 Uneducated Single NaN Blue \n", + "\n", + " Months_on_book ... Months_Inactive_12_mon Contacts_Count_12_mon \\\n", + "19 37 ... 1 2 \n", + "28 34 ... 2 2 \n", + "39 56 ... 4 3 \n", + "44 28 ... 3 3 \n", + "58 35 ... 1 2 \n", + "... ... ... ... ... \n", + "10021 18 ... 1 4 \n", + "10040 36 ... 3 3 \n", + "10083 23 ... 1 2 \n", + "10092 25 ... 2 3 \n", + "10119 47 ... 3 3 \n", + "\n", + " Credit_Limit Total_Revolving_Bal Avg_Open_To_Buy \\\n", + "19 14470.0 1157 13313.0 \n", + "28 10100.0 0 10100.0 \n", + "39 7882.0 605 7277.0 \n", + "44 9830.0 2055 7775.0 \n", + "58 6273.0 978 5295.0 \n", + "... ... ... ... \n", + "10021 4377.0 2517 1860.0 \n", + "10040 5173.0 0 5173.0 \n", + "10083 8348.0 0 8348.0 \n", + "10092 6888.0 1878 5010.0 \n", + "10119 14657.0 2517 12140.0 \n", + "\n", + " Total_Amt_Chng_Q4_Q1 Total_Trans_Amt Total_Trans_Ct \\\n", + "19 0.966 1207 21 \n", + "28 0.525 1052 18 \n", + "39 1.052 704 16 \n", + "44 0.977 1042 23 \n", + "58 2.275 1359 25 \n", + "... ... ... ... \n", + "10021 0.941 8759 74 \n", + "10040 0.912 8757 68 \n", + "10083 0.695 15905 111 \n", + "10092 1.059 9038 64 \n", + "10119 0.166 6009 53 \n", + "\n", + " Total_Ct_Chng_Q4_Q1 Avg_Utilization_Ratio \n", + "19 0.909 0.080 \n", + "28 1.571 0.000 \n", + "39 0.143 0.077 \n", + "44 0.917 0.209 \n", + "58 1.083 0.156 \n", + "... ... ... \n", + "10021 0.609 0.575 \n", + "10040 0.789 0.000 \n", + "10083 0.708 0.000 \n", + "10092 0.829 0.273 \n", + "10119 0.514 0.172 \n", + "\n", + "[1112 rows x 21 columns]" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Investigate the missing values in Marital_Status\n", + "dataset[dataset['Income_Category'].isna()]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Fill the missing values with \"Unknown\" in the three variables." + ] + }, + { + "cell_type": "code", + "execution_count": 37, "metadata": {}, "outputs": [], "source": [ - "dataset.to_csv('BankChurners_v2.csv', index=False)" + "# Impute the missing values with Unknown\n", + "dataset['Education_Level'] = dataset['Education_Level'].fillna(\"Unknown\")\n", + "dataset['Marital_Status'] = dataset['Marital_Status'].fillna(\"Unknown\")\n", + "dataset['Income_Category'] = dataset['Income_Category'].fillna(\"Unknown\")\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "CLIENTNUM 0\n", + "Attrition_Flag 0\n", + "Customer_Age 0\n", + "Gender 0\n", + "Dependent_count 0\n", + "Education_Level 0\n", + "Marital_Status 0\n", + "Income_Category 0\n", + "Card_Category 0\n", + "Months_on_book 0\n", + "Total_Relationship_Count 0\n", + "Months_Inactive_12_mon 0\n", + "Contacts_Count_12_mon 0\n", + "Credit_Limit 0\n", + "Total_Revolving_Bal 0\n", + "Avg_Open_To_Buy 0\n", + "Total_Amt_Chng_Q4_Q1 0\n", + "Total_Trans_Amt 0\n", + "Total_Trans_Ct 0\n", + "Total_Ct_Chng_Q4_Q1 0\n", + "Avg_Utilization_Ratio 0\n", + "dtype: int64" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check that there is no missing values\n", + "dataset.isna().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CLIENTNUMAttrition_FlagCustomer_AgeGenderDependent_countEducation_LevelMarital_StatusIncome_CategoryCard_CategoryMonths_on_book...Months_Inactive_12_monContacts_Count_12_monCredit_LimitTotal_Revolving_BalAvg_Open_To_BuyTotal_Amt_Chng_Q4_Q1Total_Trans_AmtTotal_Trans_CtTotal_Ct_Chng_Q4_Q1Avg_Utilization_Ratio
690038Existing Customer51M4UnknownMarried$120K +Gold46...1334516.0226432252.01.9751330310.7220.066
1190043Existing Customer65M1UnknownMarried$40K - $60KBlue54...239095.015877508.01.4331314261.3640.174
1590047Existing Customer44M4UnknownUnknown$80K - $120KBlue37...124234.09723262.01.7071348271.7000.230
1790049Existing Customer41M3UnknownMarried$80K - $120KBlue34...4113535.0129112244.00.6531028211.6250.095
2390055Existing Customer47F4UnknownSingleLess than $40KBlue36...322492.01560932.00.5731126230.3530.626
..................................................................
10090100122Existing Customer36F3UnknownMarried$40K - $60KBlue22...3312958.0227310685.00.60815681960.6270.175
10094100126Existing Customer59M1UnknownSingle$60K - $80KBlue48...127288.007288.00.640148731200.7140.000
10095100127Existing Customer46M3UnknownMarried$80K - $120KBlue33...1334516.0109933417.00.816154901100.6180.032
10118100150Attrited Customer50M1UnknownUnknown$80K - $120KBlue36...349959.09529007.00.82510310631.1000.096
10123100155Attrited Customer41M2UnknownDivorced$40K - $60KBlue25...234277.021862091.00.8048764690.6830.511
\n", + "

1519 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " CLIENTNUM Attrition_Flag Customer_Age Gender Dependent_count \\\n", + "6 90038 Existing Customer 51 M 4 \n", + "11 90043 Existing Customer 65 M 1 \n", + "15 90047 Existing Customer 44 M 4 \n", + "17 90049 Existing Customer 41 M 3 \n", + "23 90055 Existing Customer 47 F 4 \n", + "... ... ... ... ... ... \n", + "10090 100122 Existing Customer 36 F 3 \n", + "10094 100126 Existing Customer 59 M 1 \n", + "10095 100127 Existing Customer 46 M 3 \n", + "10118 100150 Attrited Customer 50 M 1 \n", + "10123 100155 Attrited Customer 41 M 2 \n", + "\n", + " Education_Level Marital_Status Income_Category Card_Category \\\n", + "6 Unknown Married $120K + Gold \n", + "11 Unknown Married $40K - $60K Blue \n", + "15 Unknown Unknown $80K - $120K Blue \n", + "17 Unknown Married $80K - $120K Blue \n", + "23 Unknown Single Less than $40K Blue \n", + "... ... ... ... ... \n", + "10090 Unknown Married $40K - $60K Blue \n", + "10094 Unknown Single $60K - $80K Blue \n", + "10095 Unknown Married $80K - $120K Blue \n", + "10118 Unknown Unknown $80K - $120K Blue \n", + "10123 Unknown Divorced $40K - $60K Blue \n", + "\n", + " Months_on_book ... Months_Inactive_12_mon Contacts_Count_12_mon \\\n", + "6 46 ... 1 3 \n", + "11 54 ... 2 3 \n", + "15 37 ... 1 2 \n", + "17 34 ... 4 1 \n", + "23 36 ... 3 2 \n", + "... ... ... ... ... \n", + "10090 22 ... 3 3 \n", + "10094 48 ... 1 2 \n", + "10095 33 ... 1 3 \n", + "10118 36 ... 3 4 \n", + "10123 25 ... 2 3 \n", + "\n", + " Credit_Limit Total_Revolving_Bal Avg_Open_To_Buy \\\n", + "6 34516.0 2264 32252.0 \n", + "11 9095.0 1587 7508.0 \n", + "15 4234.0 972 3262.0 \n", + "17 13535.0 1291 12244.0 \n", + "23 2492.0 1560 932.0 \n", + "... ... ... ... \n", + "10090 12958.0 2273 10685.0 \n", + "10094 7288.0 0 7288.0 \n", + "10095 34516.0 1099 33417.0 \n", + "10118 9959.0 952 9007.0 \n", + "10123 4277.0 2186 2091.0 \n", + "\n", + " Total_Amt_Chng_Q4_Q1 Total_Trans_Amt Total_Trans_Ct \\\n", + "6 1.975 1330 31 \n", + "11 1.433 1314 26 \n", + "15 1.707 1348 27 \n", + "17 0.653 1028 21 \n", + "23 0.573 1126 23 \n", + "... ... ... ... \n", + "10090 0.608 15681 96 \n", + "10094 0.640 14873 120 \n", + "10095 0.816 15490 110 \n", + "10118 0.825 10310 63 \n", + "10123 0.804 8764 69 \n", + "\n", + " Total_Ct_Chng_Q4_Q1 Avg_Utilization_Ratio \n", + "6 0.722 0.066 \n", + "11 1.364 0.174 \n", + "15 1.700 0.230 \n", + "17 1.625 0.095 \n", + "23 0.353 0.626 \n", + "... ... ... \n", + "10090 0.627 0.175 \n", + "10094 0.714 0.000 \n", + "10095 0.618 0.032 \n", + "10118 1.100 0.096 \n", + "10123 0.683 0.511 \n", + "\n", + "[1519 rows x 21 columns]" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check that the imputation is working well. Compare the rows before and after imputation\n", + "dataset[dataset['Education_Level'] == \"Unknown\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CLIENTNUMAttrition_FlagCustomer_AgeGenderDependent_countEducation_LevelMarital_StatusIncome_CategoryCard_CategoryMonths_on_book...Months_Inactive_12_monContacts_Count_12_monCredit_LimitTotal_Revolving_BalAvg_Open_To_BuyTotal_Amt_Chng_Q4_Q1Total_Trans_AmtTotal_Trans_CtTotal_Ct_Chng_Q4_Q1Avg_Utilization_Ratio
1990051Existing Customer45F2GraduateMarriedUnknownBlue37...1214470.0115713313.00.9661207210.9090.080
2890060Existing Customer44F3UneducatedSingleUnknownBlue34...2210100.0010100.00.5251052181.5710.000
3990071Attrited Customer66F0DoctorateMarriedUnknownBlue56...437882.06057277.01.052704160.1430.077
4490076Existing Customer38F4GraduateSingleUnknownBlue28...339830.020557775.00.9771042230.9170.209
5890090Existing Customer44F5GraduateMarriedUnknownBlue35...126273.09785295.02.2751359251.0830.156
..................................................................
10021100053Attrited Customer30F1GraduateMarriedUnknownBlue18...144377.025171860.00.9418759740.6090.575
10040100072Attrited Customer50F3DoctorateSingleUnknownBlue36...335173.005173.00.9128757680.7890.000
10083100115Existing Customer42F4UneducatedMarriedUnknownBlue23...128348.008348.00.695159051110.7080.000
10092100124Attrited Customer40F3GraduateMarriedUnknownBlue25...236888.018785010.01.0599038640.8290.273
10119100151Attrited Customer55F3UneducatedSingleUnknownBlue47...3314657.0251712140.00.1666009530.5140.172
\n", + "

1112 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " CLIENTNUM Attrition_Flag Customer_Age Gender Dependent_count \\\n", + "19 90051 Existing Customer 45 F 2 \n", + "28 90060 Existing Customer 44 F 3 \n", + "39 90071 Attrited Customer 66 F 0 \n", + "44 90076 Existing Customer 38 F 4 \n", + "58 90090 Existing Customer 44 F 5 \n", + "... ... ... ... ... ... \n", + "10021 100053 Attrited Customer 30 F 1 \n", + "10040 100072 Attrited Customer 50 F 3 \n", + "10083 100115 Existing Customer 42 F 4 \n", + "10092 100124 Attrited Customer 40 F 3 \n", + "10119 100151 Attrited Customer 55 F 3 \n", + "\n", + " Education_Level Marital_Status Income_Category Card_Category \\\n", + "19 Graduate Married Unknown Blue \n", + "28 Uneducated Single Unknown Blue \n", + "39 Doctorate Married Unknown Blue \n", + "44 Graduate Single Unknown Blue \n", + "58 Graduate Married Unknown Blue \n", + "... ... ... ... ... \n", + "10021 Graduate Married Unknown Blue \n", + "10040 Doctorate Single Unknown Blue \n", + "10083 Uneducated Married Unknown Blue \n", + "10092 Graduate Married Unknown Blue \n", + "10119 Uneducated Single Unknown Blue \n", + "\n", + " Months_on_book ... Months_Inactive_12_mon Contacts_Count_12_mon \\\n", + "19 37 ... 1 2 \n", + "28 34 ... 2 2 \n", + "39 56 ... 4 3 \n", + "44 28 ... 3 3 \n", + "58 35 ... 1 2 \n", + "... ... ... ... ... \n", + "10021 18 ... 1 4 \n", + "10040 36 ... 3 3 \n", + "10083 23 ... 1 2 \n", + "10092 25 ... 2 3 \n", + "10119 47 ... 3 3 \n", + "\n", + " Credit_Limit Total_Revolving_Bal Avg_Open_To_Buy \\\n", + "19 14470.0 1157 13313.0 \n", + "28 10100.0 0 10100.0 \n", + "39 7882.0 605 7277.0 \n", + "44 9830.0 2055 7775.0 \n", + "58 6273.0 978 5295.0 \n", + "... ... ... ... \n", + "10021 4377.0 2517 1860.0 \n", + "10040 5173.0 0 5173.0 \n", + "10083 8348.0 0 8348.0 \n", + "10092 6888.0 1878 5010.0 \n", + "10119 14657.0 2517 12140.0 \n", + "\n", + " Total_Amt_Chng_Q4_Q1 Total_Trans_Amt Total_Trans_Ct \\\n", + "19 0.966 1207 21 \n", + "28 0.525 1052 18 \n", + "39 1.052 704 16 \n", + "44 0.977 1042 23 \n", + "58 2.275 1359 25 \n", + "... ... ... ... \n", + "10021 0.941 8759 74 \n", + "10040 0.912 8757 68 \n", + "10083 0.695 15905 111 \n", + "10092 1.059 9038 64 \n", + "10119 0.166 6009 53 \n", + "\n", + " Total_Ct_Chng_Q4_Q1 Avg_Utilization_Ratio \n", + "19 0.909 0.080 \n", + "28 1.571 0.000 \n", + "39 0.143 0.077 \n", + "44 0.917 0.209 \n", + "58 1.083 0.156 \n", + "... ... ... \n", + "10021 0.609 0.575 \n", + "10040 0.789 0.000 \n", + "10083 0.708 0.000 \n", + "10092 0.829 0.273 \n", + "10119 0.514 0.172 \n", + "\n", + "[1112 rows x 21 columns]" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset[dataset['Income_Category'] == \"Unknown\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CLIENTNUMAttrition_FlagCustomer_AgeGenderDependent_countEducation_LevelMarital_StatusIncome_CategoryCard_CategoryMonths_on_book...Months_Inactive_12_monContacts_Count_12_monCredit_LimitTotal_Revolving_BalAvg_Open_To_BuyTotal_Amt_Chng_Q4_Q1Total_Trans_AmtTotal_Trans_CtTotal_Ct_Chng_Q4_Q1Avg_Utilization_Ratio
390035Existing Customer40F4High SchoolUnknownLess than $40KBlue34...413313.02517796.01.4051171202.3330.760
790039Existing Customer32M0High SchoolUnknown$60K - $80KSilver27...2229081.0139627685.02.2041538360.7140.048
1090042Existing Customer42M5UneducatedUnknown$120K +Blue31...326748.014675281.00.8311201420.6800.217
1390045Existing Customer35M3GraduateUnknown$60K - $80KBlue30...138547.016666881.01.1631311332.0000.195
1590047Existing Customer44M4UnknownUnknown$80K - $120KBlue37...124234.09723262.01.7071348271.7000.230
..................................................................
10070100102Existing Customer47M3High SchoolUnknown$80K - $120KSilver40...3234516.0137133145.00.691159301230.8360.040
10100100132Existing Customer39M2GraduateUnknown$60K - $80KSilver36...2229808.0029808.00.669160981280.6840.000
10101100133Existing Customer42M2GraduateUnknown$40K - $60KBlue30...253735.017232012.00.59514501920.8400.461
10118100150Attrited Customer50M1UnknownUnknown$80K - $120KBlue36...349959.09529007.00.82510310631.1000.096
10125100157Attrited Customer30M2GraduateUnknown$40K - $60KBlue36...335281.005281.00.5358395620.7220.000
\n", + "

749 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " CLIENTNUM Attrition_Flag Customer_Age Gender Dependent_count \\\n", + "3 90035 Existing Customer 40 F 4 \n", + "7 90039 Existing Customer 32 M 0 \n", + "10 90042 Existing Customer 42 M 5 \n", + "13 90045 Existing Customer 35 M 3 \n", + "15 90047 Existing Customer 44 M 4 \n", + "... ... ... ... ... ... \n", + "10070 100102 Existing Customer 47 M 3 \n", + "10100 100132 Existing Customer 39 M 2 \n", + "10101 100133 Existing Customer 42 M 2 \n", + "10118 100150 Attrited Customer 50 M 1 \n", + "10125 100157 Attrited Customer 30 M 2 \n", + "\n", + " Education_Level Marital_Status Income_Category Card_Category \\\n", + "3 High School Unknown Less than $40K Blue \n", + "7 High School Unknown $60K - $80K Silver \n", + "10 Uneducated Unknown $120K + Blue \n", + "13 Graduate Unknown $60K - $80K Blue \n", + "15 Unknown Unknown $80K - $120K Blue \n", + "... ... ... ... ... \n", + "10070 High School Unknown $80K - $120K Silver \n", + "10100 Graduate Unknown $60K - $80K Silver \n", + "10101 Graduate Unknown $40K - $60K Blue \n", + "10118 Unknown Unknown $80K - $120K Blue \n", + "10125 Graduate Unknown $40K - $60K Blue \n", + "\n", + " Months_on_book ... Months_Inactive_12_mon Contacts_Count_12_mon \\\n", + "3 34 ... 4 1 \n", + "7 27 ... 2 2 \n", + "10 31 ... 3 2 \n", + "13 30 ... 1 3 \n", + "15 37 ... 1 2 \n", + "... ... ... ... ... \n", + "10070 40 ... 3 2 \n", + "10100 36 ... 2 2 \n", + "10101 30 ... 2 5 \n", + "10118 36 ... 3 4 \n", + "10125 36 ... 3 3 \n", + "\n", + " Credit_Limit Total_Revolving_Bal Avg_Open_To_Buy \\\n", + "3 3313.0 2517 796.0 \n", + "7 29081.0 1396 27685.0 \n", + "10 6748.0 1467 5281.0 \n", + "13 8547.0 1666 6881.0 \n", + "15 4234.0 972 3262.0 \n", + "... ... ... ... \n", + "10070 34516.0 1371 33145.0 \n", + "10100 29808.0 0 29808.0 \n", + "10101 3735.0 1723 2012.0 \n", + "10118 9959.0 952 9007.0 \n", + "10125 5281.0 0 5281.0 \n", + "\n", + " Total_Amt_Chng_Q4_Q1 Total_Trans_Amt Total_Trans_Ct \\\n", + "3 1.405 1171 20 \n", + "7 2.204 1538 36 \n", + "10 0.831 1201 42 \n", + "13 1.163 1311 33 \n", + "15 1.707 1348 27 \n", + "... ... ... ... \n", + "10070 0.691 15930 123 \n", + "10100 0.669 16098 128 \n", + "10101 0.595 14501 92 \n", + "10118 0.825 10310 63 \n", + "10125 0.535 8395 62 \n", + "\n", + " Total_Ct_Chng_Q4_Q1 Avg_Utilization_Ratio \n", + "3 2.333 0.760 \n", + "7 0.714 0.048 \n", + "10 0.680 0.217 \n", + "13 2.000 0.195 \n", + "15 1.700 0.230 \n", + "... ... ... \n", + "10070 0.836 0.040 \n", + "10100 0.684 0.000 \n", + "10101 0.840 0.461 \n", + "10118 1.100 0.096 \n", + "10125 0.722 0.000 \n", + "\n", + "[749 rows x 21 columns]" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset[dataset['Marital_Status'] == \"Unknown\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Data Transformation: Binning" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "count 10127.000000\n", + "mean 46.325960\n", + "std 8.016814\n", + "min 26.000000\n", + "25% 41.000000\n", + "50% 46.000000\n", + "75% 52.000000\n", + "max 73.000000\n", + "Name: Customer_Age, dtype: float64" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get the min. and max. age\n", + "dataset['Customer_Age'].describe()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can use cut function in pandas to create bins for the customer age. However, another way is done below where a function is created and apply function is used later to execute it." + ] + }, + { + "cell_type": "code", + "execution_count": 49, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "def get_age_bins(x):\n", + " if x >=20 and x<30:\n", + " return \"20s\"\n", + " if x >= 30 and x<40:\n", + " return \"30s\"\n", + " if x>=40 and x<50:\n", + " return \"40s\"\n", + " if x>=50 and x<60:\n", + " return \"50s\"\n", + " if x>=60 and x<70:\n", + " return \"60s\"\n", + " if x>=70 and x<80:\n", + " return \"70s\"\n", + " else:\n", + " return \">=80\"\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [], + "source": [ + "dataset['customer_age_bin'] = dataset['Customer_Age'].apply(get_age_bins)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 45\n", + "1 49\n", + "2 51\n", + "3 40\n", + "4 40\n", + "Name: Customer_Age, dtype: int64" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset['Customer_Age'].head()" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 40s\n", + "1 40s\n", + "2 50s\n", + "3 40s\n", + "4 40s\n", + "Name: customer_age_bin, dtype: object" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset['customer_age_bin'].head()" + ] } ], "metadata": { @@ -70,7 +3240,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.10.11" } }, "nbformat": 4, From 72b828ee4d450456fdea253b0bd675bfc9a71819 Mon Sep 17 00:00:00 2001 From: Alaa Date: Wed, 6 Nov 2024 13:12:29 +0000 Subject: [PATCH 2/3] EDA_Part_1 --- data/Dirty Data.ipynb | 367 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 326 insertions(+), 41 deletions(-) diff --git a/data/Dirty Data.ipynb b/data/Dirty Data.ipynb index c224a42..08a08c5 100644 --- a/data/Dirty Data.ipynb +++ b/data/Dirty Data.ipynb @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -26,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -44,7 +44,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -62,7 +62,7 @@ " dtype='object')" ] }, - "execution_count": 18, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -74,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -300,7 +300,7 @@ "[5 rows x 23 columns]" ] }, - "execution_count": 17, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -326,7 +326,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -335,7 +335,7 @@ "10127" ] }, - "execution_count": 22, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -355,7 +355,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -364,7 +364,7 @@ "10127" ] }, - "execution_count": 24, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -385,7 +385,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -394,7 +394,7 @@ "(10127, 23)" ] }, - "execution_count": 26, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -424,7 +424,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -434,7 +434,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -469,7 +469,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -499,7 +499,7 @@ "dtype: object" ] }, - "execution_count": 29, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -518,7 +518,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -548,7 +548,7 @@ "dtype: int64" ] }, - "execution_count": 30, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -567,7 +567,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -966,7 +966,7 @@ "[1519 rows x 21 columns]" ] }, - "execution_count": 33, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -985,7 +985,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -1384,7 +1384,7 @@ "[749 rows x 21 columns]" ] }, - "execution_count": 35, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -1396,7 +1396,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -1795,7 +1795,7 @@ "[1112 rows x 21 columns]" ] }, - "execution_count": 36, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -1814,7 +1814,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -1826,7 +1826,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -1856,7 +1856,7 @@ "dtype: int64" ] }, - "execution_count": 38, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -1868,7 +1868,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -2267,7 +2267,7 @@ "[1519 rows x 21 columns]" ] }, - "execution_count": 39, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -2279,7 +2279,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -2678,7 +2678,7 @@ "[1112 rows x 21 columns]" ] }, - "execution_count": 40, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -2689,7 +2689,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -3088,7 +3088,7 @@ "[749 rows x 21 columns]" ] }, - "execution_count": 41, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -3106,7 +3106,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -3123,7 +3123,7 @@ "Name: Customer_Age, dtype: float64" ] }, - "execution_count": 42, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -3142,7 +3142,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -3166,7 +3166,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -3175,7 +3175,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 25, "metadata": {}, "outputs": [ { @@ -3189,7 +3189,7 @@ "Name: Customer_Age, dtype: int64" ] }, - "execution_count": 52, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -3200,7 +3200,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -3214,7 +3214,7 @@ "Name: customer_age_bin, dtype: object" ] }, - "execution_count": 53, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -3222,6 +3222,291 @@ "source": [ "dataset['customer_age_bin'].head()" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "EDA" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Attrition_Flag\n", + "Existing Customer 8500\n", + "Attrited Customer 1627\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset[\"Attrition_Flag\"].value_counts()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Calculate the percentage of the churned customers" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "16.07 % of our customers have churned\n" + ] + } + ], + "source": [ + "# Calculate the churn percentage\n", + "churned_percent = round(dataset[\"Attrition_Flag\"].value_counts()['Attrited Customer']/ dataset.shape[0] *100 , 2)\n", + "# Print the percentage of the churn\n", + "print(f\"{churned_percent} % of our customers have churned\")\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Summary Statistics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The average number of relationship of the customers in years was around 4 years (3.81)." + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The mean of the toata relatioanship count is :3.81 and the medain is 4.0\n" + ] + } + ], + "source": [ + "# The mean and median of the \n", + "print(f\"The mean of the toata relatioanship count is :{round(dataset['Total_Relationship_Count'].mean(), 2)} and the medain is {np.median(dataset['Total_Relationship_Count'])}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The longest number of relationship of the customers was 6 years." + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The maximum number of relatioanship count is :6\n" + ] + } + ], + "source": [ + "print(f\"The maximum number of relatioanship count is :{round(np.max(dataset['Total_Relationship_Count']), 2)}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The average credit limit of customers was 8631.95 and the median is 4549." + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The average credit limit is : 8631.95 while the median is 4549.0\n" + ] + } + ], + "source": [ + "print(f\"The average credit limit is : {round(np.mean(dataset['Credit_Limit']), 2)} while the median is {round(np.median(dataset['Credit_Limit']), 2)}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The difference between the mean and the median of credit_limit suggests the existing of outliers in this variable." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Histograms" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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f3Cx/4OrKe7/EOuHvqcEAADQwDTIc2AAAAC+DwEDAACMQ8AAAADjEDAAAMA4BIxh5s+frz59+tgXK/J4PFqzZo29/dSpU0pLS1OHDh3Upk0bjRw58pwLAqLuzJkzRyEhIZo8ebK9jteg/syaNUshISEBS48ePezt7Pv69+9//1v33XefOnTooPDwcPXu3Vs7d+60t1uWpRkzZig6Olrh4eFKSkrSvn37gjjjxqNr167nvP9DQkKUlpYmqem9/wkYw3Tu3Flz5sxRQUGBdu7cqZtuukm33XabioqKJElTpkzRBx98oOXLlysvL0+HDx/WnXfeGeRZN047duzQX/7yF/Xp0ydgPa9B/br22mt15MgRe/noo4/sbez7+vX1119r4MCBatGihdasWaNPP/1Uzz33nNq1a2ePmTt3rubNm6cFCxZo27Ztat26tZKTk3Xq1Kkgzrxx2LFjR8B7PycnR5J01113SWqC738LxmvXrp312muvWRUVFVaLFi2s5cuX29s+++wzS5KVn58fxBk2PsePH7euvvpqKycnx/rFL35hPfLII5ZlWbwG9WzmzJlW3759z7uNfV//MjMzrUGDBl1we01NjeV2u61nn33WXldRUWE5HA7rnXfeuRxTbFIeeeQR68orr7Rqamqa5PufIzAGO3PmjJYsWaLKykp5PB4VFBTo9OnTSkpKssf06NFDXbp0UX5+fhBn2vikpaUpJSUlYF9L4jW4DPbt26eYmBhdccUVGj16tEpLSyWx7y+H999/X/3799ddd92lyMhI9evXT3/961/t7SUlJfJ6vQGvgcvlUmJiIq9BHauurtbbb7+tBx98UCEhIU3y/U/AGGj37t1q06aNHA6HJk6cqBUrVig+Pl5er1dhYWHn/BHLqKgoeb3e4Ey2EVqyZIk++eQTZWdnn7ON16B+JSYmauHChVq7dq3mz5+vkpISDR48WMePH2ffXwaff/655s+fr6uvvlrr1q3TpEmT9Nvf/lZvvfWWJNn7+btXTOc1qHsrV65URUWFxo4dK6lp/t/TYP+UAC6se/fuKiwslM/n09///nelpqYqLy8v2NNqEg4dOqRHHnlEOTk5atmyZbCn0+SMGDHC/nefPn2UmJiouLg4LVu2TOHh4UGcWdNQU1Oj/v376+mnn5Yk9evXT3v27NGCBQuUmpoa5Nk1La+//rpGjBihmJiYYE8laDgCY6CwsDBdddVVSkhIUHZ2tvr27auXXnpJbrdb1dXVqqioCBhfVlYmt9sdnMk2MgUFBSovL9f111+v0NBQhYaGKi8vT/PmzVNoaKiioqJ4DS6jiIgIXXPNNdq/fz/v/8sgOjpa8fHxAet69uxpf4x3dj9/95svvAZ164svvtCHH36ohx56yF7XFN//BEwjUFNTo6qqKiUkJKhFixbKzc21txUXF6u0tFQejyeIM2w8hg4dqt27d6uwsNBe+vfvr9GjR9v/5jW4fE6cOKEDBw4oOjqa9/9lMHDgQBUXFwes+9e//qW4uDhJUrdu3eR2uwNeA7/fr23btvEa1KE333xTkZGRSklJsdc1yfd/sM8iRu1MmzbNysvLs0pKSqxdu3ZZ06ZNs0JCQqz169dblmVZEydOtLp06WJt2LDB2rlzp+XxeCyPxxPkWTdu3/4WkmXxGtSnqVOnWps2bbJKSkqsLVu2WElJSVbHjh2t8vJyy7LY9/Vt+/btVmhoqPWHP/zB2rdvn7Vo0SKrVatW1ttvv22PmTNnjhUREWG999571q5du6zbbrvN6tatm3Xy5MkgzrzxOHPmjNWlSxcrMzPznG1N7f1PwBjmwQcftOLi4qywsDCrU6dO1tChQ+14sSzLOnnypPWb3/zGateundWqVSvrjjvusI4cORLEGTd+3w0YXoP6c/fdd1vR0dFWWFiY9ZOf/MS6++67rf3799vb2ff174MPPrB69eplORwOq0ePHtarr74asL2mpsb63e9+Z0VFRVkOh8MaOnSoVVxcHKTZNj7r1q2zJJ13nza193+IZVlWsI8CAQAA1AbnwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIzzf6X7jiYFUkUPAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.hist(dataset['Customer_Age']);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Based on the above histogram plot, customer age is normaly distributed." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, display a histogram showing the frequency of months on booking." + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.hist(dataset['Months_on_book']);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The above figure shows more normal distributed variable. The biggest number of customers (~3500) have 36 months on booking. More investigation can be conducted to understand this output. The biggest number of customers at 36 months can be linked to a company campain 36 months ago or every new customer gets 36 as a default month_on_booking." + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjYAAAGdCAYAAAABhTmFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/OQEPoAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAoAElEQVR4nO3df3RU5Z3H8U8SmCH8mIQAmSElwVAUiPxwiTXMVtkiWQKNXS3xrFiWsoq4sMFTQPmRlqLQPSccXKVY+dFdWuM5K6WwR3QlAqbBhLUElNQIAcmKjRtcmISKmQGEJJBn//DkHkaCmBBI8vB+nXPPYe7zvTfP83gn8/HOvTcRxhgjAAAAC0S2dwcAAADaCsEGAABYg2ADAACsQbABAADWINgAAABrEGwAAIA1CDYAAMAaBBsAAGCNLu3dgeulsbFRx48fV69evRQREdHe3QEAAN+AMUanT59WQkKCIiNbfv7F2mBz/PhxJSYmtnc3AABAKxw7dkwDBgxo8XbWBptevXpJ+nJiPB5PO/cGAAB8E6FQSImJic7neEtZG2yavn7yeDwEGwAAOpnWXkbCxcMAAMAaBBsAAGANgg0AALAGwQYAAFiDYAMAAKxBsAEAANYg2AAAAGsQbAAAgDUINgAAwBoEGwAAYA2CDQAAsAbBBgAAWINgAwAArEGwAQAA1ujS3h3ojG5ZnN/eXWixT1ZktncXAAC47jhjAwAArEGwAQAA1iDYAAAAaxBsAACANQg2AADAGgQbAABgDYINAACwBsEGAABYg2ADAACs0aJg88wzzygiIiJsGTp0qNN+/vx5ZWdnq0+fPurZs6eysrJUXV0dto+qqiplZmaqe/fuio+P14IFC3ThwoWwmqKiIo0ePVput1uDBw9WXl5e60cIAABuGi0+Y3P77bfrxIkTzvLOO+84bfPmzdMbb7yhLVu2qLi4WMePH9fkyZOd9osXLyozM1P19fXas2ePXn75ZeXl5Wnp0qVOTWVlpTIzMzVu3DiVlZVp7ty5euyxx7Rz585rHCoAALBdi/9WVJcuXeTz+S5bHwwG9Zvf/EYbN27UvffeK0l66aWXNGzYMO3du1djxozRW2+9pcOHD+sPf/iDvF6v7rjjDv3iF7/QokWL9Mwzz8jlcmn9+vVKTk7Wc889J0kaNmyY3nnnHa1atUoZGRnXOFwAAGCzFp+x+eijj5SQkKBBgwZp6tSpqqqqkiSVlpaqoaFB6enpTu3QoUOVlJSkkpISSVJJSYlGjBghr9fr1GRkZCgUCunQoUNOzaX7aKpp2gcAAMCVtOiMTVpamvLy8jRkyBCdOHFCy5Yt0z333KPy8nIFAgG5XC7FxsaGbeP1ehUIBCRJgUAgLNQ0tTe1fV1NKBTSuXPnFB0d3Wzf6urqVFdX57wOhUItGRoAALBAi4LNpEmTnH+PHDlSaWlpGjhwoDZv3nzFwHGj5ObmatmyZe3aBwAA0L6u6Xbv2NhY3XbbbTp69Kh8Pp/q6+tVW1sbVlNdXe1ck+Pz+S67S6rp9dVqPB7P14annJwcBYNBZzl27Ni1DA0AAHRC1xRszpw5o48//lj9+/dXamqqunbtqsLCQqe9oqJCVVVV8vv9kiS/36+DBw+qpqbGqSkoKJDH41FKSopTc+k+mmqa9nElbrdbHo8nbAEAADeXFgWbp556SsXFxfrkk0+0Z88e/fCHP1RUVJQefvhhxcTEaMaMGZo/f77efvttlZaW6pFHHpHf79eYMWMkSRMmTFBKSoqmTZumDz74QDt37tSSJUuUnZ0tt9stSZo1a5b+/Oc/a+HChTpy5IjWrl2rzZs3a968eW0/egAAYJUWXWPz6aef6uGHH9Znn32mfv366e6779bevXvVr18/SdKqVasUGRmprKws1dXVKSMjQ2vXrnW2j4qK0rZt2zR79mz5/X716NFD06dP1/Lly52a5ORk5efna968eVq9erUGDBigDRs2cKs3AAC4qghjjGnvTlwPoVBIMTExCgaDbf611C2L89t0fzfCJysy27sLAABc1bV+fvO3ogAAgDUINgAAwBoEGwAAYA2CDQAAsAbBBgAAWINgAwAArEGwAQAA1iDYAAAAaxBsAACANQg2AADAGgQbAABgDYINAACwBsEGAABYg2ADAACsQbABAADWINgAAABrEGwAAIA1CDYAAMAaBBsAAGANgg0AALAGwQYAAFiDYAMAAKxBsAEAANYg2AAAAGsQbAAAgDUINgAAwBoEGwAAYA2CDQAAsAbBBgAAWINgAwAArEGwAQAA1iDYAAAAaxBsAACANQg2AADAGgQbAABgDYINAACwBsEGAABYg2ADAACsQbABAADWINgAAABrEGwAAIA1CDYAAMAaBBsAAGANgg0AALAGwQYAAFiDYAMAAKxBsAEAANYg2AAAAGsQbAAAgDUINgAAwBoEGwAAYA2CDQAAsAbBBgAAWINgAwAArEGwAQAA1iDYAAAAaxBsAACANa4p2KxYsUIRERGaO3eus+78+fPKzs5Wnz591LNnT2VlZam6ujpsu6qqKmVmZqp79+6Kj4/XggULdOHChbCaoqIijR49Wm63W4MHD1ZeXt61dBUAANwEWh1s3nvvPf3617/WyJEjw9bPmzdPb7zxhrZs2aLi4mIdP35ckydPdtovXryozMxM1dfXa8+ePXr55ZeVl5enpUuXOjWVlZXKzMzUuHHjVFZWprlz5+qxxx7Tzp07W9tdAABwE2hVsDlz5oymTp2qf//3f1fv3r2d9cFgUL/5zW/0/PPP695771Vqaqpeeukl7dmzR3v37pUkvfXWWzp8+LD+4z/+Q3fccYcmTZqkX/ziF1qzZo3q6+slSevXr1dycrKee+45DRs2THPmzNGDDz6oVatWtcGQAQCArVoVbLKzs5WZman09PSw9aWlpWpoaAhbP3ToUCUlJamkpESSVFJSohEjRsjr9To1GRkZCoVCOnTokFPz1X1nZGQ4+2hOXV2dQqFQ2AIAAG4uXVq6waZNm/SnP/1J77333mVtgUBALpdLsbGxYeu9Xq8CgYBTc2moaWpvavu6mlAopHPnzik6Ovqyn52bm6tly5a1dDgAAMAiLTpjc+zYMf3kJz/RK6+8om7dul2vPrVKTk6OgsGgsxw7dqy9uwQAAG6wFgWb0tJS1dTUaPTo0erSpYu6dOmi4uJivfDCC+rSpYu8Xq/q6+tVW1sbtl11dbV8Pp8kyefzXXaXVNPrq9V4PJ5mz9ZIktvtlsfjCVsAAMDNpUXBZvz48Tp48KDKysqc5c4779TUqVOdf3ft2lWFhYXONhUVFaqqqpLf75ck+f1+HTx4UDU1NU5NQUGBPB6PUlJSnJpL99FU07QPAACA5rToGptevXpp+PDhYet69OihPn36OOtnzJih+fPnKy4uTh6PR0888YT8fr/GjBkjSZowYYJSUlI0bdo0rVy5UoFAQEuWLFF2drbcbrckadasWXrxxRe1cOFCPfroo9q1a5c2b96s/Pz8thgzAACwVIsvHr6aVatWKTIyUllZWaqrq1NGRobWrl3rtEdFRWnbtm2aPXu2/H6/evTooenTp2v58uVOTXJysvLz8zVv3jytXr1aAwYM0IYNG5SRkdHW3QUAABaJMMaY9u7E9RAKhRQTE6NgMNjm19vcsrjznTn6ZEVme3cBAICrutbPb/5WFAAAsAbBBgAAWINgAwAArEGwAQAA1iDYAAAAaxBsAACANQg2AADAGgQbAABgDYINAACwBsEGAABYg2ADAACsQbABAADWINgAAABrEGwAAIA1CDYAAMAaBBsAAGANgg0AALAGwQYAAFiDYAMAAKxBsAEAANYg2AAAAGsQbAAAgDUINgAAwBoEGwAAYA2CDQAAsAbBBgAAWINgAwAArEGwAQAA1iDYAAAAaxBsAACANQg2AADAGgQbAABgDYINAACwBsEGAABYg2ADAACsQbABAADWINgAAABrEGwAAIA1CDYAAMAaBBsAAGANgg0AALAGwQYAAFiDYAMAAKxBsAEAANYg2AAAAGsQbAAAgDUINgAAwBoEGwAAYA2CDQAAsAbBBgAAWINgAwAArEGwAQAA1iDYAAAAaxBsAACANQg2AADAGgQbAABgjRYFm3Xr1mnkyJHyeDzyeDzy+/3avn27037+/HllZ2erT58+6tmzp7KyslRdXR22j6qqKmVmZqp79+6Kj4/XggULdOHChbCaoqIijR49Wm63W4MHD1ZeXl7rRwgAAG4aLQo2AwYM0IoVK1RaWqr9+/fr3nvv1f33369Dhw5JkubNm6c33nhDW7ZsUXFxsY4fP67Jkyc721+8eFGZmZmqr6/Xnj179PLLLysvL09Lly51aiorK5WZmalx48aprKxMc+fO1WOPPaadO3e20ZABAICtIowx5lp2EBcXp2effVYPPvig+vXrp40bN+rBBx+UJB05ckTDhg1TSUmJxowZo+3bt+u+++7T8ePH5fV6JUnr16/XokWLdPLkSblcLi1atEj5+fkqLy93fsaUKVNUW1urHTt2fON+hUIhxcTEKBgMyuPxXMsQL3PL4vw23d+N8MmKzPbuAgAAV3Wtn9+tvsbm4sWL2rRpk86ePSu/36/S0lI1NDQoPT3dqRk6dKiSkpJUUlIiSSopKdGIESOcUCNJGRkZCoVCzlmfkpKSsH001TTtAwAA4Eq6tHSDgwcPyu/36/z58+rZs6e2bt2qlJQUlZWVyeVyKTY2Nqze6/UqEAhIkgKBQFioaWpvavu6mlAopHPnzik6OrrZftXV1amurs55HQqFWjo0AADQybX4jM2QIUNUVlamffv2afbs2Zo+fboOHz58PfrWIrm5uYqJiXGWxMTE9u4SAAC4wVocbFwulwYPHqzU1FTl5uZq1KhRWr16tXw+n+rr61VbWxtWX11dLZ/PJ0ny+XyX3SXV9PpqNR6P54pnayQpJydHwWDQWY4dO9bSoQEAgE7ump9j09jYqLq6OqWmpqpr164qLCx02ioqKlRVVSW/3y9J8vv9OnjwoGpqapyagoICeTwepaSkODWX7qOppmkfV+J2u53b0JsWAABwc2nRNTY5OTmaNGmSkpKSdPr0aW3cuFFFRUXauXOnYmJiNGPGDM2fP19xcXHyeDx64okn5Pf7NWbMGEnShAkTlJKSomnTpmnlypUKBAJasmSJsrOz5Xa7JUmzZs3Siy++qIULF+rRRx/Vrl27tHnzZuXnd747kQAAwI3VomBTU1OjH//4xzpx4oRiYmI0cuRI7dy5U3/7t38rSVq1apUiIyOVlZWluro6ZWRkaO3atc72UVFR2rZtm2bPni2/368ePXpo+vTpWr58uVOTnJys/Px8zZs3T6tXr9aAAQO0YcMGZWRktNGQAQCAra75OTYdFc+xCcdzbAAAnUG7PccGAACgoyHYAAAAaxBsAACANQg2AADAGgQbAABgDYINAACwBsEGAABYg2ADAACsQbABAADWINgAAABrEGwAAIA1CDYAAMAaBBsAAGANgg0AALAGwQYAAFiDYAMAAKxBsAEAANYg2AAAAGsQbAAAgDUINgAAwBoEGwAAYA2CDQAAsAbBBgAAWINgAwAArEGwAQAA1iDYAAAAaxBsAACANQg2AADAGgQbAABgDYINAACwBsEGAABYg2ADAACsQbABAADWINgAAABrEGwAAIA1CDYAAMAaBBsAAGANgg0AALAGwQYAAFiDYAMAAKxBsAEAANYg2AAAAGsQbAAAgDUINgAAwBoEGwAAYA2CDQAAsAbBBgAAWINgAwAArEGwAQAA1iDYAAAAaxBsAACANQg2AADAGgQbAABgDYINAACwBsEGAABYg2ADAACsQbABAADWaFGwyc3N1Xe+8x316tVL8fHxeuCBB1RRURFWc/78eWVnZ6tPnz7q2bOnsrKyVF1dHVZTVVWlzMxMde/eXfHx8VqwYIEuXLgQVlNUVKTRo0fL7XZr8ODBysvLa90IAQDATaNFwaa4uFjZ2dnau3evCgoK1NDQoAkTJujs2bNOzbx58/TGG29oy5YtKi4u1vHjxzV58mSn/eLFi8rMzFR9fb327Nmjl19+WXl5eVq6dKlTU1lZqczMTI0bN05lZWWaO3euHnvsMe3cubMNhgwAAGwVYYwxrd345MmTio+PV3FxscaOHatgMKh+/fpp48aNevDBByVJR44c0bBhw1RSUqIxY8Zo+/btuu+++3T8+HF5vV5J0vr167Vo0SKdPHlSLpdLixYtUn5+vsrLy52fNWXKFNXW1mrHjh3fqG+hUEgxMTEKBoPyeDytHWKzblmc36b7uxE+WZHZ3l0AAOCqrvXz+5qusQkGg5KkuLg4SVJpaakaGhqUnp7u1AwdOlRJSUkqKSmRJJWUlGjEiBFOqJGkjIwMhUIhHTp0yKm5dB9NNU37aE5dXZ1CoVDYAgAAbi6tDjaNjY2aO3euvvvd72r48OGSpEAgIJfLpdjY2LBar9erQCDg1Fwaapram9q+riYUCuncuXPN9ic3N1cxMTHOkpiY2NqhAQCATqrVwSY7O1vl5eXatGlTW/an1XJychQMBp3l2LFj7d0lAABwg3VpzUZz5szRtm3btHv3bg0YMMBZ7/P5VF9fr9ra2rCzNtXV1fL5fE7Nu+++G7a/prumLq356p1U1dXV8ng8io6ObrZPbrdbbre7NcMBAACWaNEZG2OM5syZo61bt2rXrl1KTk4Oa09NTVXXrl1VWFjorKuoqFBVVZX8fr8kye/36+DBg6qpqXFqCgoK5PF4lJKS4tRcuo+mmqZ9AAAANKdFZ2yys7O1ceNGvf766+rVq5dzTUxMTIyio6MVExOjGTNmaP78+YqLi5PH49ETTzwhv9+vMWPGSJImTJiglJQUTZs2TStXrlQgENCSJUuUnZ3tnHGZNWuWXnzxRS1cuFCPPvqodu3apc2bNys/v/PdjQQAAG6cFp2xWbdunYLBoL73ve+pf//+zvL73//eqVm1apXuu+8+ZWVlaezYsfL5fHr11Ved9qioKG3btk1RUVHy+/36h3/4B/34xz/W8uXLnZrk5GTl5+eroKBAo0aN0nPPPacNGzYoIyOjDYYMAABsdU3PsenIeI5NOJ5jAwDoDNr1OTYAAAAdCcEGAABYg2ADAACsQbABAADWINgAAABrEGwAAIA1CDYAAMAaBBsAAGANgg0AALAGwQYAAFiDYAMAAKxBsAEAANYg2AAAAGsQbAAAgDUINgAAwBoEGwAAYA2CDQAAsAbBBgAAWINgAwAArEGwAQAA1iDYAAAAaxBsAACANQg2AADAGgQbAABgDYINAACwRpf27gBujFsW57d3F1rlkxWZ7d0FAEAnwhkbAABgDYINAACwBsEGAABYg2ADAACsQbABAADWINgAAABrEGwAAIA1CDYAAMAaBBsAAGANgg0AALAGwQYAAFiDYAMAAKxBsAEAANYg2AAAAGsQbAAAgDUINgAAwBoEGwAAYA2CDQAAsAbBBgAAWINgAwAArEGwAQAA1iDYAAAAaxBsAACANQg2AADAGgQbAABgDYINAACwBsEGAABYg2ADAACsQbABAADWINgAAABrEGwAAIA1Whxsdu/erR/84AdKSEhQRESEXnvttbB2Y4yWLl2q/v37Kzo6Wunp6froo4/Cak6dOqWpU6fK4/EoNjZWM2bM0JkzZ8JqDhw4oHvuuUfdunVTYmKiVq5c2fLRAQCAm0qLg83Zs2c1atQorVmzptn2lStX6oUXXtD69eu1b98+9ejRQxkZGTp//rxTM3XqVB06dEgFBQXatm2bdu/erccff9xpD4VCmjBhggYOHKjS0lI9++yzeuaZZ/Rv//ZvrRgiAAC4WUQYY0yrN46I0NatW/XAAw9I+vJsTUJCgp588kk99dRTkqRgMCiv16u8vDxNmTJFH374oVJSUvTee+/pzjvvlCTt2LFD3//+9/Xpp58qISFB69at089+9jMFAgG5XC5J0uLFi/Xaa6/pyJEj36hvoVBIMTExCgaD8ng8rR1is25ZnN+m+8OVfbIis727AAC4ga7187tNr7GprKxUIBBQenq6sy4mJkZpaWkqKSmRJJWUlCg2NtYJNZKUnp6uyMhI7du3z6kZO3asE2okKSMjQxUVFfr888+b/dl1dXUKhUJhCwAAuLm0abAJBAKSJK/XG7be6/U6bYFAQPHx8WHtXbp0UVxcXFhNc/u49Gd8VW5urmJiYpwlMTHx2gcEAAA6FWvuisrJyVEwGHSWY8eOtXeXAADADdamwcbn80mSqqurw9ZXV1c7bT6fTzU1NWHtFy5c0KlTp8JqmtvHpT/jq9xutzweT9gCAABuLm0abJKTk+Xz+VRYWOisC4VC2rdvn/x+vyTJ7/ertrZWpaWlTs2uXbvU2NiotLQ0p2b37t1qaGhwagoKCjRkyBD17t27LbsMAAAs0qWlG5w5c0ZHjx51XldWVqqsrExxcXFKSkrS3Llz9S//8i+69dZblZycrJ///OdKSEhw7pwaNmyYJk6cqJkzZ2r9+vVqaGjQnDlzNGXKFCUkJEiSfvSjH2nZsmWaMWOGFi1apPLycq1evVqrVq1qm1Gj0+iMd6BxJxcAtJ8WB5v9+/dr3Lhxzuv58+dLkqZPn668vDwtXLhQZ8+e1eOPP67a2lrdfffd2rFjh7p16+Zs88orr2jOnDkaP368IiMjlZWVpRdeeMFpj4mJ0VtvvaXs7Gylpqaqb9++Wrp0adizbgAAAL7qmp5j05HxHBu0F87YAEDrdajn2AAAALQngg0AALAGwQYAAFiDYAMAAKxBsAEAANYg2AAAAGsQbAAAgDUINgAAwBoEGwAAYA2CDQAAsAbBBgAAWINgAwAArEGwAQAA1iDYAAAAaxBsAACANQg2AADAGgQbAABgDYINAACwRpf27gAAADe7Wxbnt3cXWuyTFZnt3YVmccYGAABYgzM2QBvj/7wAoP1wxgYAAFiDYAMAAKxBsAEAANYg2AAAAGsQbAAAgDUINgAAwBoEGwAAYA2CDQAAsAbBBgAAWINgAwAArEGwAQAA1iDYAAAAa/BHMAHwhzsBWIMzNgAAwBoEGwAAYA2CDQAAsAbBBgAAWINgAwAArEGwAQAA1uB2bwCdEreoA2gOZ2wAAIA1CDYAAMAafBUFADcIX58B1x9nbAAAgDUINgAAwBoEGwAAYA2CDQAAsAbBBgAAWIO7ogAAV8SdXOhsOGMDAACsQbABAADW4KsoAIBVOuPXZ2g7nLEBAADWINgAAABrEGwAAIA1OnSwWbNmjW655RZ169ZNaWlpevfdd9u7SwAAoAPrsMHm97//vebPn6+nn35af/rTnzRq1ChlZGSopqamvbsGAAA6qA4bbJ5//nnNnDlTjzzyiFJSUrR+/Xp1795dv/3tb9u7awAAoIPqkLd719fXq7S0VDk5Oc66yMhIpaenq6SkpNlt6urqVFdX57wOBoOSpFAo1Ob9a6z7os33CQBAZ3I9Pl8v3a8xplXbd8hg85e//EUXL16U1+sNW+/1enXkyJFmt8nNzdWyZcsuW5+YmHhd+ggAwM0s5pfXd/+nT59WTExMi7frkMGmNXJycjR//nzndWNjo06dOqU+ffro9OnTSkxM1LFjx+TxeNqxlx1DKBRiPi7BfIRjPsIxH5djTsIxH+GudT6MMTp9+rQSEhJa9fM7ZLDp27evoqKiVF1dHba+urpaPp+v2W3cbrfcbnfYutjYWElSRESEJMnj8XDQXYL5CMd8hGM+wjEfl2NOwjEf4a5lPlpzpqZJh7x42OVyKTU1VYWFhc66xsZGFRYWyu/3t2PPAABAR9Yhz9hI0vz58zV9+nTdeeeduuuuu/TLX/5SZ8+e1SOPPNLeXQMAAB1Uhw02Dz30kE6ePKmlS5cqEAjojjvu0I4dOy67oPibcLvdevrppy/7qupmxXyEYz7CMR/hmI/LMSfhmI9w7T0fEaa191MBAAB0MB3yGhsAAIDWINgAAABrEGwAAIA1CDYAAMAa1gebNWvW6JZbblG3bt2Ulpamd999t7271CaeeeYZRUREhC1Dhw512s+fP6/s7Gz16dNHPXv2VFZW1mUPPKyqqlJmZqa6d++u+Ph4LViwQBcuXAirKSoq0ujRo+V2uzV48GDl5eXdiOFd1e7du/WDH/xACQkJioiI0GuvvRbWbozR0qVL1b9/f0VHRys9PV0fffRRWM2pU6c0depUeTwexcbGasaMGTpz5kxYzYEDB3TPPfeoW7duSkxM1MqVKy/ry5YtWzR06FB169ZNI0aM0Jtvvtnm472aq83HP/7jP152vEycODGsxqb5yM3N1Xe+8x316tVL8fHxeuCBB1RRURFWcyPfI+39e+ibzMf3vve9y46RWbNmhdXYMh/r1q3TyJEjnQfI+f1+bd++3Wm/mY4N6erz0emODWOxTZs2GZfLZX7729+aQ4cOmZkzZ5rY2FhTXV3d3l27Zk8//bS5/fbbzYkTJ5zl5MmTTvusWbNMYmKiKSwsNPv37zdjxowxf/3Xf+20X7hwwQwfPtykp6eb999/37z55pumb9++Jicnx6n585//bLp3727mz59vDh8+bH71q1+ZqKgos2PHjhs61ua8+eab5mc/+5l59dVXjSSzdevWsPYVK1aYmJgY89prr5kPPvjA/N3f/Z1JTk42586dc2omTpxoRo0aZfbu3Wv++7//2wwePNg8/PDDTnswGDRer9dMnTrVlJeXm9/97ncmOjra/PrXv3Zq/vjHP5qoqCizcuVKc/jwYbNkyRLTtWtXc/Dgwes+B5e62nxMnz7dTJw4Mex4OXXqVFiNTfORkZFhXnrpJVNeXm7KysrM97//fZOUlGTOnDnj1Nyo90hH+D30Tebjb/7mb8zMmTPDjpFgMOi02zQf//Vf/2Xy8/PN//zP/5iKigrz05/+1HTt2tWUl5cbY26uY8OYq89HZzs2rA42d911l8nOznZeX7x40SQkJJjc3Nx27FXbePrpp82oUaOabautrTVdu3Y1W7ZscdZ9+OGHRpIpKSkxxnz5QRgZGWkCgYBTs27dOuPxeExdXZ0xxpiFCxea22+/PWzfDz30kMnIyGjj0Vybr36QNzY2Gp/PZ5599llnXW1trXG73eZ3v/udMcaYw4cPG0nmvffec2q2b99uIiIizP/93/8ZY4xZu3at6d27tzMfxhizaNEiM2TIEOf13//935vMzMyw/qSlpZl/+qd/atMxtsSVgs39999/xW1sng9jjKmpqTGSTHFxsTHmxr5HOuLvoa/OhzFffnj95Cc/ueI2Ns+HMcb07t3bbNiw4aY/Npo0zYcxne/YsParqPr6epWWlio9Pd1ZFxkZqfT0dJWUlLRjz9rORx99pISEBA0aNEhTp05VVVWVJKm0tFQNDQ1hYx86dKiSkpKcsZeUlGjEiBFhDzzMyMhQKBTSoUOHnJpL99FU09Hnr7KyUoFAIKzvMTExSktLCxt/bGys7rzzTqcmPT1dkZGR2rdvn1MzduxYuVwupyYjI0MVFRX6/PPPnZrOMkdFRUWKj4/XkCFDNHv2bH322WdOm+3zEQwGJUlxcXGSbtx7pKP+HvrqfDR55ZVX1LdvXw0fPlw5OTn64osvnDZb5+PixYvatGmTzp49K7/ff9MfG1+djyad6djosE8evlZ/+ctfdPHixcueVOz1enXkyJF26lXbSUtLU15enoYMGaITJ05o2bJluueee1ReXq5AICCXy+X8EdAmXq9XgUBAkhQIBJqdm6a2r6sJhUI6d+6coqOjr9Pork1T/5vr+6Vji4+PD2vv0qWL4uLiwmqSk5Mv20dTW+/eva84R0376CgmTpyoyZMnKzk5WR9//LF++tOfatKkSSopKVFUVJTV89HY2Ki5c+fqu9/9roYPHy5JN+w98vnnn3e430PNzYck/ehHP9LAgQOVkJCgAwcOaNGiRaqoqNCrr74qyb75OHjwoPx+v86fP6+ePXtq69atSklJUVlZ2U15bFxpPqTOd2xYG2xsN2nSJOffI0eOVFpamgYOHKjNmzd32MCB9jNlyhTn3yNGjNDIkSP17W9/W0VFRRo/fnw79uz6y87OVnl5ud5555327kqHcKX5ePzxx51/jxgxQv3799f48eP18ccf69vf/vaN7uZ1N2TIEJWVlSkYDOo///M/NX36dBUXF7d3t9rNleYjJSWl0x0b1n4V1bdvX0VFRV12JXt1dbV8Pl879er6iY2N1W233aajR4/K5/Opvr5etbW1YTWXjt3n8zU7N01tX1fj8Xg6dHhq6v/X/bf3+XyqqakJa79w4YJOnTrVJnPU0Y+xQYMGqW/fvjp69Kgke+djzpw52rZtm95++20NGDDAWX+j3iMd7ffQleajOWlpaZIUdozYNB8ul0uDBw9WamqqcnNzNWrUKK1evfqmPTauNB/N6ejHhrXBxuVyKTU1VYWFhc66xsZGFRYWhn1vaIszZ87o448/Vv/+/ZWamqquXbuGjb2iokJVVVXO2P1+vw4ePBj2YVZQUCCPx+OcfvT7/WH7aKrp6POXnJwsn88X1vdQKKR9+/aFjb+2tlalpaVOza5du9TY2Oi8af1+v3bv3q2GhganpqCgQEOGDFHv3r2dms44R59++qk+++wz9e/fX5J982GM0Zw5c7R161bt2rXrsq/QbtR7pKP8HrrafDSnrKxMksKOEVvmozmNjY2qq6u76Y6NK2maj+Z0+GOjRZcadzKbNm0ybrfb5OXlmcOHD5vHH3/cxMbGhl253Vk9+eSTpqioyFRWVpo//vGPJj093fTt29fU1NQYY768XTEpKcns2rXL7N+/3/j9fuP3+53tm27PmzBhgikrKzM7duww/fr1a/b2vAULFpgPP/zQrFmzpsPc7n369Gnz/vvvm/fff99IMs8//7x5//33zf/+7/8aY7683Ts2Nta8/vrr5sCBA+b+++9v9nbvv/qrvzL79u0z77zzjrn11lvDbm+ura01Xq/XTJs2zZSXl5tNmzaZ7t27X3Z7c5cuXcy//uu/mg8//NA8/fTT7XJ789fNx+nTp81TTz1lSkpKTGVlpfnDH/5gRo8ebW699VZz/vx5K+dj9uzZJiYmxhQVFYXdovrFF184NTfqPdIRfg9dbT6OHj1qli9fbvbv328qKyvN66+/bgYNGmTGjh1r5XwsXrzYFBcXm8rKSnPgwAGzePFiExERYd566y1jzM11bBjz9fPRGY8Nq4ONMcb86le/MklJScblcpm77rrL7N27t7271CYeeugh079/f+Nyucy3vvUt89BDD5mjR4867efOnTP//M//bHr37m26d+9ufvjDH5oTJ06E7eOTTz4xkyZNMtHR0aZv377mySefNA0NDWE1b7/9trnjjjuMy+UygwYNMi+99NKNGN5Vvf3220bSZcv06dONMV/e8v3zn//ceL1e43a7zfjx401FRUXYPj777DPz8MMPm549exqPx2MeeeQRc/r06bCaDz74wNx9993G7Xabb33rW2bFihWX9WXz5s3mtttuMy6Xy9x+++0mPz//uo37Sr5uPr744gszYcIE069fP9O1a1czcOBAM3PmzMt+Wdg0H83NhaSw4/dGvkfa+/fQ1eajqqrKjB071sTFxRm3220GDx5sFixYEPasEmPsmY9HH33UDBw40LhcLtOvXz8zfvx4J9QYc3MdG8Z8/Xx0xmMjwhhjWnaOBwAAoGOy9hobAABw8yHYAAAAaxBsAACANQg2AADAGgQbAABgDYINAACwBsEGAABYg2ADAACsQbABAADWINgAAABrEGwAAIA1CDYAAMAa/w8jNNOfT1gwewAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.hist(dataset['Credit_Limit']);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The figure shows skewness to the right. Most of the customers have less than 5000 credit limit while smaller number of customers have over this limit. This figure confirms the revealed difference between the medain and the mean of Credit_Limit variable earlier." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's show the mean and the median on the histgram." + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(3549.0, 2550, 'Median')" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0cAAAJGCAYAAACQkf6SAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/OQEPoAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAzqElEQVR4nO3dfZRU5YHn8V/z0g0I3YhIN0RAjBFFERUT7EQZs7K8SBgdnV01JmIkOhqYs0o0SFbRJHuCa9RJxjW6OVkl2dH4MqsmIwaDKJgYNJGVKGiYyMCSjDY4Kt2CvPfdPzzUWBF5s5sG/HzOqXO66j5166l6TnX399yu2xVFURQBAAD4iGvX1hMAAADYG4gjAACAiCMAAIAk4ggAACCJOAIAAEgijgAAAJKIIwAAgCRJh7aeQGtpbm7Oq6++mm7duqWioqKtpwMAALSRoijy9ttvp0+fPmnX7oOPD+23cfTqq6+mb9++bT0NAABgL/HHP/4xhxxyyAdu32/jqFu3bknefQGqq6vbeDYAAEBbaWpqSt++fUuN8EH22zja+qd01dXV4ggAANjhx22ckAEAACDiCAAAIIk4AgAASCKOaGNz585NRUVFVq9enSSZMWNGunfv3qZzAgDgo0kcsV0XXnhhKioqcumll75v28SJE1NRUZELL7ywxR7vnHPOyT//8z+32P72Znv6tQUAYPvEETvUt2/f3HvvvVm3bl3ptvXr1+eee+5Jv379WvSxOnfunF69erXoPvdme/K1BQBg+8QRO3TCCSekb9++efDBB0u3Pfjgg+nXr1+OP/740m3Nzc2ZPn16BgwYkM6dO2fIkCH5x3/8x7J9PfroozniiCPSuXPnfPazn83y5cvLtv/5n9UtXbo0Z5xxRmpra9O1a9d88pOfzOOPP152n0MPPTTf/va3c9FFF6Vbt27p169ffvCDH7TcC9CKWuq13bJlSyZMmFDaPnDgwHzve98re6wLL7wwZ555Zm666ab07t07Bx10UCZOnJhNmza1/hMFANgHiCN2ykUXXZS77rqrdP3OO+/Ml770pbIx06dPz49//OPccccdWbx4ca644op84QtfyLx585K8+w95zzrrrIwbNy4LFy7Ml7/85Vx99dXbfdw1a9bk9NNPz5w5c/L8889n9OjRGTduXFasWFE27uabb86JJ56Y559/Pl/5yldy2WWXZcmSJS307FtXS7y2zc3NOeSQQ/LAAw/kpZdeyrRp0/L1r389999/f9l+nnzyySxdujRPPvlkfvSjH2XGjBmZMWNGqz9HAIB9QrGfamxsLJIUjY2NbT2Vfdr48eOLM844o1i1alVRVVVVLF++vFi+fHnRqVOn4vXXXy/OOOOMYvz48cX69euLLl26FL/+9a/L7j9hwoTivPPOK4qiKKZOnVoMGjSobPuUKVOKJMVbb71VFEVR3HXXXUVNTc1253T00UcXt956a+l6//79iy984Qul683NzUWvXr2K22+//UM889bXkq/ttkycOLE4++yzyx6vf//+xebNm0u3/af/9J+Kc845p+WfHADAXmRn26BDG7cZ+4iDDz44Y8eOzYwZM1IURcaOHZuePXuWtr/yyit555138h//438su9/GjRtLfx728ssvZ9iwYWXb6+vrt/u4a9asyfXXX5+ZM2fmtddey+bNm7Nu3br3HTk69thjS19XVFSkrq4uq1at2q3nuqe1xGubJLfddlvuvPPOrFixIuvWrcvGjRtz3HHHld3n6KOPTvv27UvXe/funRdffLF1nhgAwD5GHLHTLrrookyaNCnJu7+Iv9eaNWuSJDNnzszHPvaxsm1VVVW7/ZhXXnllZs+enZtuuimHH354OnfunL/+67/Oxo0by8Z17Nix7HpFRUWam5t3+3H3tA/72t5777258sorc/PNN6e+vj7dunXLd77znTz77LNl4/f11wkAoDWJI3ba6NGjs3HjxlRUVGTUqFFl2wYNGpSqqqqsWLEif/EXf7HN+x911FH52c9+VnbbM888s93HfPrpp3PhhRfmr/7qr5K8Gwp/fhKH/cGHfW2ffvrpfPrTn85XvvKV0m1Lly5t1TkDAOxvxBE7rX379nn55ZdLX79Xt27dcuWVV+aKK65Ic3NzTj755DQ2Nubpp59OdXV1xo8fn0svvTQ333xzrrrqqnz5y1/OggULdngygE984hN58MEHM27cuFRUVOTaa6/dL490fNjX9hOf+ER+/OMf57HHHsuAAQPyv//3/85vf/vbDBgwoC2eDgDAPsnZ6tgl1dXVqa6u3ua2b33rW7n22mszffr0HHXUURk9enRmzpxZ+gW9X79++T//5//k4YcfzpAhQ3LHHXfk29/+9nYf75ZbbsmBBx6YT3/60xk3blxGjRqVE044ocWf197gw7y2f/M3f5Ozzjor55xzToYNG5Y33nij7CgSAAA7VlEURdHWk2gNTU1NqampSWNj4wf+wgkAAOz/drYNHDkCAACIOAIAAEgijgAAAJKIIwAAgCTiCAAAIMkuxtH06dPzyU9+Mt26dUuvXr1y5plnZsmSJWVjTj311FRUVJRdLr300rIxK1asyNixY9OlS5f06tUrV111VTZv3lw2Zu7cuTnhhBNSVVWVww8/fIf/DwcAAODD2KU4mjdvXiZOnJhnnnkms2fPzqZNmzJy5MisXbu2bNzFF1+c1157rXS58cYbS9u2bNmSsWPHZuPGjfn1r3+dH/3oR5kxY0amTZtWGrNs2bKMHTs2n/3sZ7Nw4cJcfvnl+fKXv5zHHnvsQz5dAACAbftQ/+fo9ddfT69evTJv3rwMHz48ybtHjo477rh897vf3eZ9fv7zn+dzn/tcXn311dTW1iZJ7rjjjkyZMiWvv/56KisrM2XKlMycOTOLFi0q3e/cc8/N6tWrM2vWrJ2am/9zBAAAJDvfBh0+zIM0NjYmSXr06FF2+913351/+Id/SF1dXcaNG5drr702Xbp0SZLMnz8/gwcPLoVRkowaNSqXXXZZFi9enOOPPz7z58/PiBEjyvY5atSoXH755R84lw0bNmTDhg2l601NTR/mqbW4Q6+e2ar7X37D2FbdPwAA7O92O46am5tz+eWX5zOf+UyOOeaY0u2f//zn079///Tp0ycvvPBCpkyZkiVLluTBBx9MkjQ0NJSFUZLS9YaGhu2OaWpqyrp169K5c+f3zWf69On5xje+sbtPh1a2du3adO3aNUmyZs2aHHDAAW08o/2H1xYAoGXsdhxNnDgxixYtyq9+9auy2y+55JLS14MHD07v3r1z2mmnZenSpfn4xz+++zPdgalTp2by5Mml601NTenbt2+rPR4AALB/2a1TeU+aNCmPPPJInnzyyRxyyCHbHTts2LAkySuvvJIkqaury8qVK8vGbL1eV1e33THV1dXbPGqUJFVVVamuri67AAAA7KxdiqOiKDJp0qQ89NBDeeKJJzJgwIAd3mfhwoVJkt69eydJ6uvr8+KLL2bVqlWlMbNnz051dXUGDRpUGjNnzpyy/cyePTv19fW7Ml0AAICdtktxNHHixPzDP/xD7rnnnnTr1i0NDQ1paGjIunXrkiRLly7Nt771rSxYsCDLly/Pz372s1xwwQUZPnx4jj322CTJyJEjM2jQoHzxi1/M7373uzz22GO55pprMnHixFRVVSVJLr300vzLv/xLvva1r+X3v/99vv/97+f+++/PFVdc0cJPHwAA4F27FEe33357Ghsbc+qpp6Z3796ly3333ZckqayszOOPP56RI0fmyCOPzFe/+tWcffbZ+ad/+qfSPtq3b59HHnkk7du3T319fb7whS/kggsuyDe/+c3SmAEDBmTmzJmZPXt2hgwZkptvvjk//OEPM2rUqBZ62gAAAOV26YQMO/qXSH379s28efN2uJ/+/fvn0Ucf3e6YU089Nc8///yuTA8AAGC37dYJGQAAAPY34ggAACDiCAAAIIk4AgAASCKOAAAAkogjAACAJOIIAAAgiTgCAABIIo4AAACSiCMAAIAk4ggAACCJOAIAAEgijgAAAJKIIwAAgCTiCAAAIIk4AgAASCKOAAAAkogjAACAJOIIAAAgiTgCAABIIo4AAACSiCMAAIAk4ggAACCJOAIAAEgijgAAAJKIIwAAgCTiCAAAIIk4AgAASCKOAAAAkogjAACAJOIIAAAgiTgCAABIIo4AAACSiCMAAIAk4ggAACCJOAIAAEgijgAAAJKIIwAAgCTiCAAAIIk4AgAASCKOAAAAkogjAACAJOIIAAAgiTgCAABIIo4AAACSiCMAAIAk4ggAACCJOAIAAEgijgAAAJKIIwAAgCTiCAAAIIk4AgAASCKOAAAAkogjAACAJOIIAAAgiTgCAABIIo4AAACSiCMAAIAk4ggAACCJOAIAAEgijgAAAJKIIwAAgCTiCAAAIIk4AgAASCKOAAAAkogjAACAJOIIAAAgiTgCAABIIo4AAACSiCMAAIAk4ggAACCJOAIAAEgijgAAAJKIIwAAgCTiCAAAIIk4AgAASCKOAAAAkogjAACAJOIIAAAgiTgCAABIIo4AAACSiCMAAIAk4ggAACCJOAIAAEgijgAAAJKIIwAAgCTiCAAAIIk4AgAASCKOAAAAkogjAACAJOIIAAAgiTgCAABIsotxNH369Hzyk59Mt27d0qtXr5x55plZsmRJ2Zj169dn4sSJOeigg9K1a9ecffbZWblyZdmYFStWZOzYsenSpUt69eqVq666Kps3by4bM3fu3JxwwgmpqqrK4YcfnhkzZuzeMwQAANgJuxRH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OAIAAEgijgAAAJKIIwAAgCTiCAAAIIk4AgAASCKOAAAAkogjAACAJOIIAAAgiTgCAABIIo4AAACSiCMAAIAk4ggAACCJOAIAAEgijgAAAJKIIwAAgCTiCAAAIIk4AgAASCKOAAAAkogjAACAJOIIAAAgiTgCAABIIo4AAACSiCMAAIAk4ggAACCJOAIAAEgijgAAAJKIIwAAgCTiCAAAIIk4AgAASCKOAAAAkogjAACAJOIIAAAgiTgCAABIIo4AAACSiCMAAIAk4ggAACCJOAIAAEgijgAAAJKIIwAAgCTiCAAAIIk4AgAASCKOAAAAkuxGHD311FMZN25c+vTpk4qKijz88MNl24uiyLRp09K7d+907tw5I0aMyB/+8IeyMW+++WbOP//8VFdXp3v37pkwYULWrFlTNuaFF17IKaeckk6dOqVv37658cYbd/3ZAQAA7KRdjqO1a9dmyJAhue2227a5/cYbb8zf//3f54477sizzz6bAw44IKNGjcr69etLY84///wsXrw4s2fPziOPPJKnnnoql1xySWl7U1NTRo4cmf79+2fBggX5zne+k+uvvz4/+MEPduMpAgAA7FiHXb3DmDFjMmbMmG1uK4oi3/3ud3PNNdfkjDPOSJL8+Mc/Tm1tbR5++OGce+65efnllzNr1qz89re/zYknnpgkufXWW3P66afnpptuSp8+fXL33Xdn48aNufPOO1NZWZmjjz46CxcuzC233FIWUe+1YcOGbNiwoXS9qalpV58aAADwEdainzlatmxZGhoaMmLEiNJtNTU1GTZsWObPn58kmT9/frp3714KoyQZMWJE2rVrl2effbY0Zvjw4amsrCyNGTVqVJYsWZK33nprm489ffr01NTUlC59+/ZtyacGAADs51o0jhoaGpIktbW1ZbfX1taWtjU0NKRXr15l2zt06JAePXqUjdnWPt77GH9u6tSpaWxsLF3++Mc/fvgnBAAAfGTs8p/V7a2qqqpSVVXV1tMAAAD2US165Kiuri5JsnLlyrLbV65cWdpWV1eXVatWlW3fvHlz3nzzzbIx29rHex8DAACgJbVoHA0YMCB1dXWZM2dO6bampqY8++yzqa+vT5LU19dn9erVWbBgQWnME088kebm5gwbNqw05qmnnsqmTZtKY2bPnp2BAwfmwAMPbMkpAwAAJNmNOFqzZk0WLlyY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tsoc2X3/+v0L2noK+y2vLQCwN6n5blvPoNzbb7+dmpqaD9y+V8bR7pg6dWomT55cut7c3Jw333wzBx10UCoqKtLU1JS+ffvmj3/8Y6qrq9twpuyItdo3WKd9h7XaN1infYe12jdYp33Hnliroijy9ttvp0+fPtsdt1fGUc+ePdO+ffusXLmy7PaVK1emrq5um/epqqpKVVVV2W3du3d/37jq6mpvkH2Etdo3WKd9h7XaN1infYe12jdYp31Ha6/V9o4YbbVXnpChsrIyQ4cOzZw5c0q3NTc3Z86cOamvr2/DmQEAAPurvfLIUZJMnjw548ePz4knnphPfepT+e53v5u1a9fmS1/6UltPDQAA2A/ttXF0zjnn5PXXX8+0adPS0NCQ4447LrNmzXrfSRp2VlVVVa677rr3/ekdex9rtW+wTvsOa7VvsE77Dmu1b7BO+469aa0qih2dzw4AAOAjYK/8zBEAAMCeJo4AAAAijgAAAJKIIwAAgCTiCAAAIMlHKI5uu+22HHrooenUqVOGDRuW3/zmN209pf3a9ddfn4qKirLLkUceWdq+fv36TJw4MQcddFC6du2as88+OytXrizbx4oVKzJ27Nh06dIlvXr1ylVXXZXNmzeXjZk7d25OOOGEVFVV5fDDD8+MGTP2xNPbZz311FMZN25c+vTpk4qKijz88MNl24uiyLRp09K7d+907tw5I0aMyB/+8IeyMW+++WbOP//8VFdXp3v37pkwYULWrFlTNuaFF17IKaeckk6dOqVv37658cYb3zeXBx54IEceeWQ6deqUwYMH59FHH23x57sv29FaXXjhhe97j40ePbpsjLVqfdOnT88nP/nJdOvWLb169cqZZ56ZJUuWlI3Zk9/v/Kzbtp1Zp1NPPfV976lLL720bIx1an233357jj322FRXV6e6ujr19fX5+c9/Xtru/bR32NE67dPvp+Ij4N577y0qKyuLO++8s1i8eHFx8cUXF927dy9WrlzZ1lPbb1133XXF0UcfXbz22muly+uvv17afumllxZ9+/Yt5syZUzz33HPFSSedVHz6058ubd+8eXNxzDHHFCNGjCief/754tFHHy169uxZTJ06tTTmX/7lX4ouXboUkydPLl566aXi1ltvLdq3b1/MmjVrjz7Xfcmjjz5a/Nf/+l+LBx98sEhSPPTQQ2Xbb7jhhqKmpqZ4+OGHi9/97nfFX/7lXxYDBgwo1q1bVxozevToYsiQIcUzzzxT/PKXvywOP/zw4rzzzittb2xsLGpra4vzzz+/WLRoUfGTn/yk6Ny5c/E//+f/LI15+umni/bt2xc33nhj8dJLLxXXXHNN0bFjx+LFF19s9ddgX7GjtRo/fnwxevTosvfYm2++WTbGWrW+UaNGFXfddVexaNGiYuHChcXpp59e9OvXr1izZk1pzJ76fudn3QfbmXX6i7/4i+Liiy8ue081NjaWtlunPeNnP/tZMXPmzOKf//mfiyVLlhRf//rXi44dOxaLFi0qisL7aW+xo3Xal99PH4k4+tSnPlVMnDixdH3Lli1Fnz59iunTp7fhrPZv1113XTFkyJBtblu9enXRsWPH4oEHHijd9vLLLxdJivnz5xdF8e4vhu3atSsaGhpKY26//faiurq62LBhQ1EURfG1r32tOProo8v2fc455xSjRo1q4Wezf/rzX7ibm5uLurq64jvf+U7pttWrVxdVVVXFT37yk6IoiuKll14qkhS//e1vS2N+/vOfFxUVFcW//uu/FkVRFN///veLAw88sLRORVEUU6ZMKQYOHFi6/p//838uxo4dWzafYcOGFX/zN3/Tos9xf/FBcXTGGWd84H2sVdtYtWpVkaSYN29eURR79vudn3U778/XqSje/WXuv/yX//KB97FObefAAw8sfvjDH3o/7eW2rlNR7Nvvp/3+z+o2btyYBQsWZMSIEaXb2rVrlxEjRmT+/PltOLP93x/+8If06dMnhx12WM4///ysWLEiSbJgwYJs2rSpbE2OPPLI9OvXr7Qm8+fPz+DBg1NbW1saM2rUqDQ1NWXx4sWlMe/dx9Yx1nX3LFu2LA0NDWWvaU1NTYYNG1a2Lt27d8+JJ55YGjNixIi0a9cuzz77bGnM8OHDU1lZWRozatSoLFmyJG+99VZpjLX78ObOnZtevXpl4MCBueyyy/LGG2+UtlmrttHY2Jgk6dGjR5I99/3Oz7pd8+frtNXdd9+dnj175phjjsnUqVPzzjvvlLZZpz1vy5Ytuffee7N27drU19d7P+2l/nydttpX308ddvue+4h/+7d/y5YtW8pe/CSpra3N73//+zaa1f5v2LBhmTFjRgYOHJjXXnst3/jGN3LKKadk0aJFaWhoSGVlZbp37152n9ra2jQ0NCRJGhoatrlmW7dtb0xTU1PWrVuXzp07t9Kz2z9tfV239Zq+9zXv1atX2fYOHTqkR48eZWMGDBjwvn1s3XbggQd+4Npt3Qc7Nnr06Jx11lkZMGBAli5dmq9//esZM2ZM5s+fn/bt21urNtDc3JzLL788n/nMZ3LMMcckyR77fvfWW2/5WbeTtrVOSfL5z38+/fv3T58+ffLCCy9kypQpWbJkSR588MEk1mlPevHFF1NfX5/169ena9eueeihhzJo0KAsXLjQ+2kv8kHrlOzb76f9Po5oG2PGjCl9feyxx2bYsGHp379/7r//ftECLeDcc88tfT148OAce+yx+fjHP565c+fmtNNOa8OZfXRNnDgxixYtyq9+9au2ngrb8UHrdMkll5S+Hjx4cHr37p3TTjstS5cuzcc//vE9Pc2PtIEDB2bhwoVpbGzMP/7jP2b8+PGZN29eW0+LP/NB6zRo0KB9+v203/9ZXc+ePdO+ffv3nclk5cqVqaura6NZffR07949RxxxRF555ZXU1dVl48aNWb16ddmY965JXV3dNtds67btjamurhZgu2Hr67q990pdXV1WrVpVtn3z5s158803W2TtvCd332GHHZaePXvmlVdeSWKt9rRJkyblkUceyZNPPplDDjmkdPue+n7nZ93O+aB12pZhw4YlSdl7yjrtGZWVlTn88MMzdOjQTJ8+PUOGDMn3vvc976e9zAet07bsS++n/T6OKisrM3To0MyZM6d0W3Nzc+bMmVP2d5G0rjVr1mTp0qXp3bt3hg4dmo4dO5atyZIlS7JixYrSmtTX1+fFF18s++Vu9uzZqa6uLh2yra+vL9vH1jHWdfcMGDAgdXV1Za9pU1NTnn322bJ1Wb16dRYsWFAa88QTT6S5ubn0ja++vj5PPfVUNm3aVBoze/bsDBw4MAceeGBpjLVrWX/605/yxhtvpHfv3kms1Z5SFEUmTZqUhx56KE888cT7/kxxT32/87Nu+3a0TtuycOHCJCl7T1mnttHc3JwNGzZ4P+3ltq7TtuxT76fdPpXDPuTee+8tqqqqihkzZhQvvfRScckllxTdu3cvO0MGLeurX/1qMXfu3GLZsmXF008/XYwYMaLo2bNnsWrVqqIo3j0VZ79+/YonnniieO6554r6+vqivr6+dP+tp3gcOXJksXDhwmLWrFnFwQcfvM1TPF511VXFyy+/XNx2221O5b0Db7/9dvH8888Xzz//fJGkuOWWW4rnn3+++H//7/8VRfHuqby7d+9e/PSnPy1eeOGF4owzztjmqbyPP/744tlnny1+9atfFZ/4xCfKTg+9evXqora2tvjiF79YLFq0qLj33nuLLl26vO/00B06dChuuumm4uWXXy6uu+46p4f+M9tbq7fffru48sori/nz5xfLli0rHn/88eKEE04oPvGJTxTr168v7cNatb7LLrusqKmpKebOnVt2ytp33nmnNGZPfb/zs+6D7WidXnnlleKb3/xm8dxzzxXLli0rfvrTnxaHHXZYMXz48NI+rNOecfXVVxfz5s0rli1bVrzwwgvF1VdfXVRUVBS/+MUviqLwftpbbG+d9vX300cijoqiKG699daiX79+RWVlZfGpT32qeOaZZ9p6Svu1c845p+jdu3dRWVlZfOxjHyvOOeec4pVXXiltX7duXfGVr3ylOPDAA4suXboUf/VXf1W89tprZftYvnx5MWbMmKJz585Fz549i69+9avFpk2bysY8+eSTxXHHHVdUVlYWhx12WHHXXXftiae3z3ryySeLJO+7jB8/viiKd0/nfe211xa1tbVFVVVVcdpppxVLliwp28cbb7xRnHfeeUXXrl2L6urq4ktf+lLx9ttvl4353e9+V5x88slFVVVV8bGPfay44YYb3jeX+++/vzjiiCOKysrK4uijjy5mzpzZas97X7S9tXrnnXeKkSNHFgcffHDRsWPHon///sXFF1/8vh8G1qr1bWuNkpR9L9qT3+/8rNu2Ha3TihUriuHDhxc9evQoqqqqisMPP7y46qqryv4vS1FYpz3hoosuKvr3719UVlYWBx98cHHaaaeVwqgovJ/2Fttbp339/VRRFEWx+8edAAAA9g/7/WeOAAAAdoY4AgAAiDgCAABIIo4AAACSiCMAAIAk4ggAACCJOAIAAEgijgAAAJKIIwAAgCTiCAAAIIk4AgAASJL8f1ACDkKlrd5AAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10,7))\n", + "# Use 30 bins for a better representation for the distribution\n", + "plt.hist(dataset['Credit_Limit'], bins=30)\n", + "plt.vlines(dataset['Credit_Limit'].mean(), 0, 2500, colors='Black')\n", + "plt.vlines(dataset['Credit_Limit'].median(), 0, 2500,colors='Black')\n", + "\n", + "# Print the mean and median text over the vertical lines\n", + "plt.text(dataset['Credit_Limit'].mean()-1000, 2500+50, 'Mean')\n", + "plt.text(dataset['Credit_Limit'].median()-1000, 2500+50, 'Median')" + ] } ], "metadata": { From cf4d24c0b6fd9d7f275e61c71b95eb75d1d0e0b4 Mon Sep 17 00:00:00 2001 From: Alaa Date: Sun, 10 Nov 2024 12:31:22 +0000 Subject: [PATCH 3/3] Data transformation --- data/Dirty Data.ipynb | 514 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 461 insertions(+), 53 deletions(-) diff --git a/data/Dirty Data.ipynb b/data/Dirty Data.ipynb index 08a08c5..af86618 100644 --- a/data/Dirty Data.ipynb +++ b/data/Dirty Data.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 61, "metadata": {}, "outputs": [], "source": [ @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 62, "metadata": {}, "outputs": [], "source": [ @@ -26,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 63, "metadata": {}, "outputs": [ { @@ -44,7 +44,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 64, "metadata": {}, "outputs": [ { @@ -62,7 +62,7 @@ " dtype='object')" ] }, - "execution_count": 5, + "execution_count": 64, "metadata": {}, "output_type": "execute_result" } @@ -74,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 65, "metadata": {}, "outputs": [ { @@ -300,7 +300,7 @@ "[5 rows x 23 columns]" ] }, - "execution_count": 6, + "execution_count": 65, "metadata": {}, "output_type": "execute_result" } @@ -326,7 +326,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 66, "metadata": {}, "outputs": [ { @@ -335,7 +335,7 @@ "10127" ] }, - "execution_count": 7, + "execution_count": 66, "metadata": {}, "output_type": "execute_result" } @@ -355,7 +355,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 67, "metadata": {}, "outputs": [ { @@ -364,7 +364,7 @@ "10127" ] }, - "execution_count": 8, + "execution_count": 67, "metadata": {}, "output_type": "execute_result" } @@ -385,7 +385,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 68, "metadata": {}, "outputs": [ { @@ -394,7 +394,7 @@ "(10127, 23)" ] }, - "execution_count": 9, + "execution_count": 68, "metadata": {}, "output_type": "execute_result" } @@ -424,7 +424,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 69, "metadata": {}, "outputs": [], "source": [ @@ -434,7 +434,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 70, "metadata": {}, "outputs": [ { @@ -469,7 +469,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 71, "metadata": {}, "outputs": [ { @@ -499,7 +499,7 @@ "dtype: object" ] }, - "execution_count": 12, + "execution_count": 71, "metadata": {}, "output_type": "execute_result" } @@ -518,7 +518,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 72, "metadata": {}, "outputs": [ { @@ -548,7 +548,7 @@ "dtype: int64" ] }, - "execution_count": 13, + "execution_count": 72, "metadata": {}, "output_type": "execute_result" } @@ -567,7 +567,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 73, "metadata": {}, "outputs": [ { @@ -966,7 +966,7 @@ "[1519 rows x 21 columns]" ] }, - "execution_count": 14, + "execution_count": 73, "metadata": {}, "output_type": "execute_result" } @@ -985,7 +985,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 74, "metadata": {}, "outputs": [ { @@ -1384,7 +1384,7 @@ "[749 rows x 21 columns]" ] }, - "execution_count": 15, + "execution_count": 74, "metadata": {}, "output_type": "execute_result" } @@ -1396,7 +1396,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 75, "metadata": {}, "outputs": [ { @@ -1795,7 +1795,7 @@ "[1112 rows x 21 columns]" ] }, - "execution_count": 16, + "execution_count": 75, "metadata": {}, "output_type": "execute_result" } @@ -1814,7 +1814,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 76, "metadata": {}, "outputs": [], "source": [ @@ -1826,7 +1826,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 77, "metadata": {}, "outputs": [ { @@ -1856,7 +1856,7 @@ "dtype: int64" ] }, - "execution_count": 18, + "execution_count": 77, "metadata": {}, "output_type": "execute_result" } @@ -1868,7 +1868,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 78, "metadata": {}, "outputs": [ { @@ -2267,7 +2267,7 @@ "[1519 rows x 21 columns]" ] }, - "execution_count": 19, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" } @@ -2279,7 +2279,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 79, "metadata": {}, "outputs": [ { @@ -2678,7 +2678,7 @@ "[1112 rows x 21 columns]" ] }, - "execution_count": 20, + "execution_count": 79, "metadata": {}, "output_type": "execute_result" } @@ -2689,7 +2689,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 80, "metadata": {}, "outputs": [ { @@ -3088,7 +3088,7 @@ "[749 rows x 21 columns]" ] }, - "execution_count": 21, + "execution_count": 80, "metadata": {}, "output_type": "execute_result" } @@ -3106,7 +3106,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 81, "metadata": {}, "outputs": [ { @@ -3123,7 +3123,7 @@ "Name: Customer_Age, dtype: float64" ] }, - "execution_count": 22, + "execution_count": 81, "metadata": {}, "output_type": "execute_result" } @@ -3142,7 +3142,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 82, "metadata": {}, "outputs": [], "source": [ @@ -3166,7 +3166,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 83, "metadata": {}, "outputs": [], "source": [ @@ -3175,7 +3175,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 84, "metadata": {}, "outputs": [ { @@ -3189,7 +3189,7 @@ "Name: Customer_Age, dtype: int64" ] }, - "execution_count": 25, + "execution_count": 84, "metadata": {}, "output_type": "execute_result" } @@ -3200,7 +3200,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 85, "metadata": {}, "outputs": [ { @@ -3214,7 +3214,7 @@ "Name: customer_age_bin, dtype: object" ] }, - "execution_count": 26, + "execution_count": 85, "metadata": {}, "output_type": "execute_result" } @@ -3232,7 +3232,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 86, "metadata": {}, "outputs": [ { @@ -3244,7 +3244,7 @@ "Name: count, dtype: int64" ] }, - "execution_count": 41, + "execution_count": 86, "metadata": {}, "output_type": "execute_result" } @@ -3262,7 +3262,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 87, "metadata": {}, "outputs": [ { @@ -3297,7 +3297,7 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 88, "metadata": {}, "outputs": [ { @@ -3322,7 +3322,7 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 89, "metadata": {}, "outputs": [ { @@ -3346,7 +3346,7 @@ }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 90, "metadata": {}, "outputs": [ { @@ -3377,7 +3377,7 @@ }, { "cell_type": "code", - "execution_count": 83, + "execution_count": 91, "metadata": {}, "outputs": [ { @@ -3411,7 +3411,7 @@ }, { "cell_type": "code", - "execution_count": 84, + "execution_count": 92, "metadata": {}, "outputs": [ { @@ -3438,7 +3438,7 @@ }, { "cell_type": "code", - "execution_count": 85, + "execution_count": 93, "metadata": {}, "outputs": [ { @@ -3472,7 +3472,7 @@ }, { "cell_type": "code", - "execution_count": 92, + "execution_count": 94, "metadata": {}, "outputs": [ { @@ -3481,7 +3481,7 @@ "Text(3549.0, 2550, 'Median')" ] }, - "execution_count": 92, + "execution_count": 94, "metadata": {}, "output_type": "execute_result" }, @@ -3507,6 +3507,414 @@ "plt.text(dataset['Credit_Limit'].mean()-1000, 2500+50, 'Mean')\n", "plt.text(dataset['Credit_Limit'].median()-1000, 2500+50, 'Median')" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Data Transformation: Normalization and Log" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Two ways to transform skewed distribution into more normal one. Normalisation using min-max scaler and using log transformation." + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [], + "source": [ + "# Define a funbction for min-max scaler\n", + "def get_normalised_value(column):\n", + " max_val = column.max()\n", + " min_val = column.min()\n", + " y = (column-min_val)/(max_val-min_val)\n", + " return y\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since credit_limit variable is skewed, we will try using the normalisation method to solve the problem. This method will make the values range between 0 and 1." + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a new column create the normalised value of Credit_Limit\n", + "dataset['Credit_Limit_normalised'] = get_normalised_value(dataset['Credit_Limit'])" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0\n", + "1.0\n", + "0.21747744547036094\n", + "0.09404220970623714\n" + ] + } + ], + "source": [ + "# Check the min and max values of the new columnn\n", + "print(dataset['Credit_Limit_normalised'].min())\n", + "print(dataset['Credit_Limit_normalised'].max())\n", + "print(dataset['Credit_Limit_normalised'].mean())\n", + "print(dataset['Credit_Limit_normalised'].median())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We noticed that the difference between the mean and the median is smaller after the normalisation." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "log from Numpy is used for data transformation of the same variable to compare between the two methods. " + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": {}, + "outputs": [], + "source": [ + "# Data transformation using log \n", + "dataset['Credit_Limit_log']= np.log(dataset['Credit_Limit'])" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7.271217139609844\n", + "10.449178263628198\n", + "8.60341207921584\n", + "8.422662707570003\n" + ] + } + ], + "source": [ + "# Check the min and max values of the new columnn\n", + "print(dataset['Credit_Limit_log'].min())\n", + "print(dataset['Credit_Limit_log'].max())\n", + "print(dataset['Credit_Limit_log'].mean())\n", + "print(dataset['Credit_Limit_log'].median())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We noticed that the difference between the mean and the median is too small after the log transformation." + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\alaah\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\seaborn\\_oldcore.py:1119: FutureWarning:\n", + "\n", + "use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.\n", + "\n", + "C:\\Users\\alaah\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\seaborn\\_oldcore.py:1119: FutureWarning:\n", + "\n", + "use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.\n", + "\n", + "C:\\Users\\alaah\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\seaborn\\_oldcore.py:1119: FutureWarning:\n", + "\n", + "use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.\n", + "\n", + "C:\\Users\\alaah\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\seaborn\\_oldcore.py:1119: FutureWarning:\n", + "\n", + "use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.\n", + "\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABN4AAAOlCAYAAACysyqqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/OQEPoAAAACXBIWXMAAA9hAAAPYQGoP6dpAADKeElEQVR4nOzdeVyU5f7/8feAzAAiICpbIS4l7ktWRKXpkURcyrRTppWWqZW2aHmMFteTmHZM85jlKbU6mC1fs46ViVtWkpVF5hJHC6VFIBdAVJDl/v3RjzmNoCzOzQz4ej4e9+PB3Pc1933d1wzy8T1zX7fFMAxDAAAAAAAAAJzKw9UdAAAAAAAAAOojgjcAAAAAAADABARvAAAAAAAAgAkI3gAAAAAAAAATELwBAAAAAAAAJiB4AwAAAAAAAExA8AYAAAAAAACYgOANAAAAAAAAMAHBGwAAAAAAAGACgjcAAFBt8+bNU6tWreTp6amuXbu6uju1asuWLbJYLNqyZYtT9/v666+rbdu28vLyUmBgoFP3XZ9lZWXp5ptvVpMmTWSxWLRgwQJXd8lpRo0apRYtWri6GwAA4DwQvAEAUE+tWLFCFovFYQkODlbv3r310Ucf1Xi/69ev19/+9jddc801Wr58uWbPnu3EXtdPL7zwgiwWi6Kjoyvc/sMPP2jUqFFq3bq1/vWvf2np0qU6efKkpk+f7vSA72x69epV7v1S0TJ9+vRa6U9VTZw4UR9//LESEhL0+uuvq1+/fq7uUrX89ttvmj59ulJTU13dFQAAYIIGru4AAAAw18yZM9WyZUsZhqGsrCytWLFC/fv313/+8x8NHDiw2vvbtGmTPDw89Morr8hqtZrQ4/onKSlJLVq00Jdffqn9+/frkksucdi+ZcsWlZaWauHChfZthw8f1owZMyT9EYqZ7YknntA999xjf/zVV1/p+eef1+OPP6527drZ13fu3Nn0vlTHpk2bdOONN+rRRx91dVdq5LffftOMGTPUokWLct8e/de//qXS0lLXdAwAADgFwRsAAPVcfHy8Lr/8cvvj0aNHKyQkRG+88UaNgrfs7Gz5+Pg4LXQzDEMFBQXy8fFxyv7cTXp6urZt26bVq1dr3LhxSkpK0rRp0xzaZGdnS1KtXGJ64sQJNWzYsNz666+/3uGxt7e3nn/+eV1//fXnDP7Otr/akp2d7dRxKygokNVqlYeH6y8M8fLycnUXAADAeXJ9RQEAAGpVYGCgfHx81KCB4+dvpaWlWrBggTp06CBvb2+FhIRo3LhxOnbsmL2NxWLR8uXLdeLECfulhytWrJAkFRcXa9asWWrdurVsNptatGihxx9/XIWFhQ7HadGihQYOHKiPP/5Yl19+uXx8fPTSSy9JknJycvTwww8rIiJCNptNl1xyiZ555pkqfevnvffe04ABAxQeHi6bzabWrVtr1qxZKikpcWjXq1cvdezYUXv27FHv3r3l6+uriy66SHPnzi23z19++UWDBw9Ww4YNFRwcrIkTJ5Y7n8okJSWpcePGGjBggG6++WYlJSWVG4+yIK5Zs2ayWCwaNWqUmjVrJkmaMWNGhZd5/vDDD7r55psVFBQkb29vXX755Xr//fcd9l12ufEnn3yi+++/X8HBwbr44our1f8/mz59uiwWi/bs2aPhw4ercePGuvbaayVJO3fu1KhRo9SqVSt5e3srNDRUd999t44cOVLhPvbv369Ro0YpMDBQAQEBuuuuu3Ty5EmHtsnJybr22msVGBgoPz8/RUVF6fHHH3c4N8MwtHjxYvsYlfnpp5/017/+VUFBQfL19dVVV12lDz74wGH/ZfP1rVq1Sk8++aQuuugi+fr6Ki8vT6NGjZKfn58yMjI0cOBA+fn56aKLLtLixYslSd9//73+8pe/qGHDhoqMjNTKlSsd9n306FE9+uij6tSpk/z8/OTv76/4+Hh99913Dse/4oorJEl33XVXud+piuZ4O3HihB555BH770hUVJSeffZZGYbh0M5isWjChAlas2aNOnbsKJvNpg4dOmjdunWVvs4AAMB5+MYbAAD1XG5urg4fPizDMJSdna1FixYpPz9ft99+u0O7cePGacWKFbrrrrv04IMPKj09Xf/85z/17bff6vPPP5eXl5def/11LV26VF9++aVefvllSdLVV18tSbrnnnv06quv6uabb9Yjjzyi7du3KzExUXv37tW7777rcKy0tDTddtttGjdunMaMGaOoqCidPHlS1113nX799VeNGzdOzZs317Zt25SQkKBDhw5VOmn+ihUr5Ofnp0mTJsnPz0+bNm3S1KlTlZeXp3nz5jm0PXbsmPr166chQ4bolltu0TvvvKMpU6aoU6dOio+PlySdOnVKffr0UUZGhh588EGFh4fr9ddf16ZNm6o1/klJSRoyZIisVqtuu+02LVmyRF999ZU9cFmwYIFee+01vfvuu1qyZIn8/PzUqVMnXXXVVbrvvvt00003aciQIZL+d5nn7t27dc011+iiiy7SY489poYNG+qtt97S4MGD9X//93+66aabHPpw//33q1mzZpo6dapOnDhRrf5X5K9//asuvfRSzZ492x74JCcn66efftJdd92l0NBQ7d69W0uXLtXu3bv1xRdfOIRiknTLLbeoZcuWSkxM1DfffKOXX35ZwcHBeuaZZ+znOHDgQHXu3FkzZ86UzWbT/v379fnnn0uSevbsqddff1133HGHrr/+et155532fWdlZenqq6/WyZMn9eCDD6pJkyZ69dVXdcMNN+idd94pNz6zZs2S1WrVo48+qsLCQvu3OUtKShQfH6+ePXtq7ty5SkpK0oQJE9SwYUM98cQTGjFihIYMGaIXX3xRd955p2JiYtSyZUtJfwR/a9as0V//+le1bNlSWVlZeumll3Tddddpz549Cg8PV7t27TRz5kxNnTpVY8eOVY8ePST973fqTIZh6IYbbtDmzZs1evRode3aVR9//LEmT56sX3/9Vc8995xD+88++0yrV6/W/fffr0aNGun555/X0KFDlZGRoSZNmtTotQcAANVkAACAemn58uWGpHKLzWYzVqxY4dD2008/NSQZSUlJDuvXrVtXbv3IkSONhg0bOrRLTU01JBn33HOPw/pHH33UkGRs2rTJvi4yMtKQZKxbt86h7axZs4yGDRsa//3vfx3WP/bYY4anp6eRkZFxzvM9efJkuXXjxo0zfH19jYKCAvu66667zpBkvPbaa/Z1hYWFRmhoqDF06FD7ugULFhiSjLfeesu+7sSJE8Yll1xiSDI2b958zv4YhmF8/fXXhiQjOTnZMAzDKC0tNS6++GLjoYcecmg3bdo0Q5Lx+++/29f9/vvvhiRj2rRp5fbbp08fo1OnTg7nVVpaalx99dXGpZdeal9X9h649tprjeLi4kr7+2dvv/12ufMs6+dtt91Wrn1F4//GG28YkoytW7eW28fdd9/t0Pamm24ymjRpYn/83HPPlRuTikgyxo8f77Du4YcfNiQZn376qX3d8ePHjZYtWxotWrQwSkpKDMMwjM2bNxuSjFatWpXr/8iRIw1JxuzZs+3rjh07Zvj4+BgWi8VYtWqVff0PP/xQ7rUqKCiwH6dMenq6YbPZjJkzZ9rXffXVV4YkY/ny5eXObeTIkUZkZKT98Zo1awxJxt///neHdjfffLNhsViM/fv3O4yL1Wp1WPfdd98ZkoxFixaVOxYAADAHl5oCAFDPLV68WMnJyUpOTta///1v9e7dW/fcc49Wr15tb/P2228rICBA119/vQ4fPmxfunfvLj8/P23evPmcx/jwww8lSZMmTXJY/8gjj0hSuUv8WrZsqbi4OId1b7/9tnr06KHGjRs79CE2NlYlJSXaunXrOfvw5znijh8/rsOHD6tHjx46efKkfvjhB4e2fn5+Dt/4s1qtuvLKK/XTTz85nFNYWJhuvvlm+zpfX1+NHTv2nP34s6SkJIWEhKh3796S/rj879Zbb9WqVavKXQJbVUePHtWmTZt0yy232M/z8OHDOnLkiOLi4rRv3z79+uuvDs8ZM2aMPD09a3S8itx7773l1v15/AsKCnT48GFdddVVkqRvvvmm0n306NFDR44cUV5enqT/zXf33nvvVfsGAx9++KGuvPJK+2Ww0h+v+dixY3XgwAHt2bPHof3IkSPPOsfgn284ERgYqKioKDVs2FC33HKLfX1UVJQCAwMd3j82m80+T1xJSYmOHDliv1y2ovGo6nl5enrqwQcfdFj/yCOPyDCMcncrjo2NVevWre2PO3fuLH9/f4d+AgAAcxG8AQBQz1155ZWKjY1VbGysRowYoQ8++EDt27fXhAkTdPr0aUnSvn37lJubq+DgYDVr1sxhyc/Pt0/+fzYHDx6Uh4dHubt1hoaGKjAwUAcPHnRYX3Y53p/t27dP69atK3f82NhYSaq0D7t379ZNN92kgIAA+fv7q1mzZvZwLTc316HtxRdfXO7Sx8aNGzvMZ3fw4EFdcskl5dpFRUWdsx9lSkpKtGrVKvXu3Vvp6enav3+/9u/fr+joaGVlZWnjxo1V2s+Z9u/fL8Mw9NRTT5Ubq7K54s4cq4rG+3xUtL+jR4/qoYceUkhIiHx8fNSsWTN7uzPHX5KaN2/u8Lhx48aSZH8Nbr31Vl1zzTW65557FBISomHDhumtt96qUgh38ODBCl+nsruzVuX9KP1xg4myufbKBAQEVPj+CQgIcHj/lJaW6rnnntOll14qm82mpk2bqlmzZtq5c2eF41EVBw8eVHh4uBo1alSl8zpzjKXy73MAAGAu5ngDAOAC4+Hhod69e2vhwoXat2+fOnTooNLSUgUHB5eb+L/MmeHD2ZwZRpxNRd8uKi0t1fXXX6+//e1vFT6nTZs2Z91fTk6OrrvuOvn7+2vmzJlq3bq1vL299c0332jKlCnlwpqzffvLOGOC+vOxadMmHTp0SKtWrdKqVavKbU9KSlLfvn2rvd+yc3n00UfLfWuwzJkBqLPvGFvR/m655RZt27ZNkydPVteuXeXn56fS0lL169evwrCsstfAx8dHW7du1ebNm/XBBx9o3bp1evPNN/WXv/xF69evd+o3+M42Pmc7RlXeP7Nnz9ZTTz2lu+++W7NmzVJQUJA8PDz08MMPV/sbfDVVG+9zAABwbgRvAABcgIqLiyVJ+fn5kqTWrVtrw4YNuuaaa2oU0kRGRqq0tFT79u2zf/tG+mOS+5ycHEVGRla6j9atWys/P9/+Dbfq2LJli44cOaLVq1erZ8+e9vXp6enV3leZyMhI7dq1S4ZhOASKaWlpVXp+UlKSgoOD7XfB/LPVq1fr3Xff1YsvvnjW8T5biNmqVStJkpeXV43GygzHjh3Txo0bNWPGDE2dOtW+ft++fee1Xw8PD/Xp00d9+vTR/PnzNXv2bD3xxBPavHnzOc89MjKywtep7JLjqrwfz9c777yj3r1765VXXnFYn5OTo6ZNm9ofVzWslv7o94YNG3T8+HGHb73V5nkBAIDq4VJTAAAuMEVFRVq/fr2sVqs9JLvllltUUlKiWbNmlWtfXFysnJycc+6zf//+klTuzqPz58+XJA0YMKDSft1yyy1KSUnRxx9/XG5bTk6OPSysSNk3e/78TZ7Tp0/rhRdeqPS4Z9O/f3/99ttveuedd+zrTp48qaVLl1b63FOnTmn16tUaOHCgbr755nLLhAkTdPz4cb3//vtn3Yevr68klRv74OBg9erVSy+99JIOHTpU7nm///57Fc/QeSoaf6n8+6E6jh49Wm5d165dJUmFhYXnfG7//v315ZdfKiUlxb7uxIkTWrp0qVq0aKH27dvXuF9V5enpWW483n777XLz7zVs2FBS+de5Iv3791dJSYn++c9/Oqx/7rnnZLFY7HfkBQAA7oNvvAEAUM999NFH9m/EZGdna+XKldq3b58ee+wx+fv7S5Kuu+46jRs3TomJiUpNTVXfvn3l5eWlffv26e2339bChQsdbjJwpi5dumjkyJFaunSp/bLPL7/8Uq+++qoGDx5sv7nAuUyePFnvv/++Bg4cqFGjRql79+46ceKEvv/+e73zzjs6cOCAwzeF/uzqq69W48aNNXLkSD344IOyWCx6/fXXz+uSujFjxuif//yn7rzzTu3YsUNhYWF6/fXX7YHYubz//vs6fvy4brjhhgq3X3XVVWrWrJmSkpJ06623VtjGx8dH7du315tvvqk2bdooKChIHTt2VMeOHbV48WJde+216tSpk8aMGaNWrVopKytLKSkp+uWXX/Tdd9/V+Lxrwt/fXz179tTcuXNVVFSkiy66SOvXrz+vbxzOnDlTW7du1YABAxQZGans7Gy98MILuvjiix1umlCRxx57TG+88Ybi4+P14IMPKigoSK+++qrS09P1f//3f/abHphp4MCBmjlzpu666y5dffXV+v7775WUlGT/xmKZ1q1bKzAwUC+++KIaNWqkhg0bKjo6usJ55wYNGqTevXvriSee0IEDB9SlSxetX79e7733nh5++GGHGykAAAD3QPAGAEA99+dL/7y9vdW2bVstWbJE48aNc2j34osvqnv37nrppZf0+OOPq0GDBmrRooVuv/12XXPNNZUe5+WXX1arVq20YsUKvfvuuwoNDVVCQoJ9wv/K+Pr66pNPPtHs2bP19ttv67XXXpO/v7/atGmjGTNmKCAg4KzPbdKkidauXatHHnlETz75pBo3bqzbb79dffr0Oes8aFXpz8aNG/XAAw9o0aJF8vX11YgRIxQfH69+/fqd87lJSUny9vbW9ddfX+F2Dw8PDRgwQElJSTpy5MhZ9/Pyyy/rgQce0MSJE3X69GlNmzZNHTt2VPv27fX1119rxowZWrFihY4cOaLg4GB169bN4fWuTStXrtQDDzygxYsXyzAM9e3bVx999JHCw8NrtL8bbrhBBw4c0LJly3T48GE1bdpU1113XaXvBUkKCQnRtm3bNGXKFC1atEgFBQXq3Lmz/vOf/1Tp25fO8Pjjj+vEiRNauXKl3nzzTV122WX64IMP9Nhjjzm08/Ly0quvvqqEhATde++9Ki4u1vLlyysM3jw8PPT+++9r6tSpevPNN7V8+XK1aNFC8+bNs99BGAAAuBeLweyqAAAAAAAAgNMxxxsAAAAAAABgAoI3AAAAAAAAwAQEbwAAAAAAAIAJCN4AAAAAAAAAExC8AQAA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FRUVlft7g8rVdPxnzpyp4OBgjR49uja6WW/VZPzff/99xcTEaPz48QoJCVHHjh01e/ZslZSU1Fa3642ajP/VV1+tHTt22C9H/emnn/Thhx+qf//+tdLnC5kr//42MP0I9cThw4dVUlLiUIxLUkhIiH744QcX9co80dHRWrFihaKionTo0CHNmDFDPXr00K5du5SZmSmr1arAwECH54SEhCgzM1OSlJmZWeFYlW07V5u8vDydOnVKPj4+Jp2dc5WdT0Xn8udzDQ4OdtjeoEEDBQUFObRp2bJluX2UbWvcuPFZx6xsH+6sX79+GjJkiFq2bKkff/xRjz/+uOLj45WSkiJPT88LaoxKS0v18MMP65prrlHHjh0lqdZ+r44dO1Yn/i2raIwkafjw4YqMjFR4eLh27typKVOmKC0tTatXr5ZU/8fo+++/V0xMjAoKCuTn56d3331X7du3V2pqKu+f/+9sYyTx/oHz1aQ+rAt/p+oSZ9ToU6ZMUXh4eLn/kKFyNRn/zz77TK+88opSU1NroYf1W03G/6efftKmTZs0YsQIffjhh9q/f7/uv/9+FRUVadq0abXR7XqjJuM/fPhwHT58WNdee60Mw1BxcbHuvfdePf7447XR5QuaK/MHgjdUKD4+3v5z586dFR0drcjISL311lt1JhCDexk2bJj9506dOqlz585q3bq1tmzZoj59+riwZ7Vv/Pjx2rVrlz777DNXd8VtnW2Mxo4da/+5U6dOCgsLU58+ffTjjz+qdevWtd3NWhcVFaXU1FTl5ubqnXfe0ciRI/XJJ5+4ultu5Wxj1L59+wv+/QOgvDlz5mjVqlXasmWLvL29Xd2deu/48eO644479K9//UtNmzZ1dXcuSKWlpQoODtbSpUvl6emp7t2769dff9W8efMI3mrBli1bNHv2bL3wwguKjo7W/v379dBDD2nWrFl66qmnXN09mIRLTauoadOm8vT0LHeHuKysLIWGhrqoV7UnMDBQbdq00f79+xUaGqrTp08rJyfHoc2fxyI0NLTCsSrbdq42/v7+dSrcKzufc703QkNDlZ2d7bC9uLhYR48edcqY1cX3YKtWrdS0aVPt379f0oUzRhMmTNDatWu1efNmXXzxxfb1tfV7VRf+LTvbGFUkOjpakhzeR/V5jKxWqy655BJ1795diYmJ6tKlixYuXMj750/ONkYV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07lRP0mPPvqo6e8H4ELWwNUdAICqOHDggK655hoFBgZq3rx56tSpk4qKivTxxx9r/Pjx+uGHH8o9p6ioSF5eXud9bE9PT4WGhp73fs7FGfsPCAhwQk8AAEB9Qf1UOXetn5z1OlSFn5+f/Pz8auVYwIWIb7wBqBPuv/9+WSwWffnllxo6dKjatGmjDh06aNKkSfriiy8k/fEV9iVLluiGG25Qw4YN9fTTT0uS3nvvPV122WXy9vZWq1atNGPGDBUXF9v3vW/fPvXs2VPe3t5q3769kpOTHY7950slDhw4oN69e0uSGjduLIvFolGjRp33+VV0acZbb72lHj16yMfHR1dccYX++9//6quvvtLll18uPz8/xcfH6/fff7fv48+fCo8aNUqffPKJFi5cKIvFIovFogMHDpx3PwEAQN1B/WR+/VT2Tb6NGzfq8ssvl6+vr66++mqlpaU5tFuyZIlat24tq9WqqKgovf766+XO5czXoewS0GXLlql58+by8/PT/fffr5KSEs2dO1ehoaEKDg62v2Zl5s+fr06dOqlhw4aKiIjQ/fffr/z8/LOew5mXmm7ZskVXXnmlGjZsqMDAQF1zzTU6ePCgffv5vjeACw3feAPg9o4ePap169bp6aefVsOGDcttP3OOijlz5mjBggVq0KCBPv30U9155516/vnn1aNHD/34448aO3asJGnatGkqLS3VkCFDFBISou3btys3N/eclxdERETo//7v/zR06FClpaXJ399fPj4+zj5le/8WLFig5s2b6+6779bw4cPVqFEjLVy4UL6+vrrllls0depULVmypNxzFy5cqP/+97/q2LGjZs6cKUlq1qyZKf0EAADuh/qpduunJ554Qv/4xz/UrFkz3Xvvvbr77rv1+eefS5LeffddPfTQQ1qwYIFiY2O1du1a3XXXXbr44ovtgaRU/nVYtmyZfvzxR3300Udat26dfvzxR91888366aef1KZNG33yySfatm2b7r77bsXGxio6OlqS5OHhoeeff14tW7bUTz/9pPvvv19/+9vf9MILL1R6HsXFxRo8eLDGjBmjN954Q6dPn9aXX34pi8UiSU5/bwAXBAMA3Nz27dsNScbq1avP2U6S8fDDDzus69OnjzF79myHda+//roRFhZmGIZhfPzxx0aDBg2MX3/91b79o48+MiQZ7777rmEYhpGe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800FBwerV69e2rp1q1588UWXBB0AAADqxl1zQQAAgJauQYk3ScrNzVVubq7zv51nevPNNxsd2IEDB2Sz2ZScnOw8FhERoaSkJOXl5WnUqFHKy8tTZGSkM+kmScnJyfL399fmzZv1i1/8Qnl5eRo0aJCCg4OddVJSUvTcc8/p6NGjat++/Tmf7XA45HA4nPt2u73R/QEAAGhJPD0XBAAAaAnq9ahpjblz52ro0KHKzc3VoUOHdPToUZfNHWw2myTJbDa7HDebzc4ym82m6Ohol/LAwEBFRUW51KmtjTM/42yZmZmKiIhwbnFxcY3vEAAAQAvRFHNBAACAlqBBd7wtWrRIS5Ys0bhx49wdj09IT0/X9OnTnft2u53kGwAAwP/X0ueCAAAA7tKgO95Onz6t6667zt2xuLBYLJKk4uJil+PFxcXOMovFopKSEpfyyspKHTlyxKVObW2c+RlnCwkJkclkctkAAADwk6aYCwIAALQEDUq8/epXv9LSpUvdHYuLLl26yGKxKDc313nMbrdr8+bNslqtkiSr1arS0lLl5+c766xevVrV1dVKSkpy1lm/fr0qKiqcdVatWqXu3bvX+n43AAAAXFhTzAUBAABaggY9alpeXq7XX39dOTk56tu3r4KCglzKX3zxxTq1c/z4ce3bt8+5f+DAAW3dulVRUVGKj4/Xww8/rKeeekrdunVTly5dNGvWLMXGxuquu+6SJPXs2VO33nqrJk2apEWLFqmiokJTp07VqFGjFBsbK0kaPXq05s6dq4kTJ2rGjBnasWOHXn75Zb300ksN6ToAAECr5665IAAAQEvXoMTbtm3b1K9fP0nSjh07XMr8/Pzq3M6XX36pm266yblf81611NRULVmyRI899phOnDihyZMnq7S0VDfccINWrFih0NBQ5zlvv/22pk6dqiFDhsjf318jR47UK6+84iyPiIjQypUrlZaWpgEDBqhjx4568sknNXny5IZ0HQAAoNVz11wQAACgpWtQ4m3NmjVu+fDBgwfLMIzzlvv5+SkjI0MZGRnnrRMVFXXRRx369u2rf/7znw2OEwAAAP/HXXNBAE2jsLBQhw4dclt7HTt2VHx8vNvaA4CWrEGJNwAAAACA5+zevdst7RQVFemXv/wvlZefckt7khQW1kZ79uwm+QYAddCgxNtNN910wccIVq9e3eCAAAAA4NuY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VVXavn278/uhpTt58qT8/V3/FAoICFB1dfV5z/HVOYanNWSsarN169ZWc33VaNu2rWJiYnT06FF99tlnuvPOO2ut11qvrTPVdaxq0xqvrbr8DXq21jxHach41ebMvEi9NHp5hlZk2bJlRkhIiLFkyRJj165dxuTJk43IyMgWufT6I488Yqxdu9Y4cOCAsWHDBiM5Odno2LGjUVJSYhiGYTzwwANGfHy8sXr1auPLL780rFarYbVanedXVlYavXv3NoYOHWps3brVWLFihdGpUycjPT3dWadm2exHH33U2L17t5GVleWzy2YfO3bM+Ne//mX861//MiQZL774ovGvf/3L+Pbbbw3D+Glp4sjISOPDDz80tm3bZtx5553nLE186623GldddZWxefNm4/PPPze6detm3Hvvvc7y0tJSw2w2G+PGjTN27NhhLFu2zGjTpo3xpz/9yVlnw4YNRmBgoPHCCy8Yu3fvNmbPnm0EBQUZ27dvb7rBOI8LjdGxY8eM3/3ud0ZeXp5x4MABIycnx+jfv7/RrVs3o7y83NlGSx6jKVOmGBEREcbatWtdlqM+efKks05TfV/56s+yi43Rvn37jIyMDOPLL780Dhw4YHz44YdG165djUGDBjnbaMlj9Pjjjxvr1q0zDhw4YGzbts14/PHHDT8/P2PlypWGYXD9GMaFx6i1Xz9oHaqqqoz4+HhjxowZ55SNGzfOePzxx537c+fONT777DNj//79Rn5+vjFq1CgjNDTU2LlzZ1OG7DWpqanGJZdcYmRnZxsHDhww3n//faNjx47GY4895qzz+OOPG+PGjXPuN6e5qzs1ZKxeeuklY/ny5cbevXuN7du3Gw899JDh7+9v5OTkeKMLTW7FihXGp59+avz73/82Vq5caVx55ZVGUlKScfr0acMwuLbOVN+xak3Xljv+Br355puNV1991bnfkuconhivi+VF6orEWz29+uqrRnx8vBEcHGxce+21xqZNm7wdkkfcc889RkxMjBEcHGxccsklxj333GPs27fPWX7q1CnjN7/5jdG+fXujTZs2xi9+8QujqKjIpY2DBw8aw4YNM8LCwoyOHTsajzzyiFFRUeFSZ82aNUa/fv2M4OBgo2vXrsbixYubonv1VrNs9dlbamqqYRg/LU88a9Ysw2w2GyEhIcaQIUOMgoIClzYOHz5s3HvvvUZ4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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axes = plt.subplots(2,2, figsize = (15,10))\n", + "fig.suptitle(\"Before and After Transformation\")\n", + "sn.histplot(dataset , x= \"Credit_Limit\", ax= axes[0,0])\n", + "sn.histplot(dataset , x= \"Credit_Limit_normalised\", ax = axes[0,1])\n", + "sn.histplot(dataset , x= \"Credit_Limit\",ax = axes[1,0])\n", + "sn.histplot(dataset , x= \"Credit_Limit_log\", ax = axes[1,1]);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The above plots improve that the log transformation makes a better impacts towards a normal distribution. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Other distribution Plots " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Box and Wisker plots" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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IX3SpEnasWOH73WHDh301FNP2ZiofrhCevBQdgCgkTPlCunTpk1TZmamJCkiIkKPP/64EZ8L9cdhLACAEdxut+/50KFDFR8fb18YhBXKDgDAOMOHD7c7AsIIZQcAABiNsgMAAIxG2QEAAEaj7AAAAKNRdgAAgNEoOwAAwGiUHQAAYDTKDgAAMBplBwAAGI2yAwAAjEbZAQAARqPsAAAAo1F2AACA0Sg7AADAaJQdAABgNMoOAAAwGmUHAAAYjbIDAACMZmvZKSgo0MCBA5WSkiKHw6Hly5f7xo4dO6b7779fl112mWJiYpSSkqLbb79d3377rd82SktLlZWVpbi4OMXHx2v06NGqqKg4y58EAACEK1vLTmVlpTp16qS5c+eeMnbkyBFt27ZNU6dO1bZt27R06VLt3LlTN910k996WVlZ+vTTT7VmzRqtXLlSBQUFGjNmzNn6CAAAIMxF2fnm/fr1U79+/U475na7tWbNGr9lzz77rH79619r3759SktL044dO7Rq1Spt2bJFXbt2lSQ988wz6t+/v5566imlpKScdtter1der9f32uPxBOkTAQCAcNOg5uyUl5fL4XAoPj5ekrRx40bFx8f7io4kZWRkKCIiQoWFhbVuJzc3V2632/dITU0NdXQAAGCTBlN2qqqqdP/99+vf//3fFRcXJ0kqKSlRYmKi33pRUVFKSEhQSUlJrdvKyclReXm577F///6QZgcAAPax9TBWXR07dkxDhw6VZVmaN29evbfndDrldDqDkAwAAIS7sC87J4vO3r17tW7dOt9eHUlKTk7WwYMH/dY/fvy4SktLlZycfLajAgCAMBTWh7FOFp3du3frnXfeUYsWLfzGu3fvrrKyMhUVFfmWrVu3TjU1NerWrdvZjgsAAMKQrXt2Kioq9MUXX/he79mzR8XFxUpISFCrVq30r//6r9q2bZtWrlyp6upq3zychIQENW3aVO3atVPfvn11xx13aP78+Tp27Jiys7OVmZlZ65lYAACgcbG17GzdulXXX3+97/WkSZMkScOHD9cjjzyiFStWSJIuv/xyv5/7+9//ruuuu06StGjRImVnZ6t3796KiIjQkCFDNGfOnLOSHwAAhD9by851110ny7JqHf9nYyclJCRo8eLFwYwFAAAMEtZzdgAAAOqLsgMAAIxG2QEAAEaj7AAAAKNRdgAAgNEo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F/y+IwAQZAGXneLiYj3//POKiIhQZGSkvF6vLrjgAj355JMaPny4brnlllDkbNC8Xq/veexHS2xMAoQnr9erZs2a2R0DgKECnqDcpEkTRUSc+LHExETt27dPkuR2u7V///7gpgMAAKingPfsdO7cWVu2bFGbNm107bXX6uGHH9YPP/ygV199VZdeemkoMjZ4P729/eFOmVJkExvTAGGi+phvT+dPvyMAEGwBl50ZM2bo8OHDkqTHH39ct99+u+666y61adNGL7/8ctADmsDv9vaRTSg7wM/4fUcAIMgCLjtdu3b1PU9MTNSqVauCGggAACCYAp6z06tXL5WVlZ2y3OPxqFevXsHIBAAAEDQBl5133333lAsJSlJVVZXee++9oIQCAAAIljofxvr44499zz/77DOVlJT4XldXV2vVqlU677zzgpsOAACgnupcdi6//HI5HA45HI7THq6Kjo7WM888E9RwkvTNN9/o/vvvV35+vo4cOaKLLrpIeXl5vrlDlmVp2rRpevHFF1VWVqaePXtq3rx5atOmTdCzAACAhqfOZWfPnj2yLEsXXHCBNm/erJYtW/rGmjZtqsTEREVGRgY13D/+8Q/17NlT119/vfLz89WyZUvt3r1b55xzjm+dJ598UnPmzNHChQuVnp6uqVOnqk+fPvrss8/kcrmCmgcAADQ8dS47v/rVryRJNTU1IQvzczNnzlRqaqry8vJ8y9LT033PLcvS7Nmz9dBDD+nmm2+WJL3yyitKSkrS8uXLlZmZedayAgCA8BTwBGVJ+vLLL3XPPfcoIyNDGRkZGjdunL788stgZ9OKFSvUtWtX3XrrrUpMTFTnzp314osv+sb37NmjkpISZWRk+Ja53W5169ZNGzdurHW7Xq9XHo/H7wEAAMwUcNl5++231b59e23evFkdO3ZUx44dVVhYqA4dOmjNmjVBDffVV1/55t+8/fbbuuuuuzRu3DgtXLhQknyTpJOSkvx+LikpyW8C9c/l5ubK7Xb7HqmpqUHNDQAAwkfAFxV84IEHNHHiRD3xxBOnLL///vt1ww03BC1cTU2NunbtqhkzZkg6cauKTz75RPPnz9fw4cPPeLs5OTmaNGmS77XH46HwAABgqID37OzYsUOjR48+ZfmoUaP02WefBSXUSa1atVL79u39lrVr185389Hk5GRJ0oEDB/zWOXDggG/s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HSuHw6ERI0ac/WAAgubk9/znjy+++MLuaAgDlB00CqmpqVqyZIl+/PFH37KqqiotXrxYaWlpNiYDECx9+/bVd9995/dIT0+3OxbCAGUHjUKXLl2UmpqqpUuX+pYtXbpUaWlp6ty5s43JAASL0+lUcnKy3yMyMtLuWAgDlB00GqNGjVJeXp7v9X/9139p5MiRNiYCAJwNlB00GsOGDdP777+vvXv3au/evfrggw80bNgwu2MBCJKVK1eqefPmvsett95qdySECe56jkajZcuWGjBggBYsWCDLsjRgwACde+65dscCECTXX3+95s2b53sdExNjYxqEE8oOGpVRo0YpOztbkjR37lyb0wAIppiYGF100UV2x0AYouygUenbt6+OHj0qh8OhPn362B0HAHAWUHbQqERGRmrHjh2+5wAA81F20OjExcXZHQEAcBY5LMuy7A4BAAAQKpx6DgAAjEbZAQAARqPsAAAAo1F2AACA0Sg7AADAaJQdAABgNMoOAAAwGmUHAAAYjbIDoNG77rrrNGHCBLtjAAgRyg6AsFBSUqLx48froosuksvlUlJSknr27Kl58+bpyJEjdscD0IBxbywAtvvqq6/Us2dPxcfHa8aMGbrsssvkdDq1fft2vfDCCzrvvPN000032R2zVtXV1XI4HIqI4P8/AuGIbyYA2919992KiorS1q1bNXToULVr104XXHCBbr75Zr311lsaOHCgJKmsrEz/8R//oZYtWyouLk69evXSRx995NvOI488ossvv1yvvvqqWrduLbfbrczMTB0+fNi3TmVlpW6//XY1b95crVq10h//+MdT8ni9Xt13330677zzFBMTo27duundd9/1jS9YsEDx8fFasWKF2rdvL6fTqX379oXuFwSgXig7AGx16NAhrV69WmPHjlVMTMxp13E4HJKkW2+9VQcPHlR+fr6KiorUpUsX9e7dW6Wlpb51v/zySy1fvlwrV67UypUrtX79ej3xxBO+8cmTJ2v9+vV68803tXr1ar377rvatm2b3/tlZ2dr48aNWrJkiT7++GPdeuut6tu3r3bv3u1b58iRI5o5c6Zeeuklffrpp0pMTAzmrwVAMFkAYKNNmzZZkqylS5f6LW/RooUVExNjxcTEWFOmTLHee+89Ky4uzqqqqvJb78ILL7Sef/55y7Isa9q0aVazZs0sj8fjG588ebLVrVs3y7Is6/Dhw1bTpk2tv/zlL77xQ4cOWdHR0db48eMty7KsvXv3WpGRkdY333zj9z69e/e2cnJyLMuyrLy8PEuSVVxcHJxfAoCQYs4OgLC0efNm1dTUKCsrS16vVx999JEqKirUokULv/V+/PFHffnll77XrVu3VmxsrO91q1atdPDgQUkn9vocPXpU3bp1840nJCTokksu8b3evn27qqurdfHFF/u9j9fr9Xvvpk2bqmPHjsH5sABCirIDwFYXXXSRHA6Hdu7c6bf8ggsukCRFR0dLkioqKtSqVSu/uTMnxcfH+543adLEb8zhcKimpqbOeSoqKhQZGamioiJFRkb6jTVv3tz3PDo62nd4DUB4o+wAsFWLFi10ww036Nlnn9U999xT67ydLl26qKSkRFFRUWrduvUZvdeFF16oJk2aqLCwUGlpaZKkf/zjH9q1a5euvfZaSVLnzp1VXV2tgwcP6je/+c0ZvQ+A8MIEZQC2e+6553T8+HF17dpVf/7zn7Vjxw7t3LlTr732mj7//HNFRkYqIyND3bt316BBg7R69Wr97//+rzZs2KAHH3xQW7durdP7NG/eXKNHj9bkyZO1bt06ffLJJxoxYoTfKeMXX3yxsrKydPvtt2vp0qXas2ePNm/erNzcXL311luh+hUACCH27ACw3YUXXqgPP/xQM2bMUE5Ojr7++ms5nU61b99e9913n+6++245HA797W9/04MPPqiRI0fq+++/V3Jysq655holJSXV+b3+8Ic/qKKiQgMHDlRsbKzuvfdelZeX+62Tl5enxx57TPfee6+++eYbnXvuubrqqqt04403BvujAzgLHJZlWXaHAAAACBUOYwEAAKNRdgAAgNEoOwAAwGiUHQAAYDTKDgAAMBplBwAAGI2yAwAAjEbZAQAARqPsAAAAo1F2AACA0Sg7AADAaP8PzR6K5Q2yL2cAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# The box plot helps to easily oidentify the median, quartiles and outliers\n", + "sn.boxplot(x = dataset[\"Gender\"] , y= dataset[\"Total_Trans_Ct\"]);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The above plot shows that the median transaction count is higher among females compared with males. There are outliers in of total transaction count in both the males and females." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pyramid plot" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "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", + "
Gendercustomer_age_binCLIENTNUM
0F20s93
1F30s956
2F40s2410
3F50s1619
4F60s280
5M20s102
6M30s885
7M40s2151
8M50s1379
9M60s250
10M70s2
\n", + "
" + ], + "text/plain": [ + " Gender customer_age_bin CLIENTNUM\n", + "0 F 20s 93\n", + "1 F 30s 956\n", + "2 F 40s 2410\n", + "3 F 50s 1619\n", + "4 F 60s 280\n", + "5 M 20s 102\n", + "6 M 30s 885\n", + "7 M 40s 2151\n", + "8 M 50s 1379\n", + "9 M 60s 250\n", + "10 M 70s 2" + ] + }, + "execution_count": 104, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pyramid = dataset.groupby([\"Gender\", \"customer_age_bin\"])['CLIENTNUM'].nunique().reset_index()\n", + "pyramid" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "Mime type rendering requires nbformat>=4.2.0 but it is not installed", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[106], line 31\u001b[0m\n\u001b[0;32m 6\u001b[0m layout \u001b[38;5;241m=\u001b[39m go\u001b[38;5;241m.\u001b[39mLayout(yaxis\u001b[38;5;241m=\u001b[39mgo\u001b[38;5;241m.\u001b[39mlayout\u001b[38;5;241m.\u001b[39mYAxis(title\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mAge\u001b[39m\u001b[38;5;124m'\u001b[39m),\n\u001b[0;32m 7\u001b[0m xaxis\u001b[38;5;241m=\u001b[39mgo\u001b[38;5;241m.\u001b[39mlayout\u001b[38;5;241m.\u001b[39mXAxis(\n\u001b[0;32m 8\u001b[0m \u001b[38;5;28mrange\u001b[39m\u001b[38;5;241m=\u001b[39m[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m3000\u001b[39m, \u001b[38;5;241m3000\u001b[39m], \n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 12\u001b[0m barmode\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124moverlay\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[0;32m 13\u001b[0m bargap\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0.1\u001b[39m)\n\u001b[0;32m 15\u001b[0m data \u001b[38;5;241m=\u001b[39m [go\u001b[38;5;241m.\u001b[39mBar(y\u001b[38;5;241m=\u001b[39my,\n\u001b[0;32m 16\u001b[0m x\u001b[38;5;241m=\u001b[39mmen_bins,\n\u001b[0;32m 17\u001b[0m orientation\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mh\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 28\u001b[0m marker\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mdict\u001b[39m(color\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mseagreen\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 29\u001b[0m )]\n\u001b[1;32m---> 31\u001b[0m \u001b[43miplot\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mdict\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlayout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlayout\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\plotly\\offline\\offline.py:387\u001b[0m, in \u001b[0;36miplot\u001b[1;34m(figure_or_data, show_link, link_text, validate, image, filename, image_width, image_height, config, auto_play, animation_opts)\u001b[0m\n\u001b[0;32m 382\u001b[0m post_script \u001b[38;5;241m=\u001b[39m build_save_image_post_script(\n\u001b[0;32m 383\u001b[0m image, filename, image_height, image_width, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124miplot\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 384\u001b[0m )\n\u001b[0;32m 386\u001b[0m \u001b[38;5;66;03m# Show figure\u001b[39;00m\n\u001b[1;32m--> 387\u001b[0m \u001b[43mpio\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mshow\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 388\u001b[0m \u001b[43m \u001b[49m\u001b[43mfigure\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 389\u001b[0m \u001b[43m \u001b[49m\u001b[43mvalidate\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mvalidate\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 390\u001b[0m \u001b[43m \u001b[49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 391\u001b[0m \u001b[43m \u001b[49m\u001b[43mauto_play\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mauto_play\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 392\u001b[0m \u001b[43m \u001b[49m\u001b[43mpost_script\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpost_script\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 393\u001b[0m \u001b[43m \u001b[49m\u001b[43manimation_opts\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43manimation_opts\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 394\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\plotly\\io\\_renderers.py:394\u001b[0m, in \u001b[0;36mshow\u001b[1;34m(fig, renderer, validate, **kwargs)\u001b[0m\n\u001b[0;32m 389\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[0;32m 390\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMime type rendering requires ipython but it is not installed\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 391\u001b[0m )\n\u001b[0;32m 393\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m nbformat \u001b[38;5;129;01mor\u001b[39;00m Version(nbformat\u001b[38;5;241m.\u001b[39m__version__) \u001b[38;5;241m<\u001b[39m Version(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m4.2.0\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m--> 394\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[0;32m 395\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMime type rendering requires nbformat>=4.2.0 but it is not installed\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 396\u001b[0m )\n\u001b[0;32m 398\u001b[0m ipython_display\u001b[38;5;241m.\u001b[39mdisplay(bundle, raw\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[0;32m 400\u001b[0m \u001b[38;5;66;03m# external renderers\u001b[39;00m\n", + "\u001b[1;31mValueError\u001b[0m: Mime type rendering requires nbformat>=4.2.0 but it is not installed" + ] + } + ], + "source": [ + "women_bins = np.array(-1 *pyramid[pyramid['Gender'] == 'F']['CLIENTNUM'])\n", + "men_bins = np.array(pyramid[pyramid['Gender'] == 'M']['CLIENTNUM'])\n", + "\n", + "y = list(range(20, 100, 10))\n", + "\n", + "layout = go.Layout(yaxis=go.layout.YAxis(title='Age'),\n", + " xaxis=go.layout.XAxis(\n", + " range=[-3000, 3000], \n", + " tickvals=[-2500, -2000, -1500, -1000, -500, 0, 500, 1000, 1500, 2000, 2500],\n", + " ticktext=[2500, 2000, 1500, 1000, 500, 0, 500, 1000, 1500, 2000, 2500],\n", + " title='Customers'),\n", + " barmode='overlay',\n", + " bargap=0.1)\n", + "\n", + "data = [go.Bar(y=y,\n", + " x=men_bins,\n", + " orientation='h',\n", + " name='Men',\n", + " hoverinfo='x',\n", + " marker=dict(color='powderblue')\n", + " ),\n", + " go.Bar(y=y,\n", + " x=women_bins,\n", + " orientation='h',\n", + " name='Women',\n", + " text=-1 * women_bins.astype('int'),\n", + " hoverinfo='text',\n", + " marker=dict(color='seagreen')\n", + " )]\n", + "\n", + "iplot(dict(data=data, layout=layout))" + ] } ], "metadata": {