{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# Any results you write to the current directory are saved as output.","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Imports"},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.experimental import enable_iterative_imputer\nfrom sklearn.impute import IterativeImputer\nfrom sklearn.impute import SimpleImputer\nimport category_encoders as ce\nfrom sklearn.preprocessing import OrdinalEncoder\nfrom fancyimpute import KNN \nimport xgboost as xgb\nfrom sklearn.metrics import roc_auc_score","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Getting the data"},{"metadata":{"trusted":true},"cell_type":"code","source":"train = pd.read_csv('../input/cat-in-the-dat-ii/train.csv')\ntest = pd.read_csv('../input/cat-in-the-dat-ii/test.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_y = train['target']\ntest_id = test['id']\ntrain.drop(['target', 'id'], axis=1, inplace=True)\ntest.drop('id', axis=1, inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.info()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Feature Engineering"},{"metadata":{"trusted":true},"cell_type":"code","source":"# how many missing values?\nnum_of_missing = train.isnull().sum()\nprint(num_of_missing)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# reduce features from one hot encoding\n# nom_3: 'Russia', nan, 'Canada', 'Finland', 'Costa Rica', 'China', 'India'\n# train.nom_3 = train.nom_3.replace({'Russia': 'Eurasia', 'China': 'Asia', 'India': 'Asia', 'Finland': 'Europe', 'Canada': 'North America', 'Costa Rica':'North America', 'nan': np.nan})\n# test.nom_3 = test.nom_3.replace({'Russia': 'Eurasia', 'China': 'Asia', 'India': 'Asia', 'Finland': 'Europe', 'Canada': 'North America', 'Costa Rica':'North America', 'nan': np.nan})","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# reduce features from one hot encoding\n# nom_4: 'Bassoon', 'Theremin', nan, 'Oboe', 'Piano'\n# train.nom_4 = train.nom_4.replace({'Bassoon': 'Woodwind', 'Oboe': 'Woodwind', 'Piano': 'Strings', 'Theremin':'Electronic', 'nan': np.nan})\n# test.nom_4 = test.nom_4.replace({'Bassoon': 'Woodwind', 'Oboe': 'Woodwind', 'Piano': 'Strings', 'Theremin':'Electronic', 'nan': np.nan})","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# one hot encode: 'nom_0', 'nom_1', 'nom_2', 'nom_3', 'nom_4'\ntrain = pd.get_dummies(train, prefix=['nom_0', 'nom_1', 'nom_2', 'nom_3', 'nom_4'], columns=['nom_0', 'nom_1', 'nom_2', 'nom_3', 'nom_4'])\ntest = pd.get_dummies(test, prefix=['nom_0', 'nom_1', 'nom_2', 'nom_3', 'nom_4'], columns=['nom_0', 'nom_1', 'nom_2', 'nom_3', 'nom_4'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# binary encoder: 'nom_5', 'nom_6', 'nom_7', 'nom_8', 'nom_9'\nce_bin = ce.BinaryEncoder(cols=['nom_5', 'nom_6', 'nom_7', 'nom_8', 'nom_9'])\ntrain = ce_bin.fit_transform(train)\ntest = ce_bin.fit_transform(test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# encode T/F and Y/N cols: 'bin_3', 'bin_4'\ntrain.bin_3 = train.bin_3.replace({'T': 1, 'F': 0})\ntrain.bin_4 = train.bin_4.replace({'Y': 1, 'N': 0})\ntest.bin_3 = test.bin_3.replace({'T': 1, 'F': 0})\ntest.bin_4 = test.bin_4.replace({'Y': 1, 'N': 0})","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# ordinal encoding: 'ord_1', 'ord_2', 'ord_3'\nord_1 = 'Grandmaster', 'Master', 'Expert', 'Novice', 'Contributor'\ntrain.ord_1 = train.ord_1.replace({'Grandmaster': 5, 'Master': 4, 'Expert': 3, 'Novice': 2, 'Contributor': 1, 'nan': np.nan})\ntest.ord_1 = test.ord_1.replace({'Grandmaster': 5, 'Master': 4, 'Expert': 3, 'Novice': 2, 'Contributor': 1, 'nan': np.nan})","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# ord_2 = 'Lava Hot', 'Boiling Hot', 'Hot', 'Warm', 'Cold', 'Freezing'\n#col_two_list = X_train.ord_2.unique()\ntrain.ord_2 = train.ord_2.replace({'Lava Hot': 6, 'Boiling Hot': 5, 'Hot': 4, 'Warm': 3, 'Cold': 2, 'Freezing': 1, 'nan': np.nan})\ntest.ord_2 = test.ord_2.replace({'Lava Hot': 6, 'Boiling Hot': 5, 'Hot': 4, 'Warm': 3, 'Cold': 2, 'Freezing': 1, 'nan': np.nan})","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# ord_3 : ['c' 'e' 'm' 'd' 'b' 'o' 'i' 'n' 'f' 'k' 'l' nan 'h' 'a' 'g' 'j'] = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o'\n#col_three_list = X_train.ord_3.unique()\ntrain.ord_3 = train.ord_3.replace({'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, \n                                       'g': 7, 'h': 8, 'i': 9, 'j': 10, 'k': 11, 'l': 12,\n                                       'm': 13, 'n': 14, 'o': 15})\ntest.ord_3 = test.ord_3.replace({'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, \n                                       'g': 7, 'h': 8, 'i': 9, 'j': 10, 'k': 11, 'l': 12,\n                                       'm': 13, 'n': 14, 'o': 15})","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# map ord 4 to numerical\ntrain['ord_4'].fillna('ZNaN', inplace=True)\ncol_four_list = train.ord_4.unique()\ncol_four_list.sort()\ndict_ord4 = {col_four_list[i] :i for i in range(0, len(col_four_list))}\ntrain.ord_4 = train.ord_4.replace(dict_ord4)\ntest.ord_4 = test.ord_4.replace(dict_ord4)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# replace 'ZNan' with NaN\ntrain.ord_4 = train.ord_4.replace({26: np.nan})\ntest.ord_4 = test.ord_4.replace({26: np.nan})","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# map ord 5 to numerical\ntrain['ord_5'].fillna('zzzNaN', inplace=True)\ncol_five_list = train.ord_5.unique()\ncol_five_list.sort()\ndict_ord5 = {col_five_list[i] : i for i in range(0, len(col_five_list))}\ntrain.ord_5 = train.ord_5.replace(dict_ord5)\ntest.ord_5 = test.ord_5.replace(dict_ord5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# replace 'zzzNaN' with NaN\ntrain.ord_5 = train.ord_5.replace({190: np.nan})\ntest.ord_5 = test.ord_5.replace({190: np.nan})","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Imputation"},{"metadata":{"trusted":true},"cell_type":"code","source":"# imp_mean = IterativeImputer(random_state=0)\n# train_imputed = imp_mean.fit_transform(train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"simple_imputer = SimpleImputer(missing_values=np.nan, strategy='mean')\ntrain_imputed = simple_imputer.fit_transform(train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_imputed = pd.DataFrame(train_imputed, index=train.index, columns=train.columns)\ntrain_imputed.head(5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# test_imputed = simple_imputer.fit_transform(test)\n# test_imputed = pd.DataFrame(test, index=test.index, columns=train.columns)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_imputed['ord_1'] = pd.to_numeric(train_imputed['ord_1'])\ntrain_imputed['ord_2'] = pd.to_numeric(train_imputed['ord_2'])\ntrain_imputed['ord_4'] = pd.to_numeric(train_imputed['ord_4'])\ntrain_imputed['ord_5'] = pd.to_numeric(train_imputed['ord_5'])","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## XGBoost"},{"metadata":{"trusted":true},"cell_type":"code","source":"xg_reg = xgb.XGBRegressor(objective = 'binary:logistic', \n                          verbosity = '1', \n                          eta = 0.7, \n                          max_depth = 3)\nxg_reg.fit(train_imputed,train_y)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test['ord_1'] = pd.to_numeric(test['ord_1'])\ntest['ord_2'] = pd.to_numeric(test['ord_2'])\ntest['ord_4'] = pd.to_numeric(test['ord_4'])\ntest['ord_5'] = pd.to_numeric(test['ord_5'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"preds = xg_reg.predict(test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#print(roc_auc_score(test,preds))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission = pd.DataFrame({'id': test_id, 'target': preds})\nsubmission.to_csv('submission.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}