{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"#import pandas as pd\nimport warnings \nwarnings.filterwarnings(action=\"ignore\")\nfrom sklearn import preprocessing\nclass CategoricalFeatures:\n    def __init__(self,df,categorical_features, encoding_type,handle_na=False):\n        self.df = df\n        self.cat_feats = categorical_features\n        self.enc_type = encoding_type\n        self.handle_na = handle_na\n        self.label_encoders = dict()\n        self.binary_encoders = dict()\n        self.ohe = None\n        \n        if self.handle_na:\n            \n            for c in self.cat_feats:\n                \n                self.df.loc[:, c] = self.df.loc[:,c].astype(str).fillna(\"-9999999\")\n            self.output_df = self.df.copy(deep=True)\n    \n    def _label_encoding(self):\n        for c in self.cat_feats:\n            \n            lbl = preprocessing.LabelEncoder()\n            lbl.fit(self.df[c].values)\n            self.output_df.loc[:,c]=lbl.transform(self.df[c].values)\n            self.label_encoders[c]=lbl\n        return self.output_df\n    \n    def _label_binarization(self):\n        for c in self.cat_feats:\n            lbl = preprocessing.LabelBinarizer()\n            lbl.fit(self.df[c].values)\n            val = lbl.transform(self.df[c].values)\n            self.output_df = self.output_df.drop(c,axis=1)\n            for j in range(val.shape[1]):\n                new_col_name = c + f\"__bin_{j}\"\n                self.output_df[new_col_name] = val[:,j]\n            self.binary_encoders[c]=lbl\n        return self.output_df\n    \n    def _one_hot(self):\n        ohe = preprocessing.OneHotEncoder()\n        ohe.fit(self.df[self.cat_feats].values)\n        return ohe.transform(self.df[self.cat_feats].values)\n    \n    def fit_transform(self):\n        if self.enc_type==\"label\":\n            return self._label_encoding()\n        elif self.enc_type==\"binary\":\n            return self._label_binarization()\n        elif self.enc_type==\"ohe\":\n            return self._one_hot()\n        else:\n            raise Exception(\"Encoding type not understood\")\n    \n    def transform(self, dataframe):\n        if self.handle_na:\n            for c in self.cat_feats:\n                dataframe.loc[:,c] = dataframe.loc[:,c].astype(str).fillna(\"-99999999\")\n            \n        \n        if self.enc_type==\"label\":\n            for c, lbl in self.label_encoders.items():\n                dataframe.loc[:,c] = lbl.transform(dataframe[c].values)\n            return dataframe\n        elif self.enc_type ==\"binary\":\n            for c, lbl in self.binary_encoders.items():\n                val = lbl.transform(dataframe[c].values)\n                dataframe = dataframe.drop(c, axis=1)\n                \n                for j in range(val.shape[1]):\n                    new_col_name = c + f\"__bin_{j}\"\n                    dataframe[new_col_name] = val[:, j]\n            \n            return dataframe\n        elif self.enc_type == \"ohe\":\n            return self.ohe(dataframe[self.cat_feats].values)\n        else:\n            raise Exception(\"Encoding type not understood\")\n    \n\nif __name__==\"__main__\":\n    import pandas as pd\n    from sklearn import linear_model\n    df = pd.read_csv(\"../input/cat-in-the-dat-ii/train.csv\")\n    df_test = pd.read_csv(\"../input/cat-in-the-dat-ii/test.csv\")\n    sample = pd.read_csv(\"../input/cat-in-the-dat-ii/sample_submission.csv\")\n    \n    train_len = len(df)\n    df_test[\"target\"] = -1\n    full_data = pd.concat([df, df_test])\n    \n    cols = [c for c in df.columns if c not in[\"id\",\"target\"]]\n    \n    cat_feats = CategoricalFeatures(full_data,\n                                     categorical_features=cols,\n                                      encoding_type=\"ohe\",\n                                      handle_na=True)\n    full_data_transformed = cat_feats.fit_transform()\n    \n    X = full_data_transformed[:train_len,:]\n    X_test = full_data_transformed[train_len:,:]\n    \n    clf = linear_model.LogisticRegression()\n    clf.fit(X, df.target.values)\n    preds = clf.predict_proba(X_test)[:,1]\n    \n    print(preds)\n    \n   # sample.loc[:,\"target\"] = preds\n   # sample.to_csv(\"submission_csv\", index=False)\n    \n        ","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"sample.loc[:,\"target\"] = preds\nsample.to_csv(\"submission_csv\", index=False)\n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(sample.to_csv)","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}