diff --git a/Solutions.ipynb b/Solutions.ipynb index 89aa338..e8b941e 100644 --- a/Solutions.ipynb +++ b/Solutions.ipynb @@ -2,91 +2,1531 @@ "cells": [ { "cell_type": "markdown", - "id": "bf32ae3b", - "metadata": {}, "source": [ "# Lab | Revisiting Machine Learning Case Study" - ] + ], + "metadata": {} }, { "cell_type": "markdown", - "id": "73df37d0", - "metadata": {}, "source": [ "In this lab, you will use learningSet.csv file which you already have cloned in today's activities." - ] + ], + "metadata": {} }, { "cell_type": "markdown", - "id": "5bbb5252", - "metadata": {}, "source": [ "### 1. Check for null values in all the columns" - ] + ], + "metadata": {} }, { "cell_type": "code", - "execution_count": null, - "id": "dbe69e8b", - "metadata": {}, + "execution_count": 1, + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "pd.set_option('display.max_rows', 100)\n", + "\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 2, + "source": [ + "data = pd.read_csv('learningSet.csv')\n", + "data" + ], + "outputs": [ + { + "output_type": "execute_result", + "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", + "
ODATEDWOSOURCETCODESTATEZIPMAILCODEPVASTATEDOBNOEXCHRECINHSE...TARGET_DHPHONE_DRFA_2RRFA_2FRFA_2AMDMAUD_RMDMAUD_FMDMAUD_ACLUSTER2GEOCODE2
08901GRI0IL6108137120...0.00L4EXXX39.0C
19401BOA1CA9132652020...0.00L2GXXX1.0A
29001AMH1NC2701700...0.01L4EXXX60.0C
38701BRY0CA9595328010...0.01L4EXXX41.0C
486010FL3317620010X...0.01L2FXXX26.0A
..................................................................
954079601ASE1AK9950400...0.00L1GXXX12.0C
954089601DCD1TX7737950010...0.01L1FXXX2.0A
954099501MBC1MI4891038010...0.01L3EXXX34.0B
954108601PRV0CA9132040050X...18.01L4FXXX11.0A
954118801MCC2NC2840918010X...0.01L1GC1C12.0C
\n", + "

95412 rows × 481 columns

\n", + "
" + ], + "text/plain": [ + " ODATEDW OSOURCE TCODE STATE ZIP MAILCODE PVASTATE DOB NOEXCH \\\n", + "0 8901 GRI 0 IL 61081 3712 0 \n", + "1 9401 BOA 1 CA 91326 5202 0 \n", + "2 9001 AMH 1 NC 27017 0 0 \n", + "3 8701 BRY 0 CA 95953 2801 0 \n", + "4 8601 0 FL 33176 2001 0 \n", + "... ... ... ... ... ... ... ... ... ... \n", + "95407 9601 ASE 1 AK 99504 0 0 \n", + "95408 9601 DCD 1 TX 77379 5001 0 \n", + "95409 9501 MBC 1 MI 48910 3801 0 \n", + "95410 8601 PRV 0 CA 91320 4005 0 \n", + "95411 8801 MCC 2 NC 28409 1801 0 \n", + "\n", + " RECINHSE ... TARGET_D HPHONE_D RFA_2R RFA_2F RFA_2A MDMAUD_R MDMAUD_F \\\n", + "0 ... 0.0 0 L 4 E X X \n", + "1 ... 0.0 0 L 2 G X X \n", + "2 ... 0.0 1 L 4 E X X \n", + "3 ... 0.0 1 L 4 E X X \n", + "4 X ... 0.0 1 L 2 F X X \n", + "... ... ... ... ... ... ... ... ... ... \n", + "95407 ... 0.0 0 L 1 G X X \n", + "95408 ... 0.0 1 L 1 F X X \n", + "95409 ... 0.0 1 L 3 E X X \n", + "95410 X ... 18.0 1 L 4 F X X \n", + "95411 X ... 0.0 1 L 1 G C 1 \n", + "\n", + " MDMAUD_A CLUSTER2 GEOCODE2 \n", + "0 X 39.0 C \n", + "1 X 1.0 A \n", + "2 X 60.0 C \n", + "3 X 41.0 C \n", + "4 X 26.0 A \n", + "... ... ... ... \n", + "95407 X 12.0 C \n", + "95408 X 2.0 A \n", + "95409 X 34.0 B \n", + "95410 X 11.0 A \n", + "95411 C 12.0 C \n", + "\n", + "[95412 rows x 481 columns]" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 3, + "source": [ + "# check for all nulls in df\n", + "\n", + "nulls = pd.DataFrame(data.isna().sum()*100/len(data), columns=['percentage'])\n", + "nulls = nulls.sort_values('percentage', ascending = False).head(500)\n", + "nulls" + ], + "outputs": [ + { + "output_type": "execute_result", + "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", + "
percentage
RDATE_599.990567
RAMNT_599.990567
RDATE_399.746363
RAMNT_399.746363
RDATE_499.705488
......
ETHC30.000000
ETHC20.000000
ETHC10.000000
HHD120.000000
TPE110.000000
\n", + "

481 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " percentage\n", + "RDATE_5 99.990567\n", + "RAMNT_5 99.990567\n", + "RDATE_3 99.746363\n", + "RAMNT_3 99.746363\n", + "RDATE_4 99.705488\n", + "... ...\n", + "ETHC3 0.000000\n", + "ETHC2 0.000000\n", + "ETHC1 0.000000\n", + "HHD12 0.000000\n", + "TPE11 0.000000\n", + "\n", + "[481 rows x 1 columns]" + ] + }, + "metadata": {}, + "execution_count": 3 + } + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 4, + "source": [ + "# here i just made a new df for all the columns which have over 50% nulls so it's easier to analyse instead of having 480 rows we just have 60\n", + "lst = []\n", + "\n", + "for i,row in nulls.iterrows():\n", + " if row['percentage'] > 50:\n", + " lst.append(row)\n", + " nulls_over50 = pd.DataFrame(lst)\n", + " \n", + "\n" + ], "outputs": [], - "source": [] + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 5, + "source": [ + "nulls_over50[:100]" + ], + "outputs": [ + { + "output_type": "execute_result", + "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", + "
percentage
RDATE_599.990567
RAMNT_599.990567
RDATE_399.746363
RAMNT_399.746363
RDATE_499.705488
RAMNT_499.705488
RAMNT_699.186685
RDATE_699.186685
RAMNT_1592.388798
RDATE_1592.388798
RDATE_2391.763091
RAMNT_2391.763091
RDATE_2091.732696
RAMNT_2091.732696
RAMNT_790.677273
RDATE_790.677273
RAMNT_1790.146942
RDATE_1790.146942
RDATE_2190.029556
RAMNT_2190.029556
RAMNT_1089.035970
RDATE_1089.035970
RDATE_1387.160944
RAMNT_1387.160944
NUMCHLD87.018404
RDATE_1184.551209
RAMNT_1184.551209
RDATE_1983.359535
RAMNT_1983.359535
RAMNT_982.461326
RDATE_982.461326
RDATE_2481.409047
RAMNT_2481.409047
RAMNT_1879.270951
RDATE_1879.270951
RAMNT_2278.123297
RDATE_2278.123297
RAMNT_877.495493
RDATE_877.495493
RDATE_1475.561774
RAMNT_1475.561774
RAMNT_1273.064185
RDATE_1273.064185
RAMNT_1671.707961
RDATE_1671.707961
ADATE_1568.625540
ADATE_2358.975810
MBCOLECT55.458433
MAGFAML55.395548
MBCRAFT55.395548
MBBOOKS55.395548
MAGFEM55.395548
MAGMALE55.395548
PUBGARDN55.395548
PUBCULIN55.395548
PUBHLTH55.395548
PUBDOITY55.395548
PUBNEWFN55.395548
PUBPHOTO55.395548
PUBOPP55.395548
MBGARDEN55.395548
ADATE_2052.613927
\n", + "
" + ], + "text/plain": [ + " percentage\n", + "RDATE_5 99.990567\n", + "RAMNT_5 99.990567\n", + "RDATE_3 99.746363\n", + "RAMNT_3 99.746363\n", + "RDATE_4 99.705488\n", + "RAMNT_4 99.705488\n", + "RAMNT_6 99.186685\n", + "RDATE_6 99.186685\n", + "RAMNT_15 92.388798\n", + "RDATE_15 92.388798\n", + "RDATE_23 91.763091\n", + "RAMNT_23 91.763091\n", + "RDATE_20 91.732696\n", + "RAMNT_20 91.732696\n", + "RAMNT_7 90.677273\n", + "RDATE_7 90.677273\n", + "RAMNT_17 90.146942\n", + "RDATE_17 90.146942\n", + "RDATE_21 90.029556\n", + "RAMNT_21 90.029556\n", + "RAMNT_10 89.035970\n", + "RDATE_10 89.035970\n", + "RDATE_13 87.160944\n", + "RAMNT_13 87.160944\n", + "NUMCHLD 87.018404\n", + "RDATE_11 84.551209\n", + "RAMNT_11 84.551209\n", + "RDATE_19 83.359535\n", + "RAMNT_19 83.359535\n", + "RAMNT_9 82.461326\n", + "RDATE_9 82.461326\n", + "RDATE_24 81.409047\n", + "RAMNT_24 81.409047\n", + "RAMNT_18 79.270951\n", + "RDATE_18 79.270951\n", + "RAMNT_22 78.123297\n", + "RDATE_22 78.123297\n", + "RAMNT_8 77.495493\n", + "RDATE_8 77.495493\n", + "RDATE_14 75.561774\n", + "RAMNT_14 75.561774\n", + "RAMNT_12 73.064185\n", + "RDATE_12 73.064185\n", + "RAMNT_16 71.707961\n", + "RDATE_16 71.707961\n", + "ADATE_15 68.625540\n", + "ADATE_23 58.975810\n", + "MBCOLECT 55.458433\n", + "MAGFAML 55.395548\n", + "MBCRAFT 55.395548\n", + "MBBOOKS 55.395548\n", + "MAGFEM 55.395548\n", + "MAGMALE 55.395548\n", + "PUBGARDN 55.395548\n", + "PUBCULIN 55.395548\n", + "PUBHLTH 55.395548\n", + "PUBDOITY 55.395548\n", + "PUBNEWFN 55.395548\n", + "PUBPHOTO 55.395548\n", + "PUBOPP 55.395548\n", + "MBGARDEN 55.395548\n", + "ADATE_20 52.613927" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ], + "metadata": {} }, { "cell_type": "markdown", - "id": "6febccdc", - "metadata": {}, "source": [ "### 2. Exclude the following variables by looking at the definitions. Create a new empty list called drop_list. We will append this list and then drop all the columns in this list later:\n", "\n", "- `OSOURCE` - symbol definitions not provided, too many categories\n", "- `ZIP CODE` - we are including state already\n" - ] + ], + "metadata": {} }, { "cell_type": "code", - "execution_count": null, - "id": "3a07b75a", - "metadata": {}, + "execution_count": 6, + "source": [ + "drop_list = ['OSOURCE', 'ZIP']" + ], "outputs": [], - "source": [] + "metadata": {} }, { "cell_type": "markdown", - "id": "6a2470e4", - "metadata": {}, "source": [ "### 3. Identify columns that over 85% missing values" - ] + ], + "metadata": {} }, { "cell_type": "code", - "execution_count": null, - "id": "2b6f01b6", - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 7, + "source": [ + "# i will just use the same loop from above but change the threshold to 85\n", + "\n", + "lst = []\n", + "\n", + "for i,row in nulls.iterrows():\n", + " if row['percentage'] > 85:\n", + " lst.append(row)\n", + " nulls_over85 = pd.DataFrame(lst)\n", + "\n", + "nulls_over85" + ], + "outputs": [ + { + "output_type": "execute_result", + "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", + "
percentage
RDATE_599.990567
RAMNT_599.990567
RDATE_399.746363
RAMNT_399.746363
RDATE_499.705488
RAMNT_499.705488
RAMNT_699.186685
RDATE_699.186685
RAMNT_1592.388798
RDATE_1592.388798
RDATE_2391.763091
RAMNT_2391.763091
RDATE_2091.732696
RAMNT_2091.732696
RAMNT_790.677273
RDATE_790.677273
RAMNT_1790.146942
RDATE_1790.146942
RDATE_2190.029556
RAMNT_2190.029556
RAMNT_1089.035970
RDATE_1089.035970
RDATE_1387.160944
RAMNT_1387.160944
NUMCHLD87.018404
\n", + "
" + ], + "text/plain": [ + " percentage\n", + "RDATE_5 99.990567\n", + "RAMNT_5 99.990567\n", + "RDATE_3 99.746363\n", + "RAMNT_3 99.746363\n", + "RDATE_4 99.705488\n", + "RAMNT_4 99.705488\n", + "RAMNT_6 99.186685\n", + "RDATE_6 99.186685\n", + "RAMNT_15 92.388798\n", + "RDATE_15 92.388798\n", + "RDATE_23 91.763091\n", + "RAMNT_23 91.763091\n", + "RDATE_20 91.732696\n", + "RAMNT_20 91.732696\n", + "RAMNT_7 90.677273\n", + "RDATE_7 90.677273\n", + "RAMNT_17 90.146942\n", + "RDATE_17 90.146942\n", + "RDATE_21 90.029556\n", + "RAMNT_21 90.029556\n", + "RAMNT_10 89.035970\n", + "RDATE_10 89.035970\n", + "RDATE_13 87.160944\n", + "RAMNT_13 87.160944\n", + "NUMCHLD 87.018404" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ], + "metadata": {} }, { "cell_type": "markdown", - "id": "70865946", - "metadata": {}, "source": [ "### 4. Remove those columns from the dataframe" - ] + ], + "metadata": {} }, { "cell_type": "code", - "execution_count": null, - "id": "ca6c4d91", - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 8, + "source": [ + "# have to swap the rows and columns so i can make a list of the columsn to drop\n", + "\n", + "to_delete = list(nulls_over85.transpose())\n", + "to_delete\n" + ], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['RDATE_5',\n", + " 'RAMNT_5',\n", + " 'RDATE_3',\n", + " 'RAMNT_3',\n", + " 'RDATE_4',\n", + " 'RAMNT_4',\n", + " 'RAMNT_6',\n", + " 'RDATE_6',\n", + " 'RAMNT_15',\n", + " 'RDATE_15',\n", + " 'RDATE_23',\n", + " 'RAMNT_23',\n", + " 'RDATE_20',\n", + " 'RAMNT_20',\n", + " 'RAMNT_7',\n", + " 'RDATE_7',\n", + " 'RAMNT_17',\n", + " 'RDATE_17',\n", + " 'RDATE_21',\n", + " 'RAMNT_21',\n", + " 'RAMNT_10',\n", + " 'RDATE_10',\n", + " 'RDATE_13',\n", + " 'RAMNT_13',\n", + " 'NUMCHLD']" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 19, + "source": [ + "# drop cols and make new copy of df\n", + "\n", + "data_copy = data.drop(columns= [col for col in to_delete])\n", + "data_copy" + ], + "outputs": [ + { + "output_type": "execute_result", + "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", + "
ODATEDWOSOURCETCODESTATEZIPMAILCODEPVASTATEDOBNOEXCHRECINHSE...TARGET_DHPHONE_DRFA_2RRFA_2FRFA_2AMDMAUD_RMDMAUD_FMDMAUD_ACLUSTER2GEOCODE2
08901GRI0IL6108137120...0.00L4EXXX39.0C
19401BOA1CA9132652020...0.00L2GXXX1.0A
29001AMH1NC2701700...0.01L4EXXX60.0C
38701BRY0CA9595328010...0.01L4EXXX41.0C
486010FL3317620010X...0.01L2FXXX26.0A
..................................................................
954079601ASE1AK9950400...0.00L1GXXX12.0C
954089601DCD1TX7737950010...0.01L1FXXX2.0A
954099501MBC1MI4891038010...0.01L3EXXX34.0B
954108601PRV0CA9132040050X...18.01L4FXXX11.0A
954118801MCC2NC2840918010X...0.01L1GC1C12.0C
\n", + "

95412 rows × 456 columns

\n", + "
" + ], + "text/plain": [ + " ODATEDW OSOURCE TCODE STATE ZIP MAILCODE PVASTATE DOB NOEXCH \\\n", + "0 8901 GRI 0 IL 61081 3712 0 \n", + "1 9401 BOA 1 CA 91326 5202 0 \n", + "2 9001 AMH 1 NC 27017 0 0 \n", + "3 8701 BRY 0 CA 95953 2801 0 \n", + "4 8601 0 FL 33176 2001 0 \n", + "... ... ... ... ... ... ... ... ... ... \n", + "95407 9601 ASE 1 AK 99504 0 0 \n", + "95408 9601 DCD 1 TX 77379 5001 0 \n", + "95409 9501 MBC 1 MI 48910 3801 0 \n", + "95410 8601 PRV 0 CA 91320 4005 0 \n", + "95411 8801 MCC 2 NC 28409 1801 0 \n", + "\n", + " RECINHSE ... TARGET_D HPHONE_D RFA_2R RFA_2F RFA_2A MDMAUD_R MDMAUD_F \\\n", + "0 ... 0.0 0 L 4 E X X \n", + "1 ... 0.0 0 L 2 G X X \n", + "2 ... 0.0 1 L 4 E X X \n", + "3 ... 0.0 1 L 4 E X X \n", + "4 X ... 0.0 1 L 2 F X X \n", + "... ... ... ... ... ... ... ... ... ... \n", + "95407 ... 0.0 0 L 1 G X X \n", + "95408 ... 0.0 1 L 1 F X X \n", + "95409 ... 0.0 1 L 3 E X X \n", + "95410 X ... 18.0 1 L 4 F X X \n", + "95411 X ... 0.0 1 L 1 G C 1 \n", + "\n", + " MDMAUD_A CLUSTER2 GEOCODE2 \n", + "0 X 39.0 C \n", + "1 X 1.0 A \n", + "2 X 60.0 C \n", + "3 X 41.0 C \n", + "4 X 26.0 A \n", + "... ... ... ... \n", + "95407 X 12.0 C \n", + "95408 X 2.0 A \n", + "95409 X 34.0 B \n", + "95410 X 11.0 A \n", + "95411 C 12.0 C \n", + "\n", + "[95412 rows x 456 columns]" + ] + }, + "metadata": {}, + "execution_count": 19 + } + ], + "metadata": {} }, { "cell_type": "markdown", - "id": "7bbcf161", - "metadata": {}, "source": [ "### 5. Reduce the number of categories in the column GENDER. The column should only have either \"M\" for males, \"F\" for females, and \"other\" for all the rest\n", "\n", @@ -96,22 +1536,123 @@ "print(categorical['GENDER'].value_counts())\n", "categorical['GENDER'] = categorical['GENDER'].fillna('F')\n", "```" - ] + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 20, + "source": [ + "data_copy['GENDER'] = data_copy['GENDER'].fillna('F')" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 21, + "source": [ + "data_copy['GENDER'].value_counts()" + ], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "F 51277\n", + "M 39094\n", + " 2957\n", + "U 1715\n", + "J 365\n", + "A 2\n", + "C 2\n", + "Name: GENDER, dtype: int64" + ] + }, + "metadata": {}, + "execution_count": 21 + } + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 22, + "source": [ + "# some rows are blanks not nulls so need can't use the fillna function\n", + "\n", + "data_copy['GENDER'].isna().sum()" + ], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0" + ] + }, + "metadata": {}, + "execution_count": 22 + } + ], + "metadata": {} }, { "cell_type": "code", - "execution_count": null, - "id": "b583feaa", - "metadata": {}, + "execution_count": 23, + "source": [ + "replace = {\n", + " 'U': \"other\",\n", + " 'J' : \"other\",\n", + " 'A' : \"other\",\n", + " 'C' : \"other\",\n", + " ' ' : \"other\"\n", + "}\n", + "\n", + "data_copy[\"GENDER\"] = data_copy[\"GENDER\"].replace(replace)\n", + "\n" + ], "outputs": [], - "source": [] + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "i tried to do the above with a for loop but still don't really understand how to loop through dataframes :(\n", + "in this case using a dictionary is ok because there are only 5 values to replace but if there were more a loop would be more efficient." + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 24, + "source": [ + "# now other has replaced all the non M or F rows\n", + "\n", + "data_copy['GENDER'].value_counts()" + ], + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "F 51277\n", + "M 39094\n", + "other 5041\n", + "Name: GENDER, dtype: int64" + ] + }, + "metadata": {}, + "execution_count": 24 + } + ], + "metadata": {} } ], "metadata": { "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" + "name": "python3", + "display_name": "Python 3.8.8 64-bit ('base': conda)" }, "language_info": { "codemirror_mode": { @@ -123,9 +1664,12 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.8.8" + }, + "interpreter": { + "hash": "f27e873c37e1f1555e60b9534290287a99b02cba69d8f829668ffeb66728ce50" } }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file